diff --git a/build.sh b/build.sh
index acce01d66..2af146afc 100644
--- a/build.sh
+++ b/build.sh
@@ -1,3 +1,11 @@
-NODE_OPTIONS=--max-old-space-size=14096 npm run build
+# 先切换到指定的 Node.js 版本 sudo n
+NODE_OPTIONS=--max-old-space-size=24096 npm run build
 
-# 优惠券地址；https://bugstack.cn/images/article/zsxq/zsxq-youhuiquan.png
\ No newline at end of file
+# 优惠券地址；https://bugstack.cn/images/article/zsxq/zsxq-youhuiquan.png
+# node 版本切换；https://www.cnblogs.com/fengchong0925/p/18489658
+# 全局安装；npm install -g n
+# 安装指定node版本；sudo -E n 18.16.0
+# 查看已安装的版本列表；n list
+# 删除指定版本；n rm 16.13.2
+# 切换node版本；sudo n
+# 查看切换版本；node -v npm -v
\ No newline at end of file
diff --git a/docs/.vuepress/components/LockArticle.vue b/docs/.vuepress/components/LockArticle.vue
index dfbfe877f..cbebdc22f 100644
--- a/docs/.vuepress/components/LockArticle.vue
+++ b/docs/.vuepress/components/LockArticle.vue
@@ -95,7 +95,7 @@
                                 t._lock(articleObj);
                             } else {
                                 t._unlock(articleObj);
-                                t.setCookie("_unlock", "success", 7);
+                                t.setCookie("_unlock", "success", 45);
                             }
                         },
                         error: function (data) {
@@ -164,16 +164,16 @@
 
             },
             getToken: async function () {
-				// 浏览器 Cookie true 不限制
-				if(navigator.cookieEnabled){
-					let value = this.getCookie('BAEID');
-					if (!value) {
-						return await this.getFingerprintId();
-					}
-					return value.substring(value.length - 6).toUpperCase();
-				} else{
-					return await this.getFingerprintId();
-				}
+                // 浏览器 Cookie true 不限制
+                if(navigator.cookieEnabled){
+                  let value = this.getCookie('BAEID');
+                  if (!value) {
+                    return await this.getFingerprintId();
+                  }
+                  return value.substring(value.length - 6).toUpperCase();
+                } else{
+                  return await this.getFingerprintId();
+                }
                 // return await this.getFingerprintId();
             },
             getFingerprintId: function () {
@@ -205,9 +205,9 @@
                 if (parts.length === 2)
                     return parts.pop().split(";").shift();
             },
-            setCookie: function (name, value, hours){
+            setCookie: function (name, value, day){
                 let exp = new Date();
-                exp.setTime(exp.getTime() + hours*60*60*1000);
+                exp.setTime(exp.getTime() + day*24*60*60*1000);
                 // ;path=/ cookie全站有效
                 document.cookie = name + "="+ escape (value) + ";path=/;expires=" + exp.toGMTString();
             },
diff --git a/docs/.vuepress/components/RoadMap.vue b/docs/.vuepress/components/RoadMap.vue
index 700d00053..71cd5ab96 100644
--- a/docs/.vuepress/components/RoadMap.vue
+++ b/docs/.vuepress/components/RoadMap.vue
@@ -1867,7 +1867,7 @@
                                  src="https://bugstack.cn/images/roadmap/08-测试/082-性能测试/1-Jemeter/images/Jemeter.png">
                             <a href="https://jmeter.apache.org/" target="_blank"
                                style="color:black;text-decoration:none;">
-                                <span>Jemeter</span>
+                                <span>JMeter</span>
                             </a>
                         </div>
                     </div>
diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js
index 46fe5a90d..46212e350 100755
--- a/docs/.vuepress/config.js
+++ b/docs/.vuepress/config.js
@@ -33,7 +33,7 @@ module.exports = {
         "/": {
             lang: "zh-CN",
             title: "小傅哥 bugstack 虫洞栈",
-            description: "包含: Java 基础，面经手册，Netty4.x，手写Spring，用Java实现JVM，重学Java设计模式，SpringBoot中间件开发，IDEA插件开发，Lottery抽奖系统，字节码编程..."
+            description: "包含: Java 基础，面经手册，Netty4.x，手写MyBatis，用Java实现JVM，重学Java设计模式，SpringBoot中间件开发，IDEA插件开发，大营销抽奖系统，Java 实战项目训练，字节码编程..."
         }
     },
     head: [
@@ -47,7 +47,7 @@ module.exports = {
         ["meta", {"http-equiv": "Expires", content: "0"}],
         ["meta", {
             name: "keywords",
-            content: "小傅哥, bugstack 虫洞栈, 实战项目, 应用项目, 面试项目, DDD抽奖系统，数据结构，重学Java设计模式, 字节码编程, 中间件, 手写Spring, 手写MyBatis，Java基础, 面经手册，Java面试题，API网关，SpringBoot Stater, ChatGPT"
+            content: "欢迎来到小傅哥的编程世界，这里是bugstack虫洞栈！无论你是Java初学者还是资深开发者，我们都为你准备了丰富的学习资源和实战项目，包括Java基础教程、实战项目指南、应用项目开发、Java面试题解析、重学Java设计模式、字节码编程、手写Spring与MyBatis、API网关与中间件、DDD抽奖系统、SpringBoot Starter开发，以及ChatGPT与AI技术的应用。我们致力于为你提供最优质的学习体验，帮助你在Java开发的道路上不断进步。欢迎访问我们的官方网站获取更多资源，并加入我们的社交媒体平台，与全球开发者一起交流学习。"
         }],
         ["meta", {name: "apple-mobile-web-app-capable", content: "yes"}],
         ['script',
@@ -185,7 +185,7 @@ module.exports = {
                         text: '导读', link: '/md/other/guide-to-reading.md'
                     },
                     {
-                        text: '路书', link: '/md/road-map/road-map.md'
+                        text: '编程路书', link: '/md/road-map/road-map.md'
                     },
                     {
                         text: '算法',
@@ -290,23 +290,23 @@ module.exports = {
                             }
                         ]
                     },
-                    {
-                        text: '中间件',
-                        items: [
-                            {
-                                text: 'SpringBoot 中间件开发',
-                                link: '/md/assembly/middleware/2019-12-02-SpringBoot服务治理中间件之统一白名单验证.md'
-                            },
-                            {
-                                text: 'IDEA Plugin 开发手册',
-                                link: '/md/assembly/idea-plugin/2021-08-27-技术调研，IDEA 插件怎么开发？.md'
-                            },
-                            {
-                                text: 'API网关：中间件设计和实践',
-                                link: '/md/assembly/api-gateway/api-gateway.md'
-                            }
-                        ]
-                    },
+                    // {
+                    //     text: '中间件',
+                    //     items: [
+                    //         {
+                    //             text: 'SpringBoot 中间件开发',
+                    //             link: '/md/assembly/middleware/2019-12-02-SpringBoot服务治理中间件之统一白名单验证.md'
+                    //         },
+                    //         {
+                    //             text: 'IDEA Plugin 开发手册',
+                    //             link: '/md/assembly/idea-plugin/2021-08-27-技术调研，IDEA 插件怎么开发？.md'
+                    //         },
+                    //         {
+                    //             text: 'API网关：中间件设计和实践',
+                    //             link: '/md/assembly/api-gateway/api-gateway.md'
+                    //         }
+                    //     ]
+                    // },
                     {
                         text: 'Netty 4.x',
                         items: [
@@ -371,6 +371,18 @@ module.exports = {
                         items: [
                             {
                                 text: '业务类型', items: [
+                                    {
+                                        text: 'DeepSeek RAG&MCP&Agent 智能体（新）',
+                                        link: '/md/project/ai-knowledge/ai-knowledge.md'
+                                    },
+                                    {
+                                        text: '拼团交易平台系统（新）',
+                                        link: '/md/project/group-buy-market/group-buy-market.md'
+                                    },
+                                    {
+                                        text: '小型支付电商系统',
+                                        link: '/md/project/s-pay-mall/s-pay-mall.md'
+                                    },
                                     {
                                         text: '大营销平台系统',
                                         link: '/md/project/big-market/big-market.md'
@@ -395,6 +407,10 @@ module.exports = {
                             },
                             {
                                 text: '组件类型', items: [
+                                    {
+                                        text: '通用技术组件 - 🔧扳手工程',
+                                        link: 'https://bugstack.cn/md/zsxq/project/xfg-wrench.html'
+                                    },
                                     {
                                         text: 'OpenAI 代码自动评审',
                                         link: 'https://bugstack.cn/md/zsxq/project/openai-code-review.html'
@@ -482,7 +498,7 @@ module.exports = {
                                 text: '插件', items: [
                                     {
                                         text: '💱 IDEA Plugin vo2dto —— 对象转换插件',
-                                        link: '/md/product/idea-plugin/vo2dto.md'
+                                        link: '/md/product/idea-plugin/vo2dto-v2.5.5.md'
                                     },
                                 ]
                             },
@@ -541,6 +557,9 @@ module.exports = {
                     "/md/project/im/": getBarProjectIM(),
                     "/md/project/chatbot-api/": getBarProjectChatBotApi(),
                     "/md/project/big-market/": getBarBigMarket(),
+                    "/md/project/s-pay-mall/": getBarSPayMall(),
+                    "/md/project/group-buy-market/": getBarGroupBuyMarket(),
+                    "/md/project/ai-knowledge/": getBarAiRagKnowledge(),
                     "/md/project/ddd-scene-solution/": getBarDDDSceneSolution(),
                     "/md/zsxq/": getBarZSXQ(),
                     "/md/product/": getBarProduct(),
@@ -570,16 +589,17 @@ function genBarOther() {
 function genBarGuide() {
     return [
         {
-            title: "简明教程(1)",
+            title: "简明教程(3)",
             collapsable: false,
-            sidebarDepth: 2,
+            sidebarDepth: 3,
             children: [
                 "road-map.md",
-                "introduce.md"
+                "introduce.md",
+                "cainiao.md",
             ]
         },
         {
-            title: "工程脚手架(1)",
+            title: "工程脚手架(2)",
             collapsable: false,
             sidebarDepth: 0,
             children: [
@@ -588,13 +608,14 @@ function genBarGuide() {
             ]
         },
         {
-            title: "系统架构(6)",
+            title: "系统架构(9)",
             collapsable: false,
             sidebarDepth: 0,
             children: [
                 "mvc.md",
                 "ddd-guide-01.md",
                 "ddd-guide-02.md",
+                "ddd-guide-03.md",
                 "ddd.md",
                 "ddd-model.md",
                 "mvc2ddd.md",
@@ -603,20 +624,25 @@ function genBarGuide() {
             ]
         },
         {
-            title: "开发环境(6)",
+            title: "开发环境(10)",
             collapsable: false,
             sidebarDepth: 0,
             children: [
+                "tool.md",
                 "intellij-idea.md",
                 "maven.md",
+                "maven-central.md",
                 "git.md",
                 "github.md",
                 "gitcode.md",
                 "gitee.md",
+                "mac.md",
+                "nas.md",
+                "trae.md",
             ]
         },
         {
-            title: "开发技术(14)",
+            title: "开发技术(19)",
             collapsable: true,
             sidebarDepth: 0,
             children: [
@@ -628,6 +654,7 @@ function genBarGuide() {
                 "kafka.md",
                 "quartz.md",
                 "mysql.md",
+                "mysql-time-zone.md",
                 "db-router.md",
                 "sharding-jdbc.md",
                 "connection-pool.md",
@@ -635,10 +662,23 @@ function genBarGuide() {
                 "redis.md",
                 "ignite.md",
                 "canal.md",
+                "springcloud-feign.md",
+                "springcloud-stream.md",
+                "springcloud-bus.md",
             ]
         },
         {
-            title: "常用类库(5)",
+            title: "授权框架(3)",
+            collapsable: true,
+            sidebarDepth: 0,
+            children: [
+                "spring-security.md",
+                "spring-oauth2.md",
+                "spring-oauth2-sso-01.md",
+            ]
+        },
+        {
+            title: "常用类库(6)",
             collapsable: true,
             sidebarDepth: 0,
             children: [
@@ -647,41 +687,58 @@ function genBarGuide() {
                 "http.md",
                 "ratelimiter.md",
                 "spring-ai.md",
+                "disruptor.md",
             ]
         },
         {
-            title: "工程测试(2)",
+            title: "工程测试(4)",
             collapsable: true,
             sidebarDepth: 0,
             children: [
                 "mock.md",
                 "jmeter.md",
+                "intellij-idea-remote-jvm-debug.md",
+                "arex-test.md",
             ]
         },
         {
-            title: "质量监控(3)",
+            title: "质量监控(7)",
             collapsable: true,
             sidebarDepth: 0,
             children: [
                 "skywalking.md",
                 "grafana.md",
                 "elk.md",
+                "dump-mat.md",
+                "dump-visualvm.md",
+                "arthas.md",
+                "13scan-jdumpspider.md",
             ]
         },
         {
-            title: "发布部署(8)",
+            title: "发布部署(19)",
             collapsable: true,
             sidebarDepth: 0,
             children: [
+                "cloud-server.md",
                 "linux.md",
+                "1panel.md",
+                "docker-what.md",
                 "docker.md",
+                "docker-install.md",
                 "portainer.md",
-                "nginx.md",
-                "ssl.md",
-                "jenkins.md",
-                "buddy.md",
+                "aliyun-workbench.md",
                 "github-actions-workflows.md",
+                "buddy.md",
                 "private-docker-hub.md",
+                "docker-idea.md",
+                "jenkins.md",
+                "frp.md",
+                "nginx.md",
+                "ssl.md",
+                "ssl-httpsok.md",
+                "ollama.md",
+                "aigc.md",
             ]
         },
         {
@@ -1125,6 +1182,7 @@ function genBarDevelopDesignPattern() {
             sidebarDepth: 0,
             children: [
                 "2022-03-12-重学Java设计模式B站视频.md",
+                "2024-08-25-chain-tree.md",
             ]
         },
         {
@@ -1751,9 +1809,10 @@ function getBarZSXQ() {
             children: [
                 "introduce.md",
                 "material/guide.md",
-                "material/student-learn-all.md",
+                // "material/student-learn-all.md",
                 "material/student-learn-line.md",
-                "material/student-learn-recruit.md",
+                // "material/student-learn-recruit.md",
+                "material/student-learn-advanced.md",
             ]
         },
         {
@@ -1774,6 +1833,9 @@ function getBarZSXQ() {
             collapsable: false,
             sidebarDepth: 0,
             children: [
+                "project/ai-knowledge.md",
+                "project/group-buy-market.md",
+                "project/s-pay-mall.md",
                 "project/big-market.md",
                 "project/chatgpt.md",
                 "project/lottery.md",
@@ -1786,6 +1848,7 @@ function getBarZSXQ() {
             collapsable: false,
             sidebarDepth: 0,
             children: [
+                "project/xfg-wrench.md",
                 "project/openai-code-review.md",
                 "project/business-behavior-monitor.md",
                 "project/dynamic-thread-pool.md",
@@ -1846,6 +1909,7 @@ function getBarZSXQ() {
             collapsable: true,
             sidebarDepth: 0,
             children: [
+                "memorabilia/sideline.md",
                 "memorabilia/seven-thousand.md",
                 "memorabilia/ten-thousand.md",
                 "memorabilia/overall.md",
@@ -1855,6 +1919,10 @@ function getBarZSXQ() {
                 "memorabilia/java-resume-Project.md",
                 "memorabilia/student-offer.md",
                 "memorabilia/project-plan-v2406.md",
+                "memorabilia/xiaofuge-team.md",
+                "memorabilia/java-interview-experience.md",
+                "memorabilia/campus-recruitment-offer.md",
+                "memorabilia/job-hire-jd.md",
             ]
         }
     ]
@@ -1890,6 +1958,7 @@ function getBarProduct() {
             children: [
                 "idea-plugin/vo2dto.md",
                 "idea-plugin/vo2dto-v2.5.1.md",
+                "idea-plugin/vo2dto-v2.5.5.md",
             ]
         },
     ]
@@ -2155,6 +2224,260 @@ function getBarProjectChatGPT() {
     ]
 }
 
+function getBarAiRagKnowledge() {
+    return [
+        {
+            title: "介绍",
+            collapsable: false,
+            sidebarDepth: 0,
+            children: [
+                "ai-knowledge.md",
+                "notes.md",
+                "promotion/AI MCP 已经帮我“干活”了！.md",
+                "promotion/AI MCP 再这么用下去，可就要”创业“变现了呀！.md",
+            ]
+        },
+        {
+            title: "1阶段 RAG spring-ai v0.8.1",
+            collapsable: false,
+            sidebarDepth: 0,
+            children: [
+                "第1节：AI RAG 知识库，项目介绍.md",
+                "第2节：初始化知识库工程&提交代码.md",
+                "第3接：Ollama DeepSeek 流式应答接口实现.md",
+                "第4节：Ollama DeepSeek 流式应答页面对接.md",
+                "第5节：Ollama RAG 知识库上传、解析和验证.md",
+                "第6节：Ollama RAG 知识库接口服务实现.md",
+                "第7节：基于AI工具，设计知识库UI和接口对接.md",
+                "第8节：Git仓库代码库解析到知识库.md",
+                "第9节：扩展OpenAI模型对接，以及完整AI对接.md",
+                "第10节：云服务器部署知识库（Docker、Nginx）.md",
+            ]
+        },
+        {
+            title: "2阶段 MCP spring-ai v1.0.0",
+            collapsable: false,
+            sidebarDepth: 0,
+            children: [
+                "第11节：吃上细糠，升级SpringAI框架.md",
+                "第12节：康庄大道，上手 AI MCP 工作流.md",
+                "第13节，道山学海，实现MCP自动发帖服务.md",
+                "第14节：海纳百川，上线MCP自动发帖服务.md",
+                "第15节：川流不息，实现MCP微信公众号消息通知服务.md",
+                "第16节：息息相通，MCP 服务部署上线（sse 模式）.md",
+            ]
+        },
+        {
+            title: "3阶段 Agent spring-ai v1.0.0",
+            collapsable: false,
+            sidebarDepth: 0,
+            children: [
+                "agent/第3-0节：AiAgent 项目介绍和系统演示.md",
+                "agent/第3-1节：Ai Agent 业务流程、系统架构、库表设计说明.md",
+                "agent/第3-2节：初始化项目工程.md",
+                "agent/第3-3节：AiAgent测试案例.md",
+                "agent/第3-4节：根据AiAgent案例，设计库表.md",
+                "agent/第3-5节：多数据源和Mapper配置.md",
+                "agent/第3-6节：数据加载模型设计.md",
+                "agent/第3-7节：动态实例化客户端API.md",
+                "agent/第3-8节：动态实例化对话模型.md",
+                "agent/第3-9节：动态实例化对话客户端.md",
+                "agent/第3-10节：Agent执行链路分析.md",
+                "agent/第3-11节：Agent执行链路设计.md",
+                "agent/第3-12节：Agent服务接口和UI对接.md",
+                "agent/第3-13节，Agent-ELK日志分析场景.md",
+                "agent/第3-14节，Agent-Prometheus监控分析场景.md",
+            ]
+        },
+        {
+            title: "扩展",
+            collapsable: false,
+            sidebarDepth: 0,
+            children: [
+                "ext/ai-agent-flowgram.md",
+                "ext/ai-agent-mcp-auth.md",
+                "ext/ai-agent-auto.md",
+                "ext/ai-agent-notes.md",
+            ]
+        }
+    ]
+}
+
+function getBarGroupBuyMarket() {
+    return [
+        {
+            title: "介绍",
+            collapsable: false,
+            sidebarDepth: 0,
+            children: [
+                "group-buy-market.md",
+                "notes.md",
+                "qa.md",
+            ]
+        },
+        {
+            title: "第1部分：系统设计",
+            collapsable: false,
+            sidebarDepth: 0,
+            children: [
+                "第1-1节：拼团需求分析.md",
+                "第1-2节：拼团库表设计.md",
+                "第1-3节：研发系统设计.md",
+            ]
+        },
+        {
+            title: "第2部分：服务实现",
+            collapsable: false,
+            sidebarDepth: 0,
+            children: [
+                "第2-1节：初始工程搭建.md",
+                "第2-2节：试算模型抽象模板设计.md",
+                "第2-3节：多线程异步数据加载.md",
+                "第2-4节：策略模式优惠折扣计算.md",
+                "第2-5节：人群标签数据采集.md",
+                "第2-6节：拆分库表关联关系.md",
+                "第2-7节：人群标签节点过滤.md",
+                "第2-8节：动态配置开关操作.md",
+                "第2-9节：拼团交易营销锁单.md",
+                "第2-10节：责任链抽象模板设计.md",
+                "第2-11节：交易规则责任链过滤.md",
+                "第2-12节：拼团组队结算统计.md",
+                "第2-13节：交易结算责任链过滤.md",
+                "第2-14节：拼团回调通知任务.md",
+                "第2-15节：根据UI展示封装接口.md",
+                "第2-16节：引入RabbitMQ分布式多端消费.md",
+                "第2-17节：发送MQ结算消息.md",
+                "第2-18节：消费MQ结算消息.md",
+                "第2-19节：独占锁和无锁化场景运用.md",
+                "第2-20节：函数式数据缓存和降级到DB处理.md",
+                "第2-21节：引入扳手工程.md",
+                "第2-22节：动态限流配置.md",
+                "第2-23节：ELK+AI MCP检索.md",
+                "第2-24节：系统监控+AIMCP分析.md",
+                "第2-25节：逆向流程场景分析.md",
+                "第2-26节：未支付退单流程.md",
+                "第2-27节：已支付未成团退单.md",
+                "第2-28节：已支付已成团退单.md",
+                "第2-29节：退单锁单量恢复.md",
+                "第2-30节：设计模式重构退单.md",
+                "第2-31节：退订接口和定时任务.md",
+            ]
+        },
+        {
+            title: "第3部分：外部对接",
+            collapsable: false,
+            sidebarDepth: 0,
+            children: [
+                "第3-1节：DeepSeek设计拼团UI.md",
+                "第3-2节：DeepSeek处理UI与接口对接.md",
+                "第3-3节：小商城对接营销锁单.md",
+                "第3-4节：小商城对接营销结算.md",
+                "第3-5节：小商城UI与接口对接.md",
+                "第3-6节：通过浏览器指纹获取登录ticket无痕登录.md",
+                "第3-7节：用户订单列表和退单UI.md",
+                "第3-8节：退单退款服务对接.md",
+            ]
+        },
+        {
+            title: "第4部分：开发运维",
+            collapsable: false,
+            sidebarDepth: 0,
+            children: [
+                "第4-1节：第1阶段部署云环境.md",
+                "第4-2节：第2阶段部署云环境.md",
+                "第4-3节：第3阶段部署云环境.md",
+            ]
+        },
+        {
+            title: "番外 - 课程阶段产物",
+            collapsable: false,
+            sidebarDepth: 0,
+            children: [
+                "promotion/group-buy-market-v1.md",
+                "promotion/group-buy-market-v2.md",
+                "promotion/group-buy-market-v3.md",
+                "promotion/group-buy-market-v4.md",
+                "promotion/group-buy-market-v5.md",
+                "promotion/group-buy-market-v6.md",
+                "promotion/group-buy-market-v7.md",
+            ]
+        }
+    ]
+}
+
+function getBarSPayMall() {
+    return [
+        {
+            title: "介绍",
+            collapsable: false,
+            sidebarDepth: 0,
+            children: [
+                "s-pay-mall.md",
+            ]
+        },
+        {
+            title: "第1部分：架构理论",
+            collapsable: false,
+            sidebarDepth: 0,
+            children: [
+                "part-1/第1节：DDD 架构概念.md",
+                "part-1/第2节：DDD 建模方法.md",
+                "part-1/第3节：DDD 工程模型.md",
+            ]
+        },
+        {
+            title: "第2部分：需求设计",
+            collapsable: false,
+            sidebarDepth: 0,
+            children: [
+                "part-2/第1节：小型支付商城需求设计.md",
+                "part-2/第2节：支付商城四色建模设计.md",
+                "part-2/第3节：支付订单场景表设计.md",
+            ]
+        },
+        {
+            title: "第3部分：功能实现 MVC",
+            collapsable: false,
+            sidebarDepth: 0,
+            children: [
+                "part-3-mvc/第1节：MVC 工程框架搭建.md",
+                "part-3-mvc/第2节：微信公众号鉴权.md",
+                "part-3-mvc/第3节：登录功能实现.md",
+                "part-3-mvc/第4节：商品下单.md",
+                "part-3-mvc/第5节：对接支付.md",
+                "part-3-mvc/第6节：支付回调.md",
+                "part-3-mvc/第7节：前端页面.md",
+                "part-3-mvc/第8节：Docker构建和部署.md",
+            ]
+        },
+        {
+            title: "第3部分：功能实现 DDD",
+            collapsable: false,
+            sidebarDepth: 0,
+            children: [
+                "part-3-ddd/第1节：DDD 工程框架搭建.md",
+                "part-3-ddd/第2节：DDD 重构，微信公众号鉴权.md",
+                "part-3-ddd/第3节：DDD 重构，登录功能实现.md",
+                "part-3-ddd/第4节：DDD 重构，商品下单.md",
+                "part-3-ddd/第5节：DDD 重构，对接支付.md",
+                "part-3-ddd/第6节：DDD 重构，支付回调.md",
+                "part-3-ddd/第7节：前端页面.md",
+                "part-3-ddd/第8节：Docker构建和部署.md",
+            ]
+        },
+        {
+            title: "第4部分：开发运维",
+            collapsable: false,
+            sidebarDepth: 0,
+            children: [
+                "part-4/第1节：natapp 内网穿透.md",
+                "part-4/第2节：微信公众号测试评审申请.md",
+                "part-4/第3节：支付宝沙箱申请.md",
+            ]
+        }
+    ]
+}
+
 function getBarBigMarket() {
     return [
         {
@@ -2164,7 +2487,9 @@ function getBarBigMarket() {
             children: [
                 "big-market.md",
                 "ddd.md",
+                "system-design-diagram.md",
                 "notes.md",
+                "qa.md",
             ]
         },
         {
@@ -2186,6 +2511,7 @@ function getBarBigMarket() {
                 "dev-ops/第1节：使用脚手架创建工程.md",
                 "dev-ops/第2节：第一阶段完成抽奖部署.md",
                 "dev-ops/第3节：引入Nacos+Dubbo框架.md",
+                "dev-ops/openai_big_market.md",
             ]
         },
         {
@@ -2220,9 +2546,12 @@ function getBarBigMarket() {
                 "api/第25节：积分发奖服务实现.md",
                 "api/第26节：积分领域调额服务.md",
                 "api/第27节：积分支付兑换商品.md",
+                "api/第28节：积分应用场景接口实现.md",
                 "api/第29节：分布式动态配置活动降级.md",
                 "api/第30节：分布式动态限流和熔断.md",
-                "none.md",
+                "api/第31节：分库分表数据同步ES.md",
+                "api/第32节：ES-ORM多数据源配置使用.md",
+                "api/第33节：xxl-job分布式任务调度.md",
             ]
         },
         {
@@ -2240,10 +2569,22 @@ function getBarBigMarket() {
         },
         {
             title: "第5部分：后台管理",
-            collapsable: true,
+            collapsable: false,
+            sidebarDepth: 0,
+            children: [
+                "erp/第1节：初始后台运营页面.md",
+                "erp/第2节：querys模块提供查询接口.md",
+            ]
+        },
+        {
+            title: "第6部分：外部对接",
+            collapsable: false,
             sidebarDepth: 0,
             children: [
-                "none.md",
+                "distributed/第1节：对接OpenAI项目额度奖品接口.md",
+                "distributed/第2节：营销页面接口封装.md",
+                "distributed/第3节：RPC接口对接支付返利.md",
+                "distributed/第4节：活动上架发布预热对接.md",
             ]
         },
         {
@@ -2256,6 +2597,8 @@ function getBarBigMarket() {
                 "extra/big-market-v3.md",
                 "extra/big-market-v4.md",
                 "extra/big-market-v5.md",
+                "extra/big-market-v6.md",
+                "extra/big-market-v7.md",
             ]
         }
     ]
@@ -2377,6 +2720,7 @@ function genBarAbout() {
                 "me/2022-01-27-2021年，小傅哥の年终总结！.md",
                 "me/2023-01-02-2022年，小傅哥の年终总结.md",
                 "me/2024-02-07-2023年，小傅哥の年终总结.md",
+                "me/2025-01-05-2024年，小傅哥の年终总结！.md",
                 "me/2020-07-25-12天，这本《重学Java设计模式》PDF书籍下载量9k，新增粉丝1400人，Github上全球推荐榜.md",
                 "me/2020-08-25-13年毕业，用两年时间从外包走进互联网大厂.md",
                 "me/2020-10-09-让人怪不好意思的，粉丝破万，用了1年！.md",
@@ -2395,6 +2739,8 @@ function genBarAbout() {
                 "me/2023-05-07-51假期代码旅游.md",
                 "me/2024-01-09-从T4到T8，4年时间，4次晋升。技术提升最快的那几年，我做了什么？.md",
                 "me/2024-01-28-大厂架构师小傅哥，上学时都做过哪些项目？.md",
+                "me/2024-11-17-gold-content.md",
+                "me/2025-07-03-嘎嘎强，嘎嘎哒学v2.0.md",
             ]
         },
         {
@@ -2440,6 +2786,7 @@ function genBarAbout() {
                 "job/2023-03-19-你简历没项目，你得遭老罪喽！.md",
                 "job/2023-07-11-面试官都问你啥了.md",
                 "job/2023-09-13-工作内推.md",
+                "job/2024-09-08-阿里P7，就是很多人的天花板吗？.md",
             ]
         }
     ];
diff --git a/docs/.vuepress/public/images/article/about/about-241117-01.gif b/docs/.vuepress/public/images/article/about/about-241117-01.gif
new file mode 100644
index 000000000..07bee7721
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-241117-01.gif differ
diff --git a/docs/.vuepress/public/images/article/about/about-241117-02.png b/docs/.vuepress/public/images/article/about/about-241117-02.png
new file mode 100644
index 000000000..c81295834
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-241117-02.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-241117-03.png b/docs/.vuepress/public/images/article/about/about-241117-03.png
new file mode 100644
index 000000000..248346345
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-241117-03.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-241117-04.png b/docs/.vuepress/public/images/article/about/about-241117-04.png
new file mode 100644
index 000000000..c4a64f1e2
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-241117-04.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-241117-05.png b/docs/.vuepress/public/images/article/about/about-241117-05.png
new file mode 100644
index 000000000..ef474068f
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-241117-05.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-241117-06.png b/docs/.vuepress/public/images/article/about/about-241117-06.png
new file mode 100644
index 000000000..1f1d5d2dd
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-241117-06.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-241117-07.png b/docs/.vuepress/public/images/article/about/about-241117-07.png
new file mode 100644
index 000000000..275bd7b5e
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-241117-07.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-250713-01.png b/docs/.vuepress/public/images/article/about/about-250713-01.png
new file mode 100644
index 000000000..86b676bd2
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-250713-01.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-250713-02.png b/docs/.vuepress/public/images/article/about/about-250713-02.png
new file mode 100644
index 000000000..0b2121fe6
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-250713-02.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-250713-03.png b/docs/.vuepress/public/images/article/about/about-250713-03.png
new file mode 100644
index 000000000..3d4172f37
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-250713-03.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-250713-04.png b/docs/.vuepress/public/images/article/about/about-250713-04.png
new file mode 100644
index 000000000..4c81ec588
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-250713-04.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-250713-05.png b/docs/.vuepress/public/images/article/about/about-250713-05.png
new file mode 100644
index 000000000..dbe75d24b
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-250713-05.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-250713-06.png b/docs/.vuepress/public/images/article/about/about-250713-06.png
new file mode 100644
index 000000000..137c4bfa8
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-250713-06.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-250713-07.png b/docs/.vuepress/public/images/article/about/about-250713-07.png
new file mode 100644
index 000000000..7a3ad83a2
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-250713-07.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-250713-08.png b/docs/.vuepress/public/images/article/about/about-250713-08.png
new file mode 100644
index 000000000..12a8db470
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-250713-08.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-job-240908-01.gif b/docs/.vuepress/public/images/article/about/about-job-240908-01.gif
new file mode 100644
index 000000000..c97e3cb2b
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-job-240908-01.gif differ
diff --git a/docs/.vuepress/public/images/article/about/about-job-240908-02.png b/docs/.vuepress/public/images/article/about/about-job-240908-02.png
new file mode 100644
index 000000000..b012d4915
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-job-240908-02.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-job-240908-03.png b/docs/.vuepress/public/images/article/about/about-job-240908-03.png
new file mode 100644
index 000000000..b4fa9e891
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-job-240908-03.png differ
diff --git a/docs/.vuepress/public/images/article/about/about-job-240908-04.png b/docs/.vuepress/public/images/article/about/about-job-240908-04.png
new file mode 100644
index 000000000..c59887462
Binary files /dev/null and b/docs/.vuepress/public/images/article/about/about-job-240908-04.png differ
diff --git "a/docs/.vuepress/public/images/article/about/\345\255\246\344\271\240\350\267\257\347\272\277.xmind" "b/docs/.vuepress/public/images/article/about/\345\255\246\344\271\240\350\267\257\347\272\277.xmind"
deleted file mode 100644
index bec517734..000000000
Binary files "a/docs/.vuepress/public/images/article/about/\345\255\246\344\271\240\350\267\257\347\272\277.xmind" and /dev/null differ
diff --git a/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-01.png b/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-01.png
new file mode 100644
index 000000000..4ec0fba81
Binary files /dev/null and b/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-01.png differ
diff --git a/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-02.png b/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-02.png
new file mode 100644
index 000000000..2f2cf2969
Binary files /dev/null and b/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-02.png differ
diff --git a/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-03.png b/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-03.png
new file mode 100644
index 000000000..851058767
Binary files /dev/null and b/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-03.png differ
diff --git a/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-04.png b/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-04.png
new file mode 100644
index 000000000..df8826f0a
Binary files /dev/null and b/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-04.png differ
diff --git a/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-05.png b/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-05.png
new file mode 100644
index 000000000..63f901f38
Binary files /dev/null and b/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-05.png differ
diff --git a/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-06.png b/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-06.png
new file mode 100644
index 000000000..a2e057da5
Binary files /dev/null and b/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-06.png differ
diff --git a/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-07.png b/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-07.png
new file mode 100644
index 000000000..9a4d858f5
Binary files /dev/null and b/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-07.png differ
diff --git a/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-08.png b/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-08.png
new file mode 100644
index 000000000..95ceb2075
Binary files /dev/null and b/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-08.png differ
diff --git a/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-09.png b/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-09.png
new file mode 100644
index 000000000..e85cebf7d
Binary files /dev/null and b/docs/.vuepress/public/images/article/develop/xfg-dev-tech-design-240528-09.png differ
diff --git a/docs/.vuepress/public/images/article/product/idea-plugin/vo2dto-2.5.5-01.png b/docs/.vuepress/public/images/article/product/idea-plugin/vo2dto-2.5.5-01.png
new file mode 100644
index 000000000..73d0010a8
Binary files /dev/null and b/docs/.vuepress/public/images/article/product/idea-plugin/vo2dto-2.5.5-01.png differ
diff --git a/docs/.vuepress/public/images/article/product/idea-plugin/vo2dto-2.5.5-02.png b/docs/.vuepress/public/images/article/product/idea-plugin/vo2dto-2.5.5-02.png
new file mode 100644
index 000000000..aa70d7799
Binary files /dev/null and b/docs/.vuepress/public/images/article/product/idea-plugin/vo2dto-2.5.5-02.png differ
diff --git a/docs/.vuepress/public/images/article/product/idea-plugin/vo2dto-2.5.5-03.png b/docs/.vuepress/public/images/article/product/idea-plugin/vo2dto-2.5.5-03.png
new file mode 100644
index 000000000..2de7fc584
Binary files /dev/null and b/docs/.vuepress/public/images/article/product/idea-plugin/vo2dto-2.5.5-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-01.png
new file mode 100644
index 000000000..098ba0443
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-02.png
new file mode 100644
index 000000000..0166dd73d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-03.png
new file mode 100644
index 000000000..462074582
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-04.png
new file mode 100644
index 000000000..6e14c37c7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-05.png
new file mode 100644
index 000000000..eaf34b393
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-06.png
new file mode 100644
index 000000000..c0b78cead
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-07.png
new file mode 100644
index 000000000..9ca37f333
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-1-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-01.png
new file mode 100644
index 000000000..f1787ebad
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-02.png
new file mode 100644
index 000000000..66ed25ba4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-03.png
new file mode 100644
index 000000000..c5af04bf3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-04.png
new file mode 100644
index 000000000..0cea30183
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-05.png
new file mode 100644
index 000000000..8b8f05e7e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250517-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-01.png
new file mode 100644
index 000000000..041ea5e40
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-02.png
new file mode 100644
index 000000000..04471e771
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-03.png
new file mode 100644
index 000000000..7e64df5de
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-04.png
new file mode 100644
index 000000000..c03aef592
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-250524-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-01.png
new file mode 100644
index 000000000..7ba5726b9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-02.png
new file mode 100644
index 000000000..f6ad01606
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-03.png
new file mode 100644
index 000000000..5b1bff3ac
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-04.png
new file mode 100644
index 000000000..ca8ef3c05
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-05.png
new file mode 100644
index 000000000..86be9a07d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-06.png
new file mode 100644
index 000000000..99e7b5eda
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-07.png
new file mode 100644
index 000000000..040b9e8e0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-08.png
new file mode 100644
index 000000000..7cf49e15d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250817-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250817-01.png
new file mode 100644
index 000000000..59eb10ce8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250817-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250817-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250817-02.png
new file mode 100644
index 000000000..c80b4e7c7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250817-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-01.png
new file mode 100644
index 000000000..37d03c66d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-02.png
new file mode 100644
index 000000000..a9bcb4f52
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-03.png
new file mode 100644
index 000000000..15ad51b46
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-04.png
new file mode 100644
index 000000000..b2d4bf784
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-05.png
new file mode 100644
index 000000000..500d98e1d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-06.png
new file mode 100644
index 000000000..566e1656e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-07.png
new file mode 100644
index 000000000..cdd40e46b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-knowledge-250413-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-01.png
new file mode 100644
index 000000000..30ef61eed
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-02.gif b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-02.gif
new file mode 100644
index 000000000..b5882a5f3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-02.gif differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-03.png
new file mode 100644
index 000000000..920fb55f3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-04.png
new file mode 100644
index 000000000..30a236c97
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-05.png
new file mode 100644
index 000000000..bf6220631
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-06.png
new file mode 100644
index 000000000..d614b2408
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-07.png
new file mode 100644
index 000000000..11f1b6bf3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-08.png
new file mode 100644
index 000000000..6d05d229e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-0-00.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-0-00.png
new file mode 100644
index 000000000..40b8d60b4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-0-00.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-0-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-0-01.png
new file mode 100644
index 000000000..e0898537b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-0-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-01.png
new file mode 100644
index 000000000..c6a930721
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-02.png
new file mode 100644
index 000000000..00b7723d7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-03.png
new file mode 100644
index 000000000..cccc99bf6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-04.png
new file mode 100644
index 000000000..50ffcda56
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-05.png
new file mode 100644
index 000000000..b911fc0bf
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-01.png
new file mode 100644
index 000000000..63a359a3d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-02.png
new file mode 100644
index 000000000..0b1f728dd
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-03.png
new file mode 100644
index 000000000..0c46d4584
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-04.png
new file mode 100644
index 000000000..b4b0a48f3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-05.png
new file mode 100644
index 000000000..d8e1082ca
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-06.png
new file mode 100644
index 000000000..e858f4225
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-07.png
new file mode 100644
index 000000000..b02198e82
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-08.png
new file mode 100644
index 000000000..9bae5f1eb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-09.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-09.png
new file mode 100644
index 000000000..28f71f95b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-00-1.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-00-1.png
new file mode 100644
index 000000000..8cc6b25f3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-00-1.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-01.png
new file mode 100644
index 000000000..beb65f8d2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-02.png
new file mode 100644
index 000000000..3c369b246
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-03.png
new file mode 100644
index 000000000..314c53cd6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-04.png
new file mode 100644
index 000000000..a7461e5ff
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-01.png
new file mode 100644
index 000000000..7fb5d4c0c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-02.png
new file mode 100644
index 000000000..3747a5e95
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-03.png
new file mode 100644
index 000000000..04eae84ba
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-04.png
new file mode 100644
index 000000000..d86c218f3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-05.png
new file mode 100644
index 000000000..ecc5924a0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-06.png
new file mode 100644
index 000000000..a8830fd11
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-07.png
new file mode 100644
index 000000000..e8206d259
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-08.png
new file mode 100644
index 000000000..43703a9d8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-09.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-09.png
new file mode 100644
index 000000000..63ed1d877
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-10.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-10.png
new file mode 100644
index 000000000..ceeb40ce1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-01.png
new file mode 100644
index 000000000..8ef61d0b8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-02.png
new file mode 100644
index 000000000..1e74edda0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-03.png
new file mode 100644
index 000000000..b8287168e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-04.png
new file mode 100644
index 000000000..ff858d112
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-05.png
new file mode 100644
index 000000000..00bab426f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-06.png
new file mode 100644
index 000000000..e30e7f73f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-12-12-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-01.png
new file mode 100644
index 000000000..289161271
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-02.png
new file mode 100644
index 000000000..93b61ea1e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-03.png
new file mode 100644
index 000000000..1fb1f39e6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-04.png
new file mode 100644
index 000000000..4a6ad8e71
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-05.png
new file mode 100644
index 000000000..9a1c6101b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-06.png
new file mode 100644
index 000000000..9e768ea57
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-07.png
new file mode 100644
index 000000000..302c26ea9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-08.png
new file mode 100644
index 000000000..da53d5a5e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-09.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-09.png
new file mode 100644
index 000000000..1c47aeb22
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-10.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-10.png
new file mode 100644
index 000000000..cd8efba15
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-11.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-11.png
new file mode 100644
index 000000000..17ffdbd97
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-11.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-12.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-12.png
new file mode 100644
index 000000000..639b78f64
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-12.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-13.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-13.png
new file mode 100644
index 000000000..15ba76351
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-13.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-01.png
new file mode 100644
index 000000000..94890772d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-02.png
new file mode 100644
index 000000000..8d3511f57
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-03.png
new file mode 100644
index 000000000..1a2af109d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-04.png
new file mode 100644
index 000000000..399206904
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-05.png
new file mode 100644
index 000000000..5048b623c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-06.png
new file mode 100644
index 000000000..007cb28c4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-07.png
new file mode 100644
index 000000000..a7d6bee54
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-08.png
new file mode 100644
index 000000000..5cf001876
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-09.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-09.png
new file mode 100644
index 000000000..6c0f13816
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-10.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-10.png
new file mode 100644
index 000000000..b42b6d0c4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-11.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-11.png
new file mode 100644
index 000000000..8adb2fd99
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-11.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-12.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-12.png
new file mode 100644
index 000000000..d7a9bd1aa
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-12.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-13.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-13.png
new file mode 100644
index 000000000..4afc08e97
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-13.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-14.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-14.png
new file mode 100644
index 000000000..b7b59dc44
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-14.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-15-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-15-01.png
new file mode 100644
index 000000000..56de64a8a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-15-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-15-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-15-02.png
new file mode 100644
index 000000000..de380b2f2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-15-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-15-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-15-03.png
new file mode 100644
index 000000000..e7538a845
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-15-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-01.png
new file mode 100644
index 000000000..e8509babf
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-02.png
new file mode 100644
index 000000000..4cd82e807
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-03.png
new file mode 100644
index 000000000..24c8d6ab0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-04.png
new file mode 100644
index 000000000..423a0139e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-05.png
new file mode 100644
index 000000000..c8c3f5436
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-06.png
new file mode 100644
index 000000000..3d6941b8b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-07.png
new file mode 100644
index 000000000..00650cf88
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-08.png
new file mode 100644
index 000000000..bd0da8e3b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-09.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-09.png
new file mode 100644
index 000000000..f07968c57
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-10.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-10.png
new file mode 100644
index 000000000..01e6f077b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-11.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-11.png
new file mode 100644
index 000000000..271f30609
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-11.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-12.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-12.png
new file mode 100644
index 000000000..8069b3e3c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-12.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-01.png
new file mode 100644
index 000000000..866ccbb41
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-02.png
new file mode 100644
index 000000000..45c2c2c85
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-03.png
new file mode 100644
index 000000000..9429bd188
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-04.png
new file mode 100644
index 000000000..941040b10
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-05.png
new file mode 100644
index 000000000..c8a83fa53
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-2-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-01.png
new file mode 100644
index 000000000..3b79db58a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-02.png
new file mode 100644
index 000000000..05653bd79
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-03.png
new file mode 100644
index 000000000..978f6a09c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-04.png
new file mode 100644
index 000000000..dce9b6747
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-05.png
new file mode 100644
index 000000000..afa6a6911
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-06.png
new file mode 100644
index 000000000..f810a3118
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-07.png
new file mode 100644
index 000000000..3d4feddab
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-08.png
new file mode 100644
index 000000000..9bcef3f45
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-01.png
new file mode 100644
index 000000000..7283e3aa6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-02.png
new file mode 100644
index 000000000..7727ba881
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-1-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-1-01.png
new file mode 100644
index 000000000..b5bbdce1d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-1-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-1-02.png
new file mode 100644
index 000000000..0fde02b9b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-10-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-10-01.png
new file mode 100644
index 000000000..9baad7c5a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-10-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-10-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-10-02.png
new file mode 100644
index 000000000..9cb07a1d7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-10-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-01.png
new file mode 100644
index 000000000..786e82759
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-02.png
new file mode 100644
index 000000000..f080a05a6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-03.png
new file mode 100644
index 000000000..fb234dc7f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-04.png
new file mode 100644
index 000000000..c5f7f06f4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-01.png
new file mode 100644
index 000000000..9b1aeded8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-02.png
new file mode 100644
index 000000000..040b9e8e0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-03.png
new file mode 100644
index 000000000..5571d3def
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-04.png
new file mode 100644
index 000000000..b71d39e62
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-05.png
new file mode 100644
index 000000000..a67260959
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-06.png
new file mode 100644
index 000000000..7ab41408c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-01.png
new file mode 100644
index 000000000..97f5f090c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-02.png
new file mode 100644
index 000000000..f668aa163
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-03.png
new file mode 100644
index 000000000..76aa86c13
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-04.png
new file mode 100644
index 000000000..794256633
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-05.png
new file mode 100644
index 000000000..1cbff6409
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-06.png
new file mode 100644
index 000000000..15a2fce6b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-07.png
new file mode 100644
index 000000000..94c1b271f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-08.png
new file mode 100644
index 000000000..1c11a1e7c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-01.png
new file mode 100644
index 000000000..fbfb8c474
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-02.png
new file mode 100644
index 000000000..6c678a496
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-03.png
new file mode 100644
index 000000000..7dc85bd09
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-04.png
new file mode 100644
index 000000000..07efe9729
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-05.png
new file mode 100644
index 000000000..be68de99f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-06.png
new file mode 100644
index 000000000..5d28e632e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-07.png
new file mode 100644
index 000000000..b840dc101
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-08.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-08.png
new file mode 100644
index 000000000..eebb64fca
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-09.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-09.png
new file mode 100644
index 000000000..a5fa4c564
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-10.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-10.png
new file mode 100644
index 000000000..f61261e07
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-11.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-11.png
new file mode 100644
index 000000000..dbe8c1660
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-11.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-12.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-12.png
new file mode 100644
index 000000000..46a3431ae
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-12.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-3-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-3-01.png
new file mode 100644
index 000000000..6c72e2f86
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-3-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-3-02.png
new file mode 100644
index 000000000..129843d29
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-3-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-3-03.png
new file mode 100644
index 000000000..c67c42a37
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-4-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-4-01.png
new file mode 100644
index 000000000..b8191bb9e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-4-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-4-02.png
new file mode 100644
index 000000000..9d18d20fb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-01.png
new file mode 100644
index 000000000..3d807a4eb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-02.png
new file mode 100644
index 000000000..757e76d28
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-03.png
new file mode 100644
index 000000000..cbdb71778
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-04.png
new file mode 100644
index 000000000..d15e43a49
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-6-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-6-01.png
new file mode 100644
index 000000000..68d017da8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-6-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-6-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-6-02.png
new file mode 100644
index 000000000..9b23b3a02
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-6-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-6-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-6-03.png
new file mode 100644
index 000000000..b98217de4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-6-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-7-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-7-01.png
new file mode 100644
index 000000000..3f00ca8f6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-7-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-7-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-7-02.png
new file mode 100644
index 000000000..95db900f8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-7-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-8-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-8-01.png
new file mode 100644
index 000000000..fcc03b4ac
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-8-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-8-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-8-02.png
new file mode 100644
index 000000000..67ab78fdd
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-8-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-8-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-8-03.png
new file mode 100644
index 000000000..ef6163179
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-8-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-01.png
new file mode 100644
index 000000000..a50d21c86
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-02.png
new file mode 100644
index 000000000..6e1e117b2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-03.png
new file mode 100644
index 000000000..32cd9c458
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-01.png
new file mode 100644
index 000000000..bd0146c60
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-02.png
new file mode 100644
index 000000000..1530b2440
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-03.png
new file mode 100644
index 000000000..d8fb6c1d8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-04.png
new file mode 100644
index 000000000..604c077b5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-05.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-05.png
new file mode 100644
index 000000000..36a42813d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-06.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-06.png
new file mode 100644
index 000000000..7b146035b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-07.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-07.png
new file mode 100644
index 000000000..3ae3ffa14
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-4-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-5-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-5-01.png
new file mode 100644
index 000000000..127cdd237
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-5-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-5-02.png
new file mode 100644
index 000000000..488843d7c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-5-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-01.png
new file mode 100644
index 000000000..467ce20f0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-02.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-02.png
new file mode 100644
index 000000000..86d1a2178
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-03.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-03.png
new file mode 100644
index 000000000..23bec8fcc
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-04.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-04.png
new file mode 100644
index 000000000..88c466876
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-9-01.png b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-9-01.png
new file mode 100644
index 000000000..496eef7f4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/ai-rag-knowledge/ai-rag-knowledge-9-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-44-01.png b/docs/.vuepress/public/images/article/project/big-market/big-market-44-01.png
new file mode 100644
index 000000000..8a78392db
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-44-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-44-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-44-02.png
new file mode 100644
index 000000000..8a230da47
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-44-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-44-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-44-03.png
new file mode 100644
index 000000000..91f8faf3f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-44-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-44-04.png b/docs/.vuepress/public/images/article/project/big-market/big-market-44-04.png
new file mode 100644
index 000000000..63b4b8454
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-44-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-44-05.png b/docs/.vuepress/public/images/article/project/big-market/big-market-44-05.png
new file mode 100644
index 000000000..54cb31355
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-44-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-44-06.png b/docs/.vuepress/public/images/article/project/big-market/big-market-44-06.png
new file mode 100644
index 000000000..04e476178
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-44-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-44-07.png b/docs/.vuepress/public/images/article/project/big-market/big-market-44-07.png
new file mode 100644
index 000000000..8e4a68dc3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-44-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-44-08.png b/docs/.vuepress/public/images/article/project/big-market/big-market-44-08.png
new file mode 100644
index 000000000..a7dc7d98f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-44-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-45-01.png b/docs/.vuepress/public/images/article/project/big-market/big-market-45-01.png
new file mode 100644
index 000000000..590a2ecc9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-45-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-45-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-45-02.png
new file mode 100644
index 000000000..1c60341ef
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-45-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-46-01.png b/docs/.vuepress/public/images/article/project/big-market/big-market-46-01.png
new file mode 100644
index 000000000..f50f3ee7e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-46-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-46-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-46-02.png
new file mode 100644
index 000000000..5884f213e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-46-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-46-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-46-03.png
new file mode 100644
index 000000000..e4049a5d7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-46-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-46-04.png b/docs/.vuepress/public/images/article/project/big-market/big-market-46-04.png
new file mode 100644
index 000000000..2ddfea5a3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-46-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-46-05.png b/docs/.vuepress/public/images/article/project/big-market/big-market-46-05.png
new file mode 100644
index 000000000..684f87747
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-46-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-46-06.png b/docs/.vuepress/public/images/article/project/big-market/big-market-46-06.png
new file mode 100644
index 000000000..5d93f05c2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-46-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-47-01.png b/docs/.vuepress/public/images/article/project/big-market/big-market-47-01.png
new file mode 100644
index 000000000..12bf636a2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-47-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-47-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-47-02.png
new file mode 100644
index 000000000..7cc1be0a3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-47-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-47-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-47-03.png
new file mode 100644
index 000000000..bf58aaad2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-47-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-47-04.png b/docs/.vuepress/public/images/article/project/big-market/big-market-47-04.png
new file mode 100644
index 000000000..e33c4c547
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-47-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-47-05.png b/docs/.vuepress/public/images/article/project/big-market/big-market-47-05.png
new file mode 100644
index 000000000..43fd4fd5d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-47-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-48-01.png b/docs/.vuepress/public/images/article/project/big-market/big-market-48-01.png
new file mode 100644
index 000000000..4ad662e99
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-48-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-48-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-48-02.png
new file mode 100644
index 000000000..64e273205
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-48-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-48-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-48-03.png
new file mode 100644
index 000000000..a0c975d33
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-48-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-48-04.png b/docs/.vuepress/public/images/article/project/big-market/big-market-48-04.png
new file mode 100644
index 000000000..572c914b3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-48-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-48-05.png b/docs/.vuepress/public/images/article/project/big-market/big-market-48-05.png
new file mode 100644
index 000000000..ecea645c0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-48-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-48-06.png b/docs/.vuepress/public/images/article/project/big-market/big-market-48-06.png
new file mode 100644
index 000000000..b1f5de43d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-48-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-49-01.png b/docs/.vuepress/public/images/article/project/big-market/big-market-49-01.png
new file mode 100644
index 000000000..601ad166b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-49-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-49-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-49-02.png
new file mode 100644
index 000000000..4bc067fad
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-49-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-49-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-49-03.png
new file mode 100644
index 000000000..85fe68cfe
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-49-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-49-04.png b/docs/.vuepress/public/images/article/project/big-market/big-market-49-04.png
new file mode 100644
index 000000000..edc4586f4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-49-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-49-05.png b/docs/.vuepress/public/images/article/project/big-market/big-market-49-05.png
new file mode 100644
index 000000000..86ebb96f9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-49-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-49-06.png b/docs/.vuepress/public/images/article/project/big-market/big-market-49-06.png
new file mode 100644
index 000000000..7d9454720
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-49-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-50-01.png b/docs/.vuepress/public/images/article/project/big-market/big-market-50-01.png
new file mode 100644
index 000000000..ca97a7b4c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-50-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-50-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-50-02.png
new file mode 100644
index 000000000..634f4f4bf
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-50-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-50-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-50-03.png
new file mode 100644
index 000000000..72a546b95
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-50-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-50-04.png b/docs/.vuepress/public/images/article/project/big-market/big-market-50-04.png
new file mode 100644
index 000000000..230c90831
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-50-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-51-01.png b/docs/.vuepress/public/images/article/project/big-market/big-market-51-01.png
new file mode 100644
index 000000000..93108fbe2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-51-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-51-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-51-02.png
new file mode 100644
index 000000000..2e4712e6a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-51-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-51-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-51-03.png
new file mode 100644
index 000000000..49a4908c6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-51-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-51-04.png b/docs/.vuepress/public/images/article/project/big-market/big-market-51-04.png
new file mode 100644
index 000000000..763b14796
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-51-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-52-01.png b/docs/.vuepress/public/images/article/project/big-market/big-market-52-01.png
new file mode 100644
index 000000000..d8b683421
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-52-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-52-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-52-02.png
new file mode 100644
index 000000000..25ff7d7df
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-52-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-52-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-52-03.png
new file mode 100644
index 000000000..3c6967d0a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-52-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-53-01.png b/docs/.vuepress/public/images/article/project/big-market/big-market-53-01.png
new file mode 100644
index 000000000..2813a9db1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-53-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-53-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-53-02.png
new file mode 100644
index 000000000..50edfa7e0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-53-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-53-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-53-03.png
new file mode 100644
index 000000000..990a7db27
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-53-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-53-04.png b/docs/.vuepress/public/images/article/project/big-market/big-market-53-04.png
new file mode 100644
index 000000000..f196f8c2b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-53-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-53-05.png b/docs/.vuepress/public/images/article/project/big-market/big-market-53-05.png
new file mode 100644
index 000000000..176b10803
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-53-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-53-06.png b/docs/.vuepress/public/images/article/project/big-market/big-market-53-06.png
new file mode 100644
index 000000000..97a6512cb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-53-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-01.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-01.png
new file mode 100644
index 000000000..adbac603d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-02.png
new file mode 100644
index 000000000..85328fac7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-03.png
new file mode 100644
index 000000000..3bb894277
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-04.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-04.png
new file mode 100644
index 000000000..aa2b7afa4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-05.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-05.png
new file mode 100644
index 000000000..610114578
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-06.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-06.png
new file mode 100644
index 000000000..fcd432bd1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-07.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-07.png
new file mode 100644
index 000000000..50910d8d1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-08.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-08.png
new file mode 100644
index 000000000..ca4801f29
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-09.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-09.png
new file mode 100644
index 000000000..6476abc21
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-10.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-10.png
new file mode 100644
index 000000000..31e91bc35
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-11.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-11.png
new file mode 100644
index 000000000..24647031b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-11.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-12.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-12.png
new file mode 100644
index 000000000..0546783af
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-12.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-13.png b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-13.png
new file mode 100644
index 000000000..96c2f57b0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-dev-ops-5-13.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-01.png b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-01.png
new file mode 100644
index 000000000..b183d421a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-02.png
new file mode 100644
index 000000000..b2fe305aa
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-03.png
new file mode 100644
index 000000000..e0d91b044
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-04.png b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-04.png
new file mode 100644
index 000000000..d5dabd66a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-05.png b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-05.png
new file mode 100644
index 000000000..d61909685
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-06.png b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-06.png
new file mode 100644
index 000000000..ecc720319
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-07.png b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-07.png
new file mode 100644
index 000000000..57b3e4231
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-08.png b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-08.png
new file mode 100644
index 000000000..9b6d0ba02
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-system-design-diagram-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-v7-01.gif b/docs/.vuepress/public/images/article/project/big-market/big-market-v7-01.gif
new file mode 100644
index 000000000..d68abe650
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-v7-01.gif differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-v7-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-v7-02.png
new file mode 100644
index 000000000..9a6473f7e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-v7-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-v7-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-v7-03.png
new file mode 100644
index 000000000..f41234fd1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-v7-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-v7-04.png b/docs/.vuepress/public/images/article/project/big-market/big-market-v7-04.png
new file mode 100644
index 000000000..31ef84f80
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-v7-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-v7-05.png b/docs/.vuepress/public/images/article/project/big-market/big-market-v7-05.png
new file mode 100644
index 000000000..67c349eeb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-v7-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-v7-06.png b/docs/.vuepress/public/images/article/project/big-market/big-market-v7-06.png
new file mode 100644
index 000000000..ed39a7a9c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-v7-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-v8-01.gif b/docs/.vuepress/public/images/article/project/big-market/big-market-v8-01.gif
new file mode 100644
index 000000000..e60416b99
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-v8-01.gif differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-v8-02.png b/docs/.vuepress/public/images/article/project/big-market/big-market-v8-02.png
new file mode 100644
index 000000000..7dbcad55b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-v8-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/big-market/big-market-v8-03.png b/docs/.vuepress/public/images/article/project/big-market/big-market-v8-03.png
new file mode 100644
index 000000000..763b14796
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/big-market/big-market-v8-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-01.png
new file mode 100755
index 000000000..a77dce7e0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-02.png
new file mode 100644
index 000000000..d0c2faa5a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-03.png
new file mode 100644
index 000000000..f11d9c172
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-04.png
new file mode 100644
index 000000000..3e4c31bd9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-2-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-2-01.png
new file mode 100755
index 000000000..18373c4d0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-2-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-2-02.png
new file mode 100644
index 000000000..85398e1f5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-2-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-2-03.png
new file mode 100644
index 000000000..aecfbc484
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-01.png
new file mode 100755
index 000000000..deeb57278
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-02.png
new file mode 100644
index 000000000..ad9913a80
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-03.png
new file mode 100644
index 000000000..5420a9486
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-04.png
new file mode 100644
index 000000000..d252b1cf1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-1-3-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-01.png
new file mode 100755
index 000000000..b82291008
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-02.png
new file mode 100644
index 000000000..45c2c2c85
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-03.png
new file mode 100644
index 000000000..51caebdf0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-04.png
new file mode 100644
index 000000000..4d8ab0ba3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-05.png
new file mode 100644
index 000000000..13ac69ed8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-1-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-10-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-10-01.png
new file mode 100755
index 000000000..05bc77a6e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-10-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-10-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-10-02.png
new file mode 100644
index 000000000..f39060f69
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-10-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-01.png
new file mode 100755
index 000000000..85c5cb2e5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-02.png
new file mode 100644
index 000000000..4f7e05ced
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-03.png
new file mode 100644
index 000000000..09ccb2bc6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-04.png
new file mode 100644
index 000000000..fe28a4f38
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-05.png
new file mode 100644
index 000000000..7a2b89441
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-11-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-01.png
new file mode 100755
index 000000000..3606d04e1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-02.png
new file mode 100644
index 000000000..2f0e8d14c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-03.png
new file mode 100644
index 000000000..c856b9e87
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-04.png
new file mode 100644
index 000000000..b5665978c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-05.png
new file mode 100644
index 000000000..d1a40ff30
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-06.png
new file mode 100644
index 000000000..af1c60504
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-12-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-01.png
new file mode 100755
index 000000000..c884d5408
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-02.png
new file mode 100644
index 000000000..ad6ca2cbb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-03.png
new file mode 100644
index 000000000..b1e7be26e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-04.png
new file mode 100644
index 000000000..889bcf4b8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-05.png
new file mode 100644
index 000000000..e03d2b6cc
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-06.png
new file mode 100644
index 000000000..cd852ac1d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-13-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-01.png
new file mode 100755
index 000000000..ee4a7ee3a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-02.png
new file mode 100644
index 000000000..9c736b620
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-03.png
new file mode 100644
index 000000000..8c8f7fd0f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-04.png
new file mode 100644
index 000000000..14937dd1a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-14-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-01.png
new file mode 100755
index 000000000..c8b49a1d7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-02.png
new file mode 100644
index 000000000..986a78f7f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-03.png
new file mode 100644
index 000000000..3506000a0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-04.png
new file mode 100644
index 000000000..a3fd8a14a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-05.png
new file mode 100644
index 000000000..695840223
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-06.png
new file mode 100644
index 000000000..ba055f25d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-07.png
new file mode 100644
index 000000000..2b24014dd
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-15-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-01.png
new file mode 100755
index 000000000..9ba052966
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-02.png
new file mode 100644
index 000000000..931f1a666
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-03.png
new file mode 100644
index 000000000..52aab91db
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-04.png
new file mode 100644
index 000000000..57924829d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-05.png
new file mode 100644
index 000000000..d1de4275c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-06.png
new file mode 100644
index 000000000..2a0946dcb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-07.png
new file mode 100644
index 000000000..edb349e2a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-08.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-08.png
new file mode 100644
index 000000000..0d3019273
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-16-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-01.png
new file mode 100755
index 000000000..cdc863458
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-02.png
new file mode 100644
index 000000000..bdae13477
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-03.png
new file mode 100644
index 000000000..93a0704b9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-04.png
new file mode 100644
index 000000000..b4b6ee124
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-17-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-01.png
new file mode 100755
index 000000000..db2f28b6b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-02.png
new file mode 100644
index 000000000..998d3feb8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-03.png
new file mode 100644
index 000000000..e453e688b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-04.png
new file mode 100644
index 000000000..b3b2ecaab
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-05.png
new file mode 100644
index 000000000..3fd37d331
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-06.png
new file mode 100644
index 000000000..6a8253e1b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-07.png
new file mode 100644
index 000000000..057bd03ab
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-18-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-01.png
new file mode 100755
index 000000000..01254b9e2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-02.png
new file mode 100644
index 000000000..ecccf2307
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-03.png
new file mode 100644
index 000000000..f113a8b5c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-04.png
new file mode 100644
index 000000000..d5807e5e6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-19-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-2-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-2-01.png
new file mode 100755
index 000000000..f53555121
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-2-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-2-02.png
new file mode 100644
index 000000000..e0bc62e87
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-2-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-2-03.png
new file mode 100644
index 000000000..a87652b3d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-20-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-20-01.png
new file mode 100755
index 000000000..2af83e7b6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-20-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-20-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-20-02.png
new file mode 100644
index 000000000..dda6ceaf4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-20-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-01.png
new file mode 100755
index 000000000..b65b52fea
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-02.png
new file mode 100644
index 000000000..8eee79253
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-03.png
new file mode 100644
index 000000000..4f631d096
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-04.png
new file mode 100644
index 000000000..2bb9b3279
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-05.png
new file mode 100644
index 000000000..643965d2b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-06.png
new file mode 100644
index 000000000..4c6274252
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-07.png
new file mode 100644
index 000000000..2553d8b4d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-21-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-01.png
new file mode 100755
index 000000000..47e379abe
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-02.png
new file mode 100644
index 000000000..125f06912
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-03.png
new file mode 100644
index 000000000..76ee0b584
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-04.png
new file mode 100644
index 000000000..5cf021726
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-22-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-01.png
new file mode 100755
index 000000000..a6406ec9c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-02.png
new file mode 100644
index 000000000..a6fe9553c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-03.png
new file mode 100644
index 000000000..4f40aa8af
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-04.png
new file mode 100644
index 000000000..494c51c25
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-05.png
new file mode 100644
index 000000000..ecb903ab1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-06.png
new file mode 100644
index 000000000..b88fd23f0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-07.png
new file mode 100644
index 000000000..e17c8f39c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-08.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-08.png
new file mode 100644
index 000000000..244e0d7f9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-09.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-09.png
new file mode 100644
index 000000000..0d1fbd769
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-10.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-10.png
new file mode 100644
index 000000000..e1db230f3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-11.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-11.png
new file mode 100644
index 000000000..082e3d433
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-23-11.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-01.png
new file mode 100755
index 000000000..e2d98a8c4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-02.png
new file mode 100644
index 000000000..c0d103502
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-03.png
new file mode 100644
index 000000000..b8d994512
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-04.png
new file mode 100644
index 000000000..3f3904fc0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-05.png
new file mode 100644
index 000000000..07416dcac
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-06.png
new file mode 100644
index 000000000..f9c59efed
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-07.png
new file mode 100644
index 000000000..c85bb6ba6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-08.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-08.png
new file mode 100644
index 000000000..389890a57
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-09.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-09.png
new file mode 100644
index 000000000..8c1801aea
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-10.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-10.png
new file mode 100644
index 000000000..6f2a5e6eb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-11.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-11.png
new file mode 100644
index 000000000..7ff3fe45b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-11.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-12.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-12.png
new file mode 100644
index 000000000..4ad20bb1b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-12.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-13.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-13.png
new file mode 100644
index 000000000..a5724ce4c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-13.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-14.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-14.png
new file mode 100644
index 000000000..6a7ac4f11
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-14.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-15.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-15.png
new file mode 100644
index 000000000..ef2202b67
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-15.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-16.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-16.png
new file mode 100644
index 000000000..4ddba8640
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-24-16.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-01.png
new file mode 100755
index 000000000..c9e3f4490
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-02.png
new file mode 100644
index 000000000..1b5f4fa29
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-03.png
new file mode 100644
index 000000000..5f7770fb3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-04.png
new file mode 100644
index 000000000..cc252ebe8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-25-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-01.png
new file mode 100755
index 000000000..de5b5170f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-02.png
new file mode 100644
index 000000000..43ecb2eda
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-03.png
new file mode 100644
index 000000000..64ad4bf38
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-04.png
new file mode 100644
index 000000000..b32c58f20
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-26-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-01.png
new file mode 100755
index 000000000..b959cd95a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-02.png
new file mode 100644
index 000000000..978c94137
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-03.png
new file mode 100644
index 000000000..14bfb07f7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-04.png
new file mode 100644
index 000000000..ae6dfeb12
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-27-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-01.png
new file mode 100755
index 000000000..31838b989
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-02.png
new file mode 100644
index 000000000..121fd06f4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-03.png
new file mode 100644
index 000000000..16ddf07dd
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-04.png
new file mode 100644
index 000000000..38bb7d7f4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-05.png
new file mode 100644
index 000000000..86dea6e3b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-28-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-01.png
new file mode 100755
index 000000000..1fefa7a0a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-02.png
new file mode 100644
index 000000000..1aaf14d0e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-03.png
new file mode 100644
index 000000000..eab506d5d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-04.png
new file mode 100644
index 000000000..9f8ca3de4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-29-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-3-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-3-01.png
new file mode 100755
index 000000000..7987a0889
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-3-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-3-02.png
new file mode 100644
index 000000000..277fb1f3a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-01.png
new file mode 100755
index 000000000..68a964a34
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-02.png
new file mode 100644
index 000000000..87b072b57
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-03.png
new file mode 100644
index 000000000..0ee4721db
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-04.png
new file mode 100644
index 000000000..2071429d0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-30-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-01.png
new file mode 100755
index 000000000..239b0cee4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-02.png
new file mode 100644
index 000000000..bbf413d4f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-03.png
new file mode 100644
index 000000000..9d4dac0c0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-04.png
new file mode 100644
index 000000000..befbedacb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-31-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-4-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-4-01.png
new file mode 100755
index 000000000..7230d1fac
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-4-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-4-02.png
new file mode 100644
index 000000000..84d8a0d80
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-4-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-4-03.png
new file mode 100644
index 000000000..10c7f4701
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-4-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-5-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-5-01.png
new file mode 100755
index 000000000..b21426317
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-5-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-5-02.png
new file mode 100644
index 000000000..a1380f443
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-5-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-5-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-5-03.png
new file mode 100644
index 000000000..a48faa57f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-5-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-6-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-6-01.png
new file mode 100755
index 000000000..1459d06c5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-6-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-6-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-6-02.png
new file mode 100644
index 000000000..abb2c7147
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-6-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-6-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-6-03.png
new file mode 100644
index 000000000..048edbad2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-6-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-01.png
new file mode 100755
index 000000000..33fc4d76b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-02.png
new file mode 100644
index 000000000..e51bc8f7c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-03.png
new file mode 100644
index 000000000..8aab66507
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-04.png
new file mode 100644
index 000000000..76efa198b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-7-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-8-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-8-01.png
new file mode 100755
index 000000000..a89bd4457
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-8-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-8-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-8-02.png
new file mode 100644
index 000000000..eadb631d2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-8-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-8-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-8-03.png
new file mode 100644
index 000000000..e798d6572
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-8-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-9-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-9-01.png
new file mode 100755
index 000000000..e23a63a58
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-9-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-9-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-9-02.png
new file mode 100644
index 000000000..2918546b1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-9-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-9-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-9-03.png
new file mode 100644
index 000000000..31d3d020f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-2-9-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-01.png
new file mode 100755
index 000000000..64c12689b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-02.png
new file mode 100755
index 000000000..5c19c2f4d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-03.png
new file mode 100755
index 000000000..3c79aef06
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-04.png
new file mode 100755
index 000000000..326a55536
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-05.png
new file mode 100755
index 000000000..6c1313a76
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-241109-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-01.png
new file mode 100755
index 000000000..8fdc3ee03
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-02.png
new file mode 100644
index 000000000..cc7bd813e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-03.png
new file mode 100644
index 000000000..ac6ca2d13
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-04.png
new file mode 100644
index 000000000..b7357d384
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-05.png
new file mode 100644
index 000000000..e9fba3ec1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-1-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-01.png
new file mode 100755
index 000000000..075532cbf
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-02.png
new file mode 100644
index 000000000..c7309121d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-03.png
new file mode 100644
index 000000000..feff1c8a4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-04.png
new file mode 100644
index 000000000..9fcf2f686
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-05.png
new file mode 100644
index 000000000..c81ddf439
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-06.png
new file mode 100644
index 000000000..016d7584c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-2-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-01.png
new file mode 100755
index 000000000..00694546f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-02.png
new file mode 100644
index 000000000..716a4ca2b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-03.png
new file mode 100644
index 000000000..ef5e15dcb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-04.png
new file mode 100644
index 000000000..3847b5ea6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-05.png
new file mode 100644
index 000000000..d039a38f6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-06.png
new file mode 100644
index 000000000..79dc0dc86
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-07.png
new file mode 100644
index 000000000..3d7d2be0a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-08.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-08.png
new file mode 100644
index 000000000..21b1f7bc4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-3-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-4-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-4-01.png
new file mode 100755
index 000000000..94571111d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-4-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-4-02.png
new file mode 100644
index 000000000..92f41f708
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-4-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-4-03.png
new file mode 100644
index 000000000..f265c188f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-4-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-5-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-5-01.png
new file mode 100755
index 000000000..635390ffc
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-5-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-5-02.png
new file mode 100644
index 000000000..2652e8ba6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-5-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-5-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-5-03.png
new file mode 100644
index 000000000..cca199176
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-5-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-01.png
new file mode 100755
index 000000000..05ac88b76
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-02.png
new file mode 100644
index 000000000..e0b78f87e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-03.png
new file mode 100644
index 000000000..6ab929e8e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-04.png
new file mode 100644
index 000000000..9c4efd4a7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-05.png
new file mode 100644
index 000000000..6ad83f5a5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-6-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-01.png
new file mode 100755
index 000000000..bc81b7f6b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-02.png
new file mode 100644
index 000000000..a4c448ecc
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-03.png
new file mode 100644
index 000000000..d3b451f0a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-04.png
new file mode 100644
index 000000000..4d501269b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-05.png
new file mode 100644
index 000000000..224ad3cb7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-06.png
new file mode 100644
index 000000000..f54ae6f88
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-7-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-01.png
new file mode 100755
index 000000000..e47c88d82
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-02.png
new file mode 100644
index 000000000..4654ea88f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-03.png
new file mode 100644
index 000000000..32fa8dfc6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-04.png
new file mode 100644
index 000000000..cc3668986
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-05.png
new file mode 100644
index 000000000..c819870bf
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-06.png
new file mode 100644
index 000000000..348a8bc05
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-07.png
new file mode 100644
index 000000000..d4781a1f0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-08.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-08.png
new file mode 100644
index 000000000..8ebed8cd0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-3-8-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-01.png
new file mode 100755
index 000000000..dfc1f1781
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-02.png
new file mode 100644
index 000000000..f849c9567
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-03.png
new file mode 100644
index 000000000..8493ffdf6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-04.png
new file mode 100644
index 000000000..91bda7fe3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-05.png
new file mode 100644
index 000000000..5d0e3e81f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-06.png
new file mode 100644
index 000000000..c12e464c0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-07.png
new file mode 100644
index 000000000..4f467b52a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-08.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-08.png
new file mode 100644
index 000000000..c383df54c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-1-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-01.png
new file mode 100755
index 000000000..ed63ba4bf
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-02.png
new file mode 100644
index 000000000..25479bf79
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-03.png
new file mode 100644
index 000000000..83480e7ef
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-04.png
new file mode 100644
index 000000000..bb31a2536
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-05.png
new file mode 100644
index 000000000..550da8ec7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-06.png
new file mode 100644
index 000000000..aafc71726
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-07.png
new file mode 100644
index 000000000..c88a175c5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-08.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-08.png
new file mode 100644
index 000000000..fde7a2378
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-2-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-01.png
new file mode 100755
index 000000000..6d900205e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-02.png
new file mode 100644
index 000000000..0548a3e95
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-03.png
new file mode 100644
index 000000000..ad8eb566e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-04.png
new file mode 100644
index 000000000..353e41dd4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-05.png
new file mode 100644
index 000000000..67cff6d74
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-06.png
new file mode 100644
index 000000000..8a16078ee
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-07.png
new file mode 100644
index 000000000..ef967f867
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-4-3-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-notes-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-notes-01.png
new file mode 100644
index 000000000..060939d7c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-notes-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-241229-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-241229-01.png
new file mode 100644
index 000000000..1853f66de
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-241229-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-241229-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-241229-02.png
new file mode 100644
index 000000000..68b5af395
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-241229-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-01.gif b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-01.gif
new file mode 100644
index 000000000..5d637f90d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-01.gif differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-02.png
new file mode 100644
index 000000000..4bf2b198c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-03.png
new file mode 100644
index 000000000..13a47fc30
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-04.png
new file mode 100644
index 000000000..b2852152e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-05.png
new file mode 100644
index 000000000..6381be155
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-06.png
new file mode 100644
index 000000000..527f27d9b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250118-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-01.png
new file mode 100644
index 000000000..8db8aa512
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-02.png
new file mode 100644
index 000000000..c3a25fc4e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-03.png
new file mode 100644
index 000000000..f0b40ef53
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-04.png
new file mode 100644
index 000000000..e5310a097
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-05.png
new file mode 100644
index 000000000..b9ec88b6f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-06.png
new file mode 100644
index 000000000..16f387955
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-07.png
new file mode 100644
index 000000000..569d5dba5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-08.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-08.png
new file mode 100644
index 000000000..4db135cad
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250205-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250629-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250629-01.png
new file mode 100644
index 000000000..258d2db63
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250629-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250629-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250629-02.png
new file mode 100644
index 000000000..24b910750
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250629-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-01.png
new file mode 100644
index 000000000..ba229e549
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-02.png
new file mode 100644
index 000000000..a90eadc98
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-03.png
new file mode 100644
index 000000000..fa410b53d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-04.png
new file mode 100644
index 000000000..5acd6faaa
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-250803-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-01.png
new file mode 100644
index 000000000..e42a15181
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-02.png
new file mode 100644
index 000000000..ebf2eb61b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-03.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-03.png
new file mode 100644
index 000000000..13a32fbd9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-04.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-04.png
new file mode 100644
index 000000000..c913caa22
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-05.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-05.png
new file mode 100644
index 000000000..85f363fe0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-06.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-06.png
new file mode 100644
index 000000000..60707c183
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-07.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-07.png
new file mode 100644
index 000000000..219df9a91
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v4-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v5-01.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v5-01.png
new file mode 100644
index 000000000..c575e158e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v5-02.png b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v5-02.png
new file mode 100644
index 000000000..044718d9d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/group-buy-market/group-buy-market-promotion-v5-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-0-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-0-01.png
new file mode 100644
index 000000000..011385180
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-0-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-0-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-0-02.png
new file mode 100644
index 000000000..1877708e1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-0-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-0-03.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-0-03.png
new file mode 100644
index 000000000..d218c2d23
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-0-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-1-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-1-01.png
new file mode 100644
index 000000000..dd555ce85
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-1-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-1-02.png
new file mode 100644
index 000000000..9e3804676
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-1-03.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-1-03.png
new file mode 100644
index 000000000..bb39cb099
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-01.png
new file mode 100644
index 000000000..d73726c56
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-02.png
new file mode 100644
index 000000000..3a3080d99
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-03.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-03.png
new file mode 100644
index 000000000..e582f1150
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-04.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-04.png
new file mode 100644
index 000000000..ded65f9c2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-05.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-05.png
new file mode 100644
index 000000000..cb89076c7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-2-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-3-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-3-01.png
new file mode 100644
index 000000000..2152ee64c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-3-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-3-02.png
new file mode 100644
index 000000000..8cc8a9ed8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-2-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-01.png
new file mode 100644
index 000000000..4ced3d23c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-02.png
new file mode 100644
index 000000000..7044efbf4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-03.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-03.png
new file mode 100644
index 000000000..b82d12b4c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-04.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-04.png
new file mode 100644
index 000000000..2492516a2
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-05.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-05.png
new file mode 100644
index 000000000..51eefdd64
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-06.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-06.png
new file mode 100644
index 000000000..26f80cf88
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-07.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-07.png
new file mode 100644
index 000000000..d56ac7d3d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-08.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-08.png
new file mode 100644
index 000000000..89a9602c4
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-09.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-09.png
new file mode 100644
index 000000000..aab97d7a6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-10.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-10.png
new file mode 100644
index 000000000..c141e153e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-1-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-01.png
new file mode 100644
index 000000000..f9fc6a122
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-02.png
new file mode 100644
index 000000000..e52b790cb
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-03.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-03.png
new file mode 100644
index 000000000..4a789947a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-04.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-04.png
new file mode 100644
index 000000000..c8d8c5300
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-05.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-05.png
new file mode 100644
index 000000000..407f25594
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-06.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-06.png
new file mode 100644
index 000000000..9f96f9500
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-07.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-07.png
new file mode 100644
index 000000000..853112319
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-07.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-08.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-08.png
new file mode 100644
index 000000000..d9c7436c6
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-08.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-09.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-09.png
new file mode 100644
index 000000000..39a6f9b4a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-09.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-10.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-10.png
new file mode 100644
index 000000000..6791c4291
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-2-10.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-01.png
new file mode 100644
index 000000000..92844e6f3
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-02.png
new file mode 100644
index 000000000..ee4beac9e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-03.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-03.png
new file mode 100644
index 000000000..af41df69a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-04.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-04.png
new file mode 100644
index 000000000..f4357f47b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-05.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-05.png
new file mode 100644
index 000000000..e657cb62a
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-06.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-06.png
new file mode 100644
index 000000000..5d2c96932
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-4-3-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-1-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-1-01.png
new file mode 100644
index 000000000..dac7c7cf9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-1-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-1-02.png
new file mode 100644
index 000000000..ab8a37566
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-2-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-2-02.png
new file mode 100644
index 000000000..7cd44a207
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-3-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-3-01.png
new file mode 100644
index 000000000..ab7c08ed5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-4-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-4-01.png
new file mode 100644
index 000000000..237532bf7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-6-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-6-01.png
new file mode 100644
index 000000000..38efa3421
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-ddd-3-6-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-1-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-1-01.png
new file mode 100644
index 000000000..95dea7831
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-1-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-1-02.png
new file mode 100644
index 000000000..185a760dd
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-1-03.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-1-03.png
new file mode 100644
index 000000000..5855428bd
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-01.png
new file mode 100644
index 000000000..e35b79f0c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-02.png
new file mode 100644
index 000000000..ae309ae21
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-03.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-03.png
new file mode 100644
index 000000000..ca786a16b
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-04.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-04.png
new file mode 100644
index 000000000..b9dc4d14f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-01.png
new file mode 100644
index 000000000..1f92af8b7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-02.png
new file mode 100644
index 000000000..69405813e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-03.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-03.png
new file mode 100644
index 000000000..d1711112c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-04.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-04.png
new file mode 100644
index 000000000..6d07d979d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-05.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-05.png
new file mode 100644
index 000000000..efcd335e0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-3-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-4-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-4-01.png
new file mode 100644
index 000000000..37ad10331
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-4-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-4-02.png
new file mode 100644
index 000000000..29077bbb7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-5-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-5-01.png
new file mode 100644
index 000000000..ebfd8a9f0
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-5-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-5-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-5-02.png
new file mode 100644
index 000000000..dde0ba2e9
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-5-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-6-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-6-01.png
new file mode 100644
index 000000000..0cd9547e1
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-6-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-7-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-7-01.png
new file mode 100644
index 000000000..b43222f48
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-7-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-01.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-01.png
new file mode 100644
index 000000000..9a5bb8487
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-02.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-02.png
new file mode 100644
index 000000000..2b7836b9f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-03.png b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-03.png
new file mode 100644
index 000000000..0a8af6ee7
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-01.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-01.png
new file mode 100644
index 000000000..ff82e2c7d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-02.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-02.png
new file mode 100644
index 000000000..861c6932d
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-03.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-03.png
new file mode 100644
index 000000000..c6a96cabf
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-04.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-04.png
new file mode 100644
index 000000000..9e099d13e
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-05.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-05.png
new file mode 100644
index 000000000..a87fe8ffd
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-0-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-01.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-01.png
new file mode 100644
index 000000000..a79d39385
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-02.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-02.png
new file mode 100644
index 000000000..475e72003
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-03.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-03.png
new file mode 100644
index 000000000..e23b64cef
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-04.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-04.png
new file mode 100644
index 000000000..01586774c
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-1-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-01.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-01.png
new file mode 100644
index 000000000..8c47ef8a8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-02.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-02.png
new file mode 100644
index 000000000..12b118ca8
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-03.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-03.png
new file mode 100644
index 000000000..659693111
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-04.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-04.png
new file mode 100644
index 000000000..d77d9dc90
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-05.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-05.png
new file mode 100644
index 000000000..2573c9257
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-05.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-06.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-06.png
new file mode 100644
index 000000000..481e66400
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-2-06.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-01.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-01.png
new file mode 100644
index 000000000..53ab2800f
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-02.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-02.png
new file mode 100644
index 000000000..e4ab3e542
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-03.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-03.png
new file mode 100644
index 000000000..1a0329830
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-04.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-04.png
new file mode 100644
index 000000000..92009f6ad
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-3-04.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-01.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-01.png
new file mode 100644
index 000000000..51f91db50
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-01.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-02.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-02.png
new file mode 100644
index 000000000..c90fb16a5
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-02.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-03.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-03.png
new file mode 100644
index 000000000..772543295
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-03.png differ
diff --git a/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-04.png b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-04.png
new file mode 100644
index 000000000..394ee4c53
Binary files /dev/null and b/docs/.vuepress/public/images/article/project/xfg-wrench/xfg-wrench-4-04.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/job-hire-jd-01.png b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-01.png
new file mode 100644
index 000000000..0125211b1
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-01.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/job-hire-jd-02.png b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-02.png
new file mode 100644
index 000000000..0132c37d8
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-02.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/job-hire-jd-03.png b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-03.png
new file mode 100644
index 000000000..0243629e9
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-03.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/job-hire-jd-04.png b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-04.png
new file mode 100644
index 000000000..a6d54a915
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-04.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/job-hire-jd-05.png b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-05.png
new file mode 100644
index 000000000..abba9c0f0
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-05.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/job-hire-jd-06.png b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-06.png
new file mode 100644
index 000000000..3fad0bac4
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-06.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/job-hire-jd-07.png b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-07.png
new file mode 100644
index 000000000..e2196d615
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/job-hire-jd-07.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-240811-01.png b/docs/.vuepress/public/images/article/zsxq/zsxq-240811-01.png
new file mode 100644
index 000000000..4e74e8ed3
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-240811-01.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-240811-02.png b/docs/.vuepress/public/images/article/zsxq/zsxq-240811-02.png
new file mode 100644
index 000000000..1aabff523
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-240811-02.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-240811-03.png b/docs/.vuepress/public/images/article/zsxq/zsxq-240811-03.png
new file mode 100644
index 000000000..840392084
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-240811-03.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-240811-04.png b/docs/.vuepress/public/images/article/zsxq/zsxq-240811-04.png
new file mode 100644
index 000000000..5c3eed47c
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-240811-04.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241007-01.gif b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-01.gif
new file mode 100644
index 000000000..a8e4892e1
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-01.gif differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241007-02-2.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-02-2.png
new file mode 100644
index 000000000..241a48fd0
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-02-2.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241007-02-3.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-02-3.png
new file mode 100644
index 000000000..788b6aad2
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-02-3.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241007-02.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-02.png
new file mode 100644
index 000000000..c8b986380
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-02.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241007-03.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-03.png
new file mode 100644
index 000000000..d908f86a2
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-03.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241007-04.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-04.png
new file mode 100644
index 000000000..98e3b0cf3
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241007-04.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241024-01.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-01.png
new file mode 100644
index 000000000..37bfbaae2
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-01.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241024-02.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-02.png
new file mode 100644
index 000000000..d54ed7826
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-02.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241024-03.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-03.png
new file mode 100644
index 000000000..c0da6857c
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-03.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241024-04.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-04.png
new file mode 100644
index 000000000..f69503a34
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-04.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241024-05.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-05.png
new file mode 100644
index 000000000..d3531e166
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-05.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241024-06.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-06.png
new file mode 100644
index 000000000..c04db94a3
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-06.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241024-07.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-07.png
new file mode 100644
index 000000000..ff8ce887f
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-07.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241024-08.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-08.png
new file mode 100644
index 000000000..7e91f252b
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241024-08.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-00.gif b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-00.gif
new file mode 100644
index 000000000..25097b89a
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-00.gif differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-01.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-01.png
new file mode 100755
index 000000000..9a61ca7b7
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-01.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-02.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-02.png
new file mode 100755
index 000000000..46495d2b7
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-02.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-03.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-03.png
new file mode 100755
index 000000000..3c82f25b4
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-03.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-04.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-04.png
new file mode 100755
index 000000000..e2f9c4274
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-04.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-05.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-05.png
new file mode 100755
index 000000000..4cc86127c
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-05.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-06.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-06.png
new file mode 100755
index 000000000..db9447140
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-06.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-07.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-07.png
new file mode 100755
index 000000000..b79911d09
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-07.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-08.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-08.png
new file mode 100755
index 000000000..4af98f8d0
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-08.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-09.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-09.png
new file mode 100755
index 000000000..a8826a4fe
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-09.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-241219-10.png b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-10.png
new file mode 100755
index 000000000..4d998a367
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-241219-10.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-250115-01.jpg b/docs/.vuepress/public/images/article/zsxq/zsxq-250115-01.jpg
new file mode 100644
index 000000000..6d55952a8
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-250115-01.jpg differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zsxq-door.png b/docs/.vuepress/public/images/article/zsxq/zsxq-door.png
new file mode 100644
index 000000000..976ee0aa2
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zsxq-door.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zxsq-240917-01.png b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-01.png
new file mode 100644
index 000000000..cb0ffc73f
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-01.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zxsq-240917-02.png b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-02.png
new file mode 100644
index 000000000..8629112b5
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-02.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zxsq-240917-03.png b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-03.png
new file mode 100644
index 000000000..75cca6a85
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-03.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zxsq-240917-04.png b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-04.png
new file mode 100644
index 000000000..97d211b41
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-04.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zxsq-240917-05.png b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-05.png
new file mode 100644
index 000000000..d46137941
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-05.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zxsq-240917-06.png b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-06.png
new file mode 100644
index 000000000..28330ff55
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-06.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zxsq-240917-07.png b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-07.png
new file mode 100644
index 000000000..dc36cbbd6
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-07.png differ
diff --git a/docs/.vuepress/public/images/article/zsxq/zxsq-240917-08.png b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-08.png
new file mode 100644
index 000000000..2d1898f8b
Binary files /dev/null and b/docs/.vuepress/public/images/article/zsxq/zxsq-240917-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-00.gif b/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-00.gif
new file mode 100755
index 000000000..dd30fc5c6
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-00.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-01.png b/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-01.png
new file mode 100755
index 000000000..37bc5613a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-02.png b/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-02.png
new file mode 100755
index 000000000..792d1b84c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-03.png b/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-03.png
new file mode 100755
index 000000000..471420a7a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-04.png b/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-04.png
new file mode 100755
index 000000000..02d611e8d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-05.png b/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-05.png
new file mode 100755
index 000000000..211ba00a7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-06.png b/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-06.png
new file mode 100755
index 000000000..2f0a36dc9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/ddd-easy-guide-03-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/img.png b/docs/.vuepress/public/images/roadmap/tutorial/img.png
new file mode 100644
index 000000000..7a61a114e
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/img.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/img_1.png b/docs/.vuepress/public/images/roadmap/tutorial/img_1.png
new file mode 100644
index 000000000..7a61a114e
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/img_1.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-01.gif b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-01.gif
new file mode 100644
index 000000000..6fb467757
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-01.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-02.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-02.png
new file mode 100644
index 000000000..db8e2c9c9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-03.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-03.png
new file mode 100644
index 000000000..c0d12775c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-04.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-04.png
new file mode 100644
index 000000000..b61c212c2
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-05.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-05.png
new file mode 100644
index 000000000..0a7cd50d1
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-06.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-06.png
new file mode 100644
index 000000000..d2e3959fe
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-07.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-07.png
new file mode 100644
index 000000000..7e6e5e30b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-08.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-08.png
new file mode 100644
index 000000000..cb7086192
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-09.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-09.png
new file mode 100644
index 000000000..182d06168
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-10.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-10.png
new file mode 100644
index 000000000..7f4dc9773
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-11.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-11.png
new file mode 100644
index 000000000..351c388ee
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-12.png b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-12.png
new file mode 100644
index 000000000..86d1b31eb
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-01.png
new file mode 100644
index 000000000..9599da683
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-02.png
new file mode 100644
index 000000000..5f4766da7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-03.png
new file mode 100644
index 000000000..33c2ed33a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-04.png
new file mode 100644
index 000000000..8cb3011a7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-1panel-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-01.png
new file mode 100644
index 000000000..27f96155c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-02.png
new file mode 100644
index 000000000..07df0e716
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-03.png
new file mode 100644
index 000000000..7a9c9003e
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-04.png
new file mode 100644
index 000000000..bdc8786e3
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-05.png
new file mode 100644
index 000000000..d8fa0ca30
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-06.png
new file mode 100644
index 000000000..a84d5d132
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-07.png
new file mode 100644
index 000000000..4a2a8f86a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-08.png
new file mode 100644
index 000000000..b1e4efee0
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-09.png
new file mode 100644
index 000000000..32bbfcbf0
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-10.png
new file mode 100644
index 000000000..5d15173fa
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aigc-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-01.png
new file mode 100644
index 000000000..6e7326585
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-02.png
new file mode 100644
index 000000000..237e830cc
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-03.png
new file mode 100644
index 000000000..70c5bed00
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-04.png
new file mode 100644
index 000000000..eb4182e3c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-05.png
new file mode 100644
index 000000000..923da7f1b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-06.png
new file mode 100644
index 000000000..7cf270c6a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-07.png
new file mode 100644
index 000000000..8e2641563
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-08.png
new file mode 100644
index 000000000..82b5bbbf6
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-09.png
new file mode 100644
index 000000000..7817fb940
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-10.png
new file mode 100644
index 000000000..ac4ce9927
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-11.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-11.png
new file mode 100644
index 000000000..9cbb196ba
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-12.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-12.png
new file mode 100644
index 000000000..5b1233cf4
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-13.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-13.png
new file mode 100644
index 000000000..5e19871a6
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-13.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-14.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-14.png
new file mode 100644
index 000000000..95fa20d12
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-14.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-15.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-15.png
new file mode 100644
index 000000000..60c232cc5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-15.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-16.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-16.png
new file mode 100644
index 000000000..22103ace4
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-16.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-17.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-17.png
new file mode 100644
index 000000000..3d83021a7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-aliyun-workbench-17.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-01.png
new file mode 100644
index 000000000..09d250359
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-02.png
new file mode 100644
index 000000000..d1f9bd5e5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-03.png
new file mode 100644
index 000000000..4399dcc1e
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-04.png
new file mode 100644
index 000000000..0e623d940
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-05.png
new file mode 100644
index 000000000..aac28d6fe
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-06.png
new file mode 100644
index 000000000..034162af7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-07.png
new file mode 100644
index 000000000..292ac72a0
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-08.png
new file mode 100644
index 000000000..bb7bc2736
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-09.png
new file mode 100644
index 000000000..c2f44aadc
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-10.png
new file mode 100644
index 000000000..14e236795
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-11.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-11.png
new file mode 100644
index 000000000..019e09a39
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-12.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-12.png
new file mode 100644
index 000000000..bf9b6a9ab
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-13.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-13.png
new file mode 100644
index 000000000..a9fcc22f9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-arthas-13.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-01.png
new file mode 100644
index 000000000..0f0b9caea
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-02.png
new file mode 100644
index 000000000..d2c71adf7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-03.png
new file mode 100644
index 000000000..cb0a47398
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-04.png
new file mode 100644
index 000000000..f9cb57b55
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-05.png
new file mode 100644
index 000000000..edb51b167
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cainiao-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-01.png
new file mode 100644
index 000000000..74bf528e4
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-02.png
new file mode 100644
index 000000000..73fcc58da
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-03.png
new file mode 100644
index 000000000..59c755e50
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-04.png
new file mode 100644
index 000000000..84669cbfd
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-05.png
new file mode 100644
index 000000000..26244a451
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-cloud-server-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ddd-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ddd-05.png
index c7b8ec9f7..0b5603cc3 100644
Binary files a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ddd-05.png and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ddd-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-01.gif b/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-01.gif
new file mode 100644
index 000000000..f32099b9d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-01.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-02.png
new file mode 100644
index 000000000..a9bb17e00
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-03.png
new file mode 100644
index 000000000..37014481d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-04.png
new file mode 100644
index 000000000..10094eb59
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-disruptor-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-00.gif b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-00.gif
new file mode 100644
index 000000000..479d9ed45
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-00.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-01.png
new file mode 100644
index 000000000..2bf30fa79
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-02.png
new file mode 100644
index 000000000..d71057a83
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-03.png
new file mode 100644
index 000000000..2798f5d87
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-04.png
new file mode 100644
index 000000000..a4eda6f05
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-00.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-00.png
new file mode 100644
index 000000000..0726e9403
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-00.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-01.png
new file mode 100644
index 000000000..ad2e30144
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-02.png
new file mode 100644
index 000000000..5dbf590bd
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-03.png
new file mode 100644
index 000000000..301cea5a7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-04.png
new file mode 100644
index 000000000..562978114
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-05.png
new file mode 100644
index 000000000..87520c886
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-06.png
new file mode 100644
index 000000000..bee2dbc1d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-07.png
new file mode 100644
index 000000000..393173534
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-08.png
new file mode 100644
index 000000000..c083236ce
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-09.png
new file mode 100644
index 000000000..475d66748
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-idea-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-01.png
new file mode 100644
index 000000000..a8e83b083
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-02.png
new file mode 100644
index 000000000..b5b613549
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-03.png
new file mode 100644
index 000000000..c57449790
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-04.png
new file mode 100644
index 000000000..d8490710e
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-05.png
new file mode 100644
index 000000000..a100f3058
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-06.png
new file mode 100644
index 000000000..30ce95c19
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-07.png
new file mode 100644
index 000000000..bc6b5cdf2
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-docker-install-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-01.png
new file mode 100644
index 000000000..0d65d5a12
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-02.png
new file mode 100644
index 000000000..9ae618d63
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-03.png
new file mode 100644
index 000000000..c8b24fd62
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-04.png
new file mode 100644
index 000000000..000f727a6
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-05.png
new file mode 100644
index 000000000..7e31fcb8b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-06.png
new file mode 100644
index 000000000..2240875cf
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-07.png
new file mode 100644
index 000000000..7013cf6f3
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-08.png
new file mode 100644
index 000000000..54b941d0d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-09.png
new file mode 100644
index 000000000..0b1f14fc0
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-10.png
new file mode 100644
index 000000000..f6d4ac592
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-11.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-11.png
new file mode 100644
index 000000000..3a53c27aa
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-12.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-12.png
new file mode 100644
index 000000000..8d0e046b0
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-13.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-13.png
new file mode 100644
index 000000000..e0965ab32
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-frp-13.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-01.png
new file mode 100644
index 000000000..632185cfb
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-02.png
new file mode 100644
index 000000000..0202874c0
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-03.png
new file mode 100644
index 000000000..568234c7c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-04.png
new file mode 100644
index 000000000..c1ce75ba5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-05.png
new file mode 100644
index 000000000..b8c974045
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-06.png
new file mode 100644
index 000000000..d5dc2d141
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-07.png
new file mode 100644
index 000000000..4d969016f
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-08.png
new file mode 100644
index 000000000..a839db975
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-09.png
new file mode 100644
index 000000000..b0d2912d7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-10.png
new file mode 100644
index 000000000..ca4ecc512
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-11.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-11.png
new file mode 100644
index 000000000..bec07081f
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-12.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-12.png
new file mode 100644
index 000000000..8edf825b3
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-13.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-13.png
new file mode 100644
index 000000000..20badc68b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-13.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-14.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-14.png
new file mode 100644
index 000000000..311e76622
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-14.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-15.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-15.png
new file mode 100644
index 000000000..ee224ae98
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-15.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-16.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-16.png
new file mode 100644
index 000000000..743c486bb
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-16.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-17.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-17.png
new file mode 100644
index 000000000..940ebece6
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-17.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-18.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-18.png
new file mode 100644
index 000000000..ac6f2e79b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-18.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-19.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-19.png
new file mode 100644
index 000000000..677cd6adc
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-19.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-20.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-20.png
new file mode 100644
index 000000000..844f9500a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-20.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-21.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-21.png
new file mode 100644
index 000000000..66a75a92c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-21.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-22.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-22.png
new file mode 100644
index 000000000..b3d46066d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-22.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-23.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-23.png
new file mode 100644
index 000000000..7aa6effb6
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-23.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-24.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-24.png
new file mode 100644
index 000000000..d750688c7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-git-24.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-01.gif b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-01.gif
new file mode 100644
index 000000000..3e9103a8c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-01.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-02.gif b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-02.gif
new file mode 100644
index 000000000..66af144d7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-02.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-03.png
new file mode 100644
index 000000000..03d375099
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-04.png
new file mode 100644
index 000000000..23bfc1ce9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-05.png
new file mode 100644
index 000000000..26c3022ae
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-06.png
new file mode 100644
index 000000000..438997207
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-07.png
new file mode 100644
index 000000000..8caf650f2
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mac-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-01.gif b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-01.gif
new file mode 100644
index 000000000..f298fac61
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-01.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-02.png
new file mode 100644
index 000000000..0d8a668c9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-03.png
new file mode 100644
index 000000000..c1696c1f3
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-04.png
new file mode 100644
index 000000000..5f11e856b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-05.png
new file mode 100644
index 000000000..ff6a911b8
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-06.png
new file mode 100644
index 000000000..0f13431db
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-07.png
new file mode 100644
index 000000000..64f767bcd
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-08.png
new file mode 100644
index 000000000..dfeaa17ab
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-09.png
new file mode 100644
index 000000000..4f3f4ff87
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-10.png
new file mode 100644
index 000000000..df2b6bf9c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-11.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-11.png
new file mode 100644
index 000000000..2e00430a0
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-12.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-12.png
new file mode 100644
index 000000000..34c17315a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-13.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-13.png
new file mode 100644
index 000000000..d79927edc
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-13.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-14.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-14.png
new file mode 100644
index 000000000..a20069560
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-14.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-15.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-15.png
new file mode 100644
index 000000000..35961140e
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-15.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-16.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-16.png
new file mode 100644
index 000000000..ec96d087a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-16.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-17.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-17.png
new file mode 100644
index 000000000..a9cacc934
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-17.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-18.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-18.png
new file mode 100644
index 000000000..4c1a6981a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-18.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-19.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-19.png
new file mode 100644
index 000000000..f9fda0cd9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-19.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-20.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-20.png
new file mode 100644
index 000000000..d70d66466
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-20.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-21.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-21.png
new file mode 100644
index 000000000..a3080cd17
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-21.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-22.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-22.png
new file mode 100644
index 000000000..0fd15fbff
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-22.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-23.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-23.png
new file mode 100644
index 000000000..9b420aa60
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-23.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-24.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-24.png
new file mode 100644
index 000000000..905b2a162
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-maven-24.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-mysql-time-zone-01.gif b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mysql-time-zone-01.gif
new file mode 100644
index 000000000..5b3dc1c0b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mysql-time-zone-01.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-mysql-time-zone-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mysql-time-zone-02.png
new file mode 100644
index 000000000..0dd6e48e1
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mysql-time-zone-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-mysql-time-zone-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mysql-time-zone-03.png
new file mode 100644
index 000000000..0a48f2c13
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mysql-time-zone-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-mysql-time-zone-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mysql-time-zone-04.png
new file mode 100644
index 000000000..2078533fc
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-mysql-time-zone-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-01.gif b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-01.gif
new file mode 100644
index 000000000..090e37ae9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-01.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-02.png
new file mode 100644
index 000000000..e61d6bf93
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-03.png
new file mode 100644
index 000000000..9f55039a5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-04.png
new file mode 100644
index 000000000..252b49648
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-05.png
new file mode 100644
index 000000000..30562382d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-06.png
new file mode 100644
index 000000000..59b158b44
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-07.png
new file mode 100644
index 000000000..a7860e169
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-08.png
new file mode 100644
index 000000000..c72758bde
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-nas-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-01.png
new file mode 100644
index 000000000..ee2a166d8
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-02.png
new file mode 100644
index 000000000..4f3f5793b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-03.png
new file mode 100644
index 000000000..6f0b027df
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-04.png
new file mode 100644
index 000000000..98eca0ffc
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-05.png
new file mode 100644
index 000000000..74b1d0a3b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-06.png
new file mode 100644
index 000000000..ec63f5a06
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-07.png
new file mode 100644
index 000000000..286a954d5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-08.png
new file mode 100644
index 000000000..ade777de9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-09.png
new file mode 100644
index 000000000..cc73f8f58
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-10.png
new file mode 100644
index 000000000..f7f273bc2
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-11.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-11.png
new file mode 100644
index 000000000..9c455920b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-12.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-12.png
new file mode 100644
index 000000000..fe2361aa1
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-13.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-13.png
new file mode 100644
index 000000000..2c84428e3
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-13.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-14.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-14.png
new file mode 100644
index 000000000..561f04eb4
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-oauth2-14.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-00.gif b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-00.gif
new file mode 100644
index 000000000..977e4808e
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-00.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-01.png
new file mode 100644
index 000000000..160e50843
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-02.png
new file mode 100644
index 000000000..5cfbd0586
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-03.png
new file mode 100644
index 000000000..9429bd188
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-04.png
new file mode 100644
index 000000000..0f4c7a2ba
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-05.png
new file mode 100644
index 000000000..05dc48486
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-06.png
new file mode 100644
index 000000000..25cd2d233
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-07.png
new file mode 100644
index 000000000..a22a08baf
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-08.png
new file mode 100644
index 000000000..dc8a3b40a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-09.png
new file mode 100644
index 000000000..bf7dcdc8a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-10.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-10.png
new file mode 100644
index 000000000..3bae3e205
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-11.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-11.png
new file mode 100644
index 000000000..e221c1451
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-ollama-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-01.png
new file mode 100644
index 000000000..2de1fd999
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-02.png
new file mode 100644
index 000000000..520eb9e61
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-03.png
new file mode 100644
index 000000000..7ff3a8916
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-04.png
new file mode 100644
index 000000000..5528a95ed
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-05.png
new file mode 100644
index 000000000..956129d86
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-06.png
new file mode 100644
index 000000000..61ffbc3a5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-07.png
new file mode 100644
index 000000000..e950192bc
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-08.png
new file mode 100644
index 000000000..acdf41db1
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-spring-security-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-01.png
new file mode 100644
index 000000000..a4b30212d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-02.png
new file mode 100644
index 000000000..e3262a557
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-03.png
new file mode 100644
index 000000000..f8f49e431
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-04.png
new file mode 100644
index 000000000..4169e2f6e
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-05.png
new file mode 100644
index 000000000..19896632a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-06.png
new file mode 100644
index 000000000..cd3896bcb
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-07.png
new file mode 100644
index 000000000..92ce813df
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-08.png
new file mode 100644
index 000000000..7b8f223e6
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-09.png
new file mode 100644
index 000000000..e7538a845
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-trae-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-01.png
new file mode 100755
index 000000000..72c1cfbd4
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-02.png
new file mode 100755
index 000000000..bb91a8daa
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-03.png
new file mode 100755
index 000000000..1ba0a88cf
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-04.png
new file mode 100755
index 000000000..51cf26346
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-05.png
new file mode 100755
index 000000000..045d409aa
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-06.png
new file mode 100755
index 000000000..fb3420ba7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-07.png
new file mode 100755
index 000000000..0cf748479
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-08.png
new file mode 100755
index 000000000..215c6dcc0
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-09.png
new file mode 100755
index 000000000..d35dc34c8
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-traffic-agent-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-01.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-01.png
new file mode 100644
index 000000000..634305c99
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-02.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-02.png
new file mode 100644
index 000000000..157d188fd
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-03.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-03.png
new file mode 100644
index 000000000..147e45d55
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-04.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-04.png
new file mode 100644
index 000000000..dc0451d61
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-05.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-05.png
new file mode 100644
index 000000000..b08a3fffc
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-06.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-06.png
new file mode 100644
index 000000000..5edf80a6a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-07.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-07.png
new file mode 100644
index 000000000..a7c05b2e5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-08.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-08.png
new file mode 100644
index 000000000..f6071c31c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-09.png b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-09.png
new file mode 100644
index 000000000..851b3d50b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/road-map-w13scan-jdumpspider-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-redis-06.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-redis-06.png
new file mode 100644
index 000000000..67b2b92a1
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-redis-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-redis-07.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-redis-07.png
new file mode 100644
index 000000000..52659e0ac
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-redis-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-01.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-01.png
new file mode 100644
index 000000000..3efeecfd9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-02.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-02.png
new file mode 100644
index 000000000..759e5c16c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-03.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-03.png
new file mode 100644
index 000000000..6a5485442
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-04.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-04.png
new file mode 100644
index 000000000..efc2a3236
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-05.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-05.png
new file mode 100644
index 000000000..9f317ef3f
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-06.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-06.png
new file mode 100644
index 000000000..6225d3f71
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-07.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-07.png
new file mode 100644
index 000000000..c66fab4fd
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-08.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-08.png
new file mode 100644
index 000000000..0bd6b19ce
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-09.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-09.png
new file mode 100644
index 000000000..bd3ff1b9f
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-bus-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-01.gif b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-01.gif
new file mode 100644
index 000000000..27c31ab25
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-01.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-02.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-02.png
new file mode 100644
index 000000000..37cd5097f
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-03.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-03.png
new file mode 100644
index 000000000..f2d432b98
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-04.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-04.png
new file mode 100644
index 000000000..ee242a673
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-05.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-05.png
new file mode 100644
index 000000000..ce031bdfd
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-06.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-06.png
new file mode 100644
index 000000000..8610f2352
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-07.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-07.png
new file mode 100644
index 000000000..3f6a559d6
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-feign-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-stream-01.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-stream-01.png
new file mode 100644
index 000000000..481913e1b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-stream-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-stream-02.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-stream-02.png
new file mode 100644
index 000000000..5b804eea9
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-stream-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-stream-03.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-stream-03.png
new file mode 100644
index 000000000..be5655d9c
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-springcloud-stream-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-01.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-01.png
new file mode 100644
index 000000000..079bfd518
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-02.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-02.png
new file mode 100644
index 000000000..1e9496811
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-03.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-03.png
new file mode 100644
index 000000000..9c077330f
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-04.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-04.png
new file mode 100644
index 000000000..143d3e1df
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-05.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-05.png
new file mode 100644
index 000000000..1c5a64742
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-06.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-06.png
new file mode 100644
index 000000000..0de4025b4
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-07.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-07.png
new file mode 100644
index 000000000..2a19dc659
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-08.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-08.png
new file mode 100644
index 000000000..e1bc32085
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-09.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-09.png
new file mode 100644
index 000000000..4bd1dab04
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-10.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-10.png
new file mode 100644
index 000000000..28e2938ea
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-11.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-11.png
new file mode 100644
index 000000000..04ef472c5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-12.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-12.png
new file mode 100644
index 000000000..cf660de65
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-13.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-13.png
new file mode 100644
index 000000000..304c15805
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-13.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-14.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-14.png
new file mode 100644
index 000000000..dc0e5b860
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-14.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-15.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-15.png
new file mode 100644
index 000000000..1c66b6e3f
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-15.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-16.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-16.png
new file mode 100644
index 000000000..d8556ce98
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-16.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-17.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-17.png
new file mode 100644
index 000000000..57d703018
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-17.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-18.png b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-18.png
new file mode 100644
index 000000000..0c14336d4
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/roadmap-ssl-httpsok-18.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-01.gif b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-01.gif
new file mode 100644
index 000000000..69b2da8d2
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-01.gif differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-02.png b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-02.png
new file mode 100644
index 000000000..fb10eef7d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-03.png b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-03.png
new file mode 100644
index 000000000..b963cdaa7
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-04.png b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-04.png
new file mode 100644
index 000000000..e8aebb8c4
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-05.png b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-05.png
new file mode 100644
index 000000000..f5be72464
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-06.png b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-06.png
new file mode 100644
index 000000000..cca1aae7f
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-07.png b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-07.png
new file mode 100644
index 000000000..becd3d3e5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/spring-oauth2-sso-01-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-01.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-01.png
new file mode 100644
index 000000000..eaca958f5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-02.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-02.png
new file mode 100644
index 000000000..6e94fd966
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-03.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-03.png
new file mode 100644
index 000000000..4f0560806
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-04.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-04.png
new file mode 100644
index 000000000..d2a515562
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-05.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-05.png
new file mode 100644
index 000000000..6d33e3e4a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-06.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-06.png
new file mode 100644
index 000000000..5ec1f32e4
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-07.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-07.png
new file mode 100644
index 000000000..567c15aa8
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-08.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-08.png
new file mode 100644
index 000000000..9acac8d2a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-09.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-09.png
new file mode 100644
index 000000000..4ff79f477
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-09.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-10.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-10.png
new file mode 100644
index 000000000..e911f2c96
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-10.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-11.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-11.png
new file mode 100644
index 000000000..507dc0a3b
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-11.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-12.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-12.png
new file mode 100644
index 000000000..75cc7296a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-12.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-13.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-13.png
new file mode 100644
index 000000000..132eb1299
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-dump-13.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-01.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-01.png
new file mode 100644
index 000000000..88d1619bd
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-01.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-02.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-02.png
new file mode 100644
index 000000000..a68e9e76f
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-02.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-03.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-03.png
new file mode 100644
index 000000000..c625f1a3a
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-03.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-04.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-04.png
new file mode 100644
index 000000000..1ccd842ba
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-04.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-05.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-05.png
new file mode 100644
index 000000000..c633cd888
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-05.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-06.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-06.png
new file mode 100644
index 000000000..018312ee8
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-06.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-07.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-07.png
new file mode 100644
index 000000000..8e8d0b204
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-07.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-08.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-08.png
new file mode 100644
index 000000000..0fd1bdb8d
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-08.png differ
diff --git a/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-09.png b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-09.png
new file mode 100644
index 000000000..72737e3d5
Binary files /dev/null and b/docs/.vuepress/public/images/roadmap/tutorial/xfg-dev-tech-visualvm-09.png differ
diff --git a/docs/.vuepress/public/images/system/code.png b/docs/.vuepress/public/images/system/code.png
new file mode 100644
index 000000000..784062316
Binary files /dev/null and b/docs/.vuepress/public/images/system/code.png differ
diff --git a/docs/.vuepress/styles/index.styl b/docs/.vuepress/styles/index.styl
index 3e91100ce..1ef828975 100755
--- a/docs/.vuepress/styles/index.styl
+++ b/docs/.vuepress/styles/index.styl
@@ -30,4 +30,12 @@ h2
 // sidebar
 .sidebar
   width: 18rem
-  font-size: 15px
\ No newline at end of file
+  font-size: 15px
+
+.page-bottom-footer {
+    text-align: center;
+    padding: 15px;
+    font-size: .8rem;
+    font-weight: 400;
+    color: var(--c-text-lightest)
+}
\ No newline at end of file
diff --git a/docs/.vuepress/theme/components/Page.vue b/docs/.vuepress/theme/components/Page.vue
index b9a0e950b..ed7f4b914 100755
--- a/docs/.vuepress/theme/components/Page.vue
+++ b/docs/.vuepress/theme/components/Page.vue
@@ -59,6 +59,9 @@
     </div>
 
     <slot name="bottom"/>
+    <div class="page-bottom-footer">
+        <a href="http://beian.miit.gov.cn" target="_blank">京ICP备19031103号</a> | <a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11030102010881" style="display:inline-block;text-decoration:none;height:20px;line-height:20px;"><img src="https://bugstack.cn/assets/images/beian.png" style="float:left;"/><p style="float:left;height:20px;line-height:20px;margin-top:5px; color:#939393;">京公网安备 11030102010881号</p></a> | GPL Licensed | Copyright © 2019 小傅哥，All rights reserved.
+    </div>
   </main>
   </div>
 </template>
diff --git a/docs/.vuepress/theme/components/PageSidebar.vue b/docs/.vuepress/theme/components/PageSidebar.vue
index c55a9833b..05d3373b2 100755
--- a/docs/.vuepress/theme/components/PageSidebar.vue
+++ b/docs/.vuepress/theme/components/PageSidebar.vue
@@ -13,6 +13,15 @@
                 <div class="toc-box">
                   <PageSidebarToc :depth="0" :items="pageSidebarItems" :sidebarDepth="3"/>
                 </div>
+                  <hr/>
+                  <div class="pos-box">
+                      <div class="icon-arrow"></div>
+                      <div class="scroll-box" style="text-align:center" >
+                          <span style="font-size:0.8rem;font-weight:bold;">👨🏻‍💻 <a href="https://wx.zsxq.com/group/48411118851818" target="_blank" style="color: #2c3e50">带你学习，实战项目。</a><span style="font-size:12px;color:red;">提高编程思维，锻炼编码能力！</span>17个实战项目，增强面试竞争力！</span>
+                          <img height="180px" src="/images/personal/xingqiu.png"/>
+                          <b>扫码加入，星球</b>：码农会锁
+                      </div>
+                  </div>
               </div>
             </div>
         </div>
@@ -58,14 +67,14 @@
         <span class="show-txt">左栏</span>
       </div>
 
-      <div class="option-box" v-on:mouseout="hideToc($event)" v-on:mouseover="showToc($event)" onclick="javascript:window.open('https://wx.zsxq.com/dweb2/index/group/48411118851818','_blank')">
+      <div class="option-box" v-on:mouseout="hideToc($event)" v-on:mouseover="showToc($event)" onclick="javascript:window.open('https://wx.zsxq.com/group/48411118851818','_blank')">
         <img class="nozoom" src="/images/system/xingqiu.png" width="25px" />
         <span class="show-txt">星球</span>
         <div class="toc-container">
           <div class="pos-box">
             <div class="icon-arrow"></div>
             <div class="scroll-box" style="text-align:center" >
-              <span style="font-size:0.8rem;font-weight:bold;">实战项目<span style="font-size:8px;color:red;">「DDD+RPC分布式抽奖系统」</span>、专属小册、问题解答、简历指导、架构图稿、视频课程</span>
+              <span style="font-size:0.8rem;font-weight:bold;">带你学习，实战项目。<span style="font-size:12px;color:red;">提高编程思维，锻炼编码能力！</span>17个实战项目，增强面试竞争力！</span>
               <img height="180px" src="/images/personal/xingqiu.png" style="margin:10px;"/>
               <b>知识星球</b>：码农会锁
             </div>
@@ -103,6 +112,11 @@
         </div>
       </div>
 
+      <div class="option-box" v-on:mouseout="hideToc($event)" v-on:mouseover="showToc($event)" onclick="javascript:window.open('https://gaga.plus','_blank')">
+        <img class="nozoom" src="/images/system/code.png" width="25px" />
+        <span class="show-txt">做项目</span>
+      </div>
+
       <div class="option-box" v-on:mouseout="hideToc($event)" v-on:mouseover="showToc($event)" onclick="javascript:window.open('https://t.zsxq.com/17UIvdgb3','_blank')">
           <img class="nozoom" src="/images/system/interview.png" width="25px" />
           <span class="show-txt">八股文</span>
diff --git a/docs/README.md b/docs/README.md
index 53f582d81..63fe4edc0 100755
--- a/docs/README.md
+++ b/docs/README.md
@@ -5,17 +5,17 @@ actionLinks:
 - link: /md/other/guide-to-reading.md
   text: 开始阅读 →
   class: primary
-- link: https://t.zsxq.com/09hMHNMEh
+- link: https://wx.zsxq.com/group/48411118851818
   text: 知识星球
   class: secondary  
 - link: /md/road-map/road-map.md
-  text: 路书 👣
+  text: 编程路书 👣
   class: secondary   
 - link: https://gaga.plus
-  text: 项目 💐
+  text: 项目(+菜鸟教程) 💐
   class: secondary    
 - link: https://618.gaga.plus
-  text: 3.8元/月(云服务器) ☁️
+  text: 9.9元/月(云服务器) ☁️
   class: secondary
 features:
 - title: 沉淀
@@ -43,6 +43,9 @@ footer: <a href="http://beian.miit.gov.cn" target="_blank">京ICP备19031103号<
 ### 开发的项目
 
 - 业务项目
+    - [DeepSeek RAG&MCP&Agent 智能体（新）](https://bugstack.cn/md/project/ai-knowledge/ai-knowledge.html)
+    - [拼团交易平台系统（新）](https://bugstack.cn/md/project/group-buy-market/group-buy-market.html)
+    - [小型支付电商系统 - 一套项目2套架构开发（MVC+DDD）](https://bugstack.cn/md/project/s-pay-mall/s-pay-mall.html)
     - [大营销平台系统 - 前后端 + Dev-Ops 的全栈式综合编程实战DDD项目！](https://bugstack.cn/md/project/big-market/big-market.html)
     - [OpenAi 大模型微服务应用体系构建 - API-SDK、鉴权、公众号、微信支付](https://bugstack.cn/md/zsxq/project/chatgpt.html)
     - [Lottery 分布式抽奖系统 - 基于领域驱动设计的四层架构实践](https://bugstack.cn/md/zsxq/project/lottery.html)
@@ -50,6 +53,7 @@ footer: <a href="http://beian.miit.gov.cn" target="_blank">京ICP备19031103号<
     - [ChatGPT AI 问答助手 - 小型，对接知识星球](https://bugstack.cn/md/zsxq/project/chatbot-api.html)
 
 - 组件项目
+    - [通用技术组件 - 🔧扳手工程](https://bugstack.cn/md/zsxq/project/xfg-wrench.html)
     - [OpenAI 代码自动评审组件](https://bugstack.cn/md/zsxq/project/openai-code-review.html)
     - [透视业务流程 - 监控系统](https://bugstack.cn/md/zsxq/project/business-behavior-monitor.html)
     - [动态线程池组件](https://bugstack.cn/md/zsxq/project/dynamic-thread-pool.html)
diff --git "a/docs/md/about/job/2024-09-08-\351\230\277\351\207\214P7\357\274\214\345\260\261\346\230\257\345\276\210\345\244\232\344\272\272\347\232\204\345\244\251\350\212\261\346\235\277\345\220\227\357\274\237.md" "b/docs/md/about/job/2024-09-08-\351\230\277\351\207\214P7\357\274\214\345\260\261\346\230\257\345\276\210\345\244\232\344\272\272\347\232\204\345\244\251\350\212\261\346\235\277\345\220\227\357\274\237.md"
new file mode 100644
index 000000000..f175ebbc0
--- /dev/null
+++ "b/docs/md/about/job/2024-09-08-\351\230\277\351\207\214P7\357\274\214\345\260\261\346\230\257\345\276\210\345\244\232\344\272\272\347\232\204\345\244\251\350\212\261\346\235\277\345\220\227\357\274\237.md"
@@ -0,0 +1,87 @@
+---
+title: 阿里P7，就是很多人的天花板吗？
+lock: no
+---
+
+# 阿里P7，就是很多人的天花板吗？
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+有人说：”阿里的P7就是很多人的天花板？“，其实他说的没错。这个级别对应研发就是高级架构师，或者M序列管理一个组长的岗位。前面冲到P7靠你的学历进入大厂和技术积累冲击岗位，但从这往后再想晋升靠命了！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/about/about-job-240908-01.gif" width="150px">
+</div>
+
+**天花板级别的收入咋样？🤔**
+
+`字节的 2-2 ~ 3-1`、`腾讯的10级 ~ 11级`、`阿里的 P7~P8`、`京东的 T7~T8`，他们的待遇和基本收入是差不多的。在这些级别中平级跳槽的一般不多，除非有是干的实在不爽了。一般是手里有干货的，从任何一家调另外一家，普通会级别+1，收入也会有所增加。来自 [duibiao.info](https://duibiao.info/) 的一份收入数据对比。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/about/about-job-240908-02.png" width="950px">
+</div>
+
+举例🌰，在一个大部门中，T9级别极少，年龄最大，T8少量、主力在 T6~T7，校招新入职在 T2~T3。不过往往C9级别高等院校的学生 + 技术积累很不错，拿到的校招 Offer 会倒挂社招T5级别的薪资范围。前两年一般需要积累，无晋升名额，从做出成绩后，1~2年可能会提名一次晋升。当然还有一些靠命的东西，会走的很快。比如公司组织的技术赛事获奖、A级项目入围等。**当然如果你连续发生事故，造成重大影响，也会让你走的很快。**
+
+> 接下来，小傅哥分享一些，修炼一身，即走的出去加薪，也留的下来晋升的本事！
+
+## 一、不要过早冒头！- 做人
+
+`纵无显效亦藏拙，若有所成甘守株。`
+
+在武侠电影🎬《剑雨》中有这一段，陆竹在破庙中与细雨经过一番过招之后，指出细雨的剑法漏洞。并通过`藏拙于巧（藏巧于拙）`，`用晦而明`，`寓清于浊`，`以屈为伸`，破解辟水剑。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/about/about-job-240908-03.png" width="650px">
+</div>
+
+这里有一句，藏拙于巧，出自于 自贻 - 唐·罗隐 中的诗句`纵无显效亦藏拙，若有所成甘守株。`。意思在于古往成就大事者，都要善于藏锋守拙、低调隐忍。
+
+在我最开始入职的时候，就不善于这个。往往都是横冲直撞，斗业务、怼产品、干测试！要不是得益于早年的互联网更纯粹，加上领导的偏爱。可能在某次过招后，我也就被送走了。直到现在我的电脑里还保留有和当时产品 battle 的截图 😂。当时的性格就是，你错了，你不对，我指出你不认，那我就再上一招！但往往每一招背后，我也都有漏洞，就像那剑法一样。所以一直我也没有走管理岗！
+
+所以无论是校招还是社招，进入一家公司后。都不要想着一进来就做的多大，也不要想着多快的晋升。所有看似风平浪静的组织，往往背后也都牵扯着一堆的`"利益权衡"`。先做好自己，完成好交付。
+
+## 二、不要只做业务！- 做事
+
+业务是程序员👨🏻‍💻进入公司后完成的第一个交付动作，以目前看所有的人都是为了业务的发展而存在的。如果业务不赚钱，第一个被送走的就是程序员。但这里就有一个很重要的事情，你还记得你是怎么进来的吗？要不是校招学历、要不是技术积累、要不是项目经验、要不是背了八股刷了算法。但终究不是说你手速多快，能敲多少 CRUD 进来的。
+
+所以，在公司中不能只是完成业务交付即可，要在业务交付多积累成绩。因为同样一个项目不同的人设计实现，就会出现不一样的成绩。有些会把架构、模型、方案、扩展、都在一次次交付中积累出来，并在需求的时候将这一套标准沉淀并复用。这些东西落地可为其他组做标准，上升可为述职讲成绩。同时，你观察🔎还会发现，组内总有人会对同类的技术工作，凝练总结设计开发成通用的技术组件。在归属上这不是他的强职责范围，但在年终总结和后续晋升比拼上可是实打实的成绩。差距也是这样一点点拉开的。
+
+我常听到有人说，DDD 复杂、设计模式浪费时间。不，你要知道，不是那东西复杂，也不是那东西浪费时间。是你，是你复杂，是你浪费时间！你不觉得当让你来做分享的时候，你甚至没有办法用技术的话术阐述自己的过程，也很难总结出过往的成绩。总感觉自己就是在拼装接口、组织逻辑、完成交付。
+
+所以你只是扮演着劳苦，但不功高的角色。每每提到晋升加薪，就会反问到，你这个人有什么成绩！
+
+## 三、不要持续趟平！- 自己
+
+`趟平就是工作懈怠吗？其实过渡的工作也是一种趟平。`
+
+不知道你是否意识到，公司和个人是两条发展线，是不能顾此失彼的。更好的个人能力是可以更好的把工作做出成绩。而往往有些人一脑门子的只是一个状态下同一个方式的完成工作，其实往往是没有多少成绩的。
+
+一个程序员如果只是会写代码，其实是偏安一隅。业务怎么样、运营怎么做、产品怎么设计、一整套的开发工具实施运维是怎么运行的、各个组件都有哪些原理等等，这些东西都是都需要掌握的。在整体的学习过程中，综合的锻炼出自己成体系的知识结构，才是长久有价值的。
+
+尤其是可以跟着一些有大厂经验的人学习他的方法论，学习他的业务经验、学习他的编码技巧，都是可以快速的提高自己的能力的。
+
+## 四、小傅哥的经验！- 参照
+
+小傅哥在职场发展、业务经验、场景方案、技术经验、实战项目等多方面都有来自于大厂锻炼出来的经验编写。可以让伙伴们学习，快速提高自己的。还为500多人修改过简历，不少伙伴也都被小傅哥的经验，抬进了非常不错的公司。各个大厂也都有小傅哥的伙伴。
+
+在这方面我总结了很多的经验，你可以阅读；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/about/about-job-240908-04.png" width="750px">
+</div>
+
+地址：[https://bugstack.cn/md/zsxq/material/study-experience.html](https://bugstack.cn/md/zsxq/material/study-experience.html)
+
+---
+
+加入小傅哥的星球「码农会锁」阅读450+份简历和评审，学习6个业务项目；`MVC+DDD，双架构开发小型电商`、`大营销（超级大课）`、`OpenAI 大模型应用`、`Lottery`、`IM`、`AI 问答助手`。7个组件项目；`OpenAI 代码评审`、`BCP 透视业务监控`、`动态线程池`、`支付SDK设计和开发`、`API网关`、`SpringBoot Starter`、`IDEA Plugin 插件开发`。1套源码课程、1套基础教程、1到云服务器教程以及各类场景解决方案。
+
+如果大家希望通过做有价值的编程项目，提高自己的编程思维和编码能力，可以加入小傅哥的【星球：码农会锁】。加入后解锁🔓所有往期项目，还可以学习后续新开发的项目。
+
+> 🧧加入学习这样一套项目，放在一些平台售卖，一个至少都是上千块。但小傅哥的星球，只需要100多，就可以获得全部的学习项目！重要的是学习小傅哥的经验！
diff --git "a/docs/md/about/me/2020-12-27-2020\346\200\273\347\273\223\357\274\214\344\275\234\344\270\272\346\212\200\346\234\257\345\217\267\344\270\273\347\232\204\344\270\200\345\271\264\357\274\201.md" "b/docs/md/about/me/2020-12-27-2020\346\200\273\347\273\223\357\274\214\344\275\234\344\270\272\346\212\200\346\234\257\345\217\267\344\270\273\347\232\204\344\270\200\345\271\264\357\274\201.md"
index b34a64b10..dfde0c951 100644
--- "a/docs/md/about/me/2020-12-27-2020\346\200\273\347\273\223\357\274\214\344\275\234\344\270\272\346\212\200\346\234\257\345\217\267\344\270\273\347\232\204\344\270\200\345\271\264\357\274\201.md"
+++ "b/docs/md/about/me/2020-12-27-2020\346\200\273\347\273\223\357\274\214\344\275\234\344\270\272\346\212\200\346\234\257\345\217\267\344\270\273\347\232\204\344\270\200\345\271\264\357\274\201.md"
@@ -1,7 +1,7 @@
 ---
 layout: post
 category: itstack-code-life
-title: 2020总结 | 作为技术号主的一年！
+title: 2020年，小傅哥の年终总结！
 tagline: by 小傅哥
 tag: [java,itstack-code-life]
 excerpt: 快到年底了，写个总结吧！关注我的粉丝朋友，谢谢你！滴水之恩，永不相忘！我没照顾到的伙伴，对不起！我不是有意忽略了你。致我相识的每一位同好，所求皆如愿、所行化坦途。再见2020，迎接2021！
diff --git a/docs/md/about/me/2024-11-17-gold-content.md b/docs/md/about/me/2024-11-17-gold-content.md
new file mode 100644
index 000000000..5c0e6528f
--- /dev/null
+++ b/docs/md/about/me/2024-11-17-gold-content.md
@@ -0,0 +1,90 @@
+---
+title: 小傅哥的含金量，还在上升！
+lock: need
+---
+
+# 小傅哥的含金量，还在上升！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+嘿嘿 😈，有时候我也会去网上对我评论，或者爬爬楼看看群里有人提到我时候的评价。当然无论什么内容，我基本不会去参与。毕竟让人怪不好意思的。不过我偷偷截图下来，当做对自己所做事情的鼓励。**你也想知道大家对我怎么评价的不？🤔**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/about/about-241117-01.gif" width="150">
+</div>
+
+**不装了，我是大厂架构师，我摊牌了！**
+
+能在一家互联网大厂公司工作近10年，一直在一线核心业务场景开发&架构，又不断的承担高并发项目的架构和设计落地。那么他的广度、深度都会有非常不错的积累。如果他在能陆续的输出这些内容让人能学习到，可以说是做了非常有意义的事情！而小傅哥就是那个其中的他。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/about/about-241117-02.png" width="450">
+</div>
+
+在我编写的博客量内容越来越多以后，我得到了很多的正反馈，包括；非常多的公司把这些内容作为`架构指导建议`、`编码行为规范`、`场景方案示例`，也有高校老师直接点名学生跟着小傅哥学项目，还有伙伴在各个论坛留言的认可。嘿嘿 那可以刻我觉得做有价值的技术分享真不错。
+
+## 一、老师说；先跟着小傅哥做项目！
+
+我的大学导员时而也会和我聊，现在大学生要学习哪些技术，才能和公司招聘要求匹配。因为在校的学生👩🏻‍🎓做的项目，很多都是 CRUD 的，这些内容刚入门的时候做1-2次还好，但再重复就没有意义了，缺少广度和深度锻炼。所以非常需要像做公司里的项目一样成长。
+
+没想到类似这样的对话，在其他高校的老师和高校的学生也给他的学生和伙伴分享。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/about/about-241117-03.png" width="450">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/about/about-241117-04.png" width="450">
+</div>
+
+也是因为有这样多的信任和认可，我也变得"越来越卷"😂，不断的卷出新的实战项目！这些项目的不是就只完成功能，而是把大厂中的经验整合进来，把业务、架构、设计、编码的技巧，逐步的呈现到项目中。所以跟着小傅哥学习，会吸收的非常多。
+
+## 二、评论区；这群死鬼还真认可我！
+
+有时候我的粉丝伙伴会把一些评论截图给我，告诉大家对我的认可。还把我引流到 linux.do 注册了个账号😂。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/about/about-241117-05.png" width="450">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/about/about-241117-06.png" width="450">
+</div>
+
+- 其实当你有非常强的积累，有足够的广度和深度，用大量的时间做技术积累，其实是会得到很多伙伴的认可的。
+- 像是 OpenAI 大模型、大营销这样的大项目每个都花费1年的时间进行打磨输出。而且我也会有意的把互联网大厂中的技术方案，随着项目输入进去。这就像你吃一个东西一样，层层都有口感。演示：[https://openai.gaga.plus/](https://openai.gaga.plus/) - 当你看到小傅哥编码的项目，会让你对系统架构和工程编码都有非常高的认知。
+
+## 三、产品线；为开源社区做贡献！
+
+写开源组件、做工具插件，又发表过十多个专利。小傅哥不只是带着大家做项目，日常也会搞一些小东西，让开发工程师可以使用，提高编码效率。
+
+地址：[https://plugins.jetbrains.com/plugin/18262-vo2dto/versions](https://plugins.jetbrains.com/plugin/18262-vo2dto/versions)
+源码：[https://github.com/fuzhengwei/vo2dto](https://github.com/fuzhengwei/vo2dto)
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/about/about-241117-07.png" width="850">
+</div>
+
+💱 vo2dto IDEA Plugin 1.89万下载量，解决对象转换问题。选定对象批量织入“x.set(y.get)”代码，帮助开发者自动生成vo2dto转换代码。
+
+✨ 特性
+
+1. 2个对象的转换操作，通过复制 X x 对象，转换给 Y y 对象
+2. 允许使用 lombok 对象转换、lombok 和普通对象转换，对于 serialVersionUID 属性过滤
+3. 支持类继承类，全量的对象转换操作
+4. 含记忆功能的弹窗选择映射关系，支持全量对象、支持匹配对象、也支持空转换，生成一组set但无get的对象
+5. 支持对于引入不同包下的同名类处理
+6. 支持 Lombok.Builder 模式创建转换对象
+
+## 四、卷工作；用强悍的实力拿下大厂Offer
+
+跟着小傅哥学习，不会浪费时间，不会走小道弯路。全程做技术兜底，遇到的各种问题都能帮你解决。包括你学习时候的代码bug，可以把代码提交到星球，我来帮你调试。最终把兄弟们送到各个竞争赛道的头部，拿到最牛的薪资待遇 Offer！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-241109-05.png" width="650">
+</div>
diff --git "a/docs/md/about/me/2025-01-05-2024\345\271\264\357\274\214\345\260\217\345\202\205\345\223\245\343\201\256\345\271\264\347\273\210\346\200\273\347\273\223\357\274\201.md" "b/docs/md/about/me/2025-01-05-2024\345\271\264\357\274\214\345\260\217\345\202\205\345\223\245\343\201\256\345\271\264\347\273\210\346\200\273\347\273\223\357\274\201.md"
new file mode 100644
index 000000000..d45e24404
--- /dev/null
+++ "b/docs/md/about/me/2025-01-05-2024\345\271\264\357\274\214\345\260\217\345\202\205\345\223\245\343\201\256\345\271\264\347\273\210\346\200\273\347\273\223\357\274\201.md"
@@ -0,0 +1,79 @@
+---
+title: 2024年，小傅哥の年终总结！
+lock: need
+---
+
+# 2024年，小傅哥の年终总结！
+
+作者：小傅哥
+博客：[https://bugstack.cn](https://bugstack.cn/)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+仿佛24年的元旦聚餐还在昨天，一觉酒醒就到了25年的元旦😂。要不总说，幸福不折腾的日子总让人感觉过的很快，还真是快。
+
+同时我也满怀期待，临近过年的3周，有伙伴聚餐、有单位团建，喜庆氛围逐步拉满，之后快乐过年！**今年应该能放炮了🧨，庆祝下这一年做的大量上百万字的内容输出！**
+
+<div align="center">
+    <img src="https://bugstack.cn/assets/images/2020/all-13-1.jpg" width="650px">
+</div>
+
+>这是我东北的老家，每每过年都会想起他。从13年毕业到现在，整个家里人就一起“北漂”了，也就没在东北过过年。看看2025年可以回去一趟。
+
+## 疯狂输出
+
+这一年的输出也是卷的飞起，包括；一套`大营销项目60节+`、一套`小型支付双架构MVC+DDD`、三套`技术组件项目`和一套`基础教程70节的《编程路书》`，同时配套的录制大量的视频教程。合计输出至少在200万字。—— 键盘膜都敲碎了！😱
+
+- 编程路书，是一套为了帮助小白伙伴学习编程开发的实战案例指导手册。包括；脚手架、系统架构、开发环境、开发技术、常用类库、工程测试、质量监控、发布部署、应用网关，这样几个大块。这也是我看过很多网上都是碎片化的不成体系的教程，甚至都没法运行，所以构建了这样一套免费教程，帮助大家学习。
+- 业务项目，大营销是一套非常大型的实战业务项目，含有丰富的业务场景，全程视频手把手的教程，带着大家做技术成长。随着大营销的落地，又开启了小型支付项目，用 MVC 和 DDD 架构分别实现一遍，让小伙伴可以快速理解 DDD 并上手开发。
+- 技术组件，其实小傅哥深知，简历要想漂亮点，必须是有点轮子一样的技术组件。虽然公司不一定让你哐哐哐的造轮子，但是得有这样的技术，因为这是你技术深度的体现。
+
+与此同时，为了让学习编程的伙伴可以成体系化的成长，所学内容有连贯性、进阶型，而不是东一榔头，西一棒子。所以小傅哥构建了一整套项目进阶路线。这套项目进阶路线，在25年会继续迭代。让大家一次加入就学到爽！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/zsxq-241007-02.png" width="600px">
+</div>
+
+>🧧关注公众号「bugstack虫洞栈」回复「星球」可以领取加入优惠券。
+
+## 长期主义
+
+`这一年胖东来火了，雷军的含金量也在不断提升。`
+
+但其实说白了，别骗人、别忽悠、做长期且有价值的事，长期坚持做，达到一定的规模体量了，就一定会有成绩。
+
+而那些靠大量推广和包装起来的，总会在后面得到一堆堆流量的反噬。而长期坚持虽然看着慢，但完完整整的做下来一个个硬核项目的，总能在后面得到好的反馈。
+
+如果有些伙伴想自己做点什么，只要在你喜欢的能长期做的方向上，一直做下去，积累大量的生产资料，最后也都可以做成。不用图快，有时候图快就会成韭菜。
+
+工作了这么多年，看到一个个同事从最初入职到10年的发展，会感觉多少有点“命”在里面😂。有些一起的同期的伙伴，职位都已经到达了顶峰。而以前的他的领导，都成了他下面，下面，下面的部门职员。
+
+但其实这个“命”也是个人长期在某些方向积累的结果，比如你持续积累的业务经验甚多，做的项目也都次次拿奖，又具备良好的表达能力。自然就会平步青云。而如果你在部门偏创新，反复的调整折腾，别说往上走，别被开除都算不错的。
+
+当然，所有的这些，没有啥可能一直持续的平稳的，都可能在不确定性中发展。即使你工作很久在一个项目上，但这个项目也不是你的。随时都可能被拿走。如果你的被反复拿走，那么就要多积累自己。如果你的不被拿走，而且把别人的拿走给你，那你就可以好好做项目，慢慢项目多了，管的人也会增多。所以，你要知道自己处于的是什么路线，有没有“命”里的正财或偏财，之后选择性的发展。让其他分支路线，保持个60分及格就行了。
+
+但命呢，也是过往信息、技能、知识、逻辑的积累所产生的行为判断。如果你做的哪些事向好，但又不符合自己的性格就是运。所以，一个人正向的积累越多，越能让自己有非常好的命。
+
+## 卷和不卷
+
+`500万-800万，买一套房，你会选择留在北京吗？🐂🐴`
+
+不会，为什么？因为小孩晚上不爱睡觉！啊？这两者有什么关系？
+
+我呢，是来自于东北的村里，小的时候总是天一黑，跟着大人看会电视📺，没等到7:00的新闻联播演完，就困的睡着了。第二天，又跟着大人，早早的起床。因为大人要下地干活了，晚起就没人管了。
+
+但现在的小孩，能整整熬到10点、11点才睡觉，他们就像有很多精力一直没释放完一样。和自己小时候一对比，突然想到。是呀，自己小时候，开门出去就是一个非常大的院子，再跑出去就是跟着一帮的伙伴在野地里疯跑，晚上自然累的呼呼就睡。
+
+而现在的小孩，基本一整天都在水泥楼房里，每次下个楼都要换一堆的衣服，出去跑一会又回来继续脱衣服。等在过几年，就开始上幼儿园、小学、中学，一直被卷到毕业再到进厂当牛马。虽然我们现在也做这牛马的工作，但好在累了还能回忆下小时候有个不错的童年。
+
+所以，在整个时代机会那么大的时候，你都没有卷出结果，怎么就能觉得在培养一个小牛马，就能继续卷赢。当然，这只是我的想法，如果都是我的想法，想必不卷也会过的不好。所以一定要有人卷。
+
+当下，我们都已经这么明白这个社会的运行规则了，要卷就先卷自己吧。**走暗路、更瘦天、进窄门**
+
+## 未来输出
+
+25年，必然也会很忙的一年。因为我的计划是交付出一套全体系的应用级项目，让你在小傅哥这里学习就等于进入一个互联网大厂学习。
+
+目前已有6个业务项目、7个组件项目交付完成，未来一年保守估计将会再交付2套业务，2套组件。不过虽然有这么大量的交付和高频的更新，但小傅哥的星球依旧是价格上最实惠的。仅仅用一个项目的价格，就可以学习全部项目！
\ No newline at end of file
diff --git "a/docs/md/about/me/2025-07-03-\345\230\216\345\230\216\345\274\272\357\274\214\345\230\216\345\230\216\345\223\222\345\255\246v2.0.md" "b/docs/md/about/me/2025-07-03-\345\230\216\345\230\216\345\274\272\357\274\214\345\230\216\345\230\216\345\223\222\345\255\246v2.0.md"
new file mode 100644
index 000000000..a5d3a0223
--- /dev/null
+++ "b/docs/md/about/me/2025-07-03-\345\230\216\345\230\216\345\274\272\357\274\214\345\230\216\345\230\216\345\223\222\345\255\246v2.0.md"
@@ -0,0 +1,115 @@
+---
+title: 帮助大家学编程，嘎嘎大学 v2.0 上线！
+lock: need
+---
+
+# 帮助大家学编程，嘎嘎大学 v2.0 上线！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+五年啦📢，从最初只有一个 `IM 仿微信项目` + `编写 Netty` + `字节码编程`文章小傅哥，终于靠一己之力构建出了完整的toc业务场景，实战项目训练社群。感谢这么多年一直陪伴着小傅哥的粉丝伙伴！体验地址：[https://gaga.plus](https://gaga.plus)
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/about/about-250713-01.png" width="800px">
+</div>
+
+**文末说说下个五年**
+
+**gaga.plus 嘎嘎强，嘎嘎哒（大）学，小傅哥的私有技术朋友圈 👬🏻**
+
+嘎嘎强，嘎嘎哒学，是帮助从事软件开发行业的伙伴，搭建起一条与实际公司场景项目最近的桥廊。在这里你不需要臆想出虚假的项目，也不需要全是 CRUD 的空洞编程。而是实实在在的来自于企业的真实业务流程，进行编程思维的锻炼和编码能力的提升。
+
+嘎嘎哒学，是以一个互联网公司中的真实项目组，进行业务场景需求的讲解和项目的开发。再这样的一个项目组，有业务项目，有通用组件项目，有创新应用项目。还有项目的分析、设计、部署、上线、监控、压测，可以说你在小傅哥这里学习，就等于你在真实大厂的实际工作。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250629-02.png" width="800px">
+</div>
+
+**注意，实习生不算，因为实习生进入工作大部分是做边角料的活。** 所以实习生，更要学习，否则还远不如在小傅哥技术社群学习积累的多。
+
+## 一、嘎嘎哒学
+
+**嘎嘎强，嘎嘎哒学！**我把这作为一个`在线的技术大学`进行维护。社群，以最实惠的价格，最丰富的项目，带着粉丝伙伴一起成长。并且提供全程从0到1的教程，让小白伙伴也能上手学习，互联网真实场景的实战项目。
+
+地址：[https://gaga.plus/](https://gaga.plus/)
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/about/about-250713-02.png" width="800px">
+</div>
+
+🎓 欢迎来到技术社群，星球「码农会锁」！这里是你的 🏫 编程学习殿堂。体验真实业务场景项目，掌握大厂核心编程技术。 全程视频手把手，增强编程思维，锻炼编码能力 👨🏻‍💻
+
+跟着小傅哥学习，你可以积累到非常丰富的实用性实战技能；
+
+- 【系统架构】微服务、DDD 领域驱动设计、SpringBoot Starter、IDEA Plugin
+- 【设计模式】工厂、策略、模板、外观、组合、状态、代理、门面等 —— 这些设计模式都在项目中使用，解决实际场景问题。
+- 【框架技术】Spring、SpringBoot、SpringMVC、MyBatis、MySQL、Guava、JWT、Shiro、OKHTTP3、Schedule、Netty、字节码(ASM\Javassist\Byte-Buddy)、JavaFx
+- 【分布式类】Dubbo、MQ(Kafka\RocketMQ)、Redis、XXL-Job、Zookeeper、Sharding-JDBC、DB-Router、Elasticsearch、Zookeeper、Canal、Otter、ELK、Hystrix、RateLimiter
+- 【前端技术】React、Next.js、Typescript
+- 【运维知识】Docker、Portainer、Git、Compose、运维脚本
+- 【创新技术】Spring AI、RAG、MCP、Agent
+- 【通用组件】结合 Spring、Redis、MyBatis、AOP技术等，实现的通用技术组件
+- 【技术方案】营销、电商、外卖、支付、组件、重构，以及性能优化等各类场景的技术方案归档。
+
+这些技术都是在各个项目中运用到的内容，也是中大互联网公司必备的技术技能，从面试招聘的要求中就能看到这些知识项要求熟练掌握。那么，这些内容也是小傅哥星球内项目能让大家学习掌握的技术。此外，还有一项隐藏技能就是绘画能力。
+
+进入公司后，免不了要述职、分享、答辩，那么绘画就是一些非常重要的技能，加入星球就能看到各类项目中的高级绘图，学习这些能力。
+
+## 二、项目举例
+
+### 1. 业务项目
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/about/about-250713-03.png" width="800px">
+</div>
+
+### 2. 组件项目
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/about/about-250713-04.png" width="800px">
+</div>
+
+### 3. 其他项目
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/about/about-250713-05.png" width="800px">
+</div>
+
+## 三、运维操作
+
+其实学项目，就不只是写代码，还有很多的其他操作。就像公司里一样，写代码只是编程工作的一部分。因此，小傅哥也带着大家学习整个 DevOps 的各项技术。如，Docker + 软件，在云服务器的操作，提供好运维脚本。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/about/about-250713-06.png" width="800px">
+</div>
+
+### 1. 一键安装脚本
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/about/about-250713-07.png" width="800px">
+</div>
+
+### 2. 云服务器教程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/about/about-250713-08.png" width="800px">
+</div>
+
+- 地址：[https://bugstack.cn/md/road-map/docker-install.html](https://bugstack.cn/md/road-map/docker-install.html)
+
+## 四、下个五年
+
+地址：[https://github.com/fuzhengwei/CodeGuide/issues/111](https://github.com/fuzhengwei/CodeGuide/issues/111)
+
+让人怪不好意思的，上山⛰的路走了，巅峰的山也看了，后面也快下山了。**所以下个五年，感觉有点像离职倒计时。😂**
+
+在公司中我们每隔3年，可以申请一次换新的电脑，领取到手后，会有一个残值，不断的降低，最终到3年降低到0元，之后就可以换新的了。
+
+有时候我们一起聊天的伙伴，也会感觉自己的残值在逐渐的降低。一方面是年级越来越大，部门的新人越来越多。另外一方面是自己的家庭，娃也都快要上小学，离开也是陆续的事。
+
+那么，下个五年走完后。那时候，应该彻底的在做自己的事了。今年5年的利率 `1.6%`，五年后正好取定期存款，拿利息带着家人一起旅游！🚗 ⛰
diff --git a/docs/md/algorithm/data-structures/2022-08-06-queue.md b/docs/md/algorithm/data-structures/2022-08-06-queue.md
index c97ddc52c..a7a0122b9 100644
--- a/docs/md/algorithm/data-structures/2022-08-06-queue.md
+++ b/docs/md/algorithm/data-structures/2022-08-06-queue.md
@@ -95,12 +95,12 @@ private void siftUpComparable(int k, E x) {
         int parent = (k - 1) >>> 1;
         logger.info("【入队】寻找当前节点的父节点位置。k：{} parent：{}", k, parent);
         Object e = queue[parent];
-        // 如果当前位置元素，大于父节点元素，则退出循环
+        // 如果当前位置元素大于父节点元素，则退出循环
         if (key.compareTo((E) e) >= 0) {
             logger.info("【入队】值比对，父节点：{} 目标节点：{}", JSON.toJSONString(e), JSON.toJSONString(key));
             break;
         }
-        // 相反父节点位置大于当前位置元素，则进行替换
+        // 相反当前位置元素小于父节点位置，则进行替换
         logger.info("【入队】替换过程，父子节点位置替换，继续循环。父节点值：{} 存放到位置：{}", JSON.toJSONString(e), k);
         queue[k] = e;
         k = parent;
@@ -183,7 +183,7 @@ private void siftDownComparable(int k, E x) {
         if (key.compareTo((E) c) <= 0) {
             break;
         }
-        // 目标值小于c值，位置替换，继续比较
+        // 目标值大于c值，位置替换，继续比较
         logger.info("【出队】替换过程，节点的值比对。上节点：{} 下节点：{} 位置替换", JSON.toJSONString(queue[k]), JSON.toJSONString(c));
         queue[k] = c;
         k = child;
@@ -305,4 +305,4 @@ public E poll() {
 - 简述延迟队列/优先队列的实现方式
 - 二叉堆插入/弹出元素的过程
 - 延迟队列的使用场景
-- 延迟队列为什么添加信号量
\ No newline at end of file
+- 延迟队列为什么添加信号量
diff --git "a/docs/md/assembly/middleware/2019-12-07-\345\217\221\345\270\203Jar\345\214\205\345\210\260Maven\344\270\255\345\244\256\344\273\223\345\272\223\357\274\214\344\270\272\345\274\200\345\217\221\345\274\200\346\272\220\344\270\255\351\227\264\344\273\266\345\201\232\345\207\206\345\244\207.md" "b/docs/md/assembly/middleware/2019-12-07-\345\217\221\345\270\203Jar\345\214\205\345\210\260Maven\344\270\255\345\244\256\344\273\223\345\272\223\357\274\214\344\270\272\345\274\200\345\217\221\345\274\200\346\272\220\344\270\255\351\227\264\344\273\266\345\201\232\345\207\206\345\244\207.md"
index 7b87d0a5c..b11591800 100644
--- "a/docs/md/assembly/middleware/2019-12-07-\345\217\221\345\270\203Jar\345\214\205\345\210\260Maven\344\270\255\345\244\256\344\273\223\345\272\223\357\274\214\344\270\272\345\274\200\345\217\221\345\274\200\346\272\220\344\270\255\351\227\264\344\273\266\345\201\232\345\207\206\345\244\207.md"
+++ "b/docs/md/assembly/middleware/2019-12-07-\345\217\221\345\270\203Jar\345\214\205\345\210\260Maven\344\270\255\345\244\256\344\273\223\345\272\223\357\274\214\344\270\272\345\274\200\345\217\221\345\274\200\346\272\220\344\270\255\351\227\264\344\273\266\345\201\232\345\207\206\345\244\207.md"
@@ -34,6 +34,7 @@ lock: need
 ## 跟着节奏
 
 ### 1. 下载安装Gpg生成密钥
+
 我们需要一个GPG环境，用来对上传的文件进行加密和签名，保证你的jar包不被篡改
 >1991年，程序员Phil Zimmermann为了避开政府监视，开发了加密软件PGP。这个软件非常好用，迅速流传开来，成了许多程序员的必备工具。但是，它是商业软件，不能自由使用。所以，自由软件基金会决定，开发一个PGP的替代品，取名为GnuPG。这就是GPG的由来。
 
diff --git a/docs/md/develop/design-pattern/2024-08-25-chain-tree.md b/docs/md/develop/design-pattern/2024-08-25-chain-tree.md
new file mode 100644
index 000000000..3560cd3b7
--- /dev/null
+++ b/docs/md/develop/design-pattern/2024-08-25-chain-tree.md
@@ -0,0 +1,380 @@
+---
+title: 干掉if...else，最好用的3种设计模式！
+lock: need
+---
+
+# 干掉if...else，最好用的3种设计模式！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+<iframe id="B-Video" src="//player.bilibili.com/player.html?isOutside=true&aid=113042213831736&bvid=BV1oYs3ejENB&cid=25629625969&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="100%" height="480"> </iframe>
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家伙，我是技术UP主小傅哥。
+
+在我们做Java业务代码开发时，经常会碰到大量的流程判断，`验证场景渠道`、`验证用户身份`、`验证会员级别`等等10来个甚至几十个分支节点。对于这样的编码80%的T2码农都是 if...else 编码。那除了贴膏药一样的写代码还有别的什么办法吗？
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/student-learn-01.gif" width="150px">
+</div>
+
+**if...else 写代码有什么问题吗？**
+
+往近了看，if...else 写的代码交付的快，但工程腐化的也快。有点像买的米面粮油不区分，全倒入一个桶里。让后面的兄弟在迭代需求时，都想铲了重写。但实际铲的成本太高，所以就挑挑拣拣、复制粘贴。
+
+往远了看，是个人发展。如果昨天做的事、今天做的事和明天做的事，都是一个事。反复的重复，没有脑力思考，只是提高手速。那面试、述职、分享的时候真没的讲，你总不能告诉面试官我就写 if...else 了，遇到问题查百度。那离毕业🎓也不远了！
+
+>接下来，小傅哥就给大家分享一个链路执行的设计模式，看看都有哪些方式处理。
+
+## 一、场景问题
+
+Java 开发，尤其是 Java 业务开发的，就离不开大量的流程分支处理。产品给的需求，也是在编码中调用一系列的接口做流程验证处理。而且需求是频繁变化的，这也就间接的导致了程序员的 if...else 代码也要跟着一次次调整，从原来的几十行编程几百几千行。这个过程中还有一些要去掉的、要根据流程类型选择切换的、要覆盖所有的之前的需求不能出问题的。所以腐化越来越严重，开发成本越来越高。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/develop/xfg-dev-tech-design-240528-01.png" width="550px">
+</div>
+
+```java
+一个接口、一个实现，
+一个实现，代码一片。
+一片一片、又一片，
+代码行数、两三千。
+```
+
+这是我们在承接产品需求时候经验能看到的一种流程图，在没有太强的代码驾驭能力时，很多伙伴的都只能写 if...else 一个个分支节点判断，所有的代码都平铺到一个类中。如果注意到你会发现，不具有设计模式能力的程序员，代码是没有立体化的。都是扁平平铺下来的。
+
+那么对于这样的场景，我们完全可以通过设计模式的知识进行分治和抽象，这也是软件设计的第一原则，康威定律所倡导的。通过设计模式解耦流程，让编码的呈现出立体化，通过类来划分职责和执行过程。
+
+## 二、设计模式 - 链&树
+
+对于大量的有衔接关系的 if...else 判断流程，有两种设计手段对应这3种编码方式。包括；责任链和规则树。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/develop/xfg-dev-tech-design-240528-02.png" width="500px">
+</div>
+
+- 责任链是一条单向执行链，没有过程中的分支流转，适合简单的单一规则校验。
+- 规则树是一条多向执行链，可以在过程中根据不同的分支判断走到对应的节点。而规则树的实现可以有两种方式，一种是通过数据库配置决定要加载的节点和执行的过程。另外一种是类似于责任链方式，让每个类自己根据业务条件决定下一个执行链路，这个设计巧妙的结合了责任链的思路，非常有意思。
+
+>接下来，小傅哥就分别举例下这样的代码实现。程序员还是看代码，学习起来更有感觉。
+
+## 三、编码实现
+
+### 1. 责任链
+
+#### 1.1 业务场景
+
+抽奖规则过滤场景，分为黑名单用户、权重抽奖和默认抽奖，三个节点。如果一个用户是黑名单范围用户，则直接返回兜底奖品。而权重用户是一个用户已完成了N次抽奖后，在权重范围内可以获得一个固定的奖品。最后是兜底抽奖，这两个条件都不是，则进行默认兜底流程。
+
+#### 1.2 设计类图
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/develop/xfg-dev-tech-design-240528-03.png" width="750px">
+</div>
+
+- 首先，定义出责任链装配接口和责任链逻辑接口，之后由抽象类实现接口，做链的封装实现。
+- 之后，实现3个责任链实现类。黑名单、权重、兜底。处理各自的逻辑。
+- 最后，由工厂装配责任链。后续可以按需扩展需要的责任链。这样业务流程就可以动态的拼装了。
+
+#### 1.3 核心代码
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/develop/xfg-dev-tech-design-240528-04.png" width="450px">
+</div>
+
+```java
+public abstract class AbstractLogicChain implements ILogicChain{
+
+    private ILogicChain next;
+
+    @Override
+    public ILogicChain next() {
+        return next;
+    }
+
+    @Override
+    public ILogicChain appendNext(ILogicChain next) {
+        this.next = next;
+        return next;
+    }
+
+    protected abstract String ruleModel();
+
+}
+
+@Slf4j
+@Component("rule_default")
+@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+public class DefaultLogicChain extends AbstractLogicChain {
+
+    @Resource
+    protected IStrategyDispatch strategyDispatch;
+
+    @Override
+    public DefaultChainFactory.StrategyAwardVO logic(String userId, Long strategyId) {
+        Integer awardId = strategyDispatch.getRandomAwardId(strategyId);
+        log.info("抽奖责任链-默认处理 userId:{} strategyId:{} ruleModel:{} awardId:{}", userId, strategyId, ruleModel(), awardId);
+        return DefaultChainFactory.StrategyAwardVO.builder()
+                .awardId(awardId)
+                .logicModel(ruleModel())
+                .build();
+    }
+
+    @Override
+    protected String ruleModel() {
+        return DefaultChainFactory.LogicModel.RULE_DEFAULT.getCode();
+    }
+
+}
+
+public ILogicChain openLogicChain(Long strategyId) {
+    ILogicChain cacheLogicChain = strategyChainGroup.get(strategyId);
+    if (null != cacheLogicChain) return cacheLogicChain;
+    StrategyEntity strategy = repository.queryStrategyEntityByStrategyId(strategyId);
+    String[] ruleModels = strategy.ruleModels();
+    // 如果未配置策略规则，则只装填一个默认责任链
+    if (null == ruleModels || 0 == ruleModels.length) {
+        ILogicChain ruleDefaultLogicChain = applicationContext.getBean(LogicModel.RULE_DEFAULT.getCode(), ILogicChain.class);
+        // 写入缓存
+        strategyChainGroup.put(strategyId, ruleDefaultLogicChain);
+        return ruleDefaultLogicChain;
+    }
+    // 按照配置顺序装填用户配置的责任链；rule_blacklist、rule_weight 「注意此数据从Redis缓存中获取，如果更新库表，记得在测试阶段手动处理缓存」
+    ILogicChain logicChain = applicationContext.getBean(ruleModels[0], ILogicChain.class);
+    ILogicChain current = logicChain;
+    for (int i = 1; i < ruleModels.length; i++) {
+        ILogicChain nextChain = applicationContext.getBean(ruleModels[i], ILogicChain.class);
+        current = current.appendNext(nextChain);
+    }
+    // 责任链的最后装填默认责任链
+    current.appendNext(applicationContext.getBean(LogicModel.RULE_DEFAULT.getCode(), ILogicChain.class));
+    // 写入缓存
+    strategyChainGroup.put(strategyId, logicChain);
+    return logicChain;
+}
+```
+
+- 抽象类实现接口责任链的装配逻辑接口，并定义责任链链路衔接的方法。
+- DefaultLogicChain 是其中一个链的实现，同类的也都是做自己的逻辑。
+- openLogicChain 是工厂方法，用于组装责任链，提供服务。
+
+### 2. 规则树 - 动态配置
+
+#### 2.1 业务场景
+
+当我们在实现业务流程编码时看到有些流程是带有判断和分支走向的，那么就不太适合用单一的责任链处理。比如一个流程中需要对抽奖的奖品进行交叉判断，抽中后判断是否满足中奖条件，满足后走库存处理，不满足走兜底处理。另外库存不足则也要走兜底处理。那么这样就是一个分叉的流程了。可以使用规则树进行实现。
+
+#### 2.2 设计类图
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/develop/xfg-dev-tech-design-240528-05.png" width="750px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/develop/xfg-dev-tech-design-240528-06.png" width="750px">
+</div>
+
+- 首先，定义出规则树接口，并实现出对应的业务逻辑节点。包括；次数锁、库存扣减、兜底奖品。—— 次数锁判断为抽奖时，必须抽奖N次才可以获得某个奖品。
+- 之后，设计执行器，负责完成规则节点的执行分支，如从A到B，如果B的条件满足XXX，则走到另外一个节点。而执行器中的节点来自于数据库的配置，这样就可以动态的调整各个节点的走向了。
+- 最后，交给规则树工厂，完成执行器的服务提供。
+
+#### 2.3 核心代码
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/develop/xfg-dev-tech-design-240528-07.png" width="450px">
+</div>
+
+```java
+public interface ILogicTreeNode {
+
+    DefaultTreeFactory.TreeActionEntity logic(String userId, Long strategyId, Integer awardId, String ruleValue, Date endDateTime);
+
+}
+
+@Component("rule_lock")
+public class RuleLockLogicTreeNode implements ILogicTreeNode {
+
+    @Resource
+    private IStrategyRepository repository;
+
+    @Override
+    public DefaultTreeFactory.TreeActionEntity logic(String userId, Long strategyId, Integer awardId, String ruleValue, Date endDateTime) {
+        log.info("规则过滤-次数锁 userId:{} strategyId:{} awardId:{}", userId, strategyId, awardId);
+
+        long raffleCount = 0L;
+        try {
+            raffleCount = Long.parseLong(ruleValue);
+        } catch (Exception e) {
+            throw new RuntimeException("规则过滤-次数锁异常 ruleValue: " + ruleValue + " 配置不正确");
+        }
+
+        // 查询用户抽奖次数 - 当天的；策略ID:活动ID 1:1 的配置，可以直接用 strategyId 查询。
+        Integer userRaffleCount = repository.queryTodayUserRaffleCount(userId, strategyId);
+
+        // 用户抽奖次数大于规则限定值，规则放行
+        if (userRaffleCount >= raffleCount) {
+            log.info("规则过滤-次数锁【放行】 userId:{} strategyId:{} awardId:{} raffleCount:{} userRaffleCount:{}", userId, strategyId, awardId, userRaffleCount, userRaffleCount);
+            return DefaultTreeFactory.TreeActionEntity.builder()
+                    .ruleLogicCheckType(RuleLogicCheckTypeVO.ALLOW)
+                    .build();
+        }
+
+        log.info("规则过滤-次数锁【拦截】 userId:{} strategyId:{} awardId:{} raffleCount:{} userRaffleCount:{}", userId, strategyId, awardId, userRaffleCount, userRaffleCount);
+
+        // 用户抽奖次数小于规则限定值，规则拦截
+        return DefaultTreeFactory.TreeActionEntity.builder()
+                .ruleLogicCheckType(RuleLogicCheckTypeVO.TAKE_OVER)
+                .build();
+    }
+
+}
+
+@Override
+public DefaultTreeFactory.StrategyAwardVO process(String userId, Long strategyId, Integer awardId, Date endDateTime) {
+    DefaultTreeFactory.StrategyAwardVO strategyAwardData = null;
+    // 获取基础信息
+    String nextNode = ruleTreeVO.getTreeRootRuleNode();
+    Map<String, RuleTreeNodeVO> treeNodeMap = ruleTreeVO.getTreeNodeMap();
+    // 获取起始节点「根节点记录了第一个要执行的规则」
+    RuleTreeNodeVO ruleTreeNode = treeNodeMap.get(nextNode);
+    while (null != nextNode) {
+        // 获取决策节点
+        ILogicTreeNode logicTreeNode = logicTreeNodeGroup.get(ruleTreeNode.getRuleKey());
+        String ruleValue = ruleTreeNode.getRuleValue();
+        // 决策节点计算
+        DefaultTreeFactory.TreeActionEntity logicEntity = logicTreeNode.logic(userId, strategyId, awardId, ruleValue, endDateTime);
+        RuleLogicCheckTypeVO ruleLogicCheckTypeVO = logicEntity.getRuleLogicCheckType();
+        strategyAwardData = logicEntity.getStrategyAwardVO();
+        log.info("决策树引擎【{}】treeId:{} node:{} code:{}", ruleTreeVO.getTreeName(), ruleTreeVO.getTreeId(), nextNode, ruleLogicCheckTypeVO.getCode());
+        // 获取下个节点
+        nextNode = nextNode(ruleLogicCheckTypeVO.getCode(), ruleTreeNode.getTreeNodeLineVOList());
+        ruleTreeNode = treeNodeMap.get(nextNode);
+    }
+    // 返回最终结果
+    return strategyAwardData;
+}
+```
+
+- 定义规则树的接口，并根据业务实现相应的业务逻辑节点。举例中是规则过滤-次数锁节点实现，用于的抽奖次数大于限定才会发放奖品，否则就会流转到下一个节点。
+- 节点的调用在 DecisionTreeEngine#process 方法中执行，它会从数据库获取数据执行节点链路。
+
+### 3. 规则树 - 代码控制
+
+#### 3.1 业务场景
+
+在我们的业务场景中，有时候既不是走责任链，也不是走配置到库上的规则树，而是介于两者直接。由代码控制的节点走向，根据每个节点实现逻辑，动态处理下一个节点的实现。
+
+如，一个流程中进入总人口，之后判断是否开量、账户数据、之后从账户数据开始又有3个级别判断。这3级别是根据账户数据的结果判断的。
+
+最后，这里还要有一个上下文数据记录，所有的节点完成后填充数据。
+
+#### 3.2 设计类图
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/develop/xfg-dev-tech-design-240528-08.png" width="450px">
+</div>
+
+- 首先，定义2个接口，一个是策略的执行接口 StrategyHandler，这个接口除了手里逻辑执行外，还要做一个兜底的上线文参数填充方法，也就是接口的默认方法。一个是策略映射接口 StrategyMapper。映射接口的作用是为了让每个节点实现类，可以动态的控制当前节点走到下一个节点的逻辑处理。
+- 之后，按照业务诉求实现各个节点，每个节点都是继承抽象类（定义通用方法，和受理执行下一个节点的操作）。这些节点自己决定下一个节点走到哪里。
+
+#### 3.3 核心代码
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/develop/xfg-dev-tech-design-240528-09.png" width="450px">
+</div>
+
+```java
+public interface StrategyMapper {
+
+    /**
+     * 获取策略处理器
+     */
+    StrategyHandler get(DefaultStrategyFactory.MaterialVO materialVO, DefaultStrategyFactory.DynamicContext dynamicContext);
+
+}
+
+public interface StrategyHandler {
+
+    /**
+     * 处理最终返回结果
+     */
+    StrategyHandler DEFAULT = (materialVO, dynamicContext) -> {
+        DefaultStrategyFactory.DecisionOutcomeVO decisionOutcomeVO = new DefaultStrategyFactory.DecisionOutcomeVO();
+        decisionOutcomeVO.setLevel(dynamicContext.getLevel());
+        return decisionOutcomeVO;
+    };
+
+    /**
+     * 受理策略处理
+     */
+    DefaultStrategyFactory.DecisionOutcomeVO apply(DefaultStrategyFactory.MaterialVO materialVO, DefaultStrategyFactory.DynamicContext dynamicContext) throws Exception;
+
+}
+
+public abstract class AbstractStrategyRouter implements StrategyMapper, StrategyHandler {
+
+    @Getter
+    @Setter
+    protected StrategyHandler defaultStrategyHandler = StrategyHandler.DEFAULT;
+
+    /**
+     * 行为路由
+     */
+    public DefaultStrategyFactory.DecisionOutcomeVO router(DefaultStrategyFactory.MaterialVO materialVO, DefaultStrategyFactory.DynamicContext dynamicContext) throws Exception {
+        StrategyHandler strategyHandler = get(materialVO, dynamicContext);
+        if (null != strategyHandler) return strategyHandler.apply(materialVO, dynamicContext);
+        return defaultStrategyHandler.apply(materialVO, dynamicContext);
+    }
+
+}
+
+@Component
+public class AccountNode extends AbstractStrategyRouter {
+
+    private final MemberLevel0Node memberLevel0Node;
+    private final MemberLevel1Node memberLevel1Node;
+    private final MemberLevel2Node memberLevel2Node;
+
+    public AccountNode(MemberLevel0Node memberLevel0Node, MemberLevel1Node memberLevel1Node, MemberLevel2Node memberLevel2Node) {
+        this.memberLevel0Node = memberLevel0Node;
+        this.memberLevel1Node = memberLevel1Node;
+        this.memberLevel2Node = memberLevel2Node;
+    }
+
+    @Override
+    public DefaultStrategyFactory.DecisionOutcomeVO apply(DefaultStrategyFactory.MaterialVO materialVO, DefaultStrategyFactory.DynamicContext dynamicContext) throws Exception {
+        log.info("【账户节点】规则决策树 userId:{}", materialVO.getUserId());
+
+        // 1. 模拟查询用户级别
+        int level = new Random().nextInt(3);
+        log.info("模拟查询用户级别 level:{}",level);
+
+        dynamicContext.setLevel(level);
+
+        return router(materialVO, dynamicContext);
+    }
+
+    @Override
+    public StrategyHandler get(DefaultStrategyFactory.MaterialVO materialVO, DefaultStrategyFactory.DynamicContext dynamicContext) {
+        switch (dynamicContext.getLevel()){
+            case 0:
+                return memberLevel0Node;
+            case 1:
+                return memberLevel1Node;
+            case 2:
+                return memberLevel2Node;
+            default:
+                return defaultStrategyHandler;
+        }
+    }
+
+}
+```
+
+- 通过最后的实现类可以看到，节点的执行是通过在本节点注入下一个要实现的节点，之后由get这个StrategyMapper接口的方法判断要走哪个节点去。
+- apply 受理执行方法执行完毕后，则调用路由方法，路由方法是抽象类中的方法，用于操作执行下一个节点的处理。
+- 所有执行链路上的数据，都有 DynamicContext 动态上下文进行收集，最后由 StrategyHandler 的 default 方法进行最终的结果数据拼装返回。
+
+>这样的编码是不很爽，设计上即防腐又仿佛开启了新世界的大门！代码原来还能写的这么优雅！加入小傅哥即可获得整套项目代码学习。
diff --git a/docs/md/devops/2023-04-18-nginx.md b/docs/md/devops/2023-04-18-nginx.md
index fa9235c7a..59ce13887 100644
--- a/docs/md/devops/2023-04-18-nginx.md
+++ b/docs/md/devops/2023-04-18-nginx.md
@@ -293,18 +293,18 @@ docker run \
 
 ![](https://bugstack.cn/images/article/devops/dev-ops-nginx-230418-04.png)
 
-## 五、OpenAI 访问
+## 五、重定向
 
-### 1. 重定向
+### 1. default.conf
 
 在 default.conf 中添加如下配置后重启 Nginx 即可；
 
 ```shell
 location /d5fe/ {
   rewrite ^/d5fe/(.*)$ /$1 break;
-  proxy_pass  https://api.openai.com;
+  proxy_pass  https://api.x.com;
   proxy_ssl_server_name on;
-  proxy_set_header Host api.openai.com;
+  proxy_set_header Host api.x.com;
   proxy_set_header Connection '';
   proxy_http_version 1.1;
   chunked_transfer_encoding off;
@@ -351,9 +351,9 @@ server {
     location /abc/ {
     	 auth_request /auth;
          rewrite ^/abc/(.*)$ /$1 break;
-         proxy_pass  https://api.openai.com;
+         proxy_pass  https://api.x.com;
          proxy_ssl_server_name on;
-         proxy_set_header Host api.openai.com;
+         proxy_set_header Host api.x.com;
          proxy_set_header Connection '';
          proxy_http_version 1.1;
          chunked_transfer_encoding off;
diff --git "a/docs/md/java/core/2020-11-22-\351\271\277\351\274\216\350\256\260 \302\267 \351\237\246\345\260\217\345\256\235\357\274\214\344\270\275\346\230\245\351\231\242\343\200\201\345\244\251\345\234\260\344\274\232\343\200\201\345\205\245\347\232\207\345\256\253\347\255\211\344\272\224\344\270\252\345\234\272\346\231\257\357\274\214\346\220\255\351\205\215\344\270\215\345\220\214\345\211\247\346\203\205\350\256\262\350\247\243\345\244\232\347\272\277\347\250\213\345\222\214\351\224\201\357\274\214\347\234\237\351\246\231\357\274\201.md" "b/docs/md/java/core/2020-11-22-\351\271\277\351\274\216\350\256\260 \302\267 \351\237\246\345\260\217\345\256\235\357\274\214\344\270\275\346\230\245\351\231\242\343\200\201\345\244\251\345\234\260\344\274\232\343\200\201\345\205\245\347\232\207\345\256\253\347\255\211\344\272\224\344\270\252\345\234\272\346\231\257\357\274\214\346\220\255\351\205\215\344\270\215\345\220\214\345\211\247\346\203\205\350\256\262\350\247\243\345\244\232\347\272\277\347\250\213\345\222\214\351\224\201\357\274\214\347\234\237\351\246\231\357\274\201.md"
index 2d7b37cb0..4a66f6632 100644
--- "a/docs/md/java/core/2020-11-22-\351\271\277\351\274\216\350\256\260 \302\267 \351\237\246\345\260\217\345\256\235\357\274\214\344\270\275\346\230\245\351\231\242\343\200\201\345\244\251\345\234\260\344\274\232\343\200\201\345\205\245\347\232\207\345\256\253\347\255\211\344\272\224\344\270\252\345\234\272\346\231\257\357\274\214\346\220\255\351\205\215\344\270\215\345\220\214\345\211\247\346\203\205\350\256\262\350\247\243\345\244\232\347\272\277\347\250\213\345\222\214\351\224\201\357\274\214\347\234\237\351\246\231\357\274\201.md"	
+++ "b/docs/md/java/core/2020-11-22-\351\271\277\351\274\216\350\256\260 \302\267 \351\237\246\345\260\217\345\256\235\357\274\214\344\270\275\346\230\245\351\231\242\343\200\201\345\244\251\345\234\260\344\274\232\343\200\201\345\205\245\347\232\207\345\256\253\347\255\211\344\272\224\344\270\252\345\234\272\346\231\257\357\274\214\346\220\255\351\205\215\344\270\215\345\220\214\345\211\247\346\203\205\350\256\262\350\247\243\345\244\232\347\272\277\347\250\213\345\222\214\351\224\201\357\274\214\347\234\237\351\246\231\357\274\201.md"	
@@ -204,9 +204,9 @@ public class ReentrantLockTest {
     }
 
     public static void 招收杂役(String name) throws InterruptedException {
-        lock.lock();
         try {
-            while (true) {
+            while (!lock.isLocked()) {
+                lock.lock();
                 System.out.println(name + "，排队等待进宫当杂役...");
                 Thread.sleep(1000);
             }
@@ -227,12 +227,16 @@ public class ReentrantLockTest {
 - **测试结果**：
 
 ```java
-路人甲，排队等待进宫当杂役...
+路人丙，排队等待进宫当杂役...
 韦小宝，进宫当太监，不用排队！
-路人甲，排队等待进宫当杂役...
-路人甲，排队等待进宫当杂役...
-路人甲，排队等待进宫当杂役...
-路人甲，排队等待进宫当杂役...
+韦小宝，排队等待进宫当杂役...
+路人庚，排队等待进宫当杂役...
+路人丁，排队等待进宫当杂役...
+路人乙，排队等待进宫当杂役...
+路人戊，排队等待进宫当杂役...
+路人己，排队等待进宫当杂役...
+路人壬，排队等待进宫当杂役...
+路人癸，排队等待进宫当杂役...
 路人甲，排队等待进宫当杂役...
 ```
 
diff --git "a/docs/md/java/interview/2020-08-20-\351\235\242\347\273\217\346\211\213\345\206\214 \302\267 \347\254\2546\347\257\207\343\200\212\345\270\246\347\235\200\351\235\242\350\257\225\351\242\230\345\255\246\344\271\240\347\272\242\351\273\221\346\240\221\346\223\215\344\275\234\345\216\237\347\220\206\357\274\214\350\247\243\346\236\220\344\273\200\344\271\210\346\227\266\345\200\231\346\237\223\350\211\262\343\200\201\346\200\216\344\271\210\350\277\233\350\241\214\346\227\213\350\275\254\343\200\201\344\270\2162-3\346\240\221\346\234\211\344\273\200\344\271\210\345\205\263\350\201\224\343\200\213.md" "b/docs/md/java/interview/2020-08-20-\351\235\242\347\273\217\346\211\213\345\206\214 \302\267 \347\254\2546\347\257\207\343\200\212\345\270\246\347\235\200\351\235\242\350\257\225\351\242\230\345\255\246\344\271\240\347\272\242\351\273\221\346\240\221\346\223\215\344\275\234\345\216\237\347\220\206\357\274\214\350\247\243\346\236\220\344\273\200\344\271\210\346\227\266\345\200\231\346\237\223\350\211\262\343\200\201\346\200\216\344\271\210\350\277\233\350\241\214\346\227\213\350\275\254\343\200\201\344\270\2162-3\346\240\221\346\234\211\344\273\200\344\271\210\345\205\263\350\201\224\343\200\213.md"
index 00ba3bc3b..b95d6c2e4 100755
--- "a/docs/md/java/interview/2020-08-20-\351\235\242\347\273\217\346\211\213\345\206\214 \302\267 \347\254\2546\347\257\207\343\200\212\345\270\246\347\235\200\351\235\242\350\257\225\351\242\230\345\255\246\344\271\240\347\272\242\351\273\221\346\240\221\346\223\215\344\275\234\345\216\237\347\220\206\357\274\214\350\247\243\346\236\220\344\273\200\344\271\210\346\227\266\345\200\231\346\237\223\350\211\262\343\200\201\346\200\216\344\271\210\350\277\233\350\241\214\346\227\213\350\275\254\343\200\201\344\270\2162-3\346\240\221\346\234\211\344\273\200\344\271\210\345\205\263\350\201\224\343\200\213.md"	
+++ "b/docs/md/java/interview/2020-08-20-\351\235\242\347\273\217\346\211\213\345\206\214 \302\267 \347\254\2546\347\257\207\343\200\212\345\270\246\347\235\200\351\235\242\350\257\225\351\242\230\345\255\246\344\271\240\347\272\242\351\273\221\346\240\221\346\223\215\344\275\234\345\216\237\347\220\206\357\274\214\350\247\243\346\236\220\344\273\200\344\271\210\346\227\266\345\200\231\346\237\223\350\211\262\343\200\201\346\200\216\344\271\210\350\277\233\350\241\214\346\227\213\350\275\254\343\200\201\344\270\2162-3\346\240\221\346\234\211\344\273\200\344\271\210\345\205\263\350\201\224\343\200\213.md"	
@@ -48,7 +48,7 @@ Rudolf Bayer 于1978年发明红黑树，在当时被称为`对称二叉 B 树(s
 2. 节点是红黑或者黑色
 3. 所有子叶节点都是黑色(叶子是NIL节点，默认没有画出来)
 4. 每个红色节点必须有两个黑色子节点(也同样说明一条链路上不能有链路的红色节点)
-5. 黑高，从任一节点到齐每个叶子节点，经过的路径都包含相同数目的黑色节点
+5. 从任一节点到齐每个叶子节点，经过的路径都包含相同数目的黑色节点
 ```
 那么，这些规则是怎么总结定义出来的呢？接下里我们一步步分析讲解。
 
@@ -195,7 +195,7 @@ Rudolf Bayer 于1978年发明红黑树，在当时被称为`对称二叉 B 树(s
 
 ![](https://bugstack.cn/assets/images/2020/interview/interview-7-13.png)
 
-##### 3.2.5 被删节点兄弟为黑色&含双黑节点(黑)
+##### 3.2.5 被删节点兄弟为红色&含双黑节点(黑)
 
 ![](https://bugstack.cn/assets/images/2020/interview/interview-7-14.png)
 
@@ -213,11 +213,11 @@ Rudolf Bayer 于1978年发明红黑树，在当时被称为`对称二叉 B 树(s
 
 ![](https://bugstack.cn/assets/images/2020/interview/interview-7-17.png)
 
-##### 3.2.4 被删节点兄弟为黑色&不含子节点
+##### 3.3.4 被删节点兄弟为黑色&不含子节点
 
 ![](https://bugstack.cn/assets/images/2020/interview/interview-7-18.png)
 
-##### 3.2.5 被删节点兄弟为黑色&含双黑节点(黑)
+##### 3.3.5 被删节点兄弟为红色&含双黑节点(黑)
 
 ![](https://bugstack.cn/assets/images/2020/interview/interview-7-19.png)
 
diff --git "a/docs/md/java/interview/2020-08-27-\351\235\242\347\273\217\346\211\213\345\206\214 \302\267 \347\254\2547\347\257\207\343\200\212ArrayList\344\271\237\350\277\231\344\271\210\345\244\232\347\237\245\350\257\206\357\274\237\344\270\200\344\270\252\346\214\207\345\256\232\344\275\215\347\275\256\346\217\222\345\205\245\345\260\261\346\212\212\350\260\242\351\243\236\346\234\272\351\235\242\346\231\225\344\272\206\357\274\201\343\200\213.md" "b/docs/md/java/interview/2020-08-27-\351\235\242\347\273\217\346\211\213\345\206\214 \302\267 \347\254\2547\347\257\207\343\200\212ArrayList\344\271\237\350\277\231\344\271\210\345\244\232\347\237\245\350\257\206\357\274\237\344\270\200\344\270\252\346\214\207\345\256\232\344\275\215\347\275\256\346\217\222\345\205\245\345\260\261\346\212\212\350\260\242\351\243\236\346\234\272\351\235\242\346\231\225\344\272\206\357\274\201\343\200\213.md"
index a2d5da729..2964200aa 100755
--- "a/docs/md/java/interview/2020-08-27-\351\235\242\347\273\217\346\211\213\345\206\214 \302\267 \347\254\2547\347\257\207\343\200\212ArrayList\344\271\237\350\277\231\344\271\210\345\244\232\347\237\245\350\257\206\357\274\237\344\270\200\344\270\252\346\214\207\345\256\232\344\275\215\347\275\256\346\217\222\345\205\245\345\260\261\346\212\212\350\260\242\351\243\236\346\234\272\351\235\242\346\231\225\344\272\206\357\274\201\343\200\213.md"	
+++ "b/docs/md/java/interview/2020-08-27-\351\235\242\347\273\217\346\211\213\345\206\214 \302\267 \347\254\2547\347\257\207\343\200\212ArrayList\344\271\237\350\277\231\344\271\210\345\244\232\347\237\245\350\257\206\357\274\237\344\270\200\344\270\252\346\214\207\345\256\232\344\275\215\347\275\256\346\217\222\345\205\245\345\260\261\346\212\212\350\260\242\351\243\236\346\234\272\351\235\242\346\231\225\344\272\206\357\274\201\343\200\213.md"	
@@ -112,11 +112,11 @@ list.add("ccc");
 #### 1.2 方式02；内部类方式
 
 ```java
-ArrayList<String> list = new ArrayList<String>() \\{
+ArrayList<String> list = new ArrayList<String>() {{
     add("aaa");
     add("bbb");
     add("ccc");
-\\};
+}};
 ```
 
 - 这种方式也是比较常用的，而且省去了多余的代码量。
diff --git "a/docs/md/netty/source-code/2019-09-10-netty\346\241\210\344\276\213\357\274\214netty4.1\346\272\220\347\240\201\345\210\206\346\236\220\347\257\207\344\270\200\343\200\212NioEventLoopGroup\346\272\220\347\240\201\345\210\206\346\236\220\343\200\213.md" "b/docs/md/netty/source-code/2019-09-10-netty\346\241\210\344\276\213\357\274\214netty4.1\346\272\220\347\240\201\345\210\206\346\236\220\347\257\207\344\270\200\343\200\212NioEventLoopGroup\346\272\220\347\240\201\345\210\206\346\236\220\343\200\213.md"
index 29d7f599c..c607ae5b2 100644
--- "a/docs/md/netty/source-code/2019-09-10-netty\346\241\210\344\276\213\357\274\214netty4.1\346\272\220\347\240\201\345\210\206\346\236\220\347\257\207\344\270\200\343\200\212NioEventLoopGroup\346\272\220\347\240\201\345\210\206\346\236\220\343\200\213.md"
+++ "b/docs/md/netty/source-code/2019-09-10-netty\346\241\210\344\276\213\357\274\214netty4.1\346\272\220\347\240\201\345\210\206\346\236\220\347\257\207\344\270\200\343\200\212NioEventLoopGroup\346\272\220\347\240\201\345\210\206\346\236\220\343\200\213.md"
@@ -214,7 +214,7 @@ public class NioEventLoopGroup extends MultithreadEventLoopGroup {
 
 		- 在创建Netty服务端的时候，代码中实例化了两个EventLoopGroup分别是parentGroup、childGroup，parentGroup 主要用于接收请求链接，链接成功后交给childGroup处理收发数据等事件。
 
-		- NioEventLoopGroup可以在构造方法中传入需要启动的线程数，默认的情况下他会在采用计算机核心数*2的方式去启动线程数量。另外目前很多计算机采用了超线程技术，那么4核心的机器，超线程后就是8核心，Netty在启动的时候随时会启动8*2=16个线程。
+		- NioEventLoopGroup可以在构造方法中传入需要启动的线程数，默认的情况下他会在采用计算机核心数 * 2的方式去启动线程数量。另外目前很多计算机采用了超线程技术，那么4核心的机器，超线程后就是8核心，Netty在启动的时候随时会启动8*2=16个线程。
 
 		>超线程（HT, Hyper-Threading）是英特尔研发的一种技术，于2002年发布。超线程技术原先只应用于Xeon 处理器中，当时称为“Super-Threading”。之后陆续应用在Pentium 4 HT中。早期代号为Jackson。 [1] 
 通过此技术，英特尔实现在一个实体CPU中，提供两个逻辑线程。之后的Pentium D纵使不支持超线程技术，但就集成了两个实体核心，所以仍会见到两个线程。超线程的未来发展，是提升处理器的逻辑线程。英特尔于2016年发布的Core i7-6950X便是将10核心的处理器，加上超线程技术，使之成为20个逻辑线程的产品。
diff --git a/docs/md/product/idea-plugin/vo2dto-v2.5.5.md b/docs/md/product/idea-plugin/vo2dto-v2.5.5.md
new file mode 100644
index 000000000..d897ddfd9
--- /dev/null
+++ b/docs/md/product/idea-plugin/vo2dto-v2.5.5.md
@@ -0,0 +1,163 @@
+---
+title: IDEA Plugin vo2dto v2.5.5
+lock: no
+---
+
+# IDEA Plugin vo2dto —— 这款插件，已经有20k安装量，月增量1000+！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+公司明确要求禁止在项目中使用 `BeanUtils.copyProperties` 复制对象，不仅是因为性能问题，更多是这种方式根本不知道有哪些对象属性被转换了。而手动编码 x.set(y.get) 是最稳定可靠处理方式。
+
+但如果有几十个属性怎么办😰！那么你可以立即安装这款免费的 vo2dto v2.5.5 版本插件。截止到目前小傅哥开发的这款插件已经有 20.1k 安装量！
+
+<div align="center"><img src="https://bugstack.cn/images/article/product/idea-plugin/vo2dto-2.5.1-00.png" width="600px"></div>
+
+IDEA Plugin vo2dto 是一款用于帮助使用 IntelliJ IDEA 编写代码的研发人员，快速生成两个对象转换过程中所需要大量的 `x.set(y.get)` 代码块的插件工具。在最新 v2.5.1 版本中已支持 Lombok.Builder 模式，让使用可丝滑得嘞！
+
+>文末提供了此插件的源码地址，你可以针对使用优化提交PR，以后那么多人的使用，都会看见你的贡献💐。
+
+## ✨ 特性
+
+1. 2个对象的转换操作，通过复制 X x 对象，转换给 Y y 对象
+2. 允许使用 lombok 对象转换、lombok 和普通对象转换，对于 serialVersionUID 属性过滤
+3. 支持类继承类，全量的对象转换操作
+4. 含记忆功能的弹窗选择映射关系，支持全量对象、支持匹配对象、也支持空转换，生成一组set但无get的对象
+5. 支持对于引入不同包下的同名类处理
+6. 支持 Lombok.Builder 模式创建转换对象
+7. 支持类的内部类对象，进行转换
+
+## 👨🏻‍💻 重构
+
+**这次我要说说重构！**
+
+其实最开始这个项目并不大，简单的建了个抽象模板类定义执行步骤，方法都写在子类里。三下五除二就完成了对象转换功能。
+
+但随着小伙伴们不断的提出一些使用诉求后，这里的逻辑变得的复杂了，并且由于本身 IDEA Plugin 的开发，很多时候都要一点点的处理那些对象属性的数据，兼容各种类文件所在的包信息，还有Lombok以及类的内部类。所以，每次维护起来都像是重新写一遍一样。**时间一长，都不认识它了！**
+
+所以，为了改变这种情况。在 v2.5.5 版本的开发中，做了首次的工程重构，把流水面条的代码，用规则树拆分，让不同的节点实现不同的功能。优雅的效果，如图；
+
+<div align="center"><img src="https://bugstack.cn/images/article/product/idea-plugin/vo2dto-2.5.5-01.png" width="600px"></div>
+
+这是一套规则树的模型结构，在 vo2dto 插件开发中的实践使用。关于这块的设计模式可以在这里学习；[https://bugstack.cn/md/develop/design-pattern/2024-08-25-chain-tree.html](https://bugstack.cn/md/develop/design-pattern/2024-08-25-chain-tree.html)
+
+通过节点功能对逻辑边界的拆解，让每一块功能区都可以显而易见的找到和处理，这样即使是过去很长时间，在看这段代码也能很轻松的知道每一块在干什么。其实代码写的最好的目标就是看代码就像看文档，用类划分边界比只单纯的叠加方法要清晰的多。
+
+<div align="center"><img src="https://bugstack.cn/images/article/product/idea-plugin/vo2dto-2.5.5-02.png" width="600px"></div>
+
+- 重构前：[https://github.com/fuzhengwei/vo2dto/tree/2.5.4](https://github.com/fuzhengwei/vo2dto/tree/2.5.4)
+- 重构后：[https://github.com/fuzhengwei/vo2dto/tree/2.5.5](https://github.com/fuzhengwei/vo2dto/tree/2.5.5)
+
+如果感兴趣这样一个处理，可以进入到重构前后的代码，看看设计模式如何处理的这部分逻辑，怎么拆分的上下文逻辑。可以说非常优雅！
+
+## 🛠️ 安装
+
+### 1. 在线安装
+
+| IDEA Plugin 搜索vo2dto直接在线安装即可|
+|:---:|
+| <div align="center"><img src="https://bugstack.cn/images/article/product/idea-plugin/vo2dto-2.5.5-03.png" width="700px"></div>|
+
+### 2. 手动安装
+
+- 下载：[https://github.com/fuzhengwei/vo2dto/releases/tag/v2.5.5](https://github.com/fuzhengwei/vo2dto/releases/tag/v2.5.5)
+- 安装：
+
+|  IDEA Plugin 手动安装，导入下载包  |
+|:------------------------:|
+| <div align="center"><img src="https://bugstack.cn/images/article/product/idea-plugin/vo2dto-2.5.1-03.png" width="700px"></div> |
+
+## 🔨 使用
+
+- 视频：[https://www.bilibili.com/video/BV13Y411h7fv](https://www.bilibili.com/video/BV13Y411h7fv) - `视频内有完整的使用介绍和插件设计`
+- 描述：你需要复制被转换 X x = new X() 中的 X x 部分，无论它是方法入参还是实例化或者是接口回值，接下来鼠标定位到转换对象 Y y 上，可以定位到`类 大Y`、或者`属性 小y`，这样我就可以知道你要做到是X的对象的属性值，转换到Y对象的属性值上。接下来帮你快速生成全部的 `y.set(x.get)` 代码片段。
+
+| IDEA Plugin vo2dto 使用演示图|
+|:---:|
+| <div align="center"><img src="https://bugstack.cn/images/article/product/idea-plugin/vo2dto-2.5.1-04.png" width="700px"></div> |
+
+```java
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+public class ApiTest {
+
+    /**
+     * 普通模式
+     */
+    public void test_vo2dto01(UserVO user) {
+        UserDTO userDTO = new UserDTO();
+        userDTO.setUserId(user.getUserId());
+        userDTO.setUserNickName(user.getUserNickName());
+        userDTO.setUserHead(user.getUserHead());
+    }
+    /**
+     * lombok Builder 模式
+     */
+    public void test_vo2dto02(UserVO user) {
+        UserDTO userDTO = UserDTO.builder()
+                .userId(user.getUserId())
+                .userNickName(user.getUserNickName())
+                .userHead(user.getUserHead())
+                .build();
+    }
+  
+    /**
+     * 类的内部类转换
+     */
+    public void test(UserDTO userDTO) {
+         UserVO.UserVO2 userVO2
+
+    }
+    
+    @Data
+    @Builder
+    @AllArgsConstructor
+    @NoArgsConstructor
+    static class UserDTO {
+
+        private String userId;
+        private String userIdx;
+        private String userNickName;
+        private String userHead;
+        private int page;
+        private int rows;
+
+    }
+
+    @Data
+    @Builder
+    @AllArgsConstructor
+    @NoArgsConstructor
+    static class UserVO {
+
+        private Long id;
+        private String userId;
+        private String userNickName;
+        private String userHead;
+        private String userPassword;
+        private Date createTime;
+        private Date updateTime;
+
+    }
+
+}
+```
+
+- 注意；v2.5.5 版本已支持了 `类的内部类` 模式，如图使用方式即可完成创建过程。
+
+## 💐 成长
+
+如果你的简历也能有一个这样的小组件，让那么多的程序员👨🏻‍💻进行使用，那么对你的面试简历来说也是非常亮眼的一笔。
+
+包括；这样的组件，还有；OPenAI 代码自动评审、透视业务监控、动态线程池，以及大量的业务项目；大营销平台、小型支付商城、拼团交易等，你都可以跟着小傅哥一起学习。👣 踩在我的肩膀，你能看的更远，走的更快，上的更高！
+
diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-0\350\212\202\357\274\232AiAgent \351\241\271\347\233\256\344\273\213\347\273\215\345\222\214\347\263\273\347\273\237\346\274\224\347\244\272.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-0\350\212\202\357\274\232AiAgent \351\241\271\347\233\256\344\273\213\347\273\215\345\222\214\347\263\273\347\273\237\346\274\224\347\244\272.md"
new file mode 100644
index 000000000..a2309535b
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-0\350\212\202\357\274\232AiAgent \351\241\271\347\233\256\344\273\213\347\273\215\345\222\214\347\263\273\347\273\237\346\274\224\347\244\272.md"	
@@ -0,0 +1,124 @@
+---
+title: 【更】第3-0节：Ai Agent 项目介绍和系统演示
+lock: no
+---
+
+# 《Ai Agent》第3-0节：Ai Agent 项目介绍和系统演示
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/DcL2p](https://t.zsxq.com/DcL2p)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+**25年3月初**，小傅哥，带着大家开启了 DeepSeek RAG、MCP 项目，随后兴起 MCP 服务提供的热潮，包括；支付宝、百度、高德，等等大厂开启了 MCP 服务计划。直至现在，市面上已经有了场景非常丰富的 MCP 服务。**那些第一波跟着小傅哥学习的伙伴，早早的让简历上多了一笔 MCP 服务开发和使用的经验！** 
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/chatgpt/openai-01.jpg" width="150px">
+</div>
+
+**接下来，小傅哥将带着小伙伴，再往前多走一步！**
+
+RAG 教了，MCP 搞了，那么现在是时候，实现一套自动化的 Ai Agent 服务了。
+
+如图，以通过数据库表动态配置的手段，完成相关物料的加载，包括；`模型（gpt-4.1/deepseek）`、`客户端`、`对话预设`、`执行规划（Planning）`、`顾问（记忆、RAG、日志）`、`工具（MCP`）等，在把单个 Client 串联，完成整个 Agent 调用链。这样一个 Agent 调用链可以以对话形式使用或通过 Agent 动态任务自动执行。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-01.png" width="800px">
+</div>
+
+这套项目，小傅哥为它干了`1.87万`行代码（前后端），`14张`数据库表，全程动态化构建模块 Bean 对象，预热装配 Agent 服务。达到随用随配，自主组建出想要的各类的 Agent 功能服务。就以现在的丰富的 MCP 市场来可以说是，广阔天地，大有可为！在这套项目架构下，可以扩展出非常多的东西。
+
+接下来，小傅哥就给大家，细致的介绍下这套项目，以及截图演示运行效果。
+
+> 🧧 文末提供了全套 AI、RAG、MCP、Agent 项目、开发教程以及工程源码。此外还有非常多的互联网大厂项目（17个），都可以一并获取学习。
+
+## 一、项目演示
+
+这套项目的功能非常强大，全部都以 Agent 方式进行通信。所有的 Agent 都可以动态化配置，解耦的非常强👍🏻。接下来，小傅哥给大家演示下使用效果。
+
+### 1. 前端页面
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-02.png" width="950px">
+</div>
+
+- 首先，我为智能对话体（MCP）配置了联网、CSDN自动发帖、文件操作服务。
+- 之后，我们可以通过预设的提示词模板，来调用对应的 MCP 服务，也可以多个 MCP 一起调用。如联网检索文章、生成解答，发布到论坛，在把文章名称记录到本地文件。这一系列操作都是可以的。
+- MCP 服务平台；
+
+  - https://mcpfound.cc/
+  - https://mcp.so/
+  - https://sai.baidu.com/mcp
+
+> 结合知识库、MCP、提示词规划、上下文记忆，可以有非常多的场景可以玩。后续小傅哥还会继续分享可玩场景。
+
+### 2. 后台页面
+
+#### 2.1 配置智能体（动态预热）
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-03.png" width="950px">
+</div>
+
+#### 2.2 动态任务
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-04.png" width="550px">
+</div>
+
+- 系统会自动的把任务加载到系统内执行，完成智能体的调用。
+- 有了这个操作，你配置好的智能体，他就可以连续24小时的工作了。除了自动发文章，你可以配置出各种东西。比如特朗普推特、黄金、股票价格，每天早上出一个文件，邮件方式推送给自己。兼职美滋滋。
+
+#### 2.3 MCP管理
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-05.png" width="950px">
+</div>
+
+- 市面上有非常的多的 MCP 服务，我们可以选择的这些服务来组装出我们的智能体。
+- 系统支持配置 stdio、sse，两种方式。无论是自己开发的 MCP 还是市面的都可以使用。（课程中有教大家，基于 Spring AI 怎么开发 MCP 服务）
+
+## 二、系统设计
+
+### 1. 功能流程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-06.png" width="600px">
+</div>
+
+- 如图，从上往下，以任务或会话方式，调用 agent 为目标，串联各个 client。形成内部处理 a2a 流程。
+- 之后，对于 client 则由系统都动态的方式创建 bean 对象。运营在 ai agent 后台配置相关数据即可。
+
+### 2. 库表设计
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-07.png" width="800px">
+</div>
+
+如图，为整个系统对应的数据库表信息；
+
+- ai_agent_task_schedule，智能体任务调度配置表
+- ai_agent，AI智能体配置表
+- ai_agent_client，智能体-客户端关联表
+- ai_client，AI客户端配置表
+- 模型配置组；ai_client_model、ai_client_model_config、ai_client_model_tool_config
+- 工具配置组；ai_client_tool_config、ai_client_tool_mcp
+- 顾问配置组；ai_client_advisor、ai_client_advisor_config
+- 提示词配置；ai_client_system_prompt、ai_client_system_prompt_config
+- 知识库配置；ai_rag_order
+
+### 3. 系统工程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-08.png" width="400px">
+</div>
+
+- 如图，为整个系统的工程结构，分为 api、app、domain、infrastructure、trigger、types，六边形架构。（现在各个互联网都在落地 DDD，因为 DDD 比最早出来的几年，已经有了非常明确的规范）相关资料；[https://bugstack.cn/md/road-map/ddd-guide-01.html](https://bugstack.cn/md/road-map/ddd-guide-01.html)
+- Domain 核心领域层，处理 Agent 的预热、对话、知识库、任务的操作。后续 Agent 相关都维护到这个领域包下。
+- Trigger 触发器层，负责对外提供接口，让外部来调用。当有一些纯 crud 操作的流程时，这个架构下，会在 trigger 层直接调用基础设施层提供数据，而不需要在经过 domain 领域层，重复封装对象。
+
+**注意** ai-agent-station 全套代码，可以直接获取后学习（持续更新最新方案）。之后课程会单独起一个 ai-agent-station-study 工程，带着大家从0到1学习。
+
diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-10\350\212\202\357\274\232Agent\346\211\247\350\241\214\351\223\276\350\267\257\345\210\206\346\236\220.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-10\350\212\202\357\274\232Agent\346\211\247\350\241\214\351\223\276\350\267\257\345\210\206\346\236\220.md"
new file mode 100644
index 000000000..db231e6be
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-10\350\212\202\357\274\232Agent\346\211\247\350\241\214\351\223\276\350\267\257\345\210\206\346\236\220.md"
@@ -0,0 +1,38 @@
+---
+title: 【更】第3-10节：Agent执行链路分析
+pay: https://t.zsxq.com/bxh8h
+---
+
+# 《Ai Agent》第3-10节：Agent执行链路分析
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/ty1Yy](https://t.zsxq.com/ty1Yy)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+通过现有实现的动态化构建 Ai API、Model、Client、Tool（MCP）、Advisor（记忆、RAG）、Prompt，完成 Ai Agent 服务处理。
+
+最早 OpenAi 出来时，我们只是对 Ai 单向询问（含上下文记忆）和提供问题结果。后来开始有了 RAG 知识库，可以让我们每次的提问结合知识库获取更全面的内容。再到后来开始有了 MCP 服务协议，让 AI 具备了调用外部服务的能力。
+
+那么，到这再往后开始有了 Ai Agent 的概念，也就是让 Ai 具备环境感知能力、自主决策并执行行动，直至完成最终的结果。
+
+这也就是我们目前在使用一些 Ai Agent 的时候，进行一些问题提问的时候，他会根据环境（询问）状态制定行动计划，调用各种工具和API执行具体任务，并在多轮交互中维持上下文状态，输出最终的结果。这也是我们要做的事情。
+
+鉴于，整个 Ai Agent 的复杂性，我们不能一上来就直接去编码，这样很多伙伴会比较晕。所以我们先来完成 Agent 单元测试，在结合我们动态实例化的各项服务，处理 Agent 循环制定行动计划和执行多轮会话。
+
+## 二、流程设计
+
+如图，不同方案实现的 Agent 流程；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-10-01.png" width="800px">
+</div>
+
+Ai Agent 的处理过程也是分为几类的，用于适应不同的场景使用；
+
+1. 固定N个步骤，这类的一般是配置工作流的，提高任务执行的准确性。如，一些检索资料、发送帖子、处理通知等。
+2. 顺序循环调用，配置 Agent 要执行的多个 Client 端，以此顺序执行。适合一些简单的任务关系，并已经分配好的动作，类似于1的方式。
+3. 智能动态决策，这类是目前市面提供给大家使用的 Agent 比较常见的实现方式，它会动态的规划执行动作，完成行动步骤，观察执行结果，判断完成状态和步骤。并最终给出结果。
\ No newline at end of file
diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-11\350\212\202\357\274\232Agent\346\211\247\350\241\214\351\223\276\350\267\257\350\256\276\350\256\241.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-11\350\212\202\357\274\232Agent\346\211\247\350\241\214\351\223\276\350\267\257\350\256\276\350\256\241.md"
new file mode 100644
index 000000000..ef358d38c
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-11\350\212\202\357\274\232Agent\346\211\247\350\241\214\351\223\276\350\267\257\350\256\276\350\256\241.md"
@@ -0,0 +1,30 @@
+---
+title: 【更】第3-11节：Agent执行链路设计
+pay: https://t.zsxq.com/eSLoH
+---
+
+# 《Ai Agent》第3-11节：Agent执行链路设计
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/hNFqE](https://t.zsxq.com/hNFqE)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+将上一节对 Ai Agent 执行链路的分析，以及对应的 AutoAgentTest 测试代码，使用规则树设计可执行链路节点。
+
+本节是其中的一个 Ai Agent Auto 自动执行策略，后续还要把其他的 Ai Agent 执行策略也加入进来实现。
+
+## 二、流程设计
+
+如图，Auto Ai Agent 动态多轮会话执行流程图；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-11-01.png" width="800px">
+</div>
+
+- 首先，给入口保留一个多策略选择，以适应我们不同场景的多类型 Agent 选择使用，后续会在 agent 配置表增加策略选择属性来区分调用。本节我们先处理一个 AutoAgent 的实现。
+- 之后，进入到关键地方，在上一节 AutoAgentTest 章节，设计了一套自动化 Agent 执行方法，通过 for 循环处理。这里我们通过规则树，分多个多个节点步骤执行，节点间可循环调用，增强整体的灵活性。
+- 最后，以用户提问到所有的步骤执行完成后，进入到结束环节，产生结果。如果你上一节已经高透彻，那么到这里其实会更加容易理解对于节点的拆分。
\ No newline at end of file
diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-12\350\212\202\357\274\232Agent\346\234\215\345\212\241\346\216\245\345\217\243\345\222\214UI\345\257\271\346\216\245.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-12\350\212\202\357\274\232Agent\346\234\215\345\212\241\346\216\245\345\217\243\345\222\214UI\345\257\271\346\216\245.md"
new file mode 100644
index 000000000..ceef27a8d
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-12\350\212\202\357\274\232Agent\346\234\215\345\212\241\346\216\245\345\217\243\345\222\214UI\345\257\271\346\216\245.md"
@@ -0,0 +1,31 @@
+---
+title: 【更】第3-12节：Agent服务接口和UI对接
+pay: https://t.zsxq.com/T0H6n
+---
+
+# 《Ai Agent》第3-12节：Agent服务接口和UI对接
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/eaqbx](https://t.zsxq.com/eaqbx)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+以实现 Ai Auto Agent Server-Sent Events (SSE) 流式响应接口为目的，设计 SSE 异步响应结果对象，对 Step 1~4 步骤的过程数据进行异步流式响应返回。开发好接口后，与Ai实现的前端UI界面进行对接。
+
+像是 Ai（Cursor、trae.ai） 对于前端这样没有太多复杂的流程代码，可以很好的实现出来。这对于后端工程师想做一些前端UI产品化的东西，就变得容易的很了！
+
+## 二、对接效果
+
+如图，流式响应（SSE）接口对接UI效果；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-01.png" width="950px">
+</div>
+
+- 首先，小傅哥对 **Auto Agent - 自动智能对话体** 进行了数据库表（初始数据）和服务启动时自动装配 Ai Agent 所需的各项配置（客户端、模型、API、MCP等）。以便于可以在接口请求服务时，调用 Auto Agent 智能体。
+- 之后，用于就可以对智能体进行提问，所有的提问信息，会进入到服务端的 Step 1~4 步骤，并进行循环分析、执行、检测，以及最终输出结果。
+
+> 接下来，小傅哥带着大家看看 Auto Agent 服务接口和对接是如何处理的。
\ No newline at end of file
diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-13\350\212\202\357\274\214Agent-ELK\346\227\245\345\277\227\345\210\206\346\236\220\345\234\272\346\231\257.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-13\350\212\202\357\274\214Agent-ELK\346\227\245\345\277\227\345\210\206\346\236\220\345\234\272\346\231\257.md"
new file mode 100644
index 000000000..bdea85b3c
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-13\350\212\202\357\274\214Agent-ELK\346\227\245\345\277\227\345\210\206\346\236\220\345\234\272\346\231\257.md"
@@ -0,0 +1,31 @@
+---
+title: 【更】第3-13节，Agent-ELK日志分析场景
+pay: https://t.zsxq.com/agZ9E
+---
+
+# 《Ai Agent》第3-13节，Agent-ELK日志分析场景
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/kMjAw](https://t.zsxq.com/kMjAw)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+增加 Agent-ELK 日志分析的实际应用场景，通过 Agent 根据用户诉求，自主分析、规划、执行和输出结果，来帮助我们对日志检索的提效。
+
+ELK（或自研） 是各个互联网公司中都有的一套分布式日志设备，以便于研发在遇到线上系统报警和运营反馈事故问题时，快速检索日志。但往往这种检索的日志的方式都是非常耗时的，所以增加 Agent 方式来辅助提效是非常有必要的。
+
+注意；面试往往就是需要这样的实际应用场景，而不是坦克大战、贪吃蛇、图书管理系统等一些不着边际的项目（适合练手但不适合写简历）。
+
+## 二、功能流程
+
+如图，Agent-ELK 的设计使用流程图；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-13-01.png" width="650px">
+</div>
+
+- 首先，虚线框内为模拟的系统的应用日志，部署一套 ELK 之后通过脚本把日志数据写入到 ELK。你也可以通过这套教程实际部署一套 ELK [https://bugstack.cn/md/road-map/elk.html](https://bugstack.cn/md/road-map/elk.html) 另外像星球项目，拼团、大营销等也都有 ELK 分布式日志的对接使用。
+- 之后，要为这套场景增加一套新的 Ai Agent 描述话术，在执行  ELK 日志分析的时候，我们先手动选择出要使用的 Ai Agent 服务。这样它就可以以 ELK 对应的 Prompt 话术分析方式使用了。
\ No newline at end of file
diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-14\350\212\202\357\274\214Agent-Prometheus\347\233\221\346\216\247\345\210\206\346\236\220\345\234\272\346\231\257.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-14\350\212\202\357\274\214Agent-Prometheus\347\233\221\346\216\247\345\210\206\346\236\220\345\234\272\346\231\257.md"
new file mode 100644
index 000000000..790b7709c
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-14\350\212\202\357\274\214Agent-Prometheus\347\233\221\346\216\247\345\210\206\346\236\220\345\234\272\346\231\257.md"
@@ -0,0 +1,29 @@
+---
+title: 【更】第3-14节，Agent-Prometheus监控分析场景
+pay: https://t.zsxq.com/8BfkE
+---
+
+# 《Ai Agent》第3-14节，Agent-Prometheus监控分析场景
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/ymfSm](https://t.zsxq.com/ymfSm)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+上一节我们做了 Ai Agent ELK，这一节扩展增加 Prometheus（普罗米修斯监控） 监控系统，让 Ai Agent 具备智能监控问题分析场景。这种场景东西是在公司里非常重要的，且有实际使用用途的东西。
+
+本节基于的是 Ai MCP Prometheus + Agent Prompt（分阶段提示词），来完成自动化分析、规划、执行、检测、输出的智能监控系统。
+
+## 二、功能流程
+
+如图，Agent-Prometheus 的设计使用流程图；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-14-01.png" width="650px">
+</div>
+
+- 首先，虚线框为模拟的系统监控日志脚本（含运行程序），部署的一套普罗米修斯监控系统。你可以通过这套教程来部署一套普罗米修斯监控 [https://bugstack.cn/md/road-map/grafana.html](https://bugstack.cn/md/road-map/grafana.html) 星球的拼团、大营销、openai应用都有这样的监控系统使用。
+- 之后，要为这套场景增加一套新的 Ai Agent 执行话术，另外还要配置一套对应的 RAG 知识库，来增强分析能力。
diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-1\350\212\202\357\274\232Ai Agent \344\270\232\345\212\241\346\265\201\347\250\213\343\200\201\347\263\273\347\273\237\346\236\266\346\236\204\343\200\201\345\272\223\350\241\250\350\256\276\350\256\241\350\257\264\346\230\216.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-1\350\212\202\357\274\232Ai Agent \344\270\232\345\212\241\346\265\201\347\250\213\343\200\201\347\263\273\347\273\237\346\236\266\346\236\204\343\200\201\345\272\223\350\241\250\350\256\276\350\256\241\350\257\264\346\230\216.md"
new file mode 100644
index 000000000..1b041207e
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-1\350\212\202\357\274\232Ai Agent \344\270\232\345\212\241\346\265\201\347\250\213\343\200\201\347\263\273\347\273\237\346\236\266\346\236\204\343\200\201\345\272\223\350\241\250\350\256\276\350\256\241\350\257\264\346\230\216.md"	
@@ -0,0 +1,32 @@
+---
+title: 【更】第3-1节，Ai Agent 业务流程、系统架构、库表设计说明
+pay: https://t.zsxq.com/qUYx0
+---
+
+# 《Ai Agent》第3-1节，Ai Agent 业务流程、系统架构、库表设计说明
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/DcL2p](https://t.zsxq.com/DcL2p)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+了解 Ai Agent 构建元素，以 Spring AI 硬编码创建 Agent 过程，分析各个模块用途，并以此设计拆分元素和对应的库表设计。
+
+经过本节我们可以了解到，怎么把这些硬编码的过程，以配置数据库表的方式，动态化构建。有了动态化的构建，也就可以按需配置出各种 Agent 服务来满足我们的业务诉求。尤其是现在 MCP 如火如荼的发展，有一套自动化的 Agent 是非常重要的。
+
+> 第3-0节，介绍和演示中，涉及了本节的部分内容。本节主要站在开发视角，来讲解如何架构和开发系统。
+
+## 二、Agent 介绍
+
+AI 智能体是使用 AI 来实现目标并代表用户完成任务的软件系统。其表现出了推理、规划和记忆能力，并且具有一定的自主性，能够自主学习、适应和做出决定。
+
+这些功能在很大程度上得益于生成式 AI 和 AI 基础模型的多模态功能。AI 智能体可以同时处理文本、语音、视频、音频、代码等多模态信息；可以进行对话、推理、学习和决策。它们可以随着时间的推移不断学习，并简化事务和业务流程。智能体可以与其他智能体协作，来协调和执行更复杂的工作流。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-1-01.png" width="500px">
+</div>
+
+>Spring AI 框架，支持大语言模型构建 AI Agent 实现。AI Agent是整合多种技术手段的智能实体 ，其实现依赖于 Tools、MCP、Memory、RAG（Retrieval 增强检索生成） 等技术组件，但不是非得依赖全部组件才叫 AI Agent。
diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-2\350\212\202\357\274\232\345\210\235\345\247\213\345\214\226\351\241\271\347\233\256\345\267\245\347\250\213.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-2\350\212\202\357\274\232\345\210\235\345\247\213\345\214\226\351\241\271\347\233\256\345\267\245\347\250\213.md"
new file mode 100644
index 000000000..3c637aeb3
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-2\350\212\202\357\274\232\345\210\235\345\247\213\345\214\226\351\241\271\347\233\256\345\267\245\347\250\213.md"
@@ -0,0 +1,60 @@
+---
+title: 【更】第3-2节：初始化项目工程
+pay: https://t.zsxq.com/3B4vv
+---
+
+# 《Ai Agent》第3-2节：初始化项目工程
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/K9NWT](https://t.zsxq.com/K9NWT)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+很多小伙伴可能都接触过一些入门级项目，简单地使用 IntelliJ IDEA 创建和开发。但在互联网公司中，如何规范地创建和管理一个新项目，往往缺乏清晰的认知。毕竟公司里有大量新项目需要启动，不可能让每个团队、每个人都随意创建风格各异的工程，这样会大幅增加后续维护和协作的难度。因此，建立统一的工具链和标准化流程显得尤为重要。
+
+所以，跟着小傅哥学习，不仅仅是完成一个项目的开发，更是以互联网大型企业的标准化流程和规范，来设计、开发和实现功能，帮助大家掌握更专业、更高效的开发方法。
+
+## 一、本章诉求
+
+教会小伙伴使用统一的标准脚手架初始化创建项目工程，并了解工程模块的分层用途。
+
+课程会循序渐进的从0到1，逐步带着大家完成项目的开发。开局只有一把 IntelliJ IDEA，完成项目后你可以学习到；业务、架构、设计、方案、配置、部署（Linux、Docker）等各项知识。
+
+## 二、如何开始
+
+### 1. 前置学习
+
+小伙伴在学习的时候，可以依照课程的方式进行创建项目、变更配置、启动测试。这里有一些前置学习，包括：Git、Maven、Docker、脚手架，课程已经准备好了，可以刷下；**磨刀不误砍柴工，基础刷完更轻松！**
+
+- Git：[https://bugstack.cn/md/road-map/git.html](https://bugstack.cn/md/road-map/git.html)
+- Maven：[https://bugstack.cn/md/road-map/maven.html](https://bugstack.cn/md/road-map/maven.html)
+- Docker [https://bugstack.cn/md/road-map/docker-what.html](https://bugstack.cn/md/road-map/docker-what.html)
+- 脚手架：[https://bugstack.cn/md/road-map/ddd-archetype-maven.html](https://bugstack.cn/md/road-map/ddd-archetype-maven.html)
+
+> 另外课程会使用 Java JDK 17、Maven 3.8.x，软件已经提供好，可以直接下载；[https://t.zsxq.com/19Rnk98M0](https://t.zsxq.com/19Rnk98M0) - `附件内含有配置好阿里云镜像的 Maven`
+
+### 2. 开始学习
+
+1. 你需要通过 git clone 命令，或者 IntelliJ IDEA 自动的检出工程方式，把项目工程检出到本地。关于如何使用Git检出项目，在前置学习里提供了教程。
+2. 检出代码后，你可以通过 IntelliJ IDEA 打开项目，并按照每一节最开始说明的本节对应的代码分支，把工程代码切换到对应的这一节。 
+3. 接下来你可以通过课程的视频和小册以及提供的代码进行学习，并跟随课程每节要完成的内容，一步步操作。过程中可以参考课程的代码进行学习。如果自己的代码运行出问题的时候，可以运行课程的代码验证是环境问题还是个人代码问题。**另外注意运行课程代码，要修改对应的环境为你的本地环境，mysql、redis等**
+4. 对于课程中每节涉及的库表，会放到工程 docs/dev-ops mysql 下。你可以每节学习创建一个新的库名称，之后导入。但要记得在工程 app/application-dev.yml 文件中修改对应的库名称。
+
+### 3. 环境安装
+
+课程提供了使用 Docker 部署 MySQL、Redis 环境的脚本。因为使用 Docker 可以随时方便卸载，不会污染本地电脑的本机环境。而且后续部署 Linux 云服务器也会非常顺手。
+
+关于环境的安装；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-2-03.png" width="850px">
+</div>
+
+1. Windows + wsl2，本地使用 powershell 切换到工程文件夹，执行 `docker-comopse -f docker-compose-environment-aliyun.yml up -d`
+2. Mac 电脑的适配性会更好，直接点击这里的绿色箭头即可安装。
+3. 如果本机配置有问题，也可以选择使用云服务器。课程中有云服务器的操作教程，部署起来更方便。云服务器教程：[https://bugstack.cn/md/road-map/linux.html](https://bugstack.cn/md/road-map/linux.html) 
+
+> 环境安装后就可以使用 MySql、Redis 链接工具使用了，也可以手动更新库表。
diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-3\350\212\202\357\274\232AiAgent\346\265\213\350\257\225\346\241\210\344\276\213.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-3\350\212\202\357\274\232AiAgent\346\265\213\350\257\225\346\241\210\344\276\213.md"
new file mode 100644
index 000000000..ee56458cf
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-3\350\212\202\357\274\232AiAgent\346\265\213\350\257\225\346\241\210\344\276\213.md"
@@ -0,0 +1,31 @@
+---
+title: 【更】第3-3节：Ai Agent 测试案例
+pay: https://t.zsxq.com/JFnzV
+---
+
+# 《Ai Agent》第3-3节：Ai Agent 测试案例
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/jI0BD](https://t.zsxq.com/jI0BD)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+在项目中引入 Spring Ai 1.0.0 框架，通过编写测试案例的方式，了解 Ai Agent 的工作模式。
+
+**那为什么要这么做呢？**
+
+通常对于软件设计的解决方案，我们都有一个这样共识，那就是目标结果驱动，最先搭建可运行的最小执行单元。因为软件设计原则，[康威定律](https://zh.wikipedia.org/wiki/%E5%BA%B7%E5%A8%81%E5%AE%9A%E5%BE%8B)，也提到，`大的系统组织总是比小系统更倾向于分解`。当场景问题被拆解的越小以后，也就越容易被理解和处理。所以，我们要优先通过案例的方式，验证 Ai Agent 的工作模型和可执行方案。再通过这些案例，设计详细的流程和库表细节。
+
+## 二、功能流程
+
+如图，为整个 Ai Agent 的工作模型；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-01.png" width="750px">
+</div>
+
+- 概念：**Ai Agent 是整合多种技术手段的智能实体** ，其实现依赖于 Tools、MCP、Memory、RAG（Retrieval-Augmented Generation，检索增强生成） 等技术组件构建的智能体。并且每一个 Agent Client 又可以被连接通信，增强其 Agent 智能体能力。
+- 方案：这里我们基于 Spring AI 框架，通过编码的方式把模型、关键词、顾问角色、工具，放入到 LLM 客户端，构建 LLM 对话智能体。
\ No newline at end of file
diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-4\350\212\202\357\274\232\346\240\271\346\215\256AiAgent\346\241\210\344\276\213\357\274\214\350\256\276\350\256\241\345\272\223\350\241\250.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-4\350\212\202\357\274\232\346\240\271\346\215\256AiAgent\346\241\210\344\276\213\357\274\214\350\256\276\350\256\241\345\272\223\350\241\250.md"
new file mode 100644
index 000000000..be57bd6c3
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-4\350\212\202\357\274\232\346\240\271\346\215\256AiAgent\346\241\210\344\276\213\357\274\214\350\256\276\350\256\241\345\272\223\350\241\250.md"
@@ -0,0 +1,39 @@
+---
+title: 【更】第3-4节：根据AiAgent案例，设计库表
+pay: https://t.zsxq.com/0tZhc
+---
+
+# 《Ai Agent》第3-4节：根据AiAgent案例，设计库表
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/Tx438](https://t.zsxq.com/Tx438)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+根据 Ai Agent 的代码案例，设计用于解耦，硬编码流程的库表。在后续的代码开发中，根据库表配置的 Ai Agent 流程所需的，模型、提示词、顾问、工具等，动态实例化出 Ai Agent 服务。
+
+## 二、拆分设计
+
+如图，为对应的Ai Agent 案例代码，映射出要拆分的库表设计；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-4-01.png" width="950px">
+</div>
+
+首先，整个代码构建的整个 Ai Agent 最小化单元服务，我们可以根据这样的服务信息设计出库表结构。
+
+- 第一步，从上到下，OpenAiApi 是最基础单元结构，可以被多个 OpenAiChatModel 使用，它可以被拆分出第一张表。
+- 第二步，构建 OpenAiChatModel，这个阶段，需要 openAiApi、model对话模型、tool mcp 工具。其中`model对话模型`时一种固定固定资源，可以直接放到 ai_client_model 模型中，而 openAiApi、mcp 工具，都属于复杂配置，则需要额外的外部关联来衔接。也就是后面的 ai_client_config 配置，用于配置衔接关系。
+- 第三步，ChatClient 对话客户端，这部分的实例化过程都是和外部其他的资源关联，本身表设计只要有一个客户端的唯一id和客户端的描述介绍即可。
+- 第四步，给 mcp 增加一个表，mcp 服务是非常重要的，有 mcp 才有 agent 服务。mcp 的启动有 stido、sse 两种方式，每种方式都有对应的配置文件 json 数据。
+- 第五步，defaultSystem 系统提示词，需要单独拆分出来。提示词等于智能体的大脑，也有人说，其实 Ai Agent 就是 prompt 的堆叠，所以写提示词是很重要的。
+- 第六步，advisor 顾问角色，在 Spring Ai 框架中，以顾问的方式，访问记忆上下文，知识库资源，所以这部分也要单独设计库表。
+- 第七步，设计一个 ai_client_config，用于配置；api、model、client、prompt、mcp、advisor的衔接关系。
+- 第八步，设计 ai_agent、ai_agent_flow_config，也就是一个 ai agent，是可以连续调用多个 ai client 客户端的。
+- 第九步，设计 ai_agent_stask_schedule 任务，这是一种触达手段，可以把配置好的任务，让 task 定时执行，如自动发帖、系统异常巡检、舆情风险检测、系统配置变更、运营活动报表等。
+- 第十步，ai_client_rag_order，是知识库表，用于上传知识库做一个记录，这样顾问角色就可以访问知识库内容了。
+
+注意；chat_client 客户端的初始化过程中，也可以增加 mcp 服务，这部分在 chat_model 模型构建中，也可以增加 mcp，选择在 chat_model 增加即可。
\ No newline at end of file
diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-5\350\212\202\357\274\232\345\244\232\346\225\260\346\215\256\346\272\220\345\222\214Mapper\351\205\215\347\275\256.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-5\350\212\202\357\274\232\345\244\232\346\225\260\346\215\256\346\272\220\345\222\214Mapper\351\205\215\347\275\256.md"
new file mode 100644
index 000000000..b3427644d
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-5\350\212\202\357\274\232\345\244\232\346\225\260\346\215\256\346\272\220\345\222\214Mapper\351\205\215\347\275\256.md"
@@ -0,0 +1,30 @@
+---
+title: 【更】第3-5节：多数据源和Mapper配置
+pay: https://t.zsxq.com/099am
+---
+
+# 《Ai Agent》第3-5节：多数据源和Mapper配置
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/eYn4R](https://t.zsxq.com/eYn4R)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+为应用程序配置pgvector（向量库）、mysql（业务库）两套数据源，同时基于库表，编写基础设施层 Mapper 操作。
+
+对于数据库表的 Mapper 编写，是一种固定的结构化代码，可以通过 MyBatis 工具生成，也可以使用 AI 编码工具处理。不过对于新人学习来说，更建议在这个阶段，通过手动的方式进行配置编写，这样可以更熟悉库表的设计和字段的理解。尤其是报错后，还可以基于报错排查错误增加编程经验。
+
+## 二、功能流程
+
+如图，两个数据源的配置和使用；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-5-01.png" width="950px">
+</div>
+
+- 首先，为了让应用程序具备多数据源链接，则需要增加一个扩展的 DataSourceConfig 配置类，来自己实现数据源的加载。这部分会替代原本配置到 yml 文件中，由 Spring 加载数据源的过程。
+- 之后，根据不同类型的数据源，注入到 AI 向量库使用场景和 MyBatis 业务使用场景中。这个过程类似于星球中 DB-Router 路由组件的课程。可以参考：[https://bugstack.cn/md/road-map/db-router.html](https://bugstack.cn/md/road-map/db-router.html)
+
diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-6\350\212\202\357\274\232\346\225\260\346\215\256\345\212\240\350\275\275\346\250\241\345\236\213\350\256\276\350\256\241.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-6\350\212\202\357\274\232\346\225\260\346\215\256\345\212\240\350\275\275\346\250\241\345\236\213\350\256\276\350\256\241.md"
new file mode 100644
index 000000000..da40342cb
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-6\350\212\202\357\274\232\346\225\260\346\215\256\345\212\240\350\275\275\346\250\241\345\236\213\350\256\276\350\256\241.md"
@@ -0,0 +1,33 @@
+---
+title: 【更】第3-6节：数据加载模型设计
+pay: https://t.zsxq.com/zrK3n
+---
+
+# 《Ai Agent》第3-6节：数据加载模型设计
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/USaZS](https://t.zsxq.com/USaZS)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+在关于 Ai Agent 的功能实现中，有一个非常重要处理步骤，就是要想办法动态的实例化来自于用户配置的；API、对话模型、MCP、顾问角色以及提示词等。这也就是我们前面为什么要基于 ai agent case 案例，把代码抽象出库表配置。
+
+好，那么到这一节，还要思考，怎么让程序来加载和实例化 Ai Agent 所需的各项组件。如，客户端的实例化、对话模型的实例化等。
+
+注意；本节会引入星球组件项目《扳手工程》，通用设计模式框架。可以前置学习：[第2节：责任链和规则树通用模型框架](https://t.zsxq.com/o7IBm)
+
+## 二、功能流程
+
+如图，Ai Agent 实现过程，数据加载策略设计；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-6-01.png" width="950px">
+</div>
+
+- 首先，整个 Ai Agent 的实例化过程，就是各项组件的创建和组装的过程。那么，为了让整体的实现代码更易于维护，我们可以把这样的创建过程，通过规则树的方式进行串联实现。而这部分需要的规则树，是不需要重复建设的，因为星球里的[《扳手工程组件项目》](https://t.zsxq.com/o7IBm)，已经把这类的共性内容，凝练成了通用的组件，各个业务系统引用使用即可。所以，这部分建议刷下[《扳手工程组件项目》](https://t.zsxq.com/o7IBm)，来看[第2节：责任链和规则树通用模型框架](https://t.zsxq.com/veRkQ)
+- 之后，本节我们先把目标缩小到关于数据加载部分，因为后续所有的 Ai Agent 组件实例化的过程，都是需要基础数据的提供。所以组装数据就显得尤为重要了。
+
+
diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-7\350\212\202\357\274\232\345\212\250\346\200\201\345\256\236\344\276\213\345\214\226\345\256\242\346\210\267\347\253\257API.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-7\350\212\202\357\274\232\345\212\250\346\200\201\345\256\236\344\276\213\345\214\226\345\256\242\346\210\267\347\253\257API.md"
new file mode 100644
index 000000000..7ca83a2bd
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-7\350\212\202\357\274\232\345\212\250\346\200\201\345\256\236\344\276\213\345\214\226\345\256\242\346\210\267\347\253\257API.md"
@@ -0,0 +1,29 @@
+---
+title: 【更】第3-7节：动态实例化客户端API
+pay: https://t.zsxq.com/RdjkP
+---
+
+# 《Ai Agent》第3-7节：动态实例化客户端API
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/4r5r4](https://t.zsxq.com/4r5r4)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+完善数据加载操作，动态实例化`客户端API`（ai_client_api）并注册到 Spring 容器。
+
+这是整个 armory 动态装配 Ai Agent 节点的第一步，涉及到了数据的获取，对象的创建和 Spring 容器的 Bean 对象注册。能看懂本节的操作，基本后续一直到整个 Ai Agent 构建也就都可以看懂了。
+
+## 二、功能流程
+
+如图，客户端API实例化过程设计；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-7-01.png" width="650px">
+</div>
+
+- 首先，整个 AI Agent 的实例化过程，就是各项组件的创建和组装的过程。为了让整体的实现代码更易于维护，我们把这样的创建过程，通过 规则树的方式 进行串联实现。这种设计模式的优势在于：模块化设计、易于扩展、代码复用度高。
+- 之后，从开始节点看，依次执行，数据构建节点、API构建节点。在 API 构建的过程中，会检查上下文中是否存在已经从数据库获取的数据，之后依次循环构建并注册到 Spring 容器。
diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-8\350\212\202\357\274\232\345\212\250\346\200\201\345\256\236\344\276\213\345\214\226\345\257\271\350\257\235\346\250\241\345\236\213.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-8\350\212\202\357\274\232\345\212\250\346\200\201\345\256\236\344\276\213\345\214\226\345\257\271\350\257\235\346\250\241\345\236\213.md"
new file mode 100644
index 000000000..161eba5e9
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-8\350\212\202\357\274\232\345\212\250\346\200\201\345\256\236\344\276\213\345\214\226\345\257\271\350\257\235\346\250\241\345\236\213.md"
@@ -0,0 +1,27 @@
+---
+title: 【更】第3-8节：动态实例化对话模型
+pay: https://t.zsxq.com/zv79l
+---
+
+# 《Ai Agent》第3-8节：动态实例化对话模型
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/4r5r4](https://t.zsxq.com/4r5r4)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+整个 ChatModel 对话模型，所需的元素包括；ai api、tool mcp 两块内容。那么本节我们就分别通过不同的 Node 节点实现这些元素的实例化和 ChatModel 构建。
+
+## 二、功能流程
+
+如图，ai api、tool mcp、model，实例化过程；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-8-01.png" width="800px">
+</div>
+
+- 首先，如图 RootNode 负责数据加载，将构建节点元素的数据依次加载到内存中（写入到上下文里）
+- 之后，除了上一节完成的 API 节点处理后，开始创建 MCP 服务的创建，之后是 ChatModel 对话模块的创建。因为 ChatModel 创建的时候会需要用到的 api、mcp 两个元素。
\ No newline at end of file
diff --git "a/docs/md/project/ai-knowledge/agent/\347\254\2543-9\350\212\202\357\274\232\345\212\250\346\200\201\345\256\236\344\276\213\345\214\226\345\257\271\350\257\235\345\256\242\346\210\267\347\253\257.md" "b/docs/md/project/ai-knowledge/agent/\347\254\2543-9\350\212\202\357\274\232\345\212\250\346\200\201\345\256\236\344\276\213\345\214\226\345\257\271\350\257\235\345\256\242\346\210\267\347\253\257.md"
new file mode 100644
index 000000000..92f9ac939
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/agent/\347\254\2543-9\350\212\202\357\274\232\345\212\250\346\200\201\345\256\236\344\276\213\345\214\226\345\257\271\350\257\235\345\256\242\346\210\267\347\253\257.md"
@@ -0,0 +1,28 @@
+---
+title: 【更】第3-9节：实例化对话客户端
+pay: https://t.zsxq.com/VcM68
+---
+
+# 《Ai Agent》第3-9节：实例化对话客户端
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/bePzF](https://t.zsxq.com/bePzF)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+经过前面一系列的准备工作，包括；api、mcp、model，本节我们要进行 advisor 顾问角色的实例化，之后进行 ChatClient 对话客户端的实例化。
+
+## 二、功能流程
+
+如图，整体 ChatClient 客户端实例化过程；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-01.png" width="800px">
+</div>
+
+- 首先，以构建 AiClientNode 的对话客户端为目的，已经完成了相关的元素实例化步骤。本节这里要处理的是，顾问角色的构建，以及构建 AiClientNode 节点。
+- 之后，AiClientNode 的构建，是关联了其他各项元素的，所以在构建时，需要在 AiClientNode 节点，从 Spring 容器通过 getBean 的方式，检索到对应的各项元素。
+- 注意，ai_client_system_prompt 系统提示词，需要修改为 Map 结构数据。这样更方便我们从数据里获取，哪些是属于当前 AiClientNode 构建时所需的元素。
\ No newline at end of file
diff --git a/docs/md/project/ai-knowledge/ai-knowledge.md b/docs/md/project/ai-knowledge/ai-knowledge.md
new file mode 100644
index 000000000..8ad662b69
--- /dev/null
+++ b/docs/md/project/ai-knowledge/ai-knowledge.md
@@ -0,0 +1,212 @@
+---
+title: DeepSeek RAG&MCP&Agent 智能体 - 解析文档&Git仓库代码&AI工作流
+lock: no
+---
+
+# 《DeepSeek RAG&MCP&Agent 智能体》 - 解析文档&Git仓库代码&AI工作流
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>课程：[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+<iframe id="B-Video" src="//player.bilibili.com/player.html?isOutside=true&aid=114106895958308&bvid=BV1ty9sYtEkc&cid=28695397252&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="100%" height="480"> </iframe>
+
+大家好，我是技术UP主小傅哥。
+
+刚上周，老板说：`”把咱们招聘里也加一条，具备AI应用开发能力的优先！“`。是呀，现在越来越多的企业都在用AI开发能力提效了，如；聊天软件增加一键唯独信息归档提取、工作文档资料携AI对话分析、工程SQL语句脚本辅运营自动完成数据处理、代码编写用AI完成自动评审等等。这些都是在AI的基础上在构建应用，以后也会越来越多！所以，具备AI应用开发能力，也是每个工程师最应该具备的基础能力了。
+
+并且用不了多久，各大互联网企业都将大量的推进落地，自有 [MCP](https://github.com/modelcontextprotocol) 服务的实现，用于增强企业 AI 应用的提效能力。因为 [MCP](https://github.com/modelcontextprotocol) 的加入，可以让你；一条命令`帮研发`，调用应用系统日志、排查系统CPU负载、自主选择是否调度数据库信息。也可以一条命令`帮运营`，搞定复杂的SQL执行、导出报表、分析数据、完成促活营销券的自动化配置上架。这就是 [MCP](https://github.com/modelcontextprotocol) 的魅力！👍🏻
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-0-00.png" width="250px"/>
+</div>
+
+**那么牛，MCP 是什么？**
+
+专业的术语 `MCP = Model Context Protocol` 模型上下文协议，可实现应用与外部数据源和工具之间的无缝集成。无论您是构建 AI 驱动的 IDE、增强聊天界面还是创建自定义 AI 工作流，MCP 都提供了一种标准化的方式来连接他们所需的上下文。
+
+`来吧，上图！让你看看它是啥！`
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-01.png" width="850px"/>
+</div>
+
+- 首先，站在用户的使用视角，研发或者运营，可以通过话术描述，完成系列的 AI 工作流，并拿到最终的结果。这就是 MCP 最终为你提供的服务。
+- 那么，你可以想象，在日常的工作中，运营、研发、产品、测试等，都有非常多的重复非创作性的工作，占用了大量的时间成本。尤其是研发，写写代码，就有运营过来，帮我查个问题吧，小嘚嘚。但如果有这样的借助于 MCP 实现的 AI 工作流，就可以完成80%以上的工作量。
+- 之后，站在技术的实现视角，MCP 是一个标准结构框架，你可以按照它（Spring AI）提供的 SDK 开发方式，完成本地化 API 的接入开发。让 AI 有明确的方式调用各类 API 服务接口。如果没有 MCP 这会是一件很麻烦的事情。
+
+**跟着小傅哥学习，从不走偏！😄**
+
+- 2022年底，ChatGPT 开始火爆。
+- 2023年2月，小傅哥，开启了第一个基于AI的项目，ChatGPT AI 问答助手项目。让所有伙伴，都能学习到 AI 如何开发应用。
+- 2023年4月，启动OpenAI(ChatGPT/ChatGLM)微服务应用体系构建大型项目，让大家可以用微信登录、微信支付/蓝兔支付，构建自己的可对外付费提供服务的 OpenAI。这一年上车学习的伙伴，很多做了自己的 AI 产品，除了提高编程技能，又小赚了一辆宝马。
+- 2024年7月，结合企业诉求，开启 OpenAI + Github Acitons，实现代码自动化评审。这一年，不少伙伴在自己的公司中都有落地，个人也得到了述职晋升。
+- 2025年3月，咱们再起启航，基于 Ollama 部署 DeepSeek，开发 RAG 知识库，解析文档和Git仓库代码。这个东西，将是企业中构建自己知识库的又一项非常重要的事情。有了知识库，AI 代码的自动评审，会更加精准，也可以辅助分析需求等。
+
+那么，接下来小傅哥就细致的介绍下，本次开启的新项目，可以让大家学习到哪些知识，掌握哪些技术。
+
+> Spring AI MCP 与 24年末发布，学习此 AI 应用开发项目，你将是第一批具备 Java AI 应用实战开发能力的人。竞争力，嘎嘎滴！
+
+## 一、能学到啥
+
+该项目是结合当下最火的 Ollama、DeepSeek、SpringAI 等技术构建的 RAG 知识库实现。从前端到后端到 dev-ops 的全栈式功能手把手实现。
+
+- 前端，基于 AI 工具，设计前端对话页面，完成 HTML、JS、TailwindCSS 的编码工作。
+- 前端，配置跨域服务接口，前后端分离实现 UI + 服务端接口对接。
+- 后端，构建双层架构，直接面向需求编码。让学习伙伴更轻松完成 RAG 知识库核心知识的学习。
+- 后端，基于 Spring AI 完成 DeepSeek、OpenAI 双模型的策略对接，处理文本向量的解析和存储。
+- 后端，使用 postgresql 存储切割文本向量数据，完成知识库的解析和存储。
+- 后端，处理多样文本`（.md、.sql、.txt、.word...）`的解析储存以及Git克隆代码库遍历切割存储。
+- 后端，使用 Redis 存储知识库标签，用于检索展示使用。
+- 后端，基于 Flux 编写流式会话接口，以及增加知识库检索功能。
+- 运维，基于 Docker 部署 Ollama 环境，完成 DeepSeek 大模型配置。
+- 运维，使用 Linux、Docker、Nginx 完成项目的打包、构建、上线！
+
+虽然，知识库都有很多现成的工具。但研发的能力不是在于功能应用，而是具备这样的开发技能储备，在有需要的时候，可以举手🙋🏻‍♀️”我会，我来做！“
+
+> 此项目，全程视频手把手操作 + 全部的小册文档，你可以轻松上手学会这样一个项目！
+
+## 二、项目介绍
+
+这是一套基于 Ollama DeepSeek 大模型构建的增强 RAG 知识库检索项目，在这套项目上，实现了除普通文档知识解析外，增加了 Git 代码库的拉取和解析，并提供操作接口。为工程师做项目开发时，`需求分析`、`研发设计`、`辅助编码`、`代码评审`、`风险评估`、`上线检测`等，做工程交付提效。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-02.png" width="950px"/>
+</div>
+
+### 第1期，RAG 我们做了什么
+
+在 《DeepSeek RAG 增强知识库》第1阶段，基于 Spring AI 0.8.1 开发了一套可以上传文件和Git仓库进行解析、切割、存储，到使用向量库完成 AI 的知识库问答系统。并最终通过 Docker 部署上线。
+
+#### 1. 对话页面
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-03.png" width="950px"/>
+</div>
+
+- 这是全程视频手把手，带着大家通过AI工具，完成的UI设计实现课程会演示这个操作），实现的一款非常简单漂亮的UI效果。
+- 我们可以结合知识库，进行更加有效的提问。像是公司中，会把知识库提供出一个标准接口，给其他各个AI应用平台提供能力。
+
+#### 2. 上传知识
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-04.png" width="650px"/>
+</div>
+
+- 上传知识，可以解析不同类型的知识库。
+- 除了课程提供的文档库、代码库，你可以增加其他的知识库，如；网页的解析，与网页内容对话。让我们的UI，增加一个侧边栏，读取当前网页内容，分析对话。这样在公司中的一些工程的日志，错误分析时，可以更快的处理。
+
+#### 3. 解析知识 - 后台日志
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-05.png" width="850px"/>
+</div>
+
+- 上传知识后，可以看到日志信息。
+- 一套工程作为知识库是非常具有开发价值的，在我们做提问的时候就不需要，人工的去分析工程，而是直接使用了。
+
+### 第2期，MCP 我们要做什么
+
+与第2期相比，第1期可以称之为小试牛刀，让小伙伴们以最快、最快的往事，积累，运用 Spring AI 框架，开发自己的 RAG 知识库。~~也是方便有些死鬼，早点写到简历上~~
+
+到了第2期，你就开始吃上细糠了，小傅哥会带着你升级 Spring AI 框架为 1.0.0-M6 最新版本，多模型配置和操作 PG 向量库，使用 GPU 搭建响应速度更好的 Ollama DeepSeek 大模型（秒级处理），以及对接官网 DeepSeek 的大模型和统一 one-api 对接方式。
+
+但这还只是开始，随着基础框架的升级完成，我们将进入 MCP 服务的开发实现。通过 AI 指令，完成 AI 工作流，调度各项 MCP 处理我们的任务作业。如图，举例操作；
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-03.png" width="950px"/>
+</div>
+
+- 基于 MCP 服务的开发和对接，通过 AI 工作流指令，完成数据的采集和存放动作。💡 聪明的小伙伴以及开始联想，基于这样的 AI 开发，可以替代很多的日常工作啦。**没想到吧，也把自己替代了** 但仍然，蠢蠢欲动（我不做，别人也做呀）！~~实现后，晋升又有的讲啦！简历也有东西写啦！~~
+- 有了 MCP 后，相当于把我们需要；在一个网页操作数据库查询数据、打开另外一个网页看天气预报，再手动的创建个文件把以上的信息获取后，复制粘贴到文件里。这一些列操作，都让 AI 通过 MCP 模型上下文协议进行处理。也就是 AI 可以调用后台接口啦！
+
+### 第3期，Agent 我们要做什么
+
+RAG 教了，MCP 搞了，那么现在是时候，实现一套自动化的 Ai Agent 服务了。
+
+如图，以通过数据库表动态配置的手段，完成相关物料的加载，包括；`模型（gpt-4.1/deepseek）`、`客户端`、`对话预设`、`执行规划（Planning）`、`顾问（记忆、RAG、日志）`、`工具（MCP`）等，在把单个 Client 串联，完成整个 Agent 调用链。这样一个 Agent 调用链可以以对话形式使用或通过 Agent 动态任务自动执行。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-01.png" width="800px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-12-01.png" width="950px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-0-02.png" width="950px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-250517-02.png" width="550px">
+</div>
+
+这套项目，小傅哥为它干了`1.87万`行代码（前后端），`14张`数据库表，全程动态化构建模块 Bean 对象，预热装配 Agent 服务。达到随用随配，自主组建出想要的各类的 Agent 功能服务。就以现在的丰富的 MCP 市场来可以说是，广阔天地，大有可为！在这套项目架构下，可以扩展出非常多的东西。
+
+### 课程目录
+
+#### 第1期 RAG Spring AI 0.8.1 - 完结
+
+1. 【更】AI RAG 知识库，项目介绍&需求分析&环境说明
+2. 【更】初始化知识库工程&部署模型&提交代码
+3. 【更】Ollama DeepSeek 流式应答接口实现
+4. 【更】Ollama DeepSeek 流式应答页面对接
+5. 【更】Ollama RAG 知识库上传、解析和验证
+6. 【更】Ollama RAG 知识库接口服务实现
+7. 【更】基于AI工具，设计前端UI和接口对接
+8. 【更】Git仓库代码库解析到知识库并完善UI对接
+9. 【更】扩展OpenAI模型对接，以及完整AI对接
+10. 【更】云服务器部署知识库（Docker、Nginx）
+
+#### 第2期 MCP Spring AI 1.0.0 - 开冲
+
+11. 【新】AI MCP 项目介绍
+12. 【新】吃上细糠，Spring AI 框架升级 + GPU 部署 AI
+13. 【新】吃上细糠，官网 DeepSeek + open-api 对接
+14. 【新】MCP 服务的应用类演示和使用
+15. 【新】MCP Spring  AI 客户端npx调用，以及资源讲解
+16. 【新】MCP Spring AI 服务端webflux实现
+17. 【新】MCP Spring AI 服务端 + 客户端对接使用
+18. 【新】服务接口实现，增强 RAG 知识库 + MCP 服务使用
+19. 【新】应用服务接口与前端页面对接
+20. ... 随课程开发提供，包括后续的云服务部署。
+
+#### 第3期 Agent Spring AI 1.0.0 - 进行中
+
+0. 第3-0节，AiAgent项目介绍和系统演示
+1. 第3-1节，Ai Agent 业务流程、系统架构、库表设计说明
+2. 第3-2节，初始化工程和库表dao等，提交代码，讲解代码库使用
+3. 第3-3节，硬编码方式讲解 Ai Agent 构建，为后续拆分做准备
+4. 第3-4节，引入扳手工程，规则模型，整体设计Agent预热装配
+5. 第3-5节，规则节点，RootNode 异步加载数据
+6. 第3-6节，规则节点，AiClientToolMcpNode 工具MCP服务构建
+7. 第3-7节，规则节点，AiClientAdvisorNode 顾问角色服务构建
+6. 第3-8节，规则节点，AiClientModelNode 模型构建 bean 对象
+7. 第3-9节，规则节点，AiClientNode 客户端构建
+8. 第3-10节，Agent 服务预热和对话接口封装，使用验证
+9. 第3-11节，知识库接口封装和使用
+10. 第3-12节，智能体动态任务构建
+11. 第3-13节，Admin 管理端 API 接口讲解（CRUD）
+12. 第3-14节，Ai Agent 对话与 UI 页面对接
+13. 第3-15节，构建镜像，上线云服务器
+14. 第3-16节，Agent 场景玩法分享
+14. ... 更多内容，随着课程开始逐步更新。
+
+### 课程计划
+
+课程已全部录制完成，计划在3月3日开更，3月16日之前全部剪辑更新完成。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-0-01.png" width="850px"/>
+</div>
+
+- 全课程包括文档 + 小册，全程视频手把手带着做。
+- 课程地址：[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp)
+
+---
+
+课程包括；视频、小册、1 对 1 答疑解惑、专属VIP项目交流群，并且提供简历编写模板结构的一条龙🐲服务。让你学习后，直接拉开与还在玩具项目其他人的差距，面试脱颖而出提高竞争力！！！
+
diff --git a/docs/md/project/ai-knowledge/ext/ai-agent-auto.md b/docs/md/project/ai-knowledge/ext/ai-agent-auto.md
new file mode 100644
index 000000000..95cbe407e
--- /dev/null
+++ b/docs/md/project/ai-knowledge/ext/ai-agent-auto.md
@@ -0,0 +1,137 @@
+---
+title: Ai Agent VS 字节扣子？
+lock: no
+---
+
+# Ai Agent VS 字节扣子？
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+**媲美Dify，堪比扣子？🤔** 哈哈哈，经过哐哐的一顿卷，小傅哥这套 Ai Agent 项目，已经做出一版智能对话体（对接UI），在单一方面的功能体验上，确实可以和市面的 Ai Agent 产品握握手啦 🤝！效果很是不错，本文提供了视频和截图。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/system/zsxq/xingqiu-231018-00.png" width="150px">
+</div>
+
+**什么是 Ai Agent？**
+
+做的越多理解的也越透彻，Ai Agent 更像是对人的行为的理解。一个人再有力气，也没法一天完全一年全部的工作，而是需要我们把这些工作，做好规划、定好目标、完成执行、结果检查，循序渐进的执行再到最终交付。
+
+那么，Ai Agent 也是一样的，Ai Token 提升的在高（等于人的力气），也没法一次做完所有事情。所以在结合了 `Prompt（提示词）`、`Advisor（记忆、RAG）`、`Tool（MCP）`，也可以把一整个大任务，细分为独立的小块，每一块做好规划、执行、审查和交付。所以 Ai Agent 再趋向一个人的行为。
+
+**跟着小傅哥，吃上一碗细糠！** 可能你也做过一些学习的项目，但往往这些项目都是一些功能逻辑的叠加和 CRUD 的拼装 + 好看一些的脸面（UI）。但是跟着小傅哥学习，给你的就不只是一个项目，还会带着你做架构，搞设计，用优雅的方式进行编码，深度积累编程思维和编码能力。
+
+>🧧 文末已提供整套 Ai Agent 实战项目的全套代码 + 各个分支章节的文档（含视频），学习起来非常爽！
+
+## 一、先上效果 - 堪比扣子！
+
+😂 做的多了，也做的久了。我发现，Ai Agent 所有模块架构好后，剩下的就是 Prompt 提示词质量的对比。**Prompt = Ai Agent 大脑！** 目前小傅哥演示的这套自研的 Ai Agent 就是反复优化 Prompt 的结果。
+
+### 1. 对话场景 - 通用场景
+
+#### 1.1 截图效果
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-01.png" width="950px">
+</div>
+
+左侧是AI思考执行过程，右侧是最终执行结果。通过我们的提问，AI Agent 进行`分析`、`规划`、`执行`、`监督`，再到最终的结果产生。有了这样的步骤，最终的总结阶段数据就会更加准确。
+
+#### 1.2 视频效果（对比扣子）
+
+视频：[https://www.bilibili.com/video/BV1VYbczDER6](https://www.bilibili.com/video/BV1VYbczDER6)
+
+### 2. 日志分析 - ELK 辅助提效（公司里非常需要这样的场景）
+
+#### 2.1 采集分析
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-06.png" width="650px">
+</div>
+
+如图，是一个系统日志 ELK + Ai Agent 的运行简图，通过 MCP 服务的对接，让 Ai Agent 具备检索日志的能力，再结合分析话术，以此来完成日志的自动化分析。
+
+#### 2.2 数据案例
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-02.png" width="650px">
+</div>
+
+在互联网公司中，都会有一套类似 ELK 的分布式日志系统，之后各个应用会上报数据。研发在接收到系统报警和运营反馈线上问题的时候，研发就需要进入到 ELK 查看系统日志的情况，以此分析线上问题。
+
+#### 2.3 智能分析
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-03.png" width="650px">
+</div>
+
+通过 Ai Agent 分析 ELK 应用系统分布式日志，自动排除出限流用户的相关信息，来辅助研发日常工作提效。
+
+## 二、系统设计 - 这是一个正经项目！
+
+Ai Agent 会的模型架构会趋向稳定并形成标准，之后便是 Prompt + MCP + Client 多链路动态执行迭代和优化。所以，把架构定义好，具备强扩展性是非常有必要的，也是程序员👨🏻‍💻工作价值的体现。—— 堆功能只等于 demo 案例，驾驭架构解决复杂问题才是核心价值体现！
+
+### 1. 库表设计
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-04.png" width="650px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-05.png" width="650px">
+</div>
+
+- 这里小傅哥设计了一套非常灵活的 Ai Agent 库表结构，满足动态配置各项资源，再由程序动态化的随时加载和使用。
+- 有了这样的库表，我们就可以按需配置出多种使用类型的 Ai Agent，之后对话或者 Job 任务方式执行使用。
+
+### 2. 数据加载
+
+如图，整体 ChatClient 客户端实例化过程；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-9-01.png" width="800px">
+</div>
+
+- 首先，以构建 AiClientNode 的对话客户端为目的，已经完成了相关的元素实例化步骤。本节这里要处理的是，顾问角色的构建，以及构建 AiClientNode 节点。
+- 之后，AiClientNode 的构建，是关联了其他各项元素的，所以在构建时，需要在 AiClientNode 节点，从 Spring 容器通过 getBean 的方式，检索到对应的各项元素。
+- 注意，ai_client_system_prompt 系统提示词，需要修改为 Map 结构数据。这样更方便我们从数据里获取，哪些是属于当前 AiClientNode 构建时所需的元素。
+
+### 3. 执行分析
+
+如图，不同方案实现的 Agent 流程；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-10-01.png" width="800px">
+</div>
+
+Ai Agent 的处理过程也是分为几类的，用于适应不同的场景使用；
+
+1. 固定N个步骤，这类的一般是配置工作流的，提高任务执行的准确性。如，一些检索资料、发送帖子、处理通知等。
+2. 顺序循环调用，配置 Agent 要执行的多个 Client 端，以此顺序执行。适合一些简单的任务关系，并已经分配好的动作，类似于1的方式。
+3. 智能动态决策，这类是目前市面提供给大家使用的 Agent 比较常见的实现方式，它会动态的规划执行动作，完成行动步骤，观察执行结果，判断完成状态和步骤。并最终给出结果。
+
+### 4. 功能架构
+
+如图，从Agent服务的装配到接口调用和响应的关系图；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-07.png" width="950px">
+</div>
+
+- 以程序启动为开始，进行自动化装配。这个过程我们先把一些想预先启动的数据库中的 agent 配置所需的 client 客户端进行服务初始化。之后写入到 Spring 容器，方便在执行 Agent 时进行使用。`前面有伙伴问，为什么把实例化的对象写入到 Spring 容器，这里就是原因`
+- 客户端（UI），进行 POST 接口请求，这个过程需要封装一个 SSE 流式响应的接口，让 Step 1~4 各个执行步骤，把过程信息写入到流式接口。这里要注意，需要给接口返回的**对象**添加上对应的类型（什么步骤、什么节点、什么过程），以便于反馈给用户 Agent 在做什么。
+
+## 三、课程目录
+
+整个课程分3个阶段讲解，包括；RAG、MCP，之后进入 Agent 阶段的学习。前面打好基础，后面进入应用。哪怕是小白，也可以跟着一起实战起来，而且每个阶段都有部署运行效果，越学越爽。
+
+项目地址：[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp)
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-08.png" width="650px">
+</div>
\ No newline at end of file
diff --git a/docs/md/project/ai-knowledge/ext/ai-agent-flowgram.md b/docs/md/project/ai-knowledge/ext/ai-agent-flowgram.md
new file mode 100644
index 000000000..b65d81c23
--- /dev/null
+++ b/docs/md/project/ai-knowledge/ext/ai-agent-flowgram.md
@@ -0,0 +1,84 @@
+---
+title: 有方案了，让自研 Ai Agent 可视化编排！
+lock: no
+---
+
+# 有方案了，让自研 Ai Agent 可视化编排！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+每当一项新技术问世，市场上总会涌现出一批基于该技术的热门项目。以 AI 技术为例，紧随其后便出现了 `n8n`、`dify`、`coze` 等各类相关应用产品（当然，他们很优秀）。
+
+然而，随着技术逐渐成熟和稳定，这些通用的解决方案往往会逐渐淡出市场。为什么呢？这是因为，各个企业下场后，都开始基于自身的业务，在细分领域，做自己的 Ai Agent 服务啦！所以，什么才是最重要的呢？
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-feign-01.gif" width="150px">
+</div>
+
+**什么才是最重要的呢？**
+
+从研发的角度来看，最关键的是；学习业务场景经验、积累技术架构方案、落地应用项目能力。相比市场上层出不穷、功能纷繁复杂的各类产品，真正有价值的是对技术本质的持续储备。只有具备扎实的技术功底，形成闭环的技术体系，才能自身核心价值能力。
+
+有了这样的能力积累，你可以在任何一个公司，任何一个场景，架构出一套最为符合的业务系统。所以，你的能力也等同于你的级别和薪资。
+
+所以，对于最火的 Ai Agent 不要只是会用就行了，拿个项目过来，部署上就觉得可以了。你要做的，是把全套的业务弄透彻，实现的方案搞下来，怎么编码整明白。好啦，开冲，今天给这套 Ai Agent 加上可视化编排方案。
+
+> 🧧 文末提供了全套 AI、RAG、MCP、Agent 项目、开发教程以及工程源码。此外还有非常多的互联网大厂项目（17个），都可以一并获取学习。
+
+## 一、拖拉拽效果
+
+鉴于整个 Ai Agent 的配置，需要一大堆东西，如；执行频次任务、客户端串联、模型选择、顾问角色知识库、MCP 工具、提示词等，有一套可视化拖拉拽配置的前端页面，就显得非常有必要了。
+
+因此小傅哥调研了不少具备图形化编排能力的前端组件，发现一套 [flowgram.ai（官网有文档，可直接阅读）](https://flowgram.ai/) 可以很好的满足当前 Ai Agent 编排能力。😄 并且上手不困难，效果还不错。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-250517-01.png" width="950px">
+</div>
+
+- 首先，我们要基于 [flowgram.ai](https://flowgram.ai/) 框架，开发自己需要的 Node 节点（后面会有代码说明，方便伙伴扩展）。这里增加了；task、agent、client、too-mcp、model。
+- 之后，在页面点击添加节点，并选择好每个节点，应该配置的属性信息，以及连接节点关系。
+- 最后，点击保存，他会给你一个json 对象，按照对象的结构，创建服务端接口即可接收和保存。（相关保存操作，会在后续课程中添加，如果有诉求可以先把前端代码下载下去，对照json开发接口即可）
+
+> 本套全段代码 [ai-agent-station-front](#) 已经添加到课程中，可以进入获取。地址：[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp)
+
+## 二、怎么添加节点
+
+### 1. 下载前端工程
+
+首先，你要下载 [ai-agent-station-front](https://gitcode.net/KnowledgePlanet/ai-agent-station-front) 到本地使用 trae.ai 打开。如果没有提示你，要自己手动执行 npm install 初始化工程。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-250517-02.png" width="550px">
+</div>
+
+- 首先，[flowgram.ai](https://flowgram.ai/) 官网提供了各种案例，可以下载一个进行扩展。这里小傅哥就是下载好的一个，之后添加我们需要的节点。
+- 之后，docs 下的 ai-agent-station.sql 为的是让 ai 可以使用，自动创建 node 节点的（下文有演示）。
+- 另外，这里的代码，对于稍微有些 react 编码基础的伙伴，是可以非常方便看懂的。后端工程师，如果不懂也没关系，让 ai 来解答以及操作。
+
+### 2. Ai 编码，添加节点
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-250517-03.png" width="950px">
+</div>
+
+- 首先，下载一份国际版 trae.ai，这里有使用文档。[https://bugstack.cn/md/road-map/trae.html](https://bugstack.cn/md/road-map/trae.html) 使用 cursor 也可以，其实这东西，重要的就是好用的模型。
+- 之后，nodes 下是各种节点，我们可以拖拽一份让 ai 编码参考。并告诉ai，以哪个库表信息来编写新的节点。（有时候可能有问题，如果有问题，可以手动修改下）
+
+## 三、点击保存，查看json
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-250517-04.png" width="950px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-250517-05.png" width="350px">
+</div>
+
+- 点击保存，就可以拿到节点和链接的关系数据了。这份数据是可以和数据库对应上。
+- 后续课程从0到1的实现过程中，会和后端接口联动，存储数据。现在你也可以先下载前端代码，尝试编码。
+
diff --git a/docs/md/project/ai-knowledge/ext/ai-agent-mcp-auth.md b/docs/md/project/ai-knowledge/ext/ai-agent-mcp-auth.md
new file mode 100644
index 000000000..381acbf09
--- /dev/null
+++ b/docs/md/project/ai-knowledge/ext/ai-agent-mcp-auth.md
@@ -0,0 +1,450 @@
+---
+title: 给 MCP 服务加上安全认证！
+lock: no
+---
+
+# 给 MCP 服务加上安全认证！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+刚刚过去两个月，市面的 MCP 服务，如雨后春笋一般不断涌现出来，包括；`百度`、`高德`、`网盘`、`支付宝`。这些 MCP 服务，可以让我们基于 Spring AI 框架构建的 Agent 具备非常丰富的使用功能。同时这也说明，程序员👨🏻‍💻，应该具备开发 MCP 服务的能力，Spring AI 让 Java 再次牛逼！
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-02.gif" width="150px"/>
+</div>
+
+>关于 RAG、MCP、Agent 是什么，这里小傅哥已经编写过了全套的教程，可以进入学习；[https://bugstack.cn/md/project/ai-knowledge/ai-knowledge.html](https://bugstack.cn/md/project/ai-knowledge/ai-knowledge.html)
+
+本节小傅哥主要给大家分享，关于市面上这些标准的带有验证权限的 MCP 服务，怎么使用 Spring AI 进行对接。同时我们自己开发的 MCP 服务，怎么加上权限校验。
+
+## 一、举例，对接高德地图 MCP
+
+高德地图 MCP Server；
+
+```java
+{
+  "mcpServers": {
+    "amap-amap-sse": {
+      "url": "https://mcp.amap.com/sse?key=您在高德官网上申请的key"
+    }
+  }
+}
+```
+
+- 官网：[https://lbs.amap.com/api/mcp-server/gettingstarted](https://lbs.amap.com/api/mcp-server/gettingstarted)  - `官网提供了创建对接 Key`
+
+### 1. 代码使用示例
+
+```java
+@Configuration
+public class McpConfig {
+
+    @Bean
+    public List<NamedClientMcpTransport> mcpClientTransport() {
+        McpClientTransport transport = HttpClientSseClientTransport
+                .builder("https://mcp.amap.com")
+                .sseEndpoint("/sse?key=<your_key>")
+                .objectMapper(new ObjectMapper())
+                .build();
+
+        return Collections.singletonList(new NamedClientMcpTransport("amap", transport));
+    }
+    
+}
+```
+
+- 对接时，需要设定 sseEndpoint 如果不设定个，Spring AI 默认是对 builder 的 baseUrl 值添加 `/sse` 的。
+- 所以，如果你要对接外部带有验证权限的 MCP 服务，需要手动设置下 sseEndpoint 值。
+
+### 2. 项目中的配置
+
+小傅哥，带着大家做的 Ai Agent，也支持了外部的这些带有权限校验的 MCP 服务。你可以，以多种方式进行配置。如；
+
+```java
+{
+	"baseUri":"https://mcp.amap.com",
+        "sseEndpoint":"/sse?key=801aabf79ed0ff78603cfe85****"
+}
+```
+
+```java
+{
+	"baseUri":"https://mcp.amap.com",
+        "sseEndpoint":"/sse?key=801aabf79ed0ff78603cfe85****"
+}
+```
+
+- 以上两种配置方式，在 ai-agent-station 都做了兼容处理。以下是兼容代码，学习这部分项目的伙伴，可以直接阅读课程代码。
+
+```java
+@Slf4j
+@Component
+public class AiClientToolMcpNode extends AbstractArmorySupport {
+
+	  // ... 省略部分代码
+
+    protected McpSyncClient createMcpSyncClient(AiClientToolMcpVO aiClientToolMcpVO) {
+        String transportType = aiClientToolMcpVO.getTransportType();
+
+        switch (transportType) {
+            case "sse" -> {
+                AiClientToolMcpVO.TransportConfigSse transportConfigSse = aiClientToolMcpVO.getTransportConfigSse();
+                // http://127.0.0.1:9999/sse?apikey=DElk89iu8Ehhnbu
+                String originalBaseUri = transportConfigSse.getBaseUri();
+                String baseUri;
+                String sseEndpoint;
+
+                int queryParamStartIndex = originalBaseUri.indexOf("sse");
+                if (queryParamStartIndex != -1) {
+                    baseUri = originalBaseUri.substring(0, queryParamStartIndex - 1);
+                    sseEndpoint = originalBaseUri.substring(queryParamStartIndex - 1);
+                } else {
+                    baseUri = originalBaseUri;
+                    sseEndpoint = transportConfigSse.getSseEndpoint();
+                }
+
+                sseEndpoint = StringUtils.isBlank(sseEndpoint) ? "/sse" : sseEndpoint;
+
+                HttpClientSseClientTransport sseClientTransport = HttpClientSseClientTransport
+                        .builder(baseUri) // 使用截取后的 baseUri
+                        .sseEndpoint(sseEndpoint) // 使用截取或默认的 sseEndpoint
+                        .build();
+
+                McpSyncClient mcpSyncClient = McpClient.sync(sseClientTransport).requestTimeout(Duration.ofMinutes(aiClientToolMcpVO.getRequestTimeout())).build();
+                var init_sse = mcpSyncClient.initialize();
+                log.info("Tool SSE MCP Initialized {}", init_sse);
+                return mcpSyncClient;
+            }
+            case "stdio" -> {
+                AiClientToolMcpVO.TransportConfigStdio transportConfigStdio = aiClientToolMcpVO.getTransportConfigStdio();
+                Map<String, AiClientToolMcpVO.TransportConfigStdio.Stdio> stdioMap = transportConfigStdio.getStdio();
+                AiClientToolMcpVO.TransportConfigStdio.Stdio stdio = stdioMap.get(aiClientToolMcpVO.getMcpName());
+
+                // https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem
+                var stdioParams = ServerParameters.builder(stdio.getCommand())
+                        .args(stdio.getArgs())
+                        .build();
+                var mcpClient = McpClient.sync(new StdioClientTransport(stdioParams))
+                        .requestTimeout(Duration.ofSeconds(aiClientToolMcpVO.getRequestTimeout())).build();
+                var init_stdio = mcpClient.initialize();
+                log.info("Tool Stdio MCP Initialized {}", init_stdio);
+                return mcpClient;
+            }
+        }
+
+        throw new RuntimeException("err! transportType " + transportType + " not exist!");
+    }
+
+}
+```
+
+- 以上代码，是为了自动化构建 MCP 服务的，其中 case sse 的部分，会对 url 进行拆分，如果本身 url 配置了校验权限，则不会从另外一个参数获取，否则从另外参数拼接。这样就可以很好的扩展用户配置时的多样性问题了。
+
+>以上是关于带有权限校验的 MCP 服务配置的问题，接下来，我们要说下怎么自己开发一个带有权限校验
+
+## 二、实现，带有权限校验的 MCP 服务
+
+首先，Spring AI 是有意提供基于自家的 OAuth2 框架，完成 MCP 服务的多样性权限校验的。不过目前提供的方案能用，但不算成熟。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-250524-01.png" width="850px"/>
+</div>
+
+官网：[https://spring.io/blog/2025/05/19/spring-ai-mcp-client-oauth2](https://spring.io/blog/2025/05/19/spring-ai-mcp-client-oauth2)
+
+### 1. 基于 OAuth2 认证
+
+#### 1.1 工程结构
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-250524-02.png" width="750px"/>
+</div>
+
+- 工程：[https://gitcode.net/KnowledgePlanet/mcp-server-auth](https://gitcode.net/KnowledgePlanet/mcp-server-auth) - `面向于学习 ai-agent-station 的伙伴`
+- 使用 OAuth2 基于 Spring MVC 的方式到也简单，知道添加配置即可。
+
+#### 1.2 所需的 POM 文件
+
+```pom
+<dependency>
+    <groupId>org.springframework.boot</groupId>
+    <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
+</dependency>
+
+<dependency>
+    <groupId>org.springframework.boot</groupId>
+    <artifactId>spring-boot-starter-oauth2-authorization-server</artifactId>
+</dependency>
+
+<dependency>
+    <groupId>org.springframework.ai</groupId>
+    <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
+</dependency>
+```
+
+#### 1.3 测试验证
+
+```java
+@Slf4j
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = "server.shutdown=immediate")
+public class ApiTest {
+
+    @LocalServerPort
+    private int port;
+
+    private final ObjectMapper objectMapper = new ObjectMapper();
+
+    @Test
+    public void test_access_token() throws IOException, InterruptedException {
+        String token = obtainAccessToken();
+        log.info("token:{}", token);
+        // eyJraWQiOiJiMWQ0MGIxNi1hOTYzLTQ2NmYtYTVkOC02NGRjMzg0ODljYWEiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJtY3AtY2xpZW50IiwiYXVkIjoibWNwLWNsaWVudCIsIm5iZiI6MTc0ODA1MTc1NiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo1ODA5OCIsImV4cCI6MTc0ODA1MjA1NiwiaWF0IjoxNzQ4MDUxNzU2LCJqdGkiOiI5NjY4ZmZkMi0wNjQ2LTRiNmItODQ4Ni1jYzk3ZjMxNTdmOTEifQ.CG4GYai_NYkmfcqmNi-_HYG06Kan04uNSsC2ivn_eC9Ra6xMKYTs9KIT7k5lKxSFRUOPI7K0zJNVvNXrrIe0iFl-csrG2vGukNTGTPMxtUi2hheBMRbnvjvuojW4DeOEE8UOpdA6uow67ucwcymTlDXE-k7OjRZeyp7UdVz2WyoDFQhLB6ihLbDSj5puAZxfNocirRzo36gmW243aW9f1gugPUcpND-oobc2q8xyBG2cX2AlGXUSS-v9PLjHr2W2smFTKHHGwu7FpMMBnJLUT5gZD0llIg6yqro91nFaAFOpGHXjRZYgVjkRlzxx08Zuquva9PbStxbUl2j8hI43_Q
+
+        var client = HttpClient.newHttpClient();
+
+        var request = HttpRequest.newBuilder()
+                .uri(URI.create("http://localhost:" + port + "/sse"))
+                .header("Accept", "text/event-stream")
+                .header("Authorization", "Bearer " + token)
+                .GET()
+                .build();
+
+        var responseCode = new AtomicInteger(-1);
+        var sseRequest = client.sendAsync(request, HttpResponse.BodyHandlers.ofInputStream()).thenApply(response -> {
+            responseCode.set(response.statusCode());
+            if (response.statusCode() == 200) {
+                log.info("response:{}", JSON.toJSONString(response));
+                return response;
+            }
+            else {
+                throw new RuntimeException("Failed to connect to SSE endpoint: " + response.statusCode());
+            }
+        });
+
+        await().atMost(Duration.ofSeconds(1)).until(sseRequest::isDone);
+        assertThat(sseRequest).isCompleted();
+        assertThat(responseCode).hasValue(200);
+    }
+
+    private String obtainAccessToken() throws IOException, InterruptedException {
+        var client = HttpClient.newHttpClient();
+
+        var clearTextCredentials = "mcp-client:secret".getBytes(StandardCharsets.UTF_8);
+        var credentials = new String(Base64.getUrlEncoder().encode(clearTextCredentials));
+        var request = HttpRequest.newBuilder()
+                .uri(URI.create("http://localhost:" + port + "/oauth2/token"))
+                .header("Authorization", "Basic " + credentials)
+                .header("Content-Type", "application/x-www-form-urlencoded")
+                .POST(ofString("grant_type=client_credentials"))
+                .build();
+
+        var rawResponse = client.send(request, HttpResponse.BodyHandlers.ofString()).body();
+
+        Map<String, String> response = objectMapper.readValue(rawResponse, Map.class);
+        return response.get("access_token");
+    }
+    
+}
+```
+
+- 加上 OAuth2 以后，就需要获取并设置 accessToken 才能访问 sse 服务了。
+
+### 2. 基于网关实现
+
+其实我们到不非得依赖于 Spring OAuth2 往 MCP 服务里在添加一些其他的东西。倒不如直接走网关，让网关来管理权限，MCP 服务只做服务的事情就好。
+
+这里我们基于 Nginx 来配置验证功能，当然你可以在学习本节的案例后，配置任何其他的网关来管理你的 MCP 服务。
+
+注意，这里的前置条件为你已经跟着小傅哥，至少完成了一个 MCP 服务。课程；[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp)
+
+当我们有了一套基于 sse 形式访问的 mcp 后，我们是可以给这套 mcp 基于 nginx 转发的形式进行访问后面真实的 mcp 服务的。在转发的过程中，拿到用户在地址 `http://127.0.0.1:9999/sse?apikey=DElk89iu8Ehhnbu` mcp 服务后面拼接的 apikey，并对 apikey 进行验证。
+
+#### 2.1 配置工程
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-250524-03.png" width="850px"/>
+</div>
+
+- 在 ai-agent-station 项目下，提供了 dev-ops-v2 配置 mcp 服务转发和验证能力。
+- 注意，部署的时候，要把 mcp.localhost.conf 转发的 mcp 服务的地址，更换为你的地址。
+- 另外，每一个 mcp.localhost.conf 还可以配置域名，这样就达到了高德地图 mcp 访问的效果。举例；`https://fatie.mcp.bugstack.cn/sse/apikey=*******`
+
+#### 2.2 服务转发&校验
+
+```java
+# 可以负载服务
+upstream backend_servers {
+    server 192.168.1.108:8101;
+}
+
+server {
+    listen 80;
+
+    server_name 192.168.1.104;  # 修改为你的实际服务器 IP 或域名【域名需要备案】
+
+    location /sse {
+        # 验证apikey参数，这个apikey也可以对接服务端接口来处理。
+        if ($arg_apikey != "DElk89iu8Ehhnbu") {
+            return 403; # 如果apikey不正确，返回403禁止访问
+        }
+
+        # 重写URL，去掉apikey参数
+        rewrite ^(/sse/)\?apikey=.* $1 break;
+
+        proxy_pass http://backend_servers;  # 将请求代理到上游服务器组
+        proxy_set_header Host $host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header X-Forwarded-Proto $scheme;
+
+        chunked_transfer_encoding off;
+        proxy_buffering off;
+        proxy_cache off;
+        proxy_set_header X-Forwarded-For $remote_addr;
+        proxy_set_header X-Forwarded-Proto $scheme;
+    }
+
+    location /mcp/message {
+        proxy_pass http://backend_servers;  # 将请求代理到上游服务器组
+        proxy_set_header Host $host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header X-Forwarded-Proto $scheme;
+    }
+
+}
+```
+
+- 特别注意，mcp 服务是有2个步骤的，一个是 sse 访问，还有一个 mcp/message 的处理。我们只需要对 sse 的请求进行验证即可。
+- `/sse` 请求路径，需要会提取 apikey 与 nginx 配置的值进行对比，如果不正确则会返回一个 403 禁止访问，通过则放行。
+- 之后重写 url 地址，让转发到本身 mcp 的地址是干净的。从 `http://127.0.0.1:9999/sse?apikey=DElk89iu8Ehhnbu` 验证转发后为 `http://192.168.1.108:8101/sse`
+
+#### 2.3 功能验证
+
+首先，要确保你的 mcp 服务是可以使用的。如，访问；`http://192.168.1.108:8101/sse` 可以获得到结果。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-250524-04.png" width="850px"/>
+</div>
+- 如图，验证成功。我们可以通过转发的方式进行验证和使用。
+- 另外，有了转发和验证，你原本的服务，sse 8101 就不用对外了。只有你的网关（nginx）可以访问即可。这样就可以控制权限了。
+
+#### 2.4 动态验证
+
+那么，目前我们配置的nginx 转发这不是一个固定的权限账号吗，怎么让不同的接入方都申请一个秘钥key来使用呢？这里我们需要使用到 nginx 的 auth 认证模块。
+
+```java
+# 可以负载服务
+upstream backend_servers {
+    server 192.168.1.108:8101;
+}
+
+server {
+    listen 80;
+
+    server_name 192.168.1.104;  # 修改为你的实际服务器 IP 或域名【域名需要备案】
+
+    location /sse {
+        auth_request /auth;
+
+        # 重写URL，去掉apikey参数
+        rewrite ^(/sse/)\?apikey=.* $1 break;
+
+        proxy_pass http://backend_servers;  # 将请求代理到上游服务器组
+        proxy_set_header Host $host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header X-Forwarded-Proto $scheme;
+
+        chunked_transfer_encoding off;
+        proxy_buffering off;
+        proxy_cache off;
+        proxy_set_header X-Forwarded-For $remote_addr;
+        proxy_set_header X-Forwarded-Proto $scheme;
+    }
+
+    location /mcp/message {
+        proxy_pass http://backend_servers;  # 将请求代理到上游服务器组
+        proxy_set_header Host $host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header X-Forwarded-Proto $scheme;
+    }
+  
+     location = /auth {
+        # 发送子请求到HTTP服务，验证客户端的凭据，返回响应码
+        internal;
+        # 设置参数
+        set $query '';
+        if ($request_uri ~* "[^\?]+\?(.*)$") {
+            set $query $1;
+        }
+        # 验证成功，返回200 OK
+        proxy_pass http://207.246.123.*:8090/auth/token?$query;
+        # 发送原始请求
+        proxy_pass_request_body off;
+        # 清空 Content-Type
+        proxy_set_header Content-Type "";
+     }  
+
+}
+
+```
+
+- 在访问 `/sse` 的时候，增加 auth 认证，auth 来访问本地一个 http 接口。你可以是 SpringBoot 实现的接口。这个接口负责验证你的秘钥是否正确。同时你的 SpringBoot 服务还可以提供出一个创建秘钥的平台，让接入方使用。
+- 其实类似这样的场景，使用功能更加丰富的 api 网关都是自带的，或者 github 一些专门为 mcp 做网关服务的也都有。
+
+## 三、增强，学习 rag、mcp、agent
+
+小傅哥，已经为你准备好了一套 AI RAG、MCP、Agent 实践编程课程，使用 Java + Spring AI 框架，增强自己的 AI 应用开发能力，迅速囤积编程技能，满足各个公司招聘时对AI应用类开发的要求！如下，课程目录，全程文档小册 + 视频带着你从0到1学习。
+
+#### **第1期 RAG Spring AI 0.8.1 - 完结**
+
+1. 【更】AI RAG 知识库，项目介绍&需求分析&环境说明
+2. 【更】初始化知识库工程&部署模型&提交代码
+3. 【更】Ollama DeepSeek 流式应答接口实现
+4. 【更】Ollama DeepSeek 流式应答页面对接
+5. 【更】Ollama RAG 知识库上传、解析和验证
+6. 【更】Ollama RAG 知识库接口服务实现
+7. 【更】基于AI工具，设计前端UI和接口对接
+8. 【更】Git仓库代码库解析到知识库并完善UI对接
+9. 【更】扩展OpenAI模型对接，以及完整AI对接
+10. 【更】云服务器部署知识库（Docker、Nginx）
+
+#### **第2期 MCP Spring AI 1.0.0 - 完结**
+
+1. 【更】吃上细糠，升级SpringAI框架
+2. 【更】康庄大道，上手 AI MCP 工作流
+3. 【更】道山学海，实现MCP自动发帖服务（stdio）
+4. 【更】海纳百川，上线MCP自动发帖服务
+5. 【更】川流不息，实现MCP微信公众号消息通知服务
+6. 【更】息息相通，MCP 服务部署上线（sse 模式）
+
+#### 第3期 Agent Spring AI 1.0.0 - 进行中【全套源码和部署已提供】
+
+1. 第3-0节，AiAgent项目介绍和系统演示
+2. 第3-1节，Ai Agent 业务流程、系统架构、库表设计说明
+3. 第3-2节，初始化工程和库表dao等，提交代码，讲解代码库使用
+4. 第3-3节，硬编码方式讲解 Ai Agent 构建，为后续拆分做准备
+5. 第3-4节，引入扳手工程，规则模型，整体设计Agent预热装配
+6. 第3-5节，规则节点，RootNode 异步加载数据
+7. 第3-6节，规则节点，AiClientToolMcpNode 工具MCP服务构建
+8. 第3-7节，规则节点，AiClientAdvisorNode 顾问角色服务构建
+9. 第3-8节，规则节点，AiClientModelNode 模型构建 bean 对象
+10. 第3-9节，规则节点，AiClientNode 客户端构建
+11. 第3-10节，Agent 服务预热和对话接口封装，使用验证
+12. 第3-11节，知识库接口封装和使用
+13. 第3-12节，智能体动态任务构建
+14. 第3-13节，Admin 管理端 API 接口讲解（CRUD）
+15. 第3-14节，Ai Agent 对话与 UI 页面对接
+16. 第3-15节，构建镜像，上线云服务器
+17. 第3-16节，Agent 场景玩法分享
+18. ... 更多内容，随着课程开始逐步更新。
+
+课程详细介绍：[https://mp.weixin.qq.com/s/j_G32TDfM_l-S76Wo0zPXw](https://mp.weixin.qq.com/s/j_G32TDfM_l-S76Wo0zPXw)
+
diff --git a/docs/md/project/ai-knowledge/ext/ai-agent-notes.md b/docs/md/project/ai-knowledge/ext/ai-agent-notes.md
new file mode 100644
index 000000000..970b543dc
--- /dev/null
+++ b/docs/md/project/ai-knowledge/ext/ai-agent-notes.md
@@ -0,0 +1,84 @@
+---
+title: Ai Agent 新项目，你要的简历模板来啦！
+lock: no
+---
+
+# Ai Agent 新项目，你要的简历模板来啦！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+**简历怎么写？简历怎么写？简历怎么写？** 这群死鬼，一直催小傅哥，想让小傅哥把饭🍚喂嘴里。没办法，兄弟们着急秋招写简历了，让自己写总是感觉慌，不知道从哪下手。好啦，它来了，它来了，行了吧！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250817-01.png" width="250px">
+</div>
+
+**你就说吧，各个大厂都在做，它能不重要？**
+
+Dify、Coze、Claude，京东还开源了 JoyAgent，市面上互联网大厂做的 Ai Agent 产品可以说是如雨后春笋一般，越来越多了。Ai Agent 也成了互联网标配的业务场景，为各个应用业务提效，所以结于业务场景来看，Ai Agent 是有战略意义的。
+
+所以，你想面试互联网类公司，在简历上多一笔关于 Ai 类的场景实现，总是能匹配到公司里更多的部门岗位。尤其是具备一些 Ai Agent 开发能力的，在现在看来，可以说是非常亮眼的存在。就趁现在吧，该让自己的简历增强下啦！🌶
+
+>接下来，我会站在一个求职者的角度进行项目介绍和简历内容展示。可以作为你的参考。
+
+## 一、运行效果
+
+先看一眼系统架构和运行效果，之后我们对项目进行介绍和简历编写。—— 面试时，可能也会有面试官看你的项目运行效果，你可以把项目上线，也可以写一个技术博客文章，来介绍你做的项目。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250817-02.png" width="150px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-07.png" width="950px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-01.png" width="950px">
+</div>
+
+- 更多可查看，[关于 Ai Agent 项目介绍](https://mp.weixin.qq.com/s/S3UJY0aWbulQ2OZH9XVYmw)
+
+## 二、项目介绍
+
+面试官您好，本套 Ai Agent 综合智能体项目，主要为业务应用系统提效而构建，包括；需求文档分析、代码评审（可结合 openai 代码自动评审）、文档资料编写（+消息通知）、ELK 日志检索 + 普罗米修斯监控的智能 Ai Agent 分析等功能。
+
+整套项目，抽象设计拆分了 Ai Agent 执行过程所需的各项组件（Advisor、Prompt、MCP）能力到数据库表中，使其具备自由配置编排组装的特性。以此方式可结合应用中实际场景诉求，编排类似 Diff 和智能分析 Coze 能力，达到需要什么场景就配置什么场景的 Ai Auto Agent。
+
+该项目，在架构设计上使用了 DDD 分层架构进行设计，运用了组合模式的规则引擎构建执行链路，并结合工厂、策略、责任链等方式来处理具体流程细节（多种组合方式的Ai Agent执行过程），以此解耦系统功能的实现。这样就可以更加灵活方便的迭代各类扩展性诉求。
+
+## 三、简历模板
+
+**注意**：🙅🏻‍♀️不要直接复制粘贴简历模板内容，以此结构和描述方式，可以用你的个人第1学习视角来描述。包括；学习过程中的积累、检索的同类资料，以及对课程的扩展等多方面内容来编写简历。以下简历涵盖了课程 1~3 阶段内容；
+
+- 项目名称：`Ai Agent 综合应用提效智能体`/`Ai Agent 智能巡检系统`/`Ai Agent 可编排服务系统` - 基于你的实际场景/目的，修改项目名称
+- 项目架构：微服务架构、DDD 领域驱动四色模型、前后端分离设计、Agent 设计模式
+- 核心技术：Spring AI（RAG、MCP、Advisor）、SpringBoot、MyBatis、MySQL、PGVector、Redis、React、flowgram.ai、Nginx、Docker
+- 项目描述：本项目是一套面向业务应用系统提效的综合智能体（Ai Agent）解决方案，支持将执行过程中的各项能力（如Advisor、Prompt、MCP）抽象并存储于数据库，实现自由配置和灵活编排。用户可根据实际业务场景，动态组合和调整智能分析、代码评审、日志检索等功能模块，打造定制化的Ai Auto Agent，从而显著提升开发设计、编码、运维效率。
+- 核心职责：
+  - 以产品（PRD）服务诉求和多方面调研评审，设计出具有可编排能力的 Ai Agent 服务架构。并以 DDD 领域驱动建模，构建系统架构。
+  - 拆解 Ai Agent 执行过程所需的能力组件，包括；Advisor 顾问角色记忆上下文和访问RAG知识库、Tool（Function Call、MCP）调用服务端（推文、通知、ELK、普罗米修斯监控等）、Prompt（提示词）、Model（对话模型）、Api（使用 one-api/自研sdk组件，统一转换其他各个模型为 openai 格式）
+  - 设计通用对话分析模型，完成 Ai Agent 执行过程中所需的，问题分析、自主规划、精准执行、内容判罚（循环执行），直至输出最终结果。—— Ai Agent 可对不同步骤配置不同的 Model + MCP + Prompt 能力。并对执行过程中，通过 Advisor 顾问角色访问知识库和存储上下文数据。
+  - 实现 MCP 服务能力，以 stdio/sse 方式，开发，公众号通知 MCP、推文 MCP（可以是内部的文档化服务）、ELK-MCP、普罗米修斯-MCP等。以及使用 MCP 服务平台，检索公用能力 https://sai.baidu.com/zh/（本地文件、Github、搜索引擎），统一配置使用。—— 数据库设计了多类型 MCP 服务的配置操作。
+  - 设计通用 MCP Nginx Token 校验能力（也可以设计 MCP-GateWay），以配置化方式进行鉴权使用。增强 MCP 调用过程中，数据传输安全性。
+  - 基于 Spring TaskScheduler 扩展实现，智能体任务调度服务，可自动化完成日常系统巡检（客诉、报警）产生 html 格式报告文档。也可以基于报警监听消息，触发巡检动作（公司内，报警信息有 MQ 消息）。
+  - 提供 RAG 知识库能力，可自主上传文件 + 解析工程代码库，并对知识库设有标签为 Ai Agent Advisor 访问 RAG 提供数据使用能力，增强准确性。—— 解析的代码库，可以为 openai 代码自动评审，增强评审能力。
+  - 设计一键 Ai Agent 预热能力，动态化注入 Spring 容器。支持运营配置服务，随时调整、变更、上线，方便运营配置和使用。
+  - 基于 Racet + flowgram.ai 框架，为 Ai Agent 服务提供拖拉拽编排能力，增强运营使用体验。
+
+> 此套 Ai Agent 以为企业/平台/系统，上线3个月以来，主动巡检解决数十次系统隐患问题和运营配置错误情况，以及撰写了上万篇有效文档 + 提炼技术关键信息对新人辅导。后续还会继续配置更多方面的 Ai Agent 服务能力，为企业提效。
+
+## 四、课程目录
+
+整个课程分3个阶段讲解，包括；RAG、MCP，之后进入 Agent 阶段的学习。前面打好基础，后面进入应用。哪怕是小白，也可以跟着一起实战起来，而且每个阶段都有部署运行效果，越学越爽。
+
+项目地址：[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp)
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-agent-station-ext-250810-08.png" width="650px">
+</div>
\ No newline at end of file
diff --git a/docs/md/project/ai-knowledge/none.md b/docs/md/project/ai-knowledge/none.md
new file mode 100644
index 000000000..f64218b2f
--- /dev/null
+++ b/docs/md/project/ai-knowledge/none.md
@@ -0,0 +1,15 @@
+---
+title: 新章节，编写中
+lock: no
+---
+
+# 新章节，编写中
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、前言
+
+... 新章节，编写中
\ No newline at end of file
diff --git a/docs/md/project/ai-knowledge/notes.md b/docs/md/project/ai-knowledge/notes.md
new file mode 100644
index 000000000..84c3fb7a6
--- /dev/null
+++ b/docs/md/project/ai-knowledge/notes.md
@@ -0,0 +1,127 @@
+---
+title: 面试：技能、简历、问题汇总
+lock: no
+---
+
+# 《Ai Agent》，关于面试中的技能、简历、问题汇总
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>课程：[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+此部分主要用于向读者提供星球项目之一的《Ai Agent》项目如何体现到简历中，包括；专业技能、项目经验。
+
+## 一、项目介绍
+
+面试官您好，本套 Ai Agent 综合智能体项目，主要为业务应用系统提效而构建，包括；需求文档分析、代码评审（可结合 openai 代码自动评审）、文档资料编写（+消息通知）、ELK 日志检索 + 普罗米修斯监控的智能 Ai Agent 分析等功能。
+
+整套项目，抽象设计拆分了 Ai Agent 执行过程所需的各项组件（Advisor、Prompt、MCP）能力到数据库表中，使其具备自由配置编排组装的特性。以此方式可结合应用中实际场景诉求，编排类似 Diff 和智能分析 Coze 能力，达到需要什么场景就配置什么场景的 Ai Auto Agent。
+
+该项目，在架构设计上使用了 DDD 分层架构进行设计，运用了组合模式的规则引擎构建执行链路，并结合工厂、策略、责任链等方式来处理具体流程细节（多种组合方式的Ai Agent执行过程），以此解耦系统功能的实现。这样就可以更加灵活方便的迭代各类扩展性诉求。
+
+## 二、简历模板
+
+**注意**：🙅🏻‍♀️不要直接复制粘贴简历模板内容，以此结构和描述方式，可以用你的个人第1学习视角来描述。包括；学习过程中的积累、检索的同类资料，以及对课程的扩展等多方面内容来编写简历。以下简历涵盖了课程 1~3 阶段内容；
+
+- 项目名称：`Ai Agent 综合应用提效智能体`/`Ai Agent 智能巡检系统`/`Ai Agent 可编排服务系统` - 基于你的实际场景/目的，修改项目名称
+- 项目架构：微服务架构、DDD 领域驱动四色模型、前后端分离设计、Agent 设计模式
+- 核心技术：Spring AI（RAG、MCP、Advisor）、SpringBoot、MyBatis、MySQL、PGVector、Redis、React、flowgram.ai、Nginx、Docker
+- 项目描述：本项目是一套面向业务应用系统提效的综合智能体（Ai Agent）解决方案，支持将执行过程中的各项能力（如Advisor、Prompt、MCP）抽象并存储于数据库，实现自由配置和灵活编排。用户可根据实际业务场景，动态组合和调整智能分析、代码评审、日志检索等功能模块，打造定制化的Ai Auto Agent，从而显著提升开发设计、编码、运维效率。
+- 核心职责：
+  - 以产品（PRD）服务诉求和多方面调研评审，设计出具有可编排能力的 Ai Agent 服务架构。并以 DDD 领域驱动建模，构建系统架构。
+  - 拆解 Ai Agent 执行过程所需的能力组件，包括；Advisor 顾问角色记忆上下文和访问RAG知识库、Tool（Function Call、MCP）调用服务端（推文、通知、ELK、普罗米修斯监控等）、Prompt（提示词）、Model（对话模型）、Api（使用 one-api/自研sdk组件，统一转换其他各个模型为 openai 格式）
+  - 设计通用对话分析模型，完成 Ai Agent 执行过程中所需的，问题分析、自主规划、精准执行、内容判罚（循环执行），直至输出最终结果。—— Ai Agent 可对不同步骤配置不同的 Model + MCP + Prompt 能力。并对执行过程中，通过 Advisor 顾问角色访问知识库和存储上下文数据。
+  - 实现 MCP 服务能力，以 stdio/sse 方式，开发，公众号通知 MCP、推文 MCP（可以是内部的文档化服务）、ELK-MCP、普罗米修斯-MCP等。以及使用 MCP 服务平台，检索公用能力 https://sai.baidu.com/zh/（本地文件、Github、搜索引擎），统一配置使用。—— 数据库设计了多类型 MCP 服务的配置操作。
+  - 设计通用 MCP Nginx Token 校验能力（也可以设计 MCP-GateWay），以配置化方式进行鉴权使用。增强 MCP 调用过程中，数据传输安全性。
+  - 基于 Spring TaskScheduler 扩展实现，智能体任务调度服务，可自动化完成日常系统巡检（客诉、报警）产生 html 格式报告文档。也可以基于报警监听消息，触发巡检动作（公司内，报警信息有 MQ 消息）。
+  - 提供 RAG 知识库能力，可自主上传文件 + 解析工程代码库，并对知识库设有标签为 Ai Agent Advisor 访问 RAG 提供数据使用能力，增强准确性。—— 解析的代码库，可以为 openai 代码自动评审，增强评审能力。
+  - 设计一键 Ai Agent 预热能力，动态化注入 Spring 容器。支持运营配置服务，随时调整、变更、上线，方便运营配置和使用。
+  - 基于 React + flowgram.ai 框架，为 Ai Agent 服务提供拖拉拽编排能力，增强运营使用体验。
+
+> 此套 Ai Agent 以为企业/平台/系统，上线3个月以来，主动巡检解决数十次系统隐患问题和运营配置错误情况，以及撰写了上万篇有效文档 + 提炼技术关键信息对新人辅导。后续还会继续配置更多方面的 Ai Agent 服务能力，为企业提效。
+
+## 三、面试问题
+
+### 1. 你们项目采用了DDD领域驱动设计，能简单介绍一下你们的四色模型是如何划分的？
+
+**回答**：我们项目严格按照DDD四色模型进行架构设计。首先是**实体（Entity）**层，主要包含AiClientVO、AiClientAdvisorVO等核心业务对象，承载业务状态和标识；**值对象（Value Object）**层包含各种配置信息如AiClientSystemPromptVO、AiClientModelVO等，保证数据的不可变性；**领域服务（Domain Service）**层实现了复杂的业务逻辑，如AiClientNode、AiClientAdvisorNode等节点服务，负责AI Agent的组装和编排；**聚合根（Aggregate Root）**则通过ExecuteCommandEntity等实体来管理整个AI Agent的生命周期。这种设计让我们的业务逻辑更加清晰，各层职责分明，便于维护和扩展。
+
+### 2. 你们的微服务架构是如何设计的，各个模块之间是如何协作的？
+
+**回答**：我们采用了标准的DDD分层架构，分为六个核心模块：api层定义对外接口契约，app层作为应用启动入口和配置中心，domain层包含核心业务逻辑和领域模型，trigger层处理HTTP请求和事件触发，infrastructure层负责数据持久化和外部服务调用，types层定义通用类型和枚举。各模块通过依赖注入和事件驱动进行协作，domain层作为核心不依赖任何外部模块，infrastructure层实现domain层定义的接口，trigger层调用domain层的服务。这种设计保证了业务逻辑的纯净性和系统的可测试性。
+
+### 3. Agent设计模式在你们项目中是如何体现的？
+
+**回答**：我们的Agent设计模式主要体现在多层次的智能体架构设计上。首先是**策略模式**的应用，通过IExecuteStrategy接口定义执行策略，AutoAgentExecuteStrategy实现自动执行逻辑；其次是**责任链模式**的核心应用，我们设计了四步执行链：RootNode→Step1AnalyzerNode（任务分析）→Step2PrecisionExecutorNode（精准执行）→Step3QualitySupervisorNode（质量监督）→Step4LogExecutionSummaryNode（执行总结），每个节点继承AbstractExecuteAutoSupport并实现特定的业务逻辑；再次是**工厂模式**，通过DefaultAutoAgentExecuteStrategyFactory创建执行策略处理器，管理DynamicContext动态上下文；最后是**模板方法模式**，AbstractExecuteAutoSupport定义了执行模板，各个Step节点实现具体的doApply方法。这种设计实现了"问题分析→自主规划→精准执行→质量监督"的完整AI Agent执行循环，每个步骤都可以独立配置不同的ChatClient、Prompt和Advisor，真正实现了智能体的可编排和可扩展。
+
+### 4. Spring AI中的Advisor顾问角色是如何设计和实现的？
+
+**回答**：Advisor顾问角色是我们AI Agent的核心能力之一，主要负责上下文记忆和知识库访问。我们实现了两种主要的Advisor：PromptChatMemory用于维护对话历史，通过maxMessages参数控制记忆长度；RagAnswerAdvisor用于访问向量知识库，通过topK和filterExpression参数控制检索精度。在实现上，我们继承了Spring AI的BaseAdvisor，重写了aroundCall方法来拦截对话请求，在请求前注入相关上下文信息，在响应后更新记忆状态。这种设计让AI Agent具备了持续学习和知识积累的能力，大大提升了对话的准确性和连贯性。
+
+### 5. RAG知识库的分词和向量化是如何设计的？
+
+**回答**：我们的RAG知识库基于PGVector实现，使用OpenAI的Embedding模型进行向量化。在分词策略上，我们使用TokenTextSplitter按照token数量进行智能分割，既保证了语义的完整性又控制了向量的维度。向量存储采用1536维的向量空间，支持余弦相似度检索。在数据预处理阶段，我们会对上传的文档进行清洗和标准化，提取关键信息并添加元数据标签，这些标签可以用于后续的过滤检索。检索时通过SearchRequest配置topK参数控制返回结果数量，通过filterExpression进行精确过滤，确保检索结果的相关性和准确性。
+
+### 6. MCP协议的设计理念和实现方式是什么？
+
+**回答**：MCP（Model Context Protocol）是我们实现工具调用的核心协议，它定义了AI模型与外部工具之间的标准化通信接口。我们支持两种通信方式：stdio模式适用于本地工具调用，通过标准输入输出进行通信；sse模式适用于远程服务调用，通过Server-Sent Events实现实时通信。在实现上，我们为每个MCP服务定义了标准的Function接口，使用@Tool注解标记可调用的方法，通过MethodToolCallbackProvider将Java方法暴露为MCP工具。比如微信通知MCP通过WeiXinNoticeService提供消息推送能力，CSDN发帖MCP提供自动发布文章的能力。这种设计让AI Agent能够调用各种外部服务，大大扩展了智能体的能力边界。
+
+### 7. 你们是如何实现AI Agent的动态编排和热部署的？
+
+**回答**：我们通过Spring的动态Bean注册机制实现了AI Agent的热部署能力。核心思路是将AI Agent的各个组件（Model、Prompt、Advisor、MCP）抽象为可配置的Bean，存储在数据库中。当配置发生变化时，通过ArmoryCommandEntity触发重新装配流程，使用DefaultArmoryStrategyFactory的策略模式动态创建新的组件实例，然后通过registerBean方法将新组件注册到Spring容器中。整个过程采用责任链模式，依次执行AiClientApiNode、AiClientModelNode、AiClientAdvisorNode、AiClientNode等节点，确保组件的正确装配顺序。这种设计让我们能够在不重启服务的情况下，动态调整AI Agent的能力配置，大大提升了系统的灵活性和运维效率。
+
+### 8. 智能体任务调度服务是如何设计的，如何实现自动化巡检？
+
+**回答**：我们基于Spring TaskScheduler扩展实现了智能体任务调度服务，支持定时和事件驱动两种触发方式。定时巡检通过Cron表达式配置执行周期，自动收集系统指标、日志信息、告警数据等，然后调用专门的巡检Agent进行智能分析，最终生成HTML格式的巡检报告。事件驱动巡检则监听MQ消息，当收到告警信息时立即触发相应的巡检动作。在实现上，我们为每种巡检场景配置了专门的Agent，比如性能巡检Agent配置了Prometheus MCP工具，日志巡检Agent配置了ELK MCP工具。巡检结果会通过微信公众号MCP自动推送给相关人员，实现了从发现问题到通知处理的全自动化流程。
+
+### 9. 你们的MCP服务是如何保证安全性的？
+
+**回答**：我们设计了通用的MCP Nginx Token校验机制来保证数据传输安全性。首先在Nginx层配置了统一的鉴权模块，所有MCP请求都需要携带有效的Token才能通过；Token采用JWT格式，包含用户身份、权限范围、过期时间等信息；在应用层，我们为每个MCP服务配置了独立的访问密钥，支持定期轮换；对于敏感操作如数据库访问、文件操作等，还增加了二次验证机制。此外，我们还实现了请求频率限制、IP白名单、操作审计日志等安全措施。在数据传输过程中，所有敏感信息都进行了加密处理，确保即使在网络传输过程中被截获也无法直接使用。
+
+### 10. 前端的拖拽编排功能是如何实现的？
+
+**回答**：我们基于React和flowgram.ai框架实现了AI Agent的可视化编排功能。前端采用节点式的流程图设计，每个节点代表一个AI Agent组件，用户可以通过拖拽的方式组合不同的Model、Prompt、Advisor、MCP组件。在技术实现上，我们使用React Flow作为基础图形引擎，自定义了各种组件节点的渲染逻辑；通过Context API管理全局状态，实时同步编排配置；使用WebSocket与后端保持连接，支持实时预览和调试。当用户完成编排后，前端会将配置信息序列化为JSON格式发送给后端，后端解析配置并动态创建对应的AI Agent实例。这种设计让非技术人员也能够轻松配置和使用AI Agent，大大降低了使用门槛。
+
+### 11. 在实现多模型适配时遇到了什么挑战，是如何解决的？
+
+**回答**：最大的挑战是不同AI模型的API格式和调用方式差异很大，直接适配会导致代码耦合度过高。我们的解决方案是引入one-api服务作为统一的模型网关，将所有第三方模型的API统一转换为OpenAI格式。在系统内部，我们只需要适配OpenAI的接口规范，通过配置不同的baseUrl和apiKey就能接入各种模型。同时我们还自研了SDK组件，封装了模型调用的通用逻辑，包括重试机制、超时处理、错误码转换等。这种设计不仅简化了开发复杂度，还提升了系统的稳定性和可扩展性，当需要接入新模型时只需要在one-api层配置即可。
+
+### 12. 大规模并发场景下，AI Agent的性能是如何保证的？
+
+**回答**：我们从多个维度进行了性能优化。首先是连接池管理，为每个模型API配置了独立的连接池，避免相互影响；其次是异步处理，所有AI调用都采用异步方式，通过ResponseBodyEmitter实现流式响应，用户可以实时看到AI的思考过程；然后是缓存策略，对于相同的问题我们会缓存AI的回答，减少重复计算；在资源调度上，我们使用自定义的线程池进行任务分发，根据任务类型和优先级进行智能调度。此外，我们还实现了熔断降级机制，当某个模型服务不可用时自动切换到备用模型，保证服务的高可用性。通过这些优化，我们的系统能够支持数千并发用户同时使用。
+
+### 13. 如何保证AI Agent执行过程中的数据一致性？
+
+**回答**：我们采用了事件驱动架构来保证数据一致性。每个AI Agent的执行过程被拆分为多个步骤，每个步骤完成后都会发布相应的事件，下一个步骤监听事件后开始执行。在数据库层面，我们使用了分布式事务来保证跨服务的数据一致性，关键操作都包装在事务中执行。对于长时间运行的AI任务，我们实现了断点续传机制，将执行状态持久化到数据库，即使服务重启也能从断点继续执行。同时我们还建立了完善的监控和告警机制，实时监控AI Agent的执行状态，一旦发现异常立即进行人工干预。这种设计确保了即使在复杂的业务场景下，数据的一致性和完整性也能得到保证。
+
+### 14. 这个AI Agent系统给公司带来了什么实际价值？
+
+**回答**：我们的AI Agent系统在多个方面为公司创造了显著价值。在开发效率方面，代码评审Agent将人工评审时间从平均2小时缩短到15分钟，准确率达到95%以上；在运维效率方面，智能巡检Agent实现了7×24小时自动监控，故障发现时间从小时级缩短到分钟级，运维人员的重复性工作减少了80%；在内容创作方面，文章生成Agent帮助技术团队每月自动产出50+篇高质量技术文章，大大提升了公司的技术影响力。更重要的是，这套系统的可编排特性让我们能够快速响应新的业务需求，从需求提出到Agent上线的周期从原来的2周缩短到2天，大大提升了业务响应速度。
+
+### 15. 在项目推广过程中遇到了什么阻力，是如何解决的？
+
+**回答**：最大的阻力来自于用户对AI准确性的担忧和使用习惯的改变。为了解决这个问题，我们采用了渐进式推广策略。首先选择了代码评审这个相对低风险的场景进行试点，通过大量的测试数据证明AI的准确性；然后我们设计了人机协作的工作模式，AI负责初步分析，人工负责最终决策，让用户逐步建立信任；在用户体验方面，我们提供了详细的操作文档和培训视频，还建立了用户反馈机制，根据用户建议持续优化产品功能。经过3个月的推广，用户接受度从最初的30%提升到了85%，现在已经成为团队日常工作的重要工具。
+
+### 16. 未来你们计划如何进一步优化和扩展这个系统？
+
+**回答**：我们有几个重要的优化方向。首先是增强AI Agent的自主学习能力，通过强化学习让Agent能够从历史执行结果中学习，不断优化自己的决策策略；其次是扩展更多的业务场景，比如客服机器人、数据分析助手、项目管理助手等；在技术架构方面，我们计划引入更先进的向量数据库和图数据库，提升知识检索的准确性和效率；在用户体验方面，我们正在开发移动端应用，让用户能够随时随地使用AI Agent服务。同时我们也在探索多模态AI的应用，让Agent能够处理图片、音频、视频等多种类型的数据，进一步扩展应用场景。预计在未来一年内，我们的AI Agent系统将覆盖公司80%以上的业务流程。
+
+### 17. 在设计通用对话分析模型时，你们是如何处理问题分析、自主规划、精准执行这个循环的？
+
+**回答**：我们设计了一个四阶段的执行循环：问题分析、自主规划、精准执行、内容判罚。在问题分析阶段，AI Agent首先理解用户意图，提取关键信息和上下文；自主规划阶段，Agent根据可用的工具和知识库制定执行计划，选择最优的执行路径；精准执行阶段，按照计划调用相应的MCP工具和Advisor，获取执行结果；内容判罚阶段，Agent评估执行结果是否满足用户需求，如果不满足则重新进入规划阶段。整个过程中，我们为每个阶段配置了不同的Model、MCP、Prompt组合，比如规划阶段使用逻辑推理能力强的模型，执行阶段使用工具调用能力强的模型。这种设计让AI Agent具备了类似人类的思考和执行能力。
+
+### 18. 你们的向量数据库检索性能是如何优化的？
+
+**回答**：我们从多个层面优化了向量检索性能。在索引层面，PGVector使用了HNSW（Hierarchical Navigable Small World）算法构建高效的向量索引，支持近似最近邻搜索；在查询优化方面，我们实现了查询缓存机制，对于相似的查询直接返回缓存结果；在数据分片方面，我们按照业务领域对向量数据进行分片存储，减少检索范围；在并发控制方面，我们使用了连接池和异步查询，提升并发处理能力。此外，我们还实现了智能的预加载机制，根据用户的历史查询模式预先加载可能需要的向量数据到内存中。通过这些优化，我们的向量检索响应时间从原来的500ms优化到了50ms以内，同时支持千级并发查询。
+
+### 19. 在实现MCP服务的过程中，stdio和sse两种模式各有什么优缺点？
+
+**回答**：stdio模式的优点是实现简单，适合本地工具调用，通信开销小，调试方便；缺点是只能用于本地服务，不支持远程调用，扩展性有限。sse模式的优点是支持远程调用，可以跨网络部署，支持实时双向通信，扩展性强；缺点是实现复杂度高，需要处理网络异常和重连机制，通信开销相对较大。在实际应用中，我们根据具体场景选择合适的模式：对于文件系统操作、本地命令执行等场景使用stdio模式；对于微信通知、CSDN发帖、远程API调用等场景使用sse模式。为了统一开发体验，我们封装了通用的MCP客户端，屏蔽了底层通信细节，开发者只需要关注业务逻辑即可。
+
+### 20. 你们是如何保证AI Agent在复杂业务场景下的稳定性的？
+
+**回答**：我们建立了多层次的稳定性保障机制。在架构层面，采用微服务设计，单个服务的故障不会影响整个系统；在服务层面，实现了熔断降级机制，当某个依赖服务不可用时自动切换到备用方案；在数据层面，建立了完善的备份和恢复机制，关键数据都有多副本保护；在监控层面，实现了全链路监控，从请求接入到响应输出的每个环节都有详细的监控指标；在异常处理方面，我们为每种可能的异常场景都设计了对应的处理策略，包括重试、降级、人工介入等。此外，我们还建立了完善的测试体系，包括单元测试、集成测试、压力测试、混沌工程测试等，确保系统在各种极端情况下都能稳定运行。通过这些措施，我们的系统可用性达到了99.9%以上。
+
+> 随着课程进展和大家面试遇到的问题，持续更新这部分内容。
\ No newline at end of file
diff --git "a/docs/md/project/ai-knowledge/promotion/AI MCP \345\206\215\350\277\231\344\271\210\347\224\250\344\270\213\345\216\273\357\274\214\345\217\257\345\260\261\350\246\201\342\200\235\345\210\233\344\270\232\342\200\234\345\217\230\347\216\260\344\272\206\345\221\200\357\274\201.md" "b/docs/md/project/ai-knowledge/promotion/AI MCP \345\206\215\350\277\231\344\271\210\347\224\250\344\270\213\345\216\273\357\274\214\345\217\257\345\260\261\350\246\201\342\200\235\345\210\233\344\270\232\342\200\234\345\217\230\347\216\260\344\272\206\345\221\200\357\274\201.md"
new file mode 100644
index 000000000..13aa0851b
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/promotion/AI MCP \345\206\215\350\277\231\344\271\210\347\224\250\344\270\213\345\216\273\357\274\214\345\217\257\345\260\261\350\246\201\342\200\235\345\210\233\344\270\232\342\200\234\345\217\230\347\216\260\344\272\206\345\221\200\357\274\201.md"	
@@ -0,0 +1,111 @@
+---
+title: AI MCP 再继续这么用，可就要”创业“变现了呀！
+lock: no
+---
+
+# AI MCP 再继续这么用，可就要”创业“变现了呀！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>课程：[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+在 [AI MCP 24小时为我”打工“](https://mp.weixin.qq.com/s/sB4EaP6HMtj3VxK-VMD8nQ)，两周时间。已产生 `251篇文章`，带来`10万+阅读量`，`涨粉近1000人`！在这么搞下去，不得变现了哇！
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-knowledge-250413-01.png" width="150px"/>
+</div>
+
+嘿嘿，不过这点点成绩根本挡不住我前进的脚步👣！
+
+AI MCP 的能力远不止于次，或者更准确的说是 AI Agent 的能力，还有非常多的场景可以运用，开玩笑讲，他会让 Java 再次伟大！这也是为什么 Spring AI 那么快速的迭代自己的框架设计，甚至不惜每次迭代还要推翻之前的结构模型，也要更好的支持未来 AI 工程的开发实现。
+
+在有了 AI Agent 后，所有的 tob/toc 服务项目，都应该会变得更加智能，这会包括我们现在使用的各项软件，如；电商、出行、外卖等，也包括研发人员使用的各类技术软件。如果大公司还是牛马般的靠体力卷工时，甚至可能会被小公司的不断创新所掀翻。
+
+好啦，那么这篇文章小傅哥会给大家介绍下 AI Agent 以及可运用的场景，帮助大家打开思路！
+
+>文末提供了 AI RAG&MCP 实战编程项目，可以快速掌握 Spring AI 应用开发能力！
+
+## 一、什么是 AI Agent
+
+AI Agent 是整合多种技术手段的智能实体，其实现依赖于 Tools、MCP、Memory、RAG（Retrieval 增强检索生成） 等技术组件。但不是非得依赖全部组件才叫 AI Agent。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-knowledge-250413-02.png" width="550px"/>
+</div>
+
+AI Agents 是**系统** ，它通过赋予 **大型语言模型(LLMs)** **访问工具** 和**知识** 来扩展其能力，从而使 **LLMs** 能够**执行操作** 。
+
+- **系统** ：将 Agents 视为一个由许多组件组成的系统，而不仅仅是单个组件，这一点很重要。在基本层面上，AI Agent 的组件包括：
+  - **环境** - AI Agent 运行的定义空间。例如，如果我们有一个旅行预订 AI Agent，则环境可以是 AI Agent 用来完成任务的旅行预订系统。
+  - **传感器** - 环境具有信息并提供反馈。AI Agents 使用传感器来收集和解释有关环境当前状态的信息。在旅行预订 Agent 示例中，旅行预订系统可以提供诸如酒店可用性或航班价格之类的信息。
+  - **执行器** - 一旦 AI Agent 接收到环境的当前状态，对于当前任务，Agent 会确定要执行的操作以更改环境。对于旅行预订 Agent，它可能是为用户预订可用房间。
+- **大型语言模型** - Agents 的概念在 LLMs 创建之前就已存在。使用 LLMs 构建 AI Agents 的优势在于它们能够解释人类语言和数据。这种能力使 LLMs 能够解释环境信息并制定改变环境的计划。
+- **执行操作** - 在 AI Agent 系统之外，LLMs 仅限于根据用户提示生成内容或信息的情况。在 AI Agent 系统内部，LLMs 可以通过解释用户请求并使用其环境中可用的工具来完成任务。
+- **访问工具** - LLM 可以访问哪些工具由 1) 它运行的环境和 2) AI Agent 的开发者定义。对于我们的旅行 Agent 示例，Agent 的工具受预订系统中可用操作的限制，开发者可以将 Agent 的工具访问权限限制为航班。
+- **知识** - 除了环境提供的信息外，AI Agents 还可以从其他系统、服务、工具甚至其他 Agents 中检索知识。在旅行 Agent 示例中，此知识可以是位于客户数据库中的用户旅行偏好信息。
+
+我们可以以一个人，作为视角来理解 AI Agent，Memory 记忆是人的大脑，Tools 是人的身体和四肢，Rag 知识库是过往的经验储备，MCP 是我们与外部的连接调用。而整个人就是这个智能体 AI Agent。
+
+## 二、AI 智能体的工作原理
+
+每个智能体都定义了角色、个性和沟通风格，包括具体指令和可用工具的说明。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-knowledge-250413-03.png" width="850px"/>
+</div>
+
+- **角色**：角色是智能体的核心特征，定义了其性格和行为方式。一个定义良好的角色可以帮助智能体在与环境和用户互动时保持一致性。随着时间的推移，智能体会通过经验积累和环境互动不断发展和完善其角色。
+- **记忆**：智能体的记忆系统由短期记忆、长期记忆、共识记忆和情景记忆组成。短期记忆用于处理即时互动，长期记忆存储历史数据和对话，情景记忆记录过去的互动细节，而共识记忆则用于在智能体之间共享信息。通过这些记忆系统，智能体能够回忆过去的互动，适应新情况，保持上下文一致性，并从经验中学习以提高性能。
+- **工具**：工具是智能体用来与环境互动并增强其功能的资源。它们可以是函数或外部资源，帮助智能体访问信息、处理数据或控制外部系统以执行复杂任务。工具根据其界面类型进行分类，包括物理界面、图形界面和基于程序的界面。通过工具学习，智能体能够理解工具的功能及其应用场景，从而有效地使用这些工具。
+- **模型**：大语言模型 (LLM) 是构建 AI 智能体的基础，赋予智能体理解、推理和行动的能力。LLM 作为智能体的“大脑”，使其能够处理和生成语言，而其他组件则支持智能体的推理和行动能力。
+
+> https://github.com/google/A2A 多个 Agent 间，可以使用 A2A 协议，完成 Agent 和 Agent 对接。
+
+## 三、AI Agent 场景应用
+
+### 1. BCP 智能巡检
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-knowledge-250413-04.png" width="800px"/>
+</div>
+
+- 场景：在日常的互联网toc场景的系统中，每天都会有不同程度的客诉，这些客诉问题需要进行大量的系统排查。
+- 方案：将企业内的各项系统服务，开发出 MCP 服务接口（APIs），并为每个核心业务流程提供排查链路计划。在发生系统报警时，以报警为触达手段，排查系统日志、账户、Redis、Dev-Ops 服务等，给给出综合的解决方案。
+- 其他：不同配置的 Agent 是可以连接通信的，一个 Agent 就是一个配置出来的 ChatClient 对话体。
+
+### 2. 工具AI化设计
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-knowledge-250413-05.png" width="800px"/>
+</div>
+
+- 场景：其实现在除了编程方面，其他很多软件并没有那么快速的接入 AI Agent。如 trae.ai\cursor 都是编程的利器，可以更快速的迭代开发代码。那么同样的 SSH 链接云服务器的工具，也可以通过 AI Agent 进行扩展，提高我们的操作服务器部署软件的效率。
+- 方案：设计 Linux SSH MCP Server 服务，同时提供 SFTP 以及云服务器的对接。再加上 Linux RAG 知识库。这样我们就可以以对话和编码的方式操作服务器。如，部署 JDK，安装 NodeJS，执行系统镜像的构建、推送、拉取、部署等操作。
+
+### 3. toc场景AI化
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-knowledge-250413-06.png" width="800px"/>
+</div>
+
+- 场景：目前的大部分购物操作，都是人工的方式自己在平台检索，之后对于不懂的在进行客服提问，最后去下单。那么这里也可以加入 AI 操作，自主的完成购物、下单，以及将来退货的操作。
+- 方案：为产品提供购物话术 RAG 增强检索能力，以及提供货物、下单、结算、物流的 MCP 服务。用户和 AI 对话过程中，完成货品的组装选择和下单。聊聊天就把东西买好了，还能给提供产品的使用和维护。
+
+### 4. AI Agent 编排
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-knowledge-250413-07.png" width="750px"/>
+</div>
+
+- 当我们有大量的 MCP 服务实现、RAG 知识库沉淀后，会催生出 AI Agent 的编排能力实现。你可以按需组装一套自己的对话 AI Agent。
+- 类似的场景实现：[https://github.com/n8n-io/n8n](https://github.com/n8n-io/n8n) - 付费的。不过很多企业会借助之前的 BPMN 实现的低代码，扩展出 AI Agent 编排实现。
+
+```java
+docker volume create n8n_data
+docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n registry.cn-hangzhou.aliyuncs.com/xfg-studio/n8n:1.88.0
+```
+
diff --git "a/docs/md/project/ai-knowledge/promotion/AI MCP \345\267\262\347\273\217\345\270\256\346\210\221\342\200\234\345\271\262\346\264\273\342\200\235\344\272\206\357\274\201.md" "b/docs/md/project/ai-knowledge/promotion/AI MCP \345\267\262\347\273\217\345\270\256\346\210\221\342\200\234\345\271\262\346\264\273\342\200\235\344\272\206\357\274\201.md"
new file mode 100644
index 000000000..88403fbe1
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/promotion/AI MCP \345\267\262\347\273\217\345\270\256\346\210\221\342\200\234\345\271\262\346\264\273\342\200\235\344\272\206\357\274\201.md"	
@@ -0,0 +1,119 @@
+---
+title: AI MCP 已经一天24小时，给我“打工”了！
+lock: no
+---
+
+# AI MCP 已经一天24小时，给我“打工”了！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>课程：[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+一天24篇推文，500+收藏，2.6万+阅读量，我已经让 AI 帮我干活了！这是小傅哥最新实现的一套 `mcp-server-csdn`，完全不需要我上手，就可以定时的执行文章编写和发表。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-01.png" width="500px"/>
+</div>
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-03.png" width="500px"/>
+</div>
+
+只要你配置好对应的话题，AI MCP 就会自动创作文章和发表。虽然单篇流量不一定都高，但架不住我根本没出手呀，走的就是一个量大取胜！**这不是自动发帖，这是自动创业呀😂！简直美滋滋！**
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-02.gif" width="100px"/>
+</div>
+
+MCP 模型上下文协议，核心的作用就在于通过标准的协议设计，让 AI 可以以通用的方式调用各类服务的接口。所以，我们可以通过 MCP 的实现，让 AI 自动化的完成内容的创作和发表。
+
+在这样的一个 CSDN 发文章的模型跑通后，我们就可以大批量的复制，完成不同类内容的创作和发表，也可以以这样的方式对接其他各类内容社区平台。甚至你还可以想到，这东西能辅助我们完成很多工作。
+
+以前总有人说，AI 来了，可能会让很多程序员失业。但恰恰相反，不仅不会失业，反而 AI 会让程序员如虎添翼，推进改变其他行业的工作模式。毕竟，没有哪个行业不仅能用 AI，还能懂 AI，还能开发 AI 了！
+
+接下来，小傅哥就给大家，介绍下这套 MCP 的设计和工作模式。
+
+> 🧧 文末提供了全套 AI、RAG、MCP 的开发、使用教程以及工程源码。此外还有非常多的互联网大厂项目，都可以一并获取学习。
+
+## 一、MCP 的工作模式
+
+MCP 服务，可以以工具 Tools 的形式配置到 AI MCP 客户端。当我们向 AI 发送执行指令后，AI 会携带工具 Tools 信息，一起发送给 AI。之后进行语义分析以及调用 AI MCP 执行业务诉求。
+
+你可以把 AI MCP 当成你雇来的员工，你有什么想法就告诉他，让他充当那个跑腿和执行的人。而你只负责下达指令和验收结果。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-04.png" width="650px"/>
+</div>
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-05.png" width="650px"/>
+</div>
+
+如图，我们可以给程序设定一套话术描述，让它去做指定类型的文章创作和发表。在 AI 完成内容创作后，会调用 MCP 服务，传递接口入参值，再由 MCP 服务，完成文章的发表。
+
+如果，我们希望发布的文章具备当前热点。可以增加一个 MCP 服务，这个服务来检索牛客网最新的求职面试信息，再加上各个大厂招聘要求描述信息等。基于这些信息先获取到面试热点话题，在结合话题与设定的面试场景话术一起生成对应的文章。**MCP 就像是你的员工，你可以交代A员工做什么后，交接给B员工继续处理。**
+
+## 二、MCP 怎么开发的
+
+首先，MCP 是一套标准的模型上下文协议，它不限制非得使用那种语言实现。如；NodeJS、Python、Java，都可以实现 MCP 服务。以 Spring AI 框架举例，Java 工程师可以，以非常简单的使用 Java 代码开发普通的业务逻辑，之后配置上 AI MCP 工具类注解和完成 Bean 对象的实例化即可。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-06.png" width="850px"/>
+</div>
+
+- 如图，正常的搭建 SpringBoot 应用程序，编写对接 CSDN 发帖接口。之后给服务方法配置上 Tool 工具注解。那么它就会被 Spring AI MCP 注册和使用了。
+- 同时，一个工程里可以有很多的这样的服务和工具。比如你要开发一个各大平台集成的发帖/文章的服务，那么也可以增加其他的对接类在同一个工程里。最终配置上 AI MCP 的注册即可。
+
+## 三、MCP 怎么对接的
+
+把 Java 开发实现的 MCP 服务端，打包成一个 Jar，把这个 Jar 配置到 MCP 客户端工程里。即可完成 MCP 服务的调用。并且一个 MCP 客户端，也可以对接多套 MCP 服务，这些服务可以以 AI 工作流的形式完成自己的工作。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-07.png" width="850px"/>
+</div>
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-mcp-knowledge-250330-08.png" width="850px"/>
+</div>
+
+- 如图，在 SpringBoot 工程中，增加MCP 服务的配置对接。这个时候 AI 对话就那可以拿到 MCP 工具进行对话。并将要执行的信息，通过 MCP 服务工具完成处理。
+- 并且，你可以把 MCP 服务，打包构建镜像部署到（服务器/Nas），让它一天24小时的干活。用不了多久，你就成为某个领域内容的专家了！
+
+## 四、MCP 怎么学习下？
+
+小傅哥，已经为你准备好了一套 AI RAG、MCP、Function Call 实践编程课程，使用 Java + Spring AI 框架，增强自己的 AI 应用开发能力，迅速囤积编程技能！如下，课程目录，全程文档小册 + 视频带着你从0到1学习。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-0-01.png" width="850px"/>
+</div>
+
+#### 第1期 RAG Spring AI 0.8.1 - 完结
+
+1. 【更】AI RAG 知识库，项目介绍&需求分析&环境说明
+2. 【更】初始化知识库工程&部署模型&提交代码
+3. 【更】Ollama DeepSeek 流式应答接口实现
+4. 【更】Ollama DeepSeek 流式应答页面对接
+5. 【更】Ollama RAG 知识库上传、解析和验证
+6. 【更】Ollama RAG 知识库接口服务实现
+7. 【更】基于AI工具，设计前端UI和接口对接
+8. 【更】Git仓库代码库解析到知识库并完善UI对接
+9. 【更】扩展OpenAI模型对接，以及完整AI对接
+10. 【更】云服务器部署知识库（Docker、Nginx）
+
+#### 第2期 MCP Spring AI 1.0.0 - 开冲
+
+1. 【新】AI MCP 项目介绍
+2. 【新】吃上细糠，Spring AI 框架升级 + GPU 部署 AI
+3. 【新】康庄大道，上手 AI MCP 工作流.md
+4. 【新】道山学海，实现MCP自动发帖服务
+5. 【新】海纳百川，MCP 其他服务实现
+6. 【新】川流不息，官网 DeepSeek + open-api 对接
+7. 【新】息兵罢战，服务接口实现，增强 RAG 知识库 + MCP 服务使用
+8. 【新】应用服务接口与前端页面对接
+9. ... 随课程开发提供，包括后续的云服务部署。
+
+> AI RAG&MCP 只是小傅哥社群里众多项目的一个，这里还有非常多的牛皮项目，一次加入都可以学习到。并且，不断的更新迭代新项目，社群嘎嘎活跃！
\ No newline at end of file
diff --git "a/docs/md/project/ai-knowledge/\347\254\25410\350\212\202\357\274\232\344\272\221\346\234\215\345\212\241\345\231\250\351\203\250\347\275\262\347\237\245\350\257\206\345\272\223\357\274\210Docker\343\200\201Nginx\357\274\211.md" "b/docs/md/project/ai-knowledge/\347\254\25410\350\212\202\357\274\232\344\272\221\346\234\215\345\212\241\345\231\250\351\203\250\347\275\262\347\237\245\350\257\206\345\272\223\357\274\210Docker\343\200\201Nginx\357\274\211.md"
new file mode 100644
index 000000000..88ce48c59
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/\347\254\25410\350\212\202\357\274\232\344\272\221\346\234\215\345\212\241\345\231\250\351\203\250\347\275\262\347\237\245\350\257\206\345\272\223\357\274\210Docker\343\200\201Nginx\357\274\211.md"
@@ -0,0 +1,28 @@
+---
+title: 【更】第10节：云服务器部署知识库（Docker、Nginx）
+pay: https://t.zsxq.com/YUG46
+---
+
+# 《DeepSeek RAG 知识库》第10节：云服务器部署知识库（Docker、Nginx）
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/cWfL6](https://t.zsxq.com/cWfL6)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+部署项目到公网云服务器，让小伙伴们学习如何打包部署上线和Linux、Docker、Nginx的操作使用。
+
+## 二、部署过程
+
+如图，为本次的部署过程；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-10-01.png" width="800px">
+</div>
+
+- 首先，购买云服务器，之后搭建云环境。[http://618.gaga.plus/](http://618.gaga.plus/) 需要2c4g部署。
+- 之后，我们在本地构建软件镜像，之后推送到 Docker Hub，完成后再把 dev-ops 的脚本通过 sftp 上传到云服务器，执行安装。
+- 最后，记得部署完成后检查各个软件运行日志，以及开通下相关的服务端口。
diff --git "a/docs/md/project/ai-knowledge/\347\254\25411\350\212\202\357\274\232AIMCP\351\203\250\345\210\206\344\273\213\347\273\215.md" "b/docs/md/project/ai-knowledge/\347\254\25411\350\212\202\357\274\232AIMCP\351\203\250\345\210\206\344\273\213\347\273\215.md"
new file mode 100644
index 000000000..0af867e4a
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/\347\254\25411\350\212\202\357\274\232AIMCP\351\203\250\345\210\206\344\273\213\347\273\215.md"
@@ -0,0 +1,109 @@
+---
+title: DeepSeep MCP 动态知识库 - AI工作流&智能体
+lock: no
+---
+
+# 《DeepSeep MCP 动态知识库》 - AI工作流&智能体
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>课程：[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+用不了多久，各大互联网企业都将大量的推进落地，自有 [MCP](https://github.com/modelcontextprotocol) 服务的实现，用于增强企业 AI 应用的提效能力。因为 [MCP](https://github.com/modelcontextprotocol) 的加入，可以让你；一条命令`帮研发`，调用应用系统日志、排查系统CPU负载、自主选择是否调度数据库信息。也可以一条命令`帮运营`，搞定复杂的SQL执行、导出报表、分析数据、完成促活营销券的自动化配置上架。这就是 [MCP](https://github.com/modelcontextprotocol) 的魅力！👍🏻
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-0-00.png" width="250px"/>
+</div>
+
+**那么牛，MCP 是什么？**
+
+专业的术语 `MCP = Model Context Protocol` 模型上下文协议，可实现应用与外部数据源和工具之间的无缝集成。无论您是构建 AI 驱动的 IDE、增强聊天界面还是创建自定义 AI 工作流，MCP 都提供了一种标准化的方式来连接他们所需的上下文。
+
+`来吧，上图！让你看看它是啥！`
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-01.png" width="850px"/>
+</div>
+
+- 首先，站在用户的使用视角，研发或者运营，可以通过话术描述，完成系列的 AI 工作流，并拿到最终的结果。这就是 MCP 最终为你提供的服务。
+- 那么，你可以想象，在日常的工作中，运营、研发、产品、测试等，都有非常多的重复非创作性的工作，占用了大量的时间成本。尤其是研发，写写代码，就有运营过来，帮我查个问题吧，小嘚嘚。但如果有这样的借助于 MCP 实现的 AI 工作流，就可以完成80%以上的工作量。
+- 之后，站在技术的实现视角，MCP 是一个标准结构框架，你可以按照它（Spring AI）提供的 SDK 开发方式，完成本地化 API 的接入开发。让 AI 有明确的方式调用各类 API 服务接口。如果没有 MCP 这会是一件很麻烦的事情。
+
+好啦📢，这就是小傅哥即将为你开启的**《DeepSeek RAG 增强知识库》**第2阶段，`MCP 服务开发和对接`。让你具备 AI 开发能力，遥遥领先于还在扣 CRUD 项目的小伙伴，做面试最牛的仔，最职场最靓的人！
+
+> Spring AI MCP 与 24年末发布，学习此 AI 应用开发项目，你将是第一批具备 Java AI 应用实战开发能力的人。竞争力，嘎嘎滴！
+
+## 第1期，RAG 我们做了什么
+
+在 《DeepSeek RAG 增强知识库》第1阶段，基于 Spring AI 0.8.1 开发了一套可以上传文件和Git仓库进行解析、切割、存储，到使用向量库完成 AI 的知识库问答系统。并最终通过 Docker 部署上线。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-02.png" width="950px"/>
+</div>
+
+- 基于，RAG 这样的一套知识库，你可以完成文本和代码库的解析。以及自行扩展提供出 RAG 知识库的接口，对接到 OpenAI 代码自动评审（小傅哥社群的另外一个项目），增强代码评审效果。
+- 在这套项目中，可以学习到 Ollama DeepSeek 本地化&云服务部署，以及流式接口的开发、基于 AI 完成页面与知识库对话接口的处理，Linux、Docker 的部署等。小项目不大，但非常锻炼人！
+
+## 第2期，MCP 我们要做什么
+
+与第2期相比，第1期可以称之为小试牛刀，让小伙伴们以最快、最快的往事，积累，运用 Spring AI 框架，开发自己的 RAG 知识库。~~也是方便有些死鬼，早点写到简历上~~
+
+到了第2期，你就开始吃上细糠了，小傅哥会带着你升级 Spring AI 框架为 1.0.0-M6 最新版本，多模型配置和操作 PG 向量库，使用 GPU 搭建响应速度更好的 Ollama DeepSeek 大模型（秒级处理），以及对接官网 DeepSeek 的大模型和统一 one-api 对接方式。
+
+但这还只是开始，随着基础框架的升级完成，我们将进入 MCP 服务的开发实现。通过 AI 指令，完成 AI 工作流，调度各项 MCP 处理我们的任务作业。如图，举例操作；
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-03.png" width="950px"/>
+</div>
+
+- 基于 MCP 服务的开发和对接，通过 AI 工作流指令，完成数据的采集和存放动作。💡 聪明的小伙伴以及开始联想，基于这样的 AI 开发，可以替代很多的日常工作啦。**没想到吧，也把自己替代了** 但仍然，蠢蠢欲动（我不做，别人也做呀）！~~实现后，晋升又有的讲啦！简历也有东西写啦！~~
+- 有了 MCP 后，相当于把我们需要；在一个网页操作数据库查询数据、打开另外一个网页看天气预报，再手动的创建个文件把以上的信息获取后，复制粘贴到文件里。这一些列操作，都让 AI 通过 MCP 模型上下文协议进行处理。也就是 AI 可以调用后台接口啦！
+
+## 课程目录计划 💐
+
+此课程会扩展很多基于 Java 的 AI 开发能力学习，帮助大家积累相关的场景解决方案。在这个过程中你可以最快的掌握最新的技术，早早的提前别人一步。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-00-1.png" width="150px"/>
+</div>
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-04.png" width="550px"/>
+</div>
+
+- 全课程包括文档 + 小册，全程视频手把手带着做。
+- 课程地址：[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp) - 含全套项目代码和视频。
+
+### 第1期 RAG Spring AI 0.8.1 - 完结
+
+1. 【更】AI RAG 知识库，项目介绍&需求分析&环境说明
+2. 【更】初始化知识库工程&部署模型&提交代码
+3. 【更】Ollama DeepSeek 流式应答接口实现
+4. 【更】Ollama DeepSeek 流式应答页面对接
+5. 【更】Ollama RAG 知识库上传、解析和验证
+6. 【更】Ollama RAG 知识库接口服务实现
+7. 【更】基于AI工具，设计前端UI和接口对接
+8. 【更】Git仓库代码库解析到知识库并完善UI对接
+9. 【更】扩展OpenAI模型对接，以及完整AI对接
+10. 【更】云服务器部署知识库（Docker、Nginx）
+
+### 第2期 MCP Spring AI 1.0.0 - 开冲
+
+11. 【新】AI MCP 项目介绍
+12. 【新】吃上细糠，Spring AI 框架升级 + GPU 部署 AI
+13. 【新】吃上细糠，官网 DeepSeek + open-api 对接
+14. 【新】MCP 服务的应用类演示和使用
+15. 【新】MCP Spring  AI 客户端npx调用，以及资源讲解
+16. 【新】MCP Spring AI 服务端webflux实现
+17. 【新】MCP Spring AI 服务端 + 客户端对接使用
+18. 【新】服务接口实现，增强 RAG 知识库 + MCP 服务使用
+19. 【新】应用服务接口与前端页面对接
+20. ... 随课程开发提供，包括后续的云服务部署。
+
+课程包括；视频、小册、1 对 1 答疑解惑、专属VIP项目交流群，并且提供简历编写模板结构的一条龙🐲服务。让你学习后，直接拉开与还在玩具项目其他人的差距，面试脱颖而出提高竞争力！！！
+
+>课程已经开始，早早加入，早早学习。时间、时机，比任何东西都珍贵！晚点学，只能是工具人。但早点学，就是开发工具的人！加入小傅哥的社群，如图的全套实战项目，都可以学习；
\ No newline at end of file
diff --git "a/docs/md/project/ai-knowledge/\347\254\25411\350\212\202\357\274\232\345\220\203\344\270\212\347\273\206\347\263\240\357\274\214\345\215\207\347\272\247SpringAI\346\241\206\346\236\266.md" "b/docs/md/project/ai-knowledge/\347\254\25411\350\212\202\357\274\232\345\220\203\344\270\212\347\273\206\347\263\240\357\274\214\345\215\207\347\272\247SpringAI\346\241\206\346\236\266.md"
new file mode 100644
index 000000000..5413d1ed4
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/\347\254\25411\350\212\202\357\274\232\345\220\203\344\270\212\347\273\206\347\263\240\357\274\214\345\215\207\347\272\247SpringAI\346\241\206\346\236\266.md"
@@ -0,0 +1,39 @@
+---
+title: 【更】第11节：吃上细糠，升级SpringAI框架
+pay: https://t.zsxq.com/zT6bl
+---
+
+# 《DeepSeek RAG&MCP 增强检索知识库系统》第11节：吃上细糠，升级SpringAI框架
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/q5rnP](https://t.zsxq.com/q5rnP)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+升级 Spring AI 框架到 1.0.0-M6 版本，以适应于二阶段 MCP（Model Context Protocol  模型上下文协议）服务开发。
+
+## 二、本章诉求
+
+本节升级包括；
+- 提供，快速的 Ollama DeepSeek 部署，支持 1.5b、7b、30b 模型。服务器小时价格很低，速度非常快。
+- 提供，pgAdmin管理工具部署（Docker+本地软件），用于操作 PG 向量库。
+- 提供，向量库自主创建和多模型配置，满足不同模型的向量库使用。
+
+## 三、升级框架
+
+### 1. POM 配置
+
+```pom
+<dependency>
+    <groupId>org.springframework.ai</groupId>
+    <artifactId>spring-ai-bom</artifactId>
+    <version>1.0.0-M6</version>
+    <type>pom</type>
+    <scope>import</scope>
+</dependency>
+```
+
+- Spring AI 目前最新版为 1.0.0-M6，[https://spring.io/projects/spring-ai#learn](https://spring.io/projects/spring-ai#learn)
diff --git "a/docs/md/project/ai-knowledge/\347\254\25412\350\212\202\357\274\232\345\272\267\345\272\204\345\244\247\351\201\223\357\274\214\344\270\212\346\211\213 AI MCP \345\267\245\344\275\234\346\265\201.md" "b/docs/md/project/ai-knowledge/\347\254\25412\350\212\202\357\274\232\345\272\267\345\272\204\345\244\247\351\201\223\357\274\214\344\270\212\346\211\213 AI MCP \345\267\245\344\275\234\346\265\201.md"
new file mode 100644
index 000000000..df9afd82c
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/\347\254\25412\350\212\202\357\274\232\345\272\267\345\272\204\345\244\247\351\201\223\357\274\214\344\270\212\346\211\213 AI MCP \345\267\245\344\275\234\346\265\201.md"	
@@ -0,0 +1,23 @@
+---
+title: 【更】第12节：康庄大道，上手 AI MCP 工作流
+pay: https://t.zsxq.com/am5PO
+---
+
+# 《DeepSeek RAG&MCP 增强检索知识库系统》第12节：康庄大道，上手 AI MCP 工作流
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/GoWka](https://t.zsxq.com/GoWka)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+对接 Spring AI MCP，实现服务端 MCP 和 客户端 MCP，完成功能对接，体验 AI 工作流完成的指令动作。
+
+## 二、本节重点
+
+本节功能服务包括；
+1. 增加，Spring AI MCP 框架接入。
+2. 对接，Spring AI MCP 共用服务端，如；[https://smithery.ai/](https://smithery.ai/)、[https://glama.ai/mcp/servers](https://glama.ai/mcp/servers)
+3. 开发，Spring AI MCP 个人客户端，基于 Java 实现客户端。这块是一个独立的新工程组件。
diff --git "a/docs/md/project/ai-knowledge/\347\254\25413\350\212\202\357\274\214\351\201\223\345\261\261\345\255\246\346\265\267\357\274\214\345\256\236\347\216\260MCP\350\207\252\345\212\250\345\217\221\345\270\226\346\234\215\345\212\241.md" "b/docs/md/project/ai-knowledge/\347\254\25413\350\212\202\357\274\214\351\201\223\345\261\261\345\255\246\346\265\267\357\274\214\345\256\236\347\216\260MCP\350\207\252\345\212\250\345\217\221\345\270\226\346\234\215\345\212\241.md"
new file mode 100644
index 000000000..0971be32d
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/\347\254\25413\350\212\202\357\274\214\351\201\223\345\261\261\345\255\246\346\265\267\357\274\214\345\256\236\347\216\260MCP\350\207\252\345\212\250\345\217\221\345\270\226\346\234\215\345\212\241.md"
@@ -0,0 +1,30 @@
+---
+title: 【更】第13节，道山学海，实现MCP自动发帖服务
+pay: https://t.zsxq.com/WSM3k
+---
+
+# 《DeepSeek RAG&MCP 增强检索知识库系统》第13节，道山学海，实现MCP自动发帖服务
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/xTjYL](https://t.zsxq.com/xTjYL)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+分析 CSDN 文章发表接口，以 MCP 服务搭建的方式，实现一款 stdio 模式的 CSDN 发帖 MCP 服务。（后续开发 sse 模式）
+
+**注意**：不限于CSDN，你可以结合本节的学习，在任何一个平台使用它的接口，完成自动发帖服务。如，这里还有一个知识星球的发帖，也可以学习下之后对接实现一个 MCP 服务。地址：[https://bugstack.cn/md/road-map/http.html](https://bugstack.cn/md/road-map/http.html)
+
+## 二、功能流程
+
+如图，实现 CSDN 发帖 MCP 服务流程；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-13-01.png" width="850px">
+</div>
+
+- 首先，无论你是对接任何的平台，都是需要先获得他的接口服务。这种接口一种是平台提供了专门的对接接口，另外就是没有这样的接口，我们是通过浏览器访问网站，获得的接口。哪这些接口通过代码方式完成请求。
+- 之后，基于得到的接口，封装成可以调用的服务 service，这样 MCP 的入口工具，设定好入参信息，就可以调用底层的接口服务了。
+- 最后，当用户提问时，如果你实现了不止一个 CSDN 发帖的 MCP，也包括如星球发帖。那么你的 AI 工作流，是可以顺序的向这些平台自动发帖。
\ No newline at end of file
diff --git "a/docs/md/project/ai-knowledge/\347\254\25414\350\212\202\357\274\232\346\265\267\347\272\263\347\231\276\345\267\235\357\274\214\344\270\212\347\272\277MCP\350\207\252\345\212\250\345\217\221\345\270\226\346\234\215\345\212\241.md" "b/docs/md/project/ai-knowledge/\347\254\25414\350\212\202\357\274\232\346\265\267\347\272\263\347\231\276\345\267\235\357\274\214\344\270\212\347\272\277MCP\350\207\252\345\212\250\345\217\221\345\270\226\346\234\215\345\212\241.md"
new file mode 100644
index 000000000..89fa1fa42
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/\347\254\25414\350\212\202\357\274\232\346\265\267\347\272\263\347\231\276\345\267\235\357\274\214\344\270\212\347\272\277MCP\350\207\252\345\212\250\345\217\221\345\270\226\346\234\215\345\212\241.md"
@@ -0,0 +1,28 @@
+---
+title: 【更】第14节，海纳百川，上线MCP自动发帖服务
+pay: https://t.zsxq.com/G5mog
+---
+
+# 《DeepSeek RAG&MCP 增强检索知识库系统》第14节，海纳百川，上线MCP自动发帖服务
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/W0u4s](https://t.zsxq.com/W0u4s)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+以 Jar 包的形式，打包 MCP 自动发帖服务，并以 stdio 方式引入到项目工程。再通过定时任务触达定时自动发帖。
+
+## 二、功能流程
+
+如图，以 stdio 方式，构建服务打包上线；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-14-01.png" width="750px">
+</div>
+
+- 首先，将 mcp-server-csdn 以 maven 命令方式打一个 jar。IntelliJ IDEA 也可以直接通过界面操作打包 Jar（视频里会演示）
+- 之后，将 ai-mcp-knowledge 以 maven 命令方式打一个 jar，并执行 Dockerfile 构建出可部署的镜像。注意，这里额外增加一个阿里云 Docker 镜像仓库，为的是让他提供搭理，方便我们云服务器部署的时候，可以快速拉取下来镜像。此外，如果说你以云服务器当做本机一样使用，在云服务器配置好 maven、git、java jdk 17，那么就可以在云服务器直接构建镜像，也就不需要额外拉取了。（`这部分内容在课程入口-编程环境-云服务器操作中有讲解`）
+-  最后，通过 docker-compose 脚本配置上线部署。
diff --git "a/docs/md/project/ai-knowledge/\347\254\25415\350\212\202\357\274\232\345\267\235\346\265\201\344\270\215\346\201\257\357\274\214\345\256\236\347\216\260MCP\345\276\256\344\277\241\345\205\254\344\274\227\345\217\267\346\266\210\346\201\257\351\200\232\347\237\245\346\234\215\345\212\241.md" "b/docs/md/project/ai-knowledge/\347\254\25415\350\212\202\357\274\232\345\267\235\346\265\201\344\270\215\346\201\257\357\274\214\345\256\236\347\216\260MCP\345\276\256\344\277\241\345\205\254\344\274\227\345\217\267\346\266\210\346\201\257\351\200\232\347\237\245\346\234\215\345\212\241.md"
new file mode 100644
index 000000000..561d77da8
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/\347\254\25415\350\212\202\357\274\232\345\267\235\346\265\201\344\270\215\346\201\257\357\274\214\345\256\236\347\216\260MCP\345\276\256\344\277\241\345\205\254\344\274\227\345\217\267\346\266\210\346\201\257\351\200\232\347\237\245\346\234\215\345\212\241.md"
@@ -0,0 +1,31 @@
+---
+title: 【更】第15节，川流不息，实现MCP微信公众号消息通知服务
+pay: https://t.zsxq.com/84IV7
+---
+
+# 《DeepSeek RAG&MCP 增强检索知识库系统》第15节，川流不息，实现MCP微信公众号消息通知服务
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/Qlqkr](https://t.zsxq.com/Qlqkr)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+AI MCP 是可以让 AI 以工作流方式进行调用的，为了更好的体现这一点，同时也为了增强整体的自动发帖服务链路。本节我们实现一个微信公众号推送消息的 MCP 服务。
+
+这一节暂时会先以 stdio 方式开发，之后下一节部署的时候，会把 CSDN、WeiXin 两个 MCP 服务都以 SSE 方式进行部署。让大家学习到不同的开发方式和部署方式。
+
+## 二、功能流程
+
+如图，自动发帖后，进行微信公众号，消息推送；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-15-01.png" width="850px">
+</div>
+
+- 首先，CSDN 自动发帖是上一节实现的内容，本节要实现一个微信公众号推送模板消息的实现。
+- 之后，AI 调用两套 MCP，可以一次会话，也可以使用 ChatMemory 进行记忆完成2次对话处理 MCP 流程。
+- 最终，实现自动发帖后，完成消息通知给我们自己。点击通知信息可进入具体文章。
+
diff --git "a/docs/md/project/ai-knowledge/\347\254\25416\350\212\202\357\274\232\346\201\257\346\201\257\347\233\270\351\200\232\357\274\214MCP \346\234\215\345\212\241\351\203\250\347\275\262\344\270\212\347\272\277\357\274\210sse \346\250\241\345\274\217\357\274\211.md" "b/docs/md/project/ai-knowledge/\347\254\25416\350\212\202\357\274\232\346\201\257\346\201\257\347\233\270\351\200\232\357\274\214MCP \346\234\215\345\212\241\351\203\250\347\275\262\344\270\212\347\272\277\357\274\210sse \346\250\241\345\274\217\357\274\211.md"
new file mode 100644
index 000000000..7bd661a88
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/\347\254\25416\350\212\202\357\274\232\346\201\257\346\201\257\347\233\270\351\200\232\357\274\214MCP \346\234\215\345\212\241\351\203\250\347\275\262\344\270\212\347\272\277\357\274\210sse \346\250\241\345\274\217\357\274\211.md"	
@@ -0,0 +1,32 @@
+---
+title: 【更】第16节：息息相通，MCP 服务部署上线（sse 模式）
+pay: https://t.zsxq.com/Qexmh
+---
+
+# 《DeepSeek RAG&MCP 增强检索知识库系统》第16节：息息相通，MCP 服务部署上线（sse 模式）
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/J6kpc](https://t.zsxq.com/J6kpc)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+调整 mcp-server-csdn、mcp-server-weixin，两个 MCP 部署方式为 SSE 以及增加 Dockerfile 部署脚本。让服务支持以 sse 方式，被 ai-mcp-knowledge 调用。
+
+## 二、功能流程
+
+如图，以 sse 方式，构建服务打包上线；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-16-01.png" width="850px">
+</div>
+
+- `SSE` (Server-Sent Events) ，是一种基于 HTTP 的**服务器向客户端单向实时推送数据**的通信技术，常用于实现实时更新功能。
+- 在 Spring AI 框架中，SSE 的实现方式包括 spring-ai-starter-mcp-server-webmvc、spring-ai-starter-mcp-server-webflux 两种框架实现。课程以 webflux 进行使用。
+- SSE 的部署方式，要把每个 mcp 服务，通过 docker 进行部署，提供出可用的接口。之后 ai-mcp-knowledge 工程则配置 sse 方式进行使用。
+
+> 接下来我们介绍，如何配置 sse 方式进行对接。这部分主要是配置文件的变化，以及 1.0.0-M6 版本号关于 sse bug 的处理。
+
+
diff --git "a/docs/md/project/ai-knowledge/\347\254\2541\350\212\202\357\274\232AI RAG \347\237\245\350\257\206\345\272\223\357\274\214\351\241\271\347\233\256\344\273\213\347\273\215.md" "b/docs/md/project/ai-knowledge/\347\254\2541\350\212\202\357\274\232AI RAG \347\237\245\350\257\206\345\272\223\357\274\214\351\241\271\347\233\256\344\273\213\347\273\215.md"
new file mode 100644
index 000000000..4ecb2c07a
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/\347\254\2541\350\212\202\357\274\232AI RAG \347\237\245\350\257\206\345\272\223\357\274\214\351\241\271\347\233\256\344\273\213\347\273\215.md"	
@@ -0,0 +1,50 @@
+---
+title: 【更】第1节：AI RAG 知识库，项目介绍
+pay: https://t.zsxq.com/bV1QU
+---
+
+# 《DeepSeek RAG 知识库》第1节：AI RAG 知识库，项目介绍
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/ssFF0](https://t.zsxq.com/ssFF0)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+AI 开发能力，几乎已经是每个工程师必备的能力。在我们去看各个公司招聘要求时，经常会看到具备 AI、AIGC、RAG 能力优先。因为这些东西可以帮助企业提效，结合AI增强自身产品能力。所以，学习一下这样的东西是非常重要的！
+
+在 AI 的使用场景中，我们考虑过；代码评审、需求开发、智能客服、SQL编写、需求分析等。但这些东西的回答，会随着我们发给 AI 的内容来解答，但受到AI对话的上线文字数限制，不太可能把且有的所有资料都一次发给 AI 进行解答。所以这里引出了企业知识库构建的诉求。它就是 RAG！
+
+RAG（检索增强生成）技术正在重构互联网知识规则，RAG不仅仅是一个简单的知识存储工具，它是一种将检索与生成相结合的智能系统，能够从海量数据中快速提取相关信息，并结合上下文生成精准、连贯的答案。对于互联网公司而言，构建自己的RAG知识库，意味着能够为用户提供更加个性化、专业化的服务，同时也能够在激烈的市场竞争中，建立起独特的技术壁垒。
+
+虽然市面有一些开源的 RAG，但深入使用仍不能解决所有的场景问题，尤其是你想自定义业务诉求，解析更多场景，更复杂的知识库时候，它们就显得不合适了。**并且研发人员，自身应该具备 RAG 开发能力。**
+
+所以，我们来啦！构建一款属于自己的小型的 RAG 知识库，以此掌握 RAG 相关知识，扩宽自己的技术边界。
+
+> 此项目小巧轻量，扩展性好，可以快速学习完成，掌握 RAG 知识库搭建和使用。
+
+## 一、项目简述
+
+基于 Ollama 部署 DeepSeek 大模型，提供 API 接口。运用 Spring AI 框架承接接口实现 RAG 知识库能力。这款 RAG 知识库支持文本解析，以及 Git 代码库的解析。
+
+工程结构采取2层架构，轻量化设计，重点在于突出 RAG 功能实现。以此方式，帮助大家更好的理解，除了工程架构外的 RAG 知识库搭建。方便大家快速上手学习。
+
+## 二、什么是 RAG
+
+[RAG：检索增强生成](https://www.promptingguide.ai/zh/techniques/rag)
+
+它通用语言模型通过微调就可以完成几类常见任务，比如分析情绪和识别命名实体。这些任务不需要额外的背景知识就可以完成。
+
+要完成更复杂和知识密集型的任务，可以基于语言模型构建一个系统，访问外部知识源来做到。这样的实现与事实更加一性，生成的答案更可靠，还有助于缓解“幻觉”问题。
+
+Meta AI 的研究人员引入了一种叫做检索增强生成（Retrieval Augmented Generation，RAG）的方法来完成这类知识密集型的任务。RAG 把一个信息检索组件和文本生成模型结合在一起。RAG 可以微调，其内部知识的修改方式很高效，不需要对整个模型进行重新训练。
+
+RAG 会接受输入并检索出一组相关/支撑的文档，并给出文档的来源（例如维基百科）。这些文档作为上下文和输入的原始提示词组合，送给文本生成器得到最终的输出。这样 RAG 更加适应事实会随时间变化的情况。这非常有用，因为 LLM 的参数化知识是静态的。RAG 让语言模型不用重新训练就能够获取最新的信息，基于检索生成产生可靠的输出。
+
+Lewis 等人（2021）提出一个通用的 RAG 微调方法。这种方法使用预训练的 seq2seq 作为参数记忆，用维基百科的密集向量索引作为非参数记忆（使通过神经网络预训练的检索器访问）
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-01.png" width="850px"/>
+</div>
\ No newline at end of file
diff --git "a/docs/md/project/ai-knowledge/\347\254\2542\350\212\202\357\274\232\345\210\235\345\247\213\345\214\226\347\237\245\350\257\206\345\272\223\345\267\245\347\250\213&\346\217\220\344\272\244\344\273\243\347\240\201.md" "b/docs/md/project/ai-knowledge/\347\254\2542\350\212\202\357\274\232\345\210\235\345\247\213\345\214\226\347\237\245\350\257\206\345\272\223\345\267\245\347\250\213&\346\217\220\344\272\244\344\273\243\347\240\201.md"
new file mode 100644
index 000000000..3b7af907d
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/\347\254\2542\350\212\202\357\274\232\345\210\235\345\247\213\345\214\226\347\237\245\350\257\206\345\272\223\345\267\245\347\250\213&\346\217\220\344\272\244\344\273\243\347\240\201.md"
@@ -0,0 +1,39 @@
+---
+title: 【更】第2节：初始化知识库工程&提交代码
+pay: https://t.zsxq.com/VZSnk
+---
+
+# 《DeepSeek RAG 知识库》第2节：初始化知识库工程&提交代码
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/07kXb](https://t.zsxq.com/07kXb)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+教会小伙伴使用 IntelliJ IDEA 创建多模块工程，并介绍分层模块的用途。以及相关基础环境安装。
+
+课程会循序渐进的从0到1，逐步带着大家完成项目的开发。开局只有一把 IntelliJ IDEA，完成项目后你可以学习到；业务、架构、设计、方案、配置、部署（Linux、Docker）等各项知识。
+
+## 二、如何开始
+
+站在读者视角，该怎么学习呢？这里做个必要说明和前置的知识提供。
+
+### 1. 前置学习
+
+小伙伴在学习的时候，可以依照课程的方式进行创建项目、变更配置、启动测试。这里有一些前置学习，包括：Git、Maven、Docker，课程已经准备好了，可以刷下；
+
+- Git：[https://bugstack.cn/md/road-map/git.html](https://bugstack.cn/md/road-map/git.html)
+- Maven：[https://bugstack.cn/md/road-map/maven.html](https://bugstack.cn/md/road-map/maven.html)
+- Docker：[https://bugstack.cn/md/road-map/docker-what.html](https://bugstack.cn/md/road-map/docker-what.html) - `入门 Docker 必看`
+- Docker 镜像：[https://t.zsxq.com/2DGGY](https://t.zsxq.com/2DGGY)
+
+另外课程会使用 Java JDK 17、Maven 3.8.x，软件已经提供好，可以直接下载；[https://t.zsxq.com/19Rnk98M0](https://t.zsxq.com/19Rnk98M0) - `附件内含有配置好阿里云镜像的 Maven`
+
+### 2. 开始学习
+
+1. 你需要通过 `git clone https://xxx.git` 命令，或者 IntelliJ IDEA 自动的检出工程方式，把项目工程检出到本地。关于如何使用Git检出项目，在前置学习里提供了教程。
+2. 检出代码后，你可以通过 IntelliJ IDEA 打开项目，并按照每一节最开始说明的本节对应的代码分支，把工程代码切换到对应的这一节。
+3. 接下来你可以通过课程的视频和小册以及提供的代码进行学习，并跟随课程每节要完成的内容，一步步操作。过程中可以参考课程的代码进行学习。如果自己的代码运行出问题的时候，可以运行课程的代码验证是环境问题还是个人代码问题。**另外注意运行课程代码，要修改对应的环境为你的本地环境，postgresql、redis等**
\ No newline at end of file
diff --git "a/docs/md/project/ai-knowledge/\347\254\2543\346\216\245\357\274\232Ollama DeepSeek \346\265\201\345\274\217\345\272\224\347\255\224\346\216\245\345\217\243\345\256\236\347\216\260.md" "b/docs/md/project/ai-knowledge/\347\254\2543\346\216\245\357\274\232Ollama DeepSeek \346\265\201\345\274\217\345\272\224\347\255\224\346\216\245\345\217\243\345\256\236\347\216\260.md"
new file mode 100644
index 000000000..a0aff68f5
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/\347\254\2543\346\216\245\357\274\232Ollama DeepSeek \346\265\201\345\274\217\345\272\224\347\255\224\346\216\245\345\217\243\345\256\236\347\216\260.md"	
@@ -0,0 +1,30 @@
+---
+title: 【更】第3节：Ollama DeepSeek 流式应答接口实现
+pay: https://t.zsxq.com/h5VxZ
+---
+
+# 《DeepSeek RAG 知识库》第3节：Ollama DeepSeek 流式应答接口实现
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/4DbVB](https://t.zsxq.com/4DbVB)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+引入 Spring AI 框架组件，对接 Ollama DeepSeek 提供服务接口。包括；普通应答接口和流式接口。
+
+## 二、技术方案
+
+对接 AI 的方式有很多，比如；`AI 官网提供的 SDK`、`自研 SDK 组件`、`one-api 服务类统一包装接口`，其中自研类 SDK 已经在星球 openai 项目对接 chatglm、chatgpt 的时候进行设计，为了差异化学习到不同技术，本项目会采用 Spring AI 框架进行对接。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-3-01.png" width="750px">
+</div>
+
+官网：[https://spring.io/projects/spring-ai](https://spring.io/projects/spring-ai)
+
+Spring AI 支持；OpenAI，Microsoft，Amazon，Google和Ollama，大模型的对接。其他不属于这个范围的，可以通过 [one-api](https://github.com/songquanpeng/one-api) 配置，统一转换为 OpenAI 接口服务格式进行使用。
+
+
diff --git "a/docs/md/project/ai-knowledge/\347\254\2544\350\212\202\357\274\232Ollama DeepSeek \346\265\201\345\274\217\345\272\224\347\255\224\351\241\265\351\235\242\345\257\271\346\216\245.md" "b/docs/md/project/ai-knowledge/\347\254\2544\350\212\202\357\274\232Ollama DeepSeek \346\265\201\345\274\217\345\272\224\347\255\224\351\241\265\351\235\242\345\257\271\346\216\245.md"
new file mode 100644
index 000000000..8797a9c43
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/\347\254\2544\350\212\202\357\274\232Ollama DeepSeek \346\265\201\345\274\217\345\272\224\347\255\224\351\241\265\351\235\242\345\257\271\346\216\245.md"	
@@ -0,0 +1,31 @@
+---
+title: 【更】第4节：Ollama DeepSeek 流式应答页面对接
+pay: https://t.zsxq.com/PN4lw
+---
+
+# 《DeepSeek RAG 知识库》第3节：Ollama DeepSeek 流式应答接口实现
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/f82uj](https://t.zsxq.com/f82uj)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+实现一款简单的UI界面，与服务端 Ollama DeepSeek AI 进行对接。
+
+## 二、技术方案
+
+自从有了 AI 工具以后，所有以前头疼前端页面开发的后端程序员👨🏻‍💻，都漏出了友善😊微笑！
+
+主要我们可以清楚地表达编写页面诉求，AI 工具就可以非常准确且迅速的完成代码的实现。这里我们可以选择的 AI 有很多，包括；OpenAI、DeepSeek、智谱AI等等。
+
+- [https://www.deepseek.com/](https://www.deepseek.com/)
+- [https://v0.dev/](https://v0.dev/)
+- [https://chatglm.cn/](https://chatglm.cn/)
+- [https://openai.itedus.cn/](https://openai.itedus.cn/)
+
+>其他更多也可以网络检索下。总有一款你是可以使用的。
+
+
diff --git "a/docs/md/project/ai-knowledge/\347\254\2545\350\212\202\357\274\232Ollama RAG \347\237\245\350\257\206\345\272\223\344\270\212\344\274\240\343\200\201\350\247\243\346\236\220\345\222\214\351\252\214\350\257\201.md" "b/docs/md/project/ai-knowledge/\347\254\2545\350\212\202\357\274\232Ollama RAG \347\237\245\350\257\206\345\272\223\344\270\212\344\274\240\343\200\201\350\247\243\346\236\220\345\222\214\351\252\214\350\257\201.md"
new file mode 100644
index 000000000..a2521598b
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/\347\254\2545\350\212\202\357\274\232Ollama RAG \347\237\245\350\257\206\345\272\223\344\270\212\344\274\240\343\200\201\350\247\243\346\236\220\345\222\214\351\252\214\350\257\201.md"	
@@ -0,0 +1,36 @@
+---
+title: 【更】第5节：Ollama RAG 知识库上传、解析和验证
+pay: https://t.zsxq.com/fTK4R
+---
+
+# 《DeepSeek RAG 知识库》第5节：Ollama RAG 知识库上传、解析和验证
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/PM15B](https://t.zsxq.com/PM15B)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+以大模型向量存储的方式，提交本地文件到知识库。并在 AI 对话中增强检索知识库符合 AI 对话内容的资料，合并提交问题。
+
+## 二、技术方案
+
+以 Spring AI 提供的向量模型处理框架，将上传文件以 TikaDocumentReader 方式进行解析，再通过 TokenTextSplitter 拆分文件。完成这些操作后，在遍历文档添加标记。标记的作用是为了可以区分不同的知识库内容。完成这些动作后，把这些拆解并打标的文件存储到 postgresql 向量库中。
+
+本技术方案旨在利用 Spring AI 提供的向量模型处理框架，对上传的文件进行解析、拆分、标记，并将处理后的数据存储到 PostgreSQL 向量库中。通过这一流程，可以实现对文件内容的高效管理和检索，特别是在需要区分不同知识库内容的场景下。
+
+### 1. 技术组件
+
+- **Spring AI**: 提供向量模型处理框架，支持文件的解析、拆分和向量化操作。
+- **TikaDocumentReader**: 用于解析上传的文件，支持多种文件格式（如 MD、TXT、SQL 等）。
+- **TokenTextSplitter**: 用于将解析后的文本内容拆分为更小的片段，便于后续处理和存储。
+- **PostgreSQL 向量库**: 用于存储处理后的文本向量数据，支持高效的相似性搜索和检索。
+
+### 2. 方案流程
+
+#### 2.1 文件上传与解析
+
+1. **文件上传**: 用户通过前端界面或 API 上传文件，文件可以是多种格式（如 MD、TXT、SQL 等）。
+2. **文件解析**: 使用 `TikaDocumentReader` 对上传的文件进行解析，提取出文本内容。`TikaDocumentReader` 能够处理多种文件格式，并提取出结构化的文本数据。
\ No newline at end of file
diff --git "a/docs/md/project/ai-knowledge/\347\254\2546\350\212\202\357\274\232Ollama RAG \347\237\245\350\257\206\345\272\223\346\216\245\345\217\243\346\234\215\345\212\241\345\256\236\347\216\260.md" "b/docs/md/project/ai-knowledge/\347\254\2546\350\212\202\357\274\232Ollama RAG \347\237\245\350\257\206\345\272\223\346\216\245\345\217\243\346\234\215\345\212\241\345\256\236\347\216\260.md"
new file mode 100644
index 000000000..646517066
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/\347\254\2546\350\212\202\357\274\232Ollama RAG \347\237\245\350\257\206\345\272\223\346\216\245\345\217\243\346\234\215\345\212\241\345\256\236\347\216\260.md"	
@@ -0,0 +1,34 @@
+---
+title: 【更】第6节：Ollama RAG 知识库接口服务实现
+pay: https://t.zsxq.com/EvnBN
+---
+
+# 《DeepSeek RAG 知识库》第6节：Ollama RAG 知识库接口服务实现
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/yNiZl](https://t.zsxq.com/yNiZl)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+以上一节知识库的测试案例，将这部分功能以接口方式提供。包括；知识库的上传、选择和使用。
+
+## 二、技术方案
+
+知识库的上传和使用是明确的，但选择哪个知识库是需要把对应的知识库记录起来。这里我们选择 Redis 列表进行记录。如果是公司里大型的知识库，还需要使用 MySQL 数据库进行存储。
+
+## 三、功能实现
+
+### 1. 工程结构
+
+### 2. 引入组件
+
+```java
+<dependency>
+    <groupId>org.redisson</groupId>
+    <artifactId>redisson-spring-boot-starter</artifactId>
+    <version>3.44.0</version>
+</dependency>
+```
\ No newline at end of file
diff --git "a/docs/md/project/ai-knowledge/\347\254\2547\350\212\202\357\274\232\345\237\272\344\272\216AI\345\267\245\345\205\267\357\274\214\350\256\276\350\256\241\347\237\245\350\257\206\345\272\223UI\345\222\214\346\216\245\345\217\243\345\257\271\346\216\245.md" "b/docs/md/project/ai-knowledge/\347\254\2547\350\212\202\357\274\232\345\237\272\344\272\216AI\345\267\245\345\205\267\357\274\214\350\256\276\350\256\241\347\237\245\350\257\206\345\272\223UI\345\222\214\346\216\245\345\217\243\345\257\271\346\216\245.md"
new file mode 100644
index 000000000..974f043ea
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/\347\254\2547\350\212\202\357\274\232\345\237\272\344\272\216AI\345\267\245\345\205\267\357\274\214\350\256\276\350\256\241\347\237\245\350\257\206\345\272\223UI\345\222\214\346\216\245\345\217\243\345\257\271\346\216\245.md"
@@ -0,0 +1,35 @@
+---
+title: 【更】第7节：基于AI工具，设计知识库UI和接口对接
+pay: https://t.zsxq.com/Jc7fE
+---
+
+# 《DeepSeek RAG 知识库》第7节：基于AI工具，设计知识库UI和接口对接
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/BeT7k](https://t.zsxq.com/BeT7k)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+基于我们要实现对话和知识的上传使用，使用AI工具完成UI页面的实现。
+
+## 二、技术方案
+
+找一个合适的喜欢的AI对话页面，截取上传到 AI 工具，并告知基于这样的 UI 效果完成页面的实现。之后在告诉 AI 处理接口的对接。当然也可以把接口一起交给 AI 工具进行处理。
+
+- [https://www.deepseek.com/](https://www.deepseek.com/)
+- [https://v0.dev/](https://v0.dev/)
+- [https://chatglm.cn/](https://chatglm.cn/)
+- [https://openai.itedus.cn/](https://openai.itedus.cn/)
+
+>其他更多也可以网络检索下。总有一款你是可以使用的。
+
+## 三、功能实现
+
+### 1. 对话页面
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-6-01.png" width="950px">
+</div>
diff --git "a/docs/md/project/ai-knowledge/\347\254\2548\350\212\202\357\274\232Git\344\273\223\345\272\223\344\273\243\347\240\201\345\272\223\350\247\243\346\236\220\345\210\260\347\237\245\350\257\206\345\272\223.md" "b/docs/md/project/ai-knowledge/\347\254\2548\350\212\202\357\274\232Git\344\273\223\345\272\223\344\273\243\347\240\201\345\272\223\350\247\243\346\236\220\345\210\260\347\237\245\350\257\206\345\272\223.md"
new file mode 100644
index 000000000..ecf59d99a
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/\347\254\2548\350\212\202\357\274\232Git\344\273\223\345\272\223\344\273\243\347\240\201\345\272\223\350\247\243\346\236\220\345\210\260\347\237\245\350\257\206\345\272\223.md"
@@ -0,0 +1,34 @@
+---
+title: 【更】第8节：Git仓库代码库解析到知识库
+pay: https://t.zsxq.com/ByovV
+---
+
+# 《DeepSeek RAG 知识库》第8节：Git仓库代码库解析到知识库
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/EwqZH](https://t.zsxq.com/EwqZH)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+对知识库的解析进行扩展，增加Git仓库解析。用户填写Git仓库地址和账密，即可拉取代码并上传到知识库，之后就可以基于这套代码进行使用啦。
+
+## 二、技术方案
+
+引入 JGit 操作库到工程中，用于执行 Git 命令拉取代码仓库。之后对代码库文件进行遍历，依次解析分割上传到向量库中。
+
+## 三、功能实现
+
+### 1. 工程结构
+
+### 2. 引入组件
+
+```java
+<dependency>
+    <groupId>org.eclipse.jgit</groupId>
+    <artifactId>org.eclipse.jgit</artifactId>
+    <version>5.13.0.202109080827-r</version>
+</dependency>
+```
diff --git "a/docs/md/project/ai-knowledge/\347\254\2549\350\212\202\357\274\232\346\211\251\345\261\225OpenAI\346\250\241\345\236\213\345\257\271\346\216\245\357\274\214\344\273\245\345\217\212\345\256\214\346\225\264AI\345\257\271\346\216\245.md" "b/docs/md/project/ai-knowledge/\347\254\2549\350\212\202\357\274\232\346\211\251\345\261\225OpenAI\346\250\241\345\236\213\345\257\271\346\216\245\357\274\214\344\273\245\345\217\212\345\256\214\346\225\264AI\345\257\271\346\216\245.md"
new file mode 100644
index 000000000..841bf2c1d
--- /dev/null
+++ "b/docs/md/project/ai-knowledge/\347\254\2549\350\212\202\357\274\232\346\211\251\345\261\225OpenAI\346\250\241\345\236\213\345\257\271\346\216\245\357\274\214\344\273\245\345\217\212\345\256\214\346\225\264AI\345\257\271\346\216\245.md"
@@ -0,0 +1,33 @@
+---
+title: 【更】第9节：扩展OpenAI模型对接，以及完整AI对接
+pay: https://t.zsxq.com/YJxRy
+---
+
+# 《DeepSeek RAG 知识库》第9节：扩展OpenAI模型对接，以及完整AI对接
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>博客：[https://t.zsxq.com/1JLUq](https://t.zsxq.com/1JLUq)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+基于 Spring AI 扩展 OpenAI 模型对接，这样我们就可以使用一些代理的 ChatGPT 接口完成对话了。最终在完成全部接口与页面的对接。
+
+## 二、技术方案
+
+Spring AI 框架的好处，就是可以以统一的方式直接配置使用各类大模型。像是一些 Spring AI 没有直接对接的大模型，可以基于 one-api 配置转发，用统一 OpenAI 方式进行对接。
+
+## 三、功能实现
+
+### 1. 工程结构
+
+### 2. 引入组件
+
+```java
+<dependency>
+    <groupId>org.springframework.ai</groupId>
+    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
+</dependency>
+```
\ No newline at end of file
diff --git "a/docs/md/project/big-market/api/\347\254\25431\350\212\202\357\274\232\345\210\206\345\272\223\345\210\206\350\241\250\346\225\260\346\215\256\345\220\214\346\255\245ES.md" "b/docs/md/project/big-market/api/\347\254\25431\350\212\202\357\274\232\345\210\206\345\272\223\345\210\206\350\241\250\346\225\260\346\215\256\345\220\214\346\255\245ES.md"
new file mode 100644
index 000000000..392bca082
--- /dev/null
+++ "b/docs/md/project/big-market/api/\347\254\25431\350\212\202\357\274\232\345\210\206\345\272\223\345\210\206\350\241\250\346\225\260\346\215\256\345\220\214\346\255\245ES.md"
@@ -0,0 +1,35 @@
+---
+title: 第31节：分库分表数据同步ES
+pay: https://t.zsxq.com/wMTQn
+---
+
+# 《大营销平台系统设计实现》 - 营销服务 第31节：分库分表数据同步ES
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+- **本章难度**：★★★☆☆
+- **本章重点**：为分库分表搭建 canal 数据同步 ElasticSearch 文件操作。
+- **课程视频**：[https://t.zsxq.com/5O0SI](https://t.zsxq.com/5O0SI)
+
+**版权说明**：©本项目与星球签约合作，受[《中华人民共和国著作权法实施条例》](http://www.gov.cn/zhengce/2020-12/26/content_5573623.htm) 版权法保护，禁止任何理由和任何方式公开(public)源码、资料、视频等内容到Github、Gitee等，违反可追究进一步的法律行动。
+
+## 一、本章诉求
+
+对于C端的场景来说，我们经常会采用分库分表的方案承载数据流量的压力，以用户ID为切分键，让用户的行为数据分散到各个库表中。那么在C端除了给用户提供数据服务以外，还需要给运营提供数据，但分库分表后的数据都已经散列到各个库表了，对于聚合查询就变得复杂，所以我们还需要另外一套方案。就是把分散在各个数据库表的数据，通过使用 canal 组件，基于 binlog 日志，把数据同步到 ElasticSearch 文件服务中再提供使用。
+
+## 二、组件介绍
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-44-01.png" width="550px">
+</div>
+
+canal ，译为水道/管道/沟渠，主要用途是基于 MySQL 数据库增量日志解析，提供增量数据订阅和消费。
+
+早期阿里巴巴因为杭州和美国双机房部署，存在跨机房同步的业务需求，实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始，业务逐步尝试数据库日志解析获取增量变更进行同步，由此衍生出了大量的数据库增量订阅和消费业务。
+
+它的工作原理是，canal 模拟 MySQL slave 的交互协议，伪装自己为 MySQL slave ，向 MySQL master 发送dump 协议。在 MySQL master 收到 dump 请求，开始推送 binary log 给 slave (即 canal ) 这样 canal 再解析 binary log （binlog）进行配置分发，同步到 Elasticsearch 等系统中进行使用。
+
+那么有了 canal 就可以把分库分表的数据同步到 Elasticsearch，提供汇总查询和聚合操作，也就不需要把轮训每个分库分表数据了。
diff --git "a/docs/md/project/big-market/api/\347\254\25432\350\212\202\357\274\232ES-ORM\345\244\232\346\225\260\346\215\256\346\272\220\351\205\215\347\275\256\344\275\277\347\224\250.md" "b/docs/md/project/big-market/api/\347\254\25432\350\212\202\357\274\232ES-ORM\345\244\232\346\225\260\346\215\256\346\272\220\351\205\215\347\275\256\344\275\277\347\224\250.md"
new file mode 100644
index 000000000..e699a6219
--- /dev/null
+++ "b/docs/md/project/big-market/api/\347\254\25432\350\212\202\357\274\232ES-ORM\345\244\232\346\225\260\346\215\256\346\272\220\351\205\215\347\275\256\344\275\277\347\224\250.md"
@@ -0,0 +1,32 @@
+---
+title: 第32节：ES-ORM多数据源配置使用
+pay: https://t.zsxq.com/l032Y
+---
+
+# 《大营销平台系统设计实现》 - 营销服务 第32节：ES-ORM多数据源配置使用
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+- **本章难度**：★★★☆☆
+- **本章重点**：为工程提供多数据源配置，可以同时支持操作 MySQL 和 ElasticSearch
+- **课程视频**：[https://t.zsxq.com/q1RFi](https://t.zsxq.com/q1RFi)
+
+**版权说明**：©本项目与星球签约合作，受[《中华人民共和国著作权法实施条例》](http://www.gov.cn/zhengce/2020-12/26/content_5573623.htm) 版权法保护，禁止任何理由和任何方式公开(public)源码、资料、视频等内容到Github、Gitee等，违反可追究进一步的法律行动。
+
+## 一、本章诉求
+
+首先是目前已经在 MySQL 分库分表使用的基础上，加入了 canal 组件通过 binlog 日志把分库分表的数据同步 ElasticSearch 文件系统，那么接下来我们就需要让应用程序可以从 ElasticSearch 查询数据。也就是如何处理一个应用中多数据源的使用，同时要简化使用。另外因为工程的基础设施层越来越多内容了，我们要一点小的结构调整。
+
+## 二、业务流程
+
+让一套应用支持多套数据源使用；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-45-01.png" width="550px">
+</div>
+
+- 分库分表是对C端用户的，所有的C端行为一定是有用户ID的。
+- canal 同步 ElasticSearch 是为了给运营端做数据聚合查询的，一般这类的查询是不做核心业务的，因为同步是有时效性的。
diff --git "a/docs/md/project/big-market/api/\347\254\25433\350\212\202\357\274\232xxl-job\345\210\206\345\270\203\345\274\217\344\273\273\345\212\241\350\260\203\345\272\246.md" "b/docs/md/project/big-market/api/\347\254\25433\350\212\202\357\274\232xxl-job\345\210\206\345\270\203\345\274\217\344\273\273\345\212\241\350\260\203\345\272\246.md"
new file mode 100644
index 000000000..b04153e22
--- /dev/null
+++ "b/docs/md/project/big-market/api/\347\254\25433\350\212\202\357\274\232xxl-job\345\210\206\345\270\203\345\274\217\344\273\273\345\212\241\350\260\203\345\272\246.md"
@@ -0,0 +1,45 @@
+---
+title: 第33节：xxl-job分布式任务调度
+pay: https://t.zsxq.com/nOA6K
+---
+
+# 《大营销平台系统设计实现》 - 营销服务 第33节：xxl-job分布式任务调度
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+- **本章难度**：★★★☆☆
+- **本章重点**：为工程提供多数据源配置，可以同时支持操作 MySQL 和 ElasticSearch
+- **课程视频**：[https://t.zsxq.com/N2eo4](https://t.zsxq.com/N2eo4)
+
+**版权说明**：©本项目与星球签约合作，受[《中华人民共和国著作权法实施条例》](http://www.gov.cn/zhengce/2020-12/26/content_5573623.htm) 版权法保护，禁止任何理由和任何方式公开(public)源码、资料、视频等内容到Github、Gitee等，违反可追究进一步的法律行动。
+
+## 零、优化调整
+
+- fix-240807-xfg-clear-queue-by-sku 分支增加了指定sku的使用，而不是使用一个队列。
+- fix-240608-xfg-decr-zero 优化扣减中0的对比。
+- feat-240809-xfg-zookeeper-enable 增加可对 Zookeeper 关闭的处理，在 yml 中配置（zookeeper.sdk.config.enable）。便于大家在测试时快速启动。
+- dubbo yml 配置，修改为 N/A 屏蔽掉 nacos 注册，便于本地快速测试。
+
+## 一、本章诉求
+
+增加 xxl-job 分布式任务调度服务，处理大营销中；`发送MQ消息任务队列`、`更新活动sku库存任务`、`更新奖品库存任务`定时任务。同时因为整个大营销是分布式部署，一套 big-market 会被多个应用实例一起部署，那么就会有多个实例上相同的一个任务要执行，这个时候需要增加抢占式锁，避免造成重复执行。重复执行可能导致无效的扫库或者重复发送MQ消息。
+
+## 二、业务流程
+
+通过xxl-job管理分布式应用任务；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-46-01.png" width="650px">
+</div>
+
+XXL-JOB 是一个轻量级分布式任务调度平台，其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线，开箱即用。
+
+- big-market 01、big-market 02、big-market 03，举例分布式部署，也可以是更多的部署实例。
+- 每个应用实例都是相同的任务，这些任务增加了 redis 分布式锁抢占，避免所有任务都被同时执行。加了锁以后，同一时间只能一个实例上执行任务。
+- 但不能为了只有一个执行而部署一套，部署多套的用途是为了互备，如果一个挂了还有其他的任务可以执行。这个就是分布式架构高可用的设计思路。
+
+>**对 xxl-job 学习**：[https://bugstack.cn/md/road-map/quartz.html](https://bugstack.cn/md/road-map/quartz.html) - 小白伙伴可以看下这套内容补充学习任务调度，包括；环境安装、执行器管理、任务配置等。
+
diff --git a/docs/md/project/big-market/big-market.md b/docs/md/project/big-market/big-market.md
index c1acb795c..1426052cb 100644
--- a/docs/md/project/big-market/big-market.md
+++ b/docs/md/project/big-market/big-market.md
@@ -31,6 +31,8 @@ lock: no
     <img src="https://bugstack.cn/images/article/project/big-market/big-market-01-02.png" width="750px">
 </div>
 
+**体验地址**：[https://openai.gaga.plus/](https://openai.gaga.plus/) - 左侧Bar，抽奖进入
+
 这里抽奖模块通过RPC接口，对接到大营销平台。这里不只是抽奖，还要串联账户、奖品、返利等各项内容。接下来，小傅哥就着重介绍下这套信息项目的重点，让大家可以知道学习到哪些知识，掌握哪些技术。
 
 >文末有加入学习方式，还有优惠券可以使用。先到先得！
diff --git a/docs/md/project/big-market/dev-ops/openai_big_market.md b/docs/md/project/big-market/dev-ops/openai_big_market.md
new file mode 100644
index 000000000..24d9541ea
--- /dev/null
+++ b/docs/md/project/big-market/dev-ops/openai_big_market.md
@@ -0,0 +1,415 @@
+---
+title: 第4节：课程完结，上线部署教程
+lock: no
+---
+
+# 《大营销平台系统设计实现》 - 开发运维 第4节：课程完结，上线部署教程
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+不少小伙伴在面试中总会被提问，你的微服务是哪两套项目对接，你是分布式体现在哪。好像这么一问，平时做的项目既不是微服务，也不是分布式，都不知道怎么回答啦！咋办！？🤔
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-idea-00.png" width="200px">
+</div>
+
+**还是别做玩具项目了！**
+
+要说这种级别的东西，要不是在公司里真的实践过，要不是跟着小傅哥完完全全的做过。否则还真没有这类经验，很多市面的CRUD项目都是一个个孤岛单体，根本没有微服务对接，也谈不上分布式架构。所有的这类东西，都是真的在职场多年实践，才能一步步带着你学习掌握到！
+
+这次，我把两套项目完成了微服务对接，分布式架构部署。你可以完全全全的学习到这些东西到底是怎么玩的！
+
+>上车，这次项目做的很硬核！文末可以获取全部项目课程。
+
+## 1. 效果展示
+
+这是一次非常庞大的系统开发实践，学习这样一套东西，可以全面的提高个人综合技术实战能力。了解业务、懂得架构、提到思维、锻炼编码。一个个场景的解决方案，一个个设计模式的实践运用。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-dev-ops-5-06.png" width="600px">
+</div>
+
+- 地址：[https://openai.gaga.plus/](https://openai.gaga.plus/) - 侧边栏，点击兑换、购物、营销。
+- 说明：你可以体验 OpenAI 兑换、抽奖、兑换、签到等各个功能。这些也都各个互联网公司C端场景的产品设计。
+
+>接下来是一整套的项目的部署执行过程，公司中大家上线，对于中大型项目和需求，也会列出明确的上线执行步骤。
+
+## 2. 部署结构
+
+### 2.1 微服务&分布式
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-dev-ops-5-07.png" width="750px">
+</div>
+
+- 微服务：一套 OpenAi chatgpt-data 后端应用，一套 big-market 后端应用，两套微服务。
+- 分布式：Nginx 负载 http，大营销负载 rpc，支持多实例部署，mq 消息解耦流程、xxl-job 任务驱动、redis 缓存预热数据。分库分表、canal 完成数据的分离和聚合。
+
+### 2.2 分层部署关系
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-dev-ops-5-08.png" width="750px">
+</div>
+
+- 从底层往上，依次是[服务器（4c16g）](http://618.gaga.plus/)、部署环境、应用环境、上线配置、应用构建、参数配置，之后就是执行应用启动啦。
+- 接下来我们的部署，也会做这些操作。
+
+## 3. 环境诉求
+
+>为了方便大家完成项目的部署，这里采用了 Linux 服务器直接搭建构建环境的方式进行处理。在以下操作中你可以把 Linux 当做一台本地的电脑进行使用。只不过都是命令方式操作。
+
+本节需要在一台服务器上，部署分布式技术栈（nacos、mysql、redis、xxl-job、rabbitmq、Zookeeper等），2套 big-market 大营销后台（rpc 负载）、1套 chatgpt-data 后端、1套 chatgpt-web 前端。
+
+1. 推荐 `4c16g` 服务器 3个月：https://618.gaga.plus - `158元(续费同价)`，这个价格比较适合临时做测试验证。【占用在12g+】
+2. docker、portainer - `在 bugstack.cn 路书中有安装教程`
+3. jdk 1.8、maven 3.8.8、git，课程提供了安装部署视频
+4. Git使用教程：[https://bugstack.cn/md/road-map/git.html](https://bugstack.cn/md/road-map/git.html)
+5. 申请微信公众号测试平台：[https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index](https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index) - 需要申请。
+6. 智谱AI，申请Key：[https://bigmodel.cn/usercenter/apikeys](https://bigmodel.cn/usercenter/apikeys) - OpenAI 项目会使用到
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-dev-ops-5-01.png" width="600px">
+</div>
+
+- 脚本：[https://gitcode.net/KnowledgePlanet/big-market/big-market-dev-ops](https://gitcode.net/KnowledgePlanet/big-market/big-market-dev-ops)
+- 说明：这里小傅哥已经分各个阶段给大家提供好了部署脚本，你可以参照使用。在 mysql 包下，已经提供了本次项目部署所需的 sql 初始化文件。
+
+**docker 镜像推荐**
+
+```java
+# 清空 /etc/docker/daemon.json 文件，准备写入新内容
+echo >/etc/docker/daemon.json
+
+# 使用 cat 命令将以下内容写入 /etc/docker/daemon.json 文件
+# 配置 Docker 镜像加速器，使用多个镜像源来提高镜像下载速度
+cat >/etc/docker/daemon.json <<EOF
+{
+  "registry-mirrors": [
+    "https://dc.j8.work",
+    "https://proxy.1panel.live",
+    "https://dockerproxy.cn",
+    "https://hub1.nat.tf",
+    "https://dockerproxy.1panel.live",
+    "https://docker.awsl9527.cn",
+    "https://docker.vpszj.top"
+  ]
+}
+EOF
+
+# 重启 Docker 服务以使配置生效
+systemctl restart docker
+```
+
+- 地址：[https://status.1panel.top/status/docker](https://status.1panel.top/status/docker) - 这里由1panel提供了可用的镜像地址。
+- 说明：如果你希望从官网拉取镜像，那么可以做以上的镜像配置。
+
+## 4. 环境配置
+
+注意：执行脚本前，确保你已经完成了 linux 服务器的购买，docker、portainer 环境的安装。这样你才能执行 docker-compose-environment.yml 文件安装环境。
+
+### 1. 上传脚本
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-dev-ops-5-02.png" width="600px">
+</div>
+
+- 推荐使用 [termius](https://termius.com/) 连接云服务器，在根目录创建 `/dev-ops` 文件夹。再通过 SFTP 工具，把本地的部署脚本上传到文件夹中。
+
+### 2. 执行脚本
+
+```shell
+cd /dev-ops
+# 方式1
+docker-compose -f docker-compose-environment.yml up -d
+
+# 方式2        
+docker-compose -f docker-compose-environment-xfg-studio.yml up -d
+```
+
+- 方式1；需要配置可用的 docker 镜像，才能拉取。
+- 方式2；是小傅哥准备好的镜像地址，速度更快一些。如果方式2不可用了，可以继续用方式1
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-dev-ops-5-03.png" width="950px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-dev-ops-5-05.png" width="750px">
+</div>
+
+```java
+- nacos：http://117.72.90.238:8848/nacos - 「账密：nacos/nacos」
+- rabbitmq：http://117.72.90.238:15672/ - 「账密：admin/12qw!@QW」
+- redis-admin：http://117.72.90.238:8081/ - 「账密：admin/12qw!@QW」
+- xxl-job-admin：http://117.72.90.238:9090/xxl-job-admin - 「账密：root/12qw!@QW」
+- phpmyadmin：http://117.72.90.238:8899/ - 「账密：root/12qw!@QW」
+```
+
+- 部署完成后，可以依次访问 phpmyadmin、rabbitmq、redis-admin、xxl-job-admin、nacos 这些管理后台。检查数据库表是否已经全部初始化完成。
+- 账号、密码、IP，你可以按照自己的进行修改，密码是配置在 docker-compose-environment/environment-xfg-studio 脚本中。
+
+## 5. 应用构建
+
+在 /dev-ops/ 目录下创建创建 gitcode 文件夹，里面分别拉取代码；
+
+### 1. big-market 大营销后端
+
+#### 1.1 参数配置
+
+1. application.yml 修改 `active: prod` 为上线参数
+2. application-prod.yml 为上线部署配置，其中一些IP的地方被名称替代，如 mysql、zookeeper等，是因为这些IP可以在 docker-compose 部署中，在一个文件夹下，走同一个网络，进行内网通信。
+3. docker-compose-app.yml big-market 注意配置 rabbitmq 地址为你的服务器公网ip地址，并开放端口 5672
+4. docker-compose-app.yml 配置了2套 big-market 应用实例（不同端口）进行负载。
+5. gitcode 检出代码，可参考文章开头提到的 Git 使用教程。
+
+#### 1.2 构建脚本
+
+```shell
+cd /dev-ops/gitcode/
+git clone -b docker-images-v5.0 https://gitcode.net/KnowledgePlanet/big-market/big-market.git
+
+cd big-market/
+mvn clean install
+
+cd big-market-app
+chmod +x build.sh
+./build.sh
+```
+
+### 2. chatgpt-data OpenAI 后端
+
+#### 2.1 参数配置
+
+1. application.yml 修改 `active: prod` 为上线参数
+2. application-prod.yml 为上线部署配置，其中一些IP的地方被名称替代，如 mysql、nacos，是因为这些IP可以在 docker-compose 部署中，在一个文件夹下，走同一个网络，进行内网通信。
+3. chatgpt.sdk.config.enabled、wxpay.config.enabled，可以都配置false，如果你有 chatgpt 和 微信支付那么可以配置。星球中还有关于支付宝沙箱、蓝兔支付，也可以更换对接。
+
+#### 2.2 构建脚本
+
+```shell
+cd /dev-ops/gitcode/
+git clone -b docker-images-v5.0 https://gitcode.net/KnowledgePlanet/chatgpt/chatgpt-data.git
+
+cd chatgpt-data/
+mvn clean install
+
+cd chatgpt-data-app
+chmod +x build.sh
+./build.sh
+```
+
+### 3. chatgpt-web OpenAI 前端
+
+#### 3.1 配置
+
+**index.tsx**
+
+```java
+const openAIApiHostUrl = "http://117.72.90.238:8091";
+const bigMarketApiHostUrl = "http://117.72.90.238:8092";
+```
+
+- 修改为你的IP:PORT地址，如果你有域名也可以统一配置 https 的域名地址，但要全部都是统一的。避免跨域问题。
+
+#### 3.2 脚本
+
+```shell
+cd /dev-ops/gitcode/
+git clone -b docker-images-v5.0 https://gitcode.net/KnowledgePlanet/chatgpt/chatgpt-web.git
+
+chmod +x build.sh
+./build.sh
+```
+
+## 6. 应用部署
+
+### 1. 脚本启动
+
+以下为应用部署 docker compose 脚本，部署的时候进入linux此脚本所在文件夹，执行 `docker-compose -f docker-compose-app.yml up -d` 即可。
+
+```java
+version: '3.8'
+# 命令执行 docker-compose -f docker-compose-app.yml up -d
+services:
+  # 大营销后端
+  big-market-app-01:
+    image: fuzhengwei/big-market-app:5.1
+    container_name: big-market-app-01
+    restart: always
+    ports:
+      - "8092:8092"
+    environment:
+      - TZ=PRC
+      - SERVER_PORT=8092
+      - APP_CONFIG_API_VERSION=v1
+      - APP_CONFIG_CROSS_ORIGIN=*
+      - ZOOKEEPER_SDK_CONFIG_ENABLE=false
+      - SPRING_RABBITMQ_ADDRESSES=117.72.90.238
+    volumes:
+      - ./log:/data/log
+    networks:
+      - my-network
+    logging:
+      driver: "json-file"
+      options:
+        max-size: "10m"
+        max-file: "3"
+
+  # 大营销后端
+  big-market-app-02:
+    image: fuzhengwei/big-market-app:5.1
+    container_name: big-market-app-02
+    restart: always
+    ports:
+      - "8093:8093"
+    environment:
+      - TZ=PRC
+      - SERVER_PORT=8093
+      - APP_CONFIG_API_VERSION=v1
+      - APP_CONFIG_CROSS_ORIGIN=*
+      - ZOOKEEPER_SDK_CONFIG_ENABLE=false
+      - SPRING_RABBITMQ_ADDRESSES=117.72.90.238
+    volumes:
+      - ./log:/data/log
+    networks:
+      - my-network
+    logging:
+      driver: "json-file"
+      options:
+        max-size: "10m"
+        max-file: "3"
+
+  # OpenAI 应用后端
+  chatgpt-data-app:
+    image: fuzhengwei/chatgpt-data-app:5.1
+    container_name: chatgpt-data-app
+    ports:
+      - "8091:8091"
+    environment:
+      - TZ=PRC
+      - SERVER_PORT=8091
+      - APP_CONFIG_API_VERSION=v1
+      - APP_CONFIG_CROSS_ORIGIN=*
+      - APP_CONFIG_LIMIT_COUNT=3
+      - APP_CONFIG_WHITE_LIST=ojbZUv18lbmriaTjcCWBYkOrSbHA
+      - SPRING_DATASOURCE_USERNAME=root
+      - SPRING_DATASOURCE_PASSWORD=12qw!@QW
+      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/openai?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC&useSSL=true
+      - WX_CONFIG_ORIGINALID=gh_e067c267e056
+      - WX_CONFIG_APPID=wx5a228ff69e28a91f
+      - WX_CONFIG_TOKEN=b8b6
+      - CHATGPT_SDK_CONFIG_ENABLED=false
+      - CHATGPT_SDK_CONFIG_API_HOST=https://service-d6wuqy4n-1320869466.cd.apigw.tencentcs.com/
+      - CHATGPT_SDK_CONFIG_API_KEY=sk-cVvbudeJq3yQUvcyCeBeB97253C146BaAaC94d70D2890b8e
+      - CHATGLM_SDK_CONFIG_ENABLED=true
+      - CHATGLM_SDK_CONFIG_API_HOST=https://open.bigmodel.cn/
+      - CHATGLM_SDK_CONFIG_API_KEY=96b1fb042a0b51f334ecfdb28ef95837.6pgWXziv5CdbJdGP
+    volumes:
+      - ./log:/data/log
+    networks:
+      - my-network
+    logging:
+      driver: "json-file"
+      options:
+        max-size: "10m"
+        max-file: "3"
+    restart: always
+
+  # OpenAI 应用前端
+  chatgpt-web-app:
+    container_name: chatgpt-web-app
+    image: fuzhengwei/chatgpt-web-app:5.1
+    ports:
+      - "3002:3002"
+    networks:
+      - my-network
+    restart: always
+
+networks:
+  my-network:
+    driver: bridge
+```
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-dev-ops-5-04.png" width="950px">
+</div>
+
+- 注意：`SPRING_RABBITMQ_ADDRESSES=117.72.90.238`，需要配置云服务器IP地址，并开放 RabbitMQ 端口。
+- 执行预热活动：`http://117.72.90.238:8092/api/v1/raffle/activity/armory?activityId=100401`
+- 本身大营销还有一个后台，但服务器可能不够，如果不部署后台，不做活动上架，那么可以通过执行预热活动接口完成活动预热。
+- 注意微信配置
+
+```java
+- WX_CONFIG_ORIGINALID=gh_e067c267e056
+- WX_CONFIG_APPID=wx5a228ff69e28a91f
+- WX_CONFIG_TOKEN=b8b6
+```
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-dev-ops-5-11.png" width="950px">
+</div>
+- 全部更换为你的配置信息。注意，接口配置信息，需要在服务启动后配置。
+
+
+### 2. natapp 启动 - 无自己域名
+
+#### 2.1 购买隧道
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-dev-ops-5-09.png" width="950px">
+</div>
+
+```java
+[default]
+authtoken=bcffa08ea0a7dde4      #对应一条隧道的authtoken，你需要更换为你的。否则不能正常启动。
+clienttoken=                    #对应客户端的clienttoken,将会忽略authtoken,若无请留空,
+log=none                        #log 日志文件,可指定本地文件, none=不做记录,stdout=直接屏幕输出 ,默认为none
+loglevel=ERROR                  #日志等级 DEBUG, INFO, WARNING, ERROR 默认为 DEBUG
+http_proxy=                     #代理设置 如 http://10.123.10.10:3128 非代理上网用户请务必留空
+```
+
+- 打开 natapp/config.ini 文件，复制 authtoken 替换为你的。
+
+#### 2.2 执行启动
+
+```java
+[root@lavm-snw6pd3z62 chatgpt-web]# cd /dev-ops/
+[root@lavm-snw6pd3z62 dev-ops]# ls
+canal          docker-compose-app.yml                     gitcode  kibana    maven   nginx       redis
+canal-adapter  docker-compose-environment-xfg-studio.yml  grafana  log       mysql   prometheus
+curl           docker-compose-environment.yml             java     logstash  natapp  rabbitmq
+[root@lavm-snw6pd3z62 dev-ops]# cd natapp/
+[root@lavm-snw6pd3z62 natapp]# ./natapp 
+```
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-dev-ops-5-10.png" width="550px">
+</div>
+
+- 启动 Natapp 穿透程序，主要是因为微信公众号配置，需要域名。如果你没有域名就按照这个方式，如果有域名，可以走自己的域名。
+- 在微信公众平台配置 URL 验签地址：[https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index](https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index) 配置地址：`http://xfg-studio.natapp1.cc/api/v1/wx/portal/wxad979c0307864a66` - 更换为你的 natapp 内网穿透地址。
+
+### 3. Nginx 配置 - 有自己域名
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-dev-ops-5-12.png" width="550px">
+</div>
+
+- 域名：需要购买，各个云服务器厂商，都可以购买域名。
+- ssl：在 bugstack.cn 路书中有讲解如何配置免费 ssl。
+- 在微信公众平台配置 URL 验签地址：[https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index](https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index) 配置地址：`http://api-test.gaga.plus/api/v1/wx/portal/wxad979c0307864a66` - 更换为你的域名地址。
+
+## 7. 应用访问
+
+地址：[http://117.72.90.238:3002/](http://117.72.90.238:3002/) - `更换为你的IP地址`
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-dev-ops-5-13.png" width="550px">
+</div>
+
+> 登录之后，你就可以愉快的玩耍啦！
diff --git "a/docs/md/project/big-market/dev-ops/\347\254\2543\350\212\202\357\274\232\345\274\225\345\205\245Nacos+Dubbo\346\241\206\346\236\266.md" "b/docs/md/project/big-market/dev-ops/\347\254\2543\350\212\202\357\274\232\345\274\225\345\205\245Nacos+Dubbo\346\241\206\346\236\266.md"
index b760063f8..34b4ad63f 100644
--- "a/docs/md/project/big-market/dev-ops/\347\254\2543\350\212\202\357\274\232\345\274\225\345\205\245Nacos+Dubbo\346\241\206\346\236\266.md"
+++ "b/docs/md/project/big-market/dev-ops/\347\254\2543\350\212\202\357\274\232\345\274\225\345\205\245Nacos+Dubbo\346\241\206\346\236\266.md"
@@ -1,6 +1,6 @@
 ---
 title: 第3节：引入Nacos+Dubbo框架
-pay: https://t.zsxq.com/17HkS0CI0
+pay: https://t.zsxq.com/rl0FE
 ---
 
 # 《大营销平台系统设计实现》 - 开发运维 第3节：引入Nacos+Dubbo框架
@@ -33,5 +33,4 @@ pay: https://t.zsxq.com/17HkS0CI0
 </div>
 
 - 首先，Dubbo 这样的 RPC 框架，是比 HTTP 在微服务间的通信效率更高的，所以各个中等规模以上的互联网公司也是更喜欢引入 RPC 框架来解决微服务间通信问题。
-- 不过像 Dubbo、SpringCloud，都只是个框架而已，一个系统的核心实现不受框架影响，你可以按照实际诉求，更换或者支持多种通信协议。
-
+- 不过像 Dubbo、SpringCloud，都只是个框架而已，一个系统的核心实现不受框架影响，你可以按照实际诉求，更换或者支持多种通信协议。
\ No newline at end of file
diff --git "a/docs/md/project/big-market/distributed/\347\254\2541\350\212\202\357\274\232\345\257\271\346\216\245OpenAI\351\241\271\347\233\256\351\242\235\345\272\246\345\245\226\345\223\201\346\216\245\345\217\243.md" "b/docs/md/project/big-market/distributed/\347\254\2541\350\212\202\357\274\232\345\257\271\346\216\245OpenAI\351\241\271\347\233\256\351\242\235\345\272\246\345\245\226\345\223\201\346\216\245\345\217\243.md"
new file mode 100644
index 000000000..4b8aa7097
--- /dev/null
+++ "b/docs/md/project/big-market/distributed/\347\254\2541\350\212\202\357\274\232\345\257\271\346\216\245OpenAI\351\241\271\347\233\256\351\242\235\345\272\246\345\245\226\345\223\201\346\216\245\345\217\243.md"
@@ -0,0 +1,36 @@
+---
+title: 第1节：对接OpenAI项目额度奖品接口
+pay: https://t.zsxq.com/ByrMx
+---
+
+# 《大营销平台系统设计实现》 - 外部对接 第1节：对接OpenAI项目额度奖品接口
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+- **本章难度**：★★★☆☆
+- **本章重点**：新增 OpenAI 账户额度调整接口，增加大营销 openai_use_count 奖品发放实现类，完成发奖对接。
+- **课程视频**：[https://t.zsxq.com/w3Ebn](https://t.zsxq.com/w3Ebn)
+
+**版权说明**：©本项目与星球签约合作，受[《中华人民共和国著作权法实施条例》](http://www.gov.cn/zhengce/2020-12/26/content_5573623.htm) 版权法保护，禁止任何理由和任何方式公开(public)源码、资料、视频等内容到Github、Gitee等，违反可追究进一步的法律行动。
+
+## 一、本章诉求
+
+**前置说明**：在学习本章节前，需要对星球内的 [《OpenAI 应用项目》](https://t.zsxq.com/19aSkDvYB) 有所了解。
+
+星球的 OpenAI 业务项目是一个以售卖额度提供 ChatGLM、ChatGPT 各类服务为载体的 OpenAI 业务应用。那么大营销项目就可以结合到 OpenAI 应用项目中提供积分、兑换、返利、抽奖这样的服务模块，增强 OpenAI 业务项目的拉新、促活、留存用户的能力。
+
+整个对接过程分为2个阶段，一个是 OpenAI 项目提供账户调额能力作为奖品接口给大营销使用，另外一个是 OpenAI 项目，对接大营销的 RPC/HTTP 接口，搭建营销活动页。
+
+## 二、对接流程
+
+整个对接过程示意；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-50-01.png" width="850px">
+</div>
+
+- 如图，为用户使用 OpenAI 应用项目时候，一个前端，两个后端服务的对接过程。这里你就可以把大营销看做为一个微服务了。
+- 在这一节，我们先来完成，通过http接口，发放额度奖品的操作。
diff --git "a/docs/md/project/big-market/distributed/\347\254\2542\350\212\202\357\274\232\350\220\245\351\224\200\351\241\265\351\235\242\346\216\245\345\217\243\345\260\201\350\243\205.md" "b/docs/md/project/big-market/distributed/\347\254\2542\350\212\202\357\274\232\350\220\245\351\224\200\351\241\265\351\235\242\346\216\245\345\217\243\345\260\201\350\243\205.md"
new file mode 100644
index 000000000..788b35f47
--- /dev/null
+++ "b/docs/md/project/big-market/distributed/\347\254\2542\350\212\202\357\274\232\350\220\245\351\224\200\351\241\265\351\235\242\346\216\245\345\217\243\345\260\201\350\243\205.md"
@@ -0,0 +1,34 @@
+---
+title: 第2节：营销页面接口封装
+pay: https://t.zsxq.com/L2ZdQ
+---
+
+# 《大营销平台系统设计实现》 - 外部对接 第2节：营销页面接口封装
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+- **本章难度**：★★★☆☆
+- **本章重点**：在 big-market 工程，开发适配 openai 项目，前端工程 chatgpt-web 所需的 http 接口。进行页面的开发和接口对接。
+- **课程视频**：[https://t.zsxq.com/A7eoq](https://t.zsxq.com/A7eoq)
+
+**版权说明**：©本项目与星球签约合作，受[《中华人民共和国著作权法实施条例》](http://www.gov.cn/zhengce/2020-12/26/content_5573623.htm) 版权法保护，禁止任何理由和任何方式公开(public)源码、资料、视频等内容到Github、Gitee等，违反可追究进一步的法律行动。
+
+## 一、本章诉求
+
+在 big-market 工程，开发适配 openai 项目，前端工程 chatgpt-web 所需的 http 接口。进行页面的开发和接口对接。
+
+因为 openai 项目，前端工程 chatgpt-web 调用的接口都会在头信息中传递 token，所以我们也需要在 big-market 的接口中，新增加一份带有 token 的接口，对接解析和使用。
+
+## 二、对接设计
+
+在前端工程 chatgpt-web 中添加营销UI和接口对接。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-51-01.png" width="650px">
+</div>
+
+- openai 项目后端服务，提供账户额度接口。
+- big-market 大营销服务，提供积分、抽奖、签到、兑换，过程中的查询和使用接口。
diff --git "a/docs/md/project/big-market/distributed/\347\254\2543\350\212\202\357\274\232RPC\346\216\245\345\217\243\345\257\271\346\216\245\346\224\257\344\273\230\350\277\224\345\210\251.md" "b/docs/md/project/big-market/distributed/\347\254\2543\350\212\202\357\274\232RPC\346\216\245\345\217\243\345\257\271\346\216\245\346\224\257\344\273\230\350\277\224\345\210\251.md"
new file mode 100644
index 000000000..ebdba028f
--- /dev/null
+++ "b/docs/md/project/big-market/distributed/\347\254\2543\350\212\202\357\274\232RPC\346\216\245\345\217\243\345\257\271\346\216\245\346\224\257\344\273\230\350\277\224\345\210\251.md"
@@ -0,0 +1,35 @@
+---
+title: 第3节：RPC接口对接支付返利
+pay: https://t.zsxq.com/fFntX
+---
+
+# 《大营销平台系统设计实现》 - 外部对接 第3节：RPC接口对接支付返利
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+- **本章难度**：★★★☆☆
+- **本章重点**：通过在大营销 big-market 新增提供的通用返利 RPC 接口，由 OpenAI 服务 chatgpt-data 系统在支付完成接收到回调消息后进行对接完成返利动作。
+- **课程视频**：[https://t.zsxq.com/15gLHtPaU](https://t.zsxq.com/15gLHtPaU)
+
+**版权说明**：©本项目与星球签约合作，受[《中华人民共和国著作权法实施条例》](http://www.gov.cn/zhengce/2020-12/26/content_5573623.htm) 版权法保护，禁止任何理由和任何方式公开(public)源码、资料、视频等内容到Github、Gitee等，违反可追究进一步的法律行动。
+
+## 一、本章诉求
+
+通过在大营销 big-market 新增提供的通用返利 RPC 接口，由 OpenAI 服务 chatgpt-data 系统在支付完成接收到回调消息后进行对接完成返利动作。
+
+本节会使用到注册到 Nacos 的 Dubbo 服务，完成内部微服务的对接。Dubbo 的优势在于底层的通信协议比 HTTP 更加迅速，适合微服务间通信使用。不过这样的对接方式会强依赖另外一方系统的存在，否则启动会失败。所以后续我们部署的时候，也会把 chatgpt-data 依赖于 big-market 一起部署。
+
+前置资料：关于dubbo配置使用的基础教程：[https://bugstack.cn/md/road-map/dubbo.html](https://bugstack.cn/md/road-map/dubbo.html)
+
+## 二、对接流程
+
+通过 RPC 完成微服务的对接；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-52-01.png" width="650px">
+</div>
+
+- 用户下单完成支付后，会接收到支付消息，之后调用大营销提供的返利接口进行返利。返利为；积分和抽奖次数。
\ No newline at end of file
diff --git "a/docs/md/project/big-market/distributed/\347\254\2544\350\212\202\357\274\232\346\264\273\345\212\250\344\270\212\346\236\266\345\217\221\345\270\203\351\242\204\347\203\255\345\257\271\346\216\245.md" "b/docs/md/project/big-market/distributed/\347\254\2544\350\212\202\357\274\232\346\264\273\345\212\250\344\270\212\346\236\266\345\217\221\345\270\203\351\242\204\347\203\255\345\257\271\346\216\245.md"
new file mode 100644
index 000000000..ac229a9db
--- /dev/null
+++ "b/docs/md/project/big-market/distributed/\347\254\2544\350\212\202\357\274\232\346\264\273\345\212\250\344\270\212\346\236\266\345\217\221\345\270\203\351\242\204\347\203\255\345\257\271\346\216\245.md"
@@ -0,0 +1,35 @@
+---
+title: 第4节：活动上架发布预热对接
+pay: https://t.zsxq.com/Gh1Py
+---
+
+# 《大营销平台系统设计实现》 - 外部对接 第4节：活动上架发布预热对接
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+- **本章难度**：★★★☆☆
+- **本章重点**：增加活动上架服务，通过运营后台管理上架，前端工程根据渠道sc值查询上架活动。
+- **课程视频**：[https://t.zsxq.com/15gLHtPaU](https://t.zsxq.com/15gLHtPaU)
+
+**版权说明**：©本项目与星球签约合作，受[《中华人民共和国著作权法实施条例》](http://www.gov.cn/zhengce/2020-12/26/content_5573623.htm) 版权法保护，禁止任何理由和任何方式公开(public)源码、资料、视频等内容到Github、Gitee等，违反可追究进一步的法律行动。
+
+## 一、本章诉求
+
+本节的内容是一个互联网中对外发布抽奖、发券、拉新等行为活动设计的通用方案。在实际运营作业中，会创建出很多的活动，这些活动会被分配到不同渠道给不同来源进行使用。那么这里就要有一个活动上架平台，让外部调用方根据传入的SC值，也就是渠道和来源调用到这一方可以使用的当前的活动ID。
+
+这就有点像你去一个大超市看到的，每个货架上摆放着各类的的商品，这些商品其实是有它的仓库的，但当前你所看到的买到的，都是货架上摆放的。所以为了让用户参与到我们的活动，我们也需要把活动进行上架。
+
+## 二、业务流程
+
+活动上架流程，涉及到三块，如图；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-53-01.png" width="550px">
+</div>
+
+- 首先，运营负责把活动上架，点击审核为`有效`。有效后，也就是在这个时间点把活动预热到 Redis，在咱们大营销中的预热操作是装配的接口，会在这个过程中调用。
+- 之后，用户从前端页面进入后，程序会查询到当前上架的活动，这样就明确了具体参与到哪个活动上了。
+
diff --git "a/docs/md/project/big-market/erp/\347\254\2541\350\212\202\357\274\232\345\210\235\345\247\213\345\220\216\345\217\260\350\277\220\350\220\245\351\241\265\351\235\242.md" "b/docs/md/project/big-market/erp/\347\254\2541\350\212\202\357\274\232\345\210\235\345\247\213\345\220\216\345\217\260\350\277\220\350\220\245\351\241\265\351\235\242.md"
new file mode 100644
index 000000000..5a8a1f8d0
--- /dev/null
+++ "b/docs/md/project/big-market/erp/\347\254\2541\350\212\202\357\274\232\345\210\235\345\247\213\345\220\216\345\217\260\350\277\220\350\220\245\351\241\265\351\235\242.md"
@@ -0,0 +1,47 @@
+---
+title: 第1节：初始后台运营页面
+pay: https://t.zsxq.com/im8ZV
+---
+
+# 《大营销平台系统设计实现》 - 运营后台 第1节：初始后台运营页面
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+- **本章难度**：★★☆☆☆
+- **本章重点**：基于蚂蚁集团 Ant Design Pro 初始搭建一套大营销的运营管理后台页面。
+- **课程视频**：[https://t.zsxq.com/iH3gW](https://t.zsxq.com/iH3gW)
+
+**版权说明**：©本项目与星球签约合作，受[《中华人民共和国著作权法实施条例》](http://www.gov.cn/zhengce/2020-12/26/content_5573623.htm) 版权法保护，禁止任何理由和任何方式公开(public)源码、资料、视频等内容到Github、Gitee等，违反可追究进一步的法律行动。
+
+## 一、本章诉求
+
+基于蚂蚁集团 Ant Design Pro 初始搭建一套大营销的运营管理后台页面，并带着读者一起初步了解 Ant Design Pro 框架的使用。
+
+关于前端的页面开发，会涉及到 React、HTML、Div、CSS，等知识点，并在 Ant Design Pro 框架的包装加下，还会额外提供一些组件。
+
+这一阶段并不是面试重点，Java 面试中也不会考察关于前端技术的使用。但对于自身积累，扩展技术栈使用，可以尝试学习下。你只需要能大部分看懂这些代码，并可以基于已有的代码复制出你要的页面即可。
+
+初学者可以通过 React 提供的最佳实践教程，了解 React 使用，教程地址：[https://zh-hans.react.dev/learn](https://zh-hans.react.dev/learn)
+
+## 二、关于后台
+
+运营后台的搭建不只有 Ant Design Pro，而是还有非常的框架可以选择。比如你可以在 github 搜索， **react admin**；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-48-01.png" width="850px">
+</div>
+
+以上这些，包括你可以在网上搜索好用的 react/vue 运营管理后台，都可以搜索到非常多，有些是官网开发的，也有个人提供的。咱们之所以选择 Ant Design Pro 不只是为了搭建一个运营后台，也是为了让大家学习到企业中更多的选择方案，这样的锻炼也可以在企业中使用。
+
+### 1. 基础环境
+
+- 你需要确保自己本机安装了 nodejs 这样才能使用 Ant Design Pro
+- 推荐使用 WebStorm 开发运营后台，这样你会基本以使用 IntelliJ IDEA 的习惯使用 WebStorm，对于 Java 程序员来说基本没有跨软件成本。
+
+### 2. 框架地址
+
+- Ant Design [https://ant-design.antgroup.com/index-cn](https://ant-design.antgroup.com/index-cn) - 是一套设计语言与组件库
+- Ant Design Pro [https://pro.ant.design/zh-CN](https://pro.ant.design/zh-CN) - 是一套解决方案，就类似于小傅哥给大家提供的 DDD 脚手架一样，帮你把基础的东西安装好。
\ No newline at end of file
diff --git "a/docs/md/project/big-market/erp/\347\254\2542\350\212\202\357\274\232querys\346\250\241\345\235\227\346\217\220\344\276\233\346\237\245\350\257\242\346\216\245\345\217\243.md" "b/docs/md/project/big-market/erp/\347\254\2542\350\212\202\357\274\232querys\346\250\241\345\235\227\346\217\220\344\276\233\346\237\245\350\257\242\346\216\245\345\217\243.md"
new file mode 100644
index 000000000..242c209e1
--- /dev/null
+++ "b/docs/md/project/big-market/erp/\347\254\2542\350\212\202\357\274\232querys\346\250\241\345\235\227\346\217\220\344\276\233\346\237\245\350\257\242\346\216\245\345\217\243.md"
@@ -0,0 +1,45 @@
+---
+title: 第2节：querys模块提供查询接口
+pay: https://t.zsxq.com/YFckh
+---
+
+# 《大营销平台系统设计实现》 - 运营后台 第2节：querys模块提供查询接口
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+- **本章难度**：★★☆☆☆
+- **本章重点**：给 big-market 新增加 querys 模块，提供数据查询操作，并提供接口给前端使用。
+- **课程视频**：[https://t.zsxq.com/ByrMx](https://t.zsxq.com/ByrMx)
+
+**版权说明**：©本项目与星球签约合作，受[《中华人民共和国著作权法实施条例》](http://www.gov.cn/zhengce/2020-12/26/content_5573623.htm) 版权法保护，禁止任何理由和任何方式公开(public)源码、资料、视频等内容到Github、Gitee等，违反可追究进一步的法律行动。
+
+## 一、本章诉求
+
+在使用 DDD 做工程开发的时候，我们可以通过 domain 包，划分出一个个功能领域进行实现。这样强业务属性的逻辑，可以很好的拆分对应的边界，不至于像是 MVC 中让一堆的 Service 混乱。
+
+但当我们遇到一些非强业务逻辑，只是对数据、缓存、ElasticSearch等做查询，给 ERP 运营系统提供数据时，就不时候全部都走一遍 domain 领域了，那样就显得非常重。所以这里我们要新增加一个 querys 模块，只做这类数据的查询操作。
+
+在 big-market 提供好 querys 模块和相应的接口后，配置到前端页面使用。
+
+## 二、后端实现
+
+### 1. 添加 querys 模块
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market//big-market-49-01.png" width="850px">
+</div>
+
+- 在工程上右键，新增加一个 querys 模块，并对 pom 进行配置。这个 pom 的配置与 domain 中的配置类似。
+
+### 2. 实现 querys 接口
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market//big-market-49-02.png" width="450px">
+</div>
+
+- 在 querys 中定义需要查询的的仓储接口，并由 domain 领域层实现接口。
+- 这个实现的过程也是依赖倒置的方式实现。
+- 另外注意，咱们是把 ElasticSerach 的查询，使用的是 x-pack-jdbc 方式，ElasticSerach 还有还有 SpringBoot 程序通过 `spring-boot-starter-data-elasticsearch` 提供查询的方式，也可以尝试试试。`面试或者做方案中，也有可能会问，你为什么选择 x-pack-jdbc 还有什么其他方式`
\ No newline at end of file
diff --git a/docs/md/project/big-market/extra/big-market-v5.md b/docs/md/project/big-market/extra/big-market-v5.md
index e4ad0cd2a..81fb0f6ba 100644
--- a/docs/md/project/big-market/extra/big-market-v5.md
+++ b/docs/md/project/big-market/extra/big-market-v5.md
@@ -1,5 +1,5 @@
 ---
-title: 第3阶段完结，已部署上线运行!
+title: 第三阶段完结，已部署上线运行!
 lock: no
 ---
 
diff --git a/docs/md/project/big-market/extra/big-market-v6.md b/docs/md/project/big-market/extra/big-market-v6.md
new file mode 100644
index 000000000..a785172c7
--- /dev/null
+++ b/docs/md/project/big-market/extra/big-market-v6.md
@@ -0,0 +1,192 @@
+---
+title: 第四阶段完结，已部署上线运行!
+lock: no
+---
+
+# 耗时9个月，1.34万行代码，这套分布式微服务架构项目，完结啦！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。、；l.34万行代码，55节课程，全程视频手把手。这套微服务、分布式、DDD架构，涵盖了；抽奖、活动、积分、兑换，运用了分库分表、binlog同步数据、分段非竞态锁、动态配置、熔断、降级、限流、Nginx负载等综合前后端，Dev-Ops大型实战项目，大营销平台系统，终于完结了！💐
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-v7-01.gif" width="200px">
+</div>
+
+**这次一次分布式架构大课，我希望让你学到更多！**
+
+在10年+的职业生涯中发现，那些简历很强、发展很顺的伙伴，基本都是在`C端场景（电商、交易、支付、信贷、营销、会员...）`、`分布式微服务`、`工程架构（DDD）`、`高并发场景方案`有着不错积累的伙伴。因为这些内容在各个中大厂，如；淘宝、美团、京东、拼多多、滴滴，都是核心业务场景。
+
+所以小傅哥选取了一个大营销场景，为了需求到设计、从场景到方案、从架构到编码，循序渐进的全程视频的，一步步手把手的带着你学习积累这些经验和技能。这套内容学习中，你会获得非常强的编程思维和编码能力的提升，甚至小到 IntelliJ IDEA 快捷键，代码推送、合并、拉取，大到分布式设计和部分全程带着你一起完成！
+
+**传道受业，虽说很累。** 但每每看到大家的学习到东西又能拿到Offer，我也感觉很爽，又想继续分享；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-v7-02.png" width="750px">
+</div>
+
+那么，接下来小傅哥就详细介绍下，本次完结的新项目，可以让大家学习到哪些知识，掌握哪些技术。
+
+> 文末有加入学习方式，可以获得整套课程的；视频、文档、代码、面试题、简历模板等。
+
+<div align="center">
+    <img src="https://bugstack.cn/assets/images/zsxq/zsxq-join-01.png" width="400px">
+</div>
+
+## 一、能学到啥
+
+这是一套结合着实际应用场景的，纯纯的分布式微服务架构项目，这些技术技能知识的运用也是中大厂里非常常见的场景解决方案。所以在这样一套项目下，你会学习到一系列非常有用的技能，包括；
+
+- 【前端】熟练使用 React、Typescript 在前端工程中开发营销活动页。
+- 【前端】熟练掌握，跨域接口请求，以及通过浏览器指纹技术实现防刷。
+- 【前端】熟练使用，Ant Design Pro 开发后台运营管理系统。
+- 【后端】熟练搭建 DDD 工程项目、以及 DDD 脚手架搭建项目。并对 DDD 设计方法有清楚的认知。
+- 【后端】熟练掌握 Spring、SpringBoot、MyBatis 等开发框架技术，并对框架源码所提供的扩展接口具备运用能力。
+- 【后端】熟练运用分布式技术栈，包括：Dubbo、RabbitMQ、Redis、XXL-JOB、DB-Router、Zookeeper、Nacos、Canal、ElasticSearch等。
+- 【后端】熟练使用多种设计模式、设计原则，对各类场景的方案设计和落地能力，深度提高自身编码思维和开发技术能力。
+- 【后端】深度学习复杂场景的架构设计、编程思维，如果处理系统功能的边界和上下文的维护。—— 这些东西一定是从实践中才能学习到的。
+- 【后端】熟练使用 Mock 单测工具、JMeter 压测工具，增强代码交付质量。
+- 【后端】熟练掌握异常、枚举、错误码的定义和使用，并学习到如何合理打印服务日志，便于问题排查。
+- 【运维】熟练使用 Docker 在本地和服务端的配置和部署应用，以及在本地构建前后端镜像。
+- 【运维】熟练掌握 Git、GitCode，对工程代码的管理，推送、拉取、切换分支、合并代码等操作。
+- 【运维】熟练使用 Nginx 配置转发服务，并能申请ssl配置https服务。
+- 【运维】熟练使用 Grafana 监控系统，对系统的 JVM、磁盘、Tomcat、应用(QPS、响应时间、调用量)完整监控。
+
+## 二、项目介绍
+
+本次项目是一个包括 `前后端 + Dev-Ops` 的全栈式综合编程实战项目，基于 React + SpringBoot + 分布式技术栈 + Nginx + Grafana + Docker 云服务，开发、部署、上线、监控的《大营销平台系统》项目。
+
+该项目分为4个阶段进行设计实现，让伙伴学习到任何一个阶段都可以写到简历使用。1阶段为抽奖策略、1阶段为活动设计、3阶段用户积分、4阶段分布式架构。并为课程提供了学习日历📅，可以作为学习时长的参考。
+
+>服务器参考；1阶段部署需要2c2g，2、3阶段部署需要2c4g、4阶段分布式部署需要4c16g [https://618.gaga.plus](https://618.gaga.plus) - 4c16g 测试机器1个月29元
+
+### 1. 项目工程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-v7-05.png" width="650px">
+</div>
+
+### 2. 工程架构
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/roadmap-ddd-stc-05.png" width="750px">
+</div>
+
+### 3. 应用部署
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-v7-03.png" width="450px">
+</div>
+
+部署涵盖；MySql、Redis、Zookeeper、ElasticSearch、RabbitMQ、Canal、前后端应用。后端应用部署了2套 + Nginx 负载。
+
+### 4. 项目演示
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-v7-04.png" width="750px">
+</div>
+
+- 涵盖了互联网C端场景的多种玩法；积分、签到、兑换、抽奖、抽奖次数锁、抽奖阶梯/权重。
+- 同类的在字节的掘金平台、京东支付完成、拼多多，也有这样的抽奖 [https://juejin.cn/user/center/lottery](https://juejin.cn/user/center/lottery)
+
+### 5. 系统监控
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-v7-06.png" width="750px">
+</div>
+
+- 系统监控主要以请求量、QPS、TPS、响应时间、链接、负载、磁盘等为监控目标。知道一个系统运行的健康度。
+
+### 6. 业务监控
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/business-behavior-monitor/business-behavior-monitor-03.png" width="750px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/business-behavior-monitor/business-behavior-monitor-04.png" width="750px">
+</div>
+
+- 业务监控，主要以用户行为发生链路为监控。通过这样的监控知道系统运行的状况，各个业务流程节点的数据是否挤压。
+
+## 三、项目大纲
+
+**不同于网上项目，这个项目是一步步，一个个章节的带着大家从0到1的方式，进行分析、设计和开发。是一个纯手把手教大家学习实战技术的项目！** 大家可以先看看课程的大纲，就知道可以学习到哪些东西了。
+
+### 第1部分：需求文档
+
+- 1：《大营销平台系统设计实现》 - 需求文档 第1节：营销场景的需求设计 - 第1阶段「抽奖策略」开始
+- 18：《大营销平台系统设计实现》 - 需求文档 第2节：抽奖活动场景的需求设计 - 第2阶段「抽奖活动」开始
+- 30：《大营销平台系统设计实现》 - 需求文档 第3节：用户行为奖励需求设计
+- 35：《大营销平台系统设计实现》 - 需求文档 第4节：用户积分需求设计 - 第3阶段「用户积分」开始
+
+### 第2部分：开发运维
+
+- 2：《大营销平台系统设计实现》 - 开发运维 第1节：使用脚手架创建工程&PUSH代码
+- 17：《大营销平台系统设计实现》 - 开发运维 第2节：第一阶段完成抽奖部署 - 第1阶段完成，可部署上线。其他部署参考下面专门部署部分。
+- 41：《大营销平台系统设计实现》 - 开发运维 第3节：引入Nacos Dubbo框架 - 第4阶段「分布式技术栈」开始
+
+### 第2部分：开发运维 - 扩展，从0到1，手把手部署。
+
+- 第1节：服务器选配
+- 第2节：Docker安装
+- 第3节；jdk、maven
+- 第4节：应用环境安装
+- 第5节：第1阶段部署
+- 第6节：第2阶段部署
+- 第7节：第3阶段部署
+- 第8节：第4阶段部署
+
+### 第3部分：营销服务
+
+- 3：《大营销平台系统设计实现》 - 营销服务 第1节：抽奖策略领域和库表设计
+- 4：《大营销平台系统设计实现》 - 营销服务 第2节：基础层持久化数据
+- 5：《大营销平台系统设计实现》 - 营销服务 第3节：策略概率装配处理
+- 6：《大营销平台系统设计实现》 - 营销服务 第4节：策略权重概率装配
+- 7：《大营销平台系统设计实现》 - 营销服务 第5节：抽奖前置规则过滤
+- 8：《大营销平台系统设计实现》 - 营销服务 第6节：抽奖中置规则过滤
+- 9：《大营销平台系统设计实现》 - 营销服务 第7节：责任链模式处理抽奖规则
+- 10：《大营销平台系统设计实现》 - 营销服务 第8节：抽奖规则树模型结构设计
+- 11：《大营销平台系统设计实现》 - 营销服务 第9节：模板模式串联抽奖规则
+- 12：《大营销平台系统设计实现》 - 营销服务 第10节：不超卖库存规则实现
+- 15：《大营销平台系统设计实现》 - 营销服务 第11节：抽奖API接口实现
+- 19：《大营销平台系统设计实现》 - 营销服务 第12节：用户参与抽奖活动库表设计
+- 20：《大营销平台系统设计实现》 - 营销服务 第13节：引入分库分表路由组件
+- 21：《大营销平台系统设计实现》 - 营销服务 第14节：抽奖活动订单流程设计
+- 22：《大营销平台系统设计实现》 - 营销服务 第15节：抽奖活动流水入库
+- 23：《大营销平台系统设计实现》 - 营销服务 第16节：引入MQ处理活动SKU库存一致性
+- 24：《大营销平台系统设计实现》 - 营销服务 第17节：用于领取活动库表设计
+- 25：《大营销平台系统设计实现》 - 营销服务 第18节：领取活动扣减账户额度
+- 26：《大营销平台系统设计实现》 - 营销服务 第19节：写入中奖记录和任务补偿发送MQ
+- 27：《大营销平台系统设计实现》 - 营销服务 第20节：抽奖活动流程串联
+- 28：《大营销平台系统设计实现》 - 营销服务 第21节：活动信息API迭代和功能完善
+- 31：《大营销平台系统设计实现》 - 营销服务 第22节：用户行为返利入账
+- 32：《大营销平台系统设计实现》 - 营销服务 第23节：用户行为返利结算
+- 33：《大营销平台系统设计实现》 - 营销服务 第24节：规则完善和应用接口实现
+- 36：《大营销平台系统设计实现》 - 营销服务 第25节：积分发奖服务实现
+- 37：《大营销平台系统设计实现》 - 营销服务 第26节：积分领域调额服务
+- 38：《大营销平台系统设计实现》 - 营销服务 第27节：积分支付兑换商品
+- 39：《大营销平台系统设计实现》 - 营销服务 第28节：积分应用场景接口实现
+- 42：《大营销平台系统设计实现》 - 营销服务 第29节：分布式动态配置活动降级
+- 43：《大营销平台系统设计实现》 - 营销服务 第30节：分布式动态限流和熔断
+- 44：《大营销平台系统设计实现》 - 营销服务 第31节：分库分表数据同步ES
+- 45：《大营销平台系统设计实现》 - 营销服务 第32节：ES-ORM多数据源配置使用
+- 46：《大营销平台系统设计实现》 - 营销服务 第33节：xxl-job分布式任务调度
+
+### 第4部分：前端页面
+
+- 13：《大营销平台系统设计实现》 - 前端页面 第1节：React工程创建和抽奖组件使用
+- 14：《大营销平台系统设计实现》 - 前端页面 第2节：Mock接口对接抽奖页面
+- 16：《大营销平台系统设计实现》 - 前端页面 第3节：应用接口对接抽奖页面
+- 29：《大营销平台系统设计实现》 - 前端页面 第4节：活动信息API迭代和功能完善
+- 34：《大营销平台系统设计实现》 - 前端页面 第5节：对接联调额度签到权重接口
+- 40：《大营销平台系统设计实现》 - 前端页面 第6节：对接联调积分流程接口 - 第3阶段完成
+
+> 课程包括；视频、小册、1 对 1 答疑解惑、专属VIP项目交流群，并且提供简历编写模板结构的一条龙🐲服务。让你学习后，直接拉开与还在玩具项目其他人的差距，面试脱颖而出提高竞争力！！！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-v4-03.png" width="650px">
+</div>
diff --git a/docs/md/project/big-market/extra/big-market-v7.md b/docs/md/project/big-market/extra/big-market-v7.md
new file mode 100644
index 000000000..920eb2c29
--- /dev/null
+++ b/docs/md/project/big-market/extra/big-market-v7.md
@@ -0,0 +1,86 @@
+---
+title: 第五阶段完结，微服务对接
+lock: no
+---
+
+# 第五阶段完结，微服务对接
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+哎，你这一个电商/点评项目，一个营销活动项目，怎么没有两个项目的对接。你的营销活动可以给你的电商提供抽奖、积分、返利、兑换等等，但为啥都是独立存在的？你有思考过他们是怎么对接的吗？
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-v8-01.gif" width="200px">
+</div>
+
+**那微服务的对接，你有经验吗？**
+
+没有🤔？没关系，小傅哥为你实打实的提供两套微服务项目的对接使用，包括；后端对接、前端对接，以及不同方式的接口形式对接方案。在这个过程中让你搞懂，这些微服务的对接思路、方式和落地手段。有了这些经验后续你也可以把这样的微服务，衔接到各种项目了上了。让你的项目成为一个蜘蛛网🕸一样的微服务布局。
+
+本篇文章提到的两套微服务分别是；`OpenAI 应用项目`、`大营销系统服务 - 抽奖、积分、兑换、返利`，这两套微服务都是小傅哥在星球「码农会锁」为大家提供的实战项目，本节为大家提供出对接方案和效果。非常提高综合实战能力。
+
+> 文末有加入学习方式，可以获得整套课程的；视频、文档、代码、面试题、简历模板等。
+
+## 一、项目简述
+
+- **OpenAi 应用项目**：前后端+Dev-Ops，全栈技术实践。以OpenAi场景，运用DDD架构，实现从微信公众号扫码登录，到下单支付对个人账户充值，完成 OpenAi 控制敏感词过滤以及多渠道策略模型的对话消费的全流程。
+- **大营销平台系统**：前后端+Dev-Ops，全栈技术实践。项目将先以最新DDD架构和模式进行重构Lottery项目，扩展用户、账户、积分、兑换、分享模块，以及和 OpenAI 进行微服务整合，RPC/HTTP 通信完成项目综合使用。
+
+>项目演示地址：[https://gaga.plus](https://gaga.plus) - 你可以直接在线查看项目的演示运行效果。这些项目都是企业级的设计和实现，远比简单的 CRUD 那种 DEMO 项目要牛皮的多！
+
+## 二、对接方案
+
+OpenAI 应用项目，提供了`支付购买对话额度`的服务。那么我们为了促进用户在 OpenAI 项目上的使用粘性，就可以添加营销模块。让用户在完成`每日签到和支付`后，就可以获得相应的积分，再通过积分兑换抽奖次数完成抽奖。抽奖有机会获得不同级别的`对话额度`赠送。以此完成用户行为旅程循环。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-v8-02.png" width="650px">
+</div>
+
+- OpenAI 前端应用，通过 Nginx 负载，HTTP 方式调用 OpenAI 后端和大营销后端服务。完成前端的UI的业务流程串联。
+- OpenAI 后端应用，在支付完成后，调用大营销的返利接口。大营销可以配置完成某个用户行为动作后对应给到积分或者抽奖次数。这个对接可以是 HTTP 或者 RPC 对接。
+- 大营销平台系统，在抽奖的时候增加 OpenAI 额度奖品。也就是抽奖后可以给一个n次数的对话额度，所以大营销需要对接到 OpenAI 提供的 HTTP 接口，处理额度奖品发放操作。
+
+## 三、对接效果
+
+OpenAI + 大营销，这是一套综合`前后端 + DevOps`的全体系技术实战项目。采用 DDD 架构设计落地，运用设计模式编写整洁的代码实现。结合 OpenAi 技术、微信支付渠道、敏感词过滤、营销积分、兑换、返利的综合玩法项目。
+
+### 1. 营销页
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-v8-03.png" width="650px">
+</div>
+
+- 在 OpenAI 页面，增加营销活动模块，展示出用户的额度、积分、签的到、抽奖次数。以及抽奖和奖品兑换操作。
+- 这些内容都是可以通过配置完成的，调整用户的获得积分的大小、以及兑换商品是的价值，再有就是抽奖的概率配置。可以非常灵活的调整，让用户非常喜欢这样一套产品。
+
+### 2. 支付页
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/chatgpt/chatgpt-extra-231007-07.png" width="650px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/chatgpt/chatgpt-extra-231007-08.png" width="650px">
+</div>
+
+- 用户可以通过下单支付的方式完成商品的购买，购买后就可以对购买支付的回调，进行返利积分或者抽奖额度。
+- 星球的课程体系还提供了，微信支付、支付宝沙箱、蓝兔支付，多种方式都可以按需使用。
+
+> 关于项目的更多了解：[https://bugstack.cn/md/project/chatgpt/review.html](https://bugstack.cn/md/project/chatgpt/review.html)
+
+## 四、加入学习
+
+小傅哥的星球「码农会锁」提供了一整套的实战项目学习进阶路线，从小白到大佬，全程视频手把手带着从0到1，一步步完成项目的设计、开发和上线。在整套内容学习过程中，小傅哥为你提供了非常好的技术交流社群，及时解决学习问题。还包括调试你的问题代码，带你快速🔜出坑！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/zsxq-241007-02.png" width="450px">
+</div>
+
+- 首先，这一整套全体系的学习课程比私教培训实惠，更比培训班上万的培训费便宜。可能也就是培训班1天的💰钱，就能学习到这一整套内容了。
+- 之后，你学习的整套课程，就是小傅哥这个架构师自己全部原创编写的。这也就是说，你所提到的任何问题，小傅哥都能给你解答和讨论。
+- 那么，这么实惠的课程，成体系的课程，还是架构师编写的。还有什么可犹豫的，完全可以撸起来了！
diff --git a/docs/md/project/big-market/notes.md b/docs/md/project/big-market/notes.md
index df41b8759..aba516ded 100644
--- a/docs/md/project/big-market/notes.md
+++ b/docs/md/project/big-market/notes.md
@@ -15,18 +15,18 @@ lock: no
 
 ## 一、项目介绍
 
-面试官您好，大营销平台的 Raffle 抽奖模块，是我独立负责实现的一个（学习/工作）项目，此项目模块在架构设计上运用了 DDD 分层架构和模板模式、责任链模式、组合模式、工厂模式等，这样的设计模式对业务流程进行解耦和实现。
+面试官您好，大营销平台的 Raffle 抽奖/积分/兑换/返利模块，是我独立负责实现的一个（学习/工作）项目，此项目模块在架构设计上运用了 DDD 分层架构和模板模式、责任链模式、组合模式、工厂模式等，这样的设计模式对业务流程进行解耦和实现。
 
-Raffle 抽奖模块的完整开发，让我对 SpringBoot 框架技术，分布式技术栈的运用更加熟练，也把设计模式在实际场景的使用了起来，积累了丰富的设计实现经验。这写技术学习的内容，也可以更好的应对以后的开发工作。非常感谢您给我这次面试机会。
+Raffle 抽奖/积分/兑换/返利，模块的完整开发，让我对 SpringBoot 框架技术，分布式技术栈的运用更加熟练，也把设计模式在实际场景的使用了起来，积累了丰富的设计实现经验。这些技术学习的内容，也可以更好的应对以后的开发工作。非常感谢您给我这次面试机会。
 
 ## 二、简历模板
 
-**注意**：🙅🏻‍♀️不要直接复制粘贴简历模板，以此结构和描述方式，用个人第1学习视角来描述。
+**注意**：🙅🏻‍♀️不要直接复制粘贴简历模板内容，以此结构和描述方式，用个人第1学习视角来描述。项目课程还包括；活动、积分、兑换、返利、分布式应用内容。学习到每个阶段后，可以写简历。写好自己的简历后可以使用 [openai 4o模型](https://openai.itedus.cn) 告诉它你是一个 Java 技术专家，请根据描述内容，重新使用专业技术术语编写简历。几次下来，简历内容会非常好。
 
-- 项目名称：大营销平台 - Raffle 抽奖服务
+- 项目名称：大营销平台 - Raffle 抽奖/积分/兑换/返利服务 - 按需起名，可以是积分玩法，用户虚拟资产运营平台、积分返利抽奖服务等
 - 项目架构：微服务架构、DDD 领域驱动模型、前后端分离设计
 - 核心技术：SpringBoot、MyBatis、MySQL、Redis、SpringCloud/Dubbo【按需添加，只是对外的接口形式】、React、TypeScript
-- 项目描述：Raffle 抽奖模块是整个大营销平台系统中非常重要的一个模块，也是本次项目中我来负责的设计和实现的模块。此模块主要以支撑各类差异化抽奖流程，如；通用抽奖、黑名单、人群、N消耗积分指定抽奖范围、抽奖N次解锁奖品等各类玩法的支持。在此系统模块的设计中运用到了模板模式、责任链模式、组合模式、工厂模式，解决代码的可扩展性，并对抽奖的计算和秒杀做了设计的优化，可以支撑单机 4c8g 服务器 1200 ~ 1500 TPS 的吞吐量（**参考值，以实际压测为准**），抽奖接口响应时长`45毫秒`左右。「不同服务器，带宽，以及是否还配置有环境相关，会有不同的数据效果」
+- 项目描述：Raffle 抽奖模块是整个大营销平台系统中非常重要的一个模块，也是本次项目中我来负责的设计和实现的模块。此模块主要以支撑各类差异化抽奖流程，如；通用抽奖、黑名单、人群、N消耗积分指定抽奖范围、抽奖N次解锁奖品等各类玩法的支持。在此系统模块的设计中运用到了模板模式、责任链模式、组合模式、工厂模式，解决代码的可扩展性，并对抽奖的计算和秒杀做了设计的优化，可以支撑单机 4c16g 服务器 500 ~ 800 TPS 的吞吐量（**参考值，以实际压测为准**），抽奖接口响应时长`45毫秒~100毫秒`左右。「不同服务器，带宽，以及是否还配置有环境相关，会有不同的数据效果」
 - 核心职责：
     - 以PRD文档诉求和对功能的评审，设计出抽奖的领域模型功能，以及在抽奖的流程抽象上，分为；抽奖前、抽奖中、抽奖后，的节点上扩展各项行为动作。如抽奖前的人群判断、抽奖中库存扣减、抽奖后兜底奖励等。
     - 依赖于领域模型的定义，设计出抽奖库表。抽象抽奖过程为抽奖策略表、策略明细表、规则配置表、规则树动作表，这样会让抽奖更好扩展。
@@ -34,6 +34,8 @@ Raffle 抽奖模块的完整开发，让我对 SpringBoot 框架技术，分布
     - 在项目架构中定义统一标准的 api 由触发器层实现，在触发器层定义监听、任务、http、rpc模块，所有的行为动作，都理解为触发行为。
     - 抽奖也是一种峰值流量高的业务场景，因此在设计奖品库存扣减上，采用了 Redis decr 分段消费和加锁兜底的设计，同时对于消费成功的库存，异步队列方式 + 定时任务更新库存。这样可以不超卖的同时，又减少数据库的压力。
     - 在项目开发中熟练运用了 IntelliJ IDEA、WEbStorm、Docker、MySQL、云服务器、SSH工具，并已将项目完整部署到线上【在校伙伴可以提供线上案例版】。
+    - 项目采用分布式架构设计，Dubbo 提供 RPC 接口，Nacos 作为注册中心。多机实例任务由 xxl-job 进行调度管理。分库分表数据通过 canal 同步 binlog 日志到 ElasticSearch 进行聚合查询。
+    - 通过 RabbitMQ 解耦系统流程，包括；抽奖发奖流程、异步调账消息、异步行为返利，以及在 Redis 缓存库存消耗完毕后，推送MQ消息更新数据库库存和清空延迟队列。
 
 ## 三、面试问题
 
@@ -43,6 +45,7 @@ Raffle 抽奖模块的完整开发，让我对 SpringBoot 框架技术，分布
 
 - 架构设计：[https://www.bilibili.com/video/BV17x4y187nS](https://www.bilibili.com/video/BV17x4y187nS)
 - 设计模式：[https://www.bilibili.com/video/BV1f2421M7kc](https://www.bilibili.com/video/BV1f2421M7kc)
+- 设计模式(扩展)：[https://www.bilibili.com/video/BV1oYs3ejENB](https://www.bilibili.com/video/BV1oYs3ejENB)
 - 分布式问题：[https://www.bilibili.com/video/BV1Cr42137de](https://www.bilibili.com/video/BV1Cr42137de)
 
 ### 1. 你的项目工程是怎么搭建的？
@@ -131,7 +134,7 @@ DDD 中的依赖倒置是一个非常好的设计，尤其是与 MVC 结构对
 
 首先我们要知道，是前期就做好分库分表方案，还是后期在做系统重构分库分表和数据迁移哪个成本高。显然是后面的成本更高。
 
-而互联网中大厂中，分库分表的架构设计都是非常熟练的，因为有成熟方案，所以前期就分库分表了。但，为了解释服务器空间。所以把分库分表的库，用服务器虚拟出来机器安装。这样即不过多的占用服务器资源，也方便后续数据量真的上来了，好拆分。
+而互联网中大厂中，分库分表的架构设计都是非常熟练的，因为有成熟方案，所以前期就分库分表了。但，为了节省服务器空间。所以把分库分表的库，用服务器虚拟出来机器安装。这样即不过多的占用服务器资源，也方便后续数据量真的上来了，好拆分。
 
 那么这里的分库分表后的数据怎么提供汇总、聚合的查询呢？
 
@@ -181,6 +184,49 @@ DDD 中的依赖倒置是一个非常好的设计，尤其是与 MVC 结构对
 
 > 综上都是微服务&分布式架构设计中会出现的场景问题，这些东西是需要实际编码学习才能更好的理解的。更多的问题汇总：[https://bugstack.cn/md/project/big-market/notes.html](https://bugstack.cn/md/project/big-market/notes.html)
 
+### 25. 如果在多机部署的情况下，是不是每台机器都会有这个定时任务，如果它们都捞到同一条发送失败的消息，会不会导致消息的重复发送？怎么避免？
+
+问题：[https://t.zsxq.com/4uoyl](https://t.zsxq.com/4uoyl)
+
+1. 幂等的这个是ok的，没问题的。
+2. 一个任务就是要有多机备份，避免一个挂了，就没有人执行了。之后这里的方案是加锁；
+   - 2.1 设计一个抢占锁，多个任务抢占同一个锁，谁抢占到了，谁可以执行。
+   - 2.2 如果抢占的执行失败了，删掉锁，重新执行。
+   - 2.3 如果删锁失败，对于是谁抢占的，谁可以做重入锁，继续执行。
+   - 2.4 锁有失效时间，如果抢占到的自己挂了，等待锁失效后，重新轮候抢占。
+
+### 26. 抽奖服务量化人群指标是什么？拉新 留存 促活吗 感觉这些数据好难算 面试官问留存率 拉新成本 我都不知道怎么答
+
+量化人群，是量化分析师，通过 Python、R 语言对历史数据进行建模（R语言有数据分析公式）。目的是为了根据一个人的，人标签和行为数据，跑出谁喜欢xxx，谁爱购买xxx，谁有xxx意向。之后创建出人群包。这样系统会根据人群包做抽奖、发券等的差异化。
+
+### 27. 有个问题想确认一下 大营销系统和业务系统 是在同一个注册中心里吗，业务系统是直接调用抽奖服务的dubbo接口么
+
+一个公司里，rpc 都是一个注册中心。
+
+### 28. 关于幂等和流程解耦
+
+- Q1: rabbitMQ判断重复消费的逻辑是什么，是直接在数据库中查询返利记录表是否有相同的订单ID(这个订单ID对应着当天日期？)的记录，如果发现重复就不消费？
+- Q2: 感觉“签到返利”这一块也有点像幂等性的实现，即可能会执行多次签到动作，但每天只会执行一次返利操作？
+- Q3: 对于“签到返利”这种行为，用MQ解耦是不是太小题大做了。首先它并不是什么高流量的行为，没必要用MQ来削峰填谷；其次，这样会不会导致执行了 签到 操作之后，用户积分得隔较长一段时间才会更新，出现数据不一致的情况？
+
+回答：[https://t.zsxq.com/zbUUb](https://t.zsxq.com/zbUUb)
+
+### 29. 前几天面试官问我策略领域和奖品领域为什么要划分开
+
+1. 这部分要从建模讲，最开似的系统建模是整理出用户用例图，根据用例图梳理四色建模的领域事件。[四色建模过程](https://bugstack.cn/md/project/big-market/ddd.html)
+2. 在领域事件脑暴完成，之后就是识别领域角色和对象，这个过程会显而易见的发现有抽奖领域、发奖领域。他们可以作为解耦设计，独立使用。因为抽奖不一定发奖，抽奖可以独立提供算法结果，由外部其他系统使用。发奖也可以除了抽奖的发奖，还有积分兑换的发奖等。如果抽奖和发奖合并，那么外部调用就会不那么清晰。
+
+### 30. 根据抽奖问题问了如果把redis中 滑块锁过期时间设置为活动过期时间的时候，如果活动时间很长导致滑块锁过多怎么解决
+
+可以考虑给活动库存的锁的key上年月日，每个日的key，明天就重新从新的key开始了。之后这样就比较好较短时间存储了。 [更多讨论](https://t.zsxq.com/vNy0U)
+
+### 31. 分布式锁使用场景
+
+项目中有两个地方使用了分布式锁，分别来处理库存的抢占竞争和分布式任务调度的抢占。
+
+1. 库存的抢占设计的是接近于无锁化的库存编号自增后加锁，做兜底设计，这样的用户的抢占就是 incr 后的结果加锁，降低竞争。
+2. 另外一个是项目是分布式架构，有多个任务执行（补偿mq、流转订单状态等），之后如2个任务，一起补偿发mq，避免发送多了，就会做一个抢占设计。谁先拿到可执行key，那么这个任务就执行。这样确保了，一个任务挂了，也可以有另外任务做处理。
+
 ## 四、公司面试
 
 ### 【美团】1. 领域模型是怎么设计的，抽奖过程是什么样，DDD四层架构和职责，以及为什么要这么设计？少卖和超卖。
@@ -190,14 +236,14 @@ DDD 中的依赖倒置是一个非常好的设计，尤其是与 MVC 结构对
 1. 虽然目前大营销是开发了第1个阶段，但在前面讲解中把所有的流程是都介绍了。领域模型官方话术是头脑风暴，罗列事件和行为，在根据实体来划分领域的。简单说也就是根据业务流程划分的。这个过程包括；活动域、抽奖域、积分域、兑换域。也就是用户通过某种行为记录，发放计算，兑换活动参与资格，完成抽奖获得奖品。
 2. 抽奖的流程可以根据目前的设计实现来描述，举例，掘金的这个抽奖就可以用星球的大营销来实现；https://juejin.cn/user/center/lottery?from=lucky_lottery_menu_bar 可以多体验下，体验透彻了，在结合项目的实现，也就能描述出来了。
 3. 关于 DDD 的分层结构介绍，和每层的关系；https://bugstack.cn/md/road-map/mvc2ddd.html
-4. 超卖不会出现，有个保证的点，一个是incr 值的限制，另外一个是对每个key加锁的兜底设计。确保了不会超卖。少卖是有可能的，核心原因是因为 incr 操作和数据操作不是是一个事务，有可能库存扣减完了，但最终操作库失败了。那么这个库存就丢失了，可能会少卖。但一般并不会对少卖做过多的流程，如果想管理，也可以把少卖的库存异常，加入单独的 redis 队列来重新消费就可以了。
+4. 超卖不会出现，有个保证的点，一个是 decr 值的限制，另外一个是对每个key加锁的兜底设计。确保了不会超卖。少卖是有可能的，核心原因是因为 decr 操作和数据操作不是是一个事务，有可能库存扣减完了，但最终操作库失败了。那么这个库存就丢失了，可能会少卖。但一般并不会对少卖做过多的流程，如果想管理，也可以把少卖的库存异常，加入单独的 redis 队列来重新消费就可以了。
 
 ### 【淘天】2. 对于数据库和redis的一致性怎么解决
 
 问题：[https://t.zsxq.com/18ddtmzqW](https://t.zsxq.com/18ddtmzqW)
 
-- 第1个手段；每次消费incr值，写入延迟队列，趋势更新数据库数据。最终一致。
-- 第2个手段；incr 库存值消耗为0时，发送mq消息，更新最终库存量。（可能不准，比如incr值消耗中，少卖的情况）
+- 第1个手段；每次消费 decr 值，写入延迟队列，趋势更新数据库数据。最终一致。
+- 第2个手段；decr 库存值消耗为0时，发送mq消息，更新最终库存量。（可能不准，比如 decr 值消耗中，少卖的情况）
 - 第3个手段；活动到期后，任务扫描活动产生订单量，校准库存。
 
 ### 【其他】3. 什么情况下使用DDD架构，什么情况下使用mvc架构？
@@ -214,3 +260,106 @@ DDD 是软件设计方法，对复杂的项目更为合适。但这里要清楚
 1. 春晚红包是不是抽奖，拼多多一进页面就有各种【转转转】来获得一个券，支付完成又一个转转转。直接领券远没有抽奖来的刺激，即使是发券，也是用抽奖方式更多。
 2. 每秒的请求量如果超过1000tps，打到库上资源竞争，都会出现大量的数据库连接等待。一般一个应用分配的数据库连接池也就那么20来个。如果都打到库上，都能把库打挂。
 3. 面试这么问，大部分是为了通过一个质疑的场景，来看是否有思考过。而不是面试问什么就是什么，反而是问什么就不是什么，但不是什么，要拿出举证理由。
+
+### 【其他】6. 抽奖算法提问
+
+1. 问：数据库路由算法 答：hashcode保证两次散列结果一致，扰动函数保证散列均匀。 问：除了hashcode数据库路由算法还有其他的吗？
+2. 问：抽奖除了加分布式锁还有没有别的思路？ 答：这里本质上还是保证库存不超卖，说了低并发下的数据库行锁，redis队列 问：还有其他思路吗？ 答：想不出来了（面试官说依赖高性能的中间态，这块没理解）
+3. 计次模型，设计一天一次的参与规则，怎么实现？
+4. 抽奖算法的实现？这个随机怎么可控，怎么避免高价的奖品一开始就被抽掉了，类似于活动中间阶段才能中一次一等奖
+5. 了解过其他抽奖算法吗？
+6. 黑名单如果上到一定规模，比如百万级别，有其他的设计思路吗？
+7. 扣减库存的分段竞态锁用 incr 还是 decr，为什么是 incr/decr？
+8. 如果活动开始了，要加奖品库存怎么办？
+
+- 问题1；[https://bugstack.cn/md/algorithm/logic/math/2022-11-05-fibonacci.html](https://bugstack.cn/md/algorithm/logic/math/2022-11-05-fibonacci.html)
+- 问题2；还有，预生成中奖结果。比如微信春晚红包，提前把奖品随机好，写入到个人记录。用户开奖只是到点查看结果。【如果提到高性能中间件这个可以再继续让面试聊下，因为有可能问题和听者理解的不一致了】
+- 问题3；这个课程里提供了总、月、日库存。
+- 问题4；有次数锁、有权重，可以避免一开始就中一等奖。也是课程的。
+- 问题5；算法如；线性同余生成器、梅森旋转算法、洗牌算法、加权随机。
+- 问题6；黑名单一般会设定人群标签，写入到 Redis 使用。之后库里只是配置了一个人群标签的标识。
+- 问题7；incr 和总量比，decr 和 0 比。decr 适合过程中不允许补充库存的。incr 可以在过程中添加库存，因为总量可以增加对比。【问题8】
+
+### 【携程】7. 我跟他说用户在抽奖系统用积分兑换抽奖机会，我方会向mq发消息，积分微服务那边（不是我们组负责的）拿到消息之后扣减会员的积分，他问我：
+
+- 你为什么在这种积分扣减用mq？我说流量削峰，他说这不是关键。
+- ️如果用户用脚本频繁兑换抽奖机会，你们怎么应对的。
+- 果下游服务迟迟没有对mq进行消息消费，你们怎么处理的？你假设作为系统的架构者，是怎么监控这种状况的。
+
+解答：[https://t.zsxq.com/0jjqr](https://t.zsxq.com/0jjqr)
+
+1. 当你描述为积分和抽奖是单独的系统，你要生成兑换商品订单，拿订单的唯一单号，rpc/http 调用积分系统扣减积分，返回一个交易单号和时间。【如果是微信、支付宝类支付，就需要等待回调，因为还要走支付渠道很多流程，没法直接返回】
+2. 你通过积分支付接口返回的信息开始变更订单记录，发放抽奖次数。
+3. 用户是用自己的积分兑换的，账户会进行额度拦截。之后接口会配置频次拦截【大营销第4阶段有这个设计】
+4. 系统是有边界管控的，在实际工作中，当前的系统要保证发送mq，下游的系统要保证消费mq。mq的消费会有监控配置，比如日常每分钟100次，如果连续n次在n分钟内，低于80次或者高于140次，则进行报警。这样就可以监控到了。
+
+### 【其他】8. 关于上下游交互的问题
+
+1. 每次面试官都会问一嘴，基于ratelimiter是做单机限流吗？
+实际生产中主要是使用分布式限流吗，为什么要基于分布式做呢，单机限流满足不了需求吗，分布式限流具体实现方式是什么呢，基于redis、zookeeper自己实现还是基于限流框架做呢
+2. 限流、降级有必要做到外部服务粒度的嘛？（例如有3个外部系统，有必要为每个系统单独限流、降级吗，例如只是不提供给某个系统服务）
+3. 奖品单状态的变更，我还是有一点模糊，如果是下游发奖，那下游应该是不能访问奖品服务的库吧，那下游发完奖如何更新奖品单状态呢？会有回调接口或者是下游再发一个发奖完毕的消息吗？
+4. 抽奖活动会和业务系统绑定吗？是不是得在活动表加一个字段，然后鉴权的时候只能调用当前系统的抽奖活动
+
+解答：[https://t.zsxq.com/7uTKz](https://t.zsxq.com/7uTKz)
+
+### 【网易】9. 在抽奖过程时，需要预热处理，可是不可能让用户点击活动装配呀，这个问题你怎么解决?
+
+第一个视频里提到了，是在活动运营配置后，可以审核通过就预热了。等待活动到了有效期就可以使用了。
+
+### 【网易】10. 在抽奖的结果中，如果一个用户在前端抽到了一个奖品，对用户是可见的。可是在扣减库存时，却发现没有了对应的库存，此时应该怎么办?
+
+库表设计中，抽奖的每条策略是有库存限制的，抽到后才会展示给用户。如果库存不足直接就是兜底积分了。这个也有人遇到过反过来问的，为什么要给策略上也加库存，直接奖品加库存不就可以。其实是不可以的。
+
+### 【其他】11. 既然为了想承受更高并发使用redis做库存扣减，那生成奖品id后续要等中奖订单入库才能给用户展示结果吗？那用redis做库存扣减不就没意义了
+
+最核心的其实是，如果没有redis做库存扣减，就要数据库里的一个库存记录做扣减。那么就会有成千上万条的请求在同一个表行记录开始独占竞争加锁，其余的请求进入等待，直至耗尽所有数据库连接。那么整个系统服务也就会被拖垮，一个普通的查询也会从原来的几十毫秒变成到一分钟也拿不到结果了。
+
+使用redis，就是为了解决这个事情。之后在写入库里的记录，都是无竞争的。那么就不会让数据库被夯住。可以快速被处理。在大厂的数据库配置，基本这类操作不会被 redis 慢多少。
+
+解答：[https://t.zsxq.com/kCjDL](https://t.zsxq.com/kCjDL)
+
+### 【其他】12. 你说你的系统压测指标是3000QPS（简历上我写了3000QPS压测指标），你认为你做的是这个系统压测到3000的时候，他的瓶颈在哪里？
+
+1. 你应该是描述的单个接口压测，3000qps，qps 指查询，这个过程没有写库，没有事务的操作。瓶颈往往在于接口串联的多，也包括rpc微服务，层层调用带来的性能损耗。其中性能损耗最大的，一般是风控类接口。之后优化可以用多线程并行调用，之后在统一把数据合并处理。你在回答的时候，可以讲，之前是多少qps，响应时间tp99、tp999、max是多少，之后经过与外部接口的协调，增加redis缓存预热，以及你在把接口通过多线程异步并行查询，提高了接口性能，增加了qps指标。另外，还有是单机还是分布式，每台机器配置的jvm，比如原来的指标配置是什么样，这次配置的是多少（这些可以从普罗米修斯监控得出，之后整理成回答）如果回答数据类的，一定要压测。
+
+2. 抽奖用的是你的个人库存，这部分可以加分布式锁，一个活动，一个sc场景，只能一个抽奖进行中活动，这样组合一个key加分布式锁就可以了。
+
+3. incr 这个星球里有很多资料了，分段锁接近于无锁化，乐观锁。而以前的直接加锁，锁全活动是独占锁，悲观锁。我们要的目的就是接近于不加锁，并且保证性能。另外 lua 脚本实际压测性能并不好。incr + 锁，尽可能避免超卖。但不加锁，基本等于裸奔，虽然大概率不出问题，但出问题是不可知的。我们做系统设计，就要考虑它可能存在的风险，尽可能降低，而不是等待它发生。资料；https://t.zsxq.com/F1J0L - 这里的话术可以使用「海恩法则、薛定谔的猫、墨菲定律、蝴蝶效应及熵增原理」。
+
+- 解答：[https://t.zsxq.com/Gdttm](https://t.zsxq.com/Gdttm)
+- 扩展：[https://t.zsxq.com/FWBzl](https://t.zsxq.com/FWBzl)
+
+>问题1：加分段锁的目的是为了什么？
+
+答：核心目标是为了防止低概率下集群、主从故障导致的超卖，做一个兜底逻辑。
+
+>问题2：如果不需要补库存，分段锁是不是可以不用加？
+
+答：即使不考虑手动补库存的情况，如果集群、主从故障，不加分段锁还是会可能超卖的，所以这里的分段锁不单单是为了补库存的场景而设计。
+
+>问题3：那直接 incr 不可以吗？
+
+答：在 redis 集群模式下，incr 请求操作可能发生网络抖动超时返回。这个时候 incr 有可能成功，也有可能失败。可能是请求超时，也可能是请求完的应答超时。那么 incr 的值可能就不准。【实际使用中10万次，可能会有10万零1和不足10万】，那么为了这样一个临界状态的可靠性，所以添加 setNx 加锁只有成功和失败。
+
+还有一种情况是主从切换的时候，如果主节点的 incr 还没同步到从节点，主节点挂了，丢失了部分未同步的数据，incr 的值从 8 变成 6，如果没有加锁就可能超卖，属于极端情况下的一种兜底策略，有 setNX 锁拦截后，会更加可靠。
+
+>问题4：那如果考虑集群故障，机器挂掉的情况，setNX 不也会报错吗？
+
+答：setNX 如果失败了，就直接报错返回 "活动库存不足" 即可，也就是可能会导致少卖，但是不会导致超卖。并且 incr 和 setNX 的 key 不同，incr 的 key 和滑块锁的 key 大概率不在同一节点上，从而双重保证，如果 senNx 的 key 和库存的 key 节点都 down 机了，那这里确实有超卖的可能，不过这个概率可以低到忽略不计。
+
+>问题5：decr 和 incr 两种扣减方式有什么不同？
+
+答：二种方式都可以，decr 适合固定库存场景，和 0 对比，incr 适合可以补库存的场景，和库存总量对比。
+
+>问题6：那为什么要分段，直接对一个 key senNX 不可以吗？
+
+答：分段锁的话，setNX 因为是非独占锁，所以 key 不存在释放。setNX 的 key 的过期时间可以优化为活动的有效期时间为结束。而独占锁，其实你永远也不好把握释放时间，因为秒杀都是瞬态的，释放的晚了活动用户都走了，释放的早了，流程可能还没处理完。
+
+>问题7：incr 扣减模式下，如果同一个用户并发进来，那么缓存中的库存就会+并发数，但实际这个用户只会领取到一条数据，所以就要恢复并发数-1的库存数量。这样种情况并不是 redis 不稳定导致的，而是同一用户并发导致的，应该及时去恢复数据啊，不然的话缓存中的库存直接一下就给一个用户并发干没了，然后再去恢复，效率太低了吧？
+
+答：不需要恢复，还是回到上面，核心是保证不超卖，关于库存恢复，一般这类抽奖都是瞬态的，且 redis 集群非常稳定。所以很少有需要恢复库存，如果需要恢复库存，那么是把失败的秒杀 incr 对应的值的 key，加入到待消费队列中。等整体库存消耗后，开始消耗队列库存，等补偿恢复，活动已经基本过去了。所以超卖，快速结束是最好的。这个一般是基于运营策略配置何种方式恢复库存，可以失败的专门扫描到恢复库存列表用于消耗，也可以不恢复（因为失败概率很低，也允许不超买即可）。
+
+### 【其他】13. decr已经是原子操作了「多个请求一定是串行的」，你为什么还要加setnx锁？
+
+答：[https://t.zsxq.com/0BC2f](https://t.zsxq.com/0BC2f)
\ No newline at end of file
diff --git a/docs/md/project/big-market/qa.md b/docs/md/project/big-market/qa.md
new file mode 100644
index 000000000..7e63aa15f
--- /dev/null
+++ b/docs/md/project/big-market/qa.md
@@ -0,0 +1,111 @@
+---
+title: Q&A：常见开发问题错误解答
+lock: no
+---
+
+# Q&A：常见开发问题错误解答
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>课程：[https://t.zsxq.com/17gswKIeX](https://t.zsxq.com/17gswKIeX)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、断点调试
+
+- [排查10个Bug](https://www.bilibili.com/video/BV1F6421w71e)
+- [打断点查空指针](https://www.bilibili.com/video/BV1q1421Q7Uv)
+
+## 二、开发问题
+
+### 1. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): top.duain.infrastructure.persistent.dao.IAwardDao.queryAwardList
+
+- 案例：[https://t.zsxq.com/ENr02](https://t.zsxq.com/ENr02)
+- 解答：
+  - application.dev mybatis 配置，默认是被注释掉的，需要打开。
+  - 自建工程结构，Application 启动层的文件夹路径，不是整个包结构的根路径，扫描不到
+  - MyBatis Mapper 配置文件填写错误，没有配置对应的路径
+  - app 层的 pom 文件，没有引入 infrastructure，所以不能被 Spring 容器管理导致。
+
+### 2. Could not create to database server. Attempted reconnect 3 times. Giving up
+
+- 案例：[https://t.zsxq.com/7i31T](https://t.zsxq.com/7i31T)
+- 解答：
+  - 课程中 docker compose 安装 MySQL，提供的是 13306 端口以及初始的密码（避免和你本地 MySQL 3306 冲突），所以你的 application.dev 数据库连接也要使用 13306 端口。
+  - 安装到云服务器的，安全组 13306 端口没有打开。
+
+### 3. java.lang.NullPointerException queryStrategyEntityByStrategyId(StrategyRepository.java:71)
+
+- 案例：
+  - [https://t.zsxq.com/x3Uz0](https://t.zsxq.com/x3Uz0)
+  - [https://t.zsxq.com/9QGLX](https://t.zsxq.com/9QGLX)
+  - [https://t.zsxq.com/BUtmX](https://t.zsxq.com/BUtmX)
+  - [https://t.zsxq.com/wstu6](https://t.zsxq.com/wstu6)
+  - [https://t.zsxq.com/P81oT](https://t.zsxq.com/P81oT)
+- 解答：
+  - MyBatis Mapper resultMap 配置成了 resultType，导致数据库中的字段没法和 Java 对象的字段映射。如 `strategy_id -> strategyId`
+  - 注解忘记配置
+
+### 4. java.lang.ArithmeticException: / by zero
+
+- 案例：
+  - [https://t.zsxq.com/4oSIt](https://t.zsxq.com/4oSIt)
+  - [https://t.zsxq.com/JxXhY](https://t.zsxq.com/JxXhY)
+- 解答：粗心犯错，test_queryStrategyAwardListByStrategyId 入参为 100002L 不是 10002L。或者 redis 没有数据导致。
+
+### 5. java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.String
+
+- 案例：[https://t.zsxq.com/Uu8XA](https://t.zsxq.com/Uu8XA)
+- 解答：由于 `getFromMap` 方法里是返回的 `String` 类型，而你设置的结果值为 `Integer` 类型，那么直接返回的值会报错类型转换异常。可以这样；`redisService.getMap("stratrgy_id_100001").get("1")`
+
+### 6. TooManyResultsExcepton: Expected one result (or null) to be returned by selectOne(), but found: 3
+
+- 案例：
+  - [https://t.zsxq.com/7NUzA](https://t.zsxq.com/7NUzA)
+  - [https://t.zsxq.com/Di0oC](https://t.zsxq.com/Di0oC)
+  - [https://t.zsxq.com/gKu1H](https://t.zsxq.com/gKu1H)
+- 解答：查询 sql 的条件入参写错，传了空值。用自己new的对象，获取里面的值，写错代码了。参考案例地址中的图片。
+
+### 7. Redis 管理工具看错是乱码
+
+- 案例：[https://t.zsxq.com/RpgCw](https://t.zsxq.com/RpgCw)
+- 解答：RedisClientConfig 类，修改序列化方式 `config.setCodec(JsonJacksonCodec.INSTANCE);`
+
+### 8. map value can't be null
+
+- 案例：[https://t.zsxq.com/A4LaY](https://t.zsxq.com/A4LaY)
+- 解答：修改对象类信息后，Redis 数据未清空重新测试。
+
+### 9. 数据库查询无结果
+
+- 案例：[https://t.zsxq.com/2DdEh](https://t.zsxq.com/2DdEh)
+- 解答：入参格式化时间写错，导致格式的时间多了个空格。如案例图。
+
+### 10. 决策树引擎，nextNode 计算失败，未找到可执行节点
+
+- 案例：[https://t.zsxq.com/zNKob](https://t.zsxq.com/zNKob)
+- 解答：规则树过滤章节后更细调整。可以跟着课程继续。
+
+### 11. Cannot invoke String.split(String) because this.RuleModels is null
+
+- 案例：[https://t.zsxq.com/nENwa](https://t.zsxq.com/nENwa)
+- 解答：可以看案例排查图
+
+### 12. Unable to connect to Redis server: localhost/127.0.0.1:6379
+
+- 案例：[https://t.zsxq.com/mrpne](https://t.zsxq.com/mrpne)
+- 解答：缺少配置 Redis 启动类。
+
+### 13. Mock 就走不到黑名单了
+
+- 案例：[https://t.zsxq.com/iO5kL](https://t.zsxq.com/iO5kL)
+- 解答：Mock 值未调整，参考案例解答图。
+
+### 14. 找不到分库下的分表
+
+- 解答：Dao 类缺少 `@DBRouterStrategy(splitTable = true)`
+
+## 三、DevOps
+
+- Docker 拉取不下来镜像，超时；配置镜像地址；[https://t.zsxq.com/EVDc9](https://t.zsxq.com/EVDc9)
+- jdk1.8、maven（含镜像）下载：[https://t.zsxq.com/EVDc9](https://t.zsxq.com/EVDc9)
\ No newline at end of file
diff --git a/docs/md/project/big-market/system-design-diagram.md b/docs/md/project/big-market/system-design-diagram.md
new file mode 100644
index 000000000..43da2080a
--- /dev/null
+++ b/docs/md/project/big-market/system-design-diagram.md
@@ -0,0 +1,132 @@
+---
+title: 设计：架构图、拓扑图、用例图、流程图、建模图
+lock: no
+---
+
+# 《大营销平台系统》系统设计图：架构图、拓扑图、用例图、流程图、建模图
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>课程：[https://t.zsxq.com/17gswKIeX](https://t.zsxq.com/17gswKIeX)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+<iframe id="B-Video" src="//player.bilibili.com/player.html?isOutside=true&aid=113189501017893&bvid=BV1Nes9e2E5K&cid=25977226974&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="100%" height="480"> </iframe>
+
+大家好，我是技术UP主小傅哥。
+
+😂 现在的面试是不是为难小朋友，怎么刚一毕业的面试，就让现场手画简历项目的系统架构图。面试官说，你不是计算机专业毕业🎓的吗，这不是你的基础吗？你作为一个合格的毕业生，不就应该学习到这些吗？
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-v7-01.gif" width="200px">
+</div>
+
+**为什么毕业生，画不出来这些图？**
+
+其实不只毕业生，很多工作1-3年的也画不出这些系统的架构图。主要是因为，在校的时候没有学过，市面的一些简单学习项目也都是 CRUD 的 demo 级别项目，工作了以后如果又是一些小厂，大部分就是完成功能需求而已。所以很多人压根就没有画过这些图。
+
+但作为程序员👨🏻‍💻这个行业的伙伴，如果还想多职业生涯走的更长，也多赚点米，那么就需要好好的在一个大型项目中锻炼这些画图的技能。因为一图胜前言，有时候图好，前途就好！
+
+那一个系统都会做出哪些个设计图呢？这里会包括；`系统架构图`、`业务拓扑图`、`用户用例图`、`业务流程图`、`系统建模图`，之后就是细分实现功能的 UML 流程图。这里小傅哥会以此的给大家做绘制和讲解，这趟车🚗你可以学习到很多！
+
+>文末提供了本次分享系统设计图对应的系统工程全套代码、文档、视频和面试官以及简历资料。
+
+## 一、系统的场景
+
+这是互联网公司C端场景，峰值流量最高的一套**营销类业务系统**，业务涵盖；`抽奖`、`活动`、`积分`、`返利`、`兑换`，这些核心的业务流程。像是在`抖音商城`、`京东金融`、`滴滴出行`、`拼多多`，都有这样业务场景。如图；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-system-design-diagram-01.png" width="750px">
+</div>
+
+整个系统是一个包括 `前后端 + Dev-Ops` 的全栈式综合编程实战项目，基于 React + SpringBoot + 分布式技术栈 + Nginx + Grafana + Docker 云服务，开发、部署、上线、监控，全体系技术运用构建。
+
+> 接下来，小傅哥就给大家分别的展示出各项设计图，包括；`系统架构图`、`业务拓扑图`、`用户用例图`、`业务流程图`、`系统建模图`。
+
+## 二、系统架构图
+
+**软件架构**是有关软件整体结构与组件的抽象描述，用于指导大型软件系统各个方面的设计。软件架构会包括软件组件、组件之间的关系，组件特性以及组件间关系的特性。软件架构可以和建筑物的架构相比拟。软件架构是构建计算机软件，开发系统以及计划进行的基础，可以列出开发团队需要完成的任务。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-system-design-diagram-02.png" width="950px">
+</div>
+
+- 这是一套大营销系统的分布式架构设计图，从前端到负载，从服务治理到后端分布式技术栈体现，从应用到部署和监控的全体系展示。在这样一套系统架构中，你可以清楚的知道从前到后的流程、各项分布式技术栈的用途、整个系统的脉络关系。所以这样的一个图可以清晰的指导我们做系统的搭建。
+- `佛瑞德·布鲁克斯`在写作《人月神话》一书时提及：软件系统的架构是有关软件系统该作什么以及不该作什么的实体观点。这些观点应和软件的实现分开。架构师的角色是“观点的看守者”，确认系统中增加的部分是符合此架构，因此可以保有概念完整性
+- 另外程序员`马尔文·康威`在1967年论文发表了康威定律，其中提到一个组织开发的软件，其架构会反映其组织架构。佛瑞德·布鲁克斯在写作《人月神话》一书时，就在书上时提到此例子，命名为“康威定律”。
+
+## 三、用户用例图
+
+用例图（英语：use case diagram）是用户与系统交互的最简表示形式，展现了用户和与他相关的用例之间的关系。通过用例图，人们可以获知系统不同种类的用户和用例。用例图也经常和其他图表配合使用。
+
+- 用例图，也可以等同于是用户故事（英语：User story）（软件开发和项目管理中的常用术语），主旨是以日常语言或商务用语撰写句子，是一段简单的功能表述。以客户或使用者的观点撰写下有价值的功能、引导、框架来与使用者进行互动，进而推动工作进程。可以被认为是一种规格文件，但更精确而言，它代表客户的需求与方向。以该用户故事来反应对象在组织内的其工作职责、范围、需要进行的任务等。用户故事在敏捷开发方法中用来定义系统需要提供的功能和实现需求管理。
+- 尽管用例本身会涉及大量细节和各种可能性，用例图却能提纲挈领地让人了解系统概况。它为“系统做什么”提供了简化了的图形表示，因此被誉为“搭建系统的蓝图”。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-system-design-diagram-06.png" width="650px">
+</div>
+- 用例图是研发进入设计阶段第一个图，通过用例图了解整个系统中发生的流程行为。这个图虽然很粗，但非常适合做后续的设计指导。
+
+
+## 四、业务拓扑图
+
+系统业务拓扑图通常是指系统中各个组件和业务流程的可视化表示。这类图示有助于理解和分析系统如何运作、各组件之间的关系、数据流动的路径以及可能的瓶颈或失败节点。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-system-design-diagram-03.png" width="950px">
+</div>
+
+- 业务拓扑图，展示出了业务实现中的关系模型，包括整个系统会从哪里展示，包括了哪些核心业务功能和执行的链路。以及数据的走向。
+- 有了系统业务拓扑图，开发者、系统架构师和运维人员可以更直观地理解系统的结构和业务逻辑，从而更有效地进行设计、部署、监控和故障排除。
+
+## 五、四色建模图
+
+如果系统是 DDD 开发的，还需要做四色建模。在使用 DDD 的标准对系统建模前，一堆人要先了解 DDD 的操作手段，这样才能让产品、研发、测试、运营等了解业务的伙伴，都能在同一个语言下完成系统建模。
+
+- 蓝色 - 决策命令，是用户发起的行为动作，如；开始签到、开始抽奖、查看额度等。
+- 黄色 - 领域事件，过去时态描述。如；签到完成、抽奖完成、奖品发放完成。它所阐述的都是这个领域要完成的终态。
+- 粉色 - 外部系统，如你的系统需要调用外部的接口完成流程。
+- 红色 - 业务流程，用于串联决策命令到领域事件，所实现的业务流程。一些简单的场景则直接有决策命令到领域事件就可以了。
+- 绿色 - 只读模型，做一些读取数据的动作，没有写库的操作。
+- 棕色 - 领域对象，每个决策命令的发起，都是含有一个对应的领域对象。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-system-design-diagram-07.png" width="950px">
+</div>
+
+- 系统建模后可以细分出系统开发中要实现的领域，包括；返利、活动、策略、奖品，兑换可以是单独的领域也可以合并到返利实现。
+- 具体的建模过程可以阅读 [《架构：DDD 领域驱动设计，战略、战术、战役，落地指引规范》](https://bugstack.cn/md/project/big-market/ddd.html)
+
+## 六、业务流程图
+
+系统业务功能流程图（Business Functional Flow Diagram，BFD）是一种用于描述和展示系统内业务功能及其之间关系的图形化工具。它通常用于系统分析和设计阶段，以帮助理解和沟通业务流程、功能要求以及系统的各个组件如何协同工作。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-system-design-diagram-04.png" width="950px">
+</div>
+
+- 在该流程中，详细的展示出了系统的业务流转关系，从1~6的用户行为，全面的展示出了系统中的流程动作。怎么抽奖、怎么返利、怎么兑换积分。
+- 画这个图到时候，首先，需要识别系统中的主要业务功能。这些业务功能通常可以通过业务需求文档、需求分析会谈以及与业务用户的交流中得出。之后，识别各业务功能之间的关系和依赖性。这包括理解哪些业务功能依赖于哪些其他功能，以及它们如何相互作用。最后，绘制流程图，以图形方式展示业务功能和它们之间的关系。
+
+## 七、工程分层图
+
+工程的分层有 MVC 三层架构、DDD 四层架构，其实 DDD 不能只是说它是架构，因为用于承载 DDD 的架构是；整洁架构、洋葱架构、六边形架构、菱形架构这些。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-system-design-diagram-08.png" width="750px">
+</div>
+
+- 六边形架构，会把本身提供到外部的放到trigger，让接口调用、消息监听、任务调度，都可以统一一个入口处理。而对于需要调用外部同类的能力统一放到 infrastructure 基础设施层，包括；数据库、缓存、配置、调用其他方的接口。
+- querys 模块是为了提供查询设计的模块，这样一些基本简单的查询就不需要再走到 domain 领域层了。
+- 更多关于 DDD 的工程模型，可以在 [bugstack.cn](https://bugstack.cn) 进入《路书》中阅读9篇系统架构部分。
+
+## 八、扩展类知识
+
+这是小傅哥为大家提供的一套综合锻炼编程能力的实战项目大课。全程视频手把手，一个个章节、一步步流程的带着大家从0到1，需求分析、工程设计和代码实现。
+
+课程完成后，有可参考简历编写模板、简历面试问题汇总、项目延展性思考和分析，以及项目中的架构、设计模式在场景方案中的运用。
+
+- 课程目录：[https://bugstack.cn/md/project/big-market/big-market.html](https://bugstack.cn/md/project/big-market/big-market.html)
+- 系统建模：[https://bugstack.cn/md/project/big-market/ddd.html](https://bugstack.cn/md/project/big-market/ddd.html)
+- 简历参考：[https://bugstack.cn/md/project/big-market/notes.html](https://bugstack.cn/md/project/big-market/notes.html)
+- 面试问题：[https://bugstack.cn/md/project/big-market/notes.html](https://bugstack.cn/md/project/big-market/notes.html)
diff --git a/docs/md/project/chatgpt/chatgpt.md b/docs/md/project/chatgpt/chatgpt.md
index 82d9b66a6..4597f78d0 100644
--- a/docs/md/project/chatgpt/chatgpt.md
+++ b/docs/md/project/chatgpt/chatgpt.md
@@ -7,6 +7,7 @@ lock: no
 
 作者：小傅哥
 <br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>体验：[https://openai.gaga.plus](https://openai.gaga.plus)
 
 >沉淀、分享、成长，让自己和他人都能有所收获！😄
 
@@ -24,9 +25,9 @@ lock: no
 
 作为一个纯搞技术的号主，我更希望做符合技术人员长期发展的学习事项。如 ChatGPT、文心一言、通义千问、AIGC、Civita，这样的东西会越来越多，而作为研发更应该注重以`生成式服务`所搭建出一套体系化应用微服务。所以小傅哥的星球又要带着大家搞新项目了 **《ChatGPT 微服务应用体系构建》** - 说到又，那小傅哥的星球搞了多少项目🤔？
 
-除技术小册外，星球历经项目5个：- `加入小傅哥的知识星球，相当于付费1个项目的价格，就可以学习所有过往的项目！`
+除技术小册外，星球所有项目都可以学习：- `加入小傅哥的知识星球，相当于付费1个项目的价格，就可以学习所有过往的项目！`
 
-- 《ChatGPT 微服务应用体系构建  - API-SDK、鉴权、公众号对接、微信对接、交易支付》- **5.1日启动** 🌲
+- 《ChatGPT 微服务应用体系构建  - API-SDK、鉴权、公众号对接、微信对接、交易支付》
 - [《ChatGPT AI 问答助手》](https://bugstack.cn/md/project/chatbot-api/chatbot-api.html)
 - [《API网关 - 中间件设计和实践》](https://bugstack.cn/md/assembly/api-gateway/api-gateway.html)
 - [《SpringBoot 中间件设计和开发》](https://bugstack.cn/md/assembly/middleware/2019-12-02-SpringBoot%E6%9C%8D%E5%8A%A1%E6%B2%BB%E7%90%86%E4%B8%AD%E9%97%B4%E4%BB%B6%E4%B9%8B%E7%BB%9F%E4%B8%80%E7%99%BD%E5%90%8D%E5%8D%95%E9%AA%8C%E8%AF%81.html)
@@ -54,7 +55,7 @@ lock: no
 
 ## 三、`开发`的计划
 
-**死鬼**，5.1 假期即将来临，又到了疯狂的带着星球伙伴卷代码的时候。所以从 5.1 放假开始，小傅哥会逐步更新课程内容，粗略计划；
+**死鬼**，又到了疯狂的带着星球伙伴卷代码的时候。
 
 - OpenAI 接口服务 + Nginx SSL 配置
 - OpenAI SDK
diff --git a/docs/md/project/group-buy-market/group-buy-market.md b/docs/md/project/group-buy-market/group-buy-market.md
new file mode 100644
index 000000000..a25927e41
--- /dev/null
+++ b/docs/md/project/group-buy-market/group-buy-market.md
@@ -0,0 +1,149 @@
+---
+title: 拼团支付平台系统
+lock: no
+---
+
+# 《拼团交易平台系统》- 为各类交易场景，提供拼团服务。
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>课程：[https://t.zsxq.com/Yfbwo](https://t.zsxq.com/Yfbwo)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+<iframe id="B-Video" src="//player.bilibili.com/player.html?isOutside=true&aid=113987928786137&bvid=BV1ThNCegE8P&cid=28343798194&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="100%" height="480"> </iframe>
+
+大家好，我是技术UP主小傅哥。
+
+**耗时9个月制作，48节课程，微服务分布式架构**，`前后端 + DevOps + AI MCP（场景运用）`，全栈式编程 + 全程视频 + 全套的技术小册，手把手👨🏻‍💻教学，终于完结啦！🎉
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/chatgpt/chatgpt-extra-230905-01.png" width="150px">
+</div>
+
+**讲道理，做项目，就得做公司里真实有的业务。**
+
+我在非常多的互联网业务应用中，都看到过这样一种产品形态，它就是**拼团交易营销场景**，如；`拼多多/京东购物🛒`、`滴滴拼券🧧`、`腾讯开团抢购服务器☁️`、`美团团购☕️`等等，都是以拼团方式增强交易单量的业务场景。所以，如果想面试互联网公司，还是要优先考虑做一些这样的真实场景业务，这样才能和面试官有东西可以讲，而不是什么都没的聊o(╥﹏╥)o。
+
+此套项目，小傅哥已提供了对应的`简历模板`、`面试问题（一直梳理中）`，还有 AI MCP 场景的加入，通过 AI MCP 对接 ELK + 普罗米修斯监控，Ai Agent 智能化分析系统的日志和运行情况。
+
+**本项目，和你之前学习过的一些项目最大的区别，就是！这是真实的业务，全核心流程覆盖，有非常好的架构和编码设计。这块学习后，进入公司完全可以跟着大家一起做需求，而不是瑟瑟发抖的不知道自己要做啥！**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250803-04.png" width="650px">
+</div>
+
+> 文末有加入学习方式，提供全套的课程代码、文档、视频，此外还有额外的16个实战项目一起获取！
+
+## 一、能学到啥
+
+该项目是互联网toc场景的核心业务流程，以真实业务作为背景，实际可上线，可运行为目标，进行系统的需求分析、架构设计、功能实现，过程涵盖设计模式的运用，解决复杂场景问题。让大家感受到，🐂牛逼的代码，从来不是一顿写CRUD！
+
+- 【前端】以 Ai Agent 设计前端 UI，包括 HTML、Div、CSS 等前端编程技术。
+- 【前端】掌握 fetch 方式对后端接口的调用，处理相关的逻辑数据。
+- 【后端】熟练搭建项目工程，学习工程分层结构概率和设计思路。掌握更多的六边形、洋葱、整洁架构。`提高简历技术亮点`
+- 【后端】熟练掌握 Spring、SpringBoot、MyBatis 等开发框架技术，并对框架源码所提供的扩展接口具备运用能力。
+- 【后端】熟练使用 SpringCloud 核心微服务分布式技术栈，包括：Fegin、Sentinel、Nacos、熔断、限流、降级等。`先做功能，后面逐步添加。`
+- 【后端】熟练使用大厂中常用的设计模式手段和设计原则技术，对各类场景的方案设计和落地能力，深度提高自身编码思维和开发技术能力。
+- 【后端】深度学习复杂场景的架构设计、编程思维，如果处理系统功能的边界和上下文的维护。—— 这些东西一定是从实践中才能学习到的。
+- 【后端】熟练使用 Mock 单测工具、JMeter 压测工具，增强代码交付质量。
+- 【后端】熟练掌握异常、枚举、错误码的定义和使用，并学习到如何合理打印服务日志，便于问题排查。
+- 【后端】以通用场景设计为目的，提取共性逻辑为通用的设计框架，涵盖；动态配置、设计模式（规则树、责任链）、限流。
+- 【运维】熟练使用 Docker 在本地和服务端的配置和部署应用，以及在本地构建前后端镜像。
+- 【运维】熟练掌握 Git、GitCode，对工程代码的管理，推送、拉取、切换分支、合并代码等操作。
+- 【运维】熟练使用 Nginx 配置转发服务，并能申请ssl配置https服务。
+- 【运维】熟练使用 Grafana 监控系统 + AI MCP，对系统的 JVM、磁盘、Tomcat、应用(QPS、响应时间、调用量)完整监控。
+
+此外，小傅哥已对全过程都做了需求的分析、功能的设计、编码的精细化处理，让你吃上细糠！也通过这种方式，真正的把你的技术储备整起来，以后进入到公司都是嘎嘎强的选手！
+
+## 二、运行展示
+
+整个拼团交易的流程非常细腻，包括了，一套小型支付 + 拼团营销平台的完整对接，涵盖；`验签`、`扫码/无痕登录`、`试算`、`锁单`、`支付+结算`、`退单+退单`的完整链路流程。如图；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-3-8-03.png" width="750px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-3-8-04.png" width="750px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-3-8-05.png" width="750px">
+</div>
+
+前端页面体现了全部核心流程，看着前端不是太多，但后端支撑整套系统了，写了**1.38万行代码**！
+
+>体验地址（部分功能）：[http://117.72.38.125:3080/index.html](http://117.72.38.125:3080/index.html)
+
+## 四、后端设计
+
+### 1. 分层架构
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250803-01.png" width="950px">
+</div>
+
+- 整个系统是一个微服务分布式架构设计，通过两套系统的对接，体现微服务的全流程处理关系。
+- 下面是系统中用到的核心技术栈，框架、组件、监控、部署、发布、上线，可以说是非常全面。
+
+### 2. 工程结构
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250803-02.png" width="550px">
+</div>
+
+- 拼团和交易系统，以面向对象的思维，划分出领域结构。活动域、标签域、交易域、鉴权域、商品域、订单域。
+- 两套系统通过 http/rpc(可配置对接)、mq（RabbitMQ）进行同步和异步交互，因为配有本地消息表，所以可以保证最终一致性。
+- 这里有非常精妙的编码设计，如；工厂模式、组合模式、策略模式（含枚举策略）、责任链、抽象类等，又提供了 Supplier 函数式编程，可以说是应有尽有！
+
+### 3. 库表数据
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250803-03.png" width="950px">
+</div>
+
+- 一看库表就知道，这不是小儿科！有标签表，有活动的优惠，组队，订单明细，本地消息表，商品活动配置表，sku表。
+
+### 4. 用户旅程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-25-01.png" width="700px">
+</div>
+
+- 拼团全流程简图，以用户旅程来看各个节点所做的事项。
+
+### 5. 场景举例 - 设计模式
+
+#### 5.1 试算
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250118-06.png" width="700px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250118-03.png" width="700px">
+</div>
+
+为了解决整个交易过程的复杂场景，做了一套通用设计模式框架，并结合一套异步数据加载的多线程设计，来解决加载数据效率问题。让整个框架的灵活性非常高。
+
+#### 5.2 退单
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-30-01.png" width="950px">
+</div>
+
+- 第一条退单链路，以工厂🏭方式获取执行责任链，责任链的作用是拆分原有的流程结构，分节点进行逐步处理。之后到退单的具体操作，则根据枚举策略，拿到对应执行的退单策略模式，完成退单动作。退单执行后发送MQ消息，驱动后续流程。
+- 第二条消息消息，从接收 MQ 开始，以 MQ 消息中的策略类型进行库存恢复操作。这部分保持原有的走对应的策略即可。
+
+>课程包括；视频、小册、1 对 1 答疑解惑、专属VIP项目交流群，并且提供简历编写模板结构的一条龙🐲服务。让你学习后，直接拉开与还在玩具项目其他人的差距，面试脱颖而出提高竞争力！！！
+
+## 四、加入学习
+
+跟着小傅哥学习，不会浪费时间，不会走小道弯路。全程做技术兜底，遇到的各种问题都能帮你解决。包括你学习时候的代码bug，可以把代码提交到星球，我来帮你调试。最终把兄弟们送到各个竞争赛道的头部，拿到最牛的薪资待遇 Offer！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-241109-05.png" width="550px">
+</div>
+
+>🧧 [加入](https://bugstack.cn/md/zsxq/other/join.html) 每年招聘，都能帮助兄弟们规划好学习路线，卷出最好的 Offer！星球里还有500份评审过的简历记录，看过后，就知道怎么写好简历了。
diff --git a/docs/md/project/group-buy-market/none.md b/docs/md/project/group-buy-market/none.md
new file mode 100644
index 000000000..f64218b2f
--- /dev/null
+++ b/docs/md/project/group-buy-market/none.md
@@ -0,0 +1,15 @@
+---
+title: 新章节，编写中
+lock: no
+---
+
+# 新章节，编写中
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、前言
+
+... 新章节，编写中
\ No newline at end of file
diff --git a/docs/md/project/group-buy-market/notes.md b/docs/md/project/group-buy-market/notes.md
new file mode 100644
index 000000000..b91babdaf
--- /dev/null
+++ b/docs/md/project/group-buy-market/notes.md
@@ -0,0 +1,167 @@
+---
+title: 面试：技能、简历、问题汇总
+lock: no
+---
+
+# 《拼团交易平台系统》，关于面试中的技能、简历、问题汇总
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>课程：[https://t.zsxq.com/Yfbwo](https://t.zsxq.com/Yfbwo)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+<iframe id="B-Video" src="//player.bilibili.com/player.html?isOutside=true&aid=114007373515865&bvid=BV1GQAPevE8j&cid=28405336788&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="100%" height="480"> </iframe>
+
+此部分主要用于向读者提供星球项目之一的《拼团交易平台系统》项目如何体现到简历中，包括；专业技能、项目经验。
+
+## 一、项目介绍
+
+你可以根据是实习、实践、导师任务、学校课程、自己学习，几个方向来描述项目来源。
+
+举例；
+
+面试官你好，拼团交易平台系统，是我在日常使用`拼多多`、`腾讯`、`京东`等服务平台，交易支付时候，了解到这样的一种营销手段。它可以通过用户自传播方式增强交易量，也是拼多多最开始起家形成巨大规模的一个业务逻辑。因此非常感兴趣这样的系统，所以根据大厂分享的资料、与对应的架构师UP进行交流学习了，设计了这样一套系统。
+
+该系统采用了 DDD 领域驱动设计进行建模，拆分领域模块边界，形成；活动领域、人群领域、交易领域，来构建拼团营销交易流程，达到试算、锁单、结算等步骤流程。这个过程中提炼了通用设计模式，规则树、责任链，可以非常有效的统一的治理流程编排实现。
+
+## 二、简历模板
+
+注意：🙅🏻‍ 不要直接复制粘贴简历模板内容！视频提供了 DeepSeek AI 方式编写简历，可以参考。
+
+- **项目名称**：`拼团营销服务系统`、`交易营销场景 - 拼团系统`、`营销拼团交易平台`、`仿拼多多/腾讯/京东，拼团玩法系统（以大厂项目为背书）`、`拼团外卖平台系统（结合其他项目一起组合）`  - 参考以上方式编写自己的项目名称，尤其拼团还是一个微服务，可以和很多其他系统组合。
+
+- **项目架构**：`微服务设计`、`分布式架构`、`DDD 领域驱动设计 + 六边形分层架构实现`、`前后端分离技术`
+
+- **核心技术**：SpringBoot、MyBatis、MySQL、Guava、Redis、RabbitMQ、动态配置中心（DCC）、普罗米修斯监控、Docker等 - 如果学习了其他技术栈也可以补充。
+
+- **项目描述**：
+  - 方式1（以学习视角介绍）：本项目参考`拼多多`交易购物拼团场景，调研中大厂相关营销业务场景和技术架构方案，设计实现了本套拼团营销服务系统，支持各类营销优惠（直减、折扣、N元购）。该系统以面向对象开发，运用 DDD 拆分领域边界，使用设计模式设计服务功能。提高系统的扩展性和可维护性。
+  - 方式2（以提供服务介绍）：该项目以`拉动/促进/提高`（小型支付商城/外卖点餐/购票出行/...）交易单量为目标，通过设计拼团优惠组队下单为手段，达到增强用户自传播分享私域提高整个交易GMV的结果。三段式描述，`...目标，...手段，...结果`
+  - 方式3（以实际场景介绍）：该项目是以促进Xxx公司Xxx场景的核心营销优惠玩法系统，围绕公司的xxx、yyy、zzz等全部交易业务，设计通用的拼团优惠锁单和组队结算回调服务。此系统分布式架构设计，可支撑单机压测量 xxx tps，tp99 xxx 的数据指标，有效的满足公司的全量的业务场景接入使用。
+	
+- **核心方案**：
+
+  - **架构设计**，以 DDD 领域驱动设计，四色建模方式，按照系统功能流程，拆解服务边界。包括；活动域、标签域、交易域。
+  - **设计模式**，设计并提炼通用的`责任链`、`规则树`模型框架，解决领域场景中多处，需要使用设计模式解耦复杂流程链路的调度（避免过多的if...else判断）。鉴于多处场景的责任链使用，模块框架设计责任链为执行和链路分离组装，便于工厂可以组合出各类执行责任链，不被不同的链路管理影响（以往的责任链，一般是单例的，会被影响）。
+  - **规则过滤**；
+    - （举例）以拼团试算场景举例，运用通用设计模式模型框架，完成试算；根节点、切量开关、营销折扣、人群标签、异常兜底等流程串联。设计这样解耦设计，极大的提到了程序的可扩展性。
+    - （举例）以拼团锁单场景举例，拼团锁单场景，使用通用的责任链模型框架，校验活动的有效性（状态、有效期）和用户的参与资格。
+    - （举例）以拼团结算场景举例，拼团结算场景，使用通用的责任链模型框架，校验渠道黑名单配置、拼团组队信息、交易时间属性、订单有效状态等。
+    - （举例）以拼团试算场景举例，在查询优惠配置数据时候，抽象出模板结构，使用 Supplier 函数式编程，设计动态降级、缓存数据和 dao 的后置执行操作。通用模板的设计让所有场景更容易接入。`ActivityRepository#queryGroupBuyActivityDiscountVO` 
+      
+  - **异步线程**，为提高用户体验，将拼团优惠试算所需的营销类数据加载，由串行改为异步线程并行执行。此执行方式由通用设计模式模型框架提供。（如果由引入星球的动态线程池，也可以在这里增加线程池的管理描述）
+  - **功能方案**；
+    - （举例）通过 Redis 发布订阅模型，结合 Spring AOP 切面和代理，以自定义注解的方式控制属性信息动态配置。减少系统与 Redis 的 IO 交互，提高对高频场景属性值的使用时间效率。
+    - （举例）设计拼团组队结算的 HTTP、MQ 双重手段，满足外部应用和内部微服务的不同方式对接，增强系统的适配性。同时为了保证整体方案的可靠性，在结算触达时，先异步多线程方式即时触发回调（HTTP、MQ），再通过业务一致性任务数据补偿校验。（MQ、HTTP，都可能因网络原因导致失败，因此需要重试）任务的触达，还增加多分布式锁，让任务互备抢占方式执行，增强系统的鲁棒性设计。
+    - （举例）设计 Redis BitSet/BitMap 人群标签，用于过滤可见和可参与，拼团活动的人群信息。该人群标签可依赖于过往用户数据（交易下单）通过 job 任务完成人群标签的录入。
+    - （举例）通过策略模式，设计拼团折扣（MJ、ZJ、NYG）的计算策略。同时折扣的计算也会通过人群标签过滤，以满足运营策略配置，降低活动风险。
+    - （举例）运用 retrofit2/okhttp3/spring cloud fegin + nginx 负载，对接拼团交易平台锁单服务，以及通过 http 回调和 MQ 监听来处理交易结算。
+    - （举例）`三阶段实现的内容`，通过独占锁处理互备任务抢占执行回调，确保在同一时刻有一个运行的回调任务，提高系统的鲁棒性设计。
+    - （举例）`三阶段实现的内容`，设计Redis无锁化拼团库存抢占和恢复库存处理，减轻数据库行锁独占的压力，提高系统吞吐量。
+    - （举例）`三阶段实现的内容`，抽象通用函数式缓存分级设计，并结合扳手工程DCC动态配置，处理缓存降级到DB设计。
+    - （举例）`三阶段实现的内容`，结合 RateLimiter + DCC 动态配置，实现动态限流配置。
+    - （举例）`三阶段实现的内容`，以 Ai MCP + ELK + 普罗米修斯监控，以 Ai Agent 智能体方式，分析错误日志和异常监控，动态化展示监控报表。
+    - （举例）`三阶段实现的内容`，通过枚举策略，设计多种类型退单（未支付&未成团、已支付&未成团、已支付&已成团），并通过回调处理退单退款。
+  
+> 不要局限于以上的描述，可以结合 Ai + 喂进去的信息，给你描述出属于你独一无二的简历描述。这样更有益于你的面试。
+
+## 三、面试问题
+
+### 1. 为什么需要拼团平台使用http或rpc，mq对接商城平台,而不是二者放到一起?
+
+http、rpc，属于即时性调用，立即反馈结果的场景。mq 用于异步驱动，流程解耦。而拼团组队的场景，组队是需要多人参与和支付的情形，只有统一完成拼团后，才能 mq 驱动后续流程。而不是一开始 http 请求就能立马拼团组队完成。
+
+### 2. 为什么做了微服务的拆分，拆分的依据是什么？为什么拆分了微服务之后还要拆分领域？可不可以每个领域都作为一个微服务？
+
+微服务的目的是划分大的系统边界，拆分原则可以包括；按业务功能拆分、按数据模型拆分、按团队结构拆分、按技术特性拆分、按变更频率拆分，但不要过度细化的拆分，避免造成分布式系统过度复杂性。
+
+而对于拼团场景是一个独立的营销玩法，可以被拆分成一个独立的微服务。这样迭代、维护、上线，也都会更加轻量，也便于与其他平台对接。之后对于拼团内的服务模块，都以支撑拼团为主，符合最新当前的诉求进行设计。当然没有永远的适合，如果将来拼团变得更大，需要支撑的场景更多，也会考虑做模块的微服务拆分。
+
+### 3. 优惠试算使用了多线程异步加载，为什么这里不用缓存？
+
+试算加载的是当前用户行为的最新数据，而缓存则不适用于此场景。当然如果试算中有一些不频繁变化的偏固定的配置类数据，则可以通过缓存处理。另外，在公司（美团、京东、字节、滴滴等）拼团场景则更为复杂，试算时候需要的数据量更多，多线程则会更体现出必要性。
+
+### 4. 平台在高并发下的扣减库存和防止超卖是怎么做的？
+
+这一块的库存扣减使用的是无锁化设计，setnx 兜底。但如果是加分布式锁，则会出现排队问题，达不到最大并发的效果。而因库存使用了 redis 计数 + 锁，以及添加了幂等恢复量，所以不会有超卖问题。
+
+### 1. 项目设计与架构
+
+1. **为什么选择DDD领域驱动设计？如何划分领域边界？**
+   **答**：DDD能有效解决复杂业务逻辑的拆解问题，通过四色建模和业务场景分析，划分出活动域（管理拼团规则）、标签域（用户画像和权限过滤）、交易域（订单和结算）。例如，拼团锁单流程属于交易域，而人群标签过滤属于标签域。
+2. **微服务间如何通信？如何保证数据一致性？**
+   **答**：对内外对接系统，分别采用HTTP（Feign/RestTemplate）和 MQ（RabbitMQ）方案。关键链路（如订单结算）通过MQ保证最终一致性，结合本地事务表+补偿任务（如定时检查未完成的结算请求）。
+3. **六边形架构如何落地？解决了什么问题？**
+   **答**：通过适配器层隔离核心业务与外部依赖（如数据库、Redis）。例如，订单结算的核心逻辑独立于HTTP回调或MQ监听的具体实现，提升核心代码的稳定性和可测试性。
+
+> DDD 是一个亮点，中大厂公司都在推进 DDD 的项目重构。站在技术角度，这样的架构更好维护。站在领导角度，这样的拆分可以更好了解系统设计便于制订KPI。同时有清晰的业务领域划分，AI 开发工具可以更好的结合进来。[招聘里DDD的体现，jump 🏃🏻](https://bugstack.cn/md/zsxq/memorabilia/job-hire-jd.html)
+
+### 2. 核心技术实现
+
+1. **Redis在项目中如何应用？举例说明**
+   **答**：1）BitMap存储用户标签（如是否参与过某活动）；2）分布式锁控制拼团组队结算触达并发；3）缓存活动配置（如有效期、折扣规则），降低数据库压力。
+
+2. **责任链模式如何解耦复杂流程？举例说明**
+   **答**：拼团锁单流程拆解为多个处理器链：活动状态校验→用户资格校验→库存检查。每个处理器独立实现，通过工厂模式动态组装，避免if-else嵌套。
+
+3. **异步线程如何优化性能？如何管理线程池？**
+   **答**：将营销数据加载从串行改为并行（如使用CompletableFuture）。通过动态线程池监控任务队列和拒绝策略，结合普罗米修斯采集指标，避免线程池耗尽。`注意多准备下多线程、线程池的八股`
+
+### 3. 核心业务场景
+
+1. **拼团结算的HTTP和MQ双重回调如何设计？如何保证可靠性？**
+   **答**：1）结算后同时发送HTTP请求和MQ消息；2）异步线程池处理回调，失败后进入重试队列；3）定时任务补偿未完成回调，配合分布式锁避免重复执行。
+2. **人群标签如何通过BitMap实现？举例说明**
+   **答**：例如，用户ID哈希后映射到BitMap的某一位。运营配置“仅限新用户”的活动时，Job任务扫描历史订单，将老用户对应位标记为0，查询时通过`BITCOUNT`判断资格。
+3. **策略模式在折扣计算中的应用？如何扩展新策略？**
+   **答**：定义接口`DiscountStrategy`，实现类 `MJCalculateService`（满减）、`NCalculateService`（N元购）、`ZJCalculateService`（直减）、`ZKCalculateService`（折扣）。新增策略时只需添加实现类并注册到Spring上下文，通过策略工厂按类型调用。
+
+### 4. 高并发与容错（这部分会在第3阶段加入）
+
+1. **如何解决库存超卖问题？**
+   **答**：1）Redis原子操作（DECR）预扣库存；2）数据库最终扣减时加乐观锁；3）异步补偿任务回滚异常订单。
+2. **分布式锁的实现方案？遇到过哪些坑？**
+   **答**：基于Redis的Redisson（看门狗机制续期）。注意点：1）锁粒度细化（按活动ID+商品ID）；2）避免锁过期后业务未执行完，需结合版本号校验。
+3. **如何设计熔断降级策略？**
+   **答**：Sentinel监控外部服务（如支付接口）的异常比例，超阈值时熔断，降级为返回默认错误码或缓存数据，并记录日志供补偿任务处理。
+
+### 5. 监控与运维（这部分会在第3阶段加入）
+
+如配置说明接入普罗米修斯监控，同时也可以使用 arthas、dump mat。地址：[https://bugstack.cn/md/road-map/grafana.html](https://bugstack.cn/md/road-map/grafana.html)
+
+1. **普罗米修斯监控哪些指标？如何定位性能瓶颈？**
+   **答**：监控接口TP99、线程池活跃度、Redis命中率、MQ堆积量。通过Grafana仪表盘分析慢SQL（MyBatis拦截器采集）或高耗时责任链节点。
+2. **动态配置中心如何实现？如何保证实时性？**
+   **答**：基于Nacos/Zookeeper，配置变更时通过Spring Cloud Bus通知服务。关键配置（如活动开关）结合本地缓存，通过@RefreshScope实时生效。
+3. **Docker化部署的优化经验？**
+   **答**：1）多阶段构建减小镜像体积；2）JVM参数调优（-Xmx限制内存）；3）健康检查接口 skywalking、artash 探针结合，实现系统监控。
+
+### 6. 设计模式与代码规范
+
+1. **规则树模式如何实现？举例说明**
+   **答**：根节点为入口，子节点为具体规则（如切量、标签过滤）。每个节点实现`RuleNode`接口，通过组合模式构建树形结构，支持动态扩展节点。
+2. **如何避免策略模式带来的类膨胀问题？**
+   **答**：1）将策略实现类定义为无状态Bean，复用实例；2）通过注解+自动扫描注册策略；3）策略参数化配置，减少重复代码。
+3. **AOP在项目中的典型应用场景？**
+   **答**：1）DCC 动态配置中心；2）@LogTrack 记录核心链路日志（切面加日志，可以让 DeepSeek 写个案例）；
+   
+### 7. 扩展性与业务，你怎么设计新功能？
+
+1. **如何支持多种拼团类型（如老带新、阶梯团）？**
+   **答**：抽象拼团模板（Template Pattern），定义成团条件接口（如人数满额、金额达标）。新增类型时实现接口，并通过工厂模式注入。
+2. **如何设计活动预热机制？**
+   **答**：1）活动开始前定时任务加载配置到Redis；2）缓存热门活动的商品信息；3）通过压测工具预热JVM和线程池。
+3. **如何实现灰度发布？**
+   **答**：1）Apollo配置中心按用户ID百分比切流；2）网关层根据请求头路由到新老服务；3）结合Prometheus监控异常，快速回滚。
+
+### 8. 综合问题
+
+1. **项目中最大的挑战是什么？如何解决？**
+   **答**：高并发下Redis雪崩。解决方案：1）缓存分层（本地缓存+Redis）；2）热点数据预加载；3）随机过期时间。
+2. **如果让你重构系统，会优化哪些点？**
+   **答**：1）引入分库分表解决订单表膨胀；2）增加AI + RAG + MCP 提供智能分析和运营服务；3）使用Guava本地缓存，管理复杂数据结构。
+3. **如何向非技术人员解释系统设计？**
+   **答**：类比“组队购物”，系统像智能管家：1）自动匹配规则（如折扣）；2）确保组队不超时；3）失败时自动重试，保证最终成功。
+
+>关于系统面试问题，涉及到的监控、数据、指标类，最好使用云服务部署上线 + 普罗米修斯监控完成压测和优化。
diff --git a/docs/md/project/group-buy-market/promotion/group-buy-market-v1.md b/docs/md/project/group-buy-market/promotion/group-buy-market-v1.md
new file mode 100644
index 000000000..7164dcd4b
--- /dev/null
+++ b/docs/md/project/group-buy-market/promotion/group-buy-market-v1.md
@@ -0,0 +1,93 @@
+---
+title: 新"拼多多"系项目，编码3千行，进度35%，设计模式拉满！
+lock: no
+---
+
+# 新"拼多多"系项目，编码3千行，进度35%，设计模式拉满！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+有道理，**不能再做大号的CRUD啦！** 这玩意没成长，面试也没得聊呀！不少伙伴在选择学习项目的时候，没有仔细看对应的项目的架构、设计、模型，一上来就是从头到尾的CRUD串流程，写到最后既没有编程思维的提升，也没有编码能力的积累。所以，面试贼吃亏！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/business-behavior-monitor/business-behavior-monitor-01.png" width="150px">
+</div>
+
+**面试官：”我们想要的不是CRUD仔！“**
+
+能作为面试官的，往往是这个团队里技术不错，级别较高的。这些人面试不只是看你对业务的理解，还包括非常重要的`架构知识`、`模型设计`、`技术技巧`这样内容项的积累。
+
+而小傅哥带着大家做项目，也是一直秉承着一贯的高质量项目设计和编码落地。让大家学习时不只是简单的理解业务流程，还包括；怎么拆分业务边界、怎么进行工程建模、怎么驾驭设计模式、怎么处理复杂场景。所以大家学习后的反馈是：`”真爽，就像看爽文一样，每个项目都让我有非常高的提升！”`
+
+所以，在这次的新项目中，你又会看到不一样的设计模式技巧的运用，来拆解复杂的业务流程。—— 全项目从0到1，全程手把手视频+小册，冲起来非常爽。
+
+## 一、类“拼多多”项目
+
+本次小傅哥带着大家做的项目，是一个类“拼多多”的《拼团交易平台系统》，这类项目都可以被归类为营销系列系统。在各个互联网公司属于通用类的业务场景，也是流量规模最大，系统最为复杂的系统。所以学习起来收获也是非常大的。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-1-1-02.png" width="650px">
+</div>
+
+- 看着页面挺简单，其实服务端一点也不好整。😂 这样一套东西的实现，需要非常好的设计，才能驾驭的了不断的需求迭代。
+- 有时候看到网上简单几行的服务端代码也能实现这样一个类似的流程，不过那东西就是闹玩的小儿科，实际公司里压根不会那么干。学习项目的时候，总得要知道公司里，`真实的业务模型` + `不错的架构设计` + `良好的编码实现`，缺一不可，否则跟没学也差不多。
+
+## 二、编码3千行，进度35%
+
+《拼团交易平台系统》整个项目分为；`系统设计`、`服务实现`、`外部对接`、`开发运维`，目前系统设计3节已完成，服务实现开发了5节。😋 嘿嘿，马上25年的元旦和春节假期来了，又可以嘎嘎往前冲进度了！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-241229-01.png" width="950px">
+</div>
+
+- 课程地址：[https://bugstack.cn/md/project/group-buy-market/group-buy-market.html](https://bugstack.cn/md/project/group-buy-market/group-buy-market.html)
+- 进度说明：课程于11.11日启动，平均每周更新1节，遇到放假的时候就会加更。基本奔着25年的3-4月交付出一个可运行部署和写简历的版本。现在跟进学习，到时候简历就又有一个新项目啦！
+
+## 三、不只是完成功能！
+
+其实每个项目的学习，不只是学个流程，还要学它的系统设计。看看这样一个当前的场景下，做了哪些边界的拆分和功能逻辑的模型处理。从这部分开始才能体现出对项目的深度理解。
+
+### 1. 系统建模
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-1-3-03.png" width="950px">
+</div>
+
+- 项目学习时，在编码前，会进行模型结构的分析「这部分有视频教程」。教大家用面向对象的思维理解系统是如何拆分边界的。
+- 当你有了更高的视角俯视系统，在到后面去开发时，就会有非常爽的编码指引。
+
+### 2. 设计模式
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-241229-02.png" width="600px">
+</div>
+
+- 每一节功能实现时，会帮大家理解和运用设计模式，让你知道拆分边界的重要性，以及如何做出高质量的编码。
+- 设计模式理解（你可以在这里补充学习，到项目中都是实战）：[https://bugstack.cn/md/develop/design-pattern/2024-08-25-chain-tree.html](https://bugstack.cn/md/develop/design-pattern/2024-08-25-chain-tree.html)
+
+### 3. 工程结构
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-3-02.png" width="950px">
+</div>
+
+- 如工程结构全程视频手把手的教你学习逻辑功能的编码实现，而且这里会运用如模型设计拆分边界并进行编码功能逻辑实现。
+- 注意；编码时会设计出非常合适的模型，拆分功能逻辑边界。有了这些的积累，以后面试可以讲好长时间，在工作中也能运用起来。
+
+## 四、加入学习
+
+小傅哥的项目是成体系的，有不同的难度进阶。你可以循序渐进的学习，逐步的从小白成长为技术大拿。如图；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/zsxq-241007-02.png" width="550px">
+</div>
+- 首先，这一整套全体系的学习课程比私教培训实惠，更比培训班上万的培训费便宜。也就是培训班1天的💰，就能学习到这一整套内容了。
+- 之后，你学习的整套课程，就是小傅哥这个架构师自己全部原创编写的。这也就是说，你所提到的任何问题，小傅哥都能给你解答和讨论。
+- 那么，这么实惠的课程，成体系的课程，还是架构师编写的。还有什么可犹豫的，完全可以撸起来了！
+
+> 🧧优惠券，关注小傅哥公众号「码农会锁」回复「星球」获得，数量有限，先到先得！
diff --git a/docs/md/project/group-buy-market/promotion/group-buy-market-v2.md b/docs/md/project/group-buy-market/promotion/group-buy-market-v2.md
new file mode 100644
index 000000000..2150d69dc
--- /dev/null
+++ b/docs/md/project/group-buy-market/promotion/group-buy-market-v2.md
@@ -0,0 +1,247 @@
+---
+title: 总结通用模型设计提取，设计模式玩的贼6！
+lock: no
+---
+
+# 《拼团交易平台系统》总结通用模型设计提取，设计模式玩的贼6！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是小傅哥。
+
+近几周在做公司的一个项目重构，有多复杂呢！`整个工程近40万行代码`，`重构部分单个类超过3000行`。历史最长周期的代码有`快10年以上`。而这东西到我手了，再继续这么写，早晚搞出事故！**所以，我决定改变一下。**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250118-01.gif" width="200px">
+</div>
+
+**你不可能停了业务需求再重构！**
+
+在互联网公司中，产品需求交付永远是第1位的，他们不关心你代码是怎么实现的。但不要出问题，出了问题就是你的问题。
+
+而长期需求迭代经历数年的代码，早已腐化的非常严重。但重构又绝对是非常考验工程师的业务经验和技术能力的。**往往重构不佳，就从维护一份屎山，到维护两份啦！**
+
+但好在，我的工程落地经验积累较多，通过巧妙的设计模式运用，能从复杂的流程中划分出边界结构，从而降低业务功能的理解难度。与此同时，为了让其他的伙伴在不是特别能熟练使用设计模式的情况下，我把设计模式常用的模型结构，独立成一个单独的组件包，主要引入就可以按照这样的结构来开发代码。从一定程度上，让大家的代码都能在不错的水平上。
+
+>如果，你也想提高自己的代码能力和工程驾驭能力，那么可以跟着小傅哥一起学习下。
+
+## 一、实践出真知
+
+编程这东西，最好的学习方式就是实践。拿一个真实项目，结合实际的需求，上手操作一遍，小白也能扎扎实实的学习到实际的技术运用。
+
+所以，小傅哥为了让大家能学习到，关于工程中运用设计模式，解决实际场景的重构问题。专门提供了一个新的项目，在项目中解耦出标准的通用设计模型结构，再到需求中运用处理实际问题。
+
+这个项目就是小傅哥的技术社群，星球「码农会锁」，最新的第14个项目《拼团交易平台系统》，结合实际场景设计和落地的设计模式方案。—— 这个项目，会给你设计模式更牛的认知，妥妥的让你可以在自己的项目使用上设计模式！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-241109-01.png" width="800px">
+</div>
+
+`拼多多`、`京东`、`腾讯`，都有很多这样的拼团场景，之所以选择这样的业务需求，就是让大家可以结合实际的项目来学习真实的技术。**这套项目目前已经进行了13节，全程视频+小册，手把手带着设计和编码。**
+
+>接下来，我们就看看，小傅哥是怎么带着大家玩转设计模式的！
+
+## 二、提炼通用模型
+
+`条条大路通罗马，但放到项目工程中，就有点受不了了！`
+
+咋回事呢？🤔
+
+只要不加规范，同样是做规则树、责任链、策略模式，都能有非常多的方式。那么，每来一个新人，就可能再多出来一份新的设计方式。这些一类的但非常差异化的东西，在下一个人要迭代需求的时候，就会有非常多的地方，有不同的改法。可能想死的新都有。
+
+所以，为了把这些东西规范化，小傅哥设计了一套模型模板，单独提炼于项目需求逻辑之外。所有，有需要使用的场景，都可以引入使用。大家都在一个标准下使用设计模式，维护、迭代、扩展，也都非常容易。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250118-02.png" width="400px">
+</div>
+
+- 首先，随着拼团项目的开发，定义2套了标准的通用设计模式结构。2种模式的责任链和1套规则树。这套责任链还用到了大家常学的数据结构中的链表设计和实现。
+- 之后，这套模型非常巧妙的运用到业务场景中。举例像是规则树，还提供了多线程数据异步加载，自由化功能逻辑编排。这样的设计模式，可以解决非常多的场景问题。
+
+> 为了更好的理解这样的模型运行，接下来，小傅哥甩个图给大家感受下！—— 小傅哥，画图可牛了，见图就知意。
+
+## 三、小图很美！💐
+
+如图，是拼团的部分流程。营销类场景的系统都是很复杂的，它的流程节点非常多，也经常做扩展和调整。所以要做非常细腻的设计，满足复杂流程的实现。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250118-06.png" width="600px">
+</div>
+
+- 以上这两部分流程分别包括试算和锁定优惠，这里会使用到规则树和责任链进行实现。
+- 下面，就介绍下关于规则树和责任链的设计和使用。
+
+### 1. 规则树
+
+`千万别觉得设计模式没有用`，否则也不会那么多源码框架中，会有那么多设计模式使用。MyBatis 一个框架，都用了10种设计模式！
+
+像是这些设计模式，合理的设计好，是真的可以解决非常复杂的业务流程编码，让代码变得优雅。既不会有那么多的 if···else，也不会让代码逻辑成片的堆到一个类中。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250118-03.png" width="600px">
+</div>
+
+- 如图，这是一个规则树模型，解决的拼团中实际的场景业务。从根节点、开关节点、营销节点、人群节点，再到最终的正常和异常结束节点。每个节点分别处理自己的业务流程。
+- 你可以想象，如果没有这样的设计模式模型结构，那么在代码中，就是一个大方法中，一堆的逻辑编写，维护的成本是非常高的。
+
+**展示一段代码，让兄弟👬🏻看看这是啥样的！**
+
+```java
+@Slf4j
+@Service
+public class MarketNode extends AbstractGroupBuyMarketSupport<MarketProductEntity, DefaultActivityStrategyFactory.DynamicContext, TrialBalanceEntity> {
+
+    @Resource
+    private ThreadPoolExecutor threadPoolExecutor;
+    /**
+     * <a href="https://bugstack.cn/md/road-map/spring-dependency-injection.html">Spring 注入详细说明</a>
+     */
+    @Resource
+    private Map<String, IDiscountCalculateService> discountCalculateServiceMap;
+    @Resource
+    private ErrorNode errorNode;
+    @Resource
+    private TagNode tagNode;
+
+    @Override
+    protected void multiThread(MarketProductEntity requestParameter, DefaultActivityStrategyFactory.DynamicContext dynamicContext) throws ExecutionException, InterruptedException, TimeoutException {
+        // 异步查询活动配置
+        QueryGroupBuyActivityDiscountVOThreadTask queryGroupBuyActivityDiscountVOThreadTask = new QueryGroupBuyActivityDiscountVOThreadTask(requestParameter.getActivityId(), requestParameter.getSource(), requestParameter.getChannel(), requestParameter.getGoodsId(), repository);
+        FutureTask<GroupBuyActivityDiscountVO> groupBuyActivityDiscountVOFutureTask = new FutureTask<>(queryGroupBuyActivityDiscountVOThreadTask);
+        threadPoolExecutor.execute(groupBuyActivityDiscountVOFutureTask);
+
+        // 异步查询商品信息 - 在实际生产中，商品有同步库或者调用接口查询。这里暂时使用DB方式查询。
+        QuerySkuVOFromDBThreadTask querySkuVOFromDBThreadTask = new QuerySkuVOFromDBThreadTask(requestParameter.getGoodsId(), repository);
+        FutureTask<SkuVO> skuVOFutureTask = new FutureTask<>(querySkuVOFromDBThreadTask);
+        threadPoolExecutor.execute(skuVOFutureTask);
+
+        // 写入上下文 - 对于一些复杂场景，获取数据的操作，有时候会在下N个节点获取，这样前置查询数据，可以提高接口响应效率
+        dynamicContext.setGroupBuyActivityDiscountVO(groupBuyActivityDiscountVOFutureTask.get(timeout, TimeUnit.MINUTES));
+        dynamicContext.setSkuVO(skuVOFutureTask.get(timeout, TimeUnit.MINUTES));
+
+        log.info("拼团商品查询试算服务-MarketNode userId:{} 异步线程加载数据「GroupBuyActivityDiscountVO、SkuVO」完成", requestParameter.getUserId());
+    }
+
+    @Override
+    public TrialBalanceEntity doApply(MarketProductEntity requestParameter, DefaultActivityStrategyFactory.DynamicContext dynamicContext) throws Exception {
+        log.info("拼团商品查询试算服务-MarketNode userId:{} requestParameter:{}", requestParameter.getUserId(), JSON.toJSONString(requestParameter));
+
+        // 获取上下文数据
+        GroupBuyActivityDiscountVO groupBuyActivityDiscountVO = dynamicContext.getGroupBuyActivityDiscountVO();
+        if (null == groupBuyActivityDiscountVO) {
+            return router(requestParameter, dynamicContext);
+        }
+
+        GroupBuyActivityDiscountVO.GroupBuyDiscount groupBuyDiscount = groupBuyActivityDiscountVO.getGroupBuyDiscount();
+        SkuVO skuVO = dynamicContext.getSkuVO();
+        if (null == groupBuyDiscount || null == skuVO) {
+            return router(requestParameter, dynamicContext);
+        }
+
+        // 优惠试算
+        IDiscountCalculateService discountCalculateService = discountCalculateServiceMap.get(groupBuyDiscount.getMarketPlan());
+        if (null == discountCalculateService) {
+            log.info("不存在{}类型的折扣计算服务，支持类型为:{}", groupBuyDiscount.getMarketPlan(), JSON.toJSONString(discountCalculateServiceMap.keySet()));
+            throw new AppException(ResponseCode.E0001.getCode(), ResponseCode.E0001.getInfo());
+        }
+
+        // 折扣价格
+        BigDecimal deductionPrice = discountCalculateService.calculate(requestParameter.getUserId(), skuVO.getOriginalPrice(), groupBuyDiscount);
+        dynamicContext.setDeductionPrice(deductionPrice);
+
+        return router(requestParameter, dynamicContext);
+    }
+
+    @Override
+    public StrategyHandler<MarketProductEntity, DefaultActivityStrategyFactory.DynamicContext, TrialBalanceEntity> get(MarketProductEntity requestParameter, DefaultActivityStrategyFactory.DynamicContext dynamicContext) throws Exception {
+        // 不存在配置的拼团活动，走异常节点
+        if (null == dynamicContext.getGroupBuyActivityDiscountVO() || null == dynamicContext.getSkuVO() || null == dynamicContext.getDeductionPrice()) {
+            return errorNode;
+        }
+
+        return tagNode;
+    }
+
+}
+```
+
+这是其中的一个营销节点，处理拼团营销试算的过程；
+
+1. multiThread 负责异步多线程方式加载数据，节省数据获取时间。
+2. doApply 处理业务流程，最后用 router 路由到下一个节点。
+3. get 是获取到下一个节点，是走到哪里由这块判断。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250118-04.png" width="400px">
+</div>
+
+> 这套结构模型可以解决非常多的业务场景，而且每一个类都可以非常清晰的表达出具体的业务逻辑。无论以后是维护代码、迭代需求还是排查线上问题都变得很容易。
+
+### 2. 责任链
+
+规则树与责任链相比，规则树会有很多分叉流程，但责任链比较轻量主要负责单链路流程，在编码过程中不需要考虑流程的流转。相对来说更轻量了。
+
+这里小傅哥设计了2套责任链模型，model1 - 单例链、model2 - 多例链（动态组装多套）。如图；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250118-05.png" width="650px">
+</div>
+
+- 如图，ILink 使用了数据结构责任链模型，ILogicHandler 为处理具体的业务功能逻辑。这里巧妙的设计在于把链的管理和业务逻辑的受理进行拆分，之后再由 LinkArmory 进行链路装配。**「当你看到代码的时候会觉得这真爽！原来写代码可以这样有意思」**
+- 因为 LinkedList 实现如链表一样的方法，有添加，也有摘除链，所以还可以根据数据库配置动态处理链的实例化。
+
+```java
+@Service
+public class Rule02TradeRuleFactory {
+
+    @Bean("demo01")
+    public BusinessLinkedList<String, DynamicContext, XxxResponse> demo01(RuleLogic201 ruleLogic201, RuleLogic202 ruleLogic202) {
+
+        LinkArmory<String, DynamicContext, XxxResponse> linkArmory = new LinkArmory<>("demo01", ruleLogic201, ruleLogic202);
+
+        return linkArmory.getLogicLink();
+    }
+
+    @Bean("demo02")
+    public BusinessLinkedList<String, DynamicContext, XxxResponse> demo02(RuleLogic202 ruleLogic202) {
+
+        LinkArmory<String, DynamicContext, XxxResponse> linkArmory = new LinkArmory<>("demo02", ruleLogic202);
+
+        return linkArmory.getLogicLink();
+    }
+
+    @Data
+    @Builder
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class DynamicContext {
+        private String age;
+    }
+
+}
+```
+
+- 之后就可以动态的使用这套责任链完成功能需求的处理。demo01、demo02，分别组装了自己的责任链。
+
+> 以上，在小傅哥的全部项目中也只是冰山一角，如果你加入小傅哥的社群学习，我还会让你感受到更多的关于工程在实际场景下设计的魅力！
+
+## 四、一套学习进阶路线图！
+
+**10年互联网大厂的经历，得出**；`最快的成长方式，是不要重复做一件事，而是能成体系的，有阶段性的成长。`
+
+为此小傅哥做了一整套的实战学习进阶项目，从小白到大佬，全程视频手把手带着从0到1，一步步完成项目的设计、开发和上线。在整套内容学习过程中，小傅哥为你提供了非常好的技术交流社群，及时解决学习问题。还包括调试你的问题代码，带你快速🔜出坑！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/zsxq-241007-02.png" width="550px">
+</div>
+
+**扫码加入即可获得全部项目学习！**
+
+- 首先，这一整套全体系的学习课程比私教培训实惠，更比培训班上万的培训费便宜。可能也就是培训班1天的💰钱，就能学习到这一整套内容了。
+- 之后，你学习的整套课程，就是小傅哥这个架构师自己全部原创编写的。这也就是说，你所提到的任何问题，小傅哥都能给你解答和讨论。
+- 那么，这么实惠的课程，成体系的课程，还是架构师编写的。还有什么可犹豫的，完全可以撸起来了！
+
+>🧧 注意，关注小傅哥公众号「bugstack虫洞栈」回复「星球」可以领取加入优惠哦！
diff --git a/docs/md/project/group-buy-market/promotion/group-buy-market-v3.md b/docs/md/project/group-buy-market/promotion/group-buy-market-v3.md
new file mode 100644
index 000000000..4dce14afc
--- /dev/null
+++ b/docs/md/project/group-buy-market/promotion/group-buy-market-v3.md
@@ -0,0 +1,145 @@
+---
+title: 第1阶段完成上线，可体验！
+lock: no
+---
+
+# 《拼团交易平台系统》第1阶段完成上线，可体验！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+经过春节假期🧨，接近于连续日更的一顿狂卷🌪🤨，第14个最新**拼团项目**，第一阶段已完结上线啦！只要`花费2周左右`的学习，就可以让简历有一个**全网最新的、又很硬核的编程项目**！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250118-01.gif" width="200px">
+</div>
+
+**跟着小傅哥学习的好处是什么？**
+
+凌晨3点睡醒，还能在线回复社群伙伴的技术问题 😂，所有，在学习这方面，有小傅哥这样的卷王，为你保驾护航✈️。你可以平平稳稳的推进项目的进度，并且学习到有质量的、符合实际需求的真实项目。`”伙伴说：学习时候，最希望遇到问题，有人能指点！“`
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250205-01.png" width="350px">
+</div>
+
+不少小伙伴反馈，之前学习的一些项目，遇到很多问题都没人解决，很耽误学习进度。尤其是都啃了一半了，放弃觉得浪费时间，不放弃学不下去。所以，在学习的时候，一定要加入有质量的社群，真心为伙伴们成长的社群，有责任心的社群！**把新人编程学习的伙伴当孩子一样培养。谁还不是从小白阶段过来的！**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250205-02.png" width="150px">
+</div>
+
+那么，当你体验过小傅哥的实战项目，就会感受到，这才是真的企业级项目。通过项目的学习，全程带着你从需求分析、功能设计、架构搭建、编码实现、设计模式运用，再到发布上线，全程视频手把手 + 技术小册，一步步带你完成！💐
+
+- 项目地址：[https://bugstack.cn/md/project/group-buy-market/group-buy-market.html](https://bugstack.cn/md/project/group-buy-market/group-buy-market.html)
+- 在线体验：[https://gaga.plus/](https://gaga.plus/)
+- 加入社群：[https://t.zsxq.com/Yfbwo](https://t.zsxq.com/Yfbwo) - 关注公众号「`bugstack虫洞栈`」回复「`星球`」获得优惠券。
+
+> 🧧 文末提供了加入红包，一次加入可以拿下14个实战项目，非常划算！
+
+## 一、能学到啥
+
+该项目是互联网中大厂，非常常见的C端场景，营销类促进支付履约类实战项目，拼团交易平台系统。你可以在`美团`、`京东`、`拼多多`、`腾讯`等互联网产品中，都能看到拼团类场景，所以学习一个这样的项目，到面试了才能有和面试官聊的起劲。
+
+- 业务，深入理解拼团场景的业务，并从产品 PRD 入手开始进行系统的分析和设计。
+- 前端，本次项目使用了最新的AI大模型DeepSeek，设计拼团UI，并处理UI与服务端接口的对接。效果非常不错。
+- 后端，分析业务场景需求，设计系统领域模型，构建系统分层架构。这些都是一个程序员👨🏻‍💻必须掌握的东西。但不是所有项目都能学到这些东西。
+- 后端，熟练使用 Spring、SpringBoot、MyBatis 等开发框架技术，并理解和使用 Spring 高级技巧进行设计和编码。
+- 后端，提炼和抽象通用的设计模式框架，多种责任链、规则树，让项目业务代码更加轻松的使用设计模式。
+- 后端，通过多线程异步同时加载多类数据，提高拼团营销优惠试算的能力。
+- 后端，熟练使用 okhttp3、retrofit2 框架，封装回调外部数据接口。拼团结算结束后，回调三方服务。
+- 后端，基于 Redis BitMap 设计人群标签，限定用户参与、用户展示。
+- 运维，熟练使用 Docker 在本地和服务端的配置和部署应用，以及在本地构建前后端镜像。
+- 运维，熟练掌握 Git、GitCode，对工程代码的管理，推送、拉取、切换分支、合并代码等操作。
+
+此外，小傅哥会把系统开发过程中的思考、设计、编码，录制⏺成完整的全程手把手带着学习的视频，让大家可以学习到的更多、更细、更深！
+
+>小傅哥作为面试官，已经把面试中最容易考察的能力项，通过一个个功能的方式渗透到项目中。潜移默化的在面试的时候，就会回答出非常多有力的技术解决方案。
+
+## 二、项目展示
+
+本次项目是一个包含 `前后端 + Dev-Ops` 的全栈式综合编程实战项目，并且小傅哥的这些项目都是可以真实上线使用的，所以你会看到陆续完成的这些项目，会通过微服务的方式进行对接使用，而这样的方式，才是公司里真实的情况。
+
+此次的拼团 UI 设计，运用了 DeepSeek 进行设计；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250205-03.png" width="650px">
+</div>
+
+> 体验地址：[http://117.72.38.125:3080](http://117.72.38.125:3080) - 临时体验，非长期有效
+
+### 1. 课程目录
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250205-08.png" width="550px">
+</div>
+
+- 一阶段，24节，视频在12小时多。预计可在2周左右学习完成。
+- 学习后，可以写简历，投递春招或者实习。项目内容量很细腻，业务流程很完善。还有很多创新点，都可以面试讲。
+
+### 2. 核心流程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-14-01.png" width="950px">
+</div>
+
+- 如图，为从营销锁单、营销结算、回调的核心流程。也就是一个拼团的核心正向执行链路。
+
+### 3. 库表设计
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250205-04.png" width="850px">
+</div>
+
+- 项目课程开始会带着你分析需求并做库表的设计，这个项目符合实际的业务场景，所以设计的库表也会非常细腻。
+
+### 4. 设计模式
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250118-03.png" width="650px">
+</div>
+
+- 如图，这是项目中一个规则树模型，解决的拼团中实际的场景业务。从根节点、开关节点、营销节点、人群节点，再到最终的正常和异常结束节点。每个节点分别处理自己的业务流程。
+- 你可以想象，如果没有这样的设计模式模型结构，那么在代码中，就是一个大方法中，一堆的逻辑编写，维护的成本是非常高的。
+
+## 三、学习辅助
+
+### 1. 遇到问题怎么办？
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250205-05.png" width="550px">
+</div>
+
+- 当你学习项目遇到问题时，小傅哥会为你提供全程的指引，帮你解决问题。
+- 所以跟着小傅哥学习，一点也不用慌，嘎嘎冲就是了！
+
+### 2. 课程详细改动点
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250205-06.png" width="850px">
+</div>
+
+- 对于复杂的业务流程实现，会把所有的改动点，依次的给你罗列出来。同时还有视频教程，一步步带着你完成。
+
+### 3. 全程有视频教程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250205-07.png" width="850px">
+</div>
+
+- 课程的视频，分为业务讲解、功能设计、编码改动，之后在一步步带着你手写实现。即使你是小白也能跟下来学习。
+
+## 四、项目路线
+
+跟着小傅哥学习，是成体系的学习成长，有完整的不同难度的进阶路线学习。这里有小白入门，再到小白深造，之后开始进阶，这个过程中有业务，也有组件，可以让你非常全面的成长。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/zsxq-241007-02.png" width="550px">
+</div>
+
+- 首先，这一整套全体系的学习课程比私教培训实惠，更比培训班上万的培训费便宜。可能也就是培训班1天的💰钱，就能学习到这一整套内容了。
+- 之后，你学习的整套课程，就是小傅哥这个架构师自己全部原创编写的。这也就是说，你所提到的任何问题，小傅哥都能给你解答和讨论。
+- 那么，这么实惠的课程，成体系的课程，还是架构师编写的。还有什么可犹豫的，完全可以撸起来了！
diff --git a/docs/md/project/group-buy-market/promotion/group-buy-market-v4.md b/docs/md/project/group-buy-market/promotion/group-buy-market-v4.md
new file mode 100644
index 000000000..a00fe7cca
--- /dev/null
+++ b/docs/md/project/group-buy-market/promotion/group-buy-market-v4.md
@@ -0,0 +1,104 @@
+---
+title: 第2阶段完成上线，可查阅！
+lock: no
+---
+
+# 《拼团交易平台系统》第2阶段完成上线，可查阅！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+😂 不少加入小傅哥社群的伙伴，在体验过众多项目后，说：“小傅哥，是在做个小京东吧？”，有`小型支付商城`、`有营销抽奖`、`有积分兑换`、`有各类组件`，这次又有了**拼团营销 + 小型商城**对接，真的牛皮！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/business-behavior-monitor/business-behavior-monitor-01.png" width="150px">
+</div>
+
+**我们做项目，就是这样**
+
+讲道理，学习编程来说，就是不断地`打破认知`，`拓宽思维`，用实际的贴合企业中的项目，填补自己的知识储备。而那些玩具项目和大号的CRUD，都没法提高我们的编程能力。所以，小傅哥（10年+大厂经验）带着大家做的项目，都是以真实企业场景的业务诉求，设计方案和落地工程，并且会带着你，完成项目的云服务器上线。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-v4-01.png" width="450px">
+</div>
+
+小傅哥社群里的项目，除了`拼团营销 + 小型商城`，还有非常多的项目，都是可以组合使用的，如；openai 应用 + 大营销、动态线程池 + 拼团、IM + ChatGLM SDK、API 网关 + Lottery等。这不就妥妥的公司中一个项目组里在做的事嘛！
+
+>👨🏻‍💻文末提供了小傅哥社群7套组件项目、7套业务项目、1套手写源码教程，可以🧧加入获取。
+
+## 一、两套微服务对接方案
+
+介绍下小傅哥技术社群里这两套微服务和对接；
+
+- **小型支付商城**：接入微信扫码鉴权、支付宝沙箱环境，串联订单创建、唤起收银台，接收支付完成回调，扭转订单状态，模拟发货。完成真实的交易流程。
+
+- **拼团交易营销**：提供商品下单支付链路中的营销微服务设计，处理商品优惠试算、支付营销锁单、支付营销结算。促进商品交易履约率。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-3-4-01.png" width="950px">
+</div>
+
+如图，是两套微服务的对接链路。
+
+- 首先，在小型支付商城，创建订单的过程中，调用拼团营销锁单。这个时候就拿到了当笔订单的优惠金额。之后创建支付订单唤起收银台，之后用户就可以按照最终的优惠金额进行支付了。
+- 之后，在支付完成后，收到回调消息，进行营销拼团进度结算。直至拼团组队进度完成，在回调给支付商城，触达交易结算。
+
+这样一整套完整的交易营销流程，是非常真实的实际场景对接处理方案。尤其是营销场景下的复杂的试算、规则的过滤，再到结算的处理，都是使用了非常巧妙的编码操作，使用了非常好的设计模式进行设计。这块非常有的学！
+
+## 二、对接后，上线效果
+
+从用户，`微信扫码登录`、`进入商品详情页`、`点击开团`、`确认支付`、`跳转支付宝`、`支付回调`、`营销结算`、`支付结算`、`模拟发货`。一整套流程完整实现。页面端效果；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-v4-07.png" width="950px">
+</div>
+
+- 小傅哥的课程会全程带着你完成两套微服务的对接和云服务器操作上线，你可以体现一整套的小型商城 + 拼团营销的上线使用效果。
+- 并且在这套系统上线中，会设计 Nginx 负载，轮训调用后端拼团服务。
+
+> 就这么学东西，才能嘎嘎有收获！
+
+## 三、课程目录
+
+这是一套拼团交易平台，包括了小型支付商城课程 + 拼团营销平台系统；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-v4-04.png" width="650px">
+</div>
+此套课程全程视频手把手 + 技术小册文档，想怎么学习就怎么学习，让小白快速入门上手完成。
+
+
+### 1. 小型支付商城
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-v4-02.png" width="450px">
+</div>
+
+- 25节课程，MVC架构写一遍，DDD架构写一遍。非常适合新人上手的一套课程，全程视频手把手学习。
+
+### 2. 拼团营销平台系统
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-v4-03.png" width="450px">
+</div>
+
+- 28节课程，一阶段对接静态页面，二阶段与小型支付商城微服务对接。
+- 拼团项目，还会继续迭代，增加更多细节。让小伙伴满足当前找实习的前提下，可以继续学习，完善自己的知识储备。
+
+## 四、大家的认可！
+
+小傅哥，做的项目，一向以高质量著称。在每个项目里，都花费大量的时间，将互联网公司里的实战经验，用到项目实现中。所以，你会看到非常多的场景解决方案和极其巧妙的工程设计手段。因此，也得到了大家的认可。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-v4-05.png" width="450px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-v4-06.png" width="450px">
+</div>
+
+> 就这，我只能说，你越早加入，能力提高的越好！
diff --git a/docs/md/project/group-buy-market/promotion/group-buy-market-v5.md b/docs/md/project/group-buy-market/promotion/group-buy-market-v5.md
new file mode 100644
index 000000000..bdbbc4c22
--- /dev/null
+++ b/docs/md/project/group-buy-market/promotion/group-buy-market-v5.md
@@ -0,0 +1,438 @@
+---
+title: Ai MCP + ELK 系统日志，排错提效 100%！
+lock: no
+---
+
+# Ai MCP + ELK 系统日志，排错提效 100%！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+自从 Ai MCP 模型上下文协议，2024年11月，推出开放标准以后。2025年，就进入了全面的 MCP 服务落地。也正因如此，程序员👨🏻‍💻的学习就又多了一项新的应用技能，同时也成了面试热门问题。如：**“你的项目，有使用 AI 方面的能力进行提效吗？”** 解封下码农的双手🙌🏻！
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-0-00.png" width="250px"/>
+</div>
+
+**我能哪些方面使用 Ai 提效呢？**
+
+在互联网程，序员工程开发方面，关于 Ai 提效最为常见的，也是市面上使用最多的，就是各类的 Ai 编码软件。如 cursor、trae.ai、IntelliJ IDEA 中的各类 Ai 插件，都可以辅助我们完成项目的编码操作。甚至一些简单的 HTML 页面，几乎在刚开始开发阶段，可以快速搭建起来，确实非常提效。
+
+不过这些都是固定的软件，他们并没有深度结合到业务场景中，从整个研发的生命周期看，还有非常多的节点可以被 Ai 提效。如；需求评审、研发设计、系统发布、代码评审、单测用例、业务监控、问题排查&故障分析等。都可以深入自身的业务，运用 Ai 开发进行提效。
+
+这里尤其是问题排查和故障分析，在互联网企业中，尤其是大厂的业务，几乎每天都要配和运营的反馈的客诉，系统的报警日志，性能的降低反馈，进行人工检索`系统监控`、`日志`、`分析`，这部分要投入大量的人工成本，虽然可能系统并不是真的有问题，但也要一遍遍的排查这些问题。
+
+所以，结合这样的场景，小傅哥在带着大家的实战项目，也逐步的引出关于 Ai 在应用项目上的提效处理。今天分享的一个场景就是基于 Ai MCP 分析系统的 ELK 日志。后面还会分析关于监控、数据库一起分析。
+
+>🧧 文末提供了小傅哥技术社群全套的17个应用实战项目，一次加入可以获得全部的文档、源码、视频，嘎嘎提高能力！
+
+## 一、系统说明
+
+小傅哥带着社群伙伴，做了一套 **《拼团交易平台系统》**，因为拼团是非常重要的 toc 业务场景，也是拼多多、腾讯、京东等服务平台，交易支付时候，最为常见的一种营销手段。它可以通过用户自传播方式增强交易量，也是拼多多最开始起家形成巨大规模的一个业务逻辑。
+
+该系统采用了 DDD 领域驱动设计进行建模，拆分领域模块边界，形成；活动领域、人群领域、交易领域，来构建拼团营销交易流程，达到试算、锁单、结算等步骤流程。这个过程中提炼了通用设计模式，规则树、责任链，可以非常有效的统一的治理流程编排实现。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-v5-01.png" width="750px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-3-4-01.png" width="750px">
+</div>
+
+如图，是两套微服务的对接链路。
+
+- 首先，在小型支付商城，创建订单的过程中，调用拼团营销锁单。这个时候就拿到了当笔订单的优惠金额。之后创建支付订单唤起收银台，之后用户就可以按照最终的优惠金额进行支付了。
+- 之后，在支付完成后，收到回调消息，进行营销拼团进度结算。直至拼团组队进度完成，在回调给支付商城，触达交易结算。
+
+这样一整套完整的交易营销流程，是非常真实的实际场景对接处理方案。尤其是营销场景下的复杂的试算、规则的过滤，再到结算的处理，都是使用了非常巧妙的编码操作，使用了非常好的设计模式进行设计。这块非常有的学！
+
+## 二、配置日志
+
+### 1. 系统部署（ELK）
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-23-02.png" width="750px">
+</div>
+
+- 基于 Docker 部署 ELK 系统，采集上报日志。
+
+### 2. 上报配置
+
+```java
+<!-- 上报日志；ELK -->
+<springProperty name="LOG_STASH_HOST" scope="context" source="logstash.host" defaultValue="127.0.0.1"/>
+
+<!--输出到logstash的appender-->
+<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+    <!--可以访问的logstash日志收集端口-->
+    <destination>${LOG_STASH_HOST}:4560</destination>
+    <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
+</appender>
+
+<root level="info">
+    <appender-ref ref="CONSOLE"/>
+    <!-- 异步日志-INFO -->
+    <appender-ref ref="ASYNC_FILE_INFO"/>
+    <!-- 异步日志-ERROR -->
+    <appender-ref ref="ASYNC_FILE_ERROR"/>
+    <!-- 上报日志-ELK -->
+    <appender-ref ref="LOGSTASH"/>
+</root>
+```
+
+- 通过增加 LogstashTcpSocketAppender 上报系统日志到 ELK。
+
+### 3. 生产日志
+
+开始下面的操作之前，需要启动 SpringBoot 服务，访问接口，让系统产生一些运行日志。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-23-04.png" width="750px">
+</div>
+
+```java
+25-06-08.08:05:08.441 [http-nio-8091-exec-2] INFO  ZJCalculateService     -b601d8d5-ff62-4adb-8260-16d8b6af53ef 优惠策略折扣计算:0
+25-06-08.08:05:08.445 [http-nio-8091-exec-2] INFO  EndNode                -b601d8d5-ff62-4adb-8260-16d8b6af53ef 拼团商品查询试算服务-EndNode userId:xfg04 requestParameter:{"channel":"c01","goodsId":"9890001","source":"s01","userId":"xfg04"}
+25-06-08.08:05:08.451 [http-nio-8091-exec-2] INFO  MarketIndexController  -b601d8d5-ff62-4adb-8260-16d8b6af53ef 查询拼团营销配置完成:xfg04 goodsId:9890001 response:{"code":"0000","data":{"activityId":100123,"goods":{"deductionPrice":20.00,"goodsId":"9890001","originalPrice":100.00,"payPrice":80.00},"teamList":[],"teamStatistic":{"allTeamCompleteCount":0,"allTeamCount":2,"allTeamUserCount":4}},"info":"成功"}
+```
+
+- 访问的是拼团试算接口，产生一些数据运行日志。在这个过程中，会多次访问系统，触发拼团接口的限流操作。多一些日志也能更好的让 Ai MCP 进行分析。
+
+### 4. 查看日志
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-23-07.png" width="950px">
+</div>
+
+- 配置文章后，访问 Kibana 数据可视化后台，这会你可以看到上报上来的日志信息。
+- 到这里，日志配置完成。接下来，我们就可以就 Ai MCP，来访问日志了。
+
+## 三、日志分析
+
+AI MCP 是小傅哥社群内的另外一套项目，[《DeepSeek RAG、MCP、Agent》](https://t.zsxq.com/GwNZp) 智能体，课程。课程里有讲解如何开发和使用 MCP 服务，以及构建 Agent 智能体。地址：[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp) - `感兴趣的伙伴可以进入学习`
+
+这里小傅哥选择一个 ElasticSearch MCP 服务，对接到咱们的 ELK 日志上，通过对接的 MCP 服务帮我们检索日志。
+
+### 1. 环境说明
+
+- AI 对话客户端；https://claude.ai/download - 不非得使用这个客户端。像是 trae.ai、cursor 等，能配置 mcp 服务的都可以的。
+- 发码平台：https://sms-activate.io/ - `claude.ai 注册需要使用`
+- node 环境，需要 v18+ https://nodejs.org/en/download
+- mcp 服务01；https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem
+- mcp 服务02；https://github.com/elastic/mcp-server-elasticsearch
+
+### 2. 客户端使用
+
+#### 2.1 配置文件
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-23-09.png" width="650px">
+</div>
+
+```java
+{
+  "mcpServers": {
+    "elasticsearch-mcp-server": {
+      "command": "npx",
+      "args": [
+        "-y",
+        "@elastic/mcp-server-elasticsearch"
+      ],
+      "env": {
+        "ES_URL": "http://127.0.0.1:9200",
+        "ES_API_KEY": "your-api-key"
+      }
+    },
+    "filesystem": {
+      "command": "npx",
+      "args": [
+        "-y",
+        "@modelcontextprotocol/server-filesystem",
+        "/Users/fuzhengwei/Desktop"
+      ]
+    }
+  }
+}
+```
+
+- 配置后要重启客户端。注意 `/Users/fuzhengwei/Desktop` 更换为你的文件夹。
+
+#### 2.2 对话提问
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-23-08.png" width="650px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-v5-02.png" width="650px">
+</div>
+
+- 对话提问：`获取所有限流用户，并在 /Users/fuzhengwei/Desktop 创建限流文件写入用户。`
+- 这样他就可以通过 ES 查询我们产生的日志数据，并给出分析报告。
+
+#### 2.3 日志文件
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-23-10.png" width="650px">
+</div>
+
+- 打开产生的日志文件，可以把限流的用户拉取出来。方便我们分析提供问题。
+
+### 3. 代码调用
+
+这部分涉及到星球的 AI Agent 项目，工程地址：[https://gitcode.net/KnowledgePlanet/ai-agent-station-study](https://gitcode.net/KnowledgePlanet/ai-agent-station-study)
+
+#### 3.1 直接调用
+
+```java
+package cn.bugstack.ai.test.spring.ai;
+
+@Slf4j
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class AiAgentMCPESTest {
+
+    private ChatModel chatModel;
+
+    private ChatClient chatClient;
+
+    @Resource
+    private PgVectorStore vectorStore;
+
+    public static final String CHAT_MEMORY_CONVERSATION_ID_KEY = "chat_memory_conversation_id";
+    public static final String CHAT_MEMORY_RETRIEVE_SIZE_KEY = "chat_memory_response_size";
+
+    @Before
+    public void init() {
+
+        OpenAiApi openAiApi = OpenAiApi.builder()
+                .baseUrl("https://apis.itedus.cn")
+                .apiKey("sk-vo81adWzUz1G0LBQ1cF1B804A1E04aC*****可申请")
+                .completionsPath("v1/chat/completions")
+                .embeddingsPath("v1/embeddings")
+                .build();
+
+        chatModel = OpenAiChatModel.builder()
+                .openAiApi(openAiApi)
+                .defaultOptions(OpenAiChatOptions.builder()
+                        .model("gpt-4.1-mini")
+                        .toolCallbacks(new SyncMcpToolCallbackProvider(stdioMcpClientElasticsearch()).getToolCallbacks())
+                        .build())
+                .build();
+    }
+
+    @Test
+    public void test_chat_model_call() {
+        Prompt prompt = Prompt.builder()
+                .messages(new UserMessage(
+                        """
+                                有哪些工具可以使用
+                                """))
+                .build();
+
+        ChatResponse chatResponse = chatModel.call(prompt);
+
+        log.info("测试结果(call):{}", JSON.toJSONString(chatResponse));
+    }
+
+    @Test
+    public void test_chat_model_call_es() {
+        Prompt prompt = Prompt.builder()
+                .messages(new UserMessage(
+                        """ 
+                                查询xfg01日志，DSL 语句；
+                                {
+                                  `index`: `springboot-logstash-2025.06.07`,
+                                  `queryBody`: {
+                                    `size`: 10,
+                                    `sort`: [
+                                      {
+                                        `@timestamp`: {
+                                          `order`: `desc`
+                                        }
+                                      }
+                                    ],
+                                    `query`: {
+                                      `match`: {
+                                        `message`: `xfg01`
+                                      }
+                                    }
+                                  }
+                                }
+                                """))
+                .build();
+
+        ChatResponse chatResponse = chatModel.call(prompt);
+
+        log.info("测试结果(call):{}", JSON.toJSONString(chatResponse));
+    }
+
+    /**
+     * https://sai.baidu.com/server/Elasticsearch%2520MCP%2520Server/awesimon?id=02d6b7e9091355b91fed045b9c80dede
+     * https://github.com/elastic/mcp-server-elasticsearch
+     */
+    public McpSyncClient stdioMcpClientElasticsearch() {
+
+        Map<String, String> env = new HashMap<>();
+        env.put("ES_URL","http://127.0.0.1:9200");
+        env.put("ES_API_KEY","none");
+
+        var stdioParams = ServerParameters.builder("npx")
+                .args("-y", "@elastic/mcp-server-elasticsearch")
+                .env(env)
+                .build();
+
+        var mcpClient = McpClient.sync(new StdioClientTransport(stdioParams))
+                .requestTimeout(Duration.ofSeconds(100)).build();
+
+        var init = mcpClient.initialize();
+
+        System.out.println("Stdio MCP Initialized: " + init);
+
+        return mcpClient;
+
+    }
+
+}
+```
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-23-11.png" width="950px">
+</div>
+
+- 以上代码，就是对接的 mcp 服务，以及通过 `查询xfg01日志，DSL 语句；` 来操作 ES。
+
+#### 3.2 动态调用（Agent）
+
+```java
+private String buildSystemPrompt() {
+    return """
+            你是一个专业的日志分析助手，具备以下能力：
+            1. 可以查询Elasticsearch索引列表 - 使用list_indices()函数
+            2. 可以获取索引字段映射 - 使用get_mappings(index)函数
+            3. 可以执行Elasticsearch搜索 - 使用search(index, queryBody)函数
+            
+            当用户询问限流相关问题时，请按以下步骤执行：
+            
+            **步骤1：探索数据源**
+            - 首先调用list_indices()查看所有可用的索引
+            - 识别可能包含日志信息的索引（通常包含log、logstash等关键词）
+            
+            **步骤2：分析数据结构**
+            - 对目标索引调用get_mappings()查看字段结构
+            - 重点关注message、level、timestamp等字段
+            
+            **步骤3：构建搜索查询**
+            - 使用多种限流相关关键词搜索：限流、rate limit、throttle、blocked、超过限制、黑名单、超频次
+            - 按时间倒序排列结果
+            - 示例查询结构：
+             {
+              `index`: `group-buy-market-log-2025.06.08`,
+              `queryBody`: {
+                `size`: 10,
+                `sort`: [
+                  {
+                    `@timestamp`: {
+                      `order`: `desc`
+                    }
+                  }
+                ],
+                `query`: {
+                  `match`: {
+                    `message`: `xfg01`
+                  }
+                }
+              }
+            }
+            
+            **步骤4：优化搜索策略**
+            - 如果初始搜索结果不理想，尝试使用wildcard查询
+            - 如果需要，使用单一关键词进行精确匹配
+            
+            **步骤5：分析结果**
+            - 从搜索结果中提取用户信息
+            - 识别限流类型（黑名单、超频次等）
+            - 统计触发次数和时间分布
+            - 分析影响的服务和功能
+            
+            **输出格式要求：**
+            - 明确列出被限流的用户ID
+            - 说明限流类型和原因
+            - 提供触发时间和频率信息
+            - 给出分析建议
+            
+            现在开始执行查询任务。
+            """;
+}
+
+@Test
+public void queryRateLimitedUsers() {
+    // 第一步：系统初始化提示词
+    String systemPrompt = buildSystemPrompt();
+    // 第二步：用户查询提示词
+    String userQuery = "查询哪个用户被限流了";
+    // 第三步：构建完整的提示词
+    String fullPrompt = buildFullPrompt(systemPrompt, userQuery);
+    // 第四步：调用AI模型
+    Prompt prompt = Prompt.builder()
+            .messages(new UserMessage(fullPrompt))
+            .build();
+    ChatResponse chatResponse = chatModel.call(prompt);
+    log.info("测试结果:{}", chatResponse.getResult().getOutput().getText());
+}
+
+public String queryRateLimitedUsersStepByStep() {
+    StringBuilder result = new StringBuilder();
+    // 步骤1：查询索引列表
+    String step1Prompt = buildStepPrompt("步骤1：查询所有可用的Elasticsearch索引",
+            "请调用list_indices()函数查看所有可用的索引，并识别可能包含日志的索引。");
+    result.append(executeStep(step1Prompt)).append("\n\n");
+    // 步骤2：获取索引映射
+    String step2Prompt = buildStepPrompt("步骤2：获取日志索引的字段映射",
+            "请对识别出的日志索引调用get_mappings()函数，查看字段结构，重点关注message、level、timestamp等字段。");
+    result.append(executeStep(step2Prompt)).append("\n\n");
+    // 步骤3：搜索限流日志
+    String step3Prompt = buildStepPrompt("步骤3：搜索限流相关日志",
+            "请使用多种限流相关关键词（限流、rate limit、throttle、blocked、超过限制等）搜索日志，按时间倒序排列。");
+    result.append(executeStep(step3Prompt)).append("\n\n");
+    // 步骤4：分析结果
+    String step4Prompt = buildStepPrompt("步骤4：分析限流用户",
+            "请分析搜索结果，提取被限流的用户信息，包括用户ID、限流类型、触发次数等，并生成详细报告。");
+    result.append(executeStep(step4Prompt)).append("\n\n");
+    return result.toString();
+}
+```
+
+```java
+================================================================================
+📝 执行步骤日志:
+================================================================================
+步骤 1: 经过索引查询，我们确定了一个名为 `group-buy-market-log-2025.06.08` 的索引，该索引包含了日志记录。在分析索引字段映射之后，发现字段 `message` 是存储日志内容的主要字段。因此，我们构建了一个搜索查询来查找日志中与“限流”相关的记录。
+
+在向 Elasticsearch 发送查询请求时，首次尝试做了一个布尔查询，但由于格式问题请求失败。随后，我使用了一个更简洁的 `query_string` 查询，该查询成功返回了 16 条相关记录。这些记录主要显示了不同用户超限流量被拦截的情况。 具体限制用户如下：
+
+- 用户标识: `xfg01`
+- 用户标识: `liergou`
+- 用户标识: `xiaofuge`
+- 用户标识: `zhangsan`
+- 用户标识: `xiefeiji`
+
+这些记录均包含了时间戳和其他上下文信息，如日志级别、线程名和来源等。
+```
+
+- 基于提示词和代码逻辑，可以动态执行调用和结果分析。Ai 提示词是构建 Agent 非常重要的一项技术，因为 提示词 = Ai 大脑！
+
+## 四、扩展能力
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-01.png" width="950px">
+</div>
+
+- Ai MCP 服务，也就是 Agent 能力，还可以用于全面的系统运行分析，帮助我们快速的处理线上运行情况。
+
+>好啦，这次我们先分享关于 Ai MCP 如何为日志检索提效。下次我们在分析关于监控处理。
diff --git a/docs/md/project/group-buy-market/promotion/group-buy-market-v6.md b/docs/md/project/group-buy-market/promotion/group-buy-market-v6.md
new file mode 100644
index 000000000..d16c0f347
--- /dev/null
+++ b/docs/md/project/group-buy-market/promotion/group-buy-market-v6.md
@@ -0,0 +1,82 @@
+---
+title: 拼团交易平台逆向流程启动
+lock: no
+---
+
+# 拼团交易平台逆向流程启动
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+经过小傅哥这么多年的努力，👨🏻‍💻认认真真的做编程项目之下，一点点把来自于互联网真实技术教给社群伙伴。现在也是行了起来。在大学里`优秀毕业生分享上`，也能被伙伴认可，拿出来写到黑板上啦！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250629-01.png" width="450px">
+</div>
+
+**他们是这么评价小傅哥的！**
+
+小傅哥在大型互联网，`toc业务场景，工作这么多年`，也确实积累了丰富的业务+技术经验。也深知，对于一个从事此行业的编程人员，应该学习哪些项目才能快速成长。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250629-02.png" width="750px">
+</div>
+
+为此，小傅哥做了一整套项目，`由浅入深，循序渐进`。以不同难度级别的项目，带着小伙伴们稳扎稳打的成长。有了这样的真实场景学习，`既可以`提高自己的编程思维和编码能力，`又能`在面试中讲解出各种场景方案，`还能`为以后入职进入到公司快速融入团队。可以说是，一举多得。
+
+> 🧧 文末提供了全套的实战项目，含有；业务项目、组件项目、创新AI项目，各项目对应的文档、视频、代码，全部提供给大家学习使用。
+
+## 一、项目介绍
+
+**于24年末，小傅哥以线上真实toc业务场景**，设计了一套 **《拼团交易平台系统》**，帮助大家深入学习，`前后端技术`、`分布式架构`、`微服务对接`、`Dev-Ops 发布上线`、`AI MCP + ELK + 普罗米修斯监控`、通用组件扳手工程设计等。可以说学习这样一套项目，就能完整的积累各项互联网toc场景常见方案和通用技术。
+
+像是这样的项目，基本大家在使用各个互联网app的时候，都能体会到拼团的应用。如；`美团拼单`、`滴滴拼券`、`京东/拼多多购物`、`腾讯`等，都可以看到。所以这也是面试中面试官非常喜欢聊的业务和实现方案。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-v5-01.png" width="750px">
+</div>
+
+现在这套项目已经讲解了38节课程，所有的拼团正向流程 + 分布式方案 + Dev-Ops 部署和监控，都已完成。接下来将开启逆向退单流程。也就是7月5日，周末开启。
+
+## 二、业务流程
+
+如图，以用户旅途视角来看整个拼团流程。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-25-01.png" width="700px">
+</div>
+
+- 如图，以上为用户旅途视角的全流程。从运营配置拼团活动，到用户从「小型支付商城（对接的一个场景）」，开始查看带有拼团优惠的上，进行试算，过滤规则。再到参与拼团，完成下单和一系列的流程处理。之后是拼团对于支付收单的入账计算，达成拼团目标后，回调（HTTP/MQ）商城服务，完成整个交易过程。
+- 之后，我们要考虑的是如何处理逆向流程，也就是退单的过程。退单分为当前过程中，拼团是否完成，未完成则根据是否支付了，取消锁单量和完成量。如果拼团已完成，则取消锁单量和完成量，拼团优惠释放后，则回调商城（refundGroupBuySuccess）,完成退单退货服务。
+- 一般，对于已经完成拼团的，有用户退单是不会对其他用户已经完成交易的进行退单的，会造成很差的体验。这部分成本往往由商家和平台分摊，毕竟平台的目的是为了卖货。
+
+## 三、详细设计
+
+### 1. 服务对接
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-3-4-01.png" width="700px">
+</div>
+
+### 2. 正向流程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-25-04.png" width="700px">
+</div>
+
+### 3. 逆向流程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-25-03.png" width="700px">
+</div>
+
+以上，是整个`拼团系统` + `小型支付`的对接和正逆向流程设计。正向流程，已经全部完成。后面我们就要开启逆向流程啦，带着大家完完整整的把项目全部做完。
+
+以上的流程分析，在课程中会有专门的视频讲解，一步步带着大家分析所有过程，以及各项细节。之后在技术社群的伙伴，完成所有的编码。
+
+
+
diff --git a/docs/md/project/group-buy-market/promotion/group-buy-market-v7.md b/docs/md/project/group-buy-market/promotion/group-buy-market-v7.md
new file mode 100644
index 000000000..68ad41d06
--- /dev/null
+++ b/docs/md/project/group-buy-market/promotion/group-buy-market-v7.md
@@ -0,0 +1,182 @@
+---
+title: 第3阶段开发完成，总结复盘
+lock: no
+---
+
+# 第3阶段开发完成，总结复盘
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+**耗时9个月制作，48节课程，微服务分布式架构**，`前后端 + DevOps + AI MCP（场景运用）`，全栈式编程 + 全程视频 + 全套的技术小册，手把手👨🏻‍💻教学，终于完结啦！🎉
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/chatgpt/chatgpt-extra-230905-01.png" width="150px">
+</div>
+
+**讲道理，做项目，就得做公司里真实有的业务。**
+
+我在非常多的互联网业务应用中，都看到过这样一种产品形态，它就是**拼团交易营销场景**，如；`拼多多/京东购物🛒`、`滴滴拼券🧧`、`腾讯开团抢购服务器☁️`、`美团团购☕️`等等，都是以拼团方式增强交易单量的业务场景。所以，如果想面试互联网公司，还是要优先考虑做一些这样的真实场景业务，这样才能和面试官有东西可以讲，而不是什么都没的聊o(╥﹏╥)o。
+
+此套项目，小傅哥已提供了对应的`简历模板`、`面试问题（一直梳理中）`，还有 AI MCP 场景的加入，通过 AI MCP 对接 ELK + 普罗米修斯监控，Ai Agent 智能化分析系统的日志和运行情况。
+
+**本项目，和你之前学习过的一些项目最大的区别，就是！这是真实的业务，全核心流程覆盖，有非常好的架构和编码设计。这块学习后，进入公司完全可以跟着大家一起做需求，而不是瑟瑟发抖的不知道自己要做啥！**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250803-04.png" width="650px">
+</div>
+
+> 文末有加入学习方式，提供全套的课程代码、文档、视频，此外还有额外的16个实战项目一起获取！
+
+## 一、能学到啥
+
+该项目是互联网toc场景的核心业务流程，以真实业务作为背景，实际可上线，可运行为目标，进行系统的需求分析、架构设计、功能实现，过程涵盖设计模式的运用，解决复杂场景问题。让大家感受到，🐂牛逼的代码，从来不是一顿写CRUD！
+
+- 【前端】以 Ai Agent 设计前端 UI，包括 HTML、Div、CSS 等前端编程技术。
+- 【前端】掌握 fetch 方式对后端接口的调用，处理相关的逻辑数据。
+- 【后端】熟练搭建项目工程，学习工程分层结构概率和设计思路。掌握更多的六边形、洋葱、整洁架构。`提高简历技术亮点`
+- 【后端】熟练掌握 Spring、SpringBoot、MyBatis 等开发框架技术，并对框架源码所提供的扩展接口具备运用能力。
+- 【后端】熟练使用 SpringCloud 核心微服务分布式技术栈，包括：Fegin、Sentinel、Nacos、熔断、限流、降级等。`先做功能，后面逐步添加。`
+- 【后端】熟练使用大厂中常用的设计模式手段和设计原则技术，对各类场景的方案设计和落地能力，深度提高自身编码思维和开发技术能力。
+- 【后端】深度学习复杂场景的架构设计、编程思维，如果处理系统功能的边界和上下文的维护。—— 这些东西一定是从实践中才能学习到的。
+- 【后端】熟练使用 Mock 单测工具、JMeter 压测工具，增强代码交付质量。
+- 【后端】熟练掌握异常、枚举、错误码的定义和使用，并学习到如何合理打印服务日志，便于问题排查。
+- 【后端】以通用场景设计为目的，提取共性逻辑为通用的设计框架，涵盖；动态配置、设计模式（规则树、责任链）、限流。
+- 【运维】熟练使用 Docker 在本地和服务端的配置和部署应用，以及在本地构建前后端镜像。
+- 【运维】熟练掌握 Git、GitCode，对工程代码的管理，推送、拉取、切换分支、合并代码等操作。
+- 【运维】熟练使用 Nginx 配置转发服务，并能申请ssl配置https服务。
+- 【运维】熟练使用 Grafana 监控系统 + AI MCP，对系统的 JVM、磁盘、Tomcat、应用(QPS、响应时间、调用量)完整监控。
+
+此外，小傅哥已对全过程都做了需求的分析、功能的设计、编码的精细化处理，让你吃上细糠！也通过这种方式，真正的把你的技术储备整起来，以后进入到公司都是嘎嘎强的选手！
+
+## 二、运行展示
+
+整个拼团交易的流程非常细腻，包括了，一套小型支付 + 拼团营销平台的完整对接，涵盖；`验签`、`扫码/无痕登录`、`试算`、`锁单`、`支付+结算`、`退单+退单`的完整链路流程。如图；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-3-8-03.png" width="750px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-3-8-04.png" width="750px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-3-8-05.png" width="750px">
+</div>
+
+前端页面体现了全部核心流程，看着前端不是太多，但后端支撑整套系统了，写了**1.38万行代码**！
+
+## 三、简历模板
+
+注意：🙅🏻‍ 不要直接复制粘贴简历模板内容！视频提供了 DeepSeek AI 方式编写简历，可以参考。
+
+- **项目名称**：`拼团营销服务系统`、`交易营销场景 - 拼团系统`、`营销拼团交易平台`、`仿拼多多/腾讯/京东，拼团玩法系统（以大厂项目为背书）`、`拼团外卖平台系统（结合其他项目一起组合）` - 参考以上方式编写自己的项目名称，尤其拼团还是一个微服务，可以和很多其他系统组合。
+
+- **项目架构**：`微服务设计`、`分布式架构`、`DDD 领域驱动设计 + 六边形分层架构实现`、`前后端分离技术`
+
+- **核心技术**：SpringBoot、MyBatis、MySQL、Guava、Redis、RabbitMQ、动态配置中心（DCC）、普罗米修斯监控、Docker等 - 如果学习了其他技术栈也可以补充。
+
+- **项目描述**：
+
+  - 方式1（以学习视角介绍）：本项目参考`拼多多`交易购物拼团场景，调研中大厂相关营销业务场景和技术架构方案，设计实现了本套拼团营销服务系统，支持各类营销优惠（直减、折扣、N元购）。该系统以面向对象开发，运用 DDD 拆分领域边界，使用设计模式设计服务功能。提高系统的扩展性和可维护性。
+  - 方式2（以提供服务介绍）：该项目以`拉动/促进/提高`（小型支付商城/外卖点餐/购票出行/...）交易单量为目标，通过设计拼团优惠组队下单为手段，达到增强用户自传播分享私域提高整个交易GMV的结果。三段式描述，`...目标，...手段，...结果`
+  - 方式3（以实际场景介绍）：该项目是以促进Xxx公司Xxx场景的核心营销优惠玩法系统，围绕公司的xxx、yyy、zzz等全部交易业务，设计通用的拼团优惠锁单和组队结算回调服务。此系统分布式架构设计，可支撑单机压测量 xxx tps，tp99 xxx 的数据指标，有效的满足公司的全量的业务场景接入使用。
+
+- **核心方案**：
+
+  - **架构设计**，以 DDD 领域驱动设计，四色建模方式，按照系统功能流程，拆解服务边界。包括；活动域、标签域、交易域。
+
+  - **设计模式**，设计并提炼通用的`责任链`、`规则树`模型框架，解决领域场景中多处，需要使用设计模式解耦复杂流程链路的调度（避免过多的if...else判断）。鉴于多处场景的责任链使用，模块框架设计责任链为执行和链路分离组装，便于工厂可以组合出各类执行责任链，不被不同的链路管理影响（以往的责任链，一般是单例的，会被影响）。
+
+  - **规则过滤**；
+
+    - （举例）以拼团试算场景举例，运用通用设计模式模型框架，完成试算；根节点、切量开关、营销折扣、人群标签、异常兜底等流程串联。设计这样解耦设计，极大的提到了程序的可扩展性。
+    - （举例）以拼团锁单场景举例，拼团锁单场景，使用通用的责任链模型框架，校验活动的有效性（状态、有效期）和用户的参与资格。
+    - （举例）以拼团结算场景举例，拼团结算场景，使用通用的责任链模型框架，校验渠道黑名单配置、拼团组队信息、交易时间属性、订单有效状态等。
+    - （举例）以拼团试算场景举例，在查询优惠配置数据时候，抽象出模板结构，使用 Supplier 函数式编程，设计动态降级、缓存数据和 dao 的后置执行操作。通用模板的设计让所有场景更容易接入。`ActivityRepository#queryGroupBuyActivityDiscountVO`
+
+  - **异步线程**，为提高用户体验，将拼团优惠试算所需的营销类数据加载，由串行改为异步线程并行执行。此执行方式由通用设计模式模型框架提供。（如果由引入星球的动态线程池，也可以在这里增加线程池的管理描述）
+
+  - **功能方案**；
+
+    - （举例）通过 Redis 发布订阅模型，结合 Spring AOP 切面和代理，以自定义注解的方式控制属性信息动态配置。减少系统与 Redis 的 IO 交互，提高对高频场景属性值的使用时间效率。
+    - （举例）设计拼团组队结算的 HTTP、MQ 双重手段，满足外部应用和内部微服务的不同方式对接，增强系统的适配性。同时为了保证整体方案的可靠性，在结算触达时，先异步多线程方式即时触发回调（HTTP、MQ），再通过业务一致性任务数据补偿校验。（MQ、HTTP，都可能因网络原因导致失败，因此需要重试）任务的触达，还增加多分布式锁，让任务互备抢占方式执行，增强系统的鲁棒性设计。
+    - （举例）设计 Redis BitSet/BitMap 人群标签，用于过滤可见和可参与，拼团活动的人群信息。该人群标签可依赖于过往用户数据（交易下单）通过 job 任务完成人群标签的录入。
+    - （举例）通过策略模式，设计拼团折扣（MJ、ZJ、NYG）的计算策略。同时折扣的计算也会通过人群标签过滤，以满足运营策略配置，降低活动风险。
+    - （举例）运用 retrofit2/okhttp3/spring cloud fegin + nginx 负载，对接拼团交易平台锁单服务，以及通过 http 回调和 MQ 监听来处理交易结算。
+    - （举例）`三阶段实现的内容`，通过独占锁处理互备任务抢占执行回调，确保在同一时刻有一个运行的回调任务，提高系统的鲁棒性设计。
+    - （举例）`三阶段实现的内容`，设计Redis无锁化拼团库存抢占和恢复库存处理，减轻数据库行锁独占的压力，提高系统吞吐量。
+    - （举例）`三阶段实现的内容`，抽象通用函数式缓存分级设计，并结合扳手工程DCC动态配置，处理缓存降级到DB设计。
+    - （举例）`三阶段实现的内容`，结合 RateLimiter + DCC 动态配置，实现动态限流配置。
+    - （举例）`三阶段实现的内容`，以 Ai MCP + ELK + 普罗米修斯监控，以 Ai Agent 智能体方式，分析错误日志和异常监控，动态化展示监控报表。
+    - （举例）`三阶段实现的内容`，通过枚举策略，设计多种类型退单（未支付&未成团、已支付&未成团、已支付&已成团），并通过回调处理退单退款。
+
+>以上仅对部分内容做了简历编写，这里还有非常多的内容可以写到简历，可以根据自己的学习和梳理，以及扩展进行简历编写。
+
+## 四、后端设计
+
+### 1. 分层架构
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250803-01.png" width="950px">
+</div>
+
+- 整个系统是一个微服务分布式架构设计，通过两套系统的对接，体现微服务的全流程处理关系。
+- 下面是系统中用到的核心技术栈，框架、组件、监控、部署、发布、上线，可以说是非常全面。
+
+### 2. 工程结构
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250803-02.png" width="550px">
+</div>
+
+- 拼团和交易系统，以面向对象的思维，划分出领域结构。活动域、标签域、交易域、鉴权域、商品域、订单域。
+- 两套系统通过 http/rpc(可配置对接)、mq（RabbitMQ）进行同步和异步交互，因为配有本地消息表，所以可以保证最终一致性。
+- 这里有非常精妙的编码设计，如；工厂模式、组合模式、策略模式（含枚举策略）、责任链、抽象类等，又提供了 Supplier 函数式编程，可以说是应有尽有！
+
+### 3. 库表数据
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250803-03.png" width="950px">
+</div>
+
+- 一看库表就知道，这不是小儿科！有标签表，有活动的优惠，组队，订单明细，本地消息表，商品活动配置表，sku表。
+
+### 4. 用户旅程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-25-01.png" width="700px">
+</div>
+
+- 拼团全流程简图，以用户旅程来看各个节点所做的事项。
+
+### 5. 场景举例 - 设计模式
+
+#### 5.1 试算
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250118-06.png" width="700px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250118-03.png" width="700px">
+</div>
+
+为了解决整个交易过程的复杂场景，做了一套通用设计模式框架，并结合一套异步数据加载的多线程设计，来解决加载数据效率问题。让整个框架的灵活性非常高。
+
+#### 5.2 退单
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-30-01.png" width="950px">
+</div>
+
+- 第一条退单链路，以工厂🏭方式获取执行责任链，责任链的作用是拆分原有的流程结构，分节点进行逐步处理。之后到退单的具体操作，则根据枚举策略，拿到对应执行的退单策略模式，完成退单动作。退单执行后发送MQ消息，驱动后续流程。
+- 第二条消息消息，从接收 MQ 开始，以 MQ 消息中的策略类型进行库存恢复操作。这部分保持原有的走对应的策略即可。
+
+>整套项目，每一节都会有让你有新的感受，各个章节都有亮点设计，让你可以写到简历。
+
diff --git a/docs/md/project/group-buy-market/qa.md b/docs/md/project/group-buy-market/qa.md
new file mode 100644
index 000000000..648d63a43
--- /dev/null
+++ b/docs/md/project/group-buy-market/qa.md
@@ -0,0 +1,82 @@
+---
+title: Q&A：常见开发问题错误解答
+lock: no
+---
+
+# Q&A：常见开发问题错误解答
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>课程：[https://t.zsxq.com/Yfbwo](https://t.zsxq.com/Yfbwo)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、断点调试
+
+- [排查10个Bug](https://www.bilibili.com/video/BV1F6421w71e)
+- [打断点查空指针](https://www.bilibili.com/video/BV1q1421Q7Uv)
+
+## 二、开发问题
+
+### 1. Parameter 'teamIds' not found.
+
+如果遇到报错提示，有兼容问题，可以添加 `@Param("teamIds")` 到方法上 `Integer queryAllUserCount(@Param("teamIds") Set<String> teamIds);`
+
+### 2. this is incompatible with sql_mode=only_full_group_by
+
+**添加 my.cnf 文件**
+
+```java
+[client]
+port                    = 3306
+default-character-set   = utf8mb4
+
+[mysqld]
+user                    = mysql
+port                    = 3306
+sql_mode                = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
+
+default-storage-engine  = InnoDB
+default-authentication-plugin   = mysql_native_password
+character-set-server    = utf8mb4
+collation-server        = utf8mb4_unicode_ci
+init_connect            = 'SET NAMES utf8mb4'
+
+slow_query_log
+#long_query_time         = 3
+slow-query-log-file     = /var/log/mysql/mysql.slow.log
+log-error               = /var/log/mysql/mysql.error.log
+
+default-time-zone       = '+8:00'
+
+[mysql]
+default-character-set   = utf8mb4
+```
+
+**修改 docker compose**
+
+```javascript
+mysql:
+  image: registry.cn-hangzhou.aliyuncs.com/xfg-studio/mysql:8.0.32
+  container_name: mysql
+  command: --default-authentication-plugin=mysql_native_password
+  restart: always
+  environment:
+    TZ: Asia/Shanghai
+    MYSQL_ROOT_PASSWORD: 123456
+  ports:
+    - "13306:3306"
+  volumes:
+    - ./mysql/my.cnf:/etc/mysql/conf.d/mysql.cnf:ro
+    - ./mysql/sql:/docker-entrypoint-initdb.d
+  healthcheck:
+    test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
+    interval: 5s
+    timeout: 10s
+    retries: 10
+    start_period: 15s
+  networks:
+    - my-network
+```
+
+- 修改 MySQL 8.0 安装配置
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2541-1\350\212\202\357\274\232\346\213\274\345\233\242\351\234\200\346\261\202\345\210\206\346\236\220.md" "b/docs/md/project/group-buy-market/\347\254\2541-1\350\212\202\357\274\232\346\213\274\345\233\242\351\234\200\346\261\202\345\210\206\346\236\220.md"
new file mode 100644
index 000000000..6a044b56c
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2541-1\350\212\202\357\274\232\346\213\274\345\233\242\351\234\200\346\261\202\345\210\206\346\236\220.md"
@@ -0,0 +1,56 @@
+---
+title: 【更】第1-1节：拼团需求分析
+pay: https://t.zsxq.com/Wit9C
+---
+
+# 《拼团交易平台系统》第1-1节：拼团需求分析
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/1VRZq](https://t.zsxq.com/1VRZq)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+今天是我们《拼团交易平台系统》项目学习的第1节，我们先从需求分析开始理解这样一个项目要做什么，要解决什么场景问题。同时也要知道研发是怎么承接的产品需求。
+
+在互联网公司中，一个需求首先是从业务侧发起的盈利目标，拆分为不同的运营策略。再把对应的策略由产品经理设计为可以支撑市场运营操作完成盈利目标的具体项目。所以这里有一般有3个角色，包括；业务人员、运营人员、产品经理。他们分别在自己的岗位产生不同的资料，包括；MRD、BRD、PRD。
+
+- 市场需求文档（MRD）： MRD是从市场的角度出发，描述目标市场的需求和机会。它通常包括目标客户群、市场趋势、竞争分析、市场机会、产品定位以及产品应该实现的市场目标等。MRD通常由产品经理或市场分析师编写，目的是定义产品应该解决的市场问题和满足的用户需求。
+- 业务需求文档（BRD）： BRD更侧重于业务角度，描述业务目标、业务流程、业务规则、业务问题以及业务需求。它是从组织的业务视角来定义需求，包括业务背景、业务目标、影响分析、风险评估等。BRD通常由业务分析师编写，目的是确保项目解决了正确的业务问题，并与公司的业务战略保持一致。
+- 产品需求文档（PRD）： PRD是更详细的文档，它根据MRD和BRD中确定的需求，具体描述产品的功能性和非功能性需求。PRD包括用户故事、用例、功能列表、性能要求、界面设计、用户体验等。PRD通常由产品经理编写，目的是为设计团队和开发团队提供一个明确的、详细的产品实现指南。
+
+而研发最终看到的就是这份 PRD 文档，根据产品对 PRD 文档与各个负责的业务线研发进行的评审，让研发了解本次项目所需完成的工作。之后研发在会后根据 PRD 文档进行详细的设计和系统建模。这一部分前期的工作几乎占据了整个项目周期的50%以上的时间。所以研发写代码，只是众多环节中的一环。
+
+接下来，我们来对本次的《拼团交易平台系统》进行需求分析，让大家细致的了解拼团的场景业务。你可以把这个过程就是当成你自己在承接一次产品需求，在学习的过程中把思考和扩展的点在评论区讨论，互相积累补充。
+
+## 一、项目背景
+
+>拼团系统可以用于，《小型支付商城》、《OpenAI应用》，这类带有支付场景购买商品的系统。我们这里以这样两个系统作为使用场景作为举例。也可以作用于任何其他的交易类系统。
+
+针对目前的`小型支付商城系统`、`OpenAI应用系统`，商品购买交易同比增速放缓，需要引入新的营销策略促进商品交易量。在交易数据统计分析中得到，市场存在同类竞品，商品价格设定低于目前我们的商品定价，所以用户购买意愿偏低。
+
+所以为了盘活沉睡用户，需要适当降低商品价格。但为了达到传播的效果，所以需要引入拼团方式，以客带客，靠用户自身传播的方式进行交易拉新。这样的处理方式对比于 KOL，会让利商品价值到用户自身。【KOL 等同于抖音大主播直播卖货】
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-1-1-01.png" width="450px">
+</div>
+
+另一方面，通过本项目的增加，逐步完善功能产品和运营服务体系，优化整体的产品架构，增强市场竞争力。
+
+## 二、产品方案
+
+因为我们所实现的是一个平台类系统，可以满足各类交易场景的拼团需求接入。所以在实现这套系统时候，不要与其他系统耦合。并提供相关的研发侧对接标准。
+
+此外我们要提供前端案例对接展示，满足后续其他系统，如；《小型支付商城》、《OpenAI应用》对接时候有可参考样例。
+
+### 1. 前端页面
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-1-1-02.png" width="650px">
+</div>
+
+- 进入商品页后，查询是否配置了拼团活动。并进行优惠试算，拼团成团价，最低优惠展示。
+- 参与首次拼团、参与拼团中拼团。拼团完成则不在展示此条拼团。
+- 所有参与中的拼团统计拼团人员。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2541-2\350\212\202\357\274\232\346\213\274\345\233\242\345\272\223\350\241\250\350\256\276\350\256\241.md" "b/docs/md/project/group-buy-market/\347\254\2541-2\350\212\202\357\274\232\346\213\274\345\233\242\345\272\223\350\241\250\350\256\276\350\256\241.md"
new file mode 100644
index 000000000..05df83c38
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2541-2\350\212\202\357\274\232\346\213\274\345\233\242\345\272\223\350\241\250\350\256\276\350\256\241.md"
@@ -0,0 +1,39 @@
+---
+title: 【更】第1-2节：拼团库表设计
+pay: https://t.zsxq.com/gSHjj
+---
+
+# 《拼团交易平台系统》第1-2节：拼团库表设计
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/iteVm](https://t.zsxq.com/iteVm)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+编程的代码是对数据逻辑的呈现，数据流转调度的好坏来自于数据结构设计的是否合理。而库表的设计就是对你过往学习数据结构知识的检测。
+
+在库表设计时你需要了解整个业务执行过程，在这些过程中需要哪些数据作为支撑。合理的数据结构的库表设计，会让你的系统逻辑实现容易被人理解。反之，你可能要做大量的代码处理，也就是算法过程复杂度会变得很高。
+
+这块知识的积累，最佳的手段就是多做实际的项目。从库表设计到编码实现，从编码实现反推库表合理性。做的多了，自然也就懂了。
+
+## 一、本章诉求
+
+通过拼团业务，讲解拼团流程实现中，所需的库表结构。包括；运营视角的配置诉求、用户视角的使用诉求。
+
+只要你可以看懂库表设计，基本你也可以了解整个业务系统是如何实现的了。有了这样的积累，进入公司接触新的项目时，可以先从库表进行了解。知道它们的流转关系，之后在看系统设计和代码实现会更加清晰。
+
+## 二、库表关系
+
+在设计一套库表时，需要根据业务流程划分出大块的功能区，知道这些功能区的流转关系。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-1-2-01.png" width="650px">
+</div>
+
+- 首先，站在运营的角度，要为这次拼团配置对应的拼团活动。那么就会涉及到；给哪个渠道的什么商品ID配置拼团，这样用户在进入商品页就可以看到带有拼团商品的信息了。之后要考虑，这个拼团的商品所提供的规则信息，包括；折扣、时间、人数等。还要拿到折扣的一个试算金额。这个试算出来的金额，就是告诉用户，通过拼团可以拿到的最低价格。
+- 之后，站在用户的角度，是参与拼团。首次发起一个拼团与参与已存在的拼团进行数据的记录，达成拼团约定拼团人数后，开始进行通知。这个通知的设计站在平台角度可以提供回调，那么任何的系统也就都可以接入了。
+- 另外，为了支撑这套库表，也会有人群的设计。人群是互联网公司中非常常用的手段，比如要把所有符合某个条件的用户ID，全部写入到一个特定的 Redis 记录中，之后就可以专门为这些人做特定的拼团活动了。
+- 那么，拼团活动表，为什么会把折扣拆分出来呢。因为这里的折扣可能有多种迭代到一个拼团上。比如，给一个商品添加了直减10元的优惠，又对符合的人群id的用户，额外打9折，这样就有了2个折扣迭代。所以拆分出来会更好维护。这是对常变的元素和稳定的元素进行设计的思考。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2541-3\350\212\202\357\274\232\347\240\224\345\217\221\347\263\273\347\273\237\350\256\276\350\256\241.md" "b/docs/md/project/group-buy-market/\347\254\2541-3\350\212\202\357\274\232\347\240\224\345\217\221\347\263\273\347\273\237\350\256\276\350\256\241.md"
new file mode 100644
index 000000000..140d609ca
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2541-3\350\212\202\357\274\232\347\240\224\345\217\221\347\263\273\347\273\237\350\256\276\350\256\241.md"
@@ -0,0 +1,34 @@
+---
+title: 【更】第1-3节：研发系统设计
+pay: https://t.zsxq.com/ESHMx
+---
+
+# 《拼团交易平台系统》第1-3节：研发系统设计
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/UoowL](https://t.zsxq.com/UoowL)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+对于程序员👨🏻‍💻来说，虽然写代码是最直接的工作体现，但工作可不是就只写代码。就一个产品功能需求而言，研发在参与评审后，还需要对需求进行功能的研发系统设计。
+
+这个过程是比较消耗时间的，一般在2-3天完成，或者大型项目与外部对接的较多的情况，会需要3-5天以上。一般初级的开发在不具有系统的把控能力的时候，会考虑在工程中写伪代码的过程，来梳理系统设计。包括；涉及模块、功能流程、外部对接、接口字段等，全新的系统还要做架构的设计、分层的设计、模块的设计等。
+
+那么对于小伙伴们学习的本节来说，就是一个全新的系统，我们可以全部的了解到系统设计所需的内容。
+
+## 一、本章诉求
+
+通过对拼团需求的理解，进行研发系统设计。包括；用例图、系统建模、工程模型、功能流程、UML时序图。另外像是库表设计已经在前面完成了，它也属于研发系统设计的一部分，提前做了这部分是为了让大家更好的理解系统需求。
+
+## 二、设计目的
+
+为什么，不上来就写代码？
+
+在15年刚加入互联网大厂的时候，基本上是一上来就写代码。产品聊完需求，研发简单记录，之后就是打开工程直接编码了。需求是上午写的，代码是下午干的。这样对于刚起步阶段是比较合适的，可以快速迭代。
+
+但随着公司的体系化越来越完整，一个小项目也变成一个个独立业务线的大项目，一个人开发也变成了一个团队开发。所有的系统功能的实现，一点点小问题，都可能是一个个大问题。甚至一个bug，一会时间就会被传到微博，之后就是一片的舆情和客诉。
+
+所以，到了目前这个阶段，研发不能只是为了功能而直接开发。还要遵守一些列的流程，确保开发迭代的需求，都能平稳的交付。所以要有研发设计、要有评审、要有测试、要有预发、要有黑白名单验证和功能切量。
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-10\350\212\202\357\274\232\350\264\243\344\273\273\351\223\276\346\212\275\350\261\241\346\250\241\346\235\277\350\256\276\350\256\241.md" "b/docs/md/project/group-buy-market/\347\254\2542-10\350\212\202\357\274\232\350\264\243\344\273\273\351\223\276\346\212\275\350\261\241\346\250\241\346\235\277\350\256\276\350\256\241.md"
new file mode 100644
index 000000000..736655732
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-10\350\212\202\357\274\232\350\264\243\344\273\273\351\223\276\346\212\275\350\261\241\346\250\241\346\235\277\350\256\276\350\256\241.md"
@@ -0,0 +1,37 @@
+---
+title: 【更】第2-10节：责任链抽象模板设计
+pay: https://t.zsxq.com/pUS6P
+---
+
+# 《拼团交易平台系统》第2-10节：责任链抽象模板设计
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/Ao3ox](https://t.zsxq.com/Ao3ox)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+做开发了这么久，其实业务类的开发大部分都是串联流程，其实复杂度并不高。但之所以最后非常难理解，是写的人，驾驭能力不强，把工程写的越来越难以理解。
+
+而如果想让工程实现的逻辑好理解，就要做好解耦设计。而这些解耦的流程大部分是具有通用性的，所以我们可以设计出能解决大部分通用业务场景的共性模型结构。
+
+在之前小傅哥就带着大家设计了一个规则树的模型，本节我们借着项目的开发在设计一款通用的责任链模型结构。
+
+## 一、本章诉求
+
+在拼团交易的下单锁定优惠的过程中，以及后续的流程，都会有简单的规则串联。所以，我们先来提前做好通用的责任链模型结构，便于后续使用。
+
+本节会涉及到链表的基础数据结构知识，可以提前补充学习；[https://bugstack.cn/md/algorithm/data-structures/2022-07-22-linked-list.html](https://bugstack.cn/md/algorithm/data-structures/2022-07-22-linked-list.html)
+
+## 二、模型设计
+
+责任链是一种简单的单链路结构，在工程中会有多个这样的单链，为了可以让不同的场景都能创建出自己的链，则需要解耦责任链的链路和执行，再有执行器处理。在本次实现中小傅哥会给大家体统两种责任链，让大家对照学习。设计如图；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-10-01.png" width="750px">
+</div>
+
+- 如图，这是一种多实例对象责任链的设计结构，会使用到如 Java JDK 源码中 Link 的方式填写链路，之后再有业务链路处理链路执行。而每一个链路都会被填充一个逻辑处理器的实现类（ILogicHandler）来处理具体的业务。
+- 那么，这样就很好的扩展了各种链路的使用诉求。我们可以结合代码来学习。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-11\350\212\202\357\274\232\344\272\244\346\230\223\350\247\204\345\210\231\350\264\243\344\273\273\351\223\276\350\277\207\346\273\244.md" "b/docs/md/project/group-buy-market/\347\254\2542-11\350\212\202\357\274\232\344\272\244\346\230\223\350\247\204\345\210\231\350\264\243\344\273\273\351\223\276\350\277\207\346\273\244.md"
new file mode 100644
index 000000000..d08ebba70
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-11\350\212\202\357\274\232\344\272\244\346\230\223\350\247\204\345\210\231\350\264\243\344\273\273\351\223\276\350\277\207\346\273\244.md"
@@ -0,0 +1,41 @@
+---
+title: 【更】第2-11节：交易规则责任链过滤
+pay: https://t.zsxq.com/PaSMk
+---
+
+# 《拼团交易平台系统》第2-11节：交易规则责任链过滤
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/wxTw6](https://t.zsxq.com/wxTw6)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+为什么公司里有些人做了很多事情，写了很多代码，但到最后也没有多大的成绩呢？
+
+其实很多时候就是太重复了，从刚开始对工程不理解，到能熟练上手以后，就从脑力活变成了体力活，一遍遍的重复自己。所以，就算是工作几年，也和前面刚开始工作差不多，就只是熟练了业务，但技术却没有提升。
+
+所以，多提高编程思维，锻炼编码能力，一次次对工程进行抽象，提炼出骨架的核心设计，才是非常重要的。
+
+## 一、本章诉求
+
+完善拼团交易营销锁单的流程，增加锁单流程中的规则处理。
+
+本节的规则过滤，会使用到前面章节设计的统一的设计模式框架中的责任链模式。对这类轻量的场景，一般只需要选择单链的执行模型即可，而与之对比的规则树，是适合于那种节点间的复杂分支流转。
+
+## 二、业务流程
+
+如图，增加交易规则处理；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-11-01.png" width="650px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-11-02.png" width="650px">
+</div>
+
+- 在前面章节，我们实现了拼团锁单中，参数校验、幂等校验、达成校验，之后做了营销试算和营销锁单。
+- 那么在本节，还需要对营销锁单继续完善，过滤拼团活动配置的规则。包括；活动的有效期、状态，以及个人参与拼团的次数。在实际公司中的项目里，还会有更多的规则要被处理。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-12\350\212\202\357\274\232\346\213\274\345\233\242\347\273\204\351\230\237\347\273\223\347\256\227\347\273\237\350\256\241.md" "b/docs/md/project/group-buy-market/\347\254\2542-12\350\212\202\357\274\232\346\213\274\345\233\242\347\273\204\351\230\237\347\273\223\347\256\227\347\273\237\350\256\241.md"
new file mode 100644
index 000000000..5bb0a9553
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-12\350\212\202\357\274\232\346\213\274\345\233\242\347\273\204\351\230\237\347\273\223\347\256\227\347\273\237\350\256\241.md"
@@ -0,0 +1,38 @@
+---
+title: 【更】第2-12节：拼团组队结算统计
+pay: https://t.zsxq.com/OvyY1
+---
+
+# 《拼团交易平台系统》第2-12节：人群标签生成任务
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/89N6w](https://t.zsxq.com/89N6w)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+其实互联网大厂也是从草蜢阶段过来的，所以到现在才有这么大的技术债。几乎每年我们都要为工程制定体系化建设的计划，新的工程采用纯心的架构模型实现，旧的工程分为重构计划和工程内编码治理。
+
+通过这样的手段，让工程一点点从严重的腐化中拆解出来。所以你在学习咱们的新项目时候，也会感受到不断的抽象和治理，让代码变得容易被理解和迭代。
+
+## 一、本章诉求
+
+首先，你可以回忆下咱们整个拼团业务的流程。
+
+拼团的过程是用户在商城下单，锁定拼团优惠（也就是拼团系统里锁单的过程）。之后就是用户给这笔商品完成支付交易，交易后不会直接发货，直至拼团组队完成后才会发货。
+
+那么，这里有一个流程，就是支付完成后，需要做拼团数量的统计结算。如，拼团需要3个用户一起下单，那么每完成一笔支付，就要给拼团的组队加上一笔记录。这个就是本节要实现的流程。
+
+## 二、业务流程
+
+如图，拼团结算流程。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-12-01.png" width="550px">
+</div>
+
+- 首先，交易订单的营销结算，核心就是更新拼团队伍的参与人数数量。每完成一笔支付，就有一笔拼团进度数量+1。
+- 之后，这里要知道，更新拼团订单的明细状态（交易完成）和更新拼团进度数量要在一个事务下完成。
+- 另外，更新拼团的进度要判断，当前是否为最后一次拼团完结状态。比如计算剩余1个，即可完成拼团目标量，那么这最后一笔更新完成后，既是整个拼团队伍的进度完成了。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-13\350\212\202\357\274\232\344\272\244\346\230\223\347\273\223\347\256\227\350\264\243\344\273\273\351\223\276\350\277\207\346\273\244.md" "b/docs/md/project/group-buy-market/\347\254\2542-13\350\212\202\357\274\232\344\272\244\346\230\223\347\273\223\347\256\227\350\264\243\344\273\273\351\223\276\350\277\207\346\273\244.md"
new file mode 100644
index 000000000..8c60e7133
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-13\350\212\202\357\274\232\344\272\244\346\230\223\347\273\223\347\256\227\350\264\243\344\273\273\351\223\276\350\277\207\346\273\244.md"
@@ -0,0 +1,44 @@
+---
+title: 【更】第2-13节：交易结算责任链过滤
+pay: https://t.zsxq.com/I2cmu
+---
+
+# 《拼团交易平台系统》第2-13节：交易结算责任链过滤
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/ScKNa](https://t.zsxq.com/ScKNa)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+在我整个互联网编程的职业生涯中，有一段时间一个人负责了4-5个业务系统，还有3-4个技术类组件。领导看我有这么多系统，就给我招聘了几个人，让我把活分配出去。
+
+但最开始我是比较抗拒的，因为这些系统已经非常手到擒来了，想做什么设计实现，也是能非常容易的迭代完成，并且随着每次的迭代也会做细腻的重构设计。
+
+而我抗拒的原因是因为中间招聘的伙伴，有几次都是来了半年多又走了，系统又交接回来了。这个时候在对这个系统做实现时候，就会发现很多细节的地方，与预期非常不符。不过，后来也慢慢习惯了，增加了很多的评审、提供了的设计，让工程尽量别走型严重。
+
+## 一、本站诉求
+
+拼团交易结算的过程，需要一些列的规则过滤。包括；我们上一节提到的校验外部交易单的时间是否在拼团有效时间内，同时还有关于这笔外部交易单是否为有效的拼团锁单订单。另外像是 SC 渠道的有效性也需要在结算时进行校验。
+
+所以，本节我们需要实现一套规则链，来处理这些业务规则。因为规则链已经被抽取为通用的模板了，那么本节使用起来会非常容易。
+
+## 二、业务流程
+
+如图，拼团交易结算流程设计；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-13-01.png" width="650px">
+</div>
+
+- 首先，本节的重点在于新增加结算规则过滤的责任链，处理；SC渠道管控、有效的外部交易单号、结算实现是否为拼团时效内。
+- 那么这里会有一些功能改造点；
+    - 拼团表，group_buy_order 增加 valid_start_time（有效开始时间）、valid_end_time（有效结束时间） 字段。用于每笔交易结算时候，用结算时间判断是否匹配到拼团有效时间范围内。
+    - 拼团明细，group_buy_order_list 增加 out_trade_time（交易时间） 字段，记录每笔结算的订单结算的时间。随着状态更新的时候更新。
+    - trade 领域下，lock 锁单。实体对象，修改名称。TradeRuleCommandEntity -> TradeLockRuleCommandEntity,TradeRuleFilterBackEntity -> TradeLockRuleFilterBackEntity 增加了 Lock 标识。便于在添加 TradeSettlementRuleCommandEntity、TradeSettlementRuleFilterBackEntity 时更好理解。
+    - PayActivityEntity 添加 validTime，GroupBuyTeamEntity 添加 validStartTime、validEndTime
+    - trade 领域下，settlement 结算服务中，使用责任链模板，实现营销交易规则的过滤。SCRuleFilter（SC黑名单管控过滤 DCCService 配置新的属性 scBlacklist）、OutTradeNoRuleFilter（外部交易单号有效性过滤）、SettableRuleFilter（交易时间是否在拼团有效时间内过滤）、EndRuleFilter（结束节点封装返回数据）
+    - 交易服务，TradePaySettlementEntity 调用 tradeSettlementRuleFilter 责任链方法，并返回相关的数据信息。
+    - settlementMarketPayOrder 结算一个事务下操作，增加 updateOrderStatus2COMPLETE 更新时候添加 outTradeTime 时间。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-14\350\212\202\357\274\232\346\213\274\345\233\242\345\233\236\350\260\203\351\200\232\347\237\245\344\273\273\345\212\241.md" "b/docs/md/project/group-buy-market/\347\254\2542-14\350\212\202\357\274\232\346\213\274\345\233\242\345\233\236\350\260\203\351\200\232\347\237\245\344\273\273\345\212\241.md"
new file mode 100644
index 000000000..ec4f9860d
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-14\350\212\202\357\274\232\346\213\274\345\233\242\345\233\236\350\260\203\351\200\232\347\237\245\344\273\273\345\212\241.md"
@@ -0,0 +1,42 @@
+---
+title: 【更】第2-14节：拼团回调通知任务
+pay: https://t.zsxq.com/IWiNu
+---
+
+# 《拼团交易平台系统》第2-14节：拼团回调通知任务
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/ysSyW](https://t.zsxq.com/ysSyW)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+## 一、本章诉求
+
+在微服务设计中，当一个微服务系统的流程结束后，要通知下一个微服务系统。这个通知的过程，可以是 RPC、MQ，也可以是 HTTP 方式。
+
+RPC、MQ，这一类的都是需要有一个公用的注册中心，它的技术架构比较适合于公司内部的统一系统使用。如果是有和外部其他系统的对接，通常我们会使用 HTTP 这样统一标准协议的接口进行使用。
+
+那么，本章节要为拼团组队交易结算完结后，实现一个回调通知的任务处理。告知另外的微服务系统可以进行后续的流程了。
+
+注意：微信支付，支付宝支付，也是在完成支付后，做的这样的回调处理。
+
+## 二、业务流程
+
+如图，拼团结算组队完成，回调通知；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-14-01.png" width="950px">
+</div>
+
+- 首先，本节的重点在拼团成团后，实现回调通知流程。回调的过程，需要在用户锁单时需要增加一个回调的地址，并在拼团完结后发起回调。
+- 那么，这里的一些功能改造点；
+  - `group_buy_order` 在设计的时候有一个 `notify_url` 回调地址，本节我们修改库表添加上这个字段。并对工程中的 `dao&po&mapper` 操作，增加 `notify_url` 字段。
+  - MarketTradeController 营销交易服务，lockMarketPayOrder 锁单接口入参对象，增加 notifyUrl 回调地址。并有 PayDiscountEntity 对象透传到 `TradeRepository#lockMarketPayOrder` 仓储操作。这样写到 `group_buy_order` 表就有回调地址了，等做回调操作的时候，就可以把这个地址写入到回调任务表中。
+  - `TradeSettlementOrderService#settlementMarketPayOrder` 结算服务，需要把锁单记录中的 notify_url 拿到，放到 GroupBuyTeamEntity 中，这样在写入 notify_task 表记录的时候就可以把 notify_url 一起写入进去了。
+  - 基于 okhttp 框架，封装对 http 接口的调用。用于处理调用外部其他微服务，实现回调通知的处理。因为外部的接口是随着每个服务调用拼团写入进来的 http 请求地址，所以在封装这部分调用的时候，要允许动态透传请求地址。实现类写到 infrastructure 基础设置层的 gateway 调用外部网关层。实现类；`GroupBuyNotifyService` 提供方法；`groupBuyNotify`
+  - 在交易结算服务类 ITradeSettlementOrderService，定义执行结算回调通知接口，包括；`execSettlementNotifyJob()、execSettlementNotifyJob(String teamId)` 一个是有入参的，一个无入参。这样可以指定给某个拼团队伍做结算。结算的过程就是调用 `GroupBuyNotifyService#groupBuyNotify` 完成回调通知，并根据返回的结果更新 notify_task 表状态记录（成功、失败、重试），并记录回调次数，小于5次的时候都可以继续回调。
+  - 回调通知，可以分为两个阶段处理。一个是拼团完成后立即执行，另外一个任务补偿。立即执行是为了提供时效性，但因为远程的 http 调用受网络和服务的影响可能会失败，所以要增加一个任务补偿来做定时检查。其中立即执行在 `TradeSettlementOrderService#settlementMarketPayOrder -> settlementMarketPayOrder` 处理。另外定时任务在 `GroupBuyNotifyJob` 处理。
+  - 测试接口，`trigger/http` 下，增加 `TestApiClientController` 接口实现类，提供回调接口服务。这个是模拟的其他的微服务，将来要提供的接口。
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-15\350\212\202\357\274\232\346\240\271\346\215\256UI\345\261\225\347\244\272\345\260\201\350\243\205\346\216\245\345\217\243.md" "b/docs/md/project/group-buy-market/\347\254\2542-15\350\212\202\357\274\232\346\240\271\346\215\256UI\345\261\225\347\244\272\345\260\201\350\243\205\346\216\245\345\217\243.md"
new file mode 100644
index 000000000..f036b2760
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-15\350\212\202\357\274\232\346\240\271\346\215\256UI\345\261\225\347\244\272\345\260\201\350\243\205\346\216\245\345\217\243.md"
@@ -0,0 +1,33 @@
+---
+title: 【更】第2-15节：根据UI展示封装接口
+pay: https://t.zsxq.com/eQHFl
+---
+
+# 《拼团交易平台系统》第2-15节：根据UI展示封装接口
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/2C7df](https://t.zsxq.com/2C7df)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+## 一、本章诉求
+
+根据在上一节使用 DeepSeek 实现的拼团 UI，设计并实现所需的服务端接口。
+
+在互联网公司里的开发过程也是这样，产品在评审期间，会提供 UI 工程师做好的设计图，研发拿到设计图后，提供所需的接口提供相应的字段。
+
+## 二、接口分析
+
+如图，根据UI分析所需接口数据；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-15-01.png" width="500px">
+</div>
+
+- 紫色圈；10人再抢，是拼团的统计数据。类似的还有总共开多少团、成功的拼团等，如果有展示需求，都可以在拼团统计中给出。
+- 灰色圈；商品信息，商品金额、优惠金额、支付金额等。
+- 绿色圈；参与拼团，UI 调用的操作是锁单的处理。在完整的流程中是调用商城类系统，发起交易，之后由商城类系统进行营销锁单。我们这里模拟，所以从前端开始锁单。
+- 黄色券；这里不是真实对接扫码支付，所以要点支付完成，才能触发拼团结算。所以这里需要调用拼团里的结算接口。
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-16\350\212\202\357\274\232\345\274\225\345\205\245RabbitMQ\345\210\206\345\270\203\345\274\217\345\244\232\347\253\257\346\266\210\350\264\271.md" "b/docs/md/project/group-buy-market/\347\254\2542-16\350\212\202\357\274\232\345\274\225\345\205\245RabbitMQ\345\210\206\345\270\203\345\274\217\345\244\232\347\253\257\346\266\210\350\264\271.md"
new file mode 100644
index 000000000..031b7aae5
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-16\350\212\202\357\274\232\345\274\225\345\205\245RabbitMQ\345\210\206\345\270\203\345\274\217\345\244\232\347\253\257\346\266\210\350\264\271.md"
@@ -0,0 +1,34 @@
+---
+title: 【更】第2-16节：引入RabbitMQ分布式多端消费
+pay: https://t.zsxq.com/fhRso
+---
+
+# 《拼团交易平台系统》第2-16节：引入RabbitMQ分布式多端消费
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/mipvF](https://t.zsxq.com/mipvF)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+## 一、本章诉求
+
+引入 RabbitMQ 分布式技术框架，实现分布式消息消费和多服务消费的能力。
+
+消息，是一种解耦服务间直接（http/rpc）调用的手段，以发送消息和接收消息的模式，完成业务流程的异步化处理。
+
+**RabbitMQ 基础教程**：[https://bugstack.cn/md/road-map/rabbitmq.html](https://bugstack.cn/md/road-map/rabbitmq.html)
+
+## 二、业务流程
+
+在互联网公司中，往往一个微服务发送出来的 MQ，除了自己接收消费处理自己的业务流程，也会有很多其他微服务进行消费。那么这里就会有一个 Topic，被多个应用消费的配置。如图；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-16-01.png" width="550px">
+</div>
+
+- 以拼团发送结算完成消息举例，拼团是负载均衡部署了2套服务，发送的MQ消息，由小型支付对接。
+- 那么，负载均衡的拼团服务，发送MQ后，自己的2套微服务，会分别接收到消息。另外一套小型支付，假设只部署了一套，那么这里会消费5个MQ消息。
+- 注意，以 RabbitMQ举例，这里会需要使用到同一套交换机，同一个路由Key，但队列要分别每个服务配置不同的。同时消息支持持久化，也就是拼团发送的MQ消息，即使小型支付服务暂时没有启动，也可以在启动后消费队列里的MQ消息。
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-17\350\212\202\357\274\232\345\217\221\351\200\201MQ\347\273\223\347\256\227\346\266\210\346\201\257.md" "b/docs/md/project/group-buy-market/\347\254\2542-17\350\212\202\357\274\232\345\217\221\351\200\201MQ\347\273\223\347\256\227\346\266\210\346\201\257.md"
new file mode 100644
index 000000000..8c18ac900
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-17\350\212\202\357\274\232\345\217\221\351\200\201MQ\347\273\223\347\256\227\346\266\210\346\201\257.md"
@@ -0,0 +1,36 @@
+---
+title: 【更】第2-17节：发送MQ结算消息
+pay: https://t.zsxq.com/zvx7v
+---
+
+# 《拼团交易平台系统》第2-17节：发送MQ结算消息
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/OtfX8](https://t.zsxq.com/OtfX8)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+## 一、本章诉求
+
+增加拼团结算完成 MQ 触达方式，HTTP、MQ 触达，由调用方通过入参类型决定。
+
+MQ 一般用在企业内的微服务系统间通信，因为企业内的微服务，共用了一套的 MQ 注册中心，MQ 可以更加高效的触达和分布式部署。而对于企业外的调用，与我们完全不是一个公司的系统，那么不再同一个微服务环境内，则需要通过 HTTP 方式这样标准的协议调用。如；支付宝支付完成回调、微信公众号发送消息后的回调，都是基于 HTTP 的方式实现。
+
+## 二、业务流程
+
+如图，HTTP、MQ，由调用方配置使用那种方式进行处理。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-17-01.png" width="850px">
+</div>
+
+- 用户创建营销锁单时，选择MQ、HTTP回调方式。这个类型会被写入到对应的拼团订单记录里。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-17-02.png" width="850px">
+</div>
+
+- 拼团完成结算后，在根据写入到拼团订单的记录，回调的方式，来回调通知结算。
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-18\350\212\202\357\274\232\346\266\210\350\264\271MQ\347\273\223\347\256\227\346\266\210\346\201\257.md" "b/docs/md/project/group-buy-market/\347\254\2542-18\350\212\202\357\274\232\346\266\210\350\264\271MQ\347\273\223\347\256\227\346\266\210\346\201\257.md"
new file mode 100644
index 000000000..626547b08
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-18\350\212\202\357\274\232\346\266\210\350\264\271MQ\347\273\223\347\256\227\346\266\210\346\201\257.md"
@@ -0,0 +1,27 @@
+---
+title: 【更】第2-18节：消费MQ结算消息
+pay: https://t.zsxq.com/dZEBT
+---
+
+# 《拼团交易平台系统》第2-18节：消费MQ结算消息
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/rclqJ](https://t.zsxq.com/rclqJ)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+完善小型支付商城对拼团组队结算消息的处理，同时完成小型支付商城中支付交易结算消息的处理。这样我们整个系统就都具备分布式部署的能力了。也就是多个应用实例同时部署，一个MQ在一个应用实例消费宕机，可以被其他应用实例继续拉取消费。
+
+## 二、业务流程
+
+如图，MQ 在小型支付和拼团的执行流程。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-18-01.png" width="850px">
+</div>
+
+- MQ 具有解耦、消峰，最终一致性的特性。所以很多的分布式设计中，都会引入 MQ 来解耦复杂的业务流程，除了数据库事务处理外的流程节点，则由 MQ 进行驱动。
+- 从拼团下单到锁单结算，完成后触达MQ消费。之后由小型支付商城消费 MQ 结算消息，变更订单状态，之后触达下一个支付结算的动作。在接收支付结算完成模拟发货。第二个MQ的发送不用写数据库任务来补偿，如果发MQ失败了，就直接抛异常重试继续发就可以。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-19\350\212\202\357\274\232\347\213\254\345\215\240\351\224\201\345\222\214\346\227\240\351\224\201\345\214\226\345\234\272\346\231\257\350\277\220\347\224\250.md" "b/docs/md/project/group-buy-market/\347\254\2542-19\350\212\202\357\274\232\347\213\254\345\215\240\351\224\201\345\222\214\346\227\240\351\224\201\345\214\226\345\234\272\346\231\257\350\277\220\347\224\250.md"
new file mode 100644
index 000000000..4057a7ff0
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-19\350\212\202\357\274\232\347\213\254\345\215\240\351\224\201\345\222\214\346\227\240\351\224\201\345\214\226\345\234\272\346\231\257\350\277\220\347\224\250.md"
@@ -0,0 +1,27 @@
+---
+title: 【更】第2-19节：独占锁和无锁化场景运用
+pay: https://t.zsxq.com/NxC2G
+---
+
+# 《拼团交易平台系统》第2-19节：独占锁和无锁化场景运用
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/o7toC](https://t.zsxq.com/o7toC)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+以独占锁抢占方式，迭代拼团结算通知互备执行任务。再以无锁化设计，处理用户拼团锁单，库存抢占处理，降低对数据库的行锁压力，提高整体吞吐量。
+
+## 二、业务流程
+
+如图，两种锁应对的场景；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-19-01.png" width="550px">
+</div>
+
+- 分段锁，颗粒度缩小到库存维度。先加（incr）后锁的操作，是一种无锁化设计。锁的目的只是作为兜底。这类似于我们操作账户，操作完写一条流水。incr 操作是原子的，基本不会产生一样的值。但在实际生产中，遇到过集群的运维配置问题，以及业务运营配置数据问题，导致 incr 得到的值相同。
+- 独占锁，在分布式架构系统设计中，会有多个实例部署。这些实例都会做job任务的执行，为了保障既能让任务互备，同时不要重复执行。这里要加独占锁，谁抢占到谁执行。执行完成后，释放锁，下一轮继续抢占。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-1\350\212\202\357\274\232\345\210\235\345\247\213\345\267\245\347\250\213\346\220\255\345\273\272.md" "b/docs/md/project/group-buy-market/\347\254\2542-1\350\212\202\357\274\232\345\210\235\345\247\213\345\267\245\347\250\213\346\220\255\345\273\272.md"
new file mode 100644
index 000000000..0cf736547
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-1\350\212\202\357\274\232\345\210\235\345\247\213\345\267\245\347\250\213\346\220\255\345\273\272.md"
@@ -0,0 +1,62 @@
+---
+title: 【更】第2-1节：初始工程搭建
+pay: https://t.zsxq.com/1ZafX
+---
+
+# 《拼团交易平台系统》第2-1节：初始工程搭建
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/mT399](https://t.zsxq.com/mT399)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+可能不少小伙伴都学习过一些入门项目，简单的使用 IntelliJ IDEA 创建和使用。但对于在互联网公司中如何创建和使用一套新工程，往往是不清楚他们是使用了什么样的统一标准的。因为在公司中，那么多新项目要创建，不太可能让每个组的每个人都创建风格迥异的项目工程，这样对维护成本来说是非常大的。所以这里要建立工具和标准化。
+
+所以，跟着小傅哥学习，不只是做项目。而是以互联网中大型公司标准化的方式来开发、设计、实现功能。
+
+## 一、本章诉求
+
+教会小伙伴使用统一标准脚手架方式创建项目工程，并了解工程模块的分层用途。以及完成2张关于拼团互动库表的创建和使用。
+
+课程会循序渐进的从0到1，逐步带着大家完成项目的开发。开局只有一把 IntelliJ IDEA，完成项目后你可以学习到；业务、架构、设计、方案、配置、部署（Linux、Docker）等各项知识。
+
+## 二、如何开始
+
+站在读者视角，该怎么学习呢？这里做个必要说明和前置的知识提供。
+
+### 1. 前置学习
+
+小伙伴在学习的时候，可以依照课程的方式进行创建项目、变更配置、启动测试。这里有一些前置学习，包括：Git、Maven、Docker、脚手架，课程已经准备好了，可以刷下；
+
+- Git：[https://bugstack.cn/md/road-map/git.html](https://bugstack.cn/md/road-map/git.html)
+- Maven：[https://bugstack.cn/md/road-map/maven.html](https://bugstack.cn/md/road-map/maven.html)
+- Docker [https://bugstack.cn/md/road-map/docker-what.html](https://bugstack.cn/md/road-map/docker-what.html)
+- 脚手架：[https://bugstack.cn/md/road-map/ddd-archetype-maven.html](https://bugstack.cn/md/road-map/ddd-archetype-maven.html)
+
+另外课程会使用 Java JDK 1.8、Maven 3.8.x，软件已经提供好，可以直接下载；[https://t.zsxq.com/19Rnk98M0](https://t.zsxq.com/19Rnk98M0) - `附件内含有配置好阿里云镜像的 Maven`
+
+### 2. 开始学习
+
+1. 你需要通过 git clone 命令，或者 IntelliJ IDEA 自动的检出工程方式，把项目工程检出到本地。关于如何使用Git检出项目，在前置学习里提供了教程。
+2. 检出代码后，你可以通过 IntelliJ IDEA 打开项目，并按照每一节最开始说明的本节对应的代码分支，把工程代码切换到对应的这一节。
+3. 接下来你可以通过课程的视频和小册以及提供的代码进行学习，并跟随课程每节要完成的内容，一步步操作。过程中可以参考课程的代码进行学习。如果自己的代码运行出问题的时候，可以运行课程的代码验证是环境问题还是个人代码问题。**另外注意运行课程代码，要修改对应的环境为你的本地环境，mysql、redis等**
+4. 对于课程中每节涉及的库表，会放到工程 docs/dev-ops mysql 下。你可以每节学习创建一个新的库名称，之后导入。但要记得在工程 app/application-dev.yml 文件中修改对应的库名称。
+
+### 3. 环境安装
+
+课程提供了使用 Docker 部署 MySQL、Redis 环境的脚本。因为使用 Docker 可以随时方便卸载，不会污染本地电脑的本机环境。而且后续部署 Linux 云服务器也会非常顺手。
+
+关于环境的安装；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-1-04.png" width="750px">
+</div>
+
+1. Windows + wsl2，本地使用 powershell 切换到工程文件夹，执行 `docker-comopse -f docker-compose-environment-aliyun.yml up -d`
+2. Mac 电脑的适配性会更好，直接点击这里的绿色箭头即可安装。
+3. 如果本机配置有问题，也可以选择使用云服务器。课程中有云服务器的操作教程，部署起来更方便。云服务器教程：[https://bugstack.cn/md/road-map/linux.html](https://bugstack.cn/md/road-map/linux.html)
+
+> 环境安装后就可以使用 MySql、Redis 链接工具使用了，也可以手动更新库表。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-20\350\212\202\357\274\232\345\207\275\346\225\260\345\274\217\346\225\260\346\215\256\347\274\223\345\255\230\345\222\214\351\231\215\347\272\247\345\210\260DB\345\244\204\347\220\206.md" "b/docs/md/project/group-buy-market/\347\254\2542-20\350\212\202\357\274\232\345\207\275\346\225\260\345\274\217\346\225\260\346\215\256\347\274\223\345\255\230\345\222\214\351\231\215\347\272\247\345\210\260DB\345\244\204\347\220\206.md"
new file mode 100644
index 000000000..576127833
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-20\350\212\202\357\274\232\345\207\275\346\225\260\345\274\217\346\225\260\346\215\256\347\274\223\345\255\230\345\222\214\351\231\215\347\272\247\345\210\260DB\345\244\204\347\220\206.md"
@@ -0,0 +1,28 @@
+---
+title: 【更】第2-20节：函数式数据缓存和降级到DB处理
+pay: https://t.zsxq.com/pEE1a
+---
+
+# 《拼团交易平台系统》第2-20节：函数式数据缓存和降级到DB处理
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/6IYJ6](https://t.zsxq.com/6IYJ6)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+以查询活动配置为场景，增加缓存处理。同时使用降级服务，控制走缓存还是走DB数据库。并把这部分功能统一抽象成函数式编程。
+
+## 二、功能流程
+
+如图，缓存和降级的使用；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-20-01.png" width="550px">
+</div>
+
+- 首先，在日常的业务场景中，很多高频使用的数据，都是从 Redis 缓存获取。如果缓存不存在，才会从数据库读取。
+- 之后，也会给缓存配置降级，如果缓存有问题，或者要做一些验证，必须从库里读取，则会动态的配置，让当时的操作从数据库获取。
+- 注意，整个操作过程，缓存、降级、数据库，是一整条代码编程。如果在每个方法里都加这样的内容，就会显得很臃肿，所以一般会抽象一个方法，使用函数式的方式进行编程，降低使用者的编码量。**这个技巧很重要**
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-21\350\212\202\357\274\232\345\274\225\345\205\245\346\211\263\346\211\213\345\267\245\347\250\213.md" "b/docs/md/project/group-buy-market/\347\254\2542-21\350\212\202\357\274\232\345\274\225\345\205\245\346\211\263\346\211\213\345\267\245\347\250\213.md"
new file mode 100644
index 000000000..0f6a2d062
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-21\350\212\202\357\274\232\345\274\225\345\205\245\346\211\263\346\211\213\345\267\245\347\250\213.md"
@@ -0,0 +1,35 @@
+---
+title: 【更】第2-21节：引入扳手工程
+pay: https://t.zsxq.com/YXJjM
+---
+
+# 《拼团交易平台系统》第2-21节：引入扳手工程
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/lqZKr](https://t.zsxq.com/lqZKr)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+引入星球内的[《通用技术组件 - 🔧扳手工程》](https://t.zsxq.com/o7IBm)到拼团系统中，替代原本在拼团系统编写的设计模式框架和动态配置（DCC）服务。
+
+那为什么要引入这一个扳手工程呢？
+
+其实你可以想象下，在互联网公司中，有非常多的业务系统。这些业务系统都需要，解决一些非业务场景的共性问题。如，通用的设计模式，共用的错误码，统一的动态配置中心等等。当你进入公司以后，会发现这样的场景非常多。
+
+所以，你学习本节不只是完成功能，而是吸收了同类的这样场景的设计方案，以后遇到各类这样的问题，都可以考虑做成一个独立的技术组件，让业务系统引入使用。
+
+> 建议，学习扳手工程（1-3节）后在开始下面的内容。这样会很清楚扳手工程的一个设计和实现手段。
+
+## 二、功能流程
+
+如图，替换拼团工程中的通用能力；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-21-01.png" width="550px">
+</div>
+
+- 首先，要在工程中引入扳手工程的清单pom配置。在本节课程之前，已经把扳手工程发布到 maven 中心仓库，可以直接使用。地址：[https://mvnrepository.com/artifact/cn.bugstack.wrench/xfg-wrench-bom/3.0.0](https://mvnrepository.com/artifact/cn.bugstack.wrench/xfg-wrench-bom/3.0.0)
+- 之后，删掉 group-buy-market 工程 types 下；设计模式（design/framework）、dcc（annotations/DccValue + DCCValueBeanFactory）。删除后，工程 install 会报错。这个时候就引入 xfg-wrench 扳手工程内提供的框架和组件即可。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-22\350\212\202\357\274\232\345\212\250\346\200\201\351\231\220\346\265\201\351\205\215\347\275\256.md" "b/docs/md/project/group-buy-market/\347\254\2542-22\350\212\202\357\274\232\345\212\250\346\200\201\351\231\220\346\265\201\351\205\215\347\275\256.md"
new file mode 100644
index 000000000..59d507dbd
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-22\350\212\202\357\274\232\345\212\250\346\200\201\351\231\220\346\265\201\351\205\215\347\275\256.md"
@@ -0,0 +1,29 @@
+---
+title: 【更】第2-22节：动态限流配置
+pay: https://t.zsxq.com/IQsZl
+---
+
+# 《拼团交易平台系统》第2-22节：动态限流配置
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/Iazmx](https://t.zsxq.com/Iazmx)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+通过在拼团项目系统中，引入的[《通用技术组件 - 🔧扳手工程》](https://t.zsxq.com/o7IBm)，使用其带有的动态限流组件，在拼团系统中配置使用。让通过 DCC 动态控制是否限流，让接口支持动态限流配置。
+
+本节的代码量不多，主要是因为我们已经在`扳手工程`中完成了动态限流的设计和开发，到拼团系统中直接使用即可。建议学习本节内容时，前置的学习下扳手工程。
+
+## 二、功能流程
+
+如图，在接口方法中配置动态限流能力；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-22-01.png" width="550px">
+</div>
+
+- 首先，如，动态配置中心，统一设计模式，限流组件，都是在扳手工程内的引入的 bom 清单中。当需要使用限流组件时，直接在项目对应的模块下，引入pom即可。
+- 之后，限流组件的动态控制，依赖的是动态配置中心。所以，在使用限流组件时，则需要顺序的引入下动态配置中心。这里还有另外一种做法，如 Spring AI 发布框架组件时候，提供3层关系结构。包括；功能件、自动装配件、整合 Starter 件。那么我们这里如果想让用户更简单的使用限流组件，而不需要关心是否要引入动态配置中心组件，则可以为限流组件，发布一个带有动态配置中心的pom文件的组件，这样用户就不需要单独引入了。
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-23\350\212\202\357\274\232ELK+AI MCP\346\243\200\347\264\242.md" "b/docs/md/project/group-buy-market/\347\254\2542-23\350\212\202\357\274\232ELK+AI MCP\346\243\200\347\264\242.md"
new file mode 100644
index 000000000..2c7f9c307
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-23\350\212\202\357\274\232ELK+AI MCP\346\243\200\347\264\242.md"	
@@ -0,0 +1,28 @@
+---
+title: 【更】第2-23节：ELK + AI MCP 检索
+pay: https://t.zsxq.com/AV4Jp
+---
+
+# 《拼团交易平台系统》第2-23节：ELK + AI MCP 检索
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/6BHXt](https://t.zsxq.com/6BHXt)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+为拼团项目增加 ELK 分布式日志采集和查询系统，以及通过 AI MCP 的方式，检索系统运行日志和数据分析。
+
+系统的运行日志，是排查系统问题的重要手段，尤其是分布式复杂系统，一次行为请求会执行多个接口查询。这些接口查询会被分布式系统承接，到不同的服务节点上执行。因此分布式日志就非常有用，可以串联出在哪个系统上执行的，并拿到全部日志进行分析。
+
+## 二、框架介绍
+
+Elastic Stack 技术栈，别是 `Elasticsearch`、`Logstash`、`Kibana` 组成，简称 ELK 是一套针对日志数据做解决方案的框架。它使您能够聚合来自所有系统和应用程序的日志，分析这些日志，并创建可视化来进行应用程序和基础设施监控、更快的故障排除、安全分析等。
+
+- E = Elasticsearch：Elasticsearch 是在 Apache Lucene 上构建的分布式搜索和分析引擎。对各种语言、高性能和无架构 JSON 文档的支持使 Elasticsearch 成为各种日志分析和搜索使用案例的理想选择。
+- L = Logstash：Logstash 是一个开源数据摄取工具，允许您从各种来源收集数据，转换数据，并将数据发送到您希望的目标。通过预构建的筛选器和对 200 多种插件的支持，Logstash 使用户能够轻松摄取数据，无论数据源或类型如何。
+- K = Kibana：Kibana 是一种数据可视化和挖掘工具，可以用于日志和时间序列分析、应用程序监控和运营智能使用案例。它提供了强大且易用的功能，例如直方图、线形图、饼图、热图和内置的地理空间支持。此外，付费的 Kibana 还有 x-pack-jdbc 可以使用，让你就像使用 MyBatis 操作 MySQL 数据库一样操作 Elasticsearch 数据。
+
+综上，3个组件的组合使用。由 Logstash 将摄取、转换数据并将其发送到 Elasticsearch 为摄取的数据编制索引，并且分析和搜索这些数据。最终 Kibana 会将分析结果可视化。也就是你可以在 Kibana 上实时看到系统的运行日志。
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-24\350\212\202\357\274\232\347\263\273\347\273\237\347\233\221\346\216\247+AIMCP\345\210\206\346\236\220.md" "b/docs/md/project/group-buy-market/\347\254\2542-24\350\212\202\357\274\232\347\263\273\347\273\237\347\233\221\346\216\247+AIMCP\345\210\206\346\236\220.md"
new file mode 100644
index 000000000..404513383
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-24\350\212\202\357\274\232\347\263\273\347\273\237\347\233\221\346\216\247+AIMCP\345\210\206\346\236\220.md"
@@ -0,0 +1,30 @@
+---
+title: 【更】第2-24节：系统监控 + AI MCP 分析
+pay: https://t.zsxq.com/Gz6PG
+---
+
+# 《拼团交易平台系统》第2-24节：系统监控 + AI MCP 分析
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/afbln](https://t.zsxq.com/afbln)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+为拼团系统配置`普罗米修斯`监控，并使用 AI MCP 工具，分析监控数据。通过这样的学习，让大家了解到企业里如何使用 AI 在软件工程方面的提效。
+
+现在的互联网公司内，在每个大的业务部门，都陆续的开始搭建了 AI 团队。专门为本团队的业务系统做关于 AI 提效方面的开发。像是智能巡检、系统监控、代码开发、PRD文档评审、代码评审、智能客服等，都是 AI 方面的应用。
+
+## 二、功能流程
+
+如图，整个功能流程如下；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-24-01.png" width="700px">
+</div>
+
+- 首先，拼团应用系统，需要配置对应的监控暴漏端点，这样的目的是为了把数据暴漏出去。注意，对外使用要增加上验证权限，避免数据暴漏出去。
+- 之后，进入普罗米修斯和监控面板的配置文件，修改对应的配置，主要是IP、数据库文件等（课程下有说明），之后通过 Docker 启动，普罗米修斯 + 监控面板 + AI MCP 服务端，这样的目的是为了采集来自于系统的暴漏端点数据。
+- 最后，监控相关配置完成后，调用拼团系统接口，产生一些业务数据。之后通过 AI 客户端，配置 MCP 服务，这样就可以通过 AI 客户端分析系统监控情况了。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-25\350\212\202\357\274\232\351\200\206\345\220\221\346\265\201\347\250\213\345\234\272\346\231\257\345\210\206\346\236\220.md" "b/docs/md/project/group-buy-market/\347\254\2542-25\350\212\202\357\274\232\351\200\206\345\220\221\346\265\201\347\250\213\345\234\272\346\231\257\345\210\206\346\236\220.md"
new file mode 100644
index 000000000..e94bea4e6
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-25\350\212\202\357\274\232\351\200\206\345\220\221\346\265\201\347\250\213\345\234\272\346\231\257\345\210\206\346\236\220.md"
@@ -0,0 +1,32 @@
+---
+title: 【更】第2-25节：逆向流程场景分析
+pay: https://t.zsxq.com/Batrz
+---
+
+# 《拼团交易平台系统》第2-25节：逆向流程场景分析
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/afbln](https://t.zsxq.com/afbln)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+对于拼团这样的业务场景，有正向流程的下单，就有逆向流程退单。基本你在各类应用 APP 中，如；商城、外卖、出行、票务等，都是可以下单或者退单的。这也是一个互联网toc业务场景中，非常常见的流程。
+
+所以，从这一节开始，我们将进入逆向流程的分析和后续的功能实现。先有这一节的场景分析，让小白伙伴知道这样一个流程，之后在详细设计和编码也会更加容易。
+
+建议；学习这一节的时候，可以看看其他的应用类 APP 他们的退单流程都发生了什么动作，这些知识点以及不同的处理方式，都可以作为你学习后的对项目扩展实现的增强点。
+
+## 二、功能流程
+
+如图，以用户旅途视角来看整个拼团流程。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-25-01.png" width="700px">
+</div>
+
+- 首先，我们来回顾下前面章节，完成的业务流程。从运营配置拼团活动，到用户从「小型支付商城（对接的一个场景）」，开始查看带有拼团优惠的上，进行试算，过滤规则。再到参与拼团，完成下单和一系列的流程处理。之后是拼团对于支付收单的入账计算，达成拼团目标后，回调（HTTP/MQ）商城服务，完成整个交易过程。
+- 那么，从本节开始，我们要考虑的是如何处理逆向流程，也就是退单的过程。退单分为当前过程中，拼团是否完成，未完成则根据是否支付了，取消锁单量和完成量。如果拼团已完成，则取消锁单量和完成量，拼团优惠释放后，则回调商城（refundGroupBuySuccess）,完成退单退货服务。
+- 一般，对于已经完成拼团的，有用户退单是不会对其他用户已经完成交易的进行退单的，会造成很差的体验。这部分成本往往由商家和平台分摊，毕竟平台的目的是为了卖货。
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-26\350\212\202\357\274\232\346\234\252\346\224\257\344\273\230\351\200\200\345\215\225\346\265\201\347\250\213.md" "b/docs/md/project/group-buy-market/\347\254\2542-26\350\212\202\357\274\232\346\234\252\346\224\257\344\273\230\351\200\200\345\215\225\346\265\201\347\250\213.md"
new file mode 100644
index 000000000..6282b0fdd
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-26\350\212\202\357\274\232\346\234\252\346\224\257\344\273\230\351\200\200\345\215\225\346\265\201\347\250\213.md"
@@ -0,0 +1,32 @@
+---
+title: 【更】第2-26节：未支付退单流程（枚举策略模式应用）
+pay: https://t.zsxq.com/S9cnj
+---
+
+# 《拼团交易平台系统》第2-26节：未支付退单流程（枚举策略模式应用）
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/MVr1a](https://t.zsxq.com/MVr1a)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+退单，分为退掉拼团组队记录和外部对接的商城（也可以是其他平台）退单。当前我们在处理的流程为退掉拼团的组队记录，在这部分流程中，还包括；`未支付退单`、`已支付未成团退单`、`已支付已成团退单`。
+
+本节我们先来串联`未支付退单`部分，搭建此部分的领域功能服务逻辑，以及编写出退单策略框架结构。整体的功能实现，后续还会引入责任链进行优化处理。可以先对照使用责任链和不使用时候的代码实现方式。
+
+## 二、功能流程
+
+如图，退单流程设计领域结构。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-26-01.png" width="800px">
+</div>
+
+- 首先，在 trade 领域层，新增加一个逆向流程接口，之后在领域层增加退单策略。
+- 之后，退单策略分为三个实现类，`未支付退单`、`已支付未成团退单`、`已支付已成团退单`，本节先实现其中未支付退单。由未支付退单，一定是这个人参与了锁单，但拼团未完成。
+- 最后，在仓储层实现实现对数据库的事务操作。更新退单记录，更新拼团锁单量扣减。
+- 此外，本部分在后续章节还要迭代，使用设计模式的方式优化实现逻辑。因为整个退单的步骤也比较多，还包括了后需要发送 MQ 消息的过程。
+
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-27\350\212\202\357\274\232\345\267\262\346\224\257\344\273\230\346\234\252\346\210\220\345\233\242\351\200\200\345\215\225.md" "b/docs/md/project/group-buy-market/\347\254\2542-27\350\212\202\357\274\232\345\267\262\346\224\257\344\273\230\346\234\252\346\210\220\345\233\242\351\200\200\345\215\225.md"
new file mode 100644
index 000000000..09c490f4a
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-27\350\212\202\357\274\232\345\267\262\346\224\257\344\273\230\346\234\252\346\210\220\345\233\242\351\200\200\345\215\225.md"
@@ -0,0 +1,32 @@
+---
+title: 【更】第2-27节：已支付未成团退单
+pay: https://t.zsxq.com/Aw3qI
+---
+
+# 《拼团交易平台系统》第2-27节：已支付未成团退单
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/319Es](https://t.zsxq.com/319Es)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+继续迭代退单流程，处理已支付未成团退单。
+
+而对于已支付未成团的退单，拼团退单完成后，需要驱动退款流程。也就是另外一个项目（小型支付）在用户发起退单后，需要先把优惠逆向处理掉，之后等待逆向完成进行支付退款。
+
+那么，为什么不是项目（小型支付）调用完拼团，就直接退款呢。其实是做直接退款的，但有时候会出现一个临界的异常。如，调用拼团退掉优惠完成后，rpc/http 请求返回结果，可能因为网络超时，导致项目（小型支付）拿不到结果。这个时候，一种是可以重试，另外一种是可以等待MQ消息，驱动后续流程。而在大厂中，MQ消息驱动，是更为常见的使用方式。
+
+## 二、功能流程
+
+如图，退单流程设计领域结构。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-27-01.png" width="800px">
+</div>
+
+- 首先，整体我们设计了3个退单策略，`未支付退单策略`、`已支付未成团退单策略`、`已支付已成团退单策略`。在这几个章节，会陆续的处理。
+- 之后，结合上一节的`未支付退单策略`，本节继续实现`已支付未成团退单策略`。不过这里有一个差异，需要写一个本地消息表，对于已支付的退单，要发送一个退单完成的MQ消息。其实后续`未支付退单策略`也要补充这个MQ，用于恢复参与拼团量。
+- 另外，因为这里也用到了，MQ 的发送和任务补偿。所以要把之前写到 trade 结算里的任务发送操作，抽取一个接口方法，进行共用。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-28\350\212\202\357\274\232\345\267\262\346\224\257\344\273\230\345\267\262\346\210\220\345\233\242\351\200\200\345\215\225.md" "b/docs/md/project/group-buy-market/\347\254\2542-28\350\212\202\357\274\232\345\267\262\346\224\257\344\273\230\345\267\262\346\210\220\345\233\242\351\200\200\345\215\225.md"
new file mode 100644
index 000000000..d3ca3fc9d
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-28\350\212\202\357\274\232\345\267\262\346\224\257\344\273\230\345\267\262\346\210\220\345\233\242\351\200\200\345\215\225.md"
@@ -0,0 +1,32 @@
+---
+title: 【更】第2-28节：已支付已成团退单
+pay: https://t.zsxq.com/msTia
+---
+
+# 《拼团交易平台系统》第2-28节：已支付已成团退单
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/PI7bY](https://t.zsxq.com/PI7bY)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+本章节是退单流程中最后一个步骤，对已支付，已成团状态的订单进行退单操作。
+
+通过我们在前面的流程分析，已成团的退单，则只退个人单，不会影响到全局所有人的订单。那么这里如果一个拼团有多人退单，哪怕整个队伍只有一个人没有退单，也是可以的。
+
+注意，这类的业务流程，主要受公司的产品设计的流程影响。如果一些特点的任务，一人退单，全队解散。那么就要针对不同类型的退单，做不同的策略实现。这块可以思考下。
+
+## 二、功能流程
+
+如图，退单流程设计领域结构。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-28-01.png" width="800px">
+</div>
+
+- 如图，本节扩展实现第3个操作，`已支付已成团退单策略`的处理。
+- 注意，所有的退单策略，都要发MQ，本节把未支付未成团，也添加上MQ的发送。但要注意，添加MQ，他们都属于同一类，task 任务表要增加类型区分和 uuid 字段仿重。
+
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-29\350\212\202\357\274\232\351\200\200\345\215\225\351\224\201\345\215\225\351\207\217\346\201\242\345\244\215.md" "b/docs/md/project/group-buy-market/\347\254\2542-29\350\212\202\357\274\232\351\200\200\345\215\225\351\224\201\345\215\225\351\207\217\346\201\242\345\244\215.md"
new file mode 100644
index 000000000..f7040d2e1
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-29\350\212\202\357\274\232\351\200\200\345\215\225\351\224\201\345\215\225\351\207\217\346\201\242\345\244\215.md"
@@ -0,0 +1,28 @@
+---
+title: 【更】第2-29节：退单锁单量恢复
+pay: https://t.zsxq.com/4p5Vd
+---
+
+# 《拼团交易平台系统》第2-29节：退单锁单量恢复
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/o8Sz5](https://t.zsxq.com/o8Sz5)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+接收拼团组队退单消息，驱动锁单量redis库存恢复操作。这是一个数据库和缓存数据一致性的设计，在很多场景都非常实用。
+
+## 二、功能流程
+
+如图，退单恢复库存核心流程；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-29-01.png" width="600px">
+</div>
+
+- 首先，退单恢复库存最重要的就是数据一致性。数据库中已经变更完 lock 锁单记录了，之后就是更新 redis 缓存的量。
+- 那么，这里为了保证更新 redis 是一致性库存的，且成功的。所以需要添加一个分布式锁，来维护，确保不会被重复更新。
+- 所以，当加锁失败则表示重复恢复库存，如果incr 失败，则删掉分布式锁，抛异常，让 MQ 重试。这个概率很低，但也需要添加，以保证整体的可靠性。
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-2\350\212\202\357\274\232\350\257\225\347\256\227\346\250\241\345\236\213\346\212\275\350\261\241\346\250\241\346\235\277\350\256\276\350\256\241.md" "b/docs/md/project/group-buy-market/\347\254\2542-2\350\212\202\357\274\232\350\257\225\347\256\227\346\250\241\345\236\213\346\212\275\350\261\241\346\250\241\346\235\277\350\256\276\350\256\241.md"
new file mode 100644
index 000000000..c4d04df77
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-2\350\212\202\357\274\232\350\257\225\347\256\227\346\250\241\345\236\213\346\212\275\350\261\241\346\250\241\346\235\277\350\256\276\350\256\241.md"
@@ -0,0 +1,37 @@
+---
+title: 【更】第2-2节：试算模型抽象模板设计
+pay: https://t.zsxq.com/uTLt9
+---
+
+# 《拼团交易平台系统》第2-2节：试算模型抽象模板设计
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/fEB5s](https://t.zsxq.com/fEB5s)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+编程能力突飞猛进的成长，往往都来自于对复杂业务场景的拆分解耦和设计模式运用过程锻炼。虽然有时候是同样的业务，但不同的编程方式，带来的思维锻炼也是不同的。
+
+就像 CRUD 的方式写代码，只能让你了解业务流程，但不会提高工程建模能力和编程思维的提升。所以整个小傅哥带着你做的项目，都会循序渐进的为你从模型设计解决业务场景问题出发。既可以提高你的编程思维，也能锻炼你的编码能力。
+
+## 一、本章诉求
+
+在一个工程中，随着不断地承接业务需求逻辑的实现，会有很多复杂场景需要解决。这个时候就会引入设计模式进行解耦和实现，提高工程代码的扩展性。
+
+但随着开发的场景越来越多，在各个service实现中会存在相同的设计模式，如果是不同的人开发，那么一个责任链，一个规则树，也会有非常多的实现方式。那么这样就会导致后面在进入开发的人，对已存在的代码，维护的成本就越来越高了。
+
+所以，本节小傅哥带着大家先做设计模式抽象模板的通用结构定义，添加一个 tree规则树抽象模型，在引入到工程中进行使用。这样后续工程中就可以不断的定义通用的设计模式被不同的场景统一使用了。
+
+## 二、模型设计
+
+这是一种链式的多分支规则树模型结构，由功能节点自行决定后续流程的执行链路。它的设计比责任链的扩展性更好，自由度也更高。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-2-01.png" width="750px">
+</div>
+
+- 首先，定义抽象的通用的规则树模型结构。涵盖；StrategyMapper - 策略映射器、StrategyHandler - 策略处理器、`AbstractStrategyRouter<T, D, R>` - 策略路由抽象类。通过泛型设计允许使用方可以自定义出入参和动态上下文，让抽象模板模型具有通用性。
+- 之后，由使用方自定义出工厂、功能抽象类和一个个流程流转的节点。这些节点可以自由组装进行流转，相比于责任链它的实现方式更具有灵活性。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-30\350\212\202\357\274\232\350\256\276\350\256\241\346\250\241\345\274\217\351\207\215\346\236\204\351\200\200\345\215\225.md" "b/docs/md/project/group-buy-market/\347\254\2542-30\350\212\202\357\274\232\350\256\276\350\256\241\346\250\241\345\274\217\351\207\215\346\236\204\351\200\200\345\215\225.md"
new file mode 100644
index 000000000..fdf87674b
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-30\350\212\202\357\274\232\350\256\276\350\256\241\346\250\241\345\274\217\351\207\215\346\236\204\351\200\200\345\215\225.md"
@@ -0,0 +1,31 @@
+---
+title: 【更】第2-30节：设计模式重构退单
+pay: https://t.zsxq.com/DJCKB
+---
+
+# 《拼团交易平台系统》第2-30节：设计模式重构退单
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/TsTt5](https://t.zsxq.com/TsTt5)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+通过设计模式重构现有退单流程。
+
+在整个退单的功能实现的过程中，是没有过多引入设计模式的，更多的是以完成功能流程为主。那么本节我们则使用责任链、抽象类、工厂，来把目前的退单流程设计进行优化调整。
+
+这样做的目的是为了让小白伙伴，具备了业务流程的理解和对应代码功能的开发基础上，在学习使用设计模式来优化流程代码，会更加得心应手！
+
+## 二、功能流程
+
+如图，整个退单通过设计模式优化的结构；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-30-01.png" width="950px">
+</div>
+
+- 第一条退单链路，以工厂🏭方式获取执行责任链，责任链的作用是拆分原有的流程结构，分节点进行逐步处理。之后到退单的具体操作，则根据枚举策略，拿到对应执行的退单策略模式，完成退单动作。退单执行后发送MQ消息，驱动后续流程。
+- 第二条消息消息，从接收 MQ 开始，以 MQ 消息中的策略类型进行库存恢复操作。这部分保持原有的走对应的策略即可。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-31\350\212\202\357\274\232\351\200\200\350\256\242\346\216\245\345\217\243\345\222\214\345\256\232\346\227\266\344\273\273\345\212\241.md" "b/docs/md/project/group-buy-market/\347\254\2542-31\350\212\202\357\274\232\351\200\200\350\256\242\346\216\245\345\217\243\345\222\214\345\256\232\346\227\266\344\273\273\345\212\241.md"
new file mode 100644
index 000000000..b0cae63ab
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-31\350\212\202\357\274\232\351\200\200\350\256\242\346\216\245\345\217\243\345\222\214\345\256\232\346\227\266\344\273\273\345\212\241.md"
@@ -0,0 +1,29 @@
+---
+title: 【更】第2-31节：退订接口和定时任务
+pay: https://t.zsxq.com/S4pdB
+---
+
+# 《拼团交易平台系统》第2-31节：退订接口和定时任务
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/Ga9uG](https://t.zsxq.com/Ga9uG)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+在触发器层实现调度逻辑，一个是退单的 HTTP 服务接口实现，另外一个是 Job 定时任务处理。
+
+HTTP 退单接口为的是给外部系统（小型支付）调用使用，Job 任务则是定时检查是否有参与拼团锁单，但超时没有完成支付的进行拼团组队的，则进行自动退单处理。
+
+## 二、功能流程
+
+如图，退单触发条件流程图；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-31-01.png" width="750px">
+</div>
+
+- 退单的触发流程分为2类，一个是定时任务处理，自动扫描未完成订单，另外一个是提供接口，让外部调用方进行处理。
+  
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-3\350\212\202\357\274\232\345\244\232\347\272\277\347\250\213\345\274\202\346\255\245\346\225\260\346\215\256\345\212\240\350\275\275.md" "b/docs/md/project/group-buy-market/\347\254\2542-3\350\212\202\357\274\232\345\244\232\347\272\277\347\250\213\345\274\202\346\255\245\346\225\260\346\215\256\345\212\240\350\275\275.md"
new file mode 100644
index 000000000..f1ad7ec32
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-3\350\212\202\357\274\232\345\244\232\347\272\277\347\250\213\345\274\202\346\255\245\346\225\260\346\215\256\345\212\240\350\275\275.md"
@@ -0,0 +1,36 @@
+---
+title: 【更】第2-3节：多线程异步数据加载
+pay: https://t.zsxq.com/yofwB
+---
+
+# 《拼团交易平台系统》第2-3节：多线程异步数据加载
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/UoiFa](https://t.zsxq.com/UoiFa)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+在互联网公司中的业务功能开发，会非常重视接口的响应效率，一般整体的接口响应要控制在350毫秒，那么在每个细分领域的接口可能会被压缩到50~100毫秒。
+
+这样的响应时间对于一些简单的接口到不会有什么影响，但如果是复杂较多的业务流程串联的接口，那么控制接口的响应时长就是一个非常大的挑战了。对于这样的情况，往往会引入异步线程加载数据的方式进行处理，之后在做统一的逻辑处理，这样就可以很好的降低接口响应时间。
+
+## 一、本章诉求
+
+扩展规则树模型结构，增加异步数据加载区。将用于试算营销优惠的接口使用异步线程进行加载，之后写入上下文，用于后续的逻辑处理。
+
+这部分的模型设计是非常巧妙的，通过解耦逻辑和划分功能区，让代码具有了文档属性，看到对应的类和类下的方法区，就可以轻松的理解代码实现方式。这样的处理非常有利于后续功能的迭代。
+
+## 二、模型链路
+
+如图，为整个模型链路的执行过程图；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-3-01.png" width="550px">
+</div>
+
+- 首先，对通用设计模式树结构扩展出异步数据加载区，这样可以把接口实现中所需的数据前置到异步数据加载区完成加载操作。以此提高接口的响应效率。
+- 之后，本节串联功能节点，并在 MarketNode 节点，添加数据加载操作。
+- 另外，注意本节需要新增加一个表 sku，也就是商品信息表，通过商品信息表获得当前商品的价格配置，以此来做商品的折扣计算。这块在实际生产中有两种实现方式，一种是每次都调用外部接口获取商品，另外一种是有商品统一同步库可以查询。我们这里先通过一个统一的商品库进行处理。那么后续谁要对接这个系统，就调用sku商品库，同步好商品即可。【库表已更新到工程下】
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-4\350\212\202\357\274\232\347\255\226\347\225\245\346\250\241\345\274\217\344\274\230\346\203\240\346\212\230\346\211\243\350\256\241\347\256\227.md" "b/docs/md/project/group-buy-market/\347\254\2542-4\350\212\202\357\274\232\347\255\226\347\225\245\346\250\241\345\274\217\344\274\230\346\203\240\346\212\230\346\211\243\350\256\241\347\256\227.md"
new file mode 100644
index 000000000..30ccb4654
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-4\350\212\202\357\274\232\347\255\226\347\225\245\346\250\241\345\274\217\344\274\230\346\203\240\346\212\230\346\211\243\350\256\241\347\256\227.md"
@@ -0,0 +1,35 @@
+---
+title: 【更】第2-4节：策略模式优惠折扣计算
+pay: https://t.zsxq.com/NGF2u
+---
+
+# 《拼团交易平台系统》第2-4节：策略模式优惠折扣计算
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/inWxL](https://t.zsxq.com/inWxL)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+程序员的价值不在于只是完成业务需求，而是怎么架构系统、设计边界、凝练功能，让原本只是 CRUD 串联大量逻辑的代码，分区、分职责、用不同的策略模型承接。以此提高软件的交付质量，才是程序员的价值。
+
+所以，我也从不敢说什么东西没有用。比如；DDD、设计模式，否则也不会有那么多我们日常使用源码框架，都有这些思想的体现了。
+
+## 一、本章诉求
+
+通过策略模式处理多类型折扣方式的逻辑计算，同时设定抽象模板，用于扩展后续人群标签的过滤。
+
+不断的拆解功能逻辑边界的过程，比只是编写流水式代码要重要的多。在整个系统实现的过程中，要多体会这些思想。
+
+## 二、模型设计
+
+如图，继续在执行链路上像乐高积木一样拼装优惠折扣的计算逻辑；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-4-01.png" width="750px">
+</div>
+
+- 首先，MarketNode 节点的数据异步加载工作已经在上一节完成，这一节开始使用这里的数据做折扣计算。
+- 之后，折扣是在数据库中配置的，按照类型包括；ZJ - 直减、MJ - 满减、ZK - 折扣、N - n元购。那么这些不同的类型就可以用策略模型进行包装，每个实现类专门负责自己的逻辑计算。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-5\350\212\202\357\274\232\344\272\272\347\276\244\346\240\207\347\255\276\346\225\260\346\215\256\351\207\207\351\233\206.md" "b/docs/md/project/group-buy-market/\347\254\2542-5\350\212\202\357\274\232\344\272\272\347\276\244\346\240\207\347\255\276\346\225\260\346\215\256\351\207\207\351\233\206.md"
new file mode 100644
index 000000000..22146d2c0
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-5\350\212\202\357\274\232\344\272\272\347\276\244\346\240\207\347\255\276\346\225\260\346\215\256\351\207\207\351\233\206.md"
@@ -0,0 +1,41 @@
+---
+title: 【更】第2-5节：人群标签数据采集
+pay: https://t.zsxq.com/ovDqo
+---
+
+# 《拼团交易平台系统》第2-5节：人群标签数据采集
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/sWPg0](https://t.zsxq.com/sWPg0)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+在抖音里经常可能会刷到一些视频，说：“你搜白酒，如果出来的都是茅台、五粮液”，那么证明你是有钱人！
+
+这个东西其实到不一定多准，但这里体现了一个技术上的东西叫做人群标签🏷，所有你的行为所产生的数据，都会被不同的标签类型统计。比如；年龄、性别、购物喜好、品类喜好、下单频次、浏览频次、搜索频次等。这些都会被归类为人群标签。
+
+其实，还有一个。怎么感觉自己微信上聊天，过一会在京东、拼多多搜索，就出来了自己聊天时候的商品呢？这里一种是来自于输入法内容的获取，另外一个是广告联盟，这些商家的广告数据是互通的。你在一个地方搜索过，那么在进去到其他商城里就会展示出你搜索的数据。
+
+所以，在互联网运营的手里中，你早已被圈定好该给你什么，才能刺激到你做什么。
+
+## 一、本章诉求
+
+以轻量化的方式构建人群标签数据，将人群数据写入到 Redis BitMap 用于后续使用。
+
+在公司中，所有部门产生的业务数据都会回流到数仓，它有一个非常庞大的数据集市系统。之后这些数据会被量化分析师使用，通过 R 语言建模，执行模型任务，把符合模型所需的标签数据跑到一个新的指定表文件中，这些文件在通过加工存放到 Redis BitMap 进行使用。一般一个标签可能会有 50万、100万、500万的数据规模。
+
+有了这些标签数据，运营人员就可以精准的对这些用户做定向活动投放，比如；特定的券、特定的通知等。以此达到更加精准的运营效果。
+
+## 二、业务流程
+
+虽然，我们不能像公司那样有那么大规模的数据量，但我们也可以仅使用拼团商品的数据，做人群标签的实现，让大家了解这样一个场景。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-5-01.png" width="550px">
+</div>
+
+- 首先，人群标签是通过创建的采集任务所产生的数据。任务里包含了要采集业务中什么类型的数据规则。本项目中会采集拼团交易数据，不过本节还没有这类数据，所以先来模拟这部分数据。
+- 之后，把采集的数据除了放数据库，还需要写入到 Redis 的 BitMap 中，这个数据结构比较适合高并发场景判断用户是否存在。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-6\350\212\202\357\274\232\346\213\206\345\210\206\345\272\223\350\241\250\345\205\263\350\201\224\345\205\263\347\263\273.md" "b/docs/md/project/group-buy-market/\347\254\2542-6\350\212\202\357\274\232\346\213\206\345\210\206\345\272\223\350\241\250\345\205\263\350\201\224\345\205\263\347\263\273.md"
new file mode 100644
index 000000000..1f48179c5
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-6\350\212\202\357\274\232\346\213\206\345\210\206\345\272\223\350\241\250\345\205\263\350\201\224\345\205\263\347\263\273.md"
@@ -0,0 +1,44 @@
+---
+title: 【更】第2-6节：拆分库表关联关系
+pay: https://t.zsxq.com/SisVe
+---
+
+# 《拼团交易平台系统》第2-6节：拆分库表关联关系
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/MyFI0](https://t.zsxq.com/MyFI0)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+有伙伴问，看视频写项目，能跟着完成，也能运行出结果。但怎样才算是真正的掌握了这个项目的内容呢？
+
+多年的工作经验，要想掌握一个项目，只听分享、只看视频、只看文档，都是不行的，这些都只能让你了解但不是深入。只要上手写代码，一行行的完成需求逻辑，才能算是真正的掌握了这个项目。
+
+所以，趁着项目不大，本节我们设定一个作业。我会给你讲解诉求和需要改动的功能点，你可以按照这样的流程来做编码和调试。完成后，在继续跟进课程学习，比对代码。当然如果你目前还处于小白阶段，也可以直接跟着课程学习。
+
+## 一、本章诉求
+
+在系统开始之初，简化功能设计，让拼团活动配置表直接耦合商品ID。也就是一个拼团活动，只关联一个商品ID。那么如果现在需要给10个商品，全配置一个相同的拼团活动，就没法配置了。总不能一个个全配置一遍。所以本节要对这块的内容做拆分解耦。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-6-01.png" width="700px">
+</div>
+
+- group_buy_activity 拼团活动配置表中，融合了渠道和商品ID，属于和活动配置绑定了。
+- sku 商品信息，已经包含了渠道SC值和商品ID。而商品表咱们前面提到过，它是由接入方同步的商品信息，也可以不走这里，直接用 RPC/HTTP 接口查询数据，所以 sku 表不适合绑定互动ID。
+- 那么，就需要一个新的表来关联活动和商品信息配置，表名为 sc_sku_activity 必备字段；SC渠道、活动ID、商品ID。（自己创建库表后可以和课程的库表对比）
+- 你可以根据这样的信息来创建你的库表，同时移除 group_buy_activity 表中 SC渠道值和商品ID。
+
+## 二、业务流程
+
+如图，整个改动流程的核心为让 MarketNode 节点的查询由原来方式改为先查询SC商品活动配置关联表，获得到活动ID，再查询活动信息。这期间如果有效的活动配置信息无，那么则走到 ErrorNode 节点，返回一个指定的错误码。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-6-02.png" width="700px">
+</div>
+
+- 首先，你可以先通过如图的调用过程，理解本节要完成的编程动作。包括解耦后的新的库表关联关系。
+- 之后，编码的时候异步多线程查询商品关联配置，如果配置的信息为空，或者不存在有效的活动，那么可以返回一个 null。当拿到null 以后，可以做判断进行路由，走到 ErrorNode 节点。「这部分代码一定自己尝试下，多思考。」
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-7\350\212\202\357\274\232\344\272\272\347\276\244\346\240\207\347\255\276\350\212\202\347\202\271\350\277\207\346\273\244.md" "b/docs/md/project/group-buy-market/\347\254\2542-7\350\212\202\357\274\232\344\272\272\347\276\244\346\240\207\347\255\276\350\212\202\347\202\271\350\277\207\346\273\244.md"
new file mode 100644
index 000000000..4f4da3c8f
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-7\350\212\202\357\274\232\344\272\272\347\276\244\346\240\207\347\255\276\350\212\202\347\202\271\350\277\207\346\273\244.md"
@@ -0,0 +1,33 @@
+---
+title: 【更】第2-7节：人群标签节点过滤
+pay: https://t.zsxq.com/EL4gD
+---
+
+# 《拼团交易平台系统》第2-7节：人群标签节点过滤
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/E5VKd](https://t.zsxq.com/E5VKd)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+什么样的代码算好代码？做编程开发这么多年，我一直追求将代码简单化，让代码即是文档，看代码即可知道每一块功能的边界。因为一个功能开发出来，基本就要伴随着业务的发展一直持续下去。那么好的代码，就可以更好的维护，尤其是遇到问题的时候，可以快速定位。
+
+## 一、本章诉求
+
+在整个首页营销试算流程中，需要添加一个新的人群标签🏷节点 TagNode，来处理人群过滤的操作。
+
+在本节你会看到目前的模型结构设计是非常容易添加出一个新的流程节点，同时对原有的功能不会有破坏性。这样既可以让我们更好的维护代码，也能方便持续的需求迭代。
+
+## 二、业务流程
+
+如图，增加 TagNode 节点，调整节点调用关系；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-7-01.png" width="700px">
+</div>
+
+- 首先，添加一个新的 TagNode 节点，调整营销 MarketNode 节点完成业务功能后，流转到新的 TagNode 节点。
+- 之后，在从个 TagNode 节点流转到 EndNode 结束节点。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-8\350\212\202\357\274\232\345\212\250\346\200\201\351\205\215\347\275\256\345\274\200\345\205\263\346\223\215\344\275\234.md" "b/docs/md/project/group-buy-market/\347\254\2542-8\350\212\202\357\274\232\345\212\250\346\200\201\351\205\215\347\275\256\345\274\200\345\205\263\346\223\215\344\275\234.md"
new file mode 100644
index 000000000..e8dd4a7ab
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-8\350\212\202\357\274\232\345\212\250\346\200\201\351\205\215\347\275\256\345\274\200\345\205\263\346\223\215\344\275\234.md"
@@ -0,0 +1,39 @@
+---
+title: 【更】第2-8节：动态配置开关操作
+pay: https://t.zsxq.com/wp9GE
+---
+
+# 《拼团交易平台系统》第2-8节：动态配置开关操作
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/yHvNc](https://t.zsxq.com/yHvNc)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+在编程能力积累进阶的过程中，核心框架源码（Spring、MyBatis）的掌握是非常必要的过程之一。这些源码的组件学习后是可以帮助自身做业务功能逻辑的实现。
+
+有些伙伴可能会觉得就做个业务开发，是不没有必要学习？🤔 其实不是的，对于源码这样的东西，往往是因为它并没有成为你熟悉的知识，所以也不会成为你设计的方案之一。当你熟练掌握后，会很巧妙的结合源码做自己的技术实现方案。
+
+## 一、本章诉求
+
+如何不停车就给汽车换个轮子？
+
+这是互联网应用程序中经常干的事情，在程序运行过程中，直接动态变更某些属性配置。这些动态变更的配置包括降级和切量的开关，也包括一些功能程序的白名单用户测试。
+
+那么对于配置中心，有 SpringCloud Config + Event Bus，也有 Nacos，还有各个大厂中会基于各类组件做的自研实现。那么本节我们先来做一个基于 Redis 发布/订阅处理动态配置的自研的实现，之后对于 SpringCloud 的动态配置变更已经有案例，小伙伴也可以学习。
+
+案例：[https://bugstack.cn/md/road-map/springcloud-bus.html](https://bugstack.cn/md/road-map/springcloud-bus.html)
+
+## 二、业务流程
+
+如图，基于 Redis 实现一套动态配置中心 DCC 服务；Dynamic Config Control
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-8-01.png" width="700px">
+</div>
+
+- 注意，本节会涉及到 Spring源码、Java 动态配置的一些编码操作，属于组件类开发是思想。如本节实现的功能也可以被独立出一个工程组件开发后被业务系统引入使用。
+- 方案，动态配置的处理可以使用 Zookeeper 的节点监听，也可以基于 Redis 的发布/订阅。本节咱们使用 Redis 这套方案，当你学习到后面的大营销项目，还会看到 Zookeeper 的实现方案。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2542-9\350\212\202\357\274\232\346\213\274\345\233\242\344\272\244\346\230\223\350\220\245\351\224\200\351\224\201\345\215\225.md" "b/docs/md/project/group-buy-market/\347\254\2542-9\350\212\202\357\274\232\346\213\274\345\233\242\344\272\244\346\230\223\350\220\245\351\224\200\351\224\201\345\215\225.md"
new file mode 100644
index 000000000..23bc3e226
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2542-9\350\212\202\357\274\232\346\213\274\345\233\242\344\272\244\346\230\223\350\220\245\351\224\200\351\224\201\345\215\225.md"
@@ -0,0 +1,36 @@
+---
+title: 【更】第2-9节：拼团交易营销锁单
+pay: https://t.zsxq.com/csVlH
+---
+
+# 《拼团交易平台系统》第2-9节：拼团交易营销锁单
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/csVlH](https://t.zsxq.com/csVlH)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+在编程开发实现业务逻辑的过程中，头脑中可以有一个乐高积木的思想，考虑分拆逻辑聚合每一块业务。让这些业务具备良好的复用性。
+
+尤其是复杂的下单过程，会有很多模块会被使用，所以这部分要想好你在整个下单过程中，会有哪些逻辑应该被聚合，怎么串联上下文。
+
+## 一、本章诉求
+
+当商城类系统接入拼团时，则需要在下单过程中使用一笔营销优惠。这里的营销优惠可以为；无券平台营销、有券消费营销、拼团折扣营销、积分抵扣营销等。
+
+那么，当商城类系统接入使用下单时，则需要到拼团系统锁定一笔优惠，也就是占用一个名额。完事后，商城类系统继续操作支付交易的过程。
+
+## 二、业务流程
+
+如图，完善原有业务流程。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-2-9-01.png" width="850px">
+</div>
+
+- 首先，团购的商品下单。下单过程分为创建流水单、锁定营销优惠（拼团、积分、券）、创建支付订单、唤起收银台支付、用户扫码支付、支付完成核销优惠等。
+- 那么，这里用户以拼团方式下单，创建流水单完成后，需要与拼团系统交互，锁定营销优惠。更新流水单优惠金额和支付金额。接下来就可以创建支付单了（支付单需要最终的支付金额）。
+- 注意，拼团表 group_buy_order 除了有目标量（target_count）、完成量（complete），还要有一个锁单量（lock_count），当锁单量达到目标量后，用户在此组织下，不能在参与拼团。直至这些用户支付完成达成拼团或者锁单超时回退支付营销，空出可参与锁单量，这样其他用户可以继续参与。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2543-1\350\212\202\357\274\232DeepSeek\350\256\276\350\256\241\346\213\274\345\233\242UI.md" "b/docs/md/project/group-buy-market/\347\254\2543-1\350\212\202\357\274\232DeepSeek\350\256\276\350\256\241\346\213\274\345\233\242UI.md"
new file mode 100644
index 000000000..6b35c4ec2
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2543-1\350\212\202\357\274\232DeepSeek\350\256\276\350\256\241\346\213\274\345\233\242UI.md"
@@ -0,0 +1,36 @@
+---
+title: 【更】第3-1节：DeepSeek设计拼团UI
+pay: https://t.zsxq.com/TnhqL
+---
+
+# 《拼团交易平台系统》第3-1节：DeepSeek设计拼团UI
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/0ef6r](https://t.zsxq.com/0ef6r)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+国外比较擅长做创新，国内比较适合做应用。但好在这次在 OpenAI 的赛道上，横空出世了一个 DeepSeek，与过往的几个 OpenAI 产品相比，这次是可以和 ChatGPT 掰掰手腕了。
+
+那 OpenAI 会抢了程序员的饭碗吗？🤔 首先，我认为是不会。就像 OpenAI 也会给你讲医学知识，那你敢自己开刀吗？OpenAI 也能讲法律知识，你能出去给人家当律师吗？甚至，在你没有某方面知识积累的时候，你也没法提出更专业的问题和完善类的资料。
+
+其实都不能，OpenAI 的作用是让强的人更强，厉害的人更厉害。本身在哪一方面有积累，那么就能运用这些积累的知识借助 OpenAI 这个伙伴，把它做的更好。
+
+## 一、本章诉求
+
+结合 DeepSeek 等同类型 OpenAI 产品设计拼团 UI。
+
+在我体验过的整个 OpenAI 产品中，以前 ChatGPT 4o 系列模型对代码的需求的理解是不错的，可以给还原出比较好的 UI 样式。不过这次在体验了 DeepSeek 后，它也可以还原出很不错的 UI 样式。
+
+>本节要做一个简单对接的流程设计，关于商品下单支付这部分会模拟，暂时不走商城类系统。
+
+## 二、UI 效果展示
+
+按照本节的实现，最终你会得到一个这样的效果。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-3-1-05.png" width="650px">
+</div>
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2543-2\350\212\202\357\274\232DeepSeek\345\244\204\347\220\206UI\344\270\216\346\216\245\345\217\243\345\257\271\346\216\245.md" "b/docs/md/project/group-buy-market/\347\254\2543-2\350\212\202\357\274\232DeepSeek\345\244\204\347\220\206UI\344\270\216\346\216\245\345\217\243\345\257\271\346\216\245.md"
new file mode 100644
index 000000000..2180bc079
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2543-2\350\212\202\357\274\232DeepSeek\345\244\204\347\220\206UI\344\270\216\346\216\245\345\217\243\345\257\271\346\216\245.md"
@@ -0,0 +1,35 @@
+---
+title: 【更】第3-2节：DeepSeek处理UI与接口对接
+pay: https://t.zsxq.com/LtzHY
+---
+
+# 《拼团交易平台系统》第3-2节：DeepSeek处理UI与接口对接
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/qKjOi](https://t.zsxq.com/qKjOi)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+OpenAI 适合什么场景的编程？我觉得前端算一个，为什么呢？
+
+前端相对于后端，没有数据库、缓存、RPC、MQ、任务调度等等一系列的复杂组件运用，而更多的工作都是在既定路线上的重复处理。所以，它的场景就更适合 OpenAI 一次的加载和理解，并给出正确性更高的编码实现，从而减轻开发人员的工作量。
+
+在有这类的 OpenAI 产品后，我在开发前端代码上，确实更加得心应手了。
+
+## 一、本章诉求
+
+结合 DeepSeek 等同类型 OpenAI 产品，辅助完成 UI 与服务端接口的对接。
+
+前端的 UI 已经明确，服务端的接口已经开发完成，他们中间没有什么额外的复杂逻辑了。只要告诉 OpenAI 调用接口，并明确出 UI 中位置的内容展示是来自于接口里的位置，那么就可以完成自动化的对接。
+
+## 二、效果展示
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-3-2-06.png" width="850px">
+</div>
+
+- UI 与 服务端接口完整对接后，可以看到数据接口数据的使用，并渲染到前端页面。
+- 在没有用户参与拼团的时候，首次展示引导用户开启拼团。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2543-3\350\212\202\357\274\232\345\260\217\345\225\206\345\237\216\345\257\271\346\216\245\350\220\245\351\224\200\351\224\201\345\215\225.md" "b/docs/md/project/group-buy-market/\347\254\2543-3\350\212\202\357\274\232\345\260\217\345\225\206\345\237\216\345\257\271\346\216\245\350\220\245\351\224\200\351\224\201\345\215\225.md"
new file mode 100644
index 000000000..9d8c71104
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2543-3\350\212\202\357\274\232\345\260\217\345\225\206\345\237\216\345\257\271\346\216\245\350\220\245\351\224\200\351\224\201\345\215\225.md"
@@ -0,0 +1,41 @@
+---
+title: 【更】第3-3节：小商城对接营销锁单
+pay: https://t.zsxq.com/x2sHW
+---
+
+# 《拼团交易平台系统》第3-3节：小商城对接营销锁单
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/1QJTP](https://t.zsxq.com/1QJTP)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+从本章开始，我们会进入到2套系统的对接，陆续完成星球「码农会锁」里的`小型支付商城`与`拼团`在业务流程层面完成接口对接。
+
+通过这样的学习，你可以积累到关于微服务间是如何通信和流程衔接的。在这公司里也是非常常见的设计和开发方式。
+
+那么，本节我们先来完成商品下单过程中，营销锁单的接口对接。小型支付商城选择的是 `s-pay-mall-ddd` 工程，单独拿出一套命名为 `s-pay-mall-ddd-market` 方便大家学习。
+
+**前置学习**；在开始这部分对接前，需要对星球的《小型支付商城系统》有所学习。课程地址：[https://t.zsxq.com/3X9GA](https://t.zsxq.com/3X9GA)
+
+## 二、业务流程
+
+如图，两套微服务对接节点；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-3-3-01.png" width="950px">
+</div>
+
+- 左侧，小型支付商城，用户下单过程。增加一个营销锁单，从营销锁单中获取拼团营销拿到的优惠价格。之后小型商城继续往下走，创建支付订单。
+- 右侧，拼团交易平台，提供营销锁单流程，锁单目标、优惠试算，规则过滤，最终落库和返回结果（订单ID、原始价格、折扣金额、支付金额、订单状态）。
+
+- 功能改造点；
+
+    - 【拼团系统】lockMarketPayOrder 营销拼团锁单，增加返回字段值。原来只返回了优惠金额，为了方便使用方不需要自己在做计算，可以直接返回，原始价格、折扣金额、支付金额。这样的话，拼团就需要在 group_buy_order_list 表增加 pay_price，这样就更方便的拿到这个值了。
+    - 【小型商城】基于 Retrofit2，在 infrastructure 基础设施层，封装对拼团接口的对接。`Call<Response<LockMarketPayOrderResponseDTO>> lockMarketPayOrder(@Body LockMarketPayOrderRequestDTO requestDTO);` 并在 app 启动层的配置里，修改 `Retrofit2Config` 提供 `groupBuyMarketService` 服务。
+    - 【小型商城】对 AliPayController#createPayOrder 创建订单服务的接口入参类，添加拼团队伍ID、活动ID、营销标识。如果前端前端没有拿到拼团活动信息则传递无营销。
+    - 【小型商城】对 AbstractOrderService#createOrder 创建订单的过程中，通过 port 端口，添加 `port.lockMarketPayOrder(userId, teamId, activityId, productId, orderId);` 锁单。
+    - 【小型商城】对于锁单返回的支付金额，为拼团交易订单金额。最终营销标识、优惠金额、支付金额，都会更新到 pay_order 表中，这个表要增加这样3个字段。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2543-4\350\212\202\357\274\232\345\260\217\345\225\206\345\237\216\345\257\271\346\216\245\350\220\245\351\224\200\347\273\223\347\256\227.md" "b/docs/md/project/group-buy-market/\347\254\2543-4\350\212\202\357\274\232\345\260\217\345\225\206\345\237\216\345\257\271\346\216\245\350\220\245\351\224\200\347\273\223\347\256\227.md"
new file mode 100644
index 000000000..4ce6ccb7a
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2543-4\350\212\202\357\274\232\345\260\217\345\225\206\345\237\216\345\257\271\346\216\245\350\220\245\351\224\200\347\273\223\347\256\227.md"
@@ -0,0 +1,37 @@
+---
+title: 【更】第3-4节：小商城对接营销结算
+pay: https://t.zsxq.com/rBemT
+---
+
+# 《拼团交易平台系统》第3-4节：小商城对接营销结算
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/0V186](https://t.zsxq.com/0V186)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+处理小型支付商城在用户完成支付后，调用拼团营销组队结算，并接收组队完成的回调消息执行后续交易结算发货。—— `这里一个是拼团结算，一个是交易结算`
+
+也就是说每一笔用户支付完成，拼团组队也就有一人推进了组队的进度，直至组队完成，即可回调交易系统进行通知组队完成，进行后续发货流程。
+
+## 二、业务流程
+
+如图，拼团交易结算流程；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-3-4-01.png" width="750px">
+</div>
+
+- 上半部分，是拼团交易过程，进行营销锁单。是咱们上一节实现的。
+- 下办部分，是拼团结算过程，进行营销结算。本节我们要做的新流程。
+- 功能改造点；
+
+  - 基础设施层 infrastructure gateway 下的 IGroupBuyMarketService 增加营销拼团结算方法（顺便加入拼团中DTO对象）。
+  - 修改 OrderService#changeOrderPaySuccess 方法，判断订单是否有营销，无营销的继续走老流程。有营销则通过 port 适配调用基础设施层拼团的结算方法。
+  - 在 trigger 层，AliPayController 增加 groupBuyNotify 回调方法。并把地址配置到 application-dev.yml 中。这样拼团系统在接收小型商城的用户订单组队完成后，就可以接收回调方法了。
+  - domain order 领域服务，增加 changeOrderMarketSettlement 修改订单状态方法，增加一个拼团结算的状态。之后发送MQ消息，这个时候就每一笔分别结算发货了。
+  - domain 领域服务，增加 goods 商品领域，模拟发货和修改订单状态。这个方法交给，OrderPaySuccessListener 接收到结算消息后进行调用。
+  - 注意；为了方便拼团测试，我们可以把拼团活动的组队人数修改为1个。
diff --git "a/docs/md/project/group-buy-market/\347\254\2543-5\350\212\202\357\274\232\345\260\217\345\225\206\345\237\216UI\344\270\216\346\216\245\345\217\243\345\257\271\346\216\245.md" "b/docs/md/project/group-buy-market/\347\254\2543-5\350\212\202\357\274\232\345\260\217\345\225\206\345\237\216UI\344\270\216\346\216\245\345\217\243\345\257\271\346\216\245.md"
new file mode 100644
index 000000000..bab684655
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2543-5\350\212\202\357\274\232\345\260\217\345\225\206\345\237\216UI\344\270\216\346\216\245\345\217\243\345\257\271\346\216\245.md"
@@ -0,0 +1,30 @@
+---
+title: 【更】第3-5节：小商城UI与接口对接
+pay: https://t.zsxq.com/Jh698
+---
+
+# 《拼团交易平台系统》第3-5节：小商城UI与接口对接
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/jPjFC](https://t.zsxq.com/jPjFC)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+基于 DeepSeek/OpenAI 等AI产品，把UI代码、接口代码，增加逻辑描述，一起喂给AI，来处理小型支付商城UI与接口的对接。
+
+在前面章节我们开发了一款静态页面UI，直接和拼团后端对接。这回走正式的逻辑，下单将走到小型支付商城，由商城后端处理锁单和结算。之后和前端页面UI对接。
+
+这是一次微服务的前后端全流程衔接，支付商城和拼团营销，就是2个微服务系统。学到这块，你即可以实践的方式理解微服务，而哪些RPC、MQ、xxl-job、分库分表等，则是为每个微服务提供分布式负载能力的技术。这些东西将在后续章节展开。
+
+## 二、效果展示
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-3-5-01.png" width="850px">
+</div>
+
+- UI 与小型支付商城对接后，可以扫码登录，确认支付时走支付宝沙箱登录。
+- 这样就是一个完整的，商品营销下单支付，再到结算的流程了。
+
diff --git "a/docs/md/project/group-buy-market/\347\254\2543-6\350\212\202\357\274\232\351\200\232\350\277\207\346\265\217\350\247\210\345\231\250\346\214\207\347\272\271\350\216\267\345\217\226\347\231\273\345\275\225ticket\346\227\240\347\227\225\347\231\273\345\275\225.md" "b/docs/md/project/group-buy-market/\347\254\2543-6\350\212\202\357\274\232\351\200\232\350\277\207\346\265\217\350\247\210\345\231\250\346\214\207\347\272\271\350\216\267\345\217\226\347\231\273\345\275\225ticket\346\227\240\347\227\225\347\231\273\345\275\225.md"
new file mode 100644
index 000000000..f0ae657b7
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2543-6\350\212\202\357\274\232\351\200\232\350\277\207\346\265\217\350\247\210\345\231\250\346\214\207\347\272\271\350\216\267\345\217\226\347\231\273\345\275\225ticket\346\227\240\347\227\225\347\231\273\345\275\225.md"
@@ -0,0 +1,30 @@
+---
+title: 【更】第3-6节：通过浏览器指纹获取登录ticket + 无痕登录
+pay: https://t.zsxq.com/cGRlq
+---
+
+# 《拼团交易平台系统》第3-6节：通过浏览器指纹获取登录ticket + 无痕登录
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/8Oa5K](https://t.zsxq.com/8Oa5K)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+增强登录安全性，使用浏览器指纹，获取唯一 Ticket 作为登录二维码使用。
+
+本章节属于知识点的扩展，即使没实现，也不影响整体功能。
+
+## 二、业务流程
+
+如图，增加浏览器指纹标识；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-3-6-01.png" width="750px">
+</div>
+
+- 原有的微信扫码登录拿到的是同一个 Tikcet，这样是满足测试，但对于上线给其他人一起使用是不太安全的。所以我们可以通过浏览器指纹的方式进行处理。
+- 浏览器指纹生成唯一标识，通过唯一标识获取ticket，并在轮训验证中使用浏览器指纹加验。确保浏览器指纹缓存的 ticket 和登录后的 ticket 保持一致。
+
diff --git "a/docs/md/project/group-buy-market/\347\254\2543-7\350\212\202\357\274\232\347\224\250\346\210\267\350\256\242\345\215\225\345\210\227\350\241\250\345\222\214\351\200\200\345\215\225UI.md" "b/docs/md/project/group-buy-market/\347\254\2543-7\350\212\202\357\274\232\347\224\250\346\210\267\350\256\242\345\215\225\345\210\227\350\241\250\345\222\214\351\200\200\345\215\225UI.md"
new file mode 100644
index 000000000..9c02ba5e7
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2543-7\350\212\202\357\274\232\347\224\250\346\210\267\350\256\242\345\215\225\345\210\227\350\241\250\345\222\214\351\200\200\345\215\225UI.md"
@@ -0,0 +1,30 @@
+---
+title: 【更】第3-7节：用户订单列表和退单UI
+pay: https://t.zsxq.com/8D4SE
+---
+
+# 《拼团交易平台系统》第3-7节：用户订单列表和退单UI
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/Yng4V](https://t.zsxq.com/Yng4V)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+给现有的商品拼团下单页面，增加一个`我的订单列表页`，这样用户可以查询订单以及申请退单操作。
+
+本节的操作主要是配和 UI 页面，增加对应的 CRUD 接口，为了后续对接拼团退单使用。难度不大。关于支付（支付宝沙箱）退单，已经有单测案例，可以参考。后续会使用。
+
+## 二、业务流程
+
+如图，查询订单列表和退单的流程；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-3-7-01.png" width="750px">
+</div>
+
+- 订单查询，查询个人订单记录。这样用户就可以知道下了多少订单了，类似于你京东、淘宝、拼多多查询的个人订单记录。
+- 退单流程，在每个订单上，可以点击退单操作。这部分主要为了后续对接拼团进行退单处理。
+- 整个本节的内容其实主要是 CURD 来配和 UI 的，难度不大。对于 UI 界面，可以使用 ai 工具进行设计。前端部分就是为了配和整个完整性的，面试中主要考察后端。所以，如果不太会写前端代码也不要太担心。
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2543-8\350\212\202\357\274\232\351\200\200\345\215\225\351\200\200\346\254\276\346\234\215\345\212\241\345\257\271\346\216\245.md" "b/docs/md/project/group-buy-market/\347\254\2543-8\350\212\202\357\274\232\351\200\200\345\215\225\351\200\200\346\254\276\346\234\215\345\212\241\345\257\271\346\216\245.md"
new file mode 100644
index 000000000..9384cdda6
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2543-8\350\212\202\357\274\232\351\200\200\345\215\225\351\200\200\346\254\276\346\234\215\345\212\241\345\257\271\346\216\245.md"
@@ -0,0 +1,32 @@
+---
+title: 【更】第3-8节：退单退款服务对接
+pay: https://t.zsxq.com/u7vu9
+---
+
+# 《拼团交易平台系统》第3-8节：退单退款服务对接
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/ysPNN](https://t.zsxq.com/ysPNN)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+处理小型支付商城与拼团营销的接口和MQ消息对接，完成退单退款的业务实现。
+
+整个过程会包括从小型支付发起退单申请，调用拼团解除组队锁单量/完成量。由拼团发送的MQ，被小型支付监听，发起退款操作。这部分有接口，也有 MQ 的异步处理，是一个综合的链路调度技术运用。这类设计方案，在互联网公司里的业务场景是非常常见的。
+
+## 二、页面流程（UI）
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-3-8-03.png" width="750px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-3-8-04.png" width="750px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-3-8-05.png" width="750px">
+</div>
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2544-1\350\212\202\357\274\232\347\254\2541\351\230\266\346\256\265\351\203\250\347\275\262\344\272\221\347\216\257\345\242\203.md" "b/docs/md/project/group-buy-market/\347\254\2544-1\350\212\202\357\274\232\347\254\2541\351\230\266\346\256\265\351\203\250\347\275\262\344\272\221\347\216\257\345\242\203.md"
new file mode 100644
index 000000000..3f396bb50
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2544-1\350\212\202\357\274\232\347\254\2541\351\230\266\346\256\265\351\203\250\347\275\262\344\272\221\347\216\257\345\242\203.md"
@@ -0,0 +1,30 @@
+---
+title: 【更】第4-1节：第1阶段部署云环境
+pay: https://t.zsxq.com/cgBDM
+---
+
+# 《拼团交易平台系统》第4-1节：第1阶段部署云环境
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/izUPl](https://t.zsxq.com/izUPl)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+将项目上线部署到云服务器环境，提供公网IP地址，可以访问体验。
+
+现阶段的很多面试，面试官在面试过程中都比较重视考察求职者对于项目学习的完整性，从设计、开发、测试、迭代，再到部署上线，一整套的内容，全都了解清楚是非常好的。
+
+## 二、部署过程
+
+如图，为本次的部署过程；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-4-1-01.png" width="700px">
+</div>
+
+- 首先，购买云服务器，之后搭建云环境。[http://618.gaga.plus/](http://618.gaga.plus/) 2c2g 很便宜，不过更推荐2c4g也不贵，避免以后部署其他的不够用了。
+- 之后，检出项目、构建镜像。以及部署操作。
+- 最后，要记得，开放使用的端口。这个过程会使用到 `9000`、`8091`、`8899`
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2544-2\350\212\202\357\274\232\347\254\2542\351\230\266\346\256\265\351\203\250\347\275\262\344\272\221\347\216\257\345\242\203.md" "b/docs/md/project/group-buy-market/\347\254\2544-2\350\212\202\357\274\232\347\254\2542\351\230\266\346\256\265\351\203\250\347\275\262\344\272\221\347\216\257\345\242\203.md"
new file mode 100644
index 000000000..410b5cfe5
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2544-2\350\212\202\357\274\232\347\254\2542\351\230\266\346\256\265\351\203\250\347\275\262\344\272\221\347\216\257\345\242\203.md"
@@ -0,0 +1,30 @@
+---
+title: 【更】第4-2节：第2阶段部署云环境
+pay: https://t.zsxq.com/jzoIz
+---
+
+# 《拼团交易平台系统》第4-2节：第2阶段部署云环境
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/Mjr20](https://t.zsxq.com/Mjr20)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+将支付商城 + 拼团，Nginx 负载部署到云服务器，使用穿透映射提供的域名，进行访问体验。
+
+这一阶段部署，就有微服务的体现了。要注意，微服务是微服务，分布式是分布式。不要混淆概念。两个技术方案可以一起使用，也可以单独使用。
+
+## 二、部署过程
+
+如图，为本次的部署过程；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-4-2-01.png" width="800px">
+</div>
+
+- 首先，购买云服务器，之后搭建云环境。[http://618.gaga.plus/](http://618.gaga.plus/) 需要2c4g部署，本节需要部署2个项目，并进行负载方式多实例部署。
+- 之后，检出项目、构建镜像。以及部署操作。
+- 最后，要记得，开放使用的端口。这个过程会使用到 `9000`、`8091`、`8092`、`8899`、`9091`等，需要开放的端口
\ No newline at end of file
diff --git "a/docs/md/project/group-buy-market/\347\254\2544-3\350\212\202\357\274\232\347\254\2543\351\230\266\346\256\265\351\203\250\347\275\262\344\272\221\347\216\257\345\242\203.md" "b/docs/md/project/group-buy-market/\347\254\2544-3\350\212\202\357\274\232\347\254\2543\351\230\266\346\256\265\351\203\250\347\275\262\344\272\221\347\216\257\345\242\203.md"
new file mode 100644
index 000000000..44b193b32
--- /dev/null
+++ "b/docs/md/project/group-buy-market/\347\254\2544-3\350\212\202\357\274\232\347\254\2543\351\230\266\346\256\265\351\203\250\347\275\262\344\272\221\347\216\257\345\242\203.md"
@@ -0,0 +1,30 @@
+---
+title: 【更】第4-3节：第3阶段部署云环境
+pay: https://t.zsxq.com/cycJ1
+---
+
+# 《拼团交易平台系统》第4-3节：第3阶段部署云环境
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>视频：[https://t.zsxq.com/kcqaK](https://t.zsxq.com/kcqaK)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+将支付商城 + 拼团系统，以 Nginx 负载的方式，在云服务器通过 Docker 方式进行部署。
+
+部署包括；环境（mysql、redis、rabbitmq）、监控（prometheus、grafana）、分布式日志（elk）、应用（小型支付、拼团），natapp（内网穿透）、微信公众号、支付宝沙箱
+
+## 二、部署过程
+
+如图，为本次的部署过程；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-4-3-01.png" width="800px">
+</div>
+
+- 首先，购买云服务器，之后搭建云环境。[http://618.gaga.plus/](http://618.gaga.plus/) 最低2c4g部署（仅部署项目），2c8g全量部署，本节需要部署2个项目，并进行负载方式多实例部署。
+- 之后，检出项目、构建镜像。以及部署操作。
+- 最后，要记得，开放使用的端口。这个过程会使用到 `9000`、`8091`、`8092`、`8899`、`9091`、`4000`、`15672`等，需要开放的端口。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-1/\347\254\2541\350\212\202\357\274\232DDD \346\236\266\346\236\204\346\246\202\345\277\265.md" "b/docs/md/project/s-pay-mall/part-1/\347\254\2541\350\212\202\357\274\232DDD \346\236\266\346\236\204\346\246\202\345\277\265.md"
new file mode 100644
index 000000000..4ddbbcdc3
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-1/\347\254\2541\350\212\202\357\274\232DDD \346\236\266\346\236\204\346\246\202\345\277\265.md"	
@@ -0,0 +1,41 @@
+---
+title: 第1-1节 DDD 架构概念
+pay: https://t.zsxq.com/EduDQ
+---
+
+# 《小型支付商城系统》第1-1节 DDD 架构概念
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+# 第1节：DDD 架构概念
+
+DDD 是什么，这应该是每个想使用 DDD 开发项目的研发伙伴，遇到的第一个疑问，只有搞清楚它到底是什么才好上手使用。而 DDD 既不是 MVC 一样的工程结构，也不能直接等同于微服务架构，更不是一种设计模式。
+
+## 1. DDD 是什么
+
+那 DDD 是什么呢？来自于维基百科的一段定义：["Domain-driven design (DDD) is a major software design approach. "](https://en.wikipedia.org/wiki/Domain-driven_design)，DDD 是一种软件设计方法。也就是说 DDD 是指导我们做软件工程设计的一种手段，它提供了用切割工程模型的各类技巧，如；领域、界限上下文、实体、值对象、聚合、工厂、仓储等。通过 DDD 的指导思想，我们可以在前期投入更多的时间，更加合理的规划出可持续迭代的工程设计。
+
+在 DDD 中有一套共识的工程两阶段设计手段，包括；战略设计、战术设计。
+
+- **战略设计**，主要以应对复杂的业务需求，通过抽象、分治的过程，合理的拆分为独立的多个微服务，从而分而治之。与之评价拆分的是否合理，则是在需求开发上线时候，是否每次都大量操作多个微服务开发和上线。这样的战略设计是一种失败的微服务单体设计。所以少数几个中等规模的单体应用，周围环绕着一个服务生态系统，这更有意义。[你实际上并没有构建微服务 @贾斯汀·埃瑟里奇](https://www.simplethread.com/youre-not-actually-building-microservices/)
+
+- **战术设计**，在这个范畴下，主要以讨论如何基于面向对象思维，运用领域模型来表达业务概念。通常在不做领域模型设计的架构，也就是通常映射到 MVC 三层架构下，`Service + 数据模型`的开发模式，会让 Service 扁平的、大量的，平铺出非常复杂的业务逻辑代码。再加上行为对象与功能逻辑的分离，贫血模型的开发方式，让行为对象的不断交叉使用，也是让系统不断增加复杂度，并到难以维护的根因。所以这一阶段要设计每一个可以表达领域概念的模型，并运用实体、聚合、领域服务来承载。
+
+## 2. DDD 的概念
+
+什么是充血模型，领域内都包括什么，实体、聚合、值对象，有什么区别？这样一些"为什么"的概念，也是战术设计过程中非常重要的知识项。搞清楚它们才能做 DDD 设计。
+
+### 2.1 充血模型
+
+**充血模型**，指将对象的属性信息与行为逻辑聚合到一个类中，常用的手段如在对象内提供属于当前对象的`信息校验`、`拼装缓存Key`、`不含服务接口调用的逻辑处理`等。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/ddd-easy-guide-01-01.png" width="750px">
+</div>
+
+- 这样的方式可以在使用一个对象时，就顺便拿到这个对象的提供的一系列方法信息，所有使用对象的逻辑方法，都不需要自己再次处理同类逻辑。
+- 但不要只是把充血模型，仅限于一个类的设计和一个类内的方法设计。充血还可以是整个包结构，一个包下包括了用于实现此包 Service 服务所需的各类零部件（模型、仓储、工厂），也可以被看做充血模型。
+- 同时我们还会再一个同类的类下，提供对应的内部类，如用户实名，包括了，通信类、实名卡、银行卡、四要素等。它们都被写进到一个用户类下的内部子类，这样在代码编写中也会清晰的看到子类的所属信息，更容易理解代码逻辑，也便于维护迭代。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-1/\347\254\2542\350\212\202\357\274\232DDD \345\273\272\346\250\241\346\226\271\346\263\225.md" "b/docs/md/project/s-pay-mall/part-1/\347\254\2542\350\212\202\357\274\232DDD \345\273\272\346\250\241\346\226\271\346\263\225.md"
new file mode 100644
index 000000000..a0239bfa2
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-1/\347\254\2542\350\212\202\357\274\232DDD \345\273\272\346\250\241\346\226\271\346\263\225.md"	
@@ -0,0 +1,40 @@
+---
+title: 第1-2节 DDD 建模方法
+pay: https://t.zsxq.com/teMSw
+---
+
+# 《小型支付商城系统》第1-2节 DDD 建模方法
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+四色建模（风暴事件）是整个 DDD 这套软件设计方法中用于工程拆分界限上下文的非常重要的实践手段。通过建模过程快速识别业务领域中的关键事件和核心流程，也是在这个过程中设计出领域对象的，为后面详细设计和代码开发做指导。
+
+你可以把整个过程理解为，为工程开发提供面向对象设计，涵盖；领域拆分、界限串联、功能聚合。所以相比`Service + 数据模型`的贫血开发方式，**DDD 前期需要付出更多的设计成本，但对于软件的长周期迭代，这样的好处是非常大的。**
+
+## 1. 建模目的
+
+工程的建模的目的是为了我们做工程开发时提供指导方案，就像一栋大楼的设计蓝图一样，也像一个超市中会有不同品类的货架，需要提前规划好。所以你需要在工程开发时所需的各类核心内容，都会在建模中体现，如；分几个包、有哪些核心对象、要串联什么流程、有哪些核心业务要实现、过程中与外部服务的交互。
+
+那么为了达成一个讨论的共识，而不是每个人都有一套的标准和词汇。所以会使用 DDD 提供专门的建模方法和名词进行统一的设计，此外因为 DDD 的统一建模语言，不涉及技术编码，也具有通用性，所以可以在建模过程让产品、研发、测试、架构师等人员一起参与讨论。如；领域、领域模型（实体、聚合、值对象）、领域服务、端口适配器、仓储、界限上下文、领域编排等名词。*这在上一节已经做了相关的解释。*
+
+## 2. 怎么建模
+
+DDD 的建模过程，是以一个用户为起点，通过行为命令，发起行为动作，串联整个业务。而这个用户的起点最初来自于用例图的分析。用例图是用户与系统交互的最简表示形式，展现了用户和与他相关的用例之间的关系。通过用例图，我们可以分析出所有的行为动作。
+
+在 DDD 中用于完成用户的行为命令和动作分析的过程，是一个四色建模的过程，也称作风暴模型。在使用 DDD 的标准对系统建模前，一堆人要先了解 DDD 的操作手段，这样才能让产品、研发、测试、运营等了解业务的伙伴，都能在同一个语言下完成系统建模。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/roadmap-ddd-stc-08.png" width="750px">
+</div>
+
+此图是整个四色建模的指导图，通过寻找领域事件，发起事件命令，完成领域事件的过程，完成 DDD 工程建模。
+
+- 蓝色 - 决策命令，是用户发起的行为动作，如；开始签到、开始抽奖、查看额度等。
+- 黄色 - 领域事件，过去时态描述。如；签到完成、抽奖完成、奖品发放完成。它所阐述的都是这个领域要完成的终态。
+- 粉色 - 外部系统，如你的系统需要调用外部的接口完成流程。
+- 红色 - 业务流程，用于串联决策命令到领域事件，所实现的业务流程。一些简单的场景则直接有决策命令到领域事件就可以了。
+- 绿色 - 只读模型，做一些读取数据的动作，没有写库的操作。
+- 棕色 - 领域对象，每个决策命令的发起，都是含有一个对应的领域对象。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-1/\347\254\2543\350\212\202\357\274\232DDD \345\267\245\347\250\213\346\250\241\345\236\213.md" "b/docs/md/project/s-pay-mall/part-1/\347\254\2543\350\212\202\357\274\232DDD \345\267\245\347\250\213\346\250\241\345\236\213.md"
new file mode 100644
index 000000000..0df2679bc
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-1/\347\254\2543\350\212\202\357\274\232DDD \345\267\245\347\250\213\346\250\241\345\236\213.md"	
@@ -0,0 +1,54 @@
+---
+title: 第1-3节 DDD 工程模型
+pay: https://t.zsxq.com/iPuAe
+---
+
+# 《小型支付商城系统》第1-3节 DDD 工程模型
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+**什么是系统的工程结构，工程框架的作用是什么？**
+
+其实，工程结构的存在作用目的，是为了承载工程系统开发的模型划分，定义工程服务开发过程中实施标准。说白了，就是你在工程实现时，在哪个层访问数据库、哪个层使用缓存、哪个层调用外部接口、哪个层做功能实现，这就是工程框架结构定义的目的。
+
+但在 `Service + 贫血模型` 的三层结构开发指导下，是没有细分出面向对象工程结构设计的趋于划分的。所以在通常意义的 MVC 下，开发过程所有需要的内容，都会堆砌到 Service 实现类中。这也是为什么 DDD 领域驱动设计的落地工程结构，会出现；洋葱架构、整洁架构、菱形架构、六边形架构等这些架构模型。因为我们需要更细致的划分，来承载 DDD 设计概念中映射的领域、仓储、适配、编排、触发，并重视面向对象过程。—— 其实你一上学，学Java就开始学面向对象了，只不过一点点在忘记它。
+
+## 一、为啥需要架构
+
+说到开发代码为啥需要架构，就想买了个房子，为啥要隔出厨房、客厅、卧室、卫生间一样，核心目的就是让不同的职责分配到不同的区域内。虽然在代码中是没有马桶要放卫生间、沙发要放客厅、床要放卧室。但他有一些列的科目信息要引入到工程。
+
+**在工程开发时会涉及到的核心科目；**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/ddd-easy-guide-03-01.png" width="550px">
+</div>
+
+如；统一的异常、数据库的连接、日志的打印、外部服务的调用、消息的监听、任务的轮训以及服务的实现等一些列的东西要处理，分配到不同的工程包下承载。在 DDD 之前，我们一直用 MVC 的分层结构承接这些内容；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/ddd-easy-guide-03-02.png" width="550px">
+</div>
+
+通用的、配置的、组件的、持久化的、内部的、外部的，在以往的单体应用时代开发下，其实是没有这么多东西的，那时候的工程结构都偏向于 Service + 贫血模型实现。
+
+但随着微服务的演进，越来越多的内容被填充到工程中，这个时候你细心的查看架构，就会发现原本的 MVC 结构其实已经变的非常混乱了。一个 Service 中为了实现自己的功能，要引入一堆的东西，这些原子的功能与 Service 自身的服务耦合在一块。也导致了工程的维护成本越来越大。
+
+>这样的三层工程结构分配方式，对于要承载庞大的分布式技术栈体系显然是有点小马拉大车，三缸机带不动SUV一样。
+
+## 二、工程结构设计
+
+2004年，Eric Evans 在发表了一部名为《Domain Driven Design》的著作。2005年 Alistair Cockburn 提出的“六边形关系图”理论，2008年 Jeffrey Palermo 提出了洋葱架构。虽然这些架构并不是专门为 DDD 而出，但巧的是这些架构都在 DDD 一书发表之后陆续推出新的架构模型。同时这些架构的分层设计方式也都与 DDD 非常契合，在这些架构下也可以很好的落地 DDD 设计方法。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/ddd-easy-guide-03-03.png" width="750px">
+</div>
+无论是六边形架构，还是洋葱架构，或是[张毅老师](http://zhangyi.xyz/)提到的南向网关/北向网关的菱形架构，他们的目标都是以领域服务为核心，隔离内部实现与外部资源的耦合。
+
+在 DDD 分层架构下，以支撑 domain 核心领域实现拆分出基础设施（infrastructure），来承接对外部资源的调用。触发器（trigger）向外部提供服务。之后 app 为应用启动、api 为接口定义、types 为通用信息、case 为编排。
+
+在这样一套结构下，用于开发工程的各项科目也可以被优雅的分配到各个分层结构了。相对于 Service + 数据模型的贫血模型结构，现在就主要以 domain 为核心开发业务功能，不会在 domain 工程模块下，引入其他各类外部组件了，这样就可以更加关心业务功能开发。
+
+之后是这样的思想映射到工程中，常见的分层结构会有两套，一套是整洁分层，另外一套是六边形分层。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-2/\347\254\2541\350\212\202\357\274\232\345\260\217\345\236\213\346\224\257\344\273\230\345\225\206\345\237\216\351\234\200\346\261\202\350\256\276\350\256\241.md" "b/docs/md/project/s-pay-mall/part-2/\347\254\2541\350\212\202\357\274\232\345\260\217\345\236\213\346\224\257\344\273\230\345\225\206\345\237\216\351\234\200\346\261\202\350\256\276\350\256\241.md"
new file mode 100644
index 000000000..5197a4c88
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-2/\347\254\2541\350\212\202\357\274\232\345\260\217\345\236\213\346\224\257\344\273\230\345\225\206\345\237\216\351\234\200\346\261\202\350\256\276\350\256\241.md"
@@ -0,0 +1,32 @@
+---
+title: 第2-1节：需求PRD讲解
+pay: https://t.zsxq.com/2iM7V
+---
+
+# 《小型支付商城系统》第2-1节：需求PRD讲解
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+在公司中，研发所做的需求，都是来自于产品对运营以及市场的诉求，进行需求设计。在经过产品PRD评审后，研发人员才能承接这个需求，再进行研发设计直至开发上线。
+
+所以，本节我们以产品的视角了解需求，评审PRD要完成的事项。这样可以让一些还没有正式进入公司工作的伙伴了解到整个项目开发的全流程。
+
+## 二、需求背景
+
+市场运营根据公司发展诉求，为公司的电脑、键盘提供一个简单小巧的自有在线商城，售卖公司的产品。根据运营市场调研，有55%的用户非常有意愿通过厂家直售的方式购买商品，这样即可减少冗余渠道线，直接让利给消费者。
+
+## 三、交互效果
+
+用户通过小型电商查看购买商品，点击购买校验登录。扫码登录后下单和跳转支付宝收银台。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-0-03.png" width="750px">
+</div>
+
+- 登录，通过微信公众号扫码登录，降低用户注册登录成本。
+- 支付，对接支付宝交易，通过支付宝完成支付。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-2/\347\254\2542\350\212\202\357\274\232\346\224\257\344\273\230\345\225\206\345\237\216\345\233\233\350\211\262\345\273\272\346\250\241\350\256\276\350\256\241.md" "b/docs/md/project/s-pay-mall/part-2/\347\254\2542\350\212\202\357\274\232\346\224\257\344\273\230\345\225\206\345\237\216\345\233\233\350\211\262\345\273\272\346\250\241\350\256\276\350\256\241.md"
new file mode 100644
index 000000000..0bf0dffa8
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-2/\347\254\2542\350\212\202\357\274\232\346\224\257\344\273\230\345\225\206\345\237\216\345\233\233\350\211\262\345\273\272\346\250\241\350\256\276\350\256\241.md"
@@ -0,0 +1,31 @@
+---
+title: 第2-2节：工程四色建模设计
+pay: https://t.zsxq.com/XeucE
+---
+
+# 《小型支付商城系统》第2-2节：工程四色建模设计
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+在公司中实际做项目，会先有产品拉一个评审会，对本地需求的 PRD 进行评审。这个过程会有产品、研发（前后端）、测试，一起参与评审。一般在 `30分钟 ~ 2小时`的会议。评审完成后，研发会对需求进行分工，较大型的项目，会有几个研发同时介入。之后每个研发进行设计阶段，设计会包括新项目的工程框架、技术栈选择、需求的模型设计（DDD）、功能的流程（MVC）实现、要实现和改动点说明等。
+
+本节我们就按照这样的一个过程进行需求的研发设计，主要包括；用户用例图、四色建模（领域拆分）、UML流程图、改动点。有这些东西就可以指导研发开发了。
+
+本项目会搭建 MVC、DDD 双套工程，四色建模主要给 DDD 工程使用。
+
+## 二、画用例图
+
+研发可以根据产品PRD提供的业务UI和流程，分析出用户会有的行为，根据行为画出用户用例图；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-2-2-01.png" width="400px">
+</div>
+
+- 用例图（英语：use case diagram）是用户与系统交互的最简表示形式，展现了用户和与他相关的用例之间的关系。通过用例图，人们可以获知系统不同种类的用户和用例。用例图也经常和其他图表配合使用。
+- 用例图，也可以等同于是用户故事（英语：User story）（软件开发和项目管理中的常用术语），主旨是以日常语言或商务用语撰写句子，是一段简单的功能表述。以客户或使用者的观点撰写下有价值的功能、引导、框架来与使用者进行互动，进而推动工作进程。可以被认为是一种规格文件，但更精确而言，它代表客户的需求与方向。以该用户故事来反应对象在组织内的其工作职责、范围、需要进行的任务等。用户故事在敏捷开发方法中用来定义系统需要提供的功能和实现需求管理。
+- 尽管用例本身会涉及大量细节和各种可能性，用例图却能提纲挈领地让人了解系统概况。它为“系统做什么”提供了简化了的图形表示，因此被誉为“搭建系统的蓝图”。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-2/\347\254\2543\350\212\202\357\274\232\346\224\257\344\273\230\350\256\242\345\215\225\345\234\272\346\231\257\350\241\250\350\256\276\350\256\241.md" "b/docs/md/project/s-pay-mall/part-2/\347\254\2543\350\212\202\357\274\232\346\224\257\344\273\230\350\256\242\345\215\225\345\234\272\346\231\257\350\241\250\350\256\276\350\256\241.md"
new file mode 100644
index 000000000..4877256ed
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-2/\347\254\2543\350\212\202\357\274\232\346\224\257\344\273\230\350\256\242\345\215\225\345\234\272\346\231\257\350\241\250\350\256\276\350\256\241.md"
@@ -0,0 +1,25 @@
+---
+title: 第2-3节：支付订单场景表设计
+pay: https://t.zsxq.com/MUIJB
+---
+
+# 《小型支付商城系统》第2-3节：支付订单场景表设计
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+讲解库表设计规范，包括；建表、字段、索引，在中大厂开发中也是非常重视这些规范的。之后我们结合上一节的研发设计所需开发的流程，设计对应的库表。
+
+## 二、设计规范
+
+为了能让读者更加清晰地看到这些相关规范都是如何体现的，小傅哥这里准备了个大图，把库表字段和规范全部整合在一起，方便学习使用。如下；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-2-3-01.png" width="850px">
+</div>
+
+如上所列规范包括：建表相关规范、字段相关规范、索引相关规范、使用相关规范。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2541\350\212\202\357\274\232DDD \345\267\245\347\250\213\346\241\206\346\236\266\346\220\255\345\273\272.md" "b/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2541\350\212\202\357\274\232DDD \345\267\245\347\250\213\346\241\206\346\236\266\346\220\255\345\273\272.md"
new file mode 100644
index 000000000..1236bb43d
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2541\350\212\202\357\274\232DDD \345\267\245\347\250\213\346\241\206\346\236\266\346\220\255\345\273\272.md"	
@@ -0,0 +1,43 @@
+---
+title: 第3-1节：DDD 工程框架搭建 + 基础配置 + Git 使用
+pay: https://t.zsxq.com/bjFkO
+---
+
+# 《小型支付商城系统》第3-1节：DDD 工程框架搭建 + 基础配置 + Git 使用
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+手把手的，分别通过手动创建和脚手架创建 DDD 工程结构。以及完成基础配置和 Git 使用。
+
+从本节进入 DDD 部分的学习开始，会对照 MVC 进行差异化的对比讲解。可能有时候文字没法直接关的表达两个工程的使用差异，可以先看视频在看文档和代码，这样会更好的理解 MVC  到 DDD 的工程设计实现。
+
+首先 DDD 是一种软件设计方法，它的规范标准和思想指导着软件设计实现，而为了更好的承接这样一套思想，有了新的架构结构。也就是我们常提到的；整洁架构、洋葱架构、六边形架构、菱形架构，这些架构的设计，合理的划分出了不同的分层结构，用于承接各项组件、服务、功能领域。在我们做这部分 DDD 实现时，会不断的体现出这些内容。
+
+## 二、环境配置
+
+- Jdk 1.8
+- Maven 3.x - [Maven 教程](https://bugstack.cn/md/road-map/maven.html)
+- IntellJ IDEA 社区版(免费) [IntelliJ  IDEA 教程](https://bugstack.cn/md/road-map/intellij-idea.html) 推荐`2023`及以上版本，使用起来更方便。
+- Git - 安装后会配置到  IntellJ IDEA 这样才能向服务端推送或者拉取代码。[Git 教程 ](https://t.zsxq.com/19Rnk98M0) 学习后可以知道怎么拉取、提交和比对代码。
+- 在线版脚手架：[https://bugstack.cn/md/road-map/ddd-archetype-maven.html](https://bugstack.cn/md/road-map/ddd-archetype-maven.html) - 直接配置使用即可。
+
+---
+
+```xml
+<mirrors>
+    <mirror>
+      <id>alimavenrepository</id>
+      <name>aliyun maven repository</name>
+      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
+      <mirrorOf>central</mirrorOf>
+    </mirror>
+</mirrors>
+```
+
+- 如果你的 Maven 拉取 Jar 包速度很慢，可以在 Maven 的 conf 下 settings.xml 添加阿里云镜像。
+- [https://t.zsxq.com/19Rnk98M0](https://t.zsxq.com/19Rnk98M0) 已提供配置好了 阿里云 Maven 镜像的 Maven 压缩包。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2542\350\212\202\357\274\232DDD \351\207\215\346\236\204\357\274\214\345\276\256\344\277\241\345\205\254\344\274\227\345\217\267\351\211\264\346\235\203.md" "b/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2542\350\212\202\357\274\232DDD \351\207\215\346\236\204\357\274\214\345\276\256\344\277\241\345\205\254\344\274\227\345\217\267\351\211\264\346\235\203.md"
new file mode 100644
index 000000000..ab2d7f9a3
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2542\350\212\202\357\274\232DDD \351\207\215\346\236\204\357\274\214\345\276\256\344\277\241\345\205\254\344\274\227\345\217\267\351\211\264\346\235\203.md"	
@@ -0,0 +1,31 @@
+---
+title: 第3-2节：DDD 重构，微信公众号鉴权
+pay: https://t.zsxq.com/wBobE
+---
+
+# 《小型支付商城系统》第3-2节：DDD 重构，微信公众号鉴权
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+在【第2部分 - 需求设计】[工程四色建模](https://articles.zsxq.com/id_pj4jlidovrpd.html)里，我们已经做了 DDD 部分的建模设计。到这一节学习前，可以回顾下四色建模设计时所做的内容。关于 DDD 的知识，一部分是工程四色建模拆分领域功能的界限上下文战略知识，另外一部分就是本节这里的战术设计指导落地。
+
+本节小傅哥会带着大家，对照 MVC 中的微信公众号鉴权代码实现，拆解到 DDD 中进行实现。
+
+> 因为在前面的内容讲解中已经介绍了很多的业务，所以在本节的实现过程中，重点会关注 mvc 到 ddd 的功能重构细节差异。
+
+## 二、功能分区
+
+DDD 映射下的六边形架构，会有非常明确的分层分区，各个模块都在自己的职责范围内实现。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-ddd-3-2-02.png" width="750px">
+</div>
+
+- trigger 下实现让外部调用我们的接口，这里是微信公众号接口的鉴权和接收消息。
+- types 下加入了 sdk 微信的对接实现。
+- app 是启动层，里面增加 yml 配置信息。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2543\350\212\202\357\274\232DDD \351\207\215\346\236\204\357\274\214\347\231\273\345\275\225\345\212\237\350\203\275\345\256\236\347\216\260.md" "b/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2543\350\212\202\357\274\232DDD \351\207\215\346\236\204\357\274\214\347\231\273\345\275\225\345\212\237\350\203\275\345\256\236\347\216\260.md"
new file mode 100644
index 000000000..ac5fc99fc
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2543\350\212\202\357\274\232DDD \351\207\215\346\236\204\357\274\214\347\231\273\345\275\225\345\212\237\350\203\275\345\256\236\347\216\260.md"	
@@ -0,0 +1,27 @@
+---
+title: 第3-3节：DDD重构，登录功能设计实现
+pay: https://t.zsxq.com/Vc1Os
+---
+
+# 《小型支付商城系统》第3-3节：DDD重构，登录功能设计实现
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+通过 DDD 领域设计，从 MVC 工程中拆分登录功能到 DDD 工程中实现。
+
+本节会涉及到 api、domain、infrastructure、trigger、app，几层模块的使用，有了这一节的功能实现，会更加清楚 MVC 和 DDD 实现差异。不过编码的核心本质是不变的，所有的分层结构都是为了让代码实现逻辑更加清晰，降低后续的迭代成本。
+
+## 二、登录模型
+
+通过 DDD 领域驱动设计，陆续实现扫描登录、下单等流程模块。这一部分的设计可以参考第2部分中的四色建模设计。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-2-2-03.png" width="950px">
+</div>
+
+- 本节我们先来实现登录功能领域，登录凭证、校验凭证以及保存登录状态。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2544\350\212\202\357\274\232DDD \351\207\215\346\236\204\357\274\214\345\225\206\345\223\201\344\270\213\345\215\225.md" "b/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2544\350\212\202\357\274\232DDD \351\207\215\346\236\204\357\274\214\345\225\206\345\223\201\344\270\213\345\215\225.md"
new file mode 100644
index 000000000..351b57ab8
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2544\350\212\202\357\274\232DDD \351\207\215\346\236\204\357\274\214\345\225\206\345\223\201\344\270\213\345\215\225.md"	
@@ -0,0 +1,31 @@
+---
+title: 第3-4节：DDD重构，商品下单
+pay: https://t.zsxq.com/3X9GA
+---
+
+# 《小型支付商城系统》第3-4节：DDD重构，商品下单
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+通过 DDD 领域设计，从 MVC 工程拆分下单中的创建订单到 DDD 工程中实现。
+
+相对于 MVC 工程的设计，DDD 的每个领域就是独立的空间，它会仔细考虑请求方法的出入参对象，而这些对象叫做领域对象。
+
+在整个实现过程，每一个领域的功能，我们可以想象为；一个人，拿着一把钥匙，开锁到进屋。那么这里的一个人是用户、一把钥匙是入参领域对象、开锁是决策命令，完成开锁进屋是做完了一件事的领域事件。这个过程就是四色建模中的战略设计过程。
+
+那么本节的下单，就是这样一个过程，用户通过购物车创建订单到支付。那么这里你可以思考，它的决策命令、领域事件、领域对象都是什么，接下来我们就要做这样一个实现。
+
+## 二、下单模型
+
+通过 DDD 领域驱动设计，本节实现点击下单，创建订单的处理。这一部分的设计可以参考第2部分中的四色建模设计。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-2-2-03.png" width="950px">
+</div>
+
+- 本节我们先来实现用户点击下单的动作，完成商品下单。到下一节在处理关于支付宝沙箱的支付单处理。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2545\350\212\202\357\274\232DDD \351\207\215\346\236\204\357\274\214\345\257\271\346\216\245\346\224\257\344\273\230.md" "b/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2545\350\212\202\357\274\232DDD \351\207\215\346\236\204\357\274\214\345\257\271\346\216\245\346\224\257\344\273\230.md"
new file mode 100644
index 000000000..ba8a515c5
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2545\350\212\202\357\274\232DDD \351\207\215\346\236\204\357\274\214\345\257\271\346\216\245\346\224\257\344\273\230.md"	
@@ -0,0 +1,27 @@
+---
+title: 第3-5节：DDD 重构，对接支付
+pay: https://t.zsxq.com/NYvtw
+---
+
+# 《小型支付商城系统》第3-5节：DDD 重构，对接支付
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+通过 DDD 领域设计，从 MVC 工程拆分创建支付单到 DDD 工程中实现。
+
+在我们不断把功能从 MVC 拆分到 DDD 的实现中，也是从面向过程到面向对象的开发思维转变。编程的能力提升就是不断地锻炼各种能力。
+
+## 二、下单模型
+
+通过 DDD 领域驱动设计，本节实现点击下单到完成支付宝订单创建过程。这一部分的设计可以参考第2部分中的四色建模设计。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-2-2-03.png" width="950px">
+</div>
+
+- 本节我们实现点击下单创建出支付宝沙箱订单完成。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2546\350\212\202\357\274\232DDD \351\207\215\346\236\204\357\274\214\346\224\257\344\273\230\345\233\236\350\260\203.md" "b/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2546\350\212\202\357\274\232DDD \351\207\215\346\236\204\357\274\214\346\224\257\344\273\230\345\233\236\350\260\203.md"
new file mode 100644
index 000000000..7f02c1bfc
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2546\350\212\202\357\274\232DDD \351\207\215\346\236\204\357\274\214\346\224\257\344\273\230\345\233\236\350\260\203.md"	
@@ -0,0 +1,27 @@
+---
+title: 第3-6节：DDD 重构，支付回调处理
+pay: https://t.zsxq.com/CWVQM
+---
+
+# 《小型支付商城系统》第3-6节：DDD 重构，支付回调处理
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+通过 DDD 领域设计，从 MVC 工程拆分支付回调和接口到 DDD 工程中实现。
+
+从 MVC 到 DDD，是编码分层清晰，是逻辑实现整洁，也是后续的维护更加容易。其实也说明 DDD 的工程标准更加强。
+
+## 二、回调模型
+
+通过 DDD 领域驱动设计，本节实现支付回调过程。这一部分的设计可以参考第2部分中的四色建模设计。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-2-2-03.png" width="950px">
+</div>
+
+- 本节我们实现支付回调处理。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2547\350\212\202\357\274\232\345\211\215\347\253\257\351\241\265\351\235\242.md" "b/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2547\350\212\202\357\274\232\345\211\215\347\253\257\351\241\265\351\235\242.md"
new file mode 100644
index 000000000..d94b3891d
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2547\350\212\202\357\274\232\345\211\215\347\253\257\351\241\265\351\235\242.md"
@@ -0,0 +1,23 @@
+---
+title: 第3-7节：前端页面
+pay: https://t.zsxq.com/qE34U
+---
+
+# 《小型支付商城系统》第3-7节：前端页面
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+搭建简单的前端页面，自动轮训检查扫描登录状态，完成登录跳转商品下单页。
+
+## 二、业务流程
+
+如图，本节可以串联用户UI流程，登录下单到支付完成。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-0-01.png" width="850px">
+</div>
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2548\350\212\202\357\274\232Docker\346\236\204\345\273\272\345\222\214\351\203\250\347\275\262.md" "b/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2548\350\212\202\357\274\232Docker\346\236\204\345\273\272\345\222\214\351\203\250\347\275\262.md"
new file mode 100644
index 000000000..c0adfda52
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-3-ddd/\347\254\2548\350\212\202\357\274\232Docker\346\236\204\345\273\272\345\222\214\351\203\250\347\275\262.md"
@@ -0,0 +1,26 @@
+---
+title: 第3-8节：Docker构建和部署
+pay: https://t.zsxq.com/8vXVI
+---
+
+# 《小型支付商城系统》第3-8节：Docker构建和部署
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+通过 Docker 给工程配置 Dockerfile、build.sh 文件对项目进行构建和部署，前端应用采用 Nginx 进行部署。
+
+## 二、Docker 是什么？
+
+Docker 你可以把它当做一个小型的轻量的虚拟机（虚拟的电脑），它可以帮你屏蔽各类软件环境安装时候的复杂性，你只需要一段脚本，即可完成 mysql、redis、nginx 等等各类你能想到的软件的部署和卸载。—— 不知道多少伙伴自己电脑装完 MySQL 就不会卸载了！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-01.png" width="850px">
+</div>
+
+- 官网：[https://www.docker.com/](https://www.docker.com/) - 本地电脑直接安装即可。Windows 电脑因为不是 linux 所以需要开启 wsl2（百度/星球搜索有配置教程）
+- 云教程：[https://bugstack.cn/md/road-map/docker.html](https://bugstack.cn/md/road-map/docker.html) - 也可以选择云服务器安装。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2541\350\212\202\357\274\232MVC \345\267\245\347\250\213\346\241\206\346\236\266\346\220\255\345\273\272.md" "b/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2541\350\212\202\357\274\232MVC \345\267\245\347\250\213\346\241\206\346\236\266\346\220\255\345\273\272.md"
new file mode 100644
index 000000000..1388ceeff
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2541\350\212\202\357\274\232MVC \345\267\245\347\250\213\346\241\206\346\236\266\346\220\255\345\273\272.md"	
@@ -0,0 +1,46 @@
+---
+title: 第3-1节：MVC 工程框架搭建 + 基础配置 + Git 使用
+pay: https://t.zsxq.com/K4xTs
+---
+
+# 《小型支付商城系统》第3-1节：MVC 工程框架搭建 + 基础配置 + Git 使用
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+手把手搭建，单 model 和多 model 的 mvc 分层架构，并配置 pom、yml 等，以及讲解分层结构的功能职责。最后将工程使用 Git 提交到 gitcode 仓库中。
+
+mvc 的优势在于快，这个快是来自于不对系统进行建模、不考虑防腐（多层调用间的对象，不做隔离处理，可互相调用），也没有为分布式的各项连接资源做分层考虑，所以它的实现方式更快。
+
+在最早我们实现单体类应用中，一个工程基本就使用2个东西，一个是 mysql 数据库，另外一个是 redis 缓存。这样的 mvc 工程复杂度是很低的，所以也比较好维护。
+
+但随着分布式微服务的引入，在一个工程中除了有，数据库、缓存，还有 rpc、mq、任务调度、配置中心、一致性组件、分库分表、ElasticSearch 等等各项技术栈，这样在 mvc 中在实现这些就变得复杂了。所以这也是为什么大家开始逐步往 DDD 迁移，因为一方面是 DDD 的建模思维，另外一方面是 DDD 与新的架构模型，洋葱、整洁、六边形更加契合。新的架构模型，也能更好的承载分布式微服务架构设计实现。
+
+不过，所有东西的学习最后学的就是思想。工程框架结构的设计，也就是用合理的分层结构，有效的填充各项资源，提高资源的调配效率。这句你要细细的琢磨下。如果你面试能讲出这么一句，那么对工程的框架理解的非常深入的。
+
+## 二、环境配置
+
+- Jdk 1.8
+- Maven 3.x - [Maven 教程](https://bugstack.cn/md/road-map/maven.html)
+- IntellJ IDEA 社区版(免费) [IntelliJ  IDEA 教程](https://bugstack.cn/md/road-map/intellij-idea.html)
+- Git - 安装后会配置到  IntellJ IDEA 这样才能向服务端推送或者拉取代码。[Git 教程 ](https://t.zsxq.com/19Rnk98M0) 学习后可以知道怎么拉取、提交和比对代码。
+
+---
+
+```xml
+<mirrors>
+    <mirror>
+      <id>alimavenrepository</id>
+      <name>aliyun maven repository</name>
+      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
+      <mirrorOf>central</mirrorOf>
+    </mirror>
+</mirrors>
+```
+
+- 如果你的 Maven 拉取 Jar 包速度很慢，可以在 Maven 的 conf 下 settings.xml 添加阿里云镜像。
+- [https://t.zsxq.com/19Rnk98M0](https://t.zsxq.com/19Rnk98M0) 已提供配置好了 阿里云 Maven 镜像的 Maven 压缩包。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2542\350\212\202\357\274\232\345\276\256\344\277\241\345\205\254\344\274\227\345\217\267\351\211\264\346\235\203.md" "b/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2542\350\212\202\357\274\232\345\276\256\344\277\241\345\205\254\344\274\227\345\217\267\351\211\264\346\235\203.md"
new file mode 100644
index 000000000..87d64ec0b
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2542\350\212\202\357\274\232\345\276\256\344\277\241\345\205\254\344\274\227\345\217\267\351\211\264\346\235\203.md"
@@ -0,0 +1,28 @@
+---
+title: 第3-2节：微信公众号鉴权
+pay: https://t.zsxq.com/ryhqq
+---
+
+# 《小型支付商城系统》第3-2节：微信公众号鉴权
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+在 mvc 分层框架结构下添加微信公众号鉴权所需的接口，并通过 natapp 内网穿透组件，暴漏本地接口，让微信公众号平台可以配置使用。
+
+在前面章节中已经讲解了，关于微信公众号鉴权的代码实现以及配置使用。所以本节我们会把重点放在 mvc 工程结构的使用，把关于微信的公众号鉴权操作流程按需放到所属模块下。
+
+## 二、功能分区
+
+mvc 工程结构区内，简单的划分了基础包、数据库、逻辑实现、接口实现。我们在这一节先使用到基础包和提供接口。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-mvc-3-2-01.png" width="450px">
+</div>
+
+- common 承载着对接微信公众号的基础功能。
+- web 下的 controller 用于实现对外提供的接口。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2543\350\212\202\357\274\232\347\231\273\345\275\225\345\212\237\350\203\275\345\256\236\347\216\260.md" "b/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2543\350\212\202\357\274\232\347\231\273\345\275\225\345\212\237\350\203\275\345\256\236\347\216\260.md"
new file mode 100644
index 000000000..57805d808
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2543\350\212\202\357\274\232\347\231\273\345\275\225\345\212\237\350\203\275\345\256\236\347\216\260.md"
@@ -0,0 +1,29 @@
+---
+title: 第3-3节：登录功能设计实现
+pay: https://t.zsxq.com/fsEpq
+---
+
+# 《小型支付商城系统》第3-3节：登录功能设计实现
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+通过微信公众号平台提供的 API 接口，做微信公众号扫码登录。
+
+扫码登录主要是需要微信公众号平台，提供一个生成带参的二维码，让用户使用微信扫描二维码登录。扫码后我们在微信公众号对接的接口中会接收到扫码完成消息，里面就会含带二维码参数，这样就可以知道到是谁扫描的二维码。我们把扫描后解析的信息和用户做绑定，也就可以完成登录操作了。
+
+## 二、登录流程
+
+微信扫码登录的流程主要包括；用户、浏览器、后端服务、公众号，这四个部分。我们可以先通过UML流程图，了解下整个调用关系。此流程已在[《第2部分，工程四色建模设计》](https://t.zsxq.com/XeucE)中讲解。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ddd-scene-solution/xfg-dev-tech-weixin-login-02.png" width="850px">
+</div>
+
+- 首先，由用户发起登录操作。让WEB页面从服务端获取登录凭证。
+- 之后，前端页面拿到登录凭证后，可以使用 Ticket 从公众号服务平台换取二维码。
+- 最后，用户扫码登录。扫码后，服务端会接收到来自公众号的回调消息，服务端再把回调消息中的 openid【用户唯一标识】和 ticket 进行绑定。这个时候你也可以创建出 jwt token 反馈给前端，作为登录成功的存储信息，后续校验 jwt token 就可以了。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2544\350\212\202\357\274\232\345\225\206\345\223\201\344\270\213\345\215\225.md" "b/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2544\350\212\202\357\274\232\345\225\206\345\223\201\344\270\213\345\215\225.md"
new file mode 100644
index 000000000..afb7fe72d
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2544\350\212\202\357\274\232\345\225\206\345\223\201\344\270\213\345\215\225.md"
@@ -0,0 +1,31 @@
+---
+title: 第3-4节：商品下单
+pay: https://t.zsxq.com/g6Szl
+---
+
+# 《小型支付商城系统》第3-4节：商品下单
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+对接数据库表，完成商品下单。
+
+要注意商品下单中，要考虑整个流程中可能存在的失败节点。`做编程开发很多时候都是在处理异常。`商品下单中，或者下单完成都可能存在失败的情况。比如写库失败，或者调用外部支付平台创建支付单失败，也可能存在用户创建完支付单但未支付的情况。
+
+这些流程都是要在下单中做的处理，在公司的实际场景中，下单还要过很多规则校验。比如账户状态、风控、营销、试算、锁券等等流程，才会到下单。所以很多这样的场景，都会考虑使用设计模式进行解耦，否则很难完成后续的迭代。
+
+## 二、下单流程
+
+如图，本节我们先做下单流程。调用 Alipay 支付宝创建支付单和等待回调我们后续章节在处理。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-2-2-05.png" width="850px">
+</div>
+
+- 首先，用户在系统中创建订单（流水单），创建过程中需要判断是否存在未支付订单，存在则可以直接返回。另外还有一种可能，创建的订单存在，但没有支付单，也就是【掉单】。这是因为本身的业务系统和外部的支付创建（支付宝）不是一个事务，不能一起成功或失败，所以要做一些流程的校验。比如我们创建订单成功，但创建支付单失败。这个之后用户继续创建订单，就会优先使用这笔订单创建支付单。如果流程中没有存在的掉单，则直接创建支付单即可。
+- 之后，创建完支付宝订单，会由页面跳转到网络收银台，引导用户完成支付操作。
+- 最后，就是接收支付回调消息，更新本地的订单状态，以及推动后续流程。比如；发放商品、驱动物流、虚拟支付等。当然在实际的商城中，还会有逆向流程，比如商品有问题，或者用户主动发起退单。这个时候就要走逆向流程，退单、审核、退款流程。你可以尝试完成。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2545\350\212\202\357\274\232\345\257\271\346\216\245\346\224\257\344\273\230.md" "b/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2545\350\212\202\357\274\232\345\257\271\346\216\245\346\224\257\344\273\230.md"
new file mode 100644
index 000000000..728bb346b
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2545\350\212\202\357\274\232\345\257\271\346\216\245\346\224\257\344\273\230.md"
@@ -0,0 +1,30 @@
+---
+title: 第3-5节：对接支付
+pay: https://t.zsxq.com/2TPVn
+---
+
+# 《小型支付商城系统》第3-5节：对接支付
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+通过引入支付宝支付 sdk，实例化支付对象，完成支付对接。并提供商品交易下单和回调接口。
+
+这里要记住一点，所有不是数据库一次事务提交的操作，都没法保证事务一致性。包括；http接口、rpc接口、mq消息等。这些调用过程，都需要有任务作为补偿处理，保证最终一致性。
+
+他们的失败可能是网络超时，导致在调用过程中发生，也可能是消费时发生进行重试。所以这类接口调用除了有任务保持一致性，还有就是要有唯一幂等字段。确保在重复消费的过程中，也只是有一条记录产生或者发生变更。
+
+## 二、业务流程
+
+如图，本节我们来完成支付宝沙箱对接的流程；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-2-2-05.png" width="850px">
+</div>
+
+- 创建完成本地订单后，调用支付宝沙箱创建支付订单。
+- 在这个过程，如果发生 http 超时失败，那么会有二次用户请求时，检查到`掉单`重新发起创建动作。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2546\350\212\202\357\274\232\346\224\257\344\273\230\345\233\236\350\260\203.md" "b/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2546\350\212\202\357\274\232\346\224\257\344\273\230\345\233\236\350\260\203.md"
new file mode 100644
index 000000000..43b842772
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2546\350\212\202\357\274\232\346\224\257\344\273\230\345\233\236\350\260\203.md"
@@ -0,0 +1,28 @@
+---
+title: 第3-6节：支付回调处理
+pay: https://t.zsxq.com/Ydjmt
+---
+
+# 《小型支付商城系统》第3-6节：支付回调处理
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+对支付流程收尾，完成支付回调、掉单补偿、超时关单的处理，以及监听支付成功消息。
+
+到本节的处理后，我们就把支付流程全部做完了。其实这也是面试中喜欢的问的场景，只有把一个支付的流程，从下单到支付再到回调处理，以及处理各项补偿和监听。面试官才会觉得你是真的对接了支付，而不是在描述一个 CRUD 流程。
+
+## 二、业务流程
+
+如图，本节我们来完成支付宝沙箱回调和补偿的流程；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-2-2-05.png" width="850px">
+</div>
+
+- 本节完成支付成功后的回调处理，更新数据库订单状态。同时发送MQ消息。比如一些发货场景，就是这个MQ发送出来之后做的处理。
+- 另外，我们在完成一些关于超时关单、掉单补偿的流程。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2547\350\212\202\357\274\232\345\211\215\347\253\257\351\241\265\351\235\242.md" "b/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2547\350\212\202\357\274\232\345\211\215\347\253\257\351\241\265\351\235\242.md"
new file mode 100644
index 000000000..c1c84f643
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2547\350\212\202\357\274\232\345\211\215\347\253\257\351\241\265\351\235\242.md"
@@ -0,0 +1,23 @@
+---
+title: 第3-7节：前端页面
+pay: https://t.zsxq.com/L1Fpx
+---
+
+# 《小型支付商城系统》第3-7节：前端页面
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+搭建简单的前端页面，自动轮训检查扫描登录状态，完成登录跳转商品下单页。
+
+## 二、业务流程
+
+如图，本节可以串联用户UI流程，登录下单到支付完成。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-0-01.png" width="850px">
+</div>
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2548\350\212\202\357\274\232Docker\346\236\204\345\273\272\345\222\214\351\203\250\347\275\262.md" "b/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2548\350\212\202\357\274\232Docker\346\236\204\345\273\272\345\222\214\351\203\250\347\275\262.md"
new file mode 100644
index 000000000..6afea2c72
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-3-mvc/\347\254\2548\350\212\202\357\274\232Docker\346\236\204\345\273\272\345\222\214\351\203\250\347\275\262.md"
@@ -0,0 +1,26 @@
+---
+title: 第3-8节：Docker构建和部署
+pay: https://t.zsxq.com/IWhOM
+---
+
+# 《小型支付商城系统》第3-8节：Docker构建和部署
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+通过 Docker 给工程配置 Dockerfile、build.sh 文件对项目进行构建和部署，前端应用采用 Nginx 进行部署。
+
+## 二、Docker 是什么？
+
+Docker 你可以把它当做一个小型的轻量的虚拟机（虚拟的电脑），它可以帮你屏蔽各类软件环境安装时候的复杂性，你只需要一段脚本，即可完成 mysql、redis、nginx 等等各类你能想到的软件的部署和卸载。—— 不知道多少伙伴自己电脑装完 MySQL 就不会卸载了！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-mvc-3-8-01.png" width="850px">
+</div>
+
+- 官网：[https://www.docker.com/](https://www.docker.com/) - 本地电脑直接安装即可。Windows 电脑因为不是 linux 所以需要开启 wsl2（百度/星球搜索有配置教程）
+- 云教程：[https://bugstack.cn/md/road-map/docker.html](https://bugstack.cn/md/road-map/docker.html) - 也可以选择云服务器安装。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-4/\347\254\2541\350\212\202\357\274\232natapp \345\206\205\347\275\221\347\251\277\351\200\217.md" "b/docs/md/project/s-pay-mall/part-4/\347\254\2541\350\212\202\357\274\232natapp \345\206\205\347\275\221\347\251\277\351\200\217.md"
new file mode 100644
index 000000000..5853c3a63
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-4/\347\254\2541\350\212\202\357\274\232natapp \345\206\205\347\275\221\347\251\277\351\200\217.md"	
@@ -0,0 +1,30 @@
+---
+title: 第4-1节：natapp 内网穿透
+pay: https://t.zsxq.com/qM7uL
+---
+
+# 《小型支付商城系统》第4-1节：natapp 内网穿透
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+教会伙伴们，了解内网穿透和使用内网穿透。
+
+## 二、了解穿透
+
+说白了，内网穿透，就是想办法让本地这个只有内网IP的服务，被外网访问。
+
+曾经有个伙伴问我，我云服务器部署了服务，配置了本地的 192.168.1.109 IP 下的 xxl-job 怎么执行失败呢？这是因为我们本地可以访问公网IP地址，但公网IP没法访问你的内网地址。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-4-1-01.png" width="450px">
+</div>
+
+- 内网穿透服务会部署在服务端，之后提供一个内网穿透的客户端，在本地启动。这样本地的frp客户端和frp服务端，就可以建立连接进行通信。
+- 有了这个通信的连接，用户访问到frp服务端，就可以把请求到的内容转发给客户端。客户端在请求本地的服务，把数据回传回去。这样，也就把本地的服务暴漏出去了。具体的详细实现，可以检索frp穿透设计。
+
+> 内网穿透是一种技术手段，用于访问位于防火墙或路由器后面的本地网络（内网）中的设备或服务。通常情况下，内网中的设备无法直接通过公网（互联网）进行访问，从而实现隐私保护和安全性。内网穿透技术的目标是突破这一限制，使外部用户能够通过互联网访问内网中的服务或设备。
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-4/\347\254\2542\350\212\202\357\274\232\345\276\256\344\277\241\345\205\254\344\274\227\345\217\267\346\265\213\350\257\225\350\257\204\345\256\241\347\224\263\350\257\267.md" "b/docs/md/project/s-pay-mall/part-4/\347\254\2542\350\212\202\357\274\232\345\276\256\344\277\241\345\205\254\344\274\227\345\217\267\346\265\213\350\257\225\350\257\204\345\256\241\347\224\263\350\257\267.md"
new file mode 100644
index 000000000..3a1cfa225
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-4/\347\254\2542\350\212\202\357\274\232\345\276\256\344\277\241\345\205\254\344\274\227\345\217\267\346\265\213\350\257\225\350\257\204\345\256\241\347\224\263\350\257\267.md"
@@ -0,0 +1,27 @@
+---
+title: 第4-2节：微信公众号，测试平台申请使用
+pay: https://t.zsxq.com/iaOEW
+---
+
+# 《小型支付商城系统》第4-2节：微信公众号，测试平台申请使用
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+因为课程后面会需要用到微信公众号作为登录、通知、消息发送的载体，所以本节先带着大家做下微信公众号的申请和简单的验签配置，可以满足消息自动回复操作。
+
+## 二、平台说明
+
+微信公众号，分为个人和企业，个人的公众号会有很多限制，基本只能使用最基础功能。企业的公众号需要有公司主体，可以使用全量功能，但需要一年￥300的认证费用。
+
+为了使用到所有的公众号号接口能力，本节我们这里使用的是微信公众号测试平台，它直接支持所有的公众号接口能力。也方面我们学习使用。
+
+平台地址：[https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index](https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index) - 每个人都可以申请。进入后会看到官网文档。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-4-2-02.png" width="850px">
+</div>
\ No newline at end of file
diff --git "a/docs/md/project/s-pay-mall/part-4/\347\254\2543\350\212\202\357\274\232\346\224\257\344\273\230\345\256\235\346\262\231\347\256\261\347\224\263\350\257\267.md" "b/docs/md/project/s-pay-mall/part-4/\347\254\2543\350\212\202\357\274\232\346\224\257\344\273\230\345\256\235\346\262\231\347\256\261\347\224\263\350\257\267.md"
new file mode 100644
index 000000000..e9ee9e1ef
--- /dev/null
+++ "b/docs/md/project/s-pay-mall/part-4/\347\254\2543\350\212\202\357\274\232\346\224\257\344\273\230\345\256\235\346\262\231\347\256\261\347\224\263\350\257\267.md"
@@ -0,0 +1,37 @@
+---
+title: 第4-3节：支付宝沙箱申请使用
+pay: https://t.zsxq.com/b0U7F
+---
+
+# 《小型支付商城系统》第4-3节：支付宝沙箱申请使用
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## 一、本章诉求
+
+申请支付宝沙箱环境，使用支付宝沙箱API，完成简单支付订单的创建、支付和接收回调消息。
+
+其实不只支付宝沙箱，包括我们对接微信支付或者其他第三方支付，都是这样一个流程。之后对于没有企业资质的一般只能做支付宝沙箱模拟，或者想真实对接支付，就需要使用虎皮椒、蓝兔支付的三方服务结构。
+
+蓝兔支付在星球里提供了对接的 sdk 文档，如果你需要做真实支付可以学习下。[《支付SDK设计和开发》](https://t.zsxq.com/19WqNkhr2)
+
+## 二、支付申请 - Alipay 沙箱支付
+
+### 1. 沙箱应用
+
+**支付宝|开放平台** 地址：[https://open.alipay.com/develop/manage](https://open.alipay.com/develop/manage) - `任何人都可以申请，不要企业资质`
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ddd-scene-solution/alipay-sandbox-03.png?raw=true" width="750px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ddd-scene-solution/alipay-sandbox-04.png?raw=true" width="750px">
+</div>
+
+- 开启沙箱应用以后，还需要下载支付宝秘钥工具。秘钥工具创建的秘钥，需要填写到查看中。
+- 📢 【沙箱账号】，里面提供了后续在网页上支付时，输入的账号、密码和支付密码。
+- 📢 【沙箱工具】，里面提供了安卓版测试软件，可以在手机扫码支付。
diff --git a/docs/md/project/s-pay-mall/s-pay-mall.md b/docs/md/project/s-pay-mall/s-pay-mall.md
new file mode 100644
index 000000000..19ced3664
--- /dev/null
+++ b/docs/md/project/s-pay-mall/s-pay-mall.md
@@ -0,0 +1,155 @@
+---
+title: 小型支付电商系统
+lock: no
+---
+
+# 小型支付电商系统 - 一套项目2套架构开发（MVC+DDD）
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>项目：[https://t.zsxq.com/3X9GA](https://t.zsxq.com/3X9GA)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+🌻 在小傅哥带大家做的众多实战项目中，有些伙伴喜欢看 `DDD` 因为面试有的讲，有些伙伴想做 `MVC` 因为虽然知道 `DDD` 有亮点但初次接触怕学起来难。所以，这次我要一套项目，写出两套架构开发。你可以对比着学习，看看不同架构（`MVC&DDD`）如何设计和编码！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/business-behavior-monitor/business-behavior-monitor-01.png" width="150px">
+</div>
+
+**那咱们做什么项目呢？🤔**
+
+这是一套`小型的支付电商系统`，提取实际生产中核心的真实模块作为咱们的开发需求，同时也是面试中最为常问的流程。包括；`如何微信扫码鉴权登录` + `模板消息通知`、`怎么做支付宝交易打通`、`商品支付掉单如何处理`、`相关的任务补偿怎么操作`等。把这些需求分别通过 MVC 架构、DDD 架构，进行设计实现。让学习的伙伴，对照出不同架构的设计思路和开发差异，即完成业务需求，也提高编程架构思维。—— 同龄人的差异，就是你比别人站的高的时候，略微出手，就是那个赛道的将相王侯 👍🏻！
+
+两套架构工程的代码已经写完啦（录制视频中）！接下来小傅哥就来介绍下这套项目，你能获得的技术知识。
+
+>文末有加入学习方式，还有优惠券可以使用。先到先得！
+
+## 一、能学到啥
+
+这是一套完整具备核心链路的小型项目，我们不在同类编码上反复重复，只关注核心链路。所以你可以花费很少的时间，积累丰富的架构和编程经验。在这套内容学习中，积累核心技术的运用，包括；
+
+- 【前端】熟练使用，简单 HTML、DIV、CSS，对扫码登录、商品下单页面的构建。
+- 【前端】掌握 fetch 方式对后端接口的调用，处理相关的逻辑数据。
+- 【后端】熟练搭建 MVC 工程项目、理解各个分层模块作用，对 MVC 的设计方法有清楚的认识。
+- 【后端】熟练搭建 DDD 工程项目、以及 DDD 脚手架搭建项目。并对 DDD 设计方法有清楚的认知。
+- 【后端】理解 DDD 架构设计思维，这部分会有大量的内容进行讲解。再结合后续的实战，会对架构有更深入的认识。
+- 【后端】熟练掌握 Spring、SpringBoot、MyBatis 等开发框架技术，并对框架源码所提供的扩展接口具备运用能力。
+- 【后端】熟练使用模板设计模式，对商品下单的流程拆解和实现。
+- 【后端】深度理解登录、支付、下单，全流程的核心设计和实现，而不是那种CRUD学习个DEMO，我们对接真实支付！
+- 【运维】熟练使用 Docker 在本地和服务端的配置和部署应用，以及在本地构建前后端镜像。
+- 【运维】熟练掌握 Git、GitCode，对工程代码的管理，推送、拉取、切换分支、合并代码等操作。
+- 【运维】熟练使用 Nginx 配置转发服务，给前端应用在 Nginx 进行部署。
+
+此外，小傅哥会把系统开发过程中的思考、设计、编码，录制⏺成完整的视频，让大家可以学习到的更多、更细、更深！
+
+## 二、项目介绍
+
+本次项目是一个包括 `前后端 + Dev-Ops` 且小型的综合实战项目，基于 SpringBoot、MyBatis、Nginx、Docker、微信公众号、支付宝沙箱等开发的项目。非常适合小白伙伴和有DDD学习诉求的伙伴上手！
+
+本次项目铺设出来的内容并不大，但具备详细的核心流程，你可以通过一条完整链路学习到 MVC 和 DDD 的开发设计与编码差异。这是非常重要的。
+
+### 1. 核心流程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-0-01.png" width="800px">
+</div>
+
+### 2. 项目工程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-0-02.png" width="600px">
+</div>
+
+- 一套项目需求，用两套架构开发。小傅哥，是真的想帮你提高架构思维！
+- 我会在全程视频手把手的编码过程中，为你讲解 MVC 与 DDD 的设计，它们之间的对象设计，思维方式，编码结构。
+
+### 3. 流程设计
+
+#### 3.1 登录流程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ddd-scene-solution/xfg-dev-tech-weixin-login-02.png" width="600px">
+</div>
+
+#### 3.2 下单流程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ddd-scene-solution/alipay-sandbox-13.png?raw=true" width="600px">
+</div>
+
+### 4. 运行效果
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-0-03.png" width="800px">
+</div>
+
+### 5. 运行日志
+
+```java
+24-08-04.11:03:13.922 [http-nio-8092-exec-3] INFO  LoginController        - 生成微信扫码登录 ticket gQGq8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyT01QWXBJTDBjckcxUlFZbWhDMUgAAgR0765mAwQAjScA
+24-08-04.11:11:00.291 [http-nio-8092-exec-7] INFO  WeixinPortalController - 接收微信公众号信息请求or0Ab6ivwmypESVp_bYuk92T6SvU开始 <xml><ToUserName><![CDATA[gh_e067c267e056]]></ToUserName>
+<FromUserName><![CDATA[or0Ab6ivwmypESVp_bYuk92T6SvU]]></FromUserName>
+<CreateTime>1722741062</CreateTime>
+<MsgType><![CDATA[event]]></MsgType>
+<Event><![CDATA[TEMPLATESENDJOBFINISH]]></Event>
+<MsgID>3576043305420816385</MsgID>
+<Status><![CDATA[success]]></Status>
+</xml>
+24-08-04.11:11:00.305 [http-nio-8092-exec-7] INFO  WeixinPortalController - 接收微信公众号信息请求or0Ab6ivwmypESVp_bYuk92T6SvU完成 <xml><ToUserName><![CDATA[gh_e067c267e056]]></ToUserName>
+<FromUserName><![CDATA[or0Ab6ivwmypESVp_bYuk92T6SvU]]></FromUserName>
+<CreateTime>1722741062</CreateTime>
+<MsgType><![CDATA[event]]></MsgType>
+<Event><![CDATA[TEMPLATESENDJOBFINISH]]></Event>
+<MsgID>3576043305420816385</MsgID>
+<Status><![CDATA[success]]></Status>
+</xml>
+24-08-04.11:11:12.374 [http-nio-8092-exec-9] INFO  LoginController        - 生成微信扫码登录 ticket gQGY8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyeGpIYm8yTDBjckcxUmktbXhDMU8AAgRS8a5mAwQAjScA
+24-08-04.11:11:18.541 [http-nio-8092-exec-1] INFO  AliPayController       - 商品下单，根据商品ID创建支付单开始 userId:or0Ab6ivwmypESVp_bYuk92T6SvU productId:or0Ab6ivwmypESVp_bYuk92T6SvU
+24-08-04.11:11:18.581 [http-nio-8092-exec-1] INFO  HikariDataSource       - HikariPool-1 - Starting...
+24-08-04.11:11:18.778 [http-nio-8092-exec-1] INFO  HikariDataSource       - HikariPool-1 - Start completed.
+24-08-04.11:11:19.177 [http-nio-8092-exec-1] INFO  AbstractOrderService   - 创建订单-完成，生成支付单。userId: or0Ab6ivwmypESVp_bYuk92T6SvU orderId: 3700032384239341 payUrl: <form name="punchout_form" method="post" action="https://openapi-sandbox.dl.alipaydev.com/gateway.do?charset=utf-8&method=alipay.trade.page.pay&sign=ThasDwUrX%2F%2BY6cnC3***&version=1.0&app_id=9021000132689924&sign_type=RSA2&timestamp=2024-08-04+11%3A11%3A19&alipay_sdk=alipay-sdk-java-4.38.157.ALL&format=json">
+<input type="hidden" name="biz_content" value="{&quot;out_trade_no&quot;:&quot;3700032384239341&quot;,&quot;total_amount&quot;:&quot;1.68&quot;,&quot;subject&quot;:&quot;测试商品&quot;,&quot;product_code&quot;:&quot;FAST_INSTANT_TRADE_PAY&quot;}">
+<input type="submit" value="立即支付" style="display:none" >
+</form>
+<script>document.forms[0].submit();</script>
+24-08-04.11:11:19.178 [http-nio-8092-exec-1] INFO  AliPayController       - 商品下单，根据商品ID创建支付单完成 userId:or0Ab6ivwmypESVp_bYuk92T6SvU productId:100010090091 orderId:3700032384239341
+```
+
+## 三、项目大纲
+
+**课程地址**：[https://t.zsxq.com/3X9GA](https://t.zsxq.com/3X9GA)
+
+- 第1部分：架构理论
+  - 第1节：DDD 架构概念
+  - 第2节：DDD 建模方法
+  - 第3节：DDD 工程模型（含 MVC 对比）
+- 第2部分：需求设计
+  - 第1节：小型支付商城需求设计
+  - 第2节：工程四色建模设计
+  - 第3节：库表设计
+- 第3部分：功能实现 - MVC
+  - 第1节：MVC 工程框架搭建 + 基础配置 + Git 使用
+  - 第2节：微信公众号鉴权
+  - 第3节：登录功能设计实现
+  - 第4节：商品下单
+  - 第5节：对接支付
+  - 第6节：支付回调处理
+- 第3部分：功能实现 - DDD
+  - 第1节：DDD 工程框架搭建 + 基础配置 + Git 使用
+  - 第2节：DDD 重构，微信公众号鉴权
+  - 第3节：DDD 重构，登录功能设计实现
+  - 第4节：DDD 重构，商品下单
+  - 第5节：DDD 重构，对接支付
+  - 第6节：DDD 重构，支付回调处理
+- 第4部分：开发运维
+  - 第1节：natapp 内网穿透
+  - 第2节：微信公众号，测试平台申请
+  - 第3节：支付宝沙箱申请
+  - 第4节：发布上线
+
+---
+
+课程包括；视频、小册、1 对 1 答疑解惑、专属VIP项目交流群，并且提供简历编写模板结构的一条龙🐲服务。让你学习后，直接拉开与还在玩具项目其他人的差距，面试脱颖而出提高竞争力！！！
diff --git a/docs/md/road-map/13scan-jdumpspider.md b/docs/md/road-map/13scan-jdumpspider.md
new file mode 100644
index 000000000..40fe15f29
--- /dev/null
+++ b/docs/md/road-map/13scan-jdumpspider.md
@@ -0,0 +1,229 @@
+---
+title: w13scan-jdumpspider 安全漏洞扫描
+lock: need
+---
+
+# 安全漏洞扫描，他怎么拿到了我的数据库密码？
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+你有没有想过，你部署到线上的 SpringBoot 应用，在做互联网`安全人员`的手里，已经成了"小肉鸡"？可怕的攻击不一定是 DDOS 玩命的访问你的网站，消耗你的 CDN 流量。而是拿到你的应用系统的一系列配置，如；数据库账号密码和连接地址、微信公众平台核心配置、OpenAI APIKey。可以说这些东西一暴漏，那你得遭老罪喽。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-idea-00.png" width="150px"/>
+</div>
+
+**那这是怎么被发现暴漏的呢？🤔**
+
+做安全的有一套应用漏洞检查扫描的软件，它通过启动被动流量扫描服务，通过代理的方式，挂载到自身的浏览器。日常的访问一些网站时，所有的流量节点都会进入到被动扫描代理服务中，之后消耗这些流量节点，依次检测每个地址下可能发生的；XSS、jsonp信息泄露、sql注入、http smuggling 走私攻击，以及可以根据各类组件提供的漏洞问题做扫描补偿。这样就可以拿到你的网站都有哪些安全漏洞问题了。
+
+这里有一个最典型的就是 SpringBoot Actuator 安全点暴漏，这东西是可以拿到你的 heapdump，之后再通过 JDumpSpider 扫描，也就可以拿到你应用中的数据源、配置文件、Redis配置、ShiroKey等信息。此时如果你的数据库恰好没有配置IP访问限制，那么直接远程连接登录进去，一顿操作了。
+
+那么整个这样一个流程怎么玩一下呢？这东西只有亲自上下手，才会感受到它的恐怖。接下来，小傅哥就教你做被动安全扫描操作和 heapdump 下载分析提取数据库密码。
+
+## 一、流程介绍
+
+关于被动扫描系统安全漏洞的服务系统有很多，包括 w13scan 免费开源的，也有 xray 付费的，还有的是公司或者个人独立开发的。本节我们主要使用 w13scan 作为安全漏洞扫描的案例。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-w13scan-jdumpspider-01.png" width="500px"/>
+</div>
+
+- 首先， w13scan 的流程是这样，你需要先启动一个这样的被动扫描服务，之后再你的浏览器中配置网页请求代理地址。这个代理地址就是 w13scan 服务。
+- 那么，这个时候你所有在浏览器发起的请求，都会经过 w13scan 走一圈。这样，就可以把请求的网址进行一系列安全扫描检查，查看是什么样的漏洞。
+- 另外，w13scan 不只是可以被动扫描还可以主动配置路径扫描一个固定的网站地址检测。
+- 最后，w13scan 会把扫描到的安全漏洞以html方式展示出来，我们可以在这个网页上查看漏洞检测结果。也就可以在进一步对存在的漏洞进行挖局，如拿到 heapdump 在解析它的信息了。
+
+## 二、案例工程
+
+这里小傅哥为你提供了完整的案例测试工程，你可以直接完整体验。`你需要有 docker 环境或者 Python 3.6+`
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-w13scan-jdumpspider-02.png" width="750px"/>
+</div>
+
+地址：[https://github.com/fuzhengwei/xfg-dev-tech-w13scan-jdumpspider](https://github.com/fuzhengwei/xfg-dev-tech-w13scan-jdumpspider)
+
+- 首先，你需要下载这个工程到本地电脑，便于安装环境和测试。
+- 如图，已经为你描述了案例的功能。
+
+## 三、被动扫描
+
+**源码**：[https://github.com/fuzhengwei/w13scan](https://github.com/fuzhengwei/w13scan) - 小傅哥 fork 的 w13scan 并做了镜像打包。源码文档里提供了安装和使用说明。
+
+### 1. 组件安装 - docker 方式
+
+```java
+# docker-compose -f docker-compose.yml up -d
+version: '3.8'
+services:
+  w13scan:
+    image: fuzhengwei/w13scan:1.0
+    container_name: w13scan
+    ports:
+      - "7778:7778"
+    volumes:
+      - ./output:/w13scan/W13SCAN/output
+    entrypoint: ["python3", "w13scan.py", "-s", "0.0.0.0:7778", "--html"]
+    tty: true
+```
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-w13scan-jdumpspider-03.png" width="750px"/>
+</div>
+
+- 你可以通过脚本 `docker-compose -f docker-compose.yml up -d` 脚本执行 w13scan 的服务安装。
+- 另外，如果你不能执行 docker-compose 还可以通过提供的 `docker run -d --name w13scan -p 7778:7778 -v ./output:/w13scan/w13scan/output fuzhengwei/w13scan:1.0 python3 w13scan.py -s 127.0.0.1:7778 --html`
+
+### 2. 组件安装 - Python 方式
+
+这个方式就把代码拉到自己本地，进行构建和启动。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-w13scan-jdumpspider-04.png" width="750px"/>
+</div>
+
+```java
+git clone https://github.com/fuzhengwei/w13scan.git
+cd w13scan # 进入git目录
+pip3 install -r requirements.txt
+cd W13SCAN # 进入源码目录
+python3 w13scan.py -h
+```
+
+```java
+python3 w13scan.py -s 127.0.0.1:7778 --html # 端口可省略，默认为7778,开启--html即实时生成html报告
+```
+
+- 安装完成后启动，也可以看到一个 ` HTTPServer is running at address('0.0.0.0','7778')......` 日志。
+
+### 3. 代理配置
+
+无论使用那种方式部署，启动完成后，都需要给浏览器配置代理。其实也就是你的电脑的网络哪里配置下代理。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-w13scan-jdumpspider-05.png" width="750px"/>
+</div>
+
+- 给你的网络配置代理服务，我这里是 mac 电脑点网络wifi那里进入的配置。你可以找到你的位置进行添加。
+
+### 4. 下载证书
+
+下载：[http://w13scan.ca/](http://w13scan.ca/)
+
+一定是你服务启动成功，代理配置成功。那么你在点击下载后，才能下载一个 `download.crt` 文件。之后双击点开信任即可。
+
+### 5. 开始使用
+
+一切配置成功后，你可以在浏览器访问你想检查漏洞的网址，一段时间后就可以看到被动扫描组件检测的数据信息了。之后进入到 `w13scan/W13SCAN/output` 查看检测文件了。这些 html 文件直接用浏览器打开和刷新即可。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-w13scan-jdumpspider-06.png" width="750px"/>
+</div>
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-w13scan-jdumpspider-09.png" width="750px"/>
+</div>
+
+- 现在你就看到一些展示的系统安全漏洞了，再根据这些漏洞进行**友好的访问**
+
+## 四、heapdump 下载
+
+测试前你可以先启动 xfg-dev-tech-w13scan-jdumpspider 应用。这样就可以做后面的流程以及获取 heapdump 日志了。
+
+### 1. 问题背景
+
+测试工程中的 yml 配置。这个配置为了配合普罗米修斯做监控使用的，但要注意如果只是这样配置，是很有风险的。
+
+```java
+# 监控
+management:
+  endpoints:
+    web:
+      exposure:
+        include: "*"
+  endpoint:
+    health:
+      show-details: always
+  metrics:
+    export:
+      prometheus:
+        enabled: true
+  prometheus:
+    enabled: true
+```
+
+- 如果你的 SpringBoot 系统配置了这样的监控，并且没有配置相关的安全校验，Spring Security 那么现在你就暴漏了自己的端点。
+
+### 2. 端点访问
+
+地址：[http://127.0.0.1:8091/actuator/env](http://127.0.0.1:8091/actuator/env)
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-w13scan-jdumpspider-07.png" width="550px"/>
+</div>
+
+- 这个地址，就可以由被动扫描检测出来。不过不同的被动扫描组件检测点不同，有些是没有的。
+
+### 3. 下载 dump
+
+地址：[http://127.0.0.1:8091/actuator/heapdump](http://127.0.0.1:8091/actuator/heapdump)
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-w13scan-jdumpspider-08.png" width="250px"/>
+</div>
+
+- 把工程的 heapdump 文件下载下来。下载后可以放到案例工程 docs 里 JDumpSpider-1.1-SNAPSHOT-full.jar 的同层路径下。
+
+## 五、heapdump 解析
+
+以前小傅哥带着大家做一篇[《Eclipse MAT 分析 Java heap space dump 日志》](https://bugstack.cn/md/road-map/dump-mat.html) 这个也能分析 dump 日志查看系统中的核心数据。不过这里我们选择个更针对性的 JDumpSpider 做日志分析，直接提取核心配置。
+
+源码：[https://github.com/whwlsfb/JDumpSpider](https://github.com/whwlsfb/JDumpSpider) - 有相关的使用说明。
+
+命令：`java -jar JDumpSpider-1.1-SNAPSHOT-full.jar heapdump`
+
+```java
+/bin/zsh /xiaofuge/develop/github/xfg-dev-tech-w13scan-jdumpspider/docs/jdumpspider.sh
+(base) xiaofuge@ZBMac-GV47H1GXD docs % /bin/zsh /Users/xiaofuge/Documents/develop/github/xfg-dev-tech-w13scan-jdumpspider/docs/jdumpspider.sh
+===========================================
+SpringDataSourceProperties
+-------------
+password = 123456
+driverClassName = com.mysql.cj.jdbc.Driver
+url = jdbc:mysql://127.0.0.1:13306/road_map?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC&useSSL=true
+username = root
+
+===========================================
+WeblogicDataSourceConnectionPoolConfig
+-------------
+not found!
+
+===========================================
+MongoClient
+-------------
+not found!
+
+===========================================
+AliDruidDataSourceWrapper
+-------------
+not found!
+
+===========================================
+HikariDataSource
+-------------
+not found!
+```
+
+- 命令执行后可以看到你的工程中连接数据库的配置，密码也会直接暴漏出来。其他的配置如果你有添加，也会一并给你拿出来。**底裤给你扒掉**
+
+## 六、安全建议
+
+- 对于自己上线的应用，尤其独立开发者，一定多进行安全扫描。
+- 不要无密码暴漏自己的应用，包括任何监控、数据采集、以及第三方组件。
+- 数据库、缓存、文件等连接，在云服务器要配置上可访问IP限制。这样就算底裤拔掉了，也还有一个玻璃罩。只能看，不能连。
\ No newline at end of file
diff --git a/docs/md/road-map/1panel.md b/docs/md/road-map/1panel.md
new file mode 100644
index 000000000..e03e9ac5d
--- /dev/null
+++ b/docs/md/road-map/1panel.md
@@ -0,0 +1,85 @@
+---
+title: 1Panel 运维面板
+lock: need
+---
+
+# 1Panel 云服务器运维面板 | 操作云服务器，这套东西还适合小白的！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+在编程的这条路上，大家都经历过小白阶段。在小白阶段，即使是简简单单的环境安装，也都会遇到一堆堆的报错。所以最开始学习编程的时候，我们都希望找到那些简单、方便、好用的工具，让我们线上手✋🏻。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/springcloud-gateway-01.gif" width="200px"/>
+</div>
+
+**那云服务器操作有Easy工具吗？🤔**
+
+小傅哥，在最早使用云服务器的时候，为了快速简单的搭建博客对外使用，选择过宝塔面板。这个东西虽然不大，但对于最开始云服务器操作能力和对编程的理解都比较偏弱的伙伴还是非常好用的。
+
+但当大家开始使用 Linux + Docker，对一些列分布式环境继续安装和项目构建部署时，有些小白就会遇到一些各类小问题了。只有写好了 docker compose 和对应的文档，才能让小白快速完成安装。但有一些小白用到的新的服务安装时，自己不会写 docker compose 就会遇到新问题了。所以，今天我们来体验下一个新的云服务器运维面板，非常好用。
+
+## 一、面板介绍
+
+1Panel 是新一代的 Linux 服务器运维管理面板，它可以帮助你非常方便管理云服务器上的软件操作。`也不需要再配置 docker 代理了。`
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-1panel-01.png" width="950px"/>
+</div>
+
+- 用户可以通过 Web 图形界面轻松管理 Linux 服务器，实现主机监控、文件管理、数据库管理、容器管理等功能。
+- 深度集成开源建站软件 WordPress 和 Halo，域名绑定、SSL 证书配置等一键搞定。
+- 精选上架各类高质量的开源工具和应用软件，协助用户轻松安装并升级。
+- 基于容器管理并部署应用，实现最小的漏洞暴露面，同时提供病毒防护、防火墙和日志审计等功能。
+- 支持一键备份和恢复，用户可以将数据备份到各类云端存储介质，永不丢失。
+
+> 好啦，介绍的还挺🐂皮的，咱们来体验下！
+
+## 二、安装软件
+
+### 1. 安装脚本
+
+```java
+curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sh quick_start.sh
+```
+
+- Centos 一键安装脚本，复制到云服务器直接执行即可。
+- 其他的云服务器系统安装脚本：https://1panel.cn/docs/installation/online_installation/
+- 2c2g 云服务器，活动价，一年26元 [https://618.gaga.plus](https://618.gaga.plus)
+
+### 2. 安装效果
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-1panel-02.png" width="950px"/>
+</div>
+
+- 安装过程中你可以顺序点回车即可，注意是否配置镜像加速，因为我配置过，所以没有配置。你可以选 Y 统一配置镜像加速。
+- 安装完成后，会得到一个外网地址，端口是默认的 19166，同时给会你用户和密码。注意，需要在云服务器开放端口（安全组/防火墙）19166 另外账号密码可以在登录后修改。
+
+## 三、软件功能
+
+### 1. 查看容器
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-1panel-03.png" width="950px"/>
+</div>
+
+- 你的 Linux 安装 Docker 会直接被 1Panel 接管。在 1Panel 会看到你安装过的软件。
+- 同时可以看到每个软件占用的 CPU、内存，这个还是非常好用的。
+
+### 2. 安装软件
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-1panel-04.png" width="950px"/>
+</div>
+
+- 在 1Panel 的应用商店里，可以按照你需要的各类软件（它的覆盖度还是非常全的），包括常用的：Nginx、MySQL、MQ、Nacos、PHPAdmin等等，都是有的。
+- 如图，是个 OneAPI 它是用于访问兼容访问各类其他 OpenAI 的软件的。比如，文心一言、通义千问、讯飞星火、智谱 ChatGLM、腾讯混元，都可以按照 ChatGPT 的格式进行使用啦。
+
+>好啦，你可以美滋滋的去体验下啦！🌶
+
diff --git a/docs/md/road-map/aigc.md b/docs/md/road-map/aigc.md
new file mode 100644
index 000000000..613830d63
--- /dev/null
+++ b/docs/md/road-map/aigc.md
@@ -0,0 +1,173 @@
+---
+title: AiGC
+lock: need
+---
+
+# 入局AiGC，分币没赚！咋整滴？
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+AiGC 入局后，连更一周小说，分币不赚，还被催更`擦边小故事`！我把这当做，不是 AiGC 入局，而是跳河！如果有想做这个方向的，可以先冷静下，看看自己适合不。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aigc-01.png" width="350px">
+</div>
+
+最近一段时间受不少 AiGC 类广告的影响，`文生图`、`文生视频`、`故事成片`，在家动动手就能赚钱。一个视频都几千、几万的点赞。
+
+听起来做这个也挺简单，让 DeepSeek 生成口播故事，把故事放到 AiGC 软件（现在一堆），选择故事成片，在把视频上传到抖音、快手、头条，完活！**就是不赚钱！**
+
+>本文会分享 AiGC 视频制作的过程和注意点。另外作为技术人员，我们可以自己部署一个文生视频的软件服务，以及了解相关的 API 技术，也为后续自己开发 AiGC 做积累。
+
+## 选择一个赛道！下场！
+
+首先，你可以想好一个创作的主题，如果有多个主题，可以分别投放到不同的软件平台，尽量先垂直一个系列更新，如果一直没有流量，后面可以干掉重新换主题来。
+
+主题可以包括；`婆媳关系`、`中老年相亲`、`农村故事`、`鬼故事`、`好看的景色+音乐`、`儿童诗歌`，也就是你尽量要找一些高频有大量客群的场景，只要推荐到这样的人群标签下，视频的播放量还是很高的。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aigc-03.png" width="450px">
+</div>
+
+但不要想着这样就能赚钱，如果只是试试水，基于 DeepSeek 生成关键信息的故事（主题、背景、人物、故事线），再把故事放到文生视频完成后上传即可。**但这样做好，基本属于徒劳！**
+
+在我尝试推了几个鬼故事后，没有看到什么流量，这时候有个哥们加我，说我这样推没用的。我也好奇的去加了下关注，他是专门做鬼故事系列的，每个内容都很精良，而且属于 TM 鬼故事 + 擦边！还备注上（收徒）！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aigc-02.png" width="450px">
+</div>
+
+所以，从这块开始，我发现要想让一个内容有较不错的流量，需要以下几点；
+
+1. 故事主体框架是明确、不能纯用 DeepSeek 来写。故事可以基于一些比较火的小说来制造。看过越多小说的，做这方面越有优势。
+2. 故事内容太干净了也没有人看，在 DeepSeek + 文生视频允许的范围内，你都可以“肆意”创作。
+3. 如果你时间更多，也更想做好，那么要对生成的视频，逐帧剪辑，也可能要多生成几次来使用。并制造好吸引人的封面！
+3. 长期主义，1~3，你可以都不用考虑。而是真的一点点来结合 AI 来写长期有意义的故事。
+
+**不过，就算以上这样你都做了，也可能一点流量都没有！**😂 
+
+## AiGC 软件工具
+
+在有了内容以后，就是 AI 生成视频了。AI 生成视频的软件有很多，基本也都是付费的。😂 所以说，你不一定赚不赚钱，但 AI 创作课程和 AI 软件是赚钱。
+
+我体验了，可灵 AI、录咖 AI，还有抖音剪映自带的 AI 生成类工具。可灵 AI 适合文生图片、数字人口播，剪映 AI 适合文生视频。因为我本身就需要日常剪辑视频，开了剪映会员，所以可以直接使用。可灵 AI 是少量付费体验了下。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aigc-04.png" width="750px">
+</div>
+
+- 剪映 APP 有个 AI 图片成片，进入后选择 AI 故事成片。
+- 你可以把 DeepSeek/AI 生成口播故事（2000字 - 3000字），放进来转换即可。完成后，把视频下载下来，上传到你的各个平台。
+
+## 我以为一分钱也赚不到的时候！
+
+**在我折腾了快一周，以为分币赚不到的时候，来活了！**
+
+有个“粉丝”，关注了我。给我讲，接活不。我问啥活，她说，关注这个没事主播，点赞视频和收藏，完成后给6块钱。我没想到，她真给！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aigc-05.png" width="350px">
+</div>
+
+o(╥﹏╥)o 这是我做 AIGC 的第一笔收入！虽然，它看起来不正常！
+
+晚上，这个粉丝小姐姐，问我还做不。我说行，她说你要大量做，要下载一个软件“魅信”。我去TM的，我是一个程序员，能信你这！不是“魅信”可怕，是你给我来个自动录屏，整走我点信息不完犊子了。
+
+所以，我给这假粉丝讲！我是一个程序员，我对这个不放心，我不做了！没过多久，我就看XXX视频平台给这个假粉丝账号封了，没法查看完整聊天。以至于我只能截图这一丢丢，给大家看。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aigc-06.png" width="150px">
+</div>
+
+- 因为它的账号被封了，已经看不到内容了。只能通过录制视频，在截取一下。不过截取不全了。
+- 所以，如果你遇到这种的，赚个6块就跑吧🏃🏻‍！
+
+## 回到本质，仍然是技术！
+
+说到底，其实做各类东西都需要大量的时间精力投入，也有努力 + 运气，才可能有机会做成。想随随便便加个“副业社群”，不一定都能赚到什么钱。
+
+就像你自己，如果用了大量的核心知识储备，那么你所用的这些产品就是工具，反之他们就不是工具，而是收割你的工具。
+
+所以，作为研发人员，我们储备多的是技术知识，可以依赖于技术底层的积累，增强对工具的实现技术了解。看看这样的 AIGC 工具是如何实现的，能部署一个深入了解不，看看API接口从哪调用的，以后我们自己搞下是不更好。
+
+### 1. 软件部署
+
+有这么一个开源软件「利用AI大模型，一键生成高清短视频 Generate short videos with one click using AI LLM.」，可以通过 Docker 部署体现。
+
+代码：[https://github.com/harry0703/MoneyPrinterTurbo](https://github.com/harry0703/MoneyPrinterTurbo)
+
+**docker-compose.yml**
+
+```java
+services:
+  webui:
+    image: registry.cn-hangzhou.aliyuncs.com/xfg-studio/moneyprinterturbo:latest
+    container_name: MPTwebui
+    ports:
+      - "8501:8501"
+    restart: unless-stopped
+    logging:
+      driver: "json-file"
+      options:
+        max-size: "2m"
+    command: >
+      streamlit run /MoneyPrinterTurbo/webui/Main.py
+      --browser.serverAddress=127.0.0.1
+      --server.enableCORS=True
+      --browser.gatherUsageStats=False
+  api:
+    image: registry.cn-hangzhou.aliyuncs.com/xfg-studio/moneyprinterturbo:latest
+    container_name: MPTapi
+    ports:
+      - "8080:8080"
+    restart: unless-stopped
+    logging:
+      options:
+        max-size: "2m"
+    command: python3 /MoneyPrinterTurbo/main.py
+```
+
+- 通过 Docker Compose 脚本，执行软件安装。`docker-compose -f docker-compose.yml up -d` 来执行安装。
+- 安装后访问 ip:8501
+
+### 2. 访问服务
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aigc-07.png" width="950px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aigc-10.png" width="950px">
+</div>
+
+- 首先，需要点开设置。配置你的 openai 地址服务，之后配置 [Pexels API Key](https://www.pexels.com/api/key/) 
+- 之后，填写文案，文案也可以由 AI 工具生成复制进来。之后点击生成视频（其他选型也可以尝试更换）。
+- 最后，生成完视频，就可以扔了。这个效果基本就是体验，与剪映那个差太多了。
+
+### 3. 访问API
+
+AIGC 相当于根据你的文案，检索/生成对应图片，好的AI产品会设置分镜头不同视角的检索。在结合这些图片、视频资源合成你最后要生成的视频效果。
+
+如：[https://www.pexels.com/](https://www.pexels.com/) 就是一个图片视频资源库，你可以免费申请一个 API，之后使用它来生成图片。它的官网有对应的文档描述使用。举例如下；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aigc-09.png" width="950px">
+</div>
+
+```java
+curl -H "Authorization: 8aHBe0CyGtMZVMji32RVEvgzIRNx38rrkHlbp9HK*****申请你的" \
+  "https://api.pexels.com/v1/search?query=美女&per_page=1"
+```
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aigc-08.png" width="550px">
+</div>
+
+- 调用接口返回的 JSON 可以查看图片信息，基本你要的内容还是可以大部分时候准确获取的。
+- 如果感兴趣，还可以深入体验下它的 API。
+
diff --git a/docs/md/road-map/aliyun-workbench.md b/docs/md/road-map/aliyun-workbench.md
new file mode 100644
index 000000000..310ab443e
--- /dev/null
+++ b/docs/md/road-map/aliyun-workbench.md
@@ -0,0 +1,233 @@
+---
+title: Docker 镜像构建 - Aliyun
+lock: need
+---
+
+# Docker 镜像构建 - Aliyun
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+<iframe id="B-Video" src="//player.bilibili.com/player.html?isOutside=true&aid=114633499215274&bvid=BV1sHTAznEVL&cid=30342449895&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="100%" height="480"> </iframe>
+
+大家好，我是技术UP主小傅哥。
+
+对于搞编程开发的伙伴来说，我一直都推荐使用 Mac 电脑，因为 Windows 电脑除了相对省点钱，其他的什么也不省！为啥？那我 Windows 电脑推沟里？
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-github-actions-workflows-01.png" width="150px">
+</div>
+
+**大厂更多的都是给程序员👨🏻‍💻配Mac！**
+
+其实到也不是 Windows 不好，只是在编程开发中的环境配置，要有太多的额外的兼容问题。因为 Windows 是一个系统，这个系统被各个厂商使用，安装到自己家的电脑上。因此一个软件安装后，不同的机器，都可能在一些细节功能上，有自己的差异化处理方案。就像 Docker 安装，Mac 电脑直接安装即可，Windows 不是安装虚拟机，就是搞个 wsl2，不少小白基本就在这崩溃了。
+
+相对说，Mac 电脑就好的多，因为人家的系统只给自己家的电脑使用。所以各类软件的安装和使用也不会有那么多的适配问题了。另外 Mac 电脑也等同于是在 Linux 上做开发，你的所有编程中使用的命令，几乎就是无差别的可以在云环境 Linux 执行。因此，Mac 电脑除了不省钱，其他的都省；省时、省心、省力。
+
+不过，Windows 电脑也不能推沟里呀！所以，我们要想点办法，让一些如 Docker 的环境安装和镜像构建，让外部系统解决。不就可以了噻！
+
+>接下来，小傅哥就教大家搞一下这个事情。—— 学到手的全是技术！
+
+## 一、DevOps 流水线
+
+DevOps 流水线，是一种可持续集成交付的手段。用户可以使用流水线自定义编排项目发布过程中所涉及的代码打包、单元测试、自动部署等各项阶段。 通过一系列自动化任务的组合解决日常开发工作中繁琐而重复的任务。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aliyun-workbench-01.png" width="750px">
+</div>
+
+官网（JD）：[https://docs.jdcloud.com/cn/devops/application-scenarios](https://docs.jdcloud.com/cn/devops/application-scenarios)
+
+---
+
+市面上也有很多的免费的可持续交付工具，方便我们自己部署项目使用。如 [Github Actions](https://bugstack.cn/md/road-map/github-actions-workflows.html)、[buddy.works](https://bugstack.cn/md/road-map/buddy.html)、[Jenkins](https://bugstack.cn/md/road-map/jenkins.html)，这些已经在 [bugstack.cn](https://bugstack.cn/) 编程路书（发布部署）中分享。今天小傅哥再分享一个阿里云的 DevOps 流水线操作，实际使用体验效果还不错。
+
+## 二、云效工作台介绍
+
+本次案例会涉及到使用阿里云效平台的 `代码管理`、`流水线配置`、`容器镜像`
+
+### 1. 代码&流水线
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aliyun-workbench-02.png" width="850px">
+</div>
+
+- 地址：[https://devops.aliyun.com/workbench](https://devops.aliyun.com/workbench)
+- 说明：用于管理工程代码和配置流水线。你可以提交本地代码，也可以把其他仓库的代码导入到`代码管理`中，如；Github、Gitee、Gitlab，其他的也可以通过 url 导入。
+
+### 2. 容器镜像服务
+
+#### 2.1 容器申请
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aliyun-workbench-03.png" width="850px">
+</div>
+
+- 地址：[https://cr.console.aliyun.com/cn-hangzhou/instance/dashboard](https://cr.console.aliyun.com/cn-hangzhou/instance/dashboard)
+- 说明：容器镜像，相当于代理的 [Docker Hub](https://hub.docker.com/) 可以把我们通过流水线构建的项目（SpringBoot/React/...）构建的镜像，放到容器镜像服务中。之后就可以在其他云环境或者本地环境拉取使用了。
+
+#### 2.2 新建服务
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aliyun-workbench-09.png" width="550px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aliyun-workbench-10.png" width="550px">
+</div>
+
+- 这里要新建一个镜像名称，`xfg-dev-tech-aliyun-workbench` 的镜像。这个镜像为后续的流水线构建使用。
+- 创建的时候，要选择对应的仓库。可以是 Codeup 的阿里云代码库，也可以是 Github 关联地址的仓库。
+
+> 再往下开始平台，你需要注册一个云校平台和容器镜像服务。
+
+## 三、上传代码库
+
+这部分会涉及一些 Git 的操作，这里小傅哥准备好了教程可以使用 [https://bugstack.cn/md/road-map/git.html](https://bugstack.cn/md/road-map/git.html)
+
+### 1. 案例工程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aliyun-workbench-04.png" width="350px">
+</div>
+
+```java
+# 基础镜像 openjdk:8-jre-slim 代理地址；registry.cn-hangzhou.aliyuncs.com/xfg-studio/openjdk:8-jre-slim
+FROM registry.cn-hangzhou.aliyuncs.com/xfg-studio/openjdk:8-jre-slim
+
+# 作者
+MAINTAINER xiaofuge
+
+# 配置
+ENV PARAMS=""
+
+# 时区
+ENV TZ=PRC
+RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
+
+# 在容器内创建目录/home/project 用于存放应用程序和相关文件
+RUN mkdir -p /home/project
+
+# 设置工作目录为/home/project，即后续的命令都在这个工作目录下执行。
+WORKDIR /home/project
+
+# 添加应用
+ADD xfg-dev-tech-app/target/xfg-dev-tech-app.jar /home/project/xfg-dev-tech-app.jar
+
+## 在镜像运行为容器后执行的命令
+ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /home/project/xfg-dev-tech-app.jar $PARAMS"]
+```
+
+- 地址：[https://github.com/fuzhengwei/xfg-dev-tech-aliyun-workbench](https://github.com/fuzhengwei/xfg-dev-tech-aliyun-workbench)
+- 说明：这里小傅哥给你准备好了一个测试工程，你可以使用验证阿里云效流水线操作。
+- 脚本：注意配置的脚本信息，如果你是新的其他的工程，可以参考配置。
+
+### 2. 上传项目
+
+把案例代码上传到阿里云代码库的方式有很多，可以从 Github 导入，也可以先把代码拉取到本地，在从本地上传到阿里云代码库。但两个方式都建议把代码拉取到本地代码一份，方便进行修改。
+
+#### 2.1 导入代码
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aliyun-workbench-05.png" width="950px">
+</div>
+
+- 首先，进入案例工程地址（Github），点击 Fork 克隆到自己的仓库中。
+- 之后，在阿里云效点击导入仓库，这里可以选择从 Github 导入。导入的时候，需要填写 Access Token。创建地址：[https://github.com/settings/tokens](https://github.com/settings/tokens)
+- 最后，在确认后会展示你的 Github 仓库列表，选择要导入的工程即可。
+
+#### 2.2 上传代码
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aliyun-workbench-06.png" width="950px">
+</div>
+
+- 首先，开始操作之前，你要把提供的案例代码拉取到本地。
+- 之后，在云效代码库，新建一个代码库。新建后可以获得一个 https 提交代码库的地址。另外，要注意你还要在云效仓库个人设置里，创建一个，个人访问令牌（地址：[https://account-devops.aliyun.com/settings/profile](https://account-devops.aliyun.com/settings/profile)）。
+- 最后，在自己 Intellij IDEA 菜单栏上，点击 Git 选择 Manage Remotes 添加阿里云效仓库地址，之后就可以把代码提交到阿里云效了。
+
+### 3. 添加流水线
+
+#### 3.1 构建操作
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aliyun-workbench-11.png" width="950px">
+</div>
+
+- 如图，配置构建信息。注意，☑️ 制品中包含打包路径的目录。
+
+#### 3.2 添加步骤；Docker镜像构建
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aliyun-workbench-12.png" width="750px">
+</div>
+
+- 添加新的步骤，选择构建并推送至ACR（个人版）注意配置路径正确。
+
+#### 3.3 添加步骤；邮件通知
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aliyun-workbench-13.png" width="750px">
+</div>
+
+- 添加一个邮件通知的插件，构建后会接收到邮件。
+
+### 4. 构建镜像
+
+#### 4.1 执行构建
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aliyun-workbench-14.png" width="950px">
+</div>
+
+- 点击运行，之后就可以构建镜像了。如果哪个节点失败了，可以点日志查看失败原因。
+
+#### 4.2 构建结果
+
+##### 4.2.1 邮件通知
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aliyun-workbench-17.png" width="450px">
+</div>
+
+- 你会收到一个来自云效构建的通知邮件。代表着构建的结果。
+
+##### 4.2.2 查看镜像
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aliyun-workbench-15.png" width="950px">
+</div>
+
+- 构建完成镜像后，可以进入`容器镜像服务`中找到镜像。地址：[https://cr.console.aliyun.com/cn-hangzhou/instance/repositories](https://cr.console.aliyun.com/cn-hangzhou/instance/repositories)
+- 之后还可以通过公网地址拉取镜像，命令：`docker pull registry.cn-hangzhou.aliyuncs.com/fuzhengwei/xfg-dev-tech-aliyun-workbench:1.0.0`
+
+##### 4.2.3 拉取镜像
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-aliyun-workbench-16.png" width="950px">
+</div>
+
+```java
+[root@hcss-ecs-decd ~]# docker pull registry.cn-hangzhou.aliyuncs.com/fuzhengwei/xfg-dev-tech-aliyun-workbench:1.0.0
+1.0.0: Pulling from fuzhengwei/xfg-dev-tech-aliyun-workbench
+1efc276f4ff9: Already exists 
+a2f2f93da482: Already exists 
+1a2de4cc9431: Already exists 
+d2421c7a4bbf: Already exists 
+64e0330ea35f: Pull complete 
+4da07e374896: Pull complete 
+4f4fb700ef54: Pull complete 
+eb9d0e194679: Pull complete 
+Digest: sha256:a7af08fff4ea0b76184a2fad7e7ca639ab4a9ad16573480b526eda672ed8a483
+Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/fuzhengwei/xfg-dev-tech-aliyun-workbench:1.0.0
+registry.cn-hangzhou.aliyuncs.com/fuzhengwei/xfg-dev-tech-aliyun-workbench:1.0.0
+[root@hcss-ecs-decd ~]# docker tag registry.cn-hangzhou.aliyuncs.com/fuzhengwei/xfg-dev-tech-aliyun-workbench:1.0.0 fuzhengwei/xfg-dev-tech-aliyun-workbench:1.0.0
+[root@hcss-ecs-decd ~]# docker images
+REPOSITORY                                                                   TAG       IMAGE ID       CREATED          SIZE
+fuzhengwei/xfg-dev-tech-aliyun-workbench                                     1.0.0     df740ba425bb   24 minutes ago   221MB
+```
+
+- 镜像构建完成后，就可以在云服务器上拉取镜像了。
+- 好啦，到这你就可以愉快的完善了，前端构建镜像也是一样的操作。
diff --git a/docs/md/road-map/arex-test.md b/docs/md/road-map/arex-test.md
new file mode 100755
index 000000000..1f281ac36
--- /dev/null
+++ b/docs/md/road-map/arex-test.md
@@ -0,0 +1,435 @@
+---
+title: AREX - 流量录制&回放
+lock: need
+---
+
+# AREX - 流量录制&回放
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+在互联网大厂应用系统开发中，有一项非常重要的技术手段，保证新迭代功能的可靠性。虽然，这像技术也不是“银弹（啥都能搞定）”，但缺少这项技术，对于极其复杂的业务场景新上线功能，总感觉心里没底！—— 它就是`流量录制`和`流量回放`！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/student-learn-01.gif" width="150px">
+</div>
+
+**如何保证系统的可靠性？**
+
+互联网大厂toc场景，非常重视交付的可靠性，甚至大于交付的效率性。所以，在整个研发声明周期过程中，要有 PRD 评审、研发设计代码、代码评审、代码分支合并评审，以及在这个过程中还有测试人员进行全流程的验证。
+
+但即使这样，面对经历了数十年迭代的系统，单工程甚至几十万行代码，极其复杂的业务系统流程，测试也是可能会出现疏漏。这种疏漏如，虽然非本次需求迭代的场景，但是其他业务场景因当前系统的一个枚举，一个参数的变动，都会影响到数十条业务。哪怕不是代码变动，仅仅是重构了小部分代码块，调整了前后顺序，当前业务无影响，但确影响了某次其他任务的跑批结果！
+
+一次事故，可能是扣绩效和年终奖，也可能是影响晋升提名，还可能是直接毕业🎓啦！所以，在互联网大厂班组🧱搬砖，会学到很多高级技巧，来保证系统的可靠性。
+
+>关注小傅哥 [bugstack.cn](https://bugstack.c) 博客，编程路书，可以学习到非常多的互联网企业使用技能，补全自己的短板！如；系统架构、开发环境、开发技术、授权框架、常用类库、工程测试、质量监控、发布部署等。
+
+## 一、说说概念
+
+其实简单来讲，流量录制，核心的本质就是把线上运行的应用，在有流量请求到服务接口后，把请求接口的入参和执行的结果，都保存下来。之后流量回放，则是把这些保存下来的入参信息，在开发环境/测试环境/预发环境，进行请求，之后验证请求后的结果是否与线上录制的流量结果一致。整个的这个过程，就是流量的录制和回放。
+
+但实际的操作场景要比这个过程复杂，如；录制流量的操作，要无侵入代码的，要把整个调用链路，全部录制下来，而不是单个接口。同时录制的不只是对接口的操作，还有缓存、rpc、数据库（MyBatis）、es，等各类组件兼容，都能确保可正确录制到完整数据，以便在流量回放时，可以mock掉数据接口，以此只验证功能逻辑。
+
+说到，逻辑和数据，这里想到了DDD架构的领域层和基础设施层，领域层（domain）专门业务功能逻辑的，而基础设置层（infrastructure）则是提供数据的。这样有了业务功能和数据获取的分离，不让核心业务逻辑又掺杂外部接口的调用，其实维护和迭代起来，是会更加容易的。
+
+## 二、讲讲原理
+
+为了可以无侵入式的完成系统的流量录制和流量回放，这里引入了一个 Java Agent 字节码增强技术，通过在程序启动阶段，对工程代码的方法进行埋点。这个埋点，就等同于动态的通过 class 文件写入新的代码，新的代码可以采集到方法的出入参信息，并把这些信息发送到流量录制存储方，或者执行时进行mock接口请求结果处理。
+
+这部分技术方案，小傅哥于19-20年，编写了先关的技术资料。其中包括了用于处理字节码增强技术的，asm、javassist、byte-buddy 三种框架。
+
+<div align="center">
+    <img src="https://bugstack.cn/assets/images/2020/itstack-demo-asm-02-1.png" width="750px">
+</div>
+
+文档：[https://bugstack.cn/md/bytecode/asm/2020-04-05-%5BASM%E5%AD%97%E8%8A%82%E7%A0%81%E7%BC%96%E7%A8%8B%5DJavaAgent+ASM%E5%AD%97%E8%8A%82%E7%A0%81%E6%8F%92%E6%A1%A9%E9%87%87%E9%9B%86%E6%96%B9%E6%B3%95%E5%90%8D%E7%A7%B0%E4%BB%A5%E5%8F%8A%E5%85%A5%E5%8F%82%E5%92%8C%E5%87%BA%E5%8F%82%E7%BB%93%E6%9E%9C%E5%B9%B6%E8%AE%B0%E5%BD%95%E6%96%B9%E6%B3%95%E8%80%97%E6%97%B6.html](https://bugstack.cn/md/bytecode/asm/2020-04-05-%5BASM%E5%AD%97%E8%8A%82%E7%A0%81%E7%BC%96%E7%A8%8B%5DJavaAgent+ASM%E5%AD%97%E8%8A%82%E7%A0%81%E6%8F%92%E6%A1%A9%E9%87%87%E9%9B%86%E6%96%B9%E6%B3%95%E5%90%8D%E7%A7%B0%E4%BB%A5%E5%8F%8A%E5%85%A5%E5%8F%82%E5%92%8C%E5%87%BA%E5%8F%82%E7%BB%93%E6%9E%9C%E5%B9%B6%E8%AE%B0%E5%BD%95%E6%96%B9%E6%B3%95%E8%80%97%E6%97%B6.html)
+
+### 1. 增强代码
+
+```java
+mv.visitVarInsn(LLOAD, startTimeIdentifier);
+mv.visitLdcInsn(methodId);
+if (parameterTypeList.isEmpty()) {
+    mv.visitMethodInsn(INVOKESTATIC, Type.getInternalName(ProfilingAspect.class), "point", "(JI)V", false);
+} else {
+    mv.visitVarInsn(ALOAD, parameterIdentifier);  // 5
+    mv.visitVarInsn(ALOAD, localCount);           // 6
+    mv.visitMethodInsn(INVOKESTATIC, Type.getInternalName(ProfilingAspect.class), "point", "(JI[Ljava/lang/Object;Ljava/lang/Object;)V", false);
+}
+```
+
+### 2. 拦截信息
+
+```java
+ASM类输出路径：/Users/xiaofuge/itstack/git/github.com/SQM/target/test-classes/org/itstack/test/ApiTest$1SQM.class
+监控 - Begin
+类名：org.itstack.test.ApiTest
+方法：queryUserInfo
+入参类型：["I","I"]
+入数[值]：[111,17]
+出参类型：Ljava/lang/String;
+出参[值]："你好，bugstack虫洞栈 | 精神小伙！"
+耗时：95(s)
+监控 - End
+
+测试结果：你好，bugstack虫洞栈 | 精神小伙！
+```
+
+- 以上为简要的案例代码，通过ASM字节码增强框架来对方法修改，增加日志打印信息，在执行方法时，获取出入参。
+- 字节码增强技术应用的方面非常多，如；MapStruct、非入侵的全链路监控、Lombok，甚至你用过的 IntelliJ IDEA 破解也是字节码增强技术。
+
+## 三、工具介绍
+
+关于流量录制和流量回放的工具是蛮多的，其中包括；[jvm-sandbox-repeater](https://github.com/alibaba/jvm-sandbox-repeater)、[MoonBox](https://github.com/vivo/MoonBox)、[arextest](https://arextest.com/) 等。
+
+- jvm-sandbox-repeater，是一个基于 JVM-Sandbox 采用Java来实现的流量录制回放工具，或者可以理解为它是一个基于Java虚拟机的插件，可以直接运行中JVM中，无需对目标应用程序进行任何修改。
+- Moonbox（月光宝盒），是一个无侵入的线上流量录制 和流量回放平台，沿用了jvm-sandbox-repeater的SPI设计，并提供了大量的常用插件，同时也提供数据统计和存储能力。通过Moonbox可以实现自动化测试、线上问题追踪、和业务监控等能力
+- arextest，AREX 通过将真实的在线流量复制到测试环境进行自动化 API 测试来解决自动化测试的挑战。**作为本文分享场景工具使用。**
+
+**名词解释**
+
+- **录制**：把一次请求的入参、出参、**下游RPC、DB、缓存**等序列化并存储的过程
+- **回放**：把录制数据还原，重新发起一次或N次请求，对特定的下游节点进行MOCK的过程
+- **入口调用**：入口调用一般是应用的**流量来源**，比如http/dubbo，在调用过程中录制调用入参，返回值。回放时作为流量发起和执行结果对比依据
+- **子调用**：区别于入口调用，子调用是调用执行过程中某次方法调用。子调用在录制时会记录该方法的入参、返回值；回放时用该返回值进行MOCK
+- **MOCK**：在回放时，被拦截的子调用**不会发生真实调用**，利用字节码动态干预能力，将录制时的返回值直接返回
+- **降噪**：在回放时，部分回放子调用入参或者回放流量响应结果和原始流量对比不一致字段，对这些非必要字段进行排除对比过程
+
+## 四、工具使用
+
+### 1. 案例工程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-traffic-agent-01.png" width="800px">
+</div>
+
+- 地址：[https://github.com/fuzhengwei/xfg-dev-tech-traffic-agent](https://github.com/fuzhengwei/xfg-dev-tech-traffic-agent)
+- 如图：1~6点，说明了各个模块的用途。
+- 提示：建议使用云服务器部署流量录制&回放服务，非常方便。
+
+### 2. 安装插件
+
+地址：[https://chromewebstore.google.com/detail/arex-chrome-extension/jmmficadjneeekafmnheppeoehlgjdjj](https://chromewebstore.google.com/detail/arex-chrome-extension/jmmficadjneeekafmnheppeoehlgjdjj)
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-traffic-agent-04.png" width="800px">
+</div>
+
+- 安装插件是为了有权限访问接口。
+
+### 3. 服务部署（arex）
+
+**前置条件**，2c4g云服务器，完成初始化Docker环境。这里有一键安装脚本，[https://bugstack.cn/md/road-map/docker-install.html](https://bugstack.cn/md/road-map/docker-install.html)
+
+```java
+[root@iv-jdyun ~]# cd /
+[root@iv-jdyun ~]# mkdir dev-ops
+[root@iv-jdyun ~]# cd dev-ops
+[root@iv-jdyun ~]# sudo yum install git
+[root@iv-jdyun ~]# git clone --depth 1 https://github.com/arextest/deployments.git
+[root@iv-jdyun ~]# cd deployments
+[root@iv-jdyun ~]# docker-compose up -d
+```
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-traffic-agent-02.png" width="800px">
+</div>
+
+- 执行脚本安装完成后，在云服务器安全组开放端口号（出/入规则）。
+- 之后访问：http://ip:8088 首次访问会慢一些，进入后会让设置你的登录账号。
+
+### 4. 启动项目 - 录制流量
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-traffic-agent-03.png" width="900px">
+</div>
+
+- 首先，需要给项目工程加入一个 agent，来录制和回放。arex 的 agent jar，下载后方到工程下，lib 中。目前工程中已经下载了，如果将来有更新，可以重新下载最新的。地址：[https://github.com/arextest/arex-agent-java/releases](https://github.com/arextest/arex-agent-java/releases)
+- 之后，本地项目测试验证的时候，可以先 **install**，成功之后使用 `run_application_2_agent.sh` 启动项目，这个操作会把 agent 加载到程序启动中。
+
+#### 4.1 本地测试
+
+```java
+#!/bin/bash
+
+# AREX Agent 启动脚本
+# 用于在不同环境下启动应用并加载 AREX Agent
+
+# 设置 AREX Agent 相关参数
+AREX_AGENT_PATH="./lib/arex-agent.jar"
+AREX_SERVICE_NAME="xfg-dev-tech-app"
+AREX_STORAGE_HOST="115.190.107.206:8093"
+
+# 应用 JAR 包路径（相对于项目根目录）
+APP_JAR="../../xfg-dev-tech-app/target/xfg-dev-tech-app.jar"
+
+# JVM 参数
+JVM_OPTS="-Xms512m -Xmx1024m"
+
+# 检查 AREX Agent 文件是否存在
+if [ ! -f "$AREX_AGENT_PATH" ]; then
+    echo "错误: AREX Agent 文件不存在: $AREX_AGENT_PATH"
+    echo "请确保 arex-agent.jar 文件已放置在正确位置"
+    exit 1
+fi
+
+# 检查应用 JAR 包是否存在
+if [ ! -f "$APP_JAR" ]; then
+    echo "错误: 应用 JAR 包不存在: $APP_JAR"
+    echo "请先执行 mvn clean package 构建应用"
+    exit 1
+fi
+
+echo "正在启动应用..."
+echo "AREX Agent: $AREX_AGENT_PATH"
+echo "Service Name: $AREX_SERVICE_NAME"
+echo "Storage Host: $AREX_STORAGE_HOST"
+echo "Application: $APP_JAR"
+echo ""
+
+echo "执行配置："$JVM_OPTS \
+          -javaagent:"$AREX_AGENT_PATH" \
+          -Darex.service.name="$AREX_SERVICE_NAME" \
+          -Darex.storage.service.host="$AREX_STORAGE_HOST" \
+          -jar "$APP_JAR"
+
+# 启动应用
+java $JVM_OPTS \
+     -javaagent:"$AREX_AGENT_PATH" \
+     -Darex.service.name="$AREX_SERVICE_NAME" \
+     -Darex.storage.service.host="$AREX_STORAGE_HOST" \
+     -jar "$APP_JAR"
+```
+
+#### 4.2 docker 镜像
+
+##### 4.2.1 dockerfile
+
+```java
+# 基础镜像
+FROM openjdk:8-jre-slim
+
+# 作者
+MAINTAINER xiaofuge
+
+# 配置
+ENV PARAMS=""
+
+# AREX Agent 配置
+ENV AREX_SERVICE_NAME="xfg-dev-tech-app"
+ENV AREX_STORAGE_HOST="115.190.107.206:8093"
+
+# 时区
+ENV TZ=PRC
+RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
+
+# 添加 AREX Agent
+ARG AREX_AGENT_PATH=docs/dev-ops/lib/arex-agent.jar
+ADD ${AREX_AGENT_PATH} /arex-agent.jar
+
+# 添加应用
+ADD target/xfg-dev-tech-app.jar /xfg-dev-tech-app.jar
+
+ENTRYPOINT ["sh","-c","java $JAVA_OPTS -javaagent:/arex-agent.jar -Darex.service.name=$AREX_SERVICE_NAME -Darex.storage.service.host=$AREX_STORAGE_HOST -jar /xfg-dev-tech-app.jar $PARAMS"]
+```
+
+##### 4.2.2 docker-compose
+
+```java
+version: '3.8'
+
+services:
+  xfg-dev-tech-app:
+    image: fuzhengwei/xfg-dev-tech-app:traffic-agent-v1
+    container_name: xfg-dev-tech-app
+    ports:
+      - "8091:8091"
+    environment:
+      # AREX Agent 配置
+      - AREX_SERVICE_NAME=xfg-dev-tech-app
+      - AREX_STORAGE_HOST=115.190.107.206:8093
+      # JVM 配置
+      - JAVA_OPTS=-Xms512m -Xmx1024m
+    volumes:
+      # 日志目录挂载（可选）
+      - ./data/logs:/var/log/app
+    networks:
+      - app-network
+    restart: unless-stopped
+    
+networks:
+  app-network:
+    driver: bridge
+
+volumes:
+  app-logs:
+    driver: local
+```
+
+- 此方式适用于项目部署上线。
+
+### 5. 启动程序
+
+```java
+./bin/bash /xfg-dev-tech-traffic-agent/docs/dev-ops/run_application_2_agent.sh
+```
+
+```java
+(base) fuzhengwei1@ZBMac-GV47H1GXD dev-ops % /bin/bash /Users/fuzhengwei1/Documents/develop/github/xfg-dev-tech-traffic-agent/docs/dev-ops/run_application_2_agent.sh
+正在启动应用...
+AREX Agent: ./lib/arex-agent.jar
+Service Name: xfg-dev-tech-app
+Storage Host: 115.190.107.206:8093
+Application: ../../xfg-dev-tech-app/target/xfg-dev-tech-app.jar
+
+执行配置：-Xms512m -Xmx1024m -javaagent:./lib/arex-agent.jar -Darex.service.name=xfg-dev-tech-app -Darex.storage.service.host=115.190.107.206:8093 -jar ../../xfg-dev-tech-app/target/xfg-dev-tech-app.jar
+2025-06-21 17:57:25:792 [AREX] Agent-v0.4.8 starts initialization...
+Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
+
+  .   ____          _            __ _ _
+ /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
+( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
+ \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
+  '  |____| .__|_| |_|_| |_\__, | / / / /
+ =========|_|==============|___/=/_/_/_/
+ :: Spring Boot ::               (v2.7.12)
+
+25-06-21.17:57:27.856 [main            ] INFO  Application            - Starting Application v1.0-SNAPSHOT using Java 17.0.7 on ZBMac-GV47H1GXD with PID 96181 (/Users/fuzhengwei1/Documents/develop/github/xfg-dev-tech-traffic-agent/xfg-dev-tech-app/target/xfg-dev-tech-app.jar started by fuzhengwei1 in /Users/fuzhengwei1/Documents/develop/github/xfg-dev-tech-traffic-agent/docs/dev-ops)
+25-06-21.17:57:27.858 [main            ] INFO  Application            - The following 1 profile is active: "dev"
+25-06-21.17:57:28.635 [main            ] INFO  TomcatWebServer        - Tomcat initialized with port(s): 8091 (http)
+25-06-21.17:57:28.641 [main            ] INFO  Http11NioProtocol      - Initializing ProtocolHandler ["http-nio-8091"]
+25-06-21.17:57:28.641 [main            ] INFO  StandardService        - Starting service [Tomcat]
+25-06-21.17:57:28.642 [main            ] INFO  StandardEngine         - Starting Servlet engine: [Apache Tomcat/9.0.75]
+25-06-21.17:57:28.683 [main            ] INFO  [/]                    - Initializing Spring embedded WebApplicationContext
+25-06-21.17:57:28.683 [main            ] INFO  ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 781 ms
+25-06-21.17:57:28.913 [main            ] INFO  Http11NioProtocol      - Starting ProtocolHandler ["http-nio-8091"]
+25-06-21.17:57:28.928 [main            ] INFO  TomcatWebServer        - Tomcat started on port(s): 8091 (http) with context path ''
+25-06-21.17:57:28.935 [main            ] INFO  Application            - Started Application in 1.575 seconds (JVM running for 3.285)
+```
+
+- 启动程序，会看到 arex-agent.jar 的加载，这代表是正确✅的，可以上报服务信息。
+
+### 6. 流量录制
+
+```java
+@Slf4j
+@RestController
+@RequestMapping("/api/traffic")
+public class TrafficController {
+
+    @GetMapping("/query_user_age")
+    public Integer queryUserAge(@RequestParam("userId") String userId) {
+        log.info("请求参数:{}", userId);
+//        return getCache();
+        return getDB();
+    }
+
+    // 模拟从缓存获取数据
+    public Integer getCache() {
+        return 20;
+    }
+
+    // 模拟从数据库获取数据
+    public Integer getDB() {
+        return 21;
+    }
+
+}
+```
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-traffic-agent-05.png" width="600px">
+</div>
+
+- 你可以使用工程下，test-api-curl.sh 脚本访问接口，也可以其他方式请求接口。
+- 当你请求完成接口后，就可以去arex控制台检查上报的信息和流量录制的数据了。
+
+### 7. 流量回放
+
+#### 7.1 内网穿透
+
+流量回放是从云服务器调用本地，但本地没有对外的公网IP，所以需要内网穿透，让云服务器可以调用。这里的内网穿透工具很多，可以选择；[natapp](https://natapp.cn/)、[cpolar.com](https://www.cpolar.com/) 等。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-traffic-agent-06.png" width="800px">
+</div>
+
+```java
+Powered By NATAPP       Please visit https://natapp.cn                                                                                                                                     (Ctrl+C to Quit)
+                                                                                                                                                                                                           
+Tunnel Status           Online                                                                                                                                                                             
+  
+Version                 2.3.9 (New Version 2.4.0)     
+  
+Forwarding              http://xfg-studio.natapp1.cc -> 127.0.0.1:8091                                                                                                                                     
+
+Web Interface           Disabled                                                                                                                                                                           
+                                                                                     
+Total Connections       0                                                                                                                                        
+```
+
+- 启动后，会把本地的服务:端口，暴漏出去，通过 http 域名地址访问。
+- 注意，在natapp配置你的应用端口，如 8091，如果是其他就修改下。
+
+#### 7.2 回放配置 - 正确回放
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-traffic-agent-07.png" width="800px">
+</div>
+
+- 如图，填写回放配置信息。
+- 这次我们是正确回放，也就是本地程序没有任何变更。配置后点OK。
+- 点击后，可以在我们本地服务看到回调的日志，但还要稍微等待一会 arex 平台，他要比对回放结果。完成后，Passed 表示回放通过。
+
+#### 7.2 回放配置 - 异常回放
+
+首先，我们要修改下代码。
+
+```java
+@RestController
+@RequestMapping("/api/traffic")
+public class TrafficController {
+
+    @GetMapping("/query_user_age")
+    public Integer queryUserAge(@RequestParam("userId") String userId) {
+        log.info("请求参数:{}", userId);
+//        return getCache();
+        return getDB();
+    }
+
+    // 模拟从缓存获取数据
+    public Integer getCache() {
+        return 20;
+    }
+
+    // 模拟从数据库获取数据
+    public Integer getDB() {
+        return 21;
+    }
+
+}
+```
+
+- 这个接口方法，如果录制流量是用的 getCache()，那么这会就修改为 getDB()，让两次结果不一样。
+- 之后，要重新 install 并重新执行 `run_application_2_agent.sh` 启动项目。关闭执行 Ctrl/Command + C
+
+配置，流量回放操作。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-traffic-agent-08.png" width="600px">
+</div>
+
+- 之后，再来一遍回放。这样就是错误的结果了。
+
+### 8. 接口请求（Debug）
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-traffic-agent-09.png" width="800px">
+</div>
+
+- arex 工具，还支持线上请求本地接口操作。
+- 也就是说，你从线上录制的流量，可以直接拿流量，调试本地接口。有了这样一个操作，哪些线上请求参数非常复杂的结构，就可以直接一键对本地进行验证了。
diff --git a/docs/md/road-map/arthas.md b/docs/md/road-map/arthas.md
new file mode 100644
index 000000000..914830721
--- /dev/null
+++ b/docs/md/road-map/arthas.md
@@ -0,0 +1,465 @@
+---
+title: arthas
+lock: need
+---
+
+# 面试官：“程序内存溢出，你怎么找出大对虾(像)”？ —— arthas 使用教程
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+<iframe id="B-Video" src="//player.bilibili.com/player.html?isOutside=true&aid=113339371947965&bvid=BV1vTyaYeEHq&cid=26380012483&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="100%" height="480"> </iframe>
+
+大家好，我是技术UP主小傅哥。
+
+👬🏻 兄弟，你被看过手相不，你被号过脉相没。一个没与你生活过就知道你的过去和现在，一个不了解你的日常就知道你是否怀孕是男是女。而你自己亲手开发的Java代码，上线后报错都不知道怎么发生的！！！咋办？
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/student-learn-01.gif" width="150px">
+</div>
+
+**那有什么手段给 Java 代码号脉吗？🤔**
+
+还真有这么一个工具，也是大多数老司机程序员👨🏻‍💻非常喜欢用的一款组件，很多时候不好排查的 Bug 都用这个工具进行分析。它可以知道哪个对象创建的过多、方法的出入参、系统运行时候JVM的参数等等，让你随时可以知道系统运行的细节状态。
+
+它就是 Arthas，但很多伙伴还没有使用过，这篇文章为大家分享下，如何使用这样一款组件。以及怎么使用这个组件监控部署到 Docker 中的 Java 应用。
+
+## 一、组件介绍
+
+官网：[https://arthas.aliyun.com/doc/](https://arthas.aliyun.com/doc/)
+
+Arthas 是一款线上监控诊断产品，通过全局视角实时查看应用 load、内存、gc、线程的状态信息，并能在不修改应用代码的情况下，对业务问题进行诊断，包括查看方法调用的出入参、异常，监测方法执行耗时，类加载信息等，大大提升线上问题排查效率。
+
+当你遇到以下类似问题而束手无策时，Arthas可以帮助你解决：
+
+1. 这个类从哪个 jar 包加载的？为什么会报各种类相关的 Exception？
+2. 我改的代码为什么没有执行到？难道是我没 commit？分支搞错了？
+3. 遇到问题无法在线上 debug，难道只能通过加日志再重新发布吗？
+4. 线上遇到某个用户的数据处理有问题，但线上同样无法 debug，线下无法重现！
+5. 是否有一个全局视角来查看系统的运行状况？
+6. 有什么办法可以监控到 JVM 的实时运行状态？
+7. 怎么快速定位应用的热点，生成火焰图？
+8. 怎样直接从 JVM 内查找某个类的实例？
+
+## 二、快速入门
+
+在 Arthas 官网有一个简单🔜快速入门的案例，它提供了2个程序，一个是 Java 的随机数分解的程序代码，另外一个是 arthas-boot.jar 监控组件。这个套代码可以在任何安装了 Java 环境的服务器上使用，包括你本地、云服务器都可以运行。
+
+### 1. 步骤1，案例程序
+
+```java
+curl -O https://arthas.aliyun.com/math-game.jar
+java -jar math-game.jar
+```
+
+### 2. 步骤2，监控程序
+
+```java
+curl -O https://arthas.aliyun.com/arthas-boot.jar
+java -jar arthas-boot.jar
+```
+
+- 启动后会出来一个 math-game.jar 之后再敲下回车，就进入了 Arthas 的监控程序了。之后你可以使用监控程序提供的各种命令进行使用。
+- 命令列表：[https://arthas.aliyun.com/doc/commands.html](https://arthas.aliyun.com/doc/commands.html)
+
+## 三、应用使用
+
+### 1. 环境准备
+
+为了方便大家进行学习验证，小傅哥这里准备好了一个测试工程和相关的环境安装。你可以如下文的说明进行使用和验证。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-arthas-01.png" width="450px">
+</div>
+
+- 工程：[https://github.com/fuzhengwei/xfg-dev-tech-arthas](https://github.com/fuzhengwei/xfg-dev-tech-arthas)
+- 说明：`dev-ops` 下提供了部署测试工程的 docker compose 脚本，以及 arthas-boot 启动程序的脚本。另外工程提供了一个接口，每次访问都会创建对象。接口在 Application 中，简单实现。地址：[http://localhost:8091/api/exec](http://localhost:8091/api/exec) - 接口内容可详见代码。
+- 前置：如果你需要云服务器部署操作，可以在 [bugstack.cn](https://bugstack.cn) <路书> 中有云服务器操作，可以学习使用。
+
+### 2. 应用安装
+
+**操作过程预览**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-arthas-02.png" width="950px">
+</div>
+
+>如图所示，接下来我们会进行部署操作。
+
+#### 2.1 构建脚本
+
+```java
+# 基础镜像 openjdk:8-jre-slim openjdk:8-jdk-alpine 8-jdk-alpine
+FROM openjdk:8-jdk
+
+# 作者
+MAINTAINER xiaofuge
+
+# 配置
+ENV PARAMS=""
+
+# 时区
+ENV TZ=PRC
+RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
+
+# 添加应用
+ADD target/xfg-dev-tech-app.jar /xfg-dev-tech-app.jar
+
+# arthas https://hub.docker.com/r/hengyunabc/arthas
+COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas
+
+## 在镜像运行为容器后执行的命令
+ENTRYPOINT ["sh","-c","java -Djava.security.egd=file:/dev/./urandom -jar $JAVA_OPTS /xfg-dev-tech-app.jar $PARAMS"]
+
+# 暴露容器的端口
+EXPOSE 8989
+```
+
+- `FROM openjdk:8-jdk`：因为 arthas 需要 jps 的相关命令，所以需要指定安装 jdk 版本。`openjdk:8-jre-slim` 是没有这些脚本的。
+- `hengyunabc/arthas:latest`：把 arthas 的镜像打包到程序中，这样我们可以直接在程序中使用 arthas 组件。
+- 构建过程：无论是本地还是云服务器 Docker 启动后，先执行 `maven install` 程序、后执行 `build.sh` 构建应用镜像。[云服务器操作视频](https://bugstack.cn/md/road-map/linux.html)
+
+#### 2.2 部署项目
+
+```java
+version: '3.8'
+# docker-compose -f docker-compose-app.yml up -d
+# 你需要修改system为你自身系统的仓库名
+services:
+  xfg-dev-tech:
+    image: xiaofuge/xfg-dev-tech-app:1.0
+    container_name: xfg-dev-tech
+    restart: on-failure
+    ports:
+      - "8091:8091"
+    environment:
+      - TZ=PRC
+      - SERVER_PORT=8091
+      # 2c4g 配置，4c8g 翻倍，-Xms4096m -Xmx4096m | -Xmx –Xms：指定java堆最大值（默认值是物理内存的1/4(<1GB)）和初始java堆最小值（默认值是物理内存的1/64(<1GB))
+      - JAVA_OPTS=-Xms2048m -Xmx2048m -XX:MaxMetaspaceSize=128m -XX:MetaspaceSize=128m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps
+    volumes:
+      - ./log:/data/log
+      - ./arthas/profiler:/arthas-output
+    logging:
+      driver: "json-file"
+      options:
+        max-size: "10m"
+        max-file: "3"
+    networks:
+      - my-network
+
+networks:
+  my-network:
+    driver: bridge
+```
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-arthas-03.png" width="650px">
+</div>
+
+- 脚本说明；脚本提供了 docker compose 安装的配置参数，包括端口、jvm、日志和arthas的映射路径等。
+- 执行脚本；`docker-compose -f docker-compose-app.yml up -d`这样会帮助你启动项目。 
+- Mac 电脑 + Docker 可以直接在 IntelliJ IDEA 中点击启动。
+
+### 3. 监控部署
+
+```java
+docker exec -it xfg-dev-tech /bin/sh -c "java -jar /opt/arthas/arthas-boot.jar"
+```
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-arthas-04.png" width="850px">
+</div>
+
+- 在案例工程下有一个 dev-ops/arthas-boot.sh 你可以执行启动 arthas
+- 启动后有一个 arthas 的控制台，这个控制台可以输入各种 arthas 提供的命令来监控程序。**非常强大**
+
+### 4. 访问接口
+
+在案例工程中提供了一个用于创建对象的程序，方便进行测试。
+
+```java
+@Slf4j
+@SpringBootApplication
+@RestController()
+@RequestMapping("/api/")
+public class Application {
+
+    public static void main(String[] args) {
+        SpringApplication.run(Application.class);
+    }
+
+    // 创建线程池
+    ExecutorService executorService = Executors.newFixedThreadPool(10);
+    // 用于存储内存占用对象的列表
+    private static final List<Object> memoryHolder = new ArrayList<>();
+
+    /**
+     * http://localhost:8091/api/exec
+     */
+    @RequestMapping(value = "/exec", method = RequestMethod.GET)
+    public String exec() {
+        executorService.submit(() -> {
+            try {
+                // 创建一个大对象
+//                    byte[] largeObject = new byte[10 * 1024 * 1024]; // 10MB
+                byte[] largeObject = new byte[10 * 1024]; // 10MB
+
+                // 将其加入内存占用列表中，防止被gc
+                synchronized (memoryHolder) {
+                    memoryHolder.add(largeObject);
+                }
+
+                log.info("模拟填充大对象");
+
+                // 模拟一些工作
+                Thread.sleep(1000);
+
+            } catch (OutOfMemoryError e) {
+                System.err.println("Out of memory! Halting further allocation.");
+                // 如果出现OOM，暂停分配以防止程序崩溃
+                executorService.shutdown();
+
+            } catch (InterruptedException e) {
+                // 捕获并处理睡眠中断
+                Thread.currentThread().interrupt();
+                System.err.println("Task interrupted");
+            }
+        });
+        return "ok";
+    }
+
+}
+```
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-arthas-05.png" width="650px">
+</div>
+
+- 请求地址：[http://localhost:8091/api/exec](http://localhost:8091/api/exec)
+- 请求脚本：提供了请求1次和循环多次的脚本，方便测试。
+
+## 四、命令使用
+
+使用监控命令前，可以先执行上图中的 curl-one.sh 调用程序接口。你还可以在使用命令的过程中调用测试。
+
+命令：[https://arthas.aliyun.com/doc/commands.html](https://arthas.aliyun.com/doc/commands.html)
+
+### 4.1 dashboard - 当前系统的实时数据面板
+
+> [arthas@7]$ dashboard
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-arthas-06.png" width="950px">
+</div>
+
+- 运行脚本后，可以查看到当前服务的运行数据信息。另外这里还有一些 JVM 基础知识，补充给大家。
+
+#### 4.1.1 jvm 内存空间都有啥
+
+在 Java 运行环境中，JVM（Java Virtual Machine, Java 虚拟机）是执行 Java 程序的引擎，而内存管理是 JVM 非常重要的一部分。JDK 1.8 中的 JVM 内存空间主要分为以下几个区域，每个区域都有其特定的用途：
+
+1. 堆（Heap）：
+   - 用途：堆是 JVM 中内存最大的一块，用于存储所有的对象实例和数组。几乎所有对象都在此分配内存，垃圾收集器也在这里执行。
+   - 分代垃圾收集机制：堆内存被进一步划分为新生代和老年代。
+      - 新生代（Young Generation）：用于存放新创建的对象。其中又分为伊甸园区（Eden Space）和两个幸存者区（Survivor Spaces，通常称为 S0 和 S1）。
+      - 老年代（Old Generation）：用于存放生命周期较长的对象。
+
+2. 方法区（Method Area）（在 JDK 1.8 中已被细化为元空间 Metaspace）：
+   - 用途：存储已被加载的类元数据、常量、静态变量等。在 JDK 1.8 中，用于取代永久代（PermGen）。
+   - 元空间（Metaspace）：与永久代不同，元空间用的是本地内存而不是堆内存，这避免了 Java 中永久代容量不足导致的内存问题。
+
+3. 栈（Stack）：
+   - 用途：每个线程创建时会分配一个栈，它用来存储局部变量表、操作数栈、动态链接、方法出口等。栈内存会自动随着方法的进出而分配和释放。
+   - 特性：栈是线程私有的，每个线程都有自己的栈。
+
+4. 程序计数器（Program Counter Register）：
+   - 用途：是一个较小的内存空间，用于指示当前线程所执行的字节码的行号。
+   - 特性：它是唯一一个在 Java 虚拟机规范中没有规定任何 OutOfMemoryError 情况的区。
+
+5. 本地方法栈（Native Method Stack）：
+   - 用途：与 Java 栈类似，但它主要用于处理本地方法（Native Method）的执行。
+   - 特性：也是线程私有的，负责本地方法的调度和执行。
+
+这些内存区的设计是为了支持 Java 的垃圾收集机制和多线程并发运行，确保 Java 应用程序能够高效和稳定地执行。了解这些内存区的功能和作用，可以帮助开发者优化 Java 应用的性能，并有效管理内存使用。
+
+#### 4.1.2 垃圾回收算法
+
+GC 核心在于通过不同的算法来高效管理内存资源。常用的 GC 算法包括：
+
+1. 标记-清除算法（Mark and Sweep）：
+   - 标记阶段：遍历所有的对象引用，标记活动的对象。
+   - 清除阶段：清理掉未被标记的对象。
+   - 缺点：容易造成内存碎片，因为清除后内存是不连续的。
+
+2. 复制算法（Copying）：
+   - 将活动的对象从一块内存（From space）复制到另一块（To space），然后清理整块 From space。
+   - 优点：内存分配简单，不会产生碎片。
+   - 缺点：需要预留多余的内存空间实行复制。
+
+3. 标记-整理算法（Mark-Compact）：
+   - 标记阶段：和标记-清除相似。
+   - 整理阶段：将所有活动对象移到一端，处理剩余的空间为可用。
+   - 减少了碎片化问题，但相比复制算法更复杂。
+
+4. 分代收集算法：
+   - 根据对象的生命周期不同，将堆分为新生代和老年代。
+   - 新生代使用复制算法，老年代使用标记-清除 或 标记-整理。
+   - 优点：优化了大多数对象短命这一特性带来的效率。垃圾回收算法。
+
+#### 4.1.3 垃圾收集器
+
+Java 提供了多种垃圾收集器，适用于不同应用场景：
+
+1. Serial GC：
+   - 单线程收集器，非常适合单线程环境和小型应用。
+   - 效率高但可能造成长时间的停顿。
+
+2. Parallel GC (Throughput Collector)：
+   - 多线程收集器，用于最大化 CPU 吞吐量。
+   - 适合后台处理任务和高效利用系统资源的场景。
+
+3. CMS GC (Concurrent Mark-Sweep Collector)：
+   - 重点在于缩短停顿时间，适合响应时间敏感的应用。
+   - 较轻量级的 GC，但处理老年代垃圾时效率不如 Parallel。
+
+4. G1 GC (Garbage-First Collector)：
+   - 设计用于大堆，提供可预测的停顿时间。
+   - 将堆划分为不同的区域（Region），针对不同老化级别进行回收。
+
+5. ZGC / Shenandoah GC：
+   - 尝试实现低延迟垃圾回收，几乎不会造成任何长时间的停顿。
+
+#### 4.1.4 code_cache (代码缓存区)、compressed_class_space (压缩类空间)、metaspace (元空间)，他们的用途是什么，有什么要注意的。
+
+在 Java 虚拟机（JVM）中，非堆内存部分包括多个区域，每个区域负责存储不同种类的数据，这里重点介绍 Code Cache（代码缓存区）、Compressed Class Space（压缩类空间）和 Metaspace（元空间）的用途及注意事项。
+
+##### 1. Code Cache（代码缓存区）
+
+用途：
+- JIT 编译代码：Java 虚拟机的即时编译器（Just-In-Time Compiler，JIT）会将频繁使用的字节码编译成本地机器码，以提高运行性能。编译后的本地代码存储在代码缓存区中。
+- 性能提升：通过存储这些编译后的代码，JVM 可以避免对同一代码片段重复进行解释，从而提升执行速度。
+
+注意事项：
+- 内存限制：代码缓存区有固定的最大值（可通过 `-XX:ReservedCodeCacheSize` 参数配置），需要注意在长时间运行的应用程序中这个区不会被耗尽，否则可能导致性能退化。
+- 清理与优化：JVM 在启动时和运行过程中可能会执行代码缓存的清理和优化，这个过程会对性能有一定影响。
+
+##### 2. Compressed Class Space（压缩类空间）
+
+用途：
+- 存储类元数据：在开启类指针压缩的情况下（默认开启），这个空间用于存储类元数据的压缩指针，以节省内存空间。
+- 支持元空间：压缩类空间是元空间的一部分，专门用来优化类加载器的内存消耗。
+
+注意事项：
+- 有固定最大限制：虽然是元空间的一部分，但压缩类空间有自己的最大内存限制（默认为 1GB），可以通过 `-XX:CompressedClassSpaceSize` 参数调整。
+- 适配性告诉：32 位 JVM 不使用压缩类空间功能，64 位 JVM 在默认情况下是开启的，因其节省的内存对大型应用尤其重要。
+
+##### 3. Metaspace（元空间）
+
+用途：
+- 替换永久代：Java 8 开始，用元空间替代了永久代，用于存储类的元数据（类的结构信息、方法、字段等）。
+- 动态调整大小：与永久代不同，元空间作为物理内存的一部分，不断增长（直到达到物理内存上限），默认不设置上限，灵活性更高。
+
+注意事项：
+- 内存泄漏风险：尽管更灵活，但如果不加限制，糟糕的类加载策略可能导致元空间内存泄漏。在开发环境中尤其要防止过度类加载。
+- 调整与监控：可以通过 `-XX:MetaspaceSize` 和 `-XX:MaxMetaspaceSize` 进行调节，适当限制，在实际使用中密切监控。
+- 自动释放：JVM 在内存不足时会尝试回收未使用的类加载的内存，虽然一般无需手动干预，了解这方面的配置有助于优化内存使用。
+
+这些部分的配置和监控是调优 JVM 的重要组成部分，适当的配置可以防止内存泄漏、排查性能瓶颈，并为应用程序的稳定性提供保障。
+
+### 4.2 火焰图
+
+#### 4.2.1 生成脚本
+
+profiler 命令支持生成应用热点的火焰图。本质上是通过不断的采样，然后把收集到的采样结果生成火焰图。火焰图可以清楚的看到程序运行中对象的创建，这样你就可以发现那些大对虾(像)从哪来的？
+
+操作过程，开启采集 `profiler start --event alloc` 等待程序执行，关闭采集 `profiler stop --format html`
+
+我们操作中，开启采集后，可以先执行多次的 curl-one.sh 调用接口，多产生点对象。
+
+```java
+profiler start --event alloc
+
+profiler getSamples
+
+profiler status
+
+profiler stop --format html
+```
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-arthas-07.png" width="650px">
+</div>
+
+- 执行完成后，你会得到一个火焰图的 html 文件。之后就可以打开了。
+
+#### 4.2.2 查看图表
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-arthas-08.png" width="950px">
+</div>
+
+1. 这里的x轴代表采样总量（也就是此刻所有执行的耗时cpu的方法）。这是注意的是x 轴并不代表时间，而是所有的调用方法合并后，按字母顺序排列。
+2. Y轴代表方法的调用栈深度，每一层都是一个方法。顶部是正在执行的方法。当然调用栈越深，火焰就越高。
+3. 鼠标可以点击的选中的每个框就代表了一个栈里的函数，其宽度可以直接理解为CPU时间占比（其实是采样的数量以及与采样总量的占比）。
+4. 那么，也就是说占比比较宽的框就表示：a.该函数运行时间较长（单次时间长）b.被调用次数较多.（调用频率高）进而被采样的次数比较多，占用的CPU时间多。
+4. 这样你就知道了是哪里在创建大对像。比如一些数据库对象，缓存对象等，特别大，又耗时，一下就监控出来了。
+
+> Arthas 提供的功能还有很多，不过咱们要换个更加舒服的方式使用了。如下。
+
+## 五、IDEA Plugin Arthas
+
+### 1. 安装插件
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-arthas-09.png" width="950px">
+</div>
+
+### 2. 使用插件
+
+这些命令你都可以通过 Arthas IDEA Plugin 插件复制出来使用。
+
+- [monitor](https://arthas.aliyun.com/doc/monitor.html) - 方法执行监控
+- [stack](https://arthas.aliyun.com/doc/stack.html) - 输出当前方法被调用的调用路径
+- [trace](https://arthas.aliyun.com/doc/trace.html) - 方法内部调用路径，并输出方法路径上的每个节点上耗时
+- [tt](https://arthas.aliyun.com/doc/tt.html) - 方法执行数据的时空隧道，记录下指定方法每次调用的入参和返回信息，并能对这些不同的时间下调用进行观测
+- [watch](https://arthas.aliyun.com/doc/watch.html) - 方法执行数据观测
+
+更多命令 [https://arthas.aliyun.com/doc/commands.html](https://arthas.aliyun.com/doc/commands.html)
+
+#### 2.1 复制命令
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-arthas-10.png" width="950px">
+</div>
+
+#### 2.2 使用命令
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-arthas-11.png" width="950px">
+</div>
+
+- 如图你就可以监控到方法的运行信息了。
+
+### 3. 其他命令
+
+#### 3.1 查看代码
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-arthas-12.png" width="950px">
+</div>
+
+- 线上运行的代码，不确定是否是最新的，那么这样就可以一步获取到并对比。
+
+#### 3.2 接口参数
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-arthas-13.png" width="950px">
+</div>
+
+- 有时候预发验证服务，因为不会打印所有的服务接口出入参信息，但遇到问题不好排查。
+- 那么使用 Arthas 插件，就可以直接获取到接口的出入参了，方便排查问题。
+
+> 其他更多命令可以通过官网的命令提示和插件一起使用验证了。
diff --git a/docs/md/road-map/buddy.md b/docs/md/road-map/buddy.md
index 341579bd0..0902d75f4 100644
--- a/docs/md/road-map/buddy.md
+++ b/docs/md/road-map/buddy.md
@@ -1,9 +1,9 @@
 ---
-title: Buddy
+title: Docker 镜像构建 - Buddy
 lock: need
 ---
 
-# 一款在线使用的，更轻量、更好用的 CI&CD 工具 buddy.works
+# Docker 镜像构建 - Buddy
 
 作者：小傅哥
 <br/>博客：[https://bugstack.cn](https://bugstack.cn)
diff --git a/docs/md/road-map/cainiao.md b/docs/md/road-map/cainiao.md
new file mode 100644
index 000000000..b723195a8
--- /dev/null
+++ b/docs/md/road-map/cainiao.md
@@ -0,0 +1,96 @@
+---
+title: 菜鸟教程 - 交互式学习
+lock: need
+---
+
+# 菜鸟教程 - 交互式学习
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+一直以来我都有一个想法，做一套更符合新人上手学习的 **🐦菜鸟教程**，以在线互动交互的方式学习入门编程技术。
+
+但原本`互动交互`这东西太耗前端能力了，好在，现在有大量的 Ai Agent 工具，帮我我把想法落地了！—— 我有创新和内容，Ai Agent 出设计和效果！嘎嘎舒服！**美美桑内，一个劲叭叭！**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/chatgpt/chatgpt-extra-230905-01.png?raw=true" width="150px">
+</div>
+
+**这是一个什么样的教程？**
+
+小傅哥做的教程分为3大类，一类是带着做**实战项目**（拼团、大营销、技术组件等）、一类是**编程路书**（系统架构、开发技术、发布部署等），现在再准备开启一项更基础的，辅助刚入门的小白来学习编程技能。
+
+这套教程，专门为小白设计，包括；环境配置（Mac、Windows）、`SpringBoot`、`MyBatis`、`Redis`、`Mysql`、`Maven` 等各项编程技术的入门讲解。后续还会继续迭代新的课程进去。
+
+本套教程不只是干巴巴的讲技术，而是做了学习互动，你可以看到如 SpringBoot 课程下模拟的在线 IntelliJ IDEA 打开教程代码，还可以看到 Dev-Ops 云服务器操作时候的互动过程。这样的学习，即使是小白，也可以很好理解自己在做什么，为什么做。
+
+## 一、能学到啥
+
+此套教程，以入门编程为主，让小卡拉米和小菜鸟，快速补充基础技术知识。全套教程，会以目前最新的环境配置、技术框架、编程技巧等为本，设计基础入门教程。包括；
+
+- 【框架】22节课程，SpringBoot 入门教程，涵盖；环境搭建与项目初始化、核心概念与配置管理、数据库集成与容器管理、高级特性与性能优化、测试与监控管理、企业级应用特性。
+- 【运维】Dev-Ops 云服务器操作，一键安装脚本、云服务器 SSH 模拟（学习命令）、本地环境 + 云服务器，配置、构建、上线，学习环境基础使用。
+- 【环境】基于 Apache Maven 3.8.9 版本编写，涵盖了 Maven 的核心概念、配置和实际应用。
+- 【后端】MySQL 从基础到高级，掌握 MySQL 数据库开发与管理，完整覆盖 MySQL 基础到高级概念，详细对比 MySQL 5.7 与 8.x 版本差异，涵盖性能优化和高级特性。
+- 【后端】Redis 教程，从入门到精通的完整学习指南。学习 Redis 的核心概念和高性能特性，掌握字符串、哈希、列表、集合等数据类型。
+
+> 以上内容，已更新完成 SpringBoot、Dev-Ops 部分，其他内容也更新了目录，后续详细更新内容。
+
+## 二、课程展示
+
+**课程地址**：[https://gaga.plus/](https://gaga.plus/)
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-cainiao-01.png" width="550px">
+</div>
+
+你可以进入到 gaga.plus，之后点击菜鸟教程，开启你的入门编程之旅！
+
+### 1. 课程目录
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-cainiao-02.png" width="750px">
+</div>
+
+### 2. 教程举例 - SpringBoot
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-cainiao-03.png" width="750px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-cainiao-04.png" width="750px">
+</div>
+
+- 进入教程，学习章节内容。还可以在线看，模拟 IntelliJ IDEA 打开的工程代码。非常方便学习。
+
+### 3. 教程举例 - Dev-Ops
+
+#### 3.1 云服务器连接
+
+地址：[https://gaga.plus/app/dev-ops/tutorials/what-is-a-cloud-server.html](https://gaga.plus/app/dev-ops/tutorials/what-is-a-cloud-server.html)
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-cloud-server-02.png" width="850px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-cloud-server-03.png" width="850px">
+</div>
+
+#### 3.2 云服务器使用
+
+地址：[https://gaga.plus/app/dev-ops/tutorials/cloud-server-dev-ops.html](https://gaga.plus/app/dev-ops/tutorials/cloud-server-dev-ops.html)
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-cainiao-05.png" width="750px">
+</div>
+
+- 你可以点击各个按钮【本地环境搭建、Linux服务器配置、SSH远程连接、本地开发连接、代码部署（1、2）】，这样可以动态的看到各个演示环节。
+- 此外，你可以在 SSH 连接后，基于提供的命令教程进行学习。
+
+好啦，如果你还有什么样的基础内容学习诉求，可以在评论区留言，我会优先进行开发上线！
diff --git a/docs/md/road-map/cloud-server.md b/docs/md/road-map/cloud-server.md
new file mode 100644
index 000000000..c12df0158
--- /dev/null
+++ b/docs/md/road-map/cloud-server.md
@@ -0,0 +1,98 @@
+---
+title: CloudServer 云服务器是什么？
+lock: need
+---
+
+# CloudServer 云服务器是什么？
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+可以这么说，云服务器的使用，是每个程序员在编程路上的必备技能。因为我们所有开发的代码，最终都将部署到云服务器运行，为用户提供运算能力。包括；`京东`、`淘宝`、`拼多多`、`滴滴`、`美团`，他们的服务，都是在云服务器上运行。**不过，你会使用云服务器吗？🤔**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-idea-00.png" width="150px">
+</div>
+
+**你是否对云服务器比较陌生？**
+
+其实不少伙伴没怎么使用过云服务器，一方面是因为没有意识到项目最终是在云服务器部署（也没有主动虚席），另一方面是因为云服务器基本是使用 Linux 系统，不像是 Windows/Mac 电脑一样，基本是没有图形化界面的，所以对于云服务器的使用就有了一道**障碍**。
+
+不过，鉴于云服务器的技能这么重要。所以，小傅哥准备做一套基础的**免费教程**，来教会小白伙伴上手云服务器使用。这套教程，通过在线网站提供图形化界面 + 模拟体验的方式，教会小白伙伴上手云服务器。
+
+> 📢 本套课程，是小傅哥多年的沉淀的经验，转化最易接受和上手学习的方式，让小白伙伴可以轻松的掌握全套关于云服务器的知识和实践运用。
+
+## 一、课程地址
+
+**地址**：[https://gaga.plus/](https://gaga.plus/)
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-cloud-server-01.png" width="650px">
+</div>
+
+> 如图，教程地址，会陆续更新在线课程。可以收藏地址，关注后续课程更新（更新内容会在公众号「bugstack虫洞栈」发布通知）。
+
+## 二、我能学到什么？
+
+通过这套教程，你可以完成的理解云服务器的用途，掌握云服务器的操作技能。从零基础到熟练运用云服务器 + 本地环境完成项目的开发、测试和部署的全流程。教程采用在线演示体验，互动式学习方式，以及一键安装的脚本，让复杂的云服务器操作，变得简单和易于理解。
+
+- 🏗️理解云服务器的概念、选择、配置、管理，以及通过 shell 脚本，完成自动化的初始化环境操作。
+- ☕ 在云服务器部署 Git、Java、Maven 环境，可以通过云服务器完成项目的构建。
+- 🐳 Docker 容器化技术，完成项目的构建镜像、操作部署等。
+- 🔐 远程连接与安全，学习 SSH 链接云服务器和 Linux 命令操作云服务器。
+- 🌿 版本控制与协作，可以在云服务器通过 Git 检出项目进行维护使用。
+- 🚀 部署与运维，以代码开发、Git Push、Git Pull、mvn clean install、docker，一些列命令，完成项目的打包和上线。
+
+这套教程的特色在于完全可视化学习，注重理论与实践，不仅让您了解云服务器的基本概念，更重要的是通过交互式演示和自动化脚本，让您能够快速上手并在实际项目中应用这些技术。无论您是初学者还是有一定经验的开发者，都能从中获得有价值的知识和技能提升。
+
+## 三、小傅哥为你准备了什么？
+
+小傅哥，今天为你准备了第一套在线教程**《第1节：云服务器，是什么？》**
+
+在这套教程，你可以直接直观的理解到云服务器相对于本地电脑，其实就等同于你的另外一个电脑而已。并且，小傅哥这里做了模拟的链接，**你可以在线体验通过 SSH 连接云服务器，并执行 Linux 脚本运行**。关于这些写脚本，已经写好了相关的执行动作和说明，很适合小白伙伴学习使用。
+
+### 1. 云服务器链接
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-cloud-server-02.png" width="850px">
+</div>
+
+- 首先，云服务器，就是你在互联网上的另一台电脑，随时随地访问使用，任意安装和卸载软件。尤其对软件学习来说，可以避免windows电脑的兼容问题。
+- 之后，你可以点击建立 SSH 链接，这个时候会弹出 SSH 链接操作。让你真的的体验到如何通过 SSH 链接云服务器。
+
+### 2. Linux 命令模拟
+
+#### 2.1 建立链接（SSH）
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-cloud-server-05.png" width="450px">
+</div>
+
+- 如图，IP、用户名、密码、端口号，就是你在获得一个云服务器后，可以拿到的连接信息。在你真实使用云服务器时，也是需要获得这些信息进行连接操作。
+- 之后，通过点击建立SSH连接，模拟登录云服务器。**没有云服务器的伙伴，也能随时体验云服务器操作**
+
+#### 2.2 体验登录
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-cloud-server-03.png" width="850px">
+</div>
+
+- 我知道很多小伙伴，不太熟悉 Linux 命令。所以，小傅哥这里做了模拟操作，你可以点击命令，之后就可以看到执行结果，以及告诉你命令的用途。此外还有 Git、Maven、Docker 常见命令的学习。
+- 通过这套东西的学习，对于云服务器的使用，基本就可以有一个操作的使用认知了。后续在看到要执行命令，也都能理解，是怎么的一个操作过程。
+
+#### 2.3 常用命令
+
+**如下，这些命令都已经加入到体验区 👨🏻‍💻**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-cloud-server-04.png" width="400px">
+</div>
+
+- 你可以点击各个命令，学习对应的场景用途。
+- 如果，小伙伴还有其他命令想学习，也可以留言。我会进行补充。
+
+> 后续，还有更炸裂的在线模拟学习课，让你身临其境的学习云服务器的操作。我们下一节再见👋🏻
diff --git a/docs/md/road-map/ddd-archetype-maven.md b/docs/md/road-map/ddd-archetype-maven.md
index 72bad9788..0827e06c9 100644
--- a/docs/md/road-map/ddd-archetype-maven.md
+++ b/docs/md/road-map/ddd-archetype-maven.md
@@ -1,5 +1,5 @@
 ---
-title: DDD 脚手架【Maven 仓库版】
+title: DDD 脚手架【Maven 在线版】
 lock: need
 ---
 
@@ -20,7 +20,8 @@ lock: need
     <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-archetype-01.png" width="850px">
 </div>
 
-【备用地址 http://maven.gaga.plus/ 】- 如果配置 https://gaga.plus 不可用，可以使用备用地址。
+- 配置地址 https://gaga.plus
+- ddd-scaffold-lite 提供了默认版本和 v2 版本。v2 做了少量调整。将 repository、port 统一归属到 adapter 下管理。
 
 ---
 
@@ -177,6 +178,20 @@ lock: need
                         </goals>
                     </execution>
                 </executions>
+            </plugin>
+             <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-gpg-plugin</artifactId>
+                <version>1.5</version>
+                <executions>
+                    <execution>
+                        <id>sign-artifacts</id>
+                        <phase>verify</phase>
+                        <goals>
+                            <goal>sign</goal>
+                        </goals>
+                    </execution>
+                </executions>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
@@ -216,20 +231,6 @@ lock: need
                     </execution>
                 </executions>
             </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-gpg-plugin</artifactId>
-                <version>1.5</version>
-                <executions>
-                    <execution>
-                        <id>sign-artifacts</id>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>sign</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-release-plugin</artifactId>
@@ -286,7 +287,7 @@ lock: need
 - 注意 groupId、artifactId 名字，如果你有发布诉求，需要和你自己的一致。
 - maven-javadoc-plugin：生成 doc 文档。这里要注意，因为我们脚手架不是代码文件，没有doc的，所以要在工程中加一个任意类名文件。工程中小傅哥加了个 Api 类。
 - maven-source-plugin：生成 source 文件。
-- maven-gpg-plugin：是签名的加密文件，需要本地安装过 gpg 包。
+- maven-gpg-plugin：是签名的加密文件，需要本地安装过 gpg 包。注意；`checksum-maven-plugin` 需要在 `maven-gpg-plugin` 执行，这样就不用做下面的手动 md5 逻辑了。
 - checksum-maven-plugin：生成 md5、sha1 文件，但这里不会对 pom 生成此文件，还需要单独命令处理。
 
 ```shell
diff --git a/docs/md/road-map/ddd-guide-01.md b/docs/md/road-map/ddd-guide-01.md
index 5b9d1d247..1b8868b28 100755
--- a/docs/md/road-map/ddd-guide-01.md
+++ b/docs/md/road-map/ddd-guide-01.md
@@ -28,11 +28,11 @@ DDD 是什么，这应该是每个想使用 DDD 开发项目的研发伙伴，
 
 ## 2. DDD 的概念
 
-什么是充血模型，领域内都包括什么，实体、聚合、值对象，有什么区别？这样一些"为什么"的概念，也是战术设计过程中非常重要的知识项。搞清楚它们才能做 DDD 设计。
+什么是充血模型？领域内都包括什么？实体、聚合、值对象，有什么区别？这样一些"为什么"的概念，也是战术设计过程中非常重要的知识项。搞清楚它们才能做 DDD 设计。
 
 ### 2.1 充血模型
 
-**充血模型**，指将对象的属性信息与行为逻辑聚合到一个类中，常用的手段如在对象内提供属于当前对象的`信息校验`、`拼装缓存Key`、`不含服务接口调用的逻辑处理`等。
+**充血模型**，指将对象的属性信息与行为逻辑聚合到一个类中，常用的手段如：在对象内提供属于当前对象的`信息校验`、`拼装缓存Key`、`不含服务接口调用的逻辑处理`等。
 
 <div align="center">
     <img src="https://bugstack.cn/images/roadmap/tutorial/ddd-easy-guide-01-01.png" width="750px">
@@ -46,15 +46,15 @@ DDD 是什么，这应该是每个想使用 DDD 开发项目的研发伙伴，
 
 **领域模型**，指特定业务领域内，业务规则、策略以及业务流程的抽象和封装。在设计手段上，通过风暴模型拆分领域模块，形成界限上下文。最大的区别在于把原有的`众多 Service + 数据模型`的方式，拆分为独立的有边界的领域模块。每个领域内创建自身所属的；领域对象（实体、聚合、值对象）、仓储服务(DAO 操作)、工厂、端口适配器Port（调用外部接口的手段）等。
 
-那么，现在这里有几个概念；领域服务、领域对象、仓储定义、事件消息、端口适配器。我们先来看他们是怎么从贫血模型演变过来的，在细分讲解每个概念。
+那么，现在这里有几个概念：领域服务、领域对象、仓储定义、事件消息、端口适配器。我们先来看他们是怎么从贫血模型演变过来的，在细分讲解每个概念。
 
 <div align="center">
     <img src="https://bugstack.cn/images/roadmap/tutorial/ddd-easy-guide-01-02.png" width="750px">
 </div>
 
-- 在原本的 Service + 贫血的数据模型开发指导下，Service 串联调用每一个功能模块。这些基础设施（对象、方法、接口）是被相互掉调用的。这也是因为贫血模型并没有面向对象的设计，所有的需求开发只有详细设计。
-- 换到充血模型下，现在我们以一个领域功能为聚合，拆分一个领域内所需的 Service 为领域服务，VO、Req、Res 重新设计为领域对象，DAO、Redis 等持久化操作为仓储等。举例；一套账户服务中的，授信认证、开户、提额降额等，每一个都是一个独立的领域，在每个独立的领域内，创建自身领域所需的各项信息。
-- 领域模型还有一个特点，它自身只关注业务功能实现，不与外部任何接口和服务直连。如；不会直接调用 DAO 操作库，也不会调用缓存操作 Redis，更不会直接引入 RPC 连接其他微服务。而是通过仓库和端口适配器，定义调用外部数据的含有出入参对象的接口标准，让基础设施层做具体的调用实现。通过这样的方式让领域只关心业务实现，同时做好防腐。
+- 在原本的 Service + 贫血的数据模型开发指导下，Service 串联调用每一个功能模块。这些基础设施（对象、方法、接口）是被相互调用的。这也是因为贫血模型并没有面向对象的设计，所有的需求开发只有详细设计。
+- 换到充血模型下，现在我们以一个领域功能为聚合，拆分一个领域内所需的 Service 为领域服务，VO、Req、Res 重新设计为领域对象，DAO、Redis 等持久化操作为仓储等。举例：一套账户服务中的，授信认证、开户、提额降额等，每一个都是一个独立的领域，在每个独立的领域内，创建自身领域所需的各项信息。
+- 领域模型还有一个特点，它自身只关注业务功能实现，不与外部任何接口和服务直连。如；不会直接调用 DAO 操作库，也不会调用缓存操作 Redis，更不会直接引入 RPC 连接其他微服务。而是通过仓库和端口适配器，定义调用外部数据的含有出入参对象的接口标准，让基础设施层做具体的调用实现——通过这样的方式让领域只关心业务实现，同时做好防腐。
 
 ### 2.3 实体、聚合、值对象
 
@@ -62,15 +62,19 @@ DDD 是什么，这应该是每个想使用 DDD 开发项目的研发伙伴，
 
 但在 DDD 的领域模型设计下，领域对象的设计是非常面向对象的。而且在整个风暴事件的四色建模过程也是在以领域对象为驱动进行的。
 
-实体、聚合、值对象，三者位于每个领域下的领域对象内，服务于领域内的领域服务。三个对象定义具体如下；
+实体、聚合、值对象，三者位于每个领域下的领域对象内，服务于领域内的领域服务。三个对象定义具体如下：
 
 <div align="center">
     <img src="https://bugstack.cn/images/roadmap/tutorial/ddd-easy-guide-01-03.png" width="450px">
 </div>
 
+1. 胳膊、腿、身体，都是实体对象，和这个人生命有关。
+2. 帽子、手套、裤衩，都是值对象，是这个人穿戴的，不具有生命属性。
+3. 聚合，就是要写库一个事务，一次形成，可以聚合。把胳膊、腿、身体，放一块，一起让数据库执行事务。
+
 > **实体**
 
-是依托于持久化层数据以领域服务功能目标为指导设计的领域对象。持久化PO对象是原子类对象，不具有业务语义，而实体对象是具有业务语义且有唯一标识的对象，跟随于领域服务方法的全生命周期对象。如；用户PO持久化对象，会涵盖，用户的开户实体、授信实体、额度实体对象。也包括如商品下单时候的购物车实体对象。这个对象也通常是领域服务方法的入参对象。
+是依托于持久化层数据以领域服务功能目标为指导设计的领域对象。持久化PO对象是原子类对象，不具有业务语义，而实体对象是具有业务语义且有唯一标识的对象，跟随于领域服务方法的全生命周期对象。如：用户PO持久化对象，会涵盖，用户的开户实体、授信实体、额度实体对象。也包括如商品下单时候的购物车实体对象。这个对象也通常是领域服务方法的入参对象。
 
 - 概念：实体 = 唯一标识 + 状态属性 + 行为动作（功能），是DDD中的一个基本构建块，它代表了具有唯一标识的领域对象。实体不仅仅包含数据（状态属性），还包含了相关的行为（功能），并且它的标识在整个生命周期中保持不变。
 - 特征：
@@ -91,7 +95,7 @@ DDD 是什么，这应该是每个想使用 DDD 开发项目的研发伙伴，
 
 > **值对象**
 
-这个对象在领域服务方法的生命周期过程内是不可变对象，也没有唯一标识。它通常是配合实体对象使用。如为实体对象提供对象属性值的描述，比如；一个公司雇员的级别值对象，一个下单的商品收货的四级地址信息对象。所以在开发值对象的时候，通常不会提供 setter 方法，而是提供构造函数或者 Builder 方法来实例化对象。这个对象通常不会独立作为方法的入参对象，但做可以独立作为出参对象使用。
+这个对象在领域服务方法的生命周期过程内是不可变对象，也没有唯一标识。它通常是配合实体对象使用。如为实体对象提供对象属性值的描述，比如：一个公司雇员的级别值对象，一个下单的商品收货的四级地址信息对象。所以在开发值对象的时候，通常不会提供 setter 方法，而是提供构造函数或者 Builder 方法来实例化对象。这个对象通常不会独立作为方法的入参对象，但做可以独立作为出参对象使用。
 
 - 概念：值对象是由一组属性组成的，它们共同描述了一个领域概念。与实体（Entity）不同，值对象不需要有一个唯一的标识符来区分它们。值对象通常是不可变的，这意味着一旦创建，它们的状态就不应该改变。
 - 特征：
@@ -115,7 +119,7 @@ DDD 是什么，这应该是每个想使用 DDD 开发项目的研发伙伴，
 
 > **聚合**
 
-当你对数据库的操作需要使用到多个实体时，可以创建聚合对象。一个聚合对象，代表着一个数据库事务，具有事务一致性。聚合中的实体可以由聚合提供创建操作，实体也被称为聚合根对象。一个订单的聚合，会涵盖；下单用户实体对象、订单实体、订单明细实体和订单收货四级地址值对象。而那个作为入参的购物车实体对象，已经被转换为实体对象了。—— 聚合内事务一致性，聚合外最终一致性。
+当你对数据库的操作需要使用到多个实体时，可以创建聚合对象。一个聚合对象，代表着一个数据库事务，具有事务一致性。聚合中的实体可以由聚合提供创建操作，实体也被称为聚合根对象。一个订单的聚合，会涵盖：下单用户实体对象、订单实体、订单明细实体和订单收货四级地址值对象。而那个作为入参的购物车实体对象，已经被转换为实体对象了。—— 聚合内事务一致性，聚合外最终一致性。
 
 - 概念：聚合是领域模型中的一个关键概念，它是一组具有内聚性的相关对象的集合，这些对象一起工作以执行某些业务规则或操作。聚合定义了一组对象的边界，这些对象可以被视为一个单一的单元进行处理。
 - 特征：
@@ -179,4 +183,4 @@ DDD 是什么，这应该是每个想使用 DDD 开发项目的研发伙伴，
 
 在所有的模型都定义完成后，领域业务被串联了。那么接下来则是使用，而使用的方式可以包括；接口（http/rpc）、消息监听、定时任务等方式，这些方式统一被定义为触发动作。
 
-由触发发起对编排功能的调用处理。如；定时任务做信贷的计息、开户成功消息通知返利优惠券、提供接口让外部调用授信逻辑等。这些都是触发动作。
\ No newline at end of file
+由触发发起对编排功能的调用处理，如：定时任务做信贷的计息、开户成功消息通知返利优惠券、提供接口让外部调用授信逻辑等——这些都是触发动作。
diff --git a/docs/md/road-map/ddd-guide-02.md b/docs/md/road-map/ddd-guide-02.md
index cef1e0ba5..c74c5e72a 100755
--- a/docs/md/road-map/ddd-guide-02.md
+++ b/docs/md/road-map/ddd-guide-02.md
@@ -20,30 +20,30 @@ lock: need
 
 ## 1. 建模目的
 
-工程的建模的目的是为了我们做工程开发时提供指导方案，就像一栋大楼的设计蓝图一样，也像一个超市中会有不同品类的货架，需要提前规划好。所以你需要在工程开发时所需的各类核心内容，都会在建模中体现，如；分几个包、有哪些核心对象、要串联什么流程、有哪些核心业务要实现、过程中与外部服务的交互。
+工程的建模的目的是为了我们做工程开发时提供指导方案，就像一栋大楼的设计蓝图一样，也像一个超市中会有不同品类的货架，需要提前规划好。所以你需要在工程开发时所需的各类核心内容，都会在建模中体现，如：分几个包、有哪些核心对象、要串联什么流程、有哪些核心业务要实现、过程中与外部服务的交互。
 
-那么为了达成一个讨论的共识，而不是每个人都有一套的标准和词汇。所以会使用 DDD 提供专门的建模方法和名词进行统一的设计，此外因为 DDD 的统一建模语言，不涉及技术编码，也具有通用性，所以可以在建模过程让产品、研发、测试、架构师等人员一起参与讨论。如；领域、领域模型（实体、聚合、值对象）、领域服务、端口适配器、仓储、界限上下文、领域编排等名词。*这在上一节已经做了相关的解释。*
+为了达成讨论的共识，避免每个人都有不同的标准和词汇，我们通常会使用 DDD (领域驱动设计)提供的专门建模方法和统一的名词进行设计。DDD 的统一建模语言不涉及具体的技术编码，具有较强的通用性，因此可以让产品、研发、测试、架构师等人员一起参与讨论建模过程，促进跨职能的沟通和协作。如：领域、领域模型（实体、聚合、值对象）、领域服务、端口适配器、仓储、界限上下文、领域编排等名词。*这在上一节已经做了相关的解释。*
 
-## 2. 怎么建模
+## 2. 如何建模
 
 DDD 的建模过程，是以一个用户为起点，通过行为命令，发起行为动作，串联整个业务。而这个用户的起点最初来自于用例图的分析。用例图是用户与系统交互的最简表示形式，展现了用户和与他相关的用例之间的关系。通过用例图，我们可以分析出所有的行为动作。
 
-在 DDD 中用于完成用户的行为命令和动作分析的过程，是一个四色建模的过程，也称作风暴模型。在使用 DDD 的标准对系统建模前，一堆人要先了解 DDD 的操作手段，这样才能让产品、研发、测试、运营等了解业务的伙伴，都能在同一个语言下完成系统建模。
+在 DDD 中用于完成用户的行为命令和动作分析的过程，是一个四色建模的过程，也称作风暴模型。在使用 DDD 的标准对系统建模前，一定要先了解 DDD 的操作手段，这样才能让产品、研发、测试、运营等了解业务的伙伴，都能在同一个语言下完成系统建模。
 
 <div align="center">
     <img src="https://bugstack.cn/images/article/project/big-market/roadmap-ddd-stc-08.png" width="750px">
 </div>
 
-此图是整个四色建模的指导图，通过寻找领域事件，发起事件命令，完成领域事件的过程，完成 DDD 工程建模。
+上图是整个四色建模的指导图，通过寻找领域事件，发起事件命令，完成领域事件的过程，完成 DDD 工程建模。
 
-- 蓝色 - 决策命令，是用户发起的行为动作，如；开始签到、开始抽奖、查看额度等。
-- 黄色 - 领域事件，过去时态描述。如；签到完成、抽奖完成、奖品发放完成。它所阐述的都是这个领域要完成的终态。
+- 蓝色 - 决策命令，是用户发起的行为动作，如：开始签到、开始抽奖、查看额度等。
+- 黄色 - 领域事件，过去时态描述。如：签到完成、抽奖完成、奖品发放完成。它所阐述的都是这个领域要完成的终态。
 - 粉色 - 外部系统，如你的系统需要调用外部的接口完成流程。
-- 红色 - 业务流程，用于串联决策命令到领域事件，所实现的业务流程。一些简单的场景则直接有决策命令到领域事件就可以了。
+- 红色 - 业务流程，用于串联决策命令到领域事件，所实现的业务流程。一些简单的场景则直接由决策命令到领域事件就可以了。
 - 绿色 - 只读模型，做一些读取数据的动作，没有写库的操作。
 - 棕色 - 领域对象，每个决策命令的发起，都是含有一个对应的领域对象。
 
-**👩🏻‍🏫敲黑板** 综上，左下角的示意图。是一个用户，通过一个策略命令，使用领域对象，通过业务流程，完成2个领域事件，调用1次外部接口个过程。我们在整个 DDD 建模过程中，就是在寻找这些节点。
+**👩🏻‍🏫敲黑板** 综上，上图左下部分的示意图表达的是：“一个用户，通过一个策略命令，使用领域对象，通过业务流程，完成2个领域事件，调用1次外部接口”的过程。我们在整个 DDD 建模过程中，就是在寻找这些节点。
 
 ## 3. 超市举例
 
@@ -61,7 +61,7 @@ DDD 的建模过程，是以一个用户为起点，通过行为命令，发起
 
 ## 4. 业务案例
 
-接下来，我们在以一个真实的业务场景来分析系统的四色建模过程。
+接下来，我们在以一个真实的业务场景来分析系统的四色建模过程：
 
 ### 1. 产品诉求
 
@@ -109,7 +109,7 @@ DDD 的建模过程，是以一个用户为起点，通过行为命令，发起
 
 ### 4. 识别领域角色和对象
 
-在确定了领域事件以后，接下来要做的就是通过决策命令串联领域事件，并填充上所需要的领域对象。这块的操作，新手可以分开处理，如先给领域事件添加决策命令、执行用户和领域对象，最后在串联流程。就像 `事件风暴定义` 中的示意一样。
+在确定了领域事件以后，接下来要做的就是通过决策命令串联领域事件，并填充上所需要的领域对象。这块的操作，新手可以分开处理，如先给领域事件添加决策命令、执行用户和领域对象，最后再串联流程。就像 `事件风暴定义` 中的示意一样。
 
 <div align="center">
     <img src="https://bugstack.cn/images/article/project/big-market/roadmap-ddd-stc-10.png" width="950px">
diff --git a/docs/md/road-map/ddd-guide-03.md b/docs/md/road-map/ddd-guide-03.md
new file mode 100755
index 000000000..5d44314f8
--- /dev/null
+++ b/docs/md/road-map/ddd-guide-03.md
@@ -0,0 +1,487 @@
+---
+title: DDD 工程模型
+lock: need
+---
+
+# DDD 工程模型 - 在分布式微服务架构下，MVC比DDD，要乱的多！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+<iframe id="B-Video" src="//player.bilibili.com/player.html?isOutside=true&aid=1106396955&bvid=BV1Hw4m1k76m&cid=1626093529&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="100%" height="480"> </iframe>
+
+大家好，我是技术UP主小傅哥。
+
+凡是做到架构师岗位的，都是具有一定技术思维敏感性的，不会主观评价好和坏，但能推演出业务与技术的迭代发展被动熵增与减熵增的意识。就像拿MVC与DDD对比，也能确切的感受到，在架构方面对比于单体应用的分布式架构，是要额外引入非常多的技术栈使用。但这些模块在 MVC 下并没有设计好如何"安置"他们，就像一个老城区里突然引入了很多外来人口，不知道怎么安置一样。**不过 DDD 就像雄安新区做了整体规划！**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/ddd-easy-guide-03-00.gif" width="150px">
+</div>
+
+**什么是系统的工程结构，工程框架的作用是什么？**
+
+其实，工程结构的存在作用目的，是为了承载工程系统开发的模型划分，定义工程服务开发过程中实施标准。说白了，就是你在工程实现时，在哪个层访问数据库、哪个层使用缓存、哪个层调用外部接口、哪个层做功能实现，这就是工程框架结构定义的目的。
+
+但在 `Service + 贫血模型` 的三层结构开发指导下，是没有细分出面向对象工程结构设计的趋于划分的。所以在通常意义的 MVC 下，开发过程所有需要的内容，都会堆砌到 Service 实现类中。这也是为什么 DDD 领域驱动设计的落地工程结构，会出现；洋葱架构、整洁架构、菱形架构、六边形架构等这些架构模型。因为我们需要更细致的划分，来承载 DDD 设计概念中映射的领域、仓储、适配、编排、触发，并重视面向对象过程。—— 其实你一上学，学Java就开始学面向对象了，只不过一点点在忘记它。
+
+>本节是DDD概率系列的第3节，讲解 DDD 架构设计，在 [bugstack.cn](https://bugstack.cn) 路书中有完整系列内容，可以查阅。
+
+## 一、为啥需要架构
+
+说到开发代码为啥需要架构，就想买了个房子，为啥要隔出厨房、客厅、卧室、卫生间一样，核心目的就是让不同的职责分配到不同的区域内。虽然在代码中是没有马桶要放卫生间、沙发要放客厅、床要放卧室。但他有一些列的科目信息要引入到工程。
+
+**在工程开发时会涉及到的核心科目；**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/ddd-easy-guide-03-01.png" width="550px">
+</div>
+
+如；统一的异常、数据库的连接、日志的打印、外部服务的调用、消息的监听、任务的轮训以及服务的实现等一些列的东西要处理，分配到不同的工程包下承载。在 DDD 之前，我们一直用 MVC 的分层结构承接这些内容；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/ddd-easy-guide-03-02.png" width="550px">
+</div>
+
+通用的、配置的、组件的、持久化的、内部的、外部的，在以往的单体应用时代开发下，其实是没有这么多东西的，那时候的工程结构都偏向于 Service + 贫血模型实现。
+
+但随着微服务的演进，越来越多的内容被填充到工程中，这个时候你细心的查看架构，就会发现原本的 MVC 结构其实已经变的非常混乱了。一个 Service 中为了实现自己的功能，要引入一堆的东西，这些原子的功能与 Service 自身的服务耦合在一块。也导致了工程的维护成本越来越大。 
+
+>这样的三层工程结构分配方式，对于要承载庞大的分布式技术栈体系显然是有点小马拉大车，三缸机带不动SUV一样。
+
+## 二、工程结构设计
+
+2004年，Eric Evans 在发表了一部名为《Domain Driven Design》的著作。2005年 Alistair Cockburn 提出的“六边形关系图”理论，2008年 Jeffrey Palermo 提出了洋葱架构。虽然这些架构并不是专门为 DDD 而出，但巧的是这些架构都在 DDD 一书发表之后陆续推出新的架构模型。同时这些架构的分层设计方式也都与 DDD 非常契合，在这些架构下也可以很好的落地 DDD 设计方法。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/ddd-easy-guide-03-03.png" width="750px">
+</div>
+无论是六边形架构，还是洋葱架构，或是[张毅老师](http://zhangyi.xyz/)提到的南向网关/北向网关的菱形架构，他们的目标都是以领域服务为核心，隔离内部实现与外部资源的耦合。
+
+在 DDD 分层架构下，以支撑 domain 核心领域实现拆分出基础设施（infrastructure），来承接对外部资源的调用。触发器（trigger）向外部提供服务。之后 app 为应用启动、api 为接口定义、types 为通用信息、case 为编排。
+
+在这样一套结构下，用于开发工程的各项科目也可以被优雅的分配到各个分层结构了。相对于 Service + 数据模型的贫血模型结构，现在就主要以 domain 为核心开发业务功能，不会在 domain 工程模块下，引入其他各类外部组件了，这样就可以更加关心业务功能开发。
+
+之后是这样的思想映射到工程中，常见的分层结构会有两套，一套是整洁分层，另外一套是六边形分层。
+
+### 1. 整洁架构 - 工程结构
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/ddd-easy-guide-03-04.png" width="750px">
+</div>
+
+- 整洁架构的分包形式，会将所有的外部依赖使用和工程内要对外的，统一定义到适配器层。这里可以理解为对适配和对内适配。
+- 阿里的 cola 偏整洁架构 [阿里架构 cola 的相关内容](https://www.aliyun.com/sswb/610119.html)
+
+### 2. 六边形架构 - 工程结构
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/ddd-easy-guide-03-05.png" width="750px">
+</div>
+
+六边形架构，会把本身提供到外部的放到trigger，让接口调用、消息监听、任务调度，都可以统一一个入口处理。而对于需要调用外部同类的能力统一放到 infrastructure 基础设施层，包括；数据库、缓存、配置、调用其他方的接口。
+
+## 三、领域模型设计
+
+虽然大家用的都是 DDD，也都有对应的模块和分包，但在细节之处还是会有一些差异。就像家里的家庭成员，衣服、裤子、鞋子，是所有人的衣服都放一起，还是每个人有独立的衣柜只放自己的。这块是有差异的。另外这东西没有绝对的好和坏，就像厨房里的碗筷是是放一起的，卫生间的马桶也是共用的，这说明分包也是需要按照最符合自己所需来设定。
+
+### 1. 分包方式
+
+如下，是两种分包方式；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/ddd-easy-guide-03-06.png" width="750px">
+</div>
+
+- 方式1；DDD 领域科目类型分包，类型之下写每个业务逻辑。
+- 方式2；业务领域分包，每个业务领域之下有自己所需的 DDD 领域科目。
+
+比如，你现在一个工程下有用户、积分、抽奖、支付，（紧凑的聚合类微服务有时候更易于维护），那么这些包一种是分为独立的业务包方式2这种，另外一种就是大家都在一个坛子里吃饭，要啥去各个地方找。所以你更倾向于那种呢？
+
+### 2. 领域模型
+
+DDD 领域驱动设计的中心，主要在于领域模型的设计，以领域所需驱动功能实现和数据建模。一个领域服务下面会有多个领域模型，每个领域模型都是一个充血结构。**一个领域模型 = 一个充血结构**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ddd-01.png" width="750px">
+</div>
+
+- model 模型对象；
+  - aggreate：聚合对象，实体对象、值对象的协同组织，就是聚合对象。
+  - entity：实体对象，大多数情况下，实体对象(Entity)与数据库持久化对象(PO)是1v1的关系，但也有为了封装一些属性信息，会出现1vn的关系。
+  - valobj：值对象，通过对象属性值来识别的对象 By 《实现领域驱动设计》
+- repository 仓储服务；从数据库等数据源中获取数据，传递的对象可以是聚合对象、实体对象，返回的结果可以是；实体对象、值对象。因为仓储服务是由基础层(infrastructure) 引用领域层(domain)，是一种依赖倒置的结构，但它可以天然的隔离PO数据库持久化对象被引用。
+- service 服务设计；这里要注意，不要以为定义了聚合对象，就把超越1个对象以外的逻辑，都封装到聚合中，这会让你的代码后期越来越难维护。聚合更应该注重的是和本对象相关的单一简单封装场景，而把一些重核心业务方到 service 里实现。**此外；如果你的设计模式应用不佳，那么无论是领域驱动设计、测试驱动设计还是换了三层和四层架构，你的工程质量依然会非常差。**
+- 对象解释
+  - DTO 数据传输对象 (data transfer object)，DAO与业务对象或数据访问对象的区别是：DTO的数据的变异子与访问子（mutator和accessor）、语法分析（parser）、序列化（serializer）时不会有任何存储、获取、序列化和反序列化的异常。即DTO是简单对象，不含任何业务逻辑，但可包含序列化和反序列化以用于传输数据。
+
+## 四、分层调用链路
+
+接下来我们把 DDD 的分层架构平铺展开，看看从一个接口的实现到各个模块分层中的调用链路关系是什么样的。这样在做自己的代码开发中也可以参考到应该把什么的功能分配到哪个模块中处理。
+
+![](https://bugstack.cn/images/roadmap/tutorial/road-map-ddd-05.png)
+
+从APP层、触发器层、应用层，这三块主要对领域层的上下文逻辑封装、触发式(MQ、HTTP、JOB)使用，并最终在应用层中打包发布上线。这一部分的都是使用的处理，所以也不会有太复杂的操作。
+
+当进入领域层开始，也是智力集中体现的开始了。所有你对工程的抽象能力，都在这一块区域体现。
+
+## 五、工程架构案例
+
+### 1. 环境
+
+- JDK 1.8
+- Maven 3.8.6
+- SpringBoot 2.7.2
+- MySQL 5.7 - 如果你使用 8.0 记得更改 pom.xml 中的 mysql 引用
+- Dubbo - [https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/multicast/](https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/registry/multicast/) 文档&广播模式地址说明
+
+### 2. 架构
+
+- **源码**：[`https://gitcode.net/KnowledgePlanet/road-map/xfg-frame-ddd`](https://gitcode.net/KnowledgePlanet/road-map/xfg-frame-ddd)
+- **树形**：`安装 brew install tree` `IntelliJ IDEA Terminal 使用 tree`
+
+```java
+.
+├── README.md
+├── docs
+│   ├── dev-ops
+│   │   ├── environment
+│   │   │   └── environment-docker-compose.yml
+│   │   ├── siege.sh
+│   │   └── skywalking
+│   │       └── skywalking-docker-compose.yml
+│   ├── doc.md
+│   ├── sql
+│   │   └── road-map.sql
+│   └── xfg-frame-ddd.drawio
+├── pom.xml
+├── xfg-frame-api
+│   ├── pom.xml
+│   ├── src
+│   │   └── main
+│   │       └── java
+│   │           └── cn
+│   │               └── bugstack
+│   │                   └── xfg
+│   │                       └── frame
+│   │                           └── api
+│   │                               ├── IAccountService.java
+│   │                               ├── IRuleService.java
+│   │                               ├── model
+│   │                               │   ├── request
+│   │                               │   │   └── DecisionMatterRequest.java
+│   │                               │   └── response
+│   │                               │       └── DecisionMatterResponse.java
+│   │                               └── package-info.java
+│   └── xfg-frame-api.iml
+├── xfg-frame-app
+│   ├── Dockerfile
+│   ├── build.sh
+│   ├── pom.xml
+│   ├── src
+│   │   ├── main
+│   │   │   ├── bin
+│   │   │   │   ├── start.sh
+│   │   │   │   └── stop.sh
+│   │   │   ├── java
+│   │   │   │   └── cn
+│   │   │   │       └── bugstack
+│   │   │   │           └── xfg
+│   │   │   │               └── frame
+│   │   │   │                   ├── Application.java
+│   │   │   │                   ├── aop
+│   │   │   │                   │   ├── RateLimiterAop.java
+│   │   │   │                   │   └── package-info.java
+│   │   │   │                   └── config
+│   │   │   │                       ├── RateLimiterAopConfig.java
+│   │   │   │                       ├── RateLimiterAopConfigProperties.java
+│   │   │   │                       ├── ThreadPoolConfig.java
+│   │   │   │                       ├── ThreadPoolConfigProperties.java
+│   │   │   │                       └── package-info.java
+│   │   │   └── resources
+│   │   │       ├── application-dev.yml
+│   │   │       ├── application-prod.yml
+│   │   │       ├── application-test.yml
+│   │   │       ├── application.yml
+│   │   │       ├── logback-spring.xml
+│   │   │       └── mybatis
+│   │   │           ├── config
+│   │   │           │   └── mybatis-config.xml
+│   │   │           └── mapper
+│   │   │               ├── RuleTreeNodeLine_Mapper.xml
+│   │   │               ├── RuleTreeNode_Mapper.xml
+│   │   │               └── RuleTree_Mapper.xml
+│   │   └── test
+│   │       └── java
+│   │           └── cn
+│   │               └── bugstack
+│   │                   └── xfg
+│   │                       └── frame
+│   │                           └── test
+│   │                               └── ApiTest.java
+│   └── xfg-frame-app.iml
+├── xfg-frame-ddd.iml
+├── xfg-frame-domain
+│   ├── pom.xml
+│   ├── src
+│   │   └── main
+│   │       └── java
+│   │           └── cn
+│   │               └── bugstack
+│   │                   └── xfg
+│   │                       └── frame
+│   │                           └── domain
+│   │                               ├── order
+│   │                               │   ├── model
+│   │                               │   │   ├── aggregates
+│   │                               │   │   │   └── OrderAggregate.java
+│   │                               │   │   ├── entity
+│   │                               │   │   │   ├── OrderItemEntity.java
+│   │                               │   │   │   └── ProductEntity.java
+│   │                               │   │   ├── package-info.java
+│   │                               │   │   └── valobj
+│   │                               │   │       ├── OrderIdVO.java
+│   │                               │   │       ├── ProductDescriptionVO.java
+│   │                               │   │       └── ProductNameVO.java
+│   │                               │   ├── repository
+│   │                               │   │   ├── IOrderRepository.java
+│   │                               │   │   └── package-info.java
+│   │                               │   └── service
+│   │                               │       ├── OrderService.java
+│   │                               │       └── package-info.java
+│   │                               ├── rule
+│   │                               │   ├── model
+│   │                               │   │   ├── aggregates
+│   │                               │   │   │   └── TreeRuleAggregate.java
+│   │                               │   │   ├── entity
+│   │                               │   │   │   ├── DecisionMatterEntity.java
+│   │                               │   │   │   └── EngineResultEntity.java
+│   │                               │   │   ├── package-info.java
+│   │                               │   │   └── valobj
+│   │                               │   │       ├── TreeNodeLineVO.java
+│   │                               │   │       ├── TreeNodeVO.java
+│   │                               │   │       └── TreeRootVO.java
+│   │                               │   ├── repository
+│   │                               │   │   ├── IRuleRepository.java
+│   │                               │   │   └── package-info.java
+│   │                               │   └── service
+│   │                               │       ├── engine
+│   │                               │       │   ├── EngineBase.java
+│   │                               │       │   ├── EngineConfig.java
+│   │                               │       │   ├── EngineFilter.java
+│   │                               │       │   └── impl
+│   │                               │       │       └── RuleEngineHandle.java
+│   │                               │       ├── logic
+│   │                               │       │   ├── BaseLogic.java
+│   │                               │       │   ├── LogicFilter.java
+│   │                               │       │   └── impl
+│   │                               │       │       ├── UserAgeFilter.java
+│   │                               │       │       └── UserGenderFilter.java
+│   │                               │       └── package-info.java
+│   │                               └── user
+│   │                                   ├── model
+│   │                                   │   └── valobj
+│   │                                   │       └── UserVO.java
+│   │                                   ├── repository
+│   │                                   │   └── IUserRepository.java
+│   │                                   └── service
+│   │                                       ├── UserService.java
+│   │                                       └── impl
+│   │                                           └── UserServiceImpl.java
+│   └── xfg-frame-domain.iml
+├── xfg-frame-infrastructure
+│   ├── pom.xml
+│   ├── src
+│   │   └── main
+│   │       └── java
+│   │           └── cn
+│   │               └── bugstack
+│   │                   └── xfg
+│   │                       └── frame
+│   │                           └── infrastructure
+│   │                               ├── dao
+│   │                               │   ├── IUserDao.java
+│   │                               │   ├── RuleTreeDao.java
+│   │                               │   ├── RuleTreeNodeDao.java
+│   │                               │   └── RuleTreeNodeLineDao.java
+│   │                               ├── package-info.java
+│   │                               ├── po
+│   │                               │   ├── RuleTreeNodeLinePO.java
+│   │                               │   ├── RuleTreeNodePO.java
+│   │                               │   ├── RuleTreePO.java
+│   │                               │   └── UserPO.java
+│   │                               └── repository
+│   │                                   ├── RuleRepository.java
+│   │                                   └── UserRepository.java
+│   └── xfg-frame-infrastructure.iml
+├── xfg-frame-trigger
+│   ├── pom.xml
+│   ├── src
+│   │   └── main
+│   │       └── java
+│   │           └── cn
+│   │               └── bugstack
+│   │                   └── xfg
+│   │                       └── frame
+│   │                           └── trigger
+│   │                               ├── http
+│   │                               │   ├── Controller.java
+│   │                               │   └── package-info.java
+│   │                               ├── mq
+│   │                               │   └── package-info.java
+│   │                               ├── rpc
+│   │                               │   ├── AccountService.java
+│   │                               │   ├── RuleService.java
+│   │                               │   └── package-info.java
+│   │                               └── task
+│   │                                   └── package-info.java
+│   └── xfg-frame-trigger.iml
+└── xfg-frame-types
+    ├── pom.xml
+    ├── src
+    │   └── main
+    │       └── java
+    │           └── cn
+    │               └── bugstack
+    │                   └── xfg
+    │                       └── frame
+    │                           └── types
+    │                               ├── Constants.java
+    │                               ├── Response.java
+    │                               └── package-info.java
+    └── xfg-frame-types.iml
+```
+
+以上是整个🏭工程架构的 tree 树形图。整个工程由  xfg-frame-app 模的 SpringBoot 驱动。这里小傅哥在 domain 领域模型下提供了 order、rule、user 三个领域模块。并在每个模块下提供了对应的测试内容。这块是整个模型的重点，其他模块都可以通过测试看到这里的调用过程。
+
+### 3. 领域
+
+一个领域模型中包含3个部分；model、repository、service 三部分；
+- model 对象的定义 【含有；valobj = VO、entity、Aggregate】
+- repository 仓储的定义【含有PO】
+- service 服务实现
+
+以上3个模块，一般也是大家在使用 DDD 时候最不容易理解的分层。比如 model 里还分为；valobj - 值对象、entity 实体对象、aggregates 聚合对象；
+- **值对象**：表示没有唯一标识的业务实体，例如商品的名称、描述、价格等。
+- **实体对象**：表示具有唯一标识的业务实体，例如订单、商品、用户等；
+- **聚合对象**：是一组相关的实体对象的根，用于保证实体对象之间的一致性和完整性；
+
+关于model中各个对象的拆分，尤其是聚合的定义，会牵引着整个模型的设计。当然你可以在初期使用 DDD 的时候不用过分在意领域模型的设计，可以把整个 domain 下的一个个包当做充血模型结构，这样编写出来的代码也是非常适合维护的。
+
+### 4. 环境(开发/测试/上线)
+
+**源码**：`xfg-frame-ddd/pom.xml`
+
+```pom
+<profile>
+    <id>dev</id>
+    <activation>
+        <activeByDefault>true</activeByDefault>
+    </activation>
+    <properties>
+        <profileActive>dev</profileActive>
+    </properties>
+</profile>
+<profile>
+    <id>test</id>
+    <properties>
+        <profileActive>test</profileActive>
+    </properties>
+</profile>
+<profile>
+    <id>prod</id>
+    <properties>
+        <profileActive>prod</profileActive>
+    </properties>
+</profile>
+```
+
+- 定义环境；开发、测试、上线。
+
+**源码**：`xfg-frame-app/application.yml`
+
+```java
+spring:
+  config:
+    name: xfg-frame
+  profiles:
+    active: dev # dev、test、prod
+```
+
+- 除了 pom 的配置，还需要在 application.yml 中指定环境。这样就可以对应的加载到；`application-dev.yml`、`application-prod.yml`、`application-test.yml` 这样就可以很方便的加载对应的配置信息了。尤其是各个场景中切换会更加方便。
+
+### 5. 切面
+
+一个工程开发中，有时候可能会有很多的统一切面和启动配置的处理，这些内容都可以在 xfg-frame-app 完成。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-230624-04.png?raw=true" width="450px"/>
+</div>
+
+**源码**：`cn.bugstack.xfg.frame.aop.RateLimiterAop`
+
+```java
+@Slf4j
+@Aspect
+public class RateLimiterAop {
+
+    private final long timeout;
+    private final double permitsPerSecond;
+    private final RateLimiter limiter;
+
+    public RateLimiterAop(double permitsPerSecond, long timeout) {
+        this.permitsPerSecond = permitsPerSecond;
+        this.timeout = timeout;
+        this.limiter = RateLimiter.create(permitsPerSecond);
+    }
+
+    @Pointcut("execution(* cn.bugstack.xfg.frame.trigger..*.*(..))")
+    public void pointCut() {
+    }
+
+    @Around(value = "pointCut()", argNames = "jp")
+    public Object around(ProceedingJoinPoint jp) throws Throwable {
+        boolean tryAcquire = limiter.tryAcquire(timeout, TimeUnit.MILLISECONDS);
+        if (!tryAcquire) {
+            Method method = getMethod(jp);
+            log.warn("方法 {}.{} 请求已被限流，超过限流配置[{}/秒]", method.getDeclaringClass().getCanonicalName(), method.getName(), permitsPerSecond);
+            return Response.<Object>builder()
+                    .code(Constants.ResponseCode.RATE_LIMITER.getCode())
+                    .info(Constants.ResponseCode.RATE_LIMITER.getInfo())
+                    .build();
+        }
+        return jp.proceed();
+    }
+
+    private Method getMethod(JoinPoint jp) throws NoSuchMethodException {
+        Signature sig = jp.getSignature();
+        MethodSignature methodSignature = (MethodSignature) sig;
+        return jp.getTarget().getClass().getMethod(methodSignature.getName(), methodSignature.getParameterTypes());
+    }
+
+}
+```
+
+**使用**
+
+```java
+# 限流配置
+rate-limiter:
+  permits-per-second: 1
+  timeout: 5
+```
+
+- 这样你所有的通用配置，又和业务没有太大的关系的，就可以直接写到这里了。—— 具体可以参考代码。
+
+## 六、工程测试验证
+
+- 首先；整个工程由 SpringBoot 驱动，提供了 road-map.sql 测试 SQL 库表语句。你可以在自己的本地mysql上进行执行。它会创建库表。
+- 之后；在 application.yml 配置数据库链接信息。
+- 之后就可以打开 ApiTest 进行测试了。你可以点击 Application 类的绿色箭头启动工程，使用触发器里的接口调用测试，或者单元测试RPC接口，小傅哥也提供了泛化调用的方式。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-230624-05.png?raw=true" width="950px"/>
+</div>
+
+- 如果你正常获取了这样的结果信息，那么说明你已经启动成功。接下来就可以对照着DDD的结构进行学习，以及使用这样的工程结构开发自己的项目。
diff --git a/docs/md/road-map/ddd.md b/docs/md/road-map/ddd.md
index 69c3442f6..e1eb279cc 100644
--- a/docs/md/road-map/ddd.md
+++ b/docs/md/road-map/ddd.md
@@ -26,7 +26,7 @@ lock: need
 	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-230624-01.png?raw=true" width="650px"/>
 </div>
 
--  如果你接触过较大型且已经长期维护项目的 MVC 架构，你就会发现这里的 DAO、PO、VO 对象，在 Service 层相互调用。那么长期开发后，就导致了各个 PO 里的属性字段数量都被撑的特别大。这样的开发方式，将`”状态”`、`“行为“`分离到不同的对象中，代码的意图渐渐模糊，膨胀、臃肿和不稳定的架构，让迭代成本增加。
+-  如果你接触过较大型且已经长期维护项目的 MVC 架构，你就会发现这里的 DAO、PO（持久化）、VO（业务对象） 对象，在 Service 层相互调用。那么长期开发后，就导致了各个 VO 里的属性字段数量都被撑的特别大。这样的开发方式，将`”状态”`、`“行为“`分离到不同的对象中，代码的意图渐渐模糊，膨胀、臃肿和不稳定的架构，让迭代成本增加。
 -  而 DDD 架构首先以解决此类问题为主，将各个属于自己领域范围内的行为和逻辑封装到自己的领域包下处理。这也是 DDD 架构设计的精髓之一。它希望在分治层面合理切割问题空间为更小规模的若干子问题，而问题越小就容易被理解和处理，做到高内聚低耦合。这也是康威定律所提到的，解决复杂场景的设计主要分为：分治、抽象和知识。
 
 ## 二、简化理解
diff --git a/docs/md/road-map/disruptor.md b/docs/md/road-map/disruptor.md
new file mode 100644
index 000000000..73362e753
--- /dev/null
+++ b/docs/md/road-map/disruptor.md
@@ -0,0 +1,183 @@
+---
+title: Disruptor
+lock: need
+---
+
+# Disruptor 高性能环形消息队列应用，Log4j 2 也用到了这套技术。
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+说到底，无论是晋升述职还是面试考察，编程技能的展现总是在那些技术的横向对比和深度的了解运用。知其一，也知其二。一个场景的问题，往往也会对应着多种的解决方案，从没有绝对的好和不好，都是是否适合而已。所以，往往技术越好的，也越低调，不那么咋咋呼呼的。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-disruptor-01.gif" width="200px"/>
+</div>
+
+**什么是柔性事务？**
+
+在分布式软件系统架构设计中，所有的并发资源的竞争，都会往`无锁化`、`非独占竞争`，以及`柔性事务`设计。柔性事务用于替代传统事务管理中（如ACID属性：原子性、一致性、隔离性、持久性），在分布式架构系统中的使用场景。通过消息、补偿，协调不同服务间的一致性。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-disruptor-02.png" width="550px"/>
+</div>
+
+那么在消息的使用中，除了有 MQ 消息，使用于微服务之间。还有本地消息，可以作用在各个领域间驱动流程。关于本地消息可以用，Spring 的监听、Redis 发布订阅、Guava EventBus 事件总线，这些内容在小傅哥博客 [bugstack.cn](https://bugstack.cn) 《路书》中有相关的案例。之后本节咱们介绍一个新的高性能组件 Disruptor 的使用。
+
+## 一、关于 Disruptor
+
+Disruptor 是一种高性能的并发框架，最初由 LMAX 开发，用于解决高吞吐量、低延迟的消息处理问题。它提供了一种无锁的、有序的事件处理模型，非常适合处理需要高性能的场景。Disruptor 本身并不是用于实现事务的框架，而是一个事件处理器。因此，要在 Disruptor 上实现柔性事务，需要结合其事件处理能力与柔性事务的模式。
+
+- 源码：[https://github.com/LMAX-Exchange/disruptor](https://github.com/LMAX-Exchange/disruptor)
+- 文档：[https://lmax-exchange.github.io/disruptor/](https://lmax-exchange.github.io/disruptor/) - 谷歌浏览器右键点翻译为中文。
+
+## 二、实战案例
+
+### 1. 工程结构
+
+小傅哥准备好了一份基于 Disruptor 事件消息的使用案例工程，你可以直接上手体现。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-disruptor-03.png" width="400px"/>
+</div>
+
+- app 是使用的启动层、trigger 是提供接口、监听消息、处理任务的触发器层。
+- 在这里我们通过 trigger 下的 event 包，监听事件消息。之后把这个 XxxEventHandler 让 app 层下的 Disruptor 进行实例化。
+
+### 2. 引入POM
+
+```pom
+<!-- https://mvnrepository.com/artifact/com.lmax/disruptor -->
+<dependency>
+    <groupId>com.lmax</groupId>
+    <artifactId>disruptor</artifactId>
+    <version>3.4.4</version>
+</dependency>
+```
+
+- 引入 disruptor pom 包。
+
+### 3. 监听消息
+
+```java
+@Slf4j
+public class XxxEventHandler implements EventHandler<XxxEventHandler.Message> {
+
+    @Override
+    public void onEvent(Message longEvent, long l, boolean b) throws Exception {
+        log.info("接收消息：{}", longEvent.getValue());
+    }
+
+    @Data
+    public static class Message {
+        private String value;
+    }
+
+}
+```
+
+- 在 trigger 下 event 包内，加一个实现了 disruptor EventHandler 的监听实现类，消息体类型我们定义到 XxxEventHandler 中，也就是 Message。具体生产使用的时候，按需调整。
+- 这个接收消息的过程和使用 MQ 的方式是一样的。
+
+### 4. 实例化监听
+
+```java
+@Configuration
+public class DisruptorConfig {
+
+    private final ExecutorService executor = Executors.newCachedThreadPool();
+
+    @Bean("xxxEventDisruptor")
+    public Disruptor<XxxEventHandler.Message> disruptor() {
+        // 环形队列的大小，注意要是2的幂
+        int bufferSize = 1024;
+
+        // 创建Disruptor
+        Disruptor<XxxEventHandler.Message> disruptor = new Disruptor<>(XxxEventHandler.Message::new, bufferSize, executor);
+
+        // 连接事件处理器
+        disruptor.handleEventsWith(new XxxEventHandler());
+
+        // 开始Disruptor
+        disruptor.start();
+
+        return disruptor;
+    }
+
+}
+```
+
+- 在 App 模块下，有一个 config 专门的配置类，在这里配置下消息监听。这个过程和我们之前使用的 Redis 发布订阅是一样的。
+
+### 5. 推送消息(Test)
+
+```java
+@Slf4j
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = Application.class)
+public class DisruptorTest {
+
+    @Resource
+    private Disruptor<XxxEventHandler.Message> xxxEventDisruptor;
+
+    @Test
+    public void test_publishEvent() throws InterruptedException {
+
+        for (int i = 0; i < 10; i++) {
+            xxxEventDisruptor.publishEvent((event, sequence) -> event.setValue("你好，我是 Disruptor Message"));
+        }
+
+        // 暂停 - 测试完手动关闭程序
+        new CountDownLatch(1).await();
+    }
+
+}
+```
+
+```java
+24-10-26.11:55:55.827 [main            ] INFO  DisruptorTest          - Starting DisruptorTest using Java 1.8.0_311 on MacBook-Pro.local with PID 92827 (started by fuzhengwei in /Users/fuzhengwei/1024/KnowledgePlanet/road-map/xfg-dev-tech-disruptor/xfg-dev-tech-app)
+24-10-26.11:55:55.829 [main            ] INFO  DisruptorTest          - The following 1 profile is active: "dev"
+24-10-26.11:55:57.749 [main            ] INFO  DisruptorTest          - Started DisruptorTest in 2.526 seconds (JVM running for 3.741)
+24-10-26.11:55:58.125 [pool-2-thread-1 ] INFO  XxxEventHandler        - 接收消息：你好，我是 Disruptor Message
+24-10-26.11:55:58.128 [pool-2-thread-1 ] INFO  XxxEventHandler        - 接收消息：你好，我是 Disruptor Message
+24-10-26.11:55:58.128 [pool-2-thread-1 ] INFO  XxxEventHandler        - 接收消息：你好，我是 Disruptor Message
+24-10-26.11:55:58.128 [pool-2-thread-1 ] INFO  XxxEventHandler        - 接收消息：你好，我是 Disruptor Message
+24-10-26.11:55:58.128 [pool-2-thread-1 ] INFO  XxxEventHandler        - 接收消息：你好，我是 Disruptor Message
+24-10-26.11:55:58.128 [pool-2-thread-1 ] INFO  XxxEventHandler        - 接收消息：你好，我是 Disruptor Message
+24-10-26.11:55:58.128 [pool-2-thread-1 ] INFO  XxxEventHandler        - 接收消息：你好，我是 Disruptor Message
+24-10-26.11:55:58.128 [pool-2-thread-1 ] INFO  XxxEventHandler        - 接收消息：你好，我是 Disruptor Message
+24-10-26.11:55:58.128 [pool-2-thread-1 ] INFO  XxxEventHandler        - 接收消息：你好，我是 Disruptor Message
+24-10-26.11:55:58.128 [pool-2-thread-1 ] INFO  XxxEventHandler        - 接收消息：你好，我是 Disruptor Message
+```
+
+- 提供一个单测来测试消息推送，这样你就可以监听到消息了。
+
+## 三、总结
+
+在美团、京东、阿里，等各个大厂中都有很多这样的组件使用，在美团发布过的文章中[《高性能队列——Disruptor》](https://tech.meituan.com/2016/11/18/disruptor.html) 还有一个对应的压测数据。CPU:Intel Core i7-2720QM，JVM:Java 1.6.0_25 64-bit，OS:Ubuntu 11.04
+
+| -                  | ABQ       | Disruptor  |
+| :----------------- | :-------- | :--------- |
+| Unicast: 1P – 1C   | 4,057,453 | 22,381,378 |
+| Pipeline: 1P – 3C  | 2,006,903 | 15,857,913 |
+| Sequencer: 3P – 1C | 2,056,118 | 14,540,519 |
+| Multicast: 1P – 3C | 260,733   | 10,860,121 |
+| Diamond: 1P – 3C   | 2,082,725 | 15,295,197 |
+
+- 依据并发竞争的激烈程度的不同，Disruptor比ArrayBlockingQueue吞吐量快4~7倍。
+
+---
+
+另外，Log4j 2 采用了 Disruptor（一种无锁的线程间通信库），提高吞吐量降低延迟。在生产使用中，大并发的系统注意 Log4j 版本。官网说明：[https://logging.apache.org/log4j/2.12.x/manual/async.html](https://logging.apache.org/log4j/2.12.x/manual/async.html)
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-disruptor-04.png" width="850px"/>
+</div>
+
+- **异步 Logger**是 Log4j 2 中的新增功能。其目的是尽快从对 Logger.log 的调用返回到应用程序。您可以选择使所有 Logger 异步，或使用同步和异步 Logger 的混合。使所有 Logger 异步将提供最佳性能，而混合使用则可为您提供更大的灵活性。
+- **LMAX Disruptor 技术**。异步记录器内部使用 [Disruptor（](https://logging.apache.org/log4j/2.12.x/manual/async.html#UnderTheHood)一种无锁的线程间通信库）而不是队列，从而实现更高的吞吐量和更低的延迟。
+- 作为异步日志记录器工作的一部分，**异步附加器**已得到增强，可以在批处理结束时（当队列为空时）刷新到磁盘。这会产生与配置“immediateFlush=true”相同的结果，即所有收到的日志事件始终在磁盘上可用，但效率更高，因为它不需要在每个日志事件上都接触磁盘。（异步附加器在内部使用 ArrayBlockingQueue，不需要类路径上的 Disruptor jar。）
diff --git a/docs/md/road-map/docker-idea.md b/docs/md/road-map/docker-idea.md
new file mode 100644
index 000000000..69892f4e4
--- /dev/null
+++ b/docs/md/road-map/docker-idea.md
@@ -0,0 +1,169 @@
+---
+title: Docker IntelliJ IDEA
+lock: need
+---
+
+# Docker WEB IntelliJ IDEA —— 随时随地打开浏览器就能写代码！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+<iframe id="B-Video" src="//player.bilibili.com/player.html?isOutside=true&aid=1556278601&bvid=BV1P142187rg&cid=1636946677&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="100%" height="480"> </iframe>
+
+大家好，我是技术UP主小傅哥。
+
+我遇到过不少粉丝伙伴因为自己是老 Windows 电脑，部署项目费劲的问题。因为本身 Java 开发完成以后就是部署到 Linux 服务器的，而 Windows 压根不是 Linux 系统。所以不是装虚拟机，就是装 Docker 来模拟这些环境，但很多时候都差强人意，尤其是配置低的 Windows 又跑不动，这咋办！
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-idea-00.png" width="150px"/>
+</div>
+
+**死鬼，我就知道你有很多办法！**
+
+嘿嘿，是的，小傅哥又给你带来一个新方法：”在 Linux 安装一个 IntelliJ IDEA！“ 并且可以在线执行代码、构建项目、打包程序。这不美滋滋，尤其是对有学习项目诉求的伙伴，不就可以随时随地学习自己的项目了吗！
+
+>好啦，接下来小傅哥就带着你安装下。文末提供了本次安装的相关脚本。
+
+## 一、前置说明
+
+- 一台云服务器，最低 2c4g [https://618.gaga.plus](https://618.gaga.plus ) —— 价格比较实惠。
+- 安装 Docker、Docker Compose 教程：[https://bugstack.cn/md/road-map/docker.html](https://bugstack.cn/md/road-map/docker.html)
+
+```java
+sudo mkdir -p /etc/docker
+sudo tee /etc/docker/daemon.json <<-'EOF'
+{
+  "registry-mirrors": ["https://dc.j8.work", "https://docker.1panel.live"]
+}
+EOF
+sudo systemctl daemon-reload
+sudo systemctl restart docker
+```
+
+- 如果拉取镜像失败，可以配置下以上地址。
+
+## 二、安装脚本
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-idea-01.png" width="450px"/>
+</div>
+
+- 地址：[https://gitcode.net/KnowledgePlanet/xfg-dev-tech-docker-idea](https://gitcode.net/KnowledgePlanet/xfg-dev-tech-docker-idea)
+- 说明：小傅哥这里为你提供了搭建 Docker IDEA 的操作脚本，并配有 JDK、Maven，这样可以更加方便我们构建项目。
+
+## 三、执行安装
+
+### 1. 上传脚本
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-idea-02.png" width="650px"/>
+</div>
+
+- 下载项目后，把本地的配置文件传到云服务器端。注意是 root 目录下。也就是 `~` 这里。
+
+### 2. 解压文件
+
+#### 2.1 jdk
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-idea-04.png" width="650px"/>
+</div>
+
+```java
+[root@lavm-aqhgp9nber java]# tar -zxvf jdk-8u202-linux-x64.tar.gz 
+```
+
+- 这个解压后是为了映射到 Docker IntelliJ IDEA 下的。
+
+#### 2.2 maven
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-idea-05.png" width="650px"/>
+</div>
+
+```java
+[root@lavm-aqhgp9nber maven]# unzip apache-maven-3.8.8.zip 
+```
+
+- 可选不非得加压，因为我们可以直接把 `maven .m2` 下的 `settings.xml` 映射到  Docker IntelliJ IDEA 下。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-idea-06.png" width="650px"/>
+</div>
+
+```java
+[root@lavm-aqhgp9nber maven]# ls -a
+.  ..  apache-maven-3.8.8.zip  install-maven.sh  .m2  remove-maven.sh
+```
+
+### 3. 授权文件
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-idea-03.png" width="850px"/>
+</div>
+
+```java
+chmod -R 777 projector-user/
+```
+
+- 给整个文件夹包括文件夹下的其他文件一起授权。
+- 授权后检查当前文件夹 `projector-user` 和文件夹以下的 java、maven 文件夹。
+
+### 4. 执行安装 
+
+```java
+# 命令执行 docker-compose -f docker-compose.yml up -d
+# 以下这些都可以做 WEB IDEA 安装。在下面替换就可以。
+# docker pull registry.jetbrains.team/p/prj/containers/projector-clion
+# docker pull registry.jetbrains.team/p/prj/containers/projector-datagrip
+# docker pull registry.jetbrains.team/p/prj/containers/projector-goland
+# docker pull registry.jetbrains.team/p/prj/containers/projector-idea-c
+# docker pull registry.jetbrains.team/p/prj/containers/projector-idea-u
+# docker pull registry.jetbrains.team/p/prj/containers/projector-phpstorm
+# docker pull registry.jetbrains.team/p/prj/containers/projector-pycharm-c
+# docker pull registry.jetbrains.team/p/prj/containers/projector-pycharm-p
+
+version: '3.9'
+services:
+  intellij-idea:
+    image: registry.jetbrains.team/p/prj/containers/projector-idea-c
+    container_name: intellij-idea
+    ports:
+      - "8887:8887"
+    volumes:
+      - ~/projector-user:/home/projector-user
+      - ~/projector-user/maven/.m2/settings.xml:/home/projector-user/.m2/settings.xml
+    tty: true
+    stdin_open: true
+    restart: unless-stopped  # 这将确保容器在失败时自动重启
+```
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-idea-08.png" width="950px"/>
+</div>
+
+- 执行脚本 `docker-compose -f docker-compose.yml up -d`
+- 安装完成后记得在云服务器开放端口 `8887`
+
+### 5. 测试项目
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-idea-07.png" width="550px"/>
+</div>
+
+- 通过 `git clone` 检出项目地址 github/gitee/gitcode ，这样在projector-user 下就可以看到你的项目了。
+- 这个是用于 WEB IDEA 打开的项目，当然也可以在 WEB IDEA 创建信息项目。
+
+## 四、访问测试
+
+地址：[http://117.72.37.243:8887/](http://117.72.37.243:8887/) 
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-idea-09.png" width="950px"/>
+</div>
+
+- 接下来你就可以在网页端，操作自己的项目了，想怎么玩就怎么玩，和本地效果是一样的。
+- 这对于新人伙伴学习编程太有用了，直接在云服务器都能打包部署了。
+
diff --git a/docs/md/road-map/docker-install.md b/docs/md/road-map/docker-install.md
new file mode 100644
index 000000000..86979b0c8
--- /dev/null
+++ b/docs/md/road-map/docker-install.md
@@ -0,0 +1,350 @@
+---
+title: Docker 环境配置（一键安装）
+lock: need
+---
+
+# Docker 环境配置（一键安装）
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+<iframe id="B-Video" src="//player.bilibili.com/player.html?isOutside=true&aid=114695709132495&bvid=BV1oaNazEEf5&cid=30537353073&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="100%" height="480"> </iframe>
+
+大家好，我是技术UP主小傅哥。
+
+说实话，做项目不上线，等于吃面不配蒜🧄，效果少一半！面试官也说：“所有做Java编程项目，没有上线云服务器的，一律当玩具看！” 是呀，做完项目不上线，是不你做的项目没法运行，是个小卡拉米练手的？🤔 那怎么办？
+
+其实，上线云服务器非常非常简单，而且云服务器价格也非常非常便宜！趁着618活动月，**28块钱**，都能买一年的云服务器☁️，干嘛不上车！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/system/zsxq/xingqiu-231018-00.png" width="200px">
+</div>
+
+**啥是云服务器？**
+
+云服务器，就等同于自己的另外一个电脑💻，在另外一台电脑部署 redis、mysql、mq等，本地电脑连接过去使用。尤其是 Windows 电脑用户，真心建议搞个云服务器，否则你会浪费非常多的时间这套 Windows 适配问题。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-install-06.png" width="650px">
+</div>
+
+这样有了云服务器，就可以不用嚯嚯本地电脑了，安装了卸，卸了安装，把自己本机电脑环境弄的乱码起糟，全是费时费力的事。有这精力，不如用一台云服务器部署环境，开发完成项目后，再上线云服务器。既节省本地电脑资源，又锻炼了云服务器操作，起步一举两得！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-idea-00.png" width="150px">
+</div>
+
+不过，放心！别担心你不会用云服务器，因为小傅哥已经给你准备了一件安装云服务器环境的脚本，和各类部署环境和构建项目的视频。**即使是小卡拉米，也能跟着学习下来。**
+
+> 🧧小傅哥还提供了非常多的编程实战项目，包括；业务的、组件的、AI的、源码的、轮子的，可以关注公众号「bugstack虫洞栈」回复「星球」加入。
+
+## 一、优惠云服务器地址
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-install-01.png" width="400px">
+</div>
+
+- 购买地址：[https://618.gaga.plus](https://618.gaga.plus)
+- 购买地址：[https://618.gaga.plus](https://618.gaga.plus)
+- 购买地址：[https://618.gaga.plus](https://618.gaga.plus)
+
+**我适合买哪个服务器？**
+
+- 2c2g 1年，28￥，可部署一套 docker、mysql、redis、SpringBoot 单体项目，用于替代本地电脑的环境部署。
+- 2c4g 1年（非常推荐3年），109￥，可部署一套 docker、mysql、redis、rabbitmq、xxl-job、SpringBoot 分布式微服务项目。 
+- 2c8g 1年，328￥，适合部署小傅哥星球社群[大部分项目](https://bugstack.cn/md/zsxq/material/student-learn-advanced.html)，可以完成多个微服务项目部署。
+
+注意📢：购买选择系统时，推荐系统镜像，**centos 7.9**
+
+>如果自己账号不是新人身份，可以自己注册个新账号，用家里人JD扫码认证一下即可。
+
+🎁 礼物赠送，购买2c4g 3年的，赠送Joy公仔，邮寄到家！购买后，联系小傅哥（微信：fustack）
+
+## 二、一键部署脚本
+
+小傅哥，这里为你准备一键安装 Docker 环境的脚本文件，你可以非常省心的完成 Docker 部署。使用方式如下。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-install-02.png" width="650px">
+</div>
+
+- **地址**：<https://github.com/fuzhengwei/xfg-dev-tech-docker-install>
+- **地址**：<https://gitcode.com/Yao__Shun__Yu/xfg-dev-tech-docker-install>
+
+本文档介绍如何执行项目中的各个脚本，包括权限设置和执行步骤。
+
+### 1. 上传脚本&设置权限
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-install-03.png" width="650px">
+</div>
+
+- ssh 工具，推荐 termius。[https://bugstack.cn/md/road-map/tool.html](https://bugstack.cn/md/road-map/tool.html) 免费的就够用，带有 sftp 工具。
+- 左侧是云服务器空间 root 下，右侧是本地环境。可以把整个文件夹全部拖到云服务器。
+- 另外，也可以在云服务器执行 `sudo yum install git` 安装 Git，通过 git clone 拉取脚本。
+
+在执行任何脚本之前，需要先为脚本文件添加可执行权限：
+
+```
+# 为所有脚本添加可执行权限
+chmod +x environment/jdk/install-java.sh
+chmod +x environment/jdk/remove-java.sh
+chmod +x run_install_docker_local.sh
+chmod +x run_install_software.sh
+chmod +x install-maven.sh
+chmod +x remove-maven.sh
+
+```
+或者一次性为所有脚本添加权限：
+
+```
+find . -name "*.sh" -type f -exec chmod +x {} \;
+```
+
+### 2. JDK 安装脚本
+
+#### 2.1 安装 JDK
+
+脚本位置： environment/jdk/install-java.sh
+
+功能： 支持安装 JDK 8 和 JDK 17
+
+执行方式：
+
+```
+# 交互式安装（推荐）
+sudo ./environment/jdk/install-java.sh
+
+# 指定版本安装
+sudo ./environment/jdk/install-java.sh -v 8    # 安装 JDK 8
+sudo ./environment/jdk/install-java.sh -v 17   # 安装 JDK 17
+
+# 强制安装（覆盖已有安装）
+sudo ./environment/jdk/install-java.sh -f -v 8
+
+# 静默安装
+sudo ./environment/jdk/install-java.sh -q -v 8
+
+# 自定义安装目录
+sudo ./environment/jdk/install-java.sh -d /opt/java -v 8
+```
+注意事项：
+
+- 需要 root 权限执行
+- 脚本会提示手动下载 JDK 包到 /dev-ops/java 目录
+- 支持的版本：JDK 8 (1.8.0_202) 和 JDK 17 (17.0.14)
+- 安装完成后环境变量会自动配置
+
+#### 2.2 卸载 JDK
+
+脚本位置： environment/jdk/remove-java.sh
+
+功能： 彻底清理 JDK 安装和环境配置
+
+执行方式：
+
+```
+# 交互式删除（推荐）
+sudo ./environment/jdk/remove-java.sh
+
+# 强制删除
+sudo ./environment/jdk/remove-java.sh -f
+
+# 静默删除
+sudo ./environment/jdk/remove-java.sh -f -q
+
+# 指定安装目录删除
+sudo ./environment/jdk/remove-java.sh -d /opt/java
+
+# 删除时不备份配置文件
+sudo ./environment/jdk/remove-java.sh --no-backup
+```
+注意事项：
+
+- 需要 root 权限执行
+- 会自动备份配置文件（除非使用 --no-backup）
+- 清理系统和用户级环境变量配置
+
+### 2.3 Maven 安装脚本
+
+#### 2.3.1 安装 Maven
+
+脚本位置：`environment/maven/install-maven.sh`
+
+功能：自动安装 Apache Maven 3.8.8
+
+执行方式：
+
+```bash
+# 交互式安装（推荐）
+sudo ./environment/maven/install-maven.sh
+
+# 自定义安装目录
+sudo ./environment/maven/install-maven.sh -d /opt/maven
+
+# 使用本地Maven包
+sudo ./environment/maven/install-maven.sh -p /path/to/apache-maven-3.8.8.zip
+
+# 强制安装（覆盖已有安装）
+sudo ./environment/maven/install-maven.sh -f
+
+# 静默安装
+sudo ./environment/maven/install-maven.sh -q
+
+# 强制静默安装
+sudo ./environment/maven/install-maven.sh -f -q
+```
+
+### 3. Docker 安装脚本
+
+脚本位置： run_install_docker_local.sh
+
+功能： 使用本地的 install_docker.sh 脚本安装 Docker
+
+执行方式：
+
+```
+# 执行 Docker 安装
+./run_install_docker_local.sh
+```
+注意事项：
+
+- 脚本会自动检查 install_docker.sh 文件是否存在
+- 如果需要 root 权限会自动请求
+- 安装完成后会询问是否安装 Portainer 容器管理界面
+- Portainer 访问地址： http://服务器IP:9000
+
+### 4. 软件安装脚本
+
+脚本位置： run_install_software.sh
+
+功能： 使用 Docker Compose 安装各种开发软件
+
+执行方式：
+
+```
+# 执行软件安装
+sudo ./run_install_software.sh
+```
+
+支持的软件：
+
+- nacos - 服务注册与发现
+- mysql - 数据库
+- phpmyadmin - MySQL 管理界面
+- redis - 缓存数据库
+- redis-admin - Redis 管理界面
+- rabbitmq - 消息队列
+- elasticsearch - 搜索引擎
+- logstash - 日志处理
+- kibana - 日志分析界面
+- xxl-job-admin - 任务调度
+- prometheus - 监控系统
+- grafana - 监控面板
+- ollama - AI 模型服务
+- pgvector - 向量数据库
+- pgvector-admin - 向量数据库管理界面
+  注意事项：
+
+- 需要 root 权限执行
+- 需要先安装 Docker 和 docker-compose
+- 脚本会检查磁盘空间并显示预计占用
+- 支持选择原始配置或阿里云镜像配置
+- 可以多选软件进行批量安装
+
+### 5. 常见问题
+
+#### 5.1 权限问题
+
+如果遇到权限拒绝错误：
+
+```
+# 确保脚本有执行权限
+ls -la *.sh
+# 如果没有 x 权限，重新添加
+chmod +x script_name.sh
+```
+
+#### 5.2 环境变量生效
+
+JDK 安装后，环境变量在当前会话中已生效，新开终端需要：
+
+```
+# 重新加载配置
+source /etc/profile
+# 或者重新登录
+```
+
+#### 5.3 Docker 相关
+
+确保 Docker 服务正在运行：
+
+```
+# 检查 Docker 状态
+sudo systemctl status docker
+# 启动 Docker 服务
+sudo systemctl start docker
+```
+
+### 6. 执行顺序建议
+
+1. 首先安装 JDK （如果需要）：
+
+   ```
+   sudo ./environment/jdk/install-java.sh -v 8
+   ```
+
+2. 然后安装 Docker ：
+
+   ```
+   ./run_install_docker_local.sh
+   ```
+
+3. 然后安装 Docker ：
+
+   ```
+   ./install-maven.sh
+   ```
+
+4. 最后安装开发软件 ：
+
+   ```
+   sudo ./run_install_software.sh
+   ```
+   按照以上步骤，您就可以成功执行所有脚本并搭建完整的开发环境。
+
+### 7. 安装演示
+
+#### 7.1 docker 安装
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-install-04.png" width="650px">
+</div>
+
+```java
+[root@xiaofuge ~]# ls
+run_install_docker_local.sh
+[root@xiaofuge ~]# chmod +x run_install_docker_local.sh 
+[root@xiaofuge ~]# ./run_install_docker_local.sh 
+```
+
+- 执行完 `./run_install_docker_local.sh ` 全程会自动化安装，如果已经过 docker 会提示是否卸载。使用起来非常方便。
+
+#### 7.2 软件安装
+
+```java
+[root@xiaofuge dev-ops]# ls
+install_docker.sh  README.md  run_install_docker_local.sh  run_install_docker.sh  run_install_software.sh  software
+[root@xiaofuge dev-ops]# chmod +x run_install_software.sh 
+[root@xiaofuge dev-ops]# ls
+install_docker.sh  README.md  run_install_docker_local.sh  run_install_docker.sh  run_install_software.sh  software
+```
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-install-07.png" width="550px">
+</div>
+
+- 安装时候可以选择需要安装的软件，重复安装也会提示卸载。
+
diff --git a/docs/md/road-map/docker-what.md b/docs/md/road-map/docker-what.md
new file mode 100644
index 000000000..24d2d8ea9
--- /dev/null
+++ b/docs/md/road-map/docker-what.md
@@ -0,0 +1,76 @@
+---
+title: Docker 是什么？
+lock: need
+---
+
+# Docker 是什么？
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+**好用，真的好用！** 自从使用 Docker 后，我可以非常简单的`安装`、`使用`、`卸载`各类所需的软件，如；MySql、Redis、RabbitMQ、XXL-Job、FRP，等一些列开发环境和我自己开发的好的项目进行上线发布。以前一个MySql安装到卸载，可能半天时间都没了。但有 Docker 后，我自己既可以是开发工程师也是可以是软件实施工程师。因为他可以一行脚本即可完成所有的操作，脚本在，环境就在，服务就在。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-00.gif" width="200px">
+</div>
+
+**那 Docker 是什么呢？**
+
+Docker 是什么，其实来自于 Docker 的图标已经说明。Docker 的图标是一条鲸鱼 🐳一样的大船，上面摆放了很多集装箱。你可以把这些集装箱当做是一个个不同的应用程序，虽然不同但可以统一用一套集装箱（脚本命令）承载，并承放在统一一条大船上（环境上）。而且这些集装箱都有自己的编号ID（有自己的IP）互相隔离，不受影响。
+
+Docker 是一个用于开发、发布和运行应用程序的开放平台。Docker 可让您将应用程序与基础架构分离，以便快速交付软件。借助 Docker，您可以像管理应用程序一样管理基础架构。通过利用 Docker 的发布、测试和部署代码方法，您可以显著减少编写代码和在生产中运行代码之间的延迟。
+
+官网：[https://www.docker.com/](https://www.docker.com/)
+文档：[https://docs.docker.com/get-started/docker-overview/](https://docs.docker.com/get-started/docker-overview/)
+
+## 一、Docker 安装在哪
+
+Docker 可以安装在 Windows + wsl2、Mac、Linux，支持 ARM、AMD 架构。它可以通过软件下载安装和执行脚本命令安装，也可以通过云服务器提供的镜像直接购买云服务器时选择使用。我们可以看下 Docker 和虚拟机安装在操作系统上的关系来了解 Docker 的安装位置。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-02.png" width="550px">
+</div>
+
+与虚拟机的安装使用相比，Docker 会把应用所需的依赖、函数库、甚至其他的软件应用可以一起打包成一个镜像，这样在应用程序运行时，就可以直接调用本地函数库，然后和 Linux 内核进行通信。有了这样的设计，你也就不需要关心每一个应用所需的环境都是啥了，也不用为每一个应用安装各类环境到 Linux 或者虚拟机了。也就做到了跨系统的运行。这有点类似于 Java 的 JVM 虚拟机。
+
+- 本地安装：[https://www.docker.com/](https://www.docker.com/) - 下载 Mac、Windows 你需要的版本进行安装。
+- 云服务器：[https://bugstack.cn/md/road-map/docker.html](https://bugstack.cn/md/road-map/docker.html) - centos 7.9 其他的也都类似操作即可。
+
+>安装完成后都可以通过命令操作，安装、部署、卸载软件。文末提供了教程链接。
+
+## 二、Docker 怎么工作
+
+Docker 为了屏蔽软件使用差异，会统一对这些软件进行镜像打包，把一个软件所需的各类环境都打包到镜像中。我们在使用的时候，就是使用各类平台提供好的软件镜像，进行服务部署。同样的我们也可以作为镜像提供方，把我们的应用程序 SpringBoot、React、VUE 等，打包成镜像，让我们在其他地方，如云服务器进行部署。或者提供给全网的人员，进行部署使用。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-03.png" width="750px">
+</div>
+
+如图，这是一整套的，本地拉取镜像、部署环境、开发代码、发布镜像，再到云服务器拉取镜像、部署项目和环境的过程。在这个过程中，我们也可以借助于如 Github Action 完成镜像的构建和发布，还可以在云服务器上直接构建镜像，减少了拉取拉取的过程。
+
+> 你可以理解为，Docker 就是一个中心和一个客户端，中心管理镜像，客户端拉取使用或者构建发布镜像。
+
+## 三、Docker 命令说明
+
+Docker 的操作是通过脚本命令配置和执行完成使用，不过不用害怕命令😱，命令是最简单、直接、可靠的方式。当你习惯命令以后，你会很喜欢它，并且知道只要执行这个命令就一定会有结果，而不像被软件包装后，不确定是软件的问题还是命令的问题。
+
+Docker 安装软件分为直接使用和通过 Docker Compose 脚本。直接使用如；`docker run -d --restart=always --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer` 这条命令会自动拉取和执行脚本。不过对于更大的项目部署，Docker Compose 脚本更好用。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-04.png" width="750px">
+</div>
+
+- 如图，是整个 Docker Compose 在配置一套执行脚本后，各个脚本的核心用途。当然 Docker Compose 还有不少的命令，比如容量的限制、端口的处理、默认的命令等，都是可以操作的，凡是你想的合理的，它都可以支持。
+- 特别注意，安装到云服务器的docker部署的应用，外部访问需要走公网IP:Port端口，之后这个端口要在安全组打开。这样就类似于你再本地自己的电脑发，访问另外一台电脑上的服务了。
+- 如果在使用中遇到其他命令不理解的，可以让 [openai](https://openai.itedus.cn) 解释。
+
+## 四、Docker 实操教程
+
+此外，为了大家更好的使用 Docker 搭建各类环境，小傅哥为大家准备好了文档和视频。可以放心食用。
+
+- 文档：[https://bugstack.cn/md/road-map/docker.html](https://bugstack.cn/md/road-map/docker.html) - 这是一个系列，你可以从左侧目录选择阅读。
+- 视频：[https://www.bilibili.com/video/BV1xw411W7xf](https://www.bilibili.com/video/BV1xw411W7xf) - 对应一整套的视频，手把手操作。
\ No newline at end of file
diff --git a/docs/md/road-map/docker.md b/docs/md/road-map/docker.md
index afa08ab76..3fb609b15 100644
--- a/docs/md/road-map/docker.md
+++ b/docs/md/road-map/docker.md
@@ -1,9 +1,9 @@
 ---
-title: Docker
+title: Docker 环境配置（手动安装）
 lock: need
 ---
 
-# Docker 环境配置
+# Docker 环境配置（手动安装）
 
 作者：小傅哥
 <br/>博客：[https://bugstack.cn](https://bugstack.cn)
@@ -36,6 +36,7 @@ uname -r
 sudo yum update
 ```
 
+
 ```java
 Last metadata expiration check: 1:15:10 ago on Sat 27 Nov 2021 04:22:53 PM CST.
 Dependencies resolved.
@@ -46,6 +47,25 @@ Complete!
 - `sudo yum update`
 - 看到显示 `Complete` 就代表完成了，整个过程需要 5-10 分钟左右
 
+注意：可能会更新失败，那就操作以下指令
+
+~~~~bash
+## 建议备份当前的 yum 源配置，以防万一需要恢复
+sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
+
+## 从阿里云下载 CentOS 7 的 yum 源配置文件并替换现有的配置
+sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
+
+## 清理旧的缓存并生成新的缓存
+sudo yum clean all
+sudo yum makecache
+
+## 再次更新
+sudo yum update
+~~~~
+
+
+
 ### 3. 安装Docker所需的依赖包
 
 ```java
@@ -113,15 +133,16 @@ Available Packages
 
 ```java
 [root@CodeGuide ~]# sudo yum install docker-ce
+[root@CodeGuide ~]# 推荐；sudo yum install -y docker-ce-25.0.5 docker-ce-cli-25.0.5 containerd.io
 ```
 
-- 安装默认最新版本的 Docker
+- 安装默认最新版本的 Docker `最新版本可能有坑，最好指定版本安装`
 
 ```java
 [root@CodeGuide ~]# sudo yum install <FQPN>
 ```
 
-- 安装指定版本，例如：sudo yum install docker-ce-20.10.11.ce
+- 安装指定版本，例如：`yum install -y docker-ce-25.0.5 docker-ce-cli-25.0.5 containerd.io`
 
 ### 7. 安装Docker-Compose
 
@@ -137,8 +158,6 @@ sudo chmod +x /usr/local/bin/docker-compose
 **镜像地址**
 
 ```shell
-# 默认路径
-wget https://gitee.com/fustack/docker-compose/releases/download/v2.24.1/docker-compose-linux-x86_64
 # 指定路径【推荐】
 sudo curl -L https://gitee.com/fustack/docker-compose/releases/download/v2.24.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
 # 设置权限
@@ -224,7 +243,8 @@ Docker version 20.10.11, build dea9396
 
 ### 12. 设置国内源
 
-阿里云提供了镜像源：[https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors](https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors) - 登录后你会获得一个专属的地址。
+1. 【推荐】1panel 提供了镜像源 [https://status.1panel.top/status/docker](https://status.1panel.top/status/docker) - `直接进去就可以找到最新的镜像源`
+2. 阿里云提供了镜像源：[https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors](https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors) - 登录后你会获得一个专属的地址。
 
 使用以下命令来设置 Docker 国内源：- 或者你可以通过 `vim /etc/docker/daemon.json` 进入修改添加 registry-mirrors 内容后重启 Docker
 
@@ -239,13 +259,19 @@ sudo systemctl daemon-reload
 sudo systemctl restart docker
 ```
 
-**软件配置**
+可用镜像检测：[https://status.1panel.top/status/docker](https://status.1panel.top/status/docker)
+
+#### 12.1 本地Docker软件配置
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-01.png" width="850px">
+</div>
 
 ```yaml
 { "registry-mirrors" : [
-    "https://h1log1d5.mirror.aliyuncs.com",
-    "http://docker.mirrors.ustc.edu.cn",
-    "http://hub-mirror.c.163.com"
+    "https://docker.1panel.live",
+    "https://dc.j8.work",
+    "https://docker.m.daocloud.io"
   ],
   "builder": {
     "gc": {
@@ -268,19 +294,20 @@ sudo systemctl restart docker
 
 这样对国内服务器拉取Docker仓库影响比较大。不过得亏国内有Docker Hub镜像平台。有付费的，有免费的！
 
-**配置镜像**
+#### 12.2 Linux 配置 Docker 镜像
 
 ```yaml
 sudo mkdir -p /etc/docker
 sudo tee /etc/docker/daemon.json <<-'EOF'
 {
-    "registry-mirrors": [
-        "https://dc.j8.work",
-        "https://docker.m.daocloud.io",
-        "https://dockerproxy.com",
-        "https://docker.mirrors.ustc.edu.cn",
-        "https://docker.nju.edu.cn"
-    ]
+"registry-mirrors": [
+  "https://docker.1panel.live",
+  "https://dc.j8.work",
+  "https://docker.m.daocloud.io",
+  "https://dockerproxy.com",
+  "https://docker.mirrors.ustc.edu.cn",
+  "https://docker.nju.edu.cn"
+]
 }
 EOF
 sudo systemctl daemon-reload
@@ -288,9 +315,8 @@ sudo systemctl restart docker
 ```
 
 - 参考链接：https://cloud.tencent.com/developer/article/2301228
-- 可信镜像中心：[https://atomhub.openatom.cn/](https://atomhub.openatom.cn/)
 
-### 13. 远程连接
+### 13. 远程连接 - 不推荐
 
 ```shell script
 vim /lib/systemd/system/docker.service
diff --git a/docs/md/road-map/dump-mat.md b/docs/md/road-map/dump-mat.md
new file mode 100644
index 000000000..15b94bd5e
--- /dev/null
+++ b/docs/md/road-map/dump-mat.md
@@ -0,0 +1,239 @@
+---
+title: dump eclipse mat
+lock: need
+---
+
+# Eclipse MAT 分析 Java heap space dump 日志
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+写了这么久Java代码，操作了那么多发布上线，那你看到过`java.lang.OutOfMemoryError: Java heap space`吗？如果有幸看到了，你是怎么解决的呢？是束手无策，还是有排查工具。如果这样的问题是被面试问的，没做过就很难回答了。那么怎么学习一下呢？
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/student-learn-01.gif" width="150px">
+</div>
+
+**什么场景才会有 OutOfMemoryError**
+
+能写出 OutOfMemoryError 的不是编码不精，就是故意埋坑。其实很多时候我们很难在正常编码写出一个 OutOfMemoryError，因为这个过程你需要大量的往内存加数据，逐步把 JVM 的内存耗尽。而只是1G内存容量（-Xmx1G），仅订单数据就要300多万条记录，谁又能写个 MyBatis SQL 操作，要一次直接把`300万`数据查询到程序内存里呢。
+
+不过，还真可能有！但这个不是程序员故意编码查询300万，而是在做数据导出的时候，处理分页的加法计算有问题，导致每次都是 limit 0,n，n 不断的加大。正确的应该是 limit m,n 这样的查询。这样的 `OutOfMemoryError`，在过往工作中就遇到过，最终经过排查到一次要从数据库获取几百万条数据，导致服务宕机。
+
+那么，为了更好的让大家学习到这样的场景以及使用工具排查，小傅哥这里专门做了案例。可以一起学习下。
+
+## 一、环境准备
+
+为了方便大家进行学习验证，小傅哥这里准备好了一个测试工程和相关的环境安装。你可以在安装完工程后，执行 `ApiTest#test_insert` 向数据库写入250万数据，便于测试。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-dump-01.png" width="450px">
+</div>
+
+- 工程：[https://gitcode.net/KnowledgePlanet/road-map/xfg-dev-tech-dump](https://gitcode.net/KnowledgePlanet/road-map/xfg-dev-tech-dump)
+- 说明：`dev-ops` 下提供了 docker 安装 mysql 以及初始化表。如果你没有 docker 也可以直接本地数据库导入库表。
+
+## 二、软件安装
+
+### 1. 分析软件
+
+对于 OutOfMemoryError 的错误排查，需要让工程导出 dump 日志文件，之后通过软件工具分析。分析 dump 的软件有2个常见的；免费的 Eclipse MAT、付费的 JProfiler(可短期体验)
+
+- Eclipse MAT：[https://eclipse.dev/mat/downloads.php](https://eclipse.dev/mat/downloads.php)
+- JProfiler：[https://www.ej-technologies.com/download/jprofiler/files](https://www.ej-technologies.com/download/jprofiler/files) - `学会 MAT 这个可以自己体验`
+
+### 2. Eclipse MAT 安装配置
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-dump-02.png" width="450px">
+</div>
+
+#### 2.1 加大内存
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-dump-04.png" width="550px">
+</div>
+
+```java
+-startup
+../Eclipse/plugins/org.eclipse.equinox.launcher_1.6.600.v20231106-1826.jar
+--launcher.library
+../Eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.aarch64_1.2.800.v20231003-1442
+-vmargs
+--add-exports=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
+-Xms4096m
+-Xmx4096m
+-Dorg.eclipse.swt.internal.carbon.smallFonts
+-XstartOnFirstThread
+```
+
+- 需要配置 `-Xms4096m`、`-Xmx4096m` 否则过大的 dump 日志，就不能加载进去分析了。大一点配置分析的更快。
+
+#### 2.2 `does not contain the JNI_CreateJavaVM symbol.` 报错处理
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-dump-03.png" width="450px">
+</div>
+
+```java
+<array>
+            
+  <string>-vm</string>
+  <string>/Library/Java/JavaVirtualMachines/jdk1.8.0_341.jdk/Contents/Home/bin</string>
+
+  <string>-keyring</string>
+  <string>~/.eclipse_keyring</string>
+        
+</array>
+```
+
+- 如果遇到 `The JVM shared library "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/../lib/server/libjvm.dylib" does not contain the JNI_CreateJavaVM symbol.` 可以打开 Info.plist 添加 -vm 和 jdk 路径。
+
+## 三、产生 dump 案例
+
+首先你需要为你要运行的方法添加 VM Options 当你运行一个方法后，添加 JVM 配置，这样才能到处 dump
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-dump-05.png" width="950px">
+</div>
+
+- `-Xms128M -Xmx128M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../xfg-dev-tech-dump/docs/dump`
+- HeapDumpPath 为你的工程完成路径，到出到 dump 文件夹下。
+- 运行方法后，就可以在 docs/dump 就可以看到产生的日志了。
+
+### 1. 数据库查询
+
+```java
+<select id="queryPage" resultMap="dataMap">
+        SELECT * FROM user_order
+        limit 0, 2500000
+</select>
+
+@Test
+public void test_java_heap_space_sql() throws InterruptedException {
+    while (true){
+        userOrderDao.queryPage();
+    }
+}
+```
+
+### 2. 线程池过大
+
+```java
+@Test
+public void test_thread_pool_java_heap_space() {
+    // 创建一个固定大小的线程池
+    ExecutorService executorService = Executors.newFixedThreadPool(10);
+    try {
+        // 不断提交占用大量内存的任务
+        for (int i = 0; i < Integer.MAX_VALUE; i++) {
+            executorService.submit(new MemoryHogTask());
+        }
+    } catch (OutOfMemoryError e) {
+        System.out.println("Caught OutOfMemoryError: " + e.getMessage());
+    } finally {
+        // 关闭线程池
+        executorService.shutdown();
+    }
+}
+
+static class MemoryHogTask implements Runnable {
+    @Override
+    public void run() {
+        try {
+            // 分配一个大数组来占用内存
+            int[] memoryHog = new int[1000000]; // 大约占用 4MB 内存
+            // 模拟一些计算以避免 JIT 优化掉内存分配
+            for (int i = 0; i < memoryHog.length; i++) {
+                memoryHog[i] = i;
+            }
+            // 保持任务在一定时间内占用内存
+            Thread.sleep(1000);
+        } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+        }
+    }
+}
+```
+
+### 3. list 添加过多数据
+
+```java
+@Test
+public void test_java_heap_space_list() throws InterruptedException {
+    List<byte[]> list = new ArrayList<>();
+    while (true) {
+        byte[] bytes = new byte[1024 * 1024 * 1024];
+        list.add(bytes);
+        TimeUnit.SECONDS.sleep(1);
+    }
+}
+```
+
+- 这类场景是比较多的，比如我们做营销活动，要把很多的活动数据预热到缓存，如果 JVM 配置的比较低，是可能会出现 `Java heap space` 的。
+
+## 四、Eclipse MAT 分析
+
+### 1. 导入 dump 文件
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-dump-06.png" width="650px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-dump-07.png" width="650px">
+</div>
+
+### 2. 查看统计树
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-dump-08.png" width="450px">
+</div>
+
+### 3. 排序对象
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-dump-09.png" width="850px">
+</div>
+
+### 4. 引用关系
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-dump-10.png" width="850px">
+</div>
+
+- 点击查看，被谁引用了。
+
+### 5. 逐层分析 - 进入对象详情
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-dump-11.png" width="850px">
+</div>
+
+- 看看这个 Object 值装的是什么。
+
+### 6. 发现问题
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-dump-12.png" width="850px">
+</div>
+
+- 看到了在检索数据库数据。其实前面就已经定义到哪里的方法导致，这里可以具体看到细节。
+
+### 7. 其他分析
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-dump-13.png" width="650px">
+</div>
+
+- 我们本案例采用的是 MySql 8.x 如果你使用其他线程池工具，还可能会返回具体的 SQL 语句一起打印出来。方便分析。
+
+好啦，有了这样一个分析过程，你也可以尝试熟悉下工具，分析分析其他的 Java heap space 场景。几次玩下来也就熟悉这个工具了。
+
+--- 
+
+其他工具；[https://visualvm.github.io/](https://visualvm.github.io/)
diff --git a/docs/md/road-map/dump-visualvm.md b/docs/md/road-map/dump-visualvm.md
new file mode 100644
index 000000000..fc2d6eb42
--- /dev/null
+++ b/docs/md/road-map/dump-visualvm.md
@@ -0,0 +1,533 @@
+---
+title: dump VisualVM
+lock: need
+---
+
+# VisualVM 分析 Java heap space dump 日志
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+没毕业前以为学编程，以为工作后就只是写代码。工作后才发现，写代码只是一少部分工作。
+
+`JMeter 压测`、`Remote JVM Debug - 远程调试`、`AREX - 流量录制&回放`、`ELK - 分布式日志`、`普罗米修斯监控`、`Arthas`、`Dump日志分析`等，但凡一样不会，基本就会在某一个场景踩坑。**小则是报警异常，大则是线上事故！**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-linux-01.gif" width="150px">
+</div>
+
+**👨🏻‍💻程序员，也是高危行业呀！**
+
+从互联网草蜢时代，到现在工作了这么多年，也是见证了很多程序员因为写Bug毕业啦🎓，即使不是被开除，往往重大的事故也会影响未来的绩效、加薪和晋升。这些事故按；照影响时长、影响用户量、造成的资损、解决的时长等，会被定级为 P0、P1、P2、P3 不同级别的事故。
+
+所以，到目前有越来越多的辅助工具，来帮助研发提高代码交付质量，以及各类系统异常分析工具，提高问题排查效率。类似这样的系统、服务、组件，小傅哥已经在 [bugstack.cn 编程路书](https://bugstack.cn/md/road-map/road-map.html) 做了大量的案例讲解。今天小傅哥在给大家分享一个关于 VisualVM 的使用。
+
+## 一、关于 VisualVM
+
+VisualVM 是一款可视化 Java 故障排除工具，集成了 JDK 命令行工具和轻量级性能分析功能。专为开发和生产环境设计。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-visualvm-01.png" width="750px">
+</div>
+
+下载：[https://visualvm.github.io/download.html](https://visualvm.github.io/download.html)
+
+> 接下来，小傅哥会结合 VisualVM 做一些常用的案例，方便伙伴学习。
+
+## 二、案例 - 分析大对象
+
+### 1. 测试工程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-visualvm-02.png" width="750px">
+</div>
+
+- 地址：[https://github.com/fuzhengwei/xfg-dev-tech-visualvm](https://github.com/fuzhengwei/xfg-dev-tech-visualvm)
+- 说明：这是一个简单的测试工程，通过访问接口产生大对象。之后在通过 JmapDumpController 接口，执行命令，产生 Dump 文件。之后在使用 VisualVM 分析产生的 Dump 日志，定位是哪个对象导致的问题。
+
+### 2. 执行程序
+
+首先，启动 xfg-dev-tech-visualvm 应用程序。之后执行 visualvm-test.sh 脚本，Windows 用户需要在 powershell 里执行，Mac 电脑可以直接在 IntelliJ IDEA 点击绿色箭头执行。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-visualvm-03.png" width="750px">
+</div>
+
+- 首先，点击启动程序，本地运行即可。一般公司里线上的应用，也有专门下载 dump 日志的地方。
+- 之后，执行 `./visualvm-test.sh` 这部分写了测试程序的脚本和获取 dump 日志的操作。
+
+#### 2.1 接口；创建对象
+
+```java
+@RestController
+@RequestMapping("/api/memory")
+public class MemoryTestController {
+
+    // 用于存储大对象的静态变量，模拟内存泄漏
+    private static final Map<String, Object> MEMORY_CACHE = new ConcurrentHashMap<>();
+    private static final List<byte[]> BIG_OBJECTS = new ArrayList<>();
+
+    /**
+     * 大对象接口 - 创建大量对象占用内存
+     */
+    @GetMapping("/big-object")
+    public Map<String, Object> bigObjectApi() {
+        // 创建大对象（10MB的字节数组）
+        byte[] bigData = new byte[10 * 1024 * 1024]; // 10MB
+        for (int i = 0; i < bigData.length; i++) {
+            bigData[i] = (byte) (i % 256);
+        }
+        
+        // 将大对象存储到静态集合中，模拟内存泄漏
+        BIG_OBJECTS.add(bigData);
+        
+        Map<String, Object> result = new HashMap<>();
+        result.put("status", "success");
+        result.put("message", "创建了一个大对象（10MB）");
+        result.put("timestamp", System.currentTimeMillis());
+        result.put("bigObjectsCount", BIG_OBJECTS.size());
+        result.put("totalMemoryUsed", BIG_OBJECTS.size() * 10 + "MB");
+        
+        return result;
+    }
+
+    /**
+     * 内存泄漏接口 - 持续创建对象并缓存
+     */
+    @GetMapping("/memory-leak")
+    public Map<String, Object> memoryLeakApi() {
+        String key = "data_" + System.currentTimeMillis();
+        
+        // 创建大量小对象并缓存
+        List<String> dataList = new ArrayList<>();
+        for (int i = 0; i < 10000; i++) {
+            dataList.add("这是第" + i + "个数据对象，包含一些文本内容用于占用内存空间");
+        }
+        
+        MEMORY_CACHE.put(key, dataList);
+        
+        Map<String, Object> result = new HashMap<>();
+        result.put("status", "success");
+        result.put("message", "创建了10000个小对象并缓存");
+        result.put("timestamp", System.currentTimeMillis());
+        result.put("cacheSize", MEMORY_CACHE.size());
+        result.put("cacheKey", key);
+        
+        return result;
+    }
+
+    /**
+     * 超大对象接口 - 创建超大对象
+     */
+    @GetMapping("/huge-object")
+    public Map<String, Object> hugeObjectApi() {
+        // 创建超大对象（100MB的字节数组）
+        byte[] hugeData = new byte[100 * 1024 * 1024]; // 100MB
+        
+        // 填充数据
+        for (int i = 0; i < hugeData.length; i++) {
+            hugeData[i] = (byte) (Math.random() * 256);
+        }
+        
+        BIG_OBJECTS.add(hugeData);
+        
+        Map<String, Object> result = new HashMap<>();
+        result.put("status", "success");
+        result.put("message", "创建了一个超大对象（100MB）");
+        result.put("timestamp", System.currentTimeMillis());
+        result.put("bigObjectsCount", BIG_OBJECTS.size());
+        
+        return result;
+    }
+
+}
+```
+
+#### 2.2 接口；获取日志（dump）
+
+```java
+@RestController
+@RequestMapping("/api/jmap")
+public class JmapDumpController {
+
+    // 使用相对路径，基于项目根目录
+    private static final String DUMP_DIR = "docs/dump";
+
+    /**
+     * 获取绝对路径的dump目录
+     */
+    private String getDumpDirectory() {
+        // 获取项目根目录
+        String userDir = System.getProperty("user.dir");
+        // 如果当前目录是xfg-dev-tech-app，则需要回到上级目录
+        if (userDir.endsWith("xfg-dev-tech-app")) {
+            userDir = new File(userDir).getParent();
+        }
+        return userDir + File.separator + DUMP_DIR;
+    }
+
+    /**
+     * 生成堆转储文件
+     */
+    @GetMapping("/dump")
+    public Map<String, Object> generateHeapDump() {
+        Map<String, Object> result = new HashMap<>();
+        
+        try {
+            // 获取dump目录的绝对路径
+            String dumpDir = getDumpDirectory();
+            
+            // 确保目录存在
+            File dir = new File(dumpDir);
+            if (!dir.exists()) {
+                dir.mkdirs();
+            }
+            
+            // 获取当前进程的PID
+            String pid = ManagementFactory.getRuntimeMXBean().getName().split("@")[0];
+            
+            // 生成文件名（包含时间戳）
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
+            String timestamp = sdf.format(new Date());
+            String fileName = "heap_dump_" + timestamp + ".hprof";
+            String filePath = dumpDir + File.separator + fileName;
+            
+            // 执行jmap命令生成堆转储
+            String command = "jmap -dump:format=b,file=" + filePath + " " + pid;
+            Process process = Runtime.getRuntime().exec(command);
+            int exitCode = process.waitFor();
+            
+            if (exitCode == 0) {
+                result.put("status", "success");
+                result.put("message", "堆转储文件生成成功");
+                result.put("filePath", filePath);
+                result.put("fileName", fileName);
+            } else {
+                result.put("status", "error");
+                result.put("message", "堆转储文件生成失败");
+                result.put("exitCode", exitCode);
+            }
+            
+        } catch (IOException | InterruptedException e) {
+            result.put("status", "error");
+            result.put("message", "生成堆转储文件时发生异常: " + e.getMessage());
+        }
+        
+        result.put("timestamp", System.currentTimeMillis());
+        return result;
+    }
+
+}
+```
+
+#### 2.3 脚本；统一执行
+
+```java
+#!/bin/bash
+
+# VisualVM 内存测试自动化脚本
+# 作者: xiaofuge
+# 用途: 自动化测试内存接口并生成dump文件
+
+# 配置参数
+BASE_URL="http://localhost:8091"
+DUMP_DIR="../dump"
+LOG_FILE="$DUMP_DIR/test_log_$(date +%Y%m%d_%H%M%S).txt"
+
+# 颜色输出
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[1;33m'
+BLUE='\033[0;34m'
+NC='\033[0m' # No Color
+
+# 日志函数
+log() {
+    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
+}
+
+log_info() {
+    echo -e "${BLUE}[INFO]${NC} $1" | tee -a "$LOG_FILE"
+}
+
+log_success() {
+    echo -e "${GREEN}[SUCCESS]${NC} $1" | tee -a "$LOG_FILE"
+}
+
+log_warning() {
+    echo -e "${YELLOW}[WARNING]${NC} $1" | tee -a "$LOG_FILE"
+}
+
+log_error() {
+    echo -e "${RED}[ERROR]${NC} $1" | tee -a "$LOG_FILE"
+}
+
+# 检查应用是否启动
+check_app_status() {
+    log_info "检查应用状态..."
+    response=$(curl -s -o /dev/null -w "%{http_code}" "$BASE_URL/api/memory/status")
+    if [ "$response" = "200" ]; then
+        log_success "应用已启动，状态正常"
+        return 0
+    else
+        log_error "应用未启动或状态异常 (HTTP: $response)"
+        return 1
+    fi
+}
+
+# 等待应用启动
+wait_for_app() {
+    log_info "等待应用启动..."
+    for i in {1..30}; do
+        if check_app_status > /dev/null 2>&1; then
+            log_success "应用启动成功"
+            return 0
+        fi
+        log_info "等待中... ($i/30)"
+        sleep 2
+    done
+    log_error "应用启动超时"
+    return 1
+}
+
+# 调用API接口
+call_api() {
+    local endpoint=$1
+    local description=$2
+    local count=${3:-1}
+    
+    log_info "调用接口: $description"
+    for ((i=1; i<=count; i++)); do
+        response=$(curl -s "$BASE_URL$endpoint")
+        status=$(echo "$response" | grep -o '"status":"[^"]*"' | cut -d'"' -f4)
+        if [ "$status" = "success" ]; then
+            log_success "[$i/$count] $description - 成功"
+        else
+            log_error "[$i/$count] $description - 失败: $response"
+        fi
+        sleep 1
+    done
+}
+
+# 显示内存状态
+show_memory_status() {
+    log_info "获取内存状态..."
+    response=$(curl -s "$BASE_URL/api/memory/status")
+    echo "$response" | python3 -m json.tool 2>/dev/null || echo "$response"
+    echo ""
+}
+
+# 生成dump文件
+generate_dump() {
+    log_info "生成堆转储文件..."
+    response=$(curl -s "$BASE_URL/api/jmap/dump")
+    status=$(echo "$response" | grep -o '"status":"[^"]*"' | cut -d'"' -f4)
+    if [ "$status" = "success" ]; then
+        filename=$(echo "$response" | grep -o '"fileName":"[^"]*"' | cut -d'"' -f4)
+        log_success "堆转储文件生成成功: $filename"
+    else
+        log_error "堆转储文件生成失败: $response"
+    fi
+}
+
+# 生成内存信息文件
+generate_memory_info() {
+    log_info "生成内存信息文件..."
+    response=$(curl -s "$BASE_URL/api/jmap/memory-info")
+    status=$(echo "$response" | grep -o '"status":"[^"]*"' | cut -d'"' -f4)
+    if [ "$status" = "success" ]; then
+        filename=$(echo "$response" | grep -o '"fileName":"[^"]*"' | cut -d'"' -f4)
+        log_success "内存信息文件生成成功: $filename"
+    else
+        log_error "内存信息文件生成失败: $response"
+    fi
+}
+
+# 清理缓存
+clear_cache() {
+    log_info "清理缓存..."
+    response=$(curl -s "$BASE_URL/api/memory/clear-cache")
+    status=$(echo "$response" | grep -o '"status":"[^"]*"' | cut -d'"' -f4)
+    if [ "$status" = "success" ]; then
+        log_success "缓存清理成功"
+    else
+        log_error "缓存清理失败: $response"
+    fi
+}
+
+# 主测试流程
+run_test() {
+    log_info "开始VisualVM内存测试"
+    
+    # 检查dump目录
+    if [ ! -d "$DUMP_DIR" ]; then
+        log_info "创建dump目录: $DUMP_DIR"
+        mkdir -p "$DUMP_DIR"
+    fi
+    
+    # 等待应用启动
+    if ! wait_for_app; then
+        log_error "应用启动失败，退出测试"
+        exit 1
+    fi
+    
+    # 显示初始内存状态
+    log_info "=== 初始内存状态 ==="
+    show_memory_status
+    
+    # 测试普通接口
+    call_api "/api/memory/normal" "普通接口测试" 5
+    
+    # 显示内存状态
+    log_info "=== 普通接口调用后内存状态 ==="
+    show_memory_status
+    
+    # 测试大对象接口
+    call_api "/api/memory/big-object" "大对象接口测试" 10
+    
+    # 显示内存状态
+    log_info "=== 大对象创建后内存状态 ==="
+    show_memory_status
+    
+    # 生成第一次dump
+    generate_dump
+    generate_memory_info
+    
+    # 测试内存泄漏接口
+    call_api "/api/memory/memory-leak" "内存泄漏接口测试" 20
+    
+    # 显示内存状态
+    log_info "=== 内存泄漏测试后内存状态 ==="
+    show_memory_status
+    
+    # 测试超大对象接口
+    call_api "/api/memory/huge-object" "超大对象接口测试" 5
+    
+    # 显示内存状态
+    log_info "=== 超大对象创建后内存状态 ==="
+    show_memory_status
+    
+    # 生成第二次dump
+    generate_dump
+    generate_memory_info
+    
+    # 清理缓存
+    clear_cache
+    
+    # 显示清理后内存状态
+    log_info "=== 缓存清理后内存状态 ==="
+    show_memory_status
+    
+    # 生成第三次dump
+    generate_dump
+    generate_memory_info
+    
+    log_success "VisualVM内存测试完成"
+    log_info "日志文件: $LOG_FILE"
+    log_info "dump文件目录: $DUMP_DIR"
+}
+
+# 显示帮助信息
+show_help() {
+    echo "VisualVM 内存测试脚本"
+    echo ""
+    echo "用法: $0 [选项]"
+    echo ""
+    echo "选项:"
+    echo "  test          运行完整测试流程"
+    echo "  check         检查应用状态"
+    echo "  status        显示内存状态"
+    echo "  dump          生成堆转储文件"
+    echo "  memory-info   生成内存信息文件"
+    echo "  clear         清理缓存"
+    echo "  help          显示帮助信息"
+    echo ""
+    echo "示例:"
+    echo "  $0 test       # 运行完整测试"
+    echo "  $0 check      # 检查应用状态"
+    echo "  $0 dump       # 生成dump文件"
+}
+
+# 主程序
+case "${1:-test}" in
+    "test")
+        run_test
+        ;;
+    "check")
+        check_app_status
+        ;;
+    "status")
+        show_memory_status
+        ;;
+    "dump")
+        generate_dump
+        ;;
+    "memory-info")
+        generate_memory_info
+        ;;
+    "clear")
+        clear_cache
+        ;;
+    "help")
+        show_help
+        ;;
+    *)
+        log_error "未知选项: $1"
+        show_help
+        exit 1
+        ;;
+esac
+```
+
+- 整个脚本，会帮助我们执行接口请求以及获取 dump 日志。
+
+### 3. Dump 分析
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-visualvm-05.png" width="750px">
+</div>
+
+- 首先，先通过 VisualVM load dump 日志文件，之后点击 Instances By Size 大的文件。
+- 之后，对大的文件对象，点击 references 这样就可以看到是哪个对象影响的问题了。很快的就能帮你分析出程序内产生大的对象的问题原因。
+
+## 三、案例；GC 插件
+
+VisualVM 还有类似于[普罗米修斯](https://bugstack.cn/md/road-map/grafana.html)一样的监控，可以查看到 JVM 运行情况。也可以帮助我们分析程序运行情况。
+
+### 1. 安装插件 - VisualVM
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-visualvm-06.png" width="750px">
+</div>
+
+- 在 VisualVM 安装 Visual GC 插件。
+
+### 2. 安装插件 - IntelliJ IDEA
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-visualvm-07.png" width="750px">
+</div>
+
+- 也可以给 Intellij IDEA 安装一个 VisualVM Launcher 插件，启动程序可以直接使用。
+
+### 3. 进入监控
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-visualvm-09.png" width="750px">
+</div>
+
+- 打开 VisualVM 看到本地启动的程序，之后打开 Visual GC
+- 这里还可以看见 Monitor、Threads、Profiler，方便我们分析程序
+
+### 4. GC 说明
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/xfg-dev-tech-visualvm-08.png" width="750px">
+</div>
+
+- 如图，各个模块展示了 JVM 运行状况，从这里可以看到程序占用内存的情况。如果是压测验证，可以打开辅助分析。
+
diff --git a/docs/md/road-map/frp.md b/docs/md/road-map/frp.md
new file mode 100644
index 000000000..c3c29d2b8
--- /dev/null
+++ b/docs/md/road-map/frp.md
@@ -0,0 +1,273 @@
+---
+title: Frp 内网穿透
+lock: need
+---
+
+# Frp 内网穿透，用云服务器IP，教你搭一套内网穿透服务！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+<iframe id="B-Video" src="//player.bilibili.com/player.html?isOutside=true&aid=113121469400785&bvid=BV1uR4jesE3Z&cid=25830556905&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="100%" height="480"> </iframe>
+
+大家好，我是技术UP主小傅哥。
+
+作为一个研发人员，我们经常有诉求把本机正在开发阶段的应用，通过本地部署的方式让外部其他人进行访问验证。尤其是一些给远程远程客户演示的时候，也是非常需要这样的服务。但本机并不是公网IP，都是内网的，怎么样外部访问呢？
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-idea-00.png" width="150px"/>
+</div>
+
+**FRP 内网穿透是什么？**
+
+内网穿透是一种技术手段，用于访问位于防火墙或路由器后面的本地网络（内网）中的设备或服务。通常情况下，内网中的设备无法直接通过公网（互联网）进行访问，从而实现隐私保护和安全性。内网穿透技术的目标是突破这一限制，使外部用户能够通过互联网访问内网中的服务或设备。
+
+虽然市面也有一些内网穿透的服务，包括； `natapp`、`coplar`、`花生壳`等，如果你不想折腾，也可以直接使用。但折腾一下，往往会省钱！
+
+## 1. 搭建脚本
+
+这里小傅哥使用了 `fatedier/frp` 0.60 版本进行搭建，提供了相关的运行脚本。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-frp-01.png" width="450px"/>
+</div>
+
+- 地址：[https://gitcode.net/KnowledgePlanet/road-map/xfg-dev-tech-frp](https://gitcode.net/KnowledgePlanet/road-map/xfg-dev-tech-frp)
+- 官网：[https://github.com/fatedier/frp](https://github.com/fatedier/frp)
+
+### 1.1 frps - 服务端
+
+```java
+# https://github.com/fatedier/frp/blob/dev/conf/frps_full_example.toml
+[common]
+# 监听端口
+bind_port = 7000
+# 面板端口
+dashboard_port = 7500
+# 登录面板的账号密码（修改成自己的）
+dashboard_user = admin
+dashboard_pwd = admin
+# token =
+```
+
+- token 如果设定了，需要保持客户端和服务端一致。
+
+```java
+# 命令执行 docker-compose -f docker-compose.yml up -d
+version: '3.9'
+services:
+  frps:
+    image: fatedier/frps:v0.60.0
+    hostname: frps
+    container_name: frps
+    volumes:
+      - "./config/frps.toml:/frps.toml"
+    command:
+      - "-c"
+      - "/frps.toml"
+    network_mode: "host"
+```
+
+- docker compose 按照脚本，走的是 `network_mode: "host"` 不需要额外指定端口。
+- 你需要在云服务器开放 7000、7500 以及需要映射出去的端口。比如客户端配置了 8080、9001 也需要在云服务器开放端口，这样才能访问进来。
+- 官网配置：[https://github.com/fatedier/frp/blob/dev/conf/frps_full_example.toml](https://github.com/fatedier/frp/blob/dev/conf/frps_full_example.toml) - 这里有很全的配置可以参考。
+
+### 1.2 frpc - 客户端
+
+```java
+# 服务端地址 https://github.com/fatedier/frp/blob/dev/conf/frpc_full_example.toml
+serverAddr = "117.72.37.243"
+# 服务端配置的bindPort
+serverPort = 7000
+# token =
+
+[[proxies]]
+# 代理应用名称，根据自己需要进行配置
+name = "xfg-dev-tech-01"
+# 代理类型 有tcp\udp\stcp\p2p
+type = "tcp"
+# 客户端代理应用IP
+localIP = "127.0.0.1"
+# 客户端代理应用端口
+localPort = 8080
+# 服务端反向代理端口；提供给外部访问
+remotePort = 8080
+
+[[proxies]]
+# 代理应用名称，根据自己需要进行配置
+name = "xfg-dev-tech-02"
+# 代理类型 有tcp\udp\stcp\p2p
+type = "tcp"
+# 客户端代理应用IP
+localIP = "127.0.0.1"
+# 客户端代理应用端口
+localPort = 9001
+# 服务端反向代理端口；提供给外部访问
+remotePort = 9001
+```
+
+- `localPort = 8080` 是本地应用的端口。
+- `remotePort = 8080` 是远程服务器要暴漏出去的端口，这个端口你可以按需调整。
+
+```java
+# 命令执行 docker-compose -f docker-compose.yml up -d
+version: '3.9'
+services:
+  frpc:
+    image: fatedier/frpc:v0.60.0
+    hostname: frpc
+    container_name: frpc
+    volumes:
+      - "./config/frpc.toml:/frpc.toml"
+    command:
+      - "-c"
+      - "/frpc.toml"
+    network_mode: "host"
+```
+
+- docker compose 安装，同样需要指定 `network_mode: "host"`
+
+## 2. 执行安装
+
+搭建FRP内网穿透需要一台云服务器，其实主要用的就是它的公网IP。不过现在的云服务器都非常便宜，36元就可以购买1年，还能抽取京豆。折算下来也就26元1年了！
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-frp-02.png" width="250px"/>
+</div>
+
+- 专属价：[http://618.gaga.plus/](http://618.gaga.plus/)
+- 云服务器使用：[https://bugstack.cn/md/road-map/docker.html](https://bugstack.cn/md/road-map/docker.html) - 已录制了相关 Docker、Portainer 环境安装，你可以直接对照操作。
+
+### 2.1 frps - 云服务器安装
+
+#### 2.1.1 上传文件
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-frp-03.png" width="750px"/>
+</div>
+
+
+#### 2.1.2 执行脚本
+
+```java
+[root@lavm-aqhgp9nber frps]# docker-compose -f docker-compose.yml up -d
+[+] Running 1/1
+ ✔ Container frps  Started   
+```
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-frp-04.png" width="750px"/>
+</div>
+
+你可以进入📃查看启动日志；
+
+
+```java
+WARNING: ini format is deprecated and the support will be removed in the future, please use yaml/json/toml format instead!
+2024-09-08 09:51:50.581 [I] [frps/root.go:105] frps uses config file: /frps.toml
+2024-09-08 09:51:50.674 [I] [server/service.go:237] frps tcp listen on 0.0.0.0:7000
+2024-09-08 09:51:50.674 [I] [frps/root.go:114] frps started successfully
+2024-09-08 09:51:50.674 [I] [server/service.go:351] dashboard listen on 0.0.0.0:7500
+2024-09-08 09:51:52.429 [I] [server/service.go:576] [cd9f610f66475f3a] client login info: ip [223.72.84.77:10816] version [0.60.0] hostname [] os [linux] arch [amd64]
+2024-09-08 09:51:52.447 [I] [proxy/tcp.go:82] [cd9f610f66475f3a] [xfg-dev-tech-02] tcp proxy listen port [9001]
+2024-09-08 09:51:52.448 [I] [server/control.go:399] [cd9f610f66475f3a] new proxy [xfg-dev-tech-02] type [tcp] success
+2024-09-08 09:51:52.448 [I] [proxy/tcp.go:82] [cd9f610f66475f3a] [xfg-dev-tech-01] tcp proxy listen port [8080]
+2024-09-08 09:51:52.448 [I] [server/control.go:399] [cd9f610f66475f3a] new proxy [xfg-dev-tech-01] type [tcp] success
+```
+
+#### 2.1.3 开放端口
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-frp-05.png" width="750px"/>
+</div>
+
+- 进入云服务器防火墙，开放访问端口。
+
+### 2.2 frpc - 本地安装客户端
+
+#### 2.2.1 执行脚本
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-frp-06.png" width="650px"/>
+</div>
+
+- 注意 frpc.toml 是配置服务器的ip和本机应用的ip信息。你需要修改 serverAddr 的 IP 地址，为你的服务器公网 IP 地址。
+- 如果你的 IntelliJ IDEA 带有绿色箭头，且本机也安装了 Docker 那么可以直接安装 frpc 客户端。
+
+#### 2.2.2 客户端日志
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-frp-07.png" width="650px"/>
+</div>
+
+```java
+2024-09-08 10:00:16.472 [I] [sub/root.go:142] start frpc service for config file [/frpc.toml]
+2024-09-08 10:00:16.473 [I] [client/service.go:295] try to connect to server...
+2024-09-08 10:00:16.533 [I] [client/service.go:287] [adab2679b41d410f] login to server success, get run id [adab2679b41d410f]
+2024-09-08 10:00:16.534 [I] [proxy/proxy_manager.go:173] [adab2679b41d410f] proxy added: [xfg-dev-tech-01 xfg-dev-tech-02]
+2024-09-08 10:00:16.550 [I] [client/control.go:168] [adab2679b41d410f] [xfg-dev-tech-01] start proxy success
+2024-09-08 10:00:16.550 [I] [client/control.go:168] [adab2679b41d410f] [xfg-dev-tech-02] start proxy success
+```
+
+#### 2.2.3 服务端日志
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-frp-04.png" width="850px"/>
+</div>
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-frp-08.png" width="850px"/>
+</div>
+
+- 客户端启动后，你可以进入到服务端 frps 查看日志，这个时候会注册进来客户端信息。
+
+**你还可以进入 frp 管理后台查看**
+
+地址：[http://117.72.37.243:7500/static/#/](http://117.72.37.243:7500/static/#/) - 修改为你的服务器ip进行访问。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-frp-09.png" width="950px"/>
+</div>
+
+- 这里也可以看到你注册上来的各项信息。
+
+## 3. 测试验证
+
+### 3.1 部署应用
+
+在工程中提供了 xfg-dev-tech-app 的应用，你可以本地执行 docker 脚本进行镜像构建和部署。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-frp-10.png" width="950px"/>
+</div>
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-frp-11.png" width="950px"/>
+</div>
+
+- 如图，执行1、2、3步骤，打包、构建和部署应用。
+
+### 3.2 访问验证
+
+#### 3.2.1 本地访问
+
+地址：[http://127.0.0.1:8080/api/test](http://127.0.0.1:8080/api/test)
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-frp-12.png" width="550px"/>
+</div>
+
+#### 3.2.2 穿透访问
+
+地址：[http://117.72.37.243:8080/api/test](http://117.72.37.243:8080/api/test)
+
+## 4. 同类产品
+
+- [EasyTier 一个简单、安全、去中心化的内网穿透 VPN 组网方案](https://www.easytier.top/)
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-frp-13.png" width="550px"/>
+</div>
+
diff --git a/docs/md/road-map/git.md b/docs/md/road-map/git.md
index 950e8d265..ce8b9be77 100644
--- a/docs/md/road-map/git.md
+++ b/docs/md/road-map/git.md
@@ -1,6 +1,6 @@
 ---
 title: Git
-lock: no
+lock: need
 ---
 
 # Git 使用说明和配置
@@ -10,7 +10,23 @@ lock: no
 
 > 沉淀、分享、成长，让自己和他人都能有所收获！😄
 
-# Git 使用教程
+<iframe id="B-Video" src="//player.bilibili.com/player.html?isOutside=true&aid=113087713643443&bvid=BV1idHUeLECY&cid=25755911382&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="100%" height="480"> </iframe>
+
+大家伙，我是技术UP主小傅哥。
+
+**不会Git操作的伙伴，轻则写不了代码，重则误操作搞丢自己的代码或者干掉别人的代码。** 因为进入公司后，就不只是你一个人在一个工程上写代码，而是所有这个项目组的伙伴都需要在这个工程上写代码，大家要在统一的Git的规范完成代码开发和提交。—— 🤨 不信的话，进入公司乱删个Git分支或者随便任何一个分支提交代码试试。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-v7-01.gif" width="150px">
+</div>
+
+**Git的作用是什么？**
+
+你可以想象下，当你有10个小伙伴都需要在一个 txt 文档里，写一份老师👩🏻‍🏫上课的笔记📒，把信息进行汇总、互相完善、用于课后学习。那么怎么保证大家做的课堂内容都能顺利的写在一份 txt 呢，而且不要互相删除，也不要丢失谁的信息呢？
+
+这个就是 Git 的用途。Git 是一种分布式版本控制系统，用于高效地管理和跟踪源代码和文件的历史记录，支持多人协作开发及分支管理，提供可靠的版本回退和合并机制，从而提高开发效率和代码质量。
+
+## 1. Git 起源故事
 
 讲到 Git 就不得不提一下 Linux，因为如果没有 Linux 也就没有 Git 的诞生，这里是有一段 **10天** 写出 Git 的故事！
 
@@ -24,25 +40,37 @@ lock: no
 
 有了 Git 以后，GitHub 平台也于2007年10月1日开始开发。网站于2008年2月以beta版本开始上线，4月份正式上线。GitHub 里面的项目可以通过标准的 Git 命令进行访问和操作。—— 这就是 Linux、Git、Github 的故事。
 
-## 一、软件安装
+## 2. 软件安装
+
+Git 是一个软件工具，在使用前需要进行安装。
 
-地址：[https://git-scm.com/downloads](https://git-scm.com/downloads) - `选择需要的版本下载`
+- 地址：[https://git-scm.com/downloads](https://git-scm.com/downloads) - `选择需要的版本下载` 网盘资源：[https://www.alipan.com/s/LqwsNfHRx54](https://www.alipan.com/s/LqwsNfHRx54) - `也提供了 Git 软件，在 dev-ops -> 环境 -> git 下`
+- 演示：[https://learngitbranching.js.org/](https://learngitbranching.js.org/) - `可直接查看动画效果，引导式学习Git命令操作。`
 
-### 1. Mac
+**配置代理**
+
+```java
+git config --global http.proxy ip:port
+git config --global https.proxy ip:port
+```
+
+- 如果你有代理地址可以配置
+
+### 2.1 Mac
 
 ```java
 # 如果你没有 brew 命令，则需要先安装下；https://brew.sh/index_zh-cn
 brew install git
 ```
 
-### 2. Windows
+### 2.2 Windows
 
 - [32-bit Git for Windows Setup](https://github.com/git-for-windows/git/releases/download/v2.41.0.windows.1/Git-2.41.0-32-bit.exe)
 - [64-bit Git for Windows Setup](https://github.com/git-for-windows/git/releases/download/v2.41.0.windows.1/Git-2.41.0-64-bit.exe)
 
-### 3. Linux
+### 2.3 Linux
 
-### Debian/Ubuntu
+#### Debian/Ubuntu
 
 获取适用于您的 Debian/Ubuntu 版本的最新稳定版本
 
@@ -57,63 +85,329 @@ brew install git
 # apt update; apt install git
 ```
 
-### Red Hat Enterprise Linux, Oracle Linux, CentOS, Scientific Linux, et al.
+#### Centos 
+
+```java
+sudo yum install git
+```
+
+## 3. 配置账户
+
+当你拿到一个Git的仓库（Github、Gitcode、Gitee、GitLab），让你克隆（git clone）代码的时候，不要`虾呵呵`的上去就点个zip下载。
 
-RHEL 及其衍生版本通常提供旧版本的 git。您可以[下载 tarball](https://www.kernel.org/pub/software/scm/git/)并从源代码构建，或者使用第 3 方存储库（例如[IUS 社区项目）](https://ius.io/)来获取更新版本的 git。
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-01.png" width="700px">
+</div>
+
+- zip 下载的代码，只是当前分支的，下载后用 IntelliJ IDEA 打开也没有 Git 标识，不能进行仓库的pull、push、checkout等操作。
+- 另外对于一些工程内容比较大的项目，直接 zip 下载还可能会失败。
+
+>你要做都是配置账户 ssh 秘钥，或者下载的时候输入 git 仓库账号密码（目前很多仓库为了安全，不在支持账号密码方式下载代码了。）
+
+**注意**：gitcode.com、github.com 都需要创建访问令牌当做账号密码的密码使用。而不是直接使用账号里你设置的那个密码。
 
-## 二、配置账户
+如 [https://gitcode.com/setting/token-classic](https://gitcode.com/setting/token-classic)
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-20.png" width="850px">
+</div>
+
+### 1. 配置git账户
 
 ```java
-# 安装完成后，配置账户，在命令行输入：
-$ git config --global user.name "Your Name"
-$ git config --global user.email "email@example.com"
+[root@lavm-aqhgp9nber ~]# git config --global user.name "fuzhengwei"
+[root@lavm-aqhgp9nber ~]# git config --global user.email "184172133@qq.com"
 ```
 
-## 三、生成SSH
+- 用户名和邮箱，更换为你的代码库注册使用的名称和邮箱📮。
+
+### 2. 创建ssh秘钥
 
-SSH 用于本地仓库和远程进行链接验证，Github、Gitee、Gitcode 都可以使用这种安全方式操作仓库
+```java
+[root@lavm-aqhgp9nber ~]# ssh-keygen -t rsa -C "184172133@qq.com"
+Generating public/private rsa key pair.
+Enter file in which to save the key (/root/.ssh/id_rsa): 
+Enter passphrase (empty for no passphrase): 
+Enter same passphrase again: 
+Your identification has been saved in /root/.ssh/id_rsa.
+Your public key has been saved in /root/.ssh/id_rsa.pub.
+The key fingerprint is:
+SHA256:lgf+3a1srOvDD0znv+/jiR3iwMaZtxW94k9FI1HzJAk 184172133@qq.com
+The key's randomart image is:
++---[RSA 2048]----+
+|            Eoo+.|
+|              ooo|
+|        .    . .o|
+|       . o    ..o|
+|        S . . ..o|
+|       . oo+o+ .+|
+|          .O+=o=.|
+|          . Bo@+o|
+|           .+@*BB|
++----[SHA256]-----+
+```
+
+- 命令：`ssh-keygen -t rsa -C "184172133@qq.com"`
+- 操作：一路敲回车同意就可以了。
 
-### 1. 创建
+### 3. 获取ssh秘钥
 
 ```java
-# 记得换成你的邮箱
-ssh-keygen -t rsa -C "184172133@qq.com"
+[root@lavm-aqhgp9nber ~]# cat /root/.ssh/id_rsa.pub 
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7eYQiDe46Jq5CJ6vXtIiM0hxUKKgCoSFIkSQucsZoLjhW53guxmZ0aR+gUZb/M8Xgrk9WMxc32KqQasFy0xPo86Hxagd40fPz+XdwOyokEJC5He6F1********CkATF2YgEdtcRW2RPICjtLr*******DWkS8ez 184172133@qq.com
 ```
 
+- 命令：`ssh-keygen -t rsa -C "184172133@qq.com"`
+- 操作：`Your public key has been saved in /root/.ssh/id_rsa.pub.` 按照提示地址，获取 pub 公钥。如果是linux就通过 cat 获取。如果是本机电脑就按照路径打开。
+- 注意：`.ssh` 点开头的文件夹是隐藏文件，Windows/Mac 都可以设置查看隐藏文件。Windows 是设置里配置，Mac 是通过 `Shift + Command + .` 开启和关闭查看隐藏文件。
+
+### 4. 配置ssh秘钥
+
+#### 4.1 gitcode.net
+
 <div align="center">
-    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-git-01.png?raw=true" width="550px">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-02.png" width="600px">
 </div>
 
-- 傻瓜式同意，点击就可以。
+- 秘钥配置地址：[https://gitcode.net/-/profile/keys](https://gitcode.net/-/profile/keys)
+
+#### 4.2 github.com
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-03.png" width="600px">
+</div>
 
-### 2. 查看
+- 秘钥配置地址：[https://github.com/settings/keys](https://github.com/settings/keys)
+
+---
+
+其他的各个代码库平台也都类似，找到配置 ssh 秘钥的地方，把 id_rsa.pub 内容填充进去即可。
+
+## 4. 检出代码 - 命令
+
+通过在公司工作，大家会说检出代码，不会说下载。因为检出对应的是 git clone 命令，而下载是 http 直接点击链接。在我们使用一些图形化的 git 界面操作代码检出的时候，走的也是 git clone 命令。
+
+### 4.1 检出地址
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-04.png" width="600px">
+</div>
+
+- 地址：选择工程的 ssh 地址，这个是你配置 ssh 秘钥后的检出方式。
+
+### 4.2 检出命令
+
+#### 4.2.1 默认检出（master）
+
+```java
+git clone git@github.com:fuzhengwei/openai-code-review.git
+```
+
+- 你可以复制你需要的工程地址进行检出。
+
+#### 4.2.2 指定分支
 
 ```java
-fuzhengwei@MacBook-Pro ~ % cd ~/.ssh 
-fuzhengwei@MacBook-Pro .ssh % ls
-184172133@qq.com-gitcode__net		config
-184172133@qq.com-gitcode__net.pub	fuzhengwei-GitHub
-fuzhengwei@MacBook-Pro .ssh % pwd
-/Users/fuzhengwei/.ssh
+git clone -b 240720-xfg-init-project git@github.com:fuzhengwei/openai-code-review.git
 ```
 
-进入 `/Users/fuzhengwei/.ssh` 找到 rsa.pub 文件
+- 添加 `-b 分支名`，可以指定分支名称检出。
+
+#### 4.2.3 其他命令
 
-注意：如果你进入 Mac 电脑文件夹，看不见这个隐藏文件。则可以通过 `Shift + Command + .` 打开隐藏文件，就看见 `.ssh` 文件夹了。
+- git branch：查看当前工程分支
+- git branch -r：查看远程分支列表
+- git pull：拉取分支最新代码
+- git push：推送本地变更的代码。【这样的操作有图形化界面，更方便】
+- git fetch：获取远程仓库最新分支变动，这个很有用。在你想操作分支创建新或者看其他人的分支时候，先操作下 git fetch 看下最新的分支变动。
+- git merge origin/master：将远程分支的 master 代码合并到本地分支 master 上。【类似这样的操作有图形化界面，点击即可】
 
-### 3. 使用
+## 5. 检出代码 - IntelliJ IDEA
 
-打开 ras.pub 文件，复制内容到仓库；
+IntelliJ IDEA 本身就提供了 Git 的图形化操作，也是最简单最常用的方式。只要你的代码是通过 Git 检出的，那么通过配置 Git 的 IntelliJ IDEA 打开工程，就会自动的被 Git 管理。
 
-- Github：[https://github.com/settings/ssh/new](https://github.com/settings/ssh/new)
-- Gitcode：[https://gitcode.net/-/profile/keys](https://gitcode.net/-/profile/keys)
-- Gitee：[https://gitee.com/profile/sshkeys](https://gitee.com/profile/sshkeys)
+### 5.1 配置 Git
 
 <div align="center">
-    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-git-02.png?raw=true" width="850px">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-05.png" width="700px">
 </div>
 
-## 四、操作界面
+- 像是 Mac 电脑会自动默认的配置好 IntelliJ IDEA Git 直接使用即可，如果你的电脑在 IntelliJ IDEA 打开工程后，提示没有 Git 则可进入设置手动配置。
+- 配置后，点击 Test 可以测试出 Git 的版本。
+
+### 5.2 检出代码
+
+#### 5.2.1 方式1；打开工程前
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-06.png" width="700px">
+</div>
+
+#### 5.2.2 方式2；打开工程后
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-07.png" width="400px">
+</div>
+
+- 打开工程后，也可以通过菜单栏中的 Git 进行检出操作。
+
+### 5.3 图形界面
+
+#### 5.3.1 分支使用
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-08.png" width="750px">
+</div>
+
+#### 5.3.2 提交代码
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-09.png" width="600px">
+</div>
+
+#### 5.3.3 查看记录
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-10.png" width="750px">
+</div>
+
+#### 5.3.4 查看对比
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-11.png" width="750px">
+</div>
+
+- 这个代码对比非常适合代码评审，也可以用于自己学习代码。可以知道任意两个分支的代码差异，也就知道了代码上一次是什么样，这一次是做了什么开发。
+
+#### 5.3.5 合并分支
+
+在公司中很多时候是大家一起在一个工程开发代码，那么这个时候就会涉及合并代码的。如果有多人共同开发一个接口方法，就会在合并的时候产生冲突。所以要特别注意。
+
+注意，📢在Git中，`merge`和`rebase`是两种用于合并分支变更的方法。每种方法都有其特定的用途和行为：
+
+Merge
+
+- **概念**: `merge`命令用于将一个分支的更改合并到当前分支，通常会生成一次新的合并提交（commit），从而保留分支历史。
+- **历史记录**: 使用`merge`会保留所有开发历史记录，包括分支点，这使得历史记录图呈现出一个分叉和合并的树状结构。
+- **使用场景**: 
+  - 当你想保留完整的历史记录，了解如何以及何时进行了分支。
+  - 通常用于将分支合并到主分支(如`main`或`master`)时，以保留分支的历史上下文。
+- **命令**: 
+  ```bash
+  git checkout main
+  git merge feature-branch
+  ```
+
+Rebase
+
+- **概念**: `rebase`命令用于重新定位一系列的提交，可以将分支上的更改申请到另一分支的顶端，因而能得到更线性的历史。
+- **历史记录**: Rebase重新写了提交历史（改变了提交的父提交），这会导致更线性的提交历史，从而更清晰，但会丢失分支合并信息。
+- **使用场景**:
+  - 当你希望提交历史更加简洁和线性。
+  - 合并特性分支到主分支前用以避免杂乱的分支合并历史。
+  - 需要小心在共享分支上使用，因为重写的提交历史会影响他人。
+- **命令**:
+  ```bash
+  git checkout feature-branch
+  git rebase main
+  ```
+
+选择何时使用
+
+- **Merge**适合用于保持完整的提交历史，不改变现有提交的哈希。
+- **Rebase**适合用于清理提交历史，通常在提交尚未推送至共享存储库时使用。
+
+一般情况下，对于已对外分享的分支，尤其是共享存储库中的`main`或`master`分支，尽量避免使用`rebase`。而对于个人开发的特性分支，`rebase`可以帮助维护一个清晰的提交历史。
+
+**普通合并**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-12.png" width="750px">
+</div>
+
+- 在实际的开发中，大家承接新的需求，会从master拉一个新的分支。拉取后，开始编写代码，完成开发后提交。
+- 之后切换到master分支，通过把自己的开发的分支合并回master分支进行提交。
+- 注意：如果多人开发，同时修改一个类，可能会引起合并冲突，这个审核要点开类，查看冲突进行合并，不要把自己和他人的代码合并丢失。
+
+**冲突合并**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-22.png" width="950px">
+</div>
+
+1. 选择，你要从哪个分支合并到 test 分支。右键选择 Merge into test
+2. 如果你合并到test分支的代码，有其他人也在同一行做了改变或者格式化了代码，就会弹出一个合并冲突。这个时候你需要点 Merge 进行合并。
+3. 在点击 Merge 后，你会看到具体冲突的代码是什么，你可以有选择的从左右合并到中，最后点击 Apply。这个时候要注意不要把让别人的代码合并丢喽。
+4. 合并完的代码，不要直接 push，你要先本地 install 看是否可以打包。以及如果可以运行的话，可以本地先跑一下。 最后 push 提交合并代码即可。
+
+#### 5.3.6 回滚分支
+
+回滚提交和回滚push
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-13.png" width="750px">
+</div>
+
+如果出现了合并代码冲突后，丢失了代码，那么这个时候一般要进行回滚操作，重新合并。
+
+虽然 Git 提供了回滚代码的功能，但一定要谨慎使用。怎么谨慎？第一个谨慎就是 push 的代码一定确保可以构建和运行，否则不要 push！第二个谨慎是要回滚代码，需要和团队中对应的伙伴打招呼，避免影响别人测试或者上线。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-23.png" width="950px">
+</div>
+
+1. 先选择要在哪个分支的哪次提交上进行回滚。这里选择的是 test 分支上的提交进行回滚。
+2. 这里选择 Hard 回滚。因为我们所有的都是合并到 test 分支，所以 test 分支丢失也没问题。可以重新合并。但要和同组伙伴提前说明。
+3. 回滚后，你会看到代码只剩下从回滚往下的提交内容了。
+4. 回滚后，你不能直接 push 提交了，这个之后会报错；`fast-forward` 因为此时本地分支落后于远程分支。
+5. 所以要通过 `git push origin HEAD --force` 进行强制提交。或者你可以把 test 的远程分支删掉，之后在提交。
+
+## 6. 提交工程 - IntelliJ IDEA
+
+那么首次创建的工程怎么提交到代码库呢？🤔
+
+### 6.1 创建本地仓库
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-14.png" width="550px">
+</div>
+
+- Create Git repository 创建一个本地的暂存库。你可以把开发的内容暂时提交到本地仓库中。
+
+### 6.3 提交本地代码
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-15.png" width="550px">
+</div>
+
+- 把本地仓库提交到本地代码库待提交列表中。
+- 后续你在创建的代码，会默认自动加入进来。*如果你是通过打开文件夹复制进去的，不会被添加，需要手动 +Add*
+- 添加后就可以参考 5.3 中的操作提交代码了。
+
+### 6.4 创建远程仓库
+
+你可以选择 GitHub/GitCode/Gitee/GitLab 任意地方创建自己的工程库。教程；
+- [https://bugstack.cn/md/road-map/github.html](https://bugstack.cn/md/road-map/github.html)
+- [https://bugstack.cn/md/road-map/gitcode.html](https://bugstack.cn/md/road-map/gitcode.html)
+- [https://bugstack.cn/md/road-map/gitee.html](https://bugstack.cn/md/road-map/gitee.html)
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-16.png" width="650px">
+</div>
+
+### 6.5 推送本地工程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-17.png" width="650px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-18.png" width="650px">
+</div>
+
+- 最后推送完成就可以看到自己的代码进入仓库中了！
+
+## 7. 操作界面 - git-gui
 
 Git 附带了用于提交 ( [git-gui](https://git-scm.com/docs/git-gui) ) 和浏览 ( [gitk](https://git-scm.com/docs/gitk) ) 的内置 GUI 工具，但也有一些第三方工具可供用户寻求特定于平台的体验。
 
@@ -122,12 +416,31 @@ Git 附带了用于提交 ( [git-gui](https://git-scm.com/docs/git-gui) ) 和浏
 </div>
 
 - Git 提供了操作的客户端界面，你可以按需下载使用。
+- 地址：[https://git-scm.com/docs/git-gui](https://git-scm.com/docs/git-gui)
+
+## 8. 分支命名
+
+不同公司中对Git的使用分支命名规范也略有差异，不过整体都会分为；`上线`、`预发`、`开发`、`测试`，这样几个分支。如图是一种比较简单使用的拉取分支方式。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-24.png" width="850px">
+</div>
 
-## 五、开发规范
+- master/main 作为主分支，不可直接修改代码代码，只能从分支合并到主分支进行进行提交。同时，master 分支的合并需要进行审批，审批后才能合并。
+- 开发前，先从 master 分支，拉一个开发分支。`2024/10/11/xfg-xxx` 使用带有斜线的分支命名会自动创建文件夹，对于多人开发的项目，可以直接归档。
+- 后开发，也就是研发已经完成了本地的验证。进行测试时，可以把研发的开发分支合并到 test 分支，提交、部署、测试。遇到测试bug，需要回到可发分支修改代码，之后合并到 test 分支部署验证。
+- pre/release 预发分支，用于测试完成后，把研发的开发分支合并到预发分支进行预发上线，上线后测试人员进行验证。最终完成验证后，把开发分支合并到 master 分支，并需要由架构师对合并代码审批通过。最后进行上线开量验证。
+- 如果是修复bug的，可以添加一个 `fix-用户名缩写-具体功能`
 
-**分支命名**：日期_姓名首字母缩写_功能单词，如：`210804_xfg_buildFramework`
+## 9. 提交规范
 
-**提交规范**：`作者，type: desc` 如：`小傅哥，fix：修复查询用户信息逻辑问题` *参考Commit message 规范*
+保持一个标准的统一的规范提交代码，在后续的评审、检查、合并，都会非常容易处理。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-git-21.png" width="450px">
+</div>
+
+**提交规范**：`type:【需求名】desc #id` 如：`feat:【抽奖算法】O1、Ologn 时间复杂度算法实现 #需求id（github pr/行云等会有自动关联）` *参考Commit message 规范*
 
 ```java
 # 主要type
@@ -148,149 +461,17 @@ ci:       与CI（持续集成服务）有关的改动
 chore:    不修改src或者test的其余修改，例如构建过程或辅助工具的变动
 ```
 
-## 六、操作手册
+> 前提通知，谨慎回滚。如果是回滚 Master 更要特别小心，别把工作回滚丢了。
+
+## 10. 操作手册
 
 - 文档：[https://git-scm.com/book/zh/v2](https://git-scm.com/book/zh/v2) - `可以直接对照着操作，练习命令`
 - PDF：[https://github.com/progit/progit2-zh/releases/download/2.1.62/progit.pdf](https://github.com/progit/progit2-zh/releases/download/2.1.62/progit.pdf)
+- 演示：[https://learngitbranching.js.org/](https://learngitbranching.js.org/) - `可直接查看动画效果，引导式学习Git命令操作。`
 
-### 1. [起步](https://git-scm.com/book/zh/v2/起步-关于版本控制)
-
-- 1.1 [关于版本控制](https://git-scm.com/book/zh/v2/起步-关于版本控制)
-- 1.2 [Git 简史](https://git-scm.com/book/zh/v2/起步-Git-简史)
-- 1.3 [Git 是什么？](https://git-scm.com/book/zh/v2/起步-Git-是什么？)
-- 1.4 [命令行](https://git-scm.com/book/zh/v2/起步-命令行)
-- 1.5 [安装 Git](https://git-scm.com/book/zh/v2/起步-安装-Git)
-- 1.6 [初次运行 Git 前的配置](https://git-scm.com/book/zh/v2/起步-初次运行-Git-前的配置)
-- 1.7 [获取帮助](https://git-scm.com/book/zh/v2/起步-获取帮助)
-- 1.8 [总结](https://git-scm.com/book/zh/v2/起步-总结)
-
-### 2. [Git 基础](https://git-scm.com/book/zh/v2/Git-基础-获取-Git-仓库)
-
-- 2.1 [获取 Git 仓库](https://git-scm.com/book/zh/v2/Git-基础-获取-Git-仓库)
-- 2.2 [记录每次更新到仓库](https://git-scm.com/book/zh/v2/Git-基础-记录每次更新到仓库)
-- 2.3 [查看提交历史](https://git-scm.com/book/zh/v2/Git-基础-查看提交历史)
-- 2.4 [撤消操作](https://git-scm.com/book/zh/v2/Git-基础-撤消操作)
-- 2.5 [远程仓库的使用](https://git-scm.com/book/zh/v2/Git-基础-远程仓库的使用)
-- 2.6 [打标签](https://git-scm.com/book/zh/v2/Git-基础-打标签)
-- 2.7 [Git 别名](https://git-scm.com/book/zh/v2/Git-基础-Git-别名)
-- 2.8 [总结](https://git-scm.com/book/zh/v2/Git-基础-总结)
-
-### 3. [Git 分支](https://git-scm.com/book/zh/v2/Git-分支-分支简介)
-
-- 3.1 [分支简介](https://git-scm.com/book/zh/v2/Git-分支-分支简介)
-- 3.2 [分支的新建与合并](https://git-scm.com/book/zh/v2/Git-分支-分支的新建与合并)
-- 3.3 [分支管理](https://git-scm.com/book/zh/v2/Git-分支-分支管理)
-- 3.4 [分支开发工作流](https://git-scm.com/book/zh/v2/Git-分支-分支开发工作流)
-- 3.5 [远程分支](https://git-scm.com/book/zh/v2/Git-分支-远程分支)
-- 3.6 [变基](https://git-scm.com/book/zh/v2/Git-分支-变基)
-- 3.7 [总结](https://git-scm.com/book/zh/v2/Git-分支-总结)
-
-### 4. [服务器上的 Git](https://git-scm.com/book/zh/v2/服务器上的-Git-协议)
-
-- 4.1 [协议](https://git-scm.com/book/zh/v2/服务器上的-Git-协议)
-- 4.2 [在服务器上搭建 Git](https://git-scm.com/book/zh/v2/服务器上的-Git-在服务器上搭建-Git)
-- 4.3 [生成 SSH 公钥](https://git-scm.com/book/zh/v2/服务器上的-Git-生成-SSH-公钥)
-- 4.4 [配置服务器](https://git-scm.com/book/zh/v2/服务器上的-Git-配置服务器)
-- 4.5 [Git 守护进程](https://git-scm.com/book/zh/v2/服务器上的-Git-Git-守护进程)
-- 4.6 [Smart HTTP](https://git-scm.com/book/zh/v2/服务器上的-Git-Smart-HTTP)
-- 4.7 [GitWeb](https://git-scm.com/book/zh/v2/服务器上的-Git-GitWeb)
-- 4.8 [GitLab](https://git-scm.com/book/zh/v2/服务器上的-Git-GitLab)
-- 4.9 [第三方托管的选择](https://git-scm.com/book/zh/v2/服务器上的-Git-第三方托管的选择)
-- 4.10 [总结](https://git-scm.com/book/zh/v2/服务器上的-Git-总结)
-
-### 5. [分布式 Git](https://git-scm.com/book/zh/v2/分布式-Git-分布式工作流程)
-
-- 5.1 [分布式工作流程](https://git-scm.com/book/zh/v2/分布式-Git-分布式工作流程)
-- 5.2 [向一个项目贡献](https://git-scm.com/book/zh/v2/分布式-Git-向一个项目贡献)
-- 5.3 [维护项目](https://git-scm.com/book/zh/v2/分布式-Git-维护项目)
-- 5.4 [总结](https://git-scm.com/book/zh/v2/分布式-Git-总结)
-
-### 6. [GitHub](https://git-scm.com/book/zh/v2/GitHub-账户的创建和配置)
-
-- 6.1 [账户的创建和配置](https://git-scm.com/book/zh/v2/GitHub-账户的创建和配置)
-- 6.2 [对项目做出贡献](https://git-scm.com/book/zh/v2/GitHub-对项目做出贡献)
-- 6.3 [维护项目](https://git-scm.com/book/zh/v2/GitHub-维护项目)
-- 6.4 [管理组织](https://git-scm.com/book/zh/v2/GitHub-管理组织)
-- 6.5 [脚本 GitHub](https://git-scm.com/book/zh/v2/GitHub-脚本-GitHub)
-- 6.6 [总结](https://git-scm.com/book/zh/v2/GitHub-总结)
-
-### 7. [Git 工具](https://git-scm.com/book/zh/v2/Git-工具-选择修订版本)
-
-- 7.1 [选择修订版本](https://git-scm.com/book/zh/v2/Git-工具-选择修订版本)
-- 7.2 [交互式暂存](https://git-scm.com/book/zh/v2/Git-工具-交互式暂存)
-- 7.3 [贮藏与清理](https://git-scm.com/book/zh/v2/Git-工具-贮藏与清理)
-- 7.4 [签署工作](https://git-scm.com/book/zh/v2/Git-工具-签署工作)
-- 7.5 [搜索](https://git-scm.com/book/zh/v2/Git-工具-搜索)
-- 7.6 [重写历史](https://git-scm.com/book/zh/v2/Git-工具-重写历史)
-- 7.7 [重置揭密](https://git-scm.com/book/zh/v2/Git-工具-重置揭密)
-- 7.8 [高级合并](https://git-scm.com/book/zh/v2/Git-工具-高级合并)
-- 7.9 [Rerere](https://git-scm.com/book/zh/v2/Git-工具-Rerere)
-- 7.10 [使用 Git 调试](https://git-scm.com/book/zh/v2/Git-工具-使用-Git-调试)
-- 7.11 [子模块](https://git-scm.com/book/zh/v2/Git-工具-子模块)
-- 7.12 [打包](https://git-scm.com/book/zh/v2/Git-工具-打包)
-- 7.13 [替换](https://git-scm.com/book/zh/v2/Git-工具-替换)
-- 7.14 [凭证存储](https://git-scm.com/book/zh/v2/Git-工具-凭证存储)
-- 7.15 [总结](https://git-scm.com/book/zh/v2/Git-工具-总结)
-
-### 8. [自定义 Git](https://git-scm.com/book/zh/v2/自定义-Git-配置-Git)
-
-- 8.1 [配置 Git](https://git-scm.com/book/zh/v2/自定义-Git-配置-Git)
-- 8.2 [Git 属性](https://git-scm.com/book/zh/v2/自定义-Git-Git-属性)
-- 8.3 [Git 钩子](https://git-scm.com/book/zh/v2/自定义-Git-Git-钩子)
-- 8.4 [使用强制策略的一个例子](https://git-scm.com/book/zh/v2/自定义-Git-使用强制策略的一个例子)
-- 8.5 [总结](https://git-scm.com/book/zh/v2/自定义-Git-总结)
-
-### 9. [Git 与其他系统](https://git-scm.com/book/zh/v2/Git-与其他系统-作为客户端的-Git)
-
-- 9.1 [作为客户端的 Git](https://git-scm.com/book/zh/v2/Git-与其他系统-作为客户端的-Git)
-- 9.2 [迁移到 Git](https://git-scm.com/book/zh/v2/Git-与其他系统-迁移到-Git)
-- 9.3 [总结](https://git-scm.com/book/zh/v2/Git-与其他系统-总结)
-
-### 10. [Git 内部原理](https://git-scm.com/book/zh/v2/Git-内部原理-底层命令与上层命令)
-
-- 10.1 [底层命令与上层命令](https://git-scm.com/book/zh/v2/Git-内部原理-底层命令与上层命令)
-- 10.2 [Git 对象](https://git-scm.com/book/zh/v2/Git-内部原理-Git-对象)
-- 10.3 [Git 引用](https://git-scm.com/book/zh/v2/Git-内部原理-Git-引用)
-- 10.4 [包文件](https://git-scm.com/book/zh/v2/Git-内部原理-包文件)
-- 10.5 [引用规范](https://git-scm.com/book/zh/v2/Git-内部原理-引用规范)
-- 10.6 [传输协议](https://git-scm.com/book/zh/v2/Git-内部原理-传输协议)
-- 10.7 [维护与数据恢复](https://git-scm.com/book/zh/v2/Git-内部原理-维护与数据恢复)
-- 10.8 [环境变量](https://git-scm.com/book/zh/v2/Git-内部原理-环境变量)
-- 10.9 [总结](https://git-scm.com/book/zh/v2/Git-内部原理-总结)
-
-### A1. [附录 A: 在其它环境中使用 Git](https://git-scm.com/book/zh/v2/附录-A%3A-在其它环境中使用-Git-图形界面)
-
-- A1.1 [图形界面](https://git-scm.com/book/zh/v2/附录-A%3A-在其它环境中使用-Git-图形界面)
-- A1.2 [Visual Studio 中的 Git](https://git-scm.com/book/zh/v2/附录-A%3A-在其它环境中使用-Git-Visual-Studio-中的-Git)
-- A1.3 [Visual Studio Code 中的 Git](https://git-scm.com/book/zh/v2/附录-A%3A-在其它环境中使用-Git-Visual-Studio-Code-中的-Git)
-- A1.4 [Eclipse 中的 Git](https://git-scm.com/book/zh/v2/附录-A%3A-在其它环境中使用-Git-Eclipse-中的-Git)
-- A1.5 [IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine 中的 Git](https://git-scm.com/book/zh/v2/附录-A%3A-在其它环境中使用-Git-IntelliJ-%2F-PyCharm-%2F-WebStorm-%2F-PhpStorm-%2F-RubyMine-中的-Git)
-- A1.6 [Sublime Text 中的 Git](https://git-scm.com/book/zh/v2/附录-A%3A-在其它环境中使用-Git-Sublime-Text-中的-Git)
-- A1.7 [Bash 中的 Git](https://git-scm.com/book/zh/v2/附录-A%3A-在其它环境中使用-Git-Bash-中的-Git)
-- A1.8 [Zsh 中的 Git](https://git-scm.com/book/zh/v2/附录-A%3A-在其它环境中使用-Git-Zsh-中的-Git)
-- A1.9 [Git 在 PowerShell 中使用 Git](https://git-scm.com/book/zh/v2/附录-A%3A-在其它环境中使用-Git-Git-在-PowerShell-中使用-Git)
-- A1.10 [总结](https://git-scm.com/book/zh/v2/附录-A%3A-在其它环境中使用-Git-总结)
-
-### A2. [附录 B: 在你的应用中嵌入 Git](https://git-scm.com/book/zh/v2/附录-B%3A-在你的应用中嵌入-Git-命令行-Git-方式)
-
-- A2.1 [命令行 Git 方式](https://git-scm.com/book/zh/v2/附录-B%3A-在你的应用中嵌入-Git-命令行-Git-方式)
-- A2.2 [Libgit2](https://git-scm.com/book/zh/v2/附录-B%3A-在你的应用中嵌入-Git-Libgit2)
-- A2.3 [JGit](https://git-scm.com/book/zh/v2/附录-B%3A-在你的应用中嵌入-Git-JGit)
-- A2.4 [go-git](https://git-scm.com/book/zh/v2/附录-B%3A-在你的应用中嵌入-Git-go-git)
-- A2.5 [Dulwich](https://git-scm.com/book/zh/v2/附录-B%3A-在你的应用中嵌入-Git-Dulwich)
-
-### A3. [附录 C: Git 命令](https://git-scm.com/book/zh/v2/附录-C%3A-Git-命令-设置与配置)
-
-- A3.1 [设置与配置](https://git-scm.com/book/zh/v2/附录-C%3A-Git-命令-设置与配置)
-- A3.2 [获取与创建项目](https://git-scm.com/book/zh/v2/附录-C%3A-Git-命令-获取与创建项目)
-- A3.3 [快照基础](https://git-scm.com/book/zh/v2/附录-C%3A-Git-命令-快照基础)
-- A3.4 [分支与合并](https://git-scm.com/book/zh/v2/附录-C%3A-Git-命令-分支与合并)
-- A3.5 [项目分享与更新](https://git-scm.com/book/zh/v2/附录-C%3A-Git-命令-项目分享与更新)
-- A3.6 [检查与比较](https://git-scm.com/book/zh/v2/附录-C%3A-Git-命令-检查与比较)
-- A3.7 [调试](https://git-scm.com/book/zh/v2/附录-C%3A-Git-命令-调试)
-- A3.8 [补丁](https://git-scm.com/book/zh/v2/附录-C%3A-Git-命令-补丁)
-- A3.9 [邮件](https://git-scm.com/book/zh/v2/附录-C%3A-Git-命令-邮件)
-- A3.10 [外部系统](https://git-scm.com/book/zh/v2/附录-C%3A-Git-命令-外部系统)
-- A3.11 [管理](https://git-scm.com/book/zh/v2/附录-C%3A-Git-命令-管理)
-- A3.12 [底层命令](https://git-scm.com/book/zh/v2/附录-C%3A-Git-命令-底层命令)
+---
+
+<div align="center">
+</div>
 
+- 中文PDF，直接深度学习Git操作！下载：**微信公众号「bugstack虫洞栈」回复「gitbook」**
diff --git a/docs/md/road-map/github-actions-workflows.md b/docs/md/road-map/github-actions-workflows.md
index 26b00bca0..6d75985b6 100644
--- a/docs/md/road-map/github-actions-workflows.md
+++ b/docs/md/road-map/github-actions-workflows.md
@@ -1,9 +1,9 @@
 ---
-title: Github Actions WorkFlows
+title: Docker 镜像构建 - Github Action
 lock: need
 ---
 
-# Github 给了我们一台免费的"云服务器"，Docker 问题也解决了！
+# Docker 镜像构建 - Github Action
 
 作者：小傅哥
 <br/>博客：[https://bugstack.cn](https://bugstack.cn)
diff --git a/docs/md/road-map/grafana.md b/docs/md/road-map/grafana.md
index f8f7e7cb3..fa2b2e393 100644
--- a/docs/md/road-map/grafana.md
+++ b/docs/md/road-map/grafana.md
@@ -6,11 +6,11 @@ lock: need
 # Prometheus + Grafana 监控，验证 Hystrix 超时熔断
 
 作者：小傅哥
-博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
 
 > 沉淀、分享、成长，让自己和他人都能有所收获！😄
 
-<iframe id="B-Video" src="//player.bilibili.com/player.html?aid=919588155&bvid=BV1iu4y1G7VQ&cid=1361583047&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="100%" height="480"> </iframe>
+<iframe id="B-Video" src="//player.bilibili.com/player.html?isOutside=true&aid=663912853&bvid=BV1Na4y1f7cr&cid=1344706883&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="100%" height="480"> </iframe>
 
 本文的宗旨在于通过简单干净实践的方式教会读者，使用 Prometheus + Grafana 部署监控，同时结合监控了解到为什么需要使用 Hystrix 对接口进行超时熔断处理。
 
diff --git a/docs/md/road-map/intellij-idea-remote-jvm-debug.md b/docs/md/road-map/intellij-idea-remote-jvm-debug.md
new file mode 100644
index 000000000..185282c0f
--- /dev/null
+++ b/docs/md/road-map/intellij-idea-remote-jvm-debug.md
@@ -0,0 +1,225 @@
+---
+title: IntelliJ IDEA Remote JVM Debug
+lock: need
+---
+
+# IntelliJ IDEA Remote JVM Debug - 本地远程调试服务器运行代码
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+我遇到过一种bug场景，本地没什么问题，部署到服务器上就不行了。往往遇到这样的问题，要花费大量的时间检查程序逻辑，一个个方法 mock 测试验证。那有人会问了，你怎么不在本地 debug 调试下呢？
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-01.gif" width="150px"/>
+</div>
+
+**你的代码本地没法启动！**
+
+其实并不是所有的工程代码，都能本地启动运行的。尤其复杂的工程，与外部对接非常多，甚至还有一些是风险控制的问题，本地是不能启动直接调用的。也就是控制研发人员，不允许本地程序调用其他程序的接口。那么对于这样的工程，研发的自测就要通过编写 [mock](https://bugstack.cn/md/road-map/mock.html) 方式进行单元化测试。
+
+不过这里会有一个问题，单元化的测试，mock 的数据是不会随着外部所有程序的调整动态的变更的，而是随着研发编写需求，一次写好后，后续如果这个功能没有被调整，那么 mock 测试也不会在调整了。同时还因为 mock 覆盖的场景不全，不知道引入的外部那么多接口都有哪些新增的逻辑。因而，你可能本地运行没问题，但部署到测试环境，就会有一些不缺性的报错。
+
+对于这里的报错，当你没有 debug 手段的时候，就要把前后的报错数据，都要复制到本地，通过 mock 的方式验证程序逻辑，一点点排查。不过，这个过程也要花费好长时间，尤其是一些复杂的逻辑与外部交互又非常多的时候，调试起来很耗费时间。
+
+所以，程序员👨🏻‍💻对于实在难以调试的代码，还有一种方式就是远程调试。把代码部署到服务器，通过请求服务器的接口，本地的 IntelliJ IDEA 打开的工程，就可以调试对应的运行数据。可以非常高效的解决 bug！
+
+接下来，小傅哥就带着大家做一个这样的案例。如果你是一个新手小白，就更有必要学习一下这样的手段了。
+
+> 🧧 文末还提供了17个实战项目，全套的文档、视频、代码，都可以获取。还有非常清晰的学习路线！嘎嘎冲！
+
+## 一、测试工程
+
+这里小傅哥为你准备好了一个测试工程，你可以直接下载验证。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-02.png" width="950px"/>
+</div>
+
+- 地址：[https://github.com/fuzhengwei/xfg-dev-tech-remote-jvm-debug](https://github.com/fuzhengwei/xfg-dev-tech-remote-jvm-debug)
+- 环境：JDK 1.8、SpringBoot 2.7
+- 如图，工程提供了简单的 TestApiController 一个 http 测试入口。之后通过 Dockerfie 方式构建镜像，以及提供了 docker-compose-app.yml 启动工程。重要的是 JAVA_REMOTE_DEBUG 的配置。这是一种 JavaAgent 技术，如果感兴趣可以进入小傅哥的博客，[https://bugstack.cn/](https://bugstack.cn/) 字节码编程中学习。
+
+### 1. 测试接口
+
+```java
+@Slf4j
+@RestController()
+@CrossOrigin("*")
+@RequestMapping("/api/v1/test/")
+public class TestApiController {
+
+    /**
+     * curl --request POST \
+     *   --url 'http://127.0.01:8091/xfg/api/v1/test/group_buy_notify?requestDTO=1111'
+     *
+     * 注意，yml 里配置了应用根目录；server.servlet.context-path: /xfg
+     */
+    @RequestMapping(value = "group_buy_notify", method = RequestMethod.POST)
+    public String groupBuyNotify(@RequestParam String requestDTO) {
+        log.info("请求参数 {}", JSON.toJSONString(requestDTO));
+
+        return "success";
+    }
+
+}
+```
+
+- 一个简单的测试接口，访问接口地址为；`http://127.0.01:8091/xfg/api/v1/test/group_buy_notify?requestDTO=1111`
+- 你可以复制 curl 部分，导入到 apipost/apifox 等工具里使用。
+
+### 2. Dockerfile
+
+```java
+# 基础镜像
+FROM openjdk:8-jre-slim
+
+# 作者
+MAINTAINER xiaofuge
+
+# 配置
+ENV PARAMS=""
+
+# 时区
+ENV TZ=PRC
+RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
+
+# 添加应用
+ADD target/xfg-dev-tech-remote-jvm-debug-app.jar /xfg-dev-tech-remote-jvm-debug-app.jar
+EXPOSE 8091 5005
+
+ENTRYPOINT ["sh","-c","java $JAVA_REMOTE_DEBUG -jar $JAVA_OPTS /xfg-dev-tech-remote-jvm-debug-app.jar $PARAMS"]
+```
+
+- ENTRYPOINT，添加了一个 $JAVA_REMOTE_DEBUG 的动态入参，其实这个位置要填入的就是 `-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005` 但并不是上线的所有程序都要做这样的事情，一般只有测试环境才需要。
+- EXPOSE 8091 5005 对外暴漏应用程序所需的 8091 5005 端口。
+
+### 3. DockerCompose 部署脚本
+
+```java
+# /usr/local/bin/docker-compose -f /docs/dev-ops/environment/environment-docker-compose-2.4.yml up -d
+version: '3.8'
+# docker-compose -f docker-compose-app.yml up -d
+services:
+  xfg-dev-tech-remote-jvm-debug-app:
+    image: fuzhengwei/xfg-dev-tech-remote-jvm-debug-app:1.0
+    container_name: xfg-dev-tech-remote-jvm-debug-app
+    restart: on-failure
+    ports:
+      - "5005:5005"
+      - "8091:8091"
+    environment:
+      - TZ=PRC
+      - SERVER_PORT=8091
+      # 2c4g 配置，4c8g 翻倍，-Xms4096m -Xmx4096m | -Xmx –Xms：指定java堆最大值（默认值是物理内存的1/4(<1GB)）和初始java堆最小值（默认值是物理内存的1/64(<1GB))
+      - JAVA_OPTS=-Xms2048m -Xmx2048m
+      - JAVA_REMOTE_DEBUG=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005
+    volumes:
+      - ./log:/data/log
+    logging:
+      driver: "json-file"
+      options:
+        max-size: "10m"
+        max-file: "3"
+    networks:
+      - my-network
+
+networks:
+  my-network:
+    driver: bridge
+```
+
+- 部署服务注意，要对外提供 5005、8091 两个映射端口。对于这种端口的暴漏说明，我已经提供好了基础教程，可以在这里扩展学习；[https://bugstack.cn/md/road-map/docker-what.html](https://bugstack.cn/md/road-map/docker-what.html)
+- 另外在 environment 环境中，配置 `- JAVA_REMOTE_DEBUG=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005` 这样就可以把远侧调试的服务给启动起来了。相当于你在自己的电脑的 IntelliJ IDEA 与服务器上的应用，通过 5005 端口进行通信完成测试debug验证。
+
+## 二、部署程序
+
+确保你自己本地已经安装好了 [Docker](https://www.docker.com/) Mac、Windows 电脑都可以安装。
+
+### 1. 打包程序
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-03.png" width="650px"/>
+</div>
+
+- 通过 IntelliJ Install 打包程序。其实就是 Maven 命令，mvn clean install 的操作。
+
+
+### 2. 构建镜像
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-04.png" width="650px"/>
+</div>
+
+1. mac 电脑可以点绿色箭头。
+2. windows 电脑，可以通过 powershell 执行 ./build.sh
+
+### 3. 发布项目
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-05.png" width="850px"/>
+</div>
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-06.png" width="850px"/>
+</div>
+
+- mac 点击绿色箭头启动程序即可。
+- windows 打开 powershell 执行脚本 `docker-compose -f docker-compose-app.yml up -d`
+
+## 三、调试程序
+
+### 1. IntelliJ IDEA 配置
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-07.png" width="950px"/>
+</div>
+
+- 首先，在运行调试按钮那，点击下拉框。增加一个新的调试配置。
+- 之后，点击+号，添加 `Remote JVM Debug`
+- 最后，填写 IP 地址和端口，点击 Apply OK 即可。
+
+### 2. 导入接口
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-08.png" width="950px"/>
+</div>
+
+- 导入接口到 ApiPost 中调用。其他的工具也可以，这样接口可以保存起来，方便以后调试。
+
+### 3. 远程调试
+
+#### 3.1 启动程序
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-09.png" width="450px"/>
+</div>
+
+- 以新建的远程 debug 方式，启动程序。
+
+#### 3.2 添加断点
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-10.png" width="750px"/>
+</div>
+
+- 添加断点。注意，这会的程序部署的要一致，不能动代码。否则和远程部署的不一致，是不能调试的。
+
+#### 3.3 调用接口
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-11.png" width="650px"/>
+</div>
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/intellij-idea-remote-jvm-debug-12.png" width="650px"/>
+</div>
+
+- 首先，在 ApiPost 中点击【发送】按钮。
+- 这会，你可以在打了断点的程序中，查看到请求的调用会进来。最终执行完，远程的部署的程序也会执行完。
+
+🌶 好啦，到这你就已经学会了远程调试了。以后自己的简历中，对于项目的描述，此类问题，你也可以讲自己是如何做的远程调试。
diff --git a/docs/md/road-map/jenkins.md b/docs/md/road-map/jenkins.md
index 332634e80..79e943532 100644
--- a/docs/md/road-map/jenkins.md
+++ b/docs/md/road-map/jenkins.md
@@ -1,5 +1,5 @@
 ---
-title: Jenkins
+title: Jenkins 发布部署
 lock: need
 ---
 
@@ -118,6 +118,7 @@ Jenkins Docker 执行安装脚本。
 </div>
 
 - 1~2步，设置镜像源，设置后重启一下 Jenkins。
+  镜像源地址：https://mirrors.huaweicloud.com/jenkins/updates/update-center.json
 - 3~4步，下载插件，先下载安装 chinese 汉化插件，方便不太熟悉 Jenkins 的伙伴更好的知道页面都是啥内容。
 - 5步，所有的插件安装完成后，都需要重启才会生效。`安装完 chinese 插件，重启在进入到 Jenkins 就是汉化的页面了`
 - 除了以上步骤，你还需要同样的方式安装 maven、git、docker 插件。
@@ -277,4 +278,4 @@ public class Application {
     <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-jenkins-14.png?raw=true" width="850px">
 </div>
 
-- 运行到这代表着你已经完整的走完了 Jenkins CI&CD 流程。
\ No newline at end of file
+- 运行到这代表着你已经完整的走完了 Jenkins CI&CD 流程。
diff --git a/docs/md/road-map/kafka.md b/docs/md/road-map/kafka.md
index a20ed89d6..303f75fef 100644
--- a/docs/md/road-map/kafka.md
+++ b/docs/md/road-map/kafka.md
@@ -44,7 +44,8 @@ lock: need
 - Mac 电脑会比较好安装一些，直接在 IntelliJ IDEA 点击小绿色按钮即可完成安装。安装完成后进入 [http://localhost:9000/#!/2/docker/containers](http://localhost:9000/#!/2/docker/containers) 可看到 zookeeper、kafka、kafka-eagle 运行啦。
 - Windows 电脑安装 Docker 需要折腾下
 - Linux 服务器，需要上传整个 dev-ops 后在云服务器执行脚本安装；`docker-compose -f docker-compose.yml up -d`
-- 如图29行，有一个 kafka:9092 这个 kafka 是个 host 地址，就是 SwitchHost 打开后配置本地的 ip地址映射 kafka 
+- 如图29行，有一个 kafka:9092 这个 kafka 是个 host 地址，就是 SwitchHost 打开后配置本地的 ip地址映射 kafka
+- 另外推荐 [kafka king](https://github.com/Bronya0/Kafka-King/releases) 作为管理界面
 
 ### 3. 访问地址
 
@@ -310,4 +311,4 @@ public class UserServiceTest {
 24-03-17.12:29:01.647 [org.springframework.kafka.KafkaListenerEndpointContainer#0-0-C-1] INFO  KafkaMessageListener   - Kafka消费成功! Topic:xfg-topic,Message:{"data":{"userId":"10001","userName":"小傅哥","userType":"架构师"},"id":"15051699480","timestamp":1710649741313}
 ```
 
-- 运行测试，可以看到消息的推送和接收。
\ No newline at end of file
+- 运行测试，可以看到消息的推送和接收。
diff --git a/docs/md/road-map/linux.md b/docs/md/road-map/linux.md
index c32712c7f..6c8e992af 100644
--- a/docs/md/road-map/linux.md
+++ b/docs/md/road-map/linux.md
@@ -1,5 +1,5 @@
 ---
-title: Linux
+title: Linux 开发环境
 lock: need
 ---
 
@@ -24,9 +24,10 @@ lock: need
 
 本文涉及的工程；
 
-- xfg-dev-tech-linux：[https://gitcode.net/KnowledgePlanet/road-map/xfg-dev-tech-linux](https://gitcode.net/KnowledgePlanet/road-map/xfg-dev-tech-linux)
-- 云服务器配置要求：2c2g [https://yun.xfg.plus](https://yun.xfg.plus)
+- xfg-dev-tech-linux：[https://gitcode.net/KnowledgePlanet/road-map/xfg-dev-tech-linux](https://gitcode.net/KnowledgePlanet/road-map/xfg-dev-tech-linux) 注意 jdk 从下面的地址单独下载。
+- 云服务器配置要求：2c2g [https://618.gaga.plus](https://618.gaga.plus)
 - 工程提供了git、 java、maven、redis、mysql 的环境安装，可以让本地连接云服务器的配置，也可以在云服务器拉取项目进行构建操作。
+- 环境软件下载：[https://drive.weixin.qq.com/s?k=ACMA4AfQABUYiIGUXy](https://drive.weixin.qq.com/s?k=ACMA4AfQABUYiIGUXy) - 所需的 `jdk-8u202-linux-x64.tar.gz` 从这里下载。
 
 >文末有加入学习方式，提供了8个Java实战项目，非常有东西可以学！
 
@@ -87,6 +88,48 @@ chmod +x install-java.sh
 - 提示：如果未输出 java，可以手动执行 `source /etc/profile`
 - 卸载：如果不需要 Java 环境了，可以同样方式执行 `./remove-java.sh`
 
+**也可以手动安装**
+
+1. 解压jdk
+
+```java
+tar -zxvf jdk-8u202-linux-x64.tar.gz
+```
+
+2.修改解压后文件的文件名
+
+```java
+mv jdk1.8.0_202 jdk-8u202
+```
+
+3.配置Java环境，编辑/etc/profile文件
+
+```java
+vim /etc/profile
+```
+
+4.打开以后将下面三句输入到文件里面并保存退出
+
+```java
+export JAVA_HOME=/software/jdk-8u202
+export JRE_HOME=${JAVA_HOME}/jre
+export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
+export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
+export PATH=$PATH:${JAVA_PATH}
+```
+
+5.生效profile
+
+```java
+source /etc/profile
+```
+
+6.查询Java版本，出现的版本是自己下载的版本，则安装成功。
+
+```java
+java -version
+```
+
 ### 3. 安装 Maven
 
 ```java
diff --git a/docs/md/road-map/mac.md b/docs/md/road-map/mac.md
new file mode 100644
index 000000000..555c13981
--- /dev/null
+++ b/docs/md/road-map/mac.md
@@ -0,0 +1,102 @@
+---
+title: MacBook Pro
+lock: need
+---
+
+# MacBook Pro - 关于我是不是该买Mac电脑？
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+不少程序员👨🏻‍💻伙伴，一到618、双11和开学季的时候，总会问买个 Windows 电脑，还是搞个 MacBook Pro？网上搜的很多对比，都是说同配置的苹果更贵，但心里总痒痒也好奇，MacBook Pro 是不更好用还能装个B！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-mac-01.gif" width="200px">
+</div>
+
+**如果你是程序员👨🏻‍💻，我更推荐苹果电脑。为啥？**
+
+首先，Windows 和 Mac 没有好坏之分，只不过 Windows 有 Windows 的使用场景、Mac 有 Mac 的应用领域。你喜欢打游戏、折腾些硬件对接、综合工作和娱乐，那 Windows 就是最强的选择。
+
+但如果只在程序员这一行业对比编程写代码，一台笔记本，灵敏的触控板让你忘记鼠标的存在，苹果 IOS、IPad、Mac 全家桶式的多设备互通，可以做到极致的体验。
+
+而更重要的是，Java 写好的代码是要放到 Linux 运行，而不是 Windows，所有你在所需的环境、所编写的脚本，可以无差别从 Mac 转移到 Linux 使用。这是 Windows 没法做到的，甚至 Windows 要在这块浪费掉你很多的时间。*不是不能用，就是不丝滑！*
+
+>接下来，小傅哥分享下 Mac 电脑的使用经验。新入坑伙伴可以参考。
+
+## 一、我的经历 - 入坑 Mac！
+
+2019年，在这之前我只用过 Windows 电脑，包括；台式机、笔记本，还有自己DIY的台式机。Windows 给我感觉就是抗造，能自己折腾，加个内存，换个固态硬盘。打起来游戏方便，无论是澄海3c还是lol英雄联盟。
+
+但在这之前，我也就只有一台 thinkstation 的台式机，每次长假期赔媳妇出门，我都想着要是有个笔记本电脑，我就可以在外面写代码。要不多没意思。所以，我的理由就有了！
+
+2019年，趁着618活动，搞了第一台 Mac 电脑 i5 8G 256G SSD。说实话这个配置一点也不高，而且价格也不便宜 `¥10189.00` 元。好在送一个 `Beats Solo3 Wireless`耳麦。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-mac-03.png" width="700px">
+</div>
+
+不过 `Beats Solo3 Wireless` 被我在咸鱼转手卖掉回血了。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-mac-06.png" width="400px">
+</div>
+**但谁能想得到，这台电脑在5个月以后，还能给我返回来 5000 元！**
+
+2019年，双11备战誓师大会。抽取幸运备战人员，清空购物车！最高清空额度，就是同年 618 期间消费的额度，上限 5000 元！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-mac-04.png" width="200px">
+</div>
+
+这不巧了🐴，这不巧了🐴！618，我呀，我买了电脑，` ¥10189.00`！Duang、Duang、Duang，大转盘一转，还真抽中我了！那一刻，我决定做个抽奖系统！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-mac-05.png" width="400px">
+</div>
+
+从此开启了苹果全家桶系列，苹果手机、IPad mini、IPad Pro ...，讲真，确实好用！那有人问，你 Mac 电脑，也打不了游戏呀？嗯，我媳妇给我买了PS5，还中了一台 Switch 😂
+
+> 是的，后来我做了 Lottery 抽奖系统，还有大营销系统（Lottery Plus）！
+
+## 二、体验对比 - Mac 优势
+
+这里我不谈那些打游戏、或者和一些硬件的适配。因为你有那些诉求，直接选择 Windows 就可以。比如；外星人也不错。
+
+- 续航基本在10个小时左右，你是不需要带着充电电源的。像是在公司，双周需求评审，要占用一整个下午，这个期间电脑不需要插电源。
+- 不需要每天早上来开机，晚上回去关机。只要它不死机，甚至半年不都不关机。合上就走，打开就用。
+- 对于常用的技术编程环境类软件，直接下载就安装。因为这类软件是按照 Linux 系统做的，不是按照 Windows 系统做的。很多时候 Windows 要做兼容。比如执行脚本、安装 Docker，Windows 都要折腾一下。
+- 不需要安装各类杀毒软件，安装和卸载软件十分方便。有一些 Mac 的软件是付费的软件，但很多是一次付费终身使用，一点广告没有。不付费也可以破解使用，很多 Mac 软件都提供了破解版。
+- 尤其是 M2、M3 系列的 Mac，性能很炸裂，同时开几个 IDEA + 一堆环境类软件，以及一堆的打开的网页也很丝滑。
+- 切屏极其容易，多屏幕工作在 Mac 上是利器，可以不同的屏幕处理不同的事项。但在 Windows 切屏就挺费力气！
+- Mac 电脑可以外接显示器，这个 Windows 也有。但 Mac 还可以和 IPad 联动，功能叫随行。
+- Mac 上复制的内容，或者苹果手机上复制内容，可以互相粘贴。也可以极其简单的方式互传文件。
+- Mac 电脑的触控板，一周内可习惯，习惯后不需要使用鼠标了。感受过 Mac 的触控板，会感觉鼠标是个鸡肋。间接的你不会有一个鼠标手「长时间用鼠标会做病」。
+- 和其他的软件设备，比如 nas 可以直接链接操作。你可以 Mac 电脑打开 idea，但代码放到 nas 上。这个很爽！并且 nas 可以直接给你提供 docker 环境。下一期可以介绍下 nas 的使用。
+
+>其实，我认为还有一点是最重要的。做软件开发的，应该体验最好的软件逻辑。这可以让你的编程思维得到提升。虽然 Mac 比 Windows 贵，但折腾 Windows 浪费的时间也很贵。
+
+## 三、装机分享 - 我的软件
+
+Mac 电脑的软件非常好安装，双击打卡，之后交给它！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-mac-07.png" width="950px">
+</div>
+
+安装软件资源库；
+
+- 推荐：[https://aerolite.dev/applite](https://aerolite.dev/applite)
+- 其他：[https://macwk.cn/](https://macwk.cn/)
+- 其他：[https://macapp.org.cn/](https://macapp.org.cn/)
+
+## 四、避坑经验 - 别浪费钱
+
+- 钱少，但想体现Mac，可以考虑 Mac mini，教育版。尽量在16G起。这样价格和一台 Windows 笔记本差不多。
+- 做编程开发，别买二手的Mac。这些软件都是不断的升级的，太老的 Mac 一般都很卡，升级 Mac 系统，就跟升级 苹果手机 IOS 一样，越升级越卡。
+- 推荐买上一年的版本，价格合适。版本也不旧。但别买太低配置或者年限太老的。其实我们天天用的东西，价格高点也合适。
+- Mac 的 M4 也快出了。我下一个会考虑等下 M4。
\ No newline at end of file
diff --git a/docs/md/road-map/maven-central.md b/docs/md/road-map/maven-central.md
new file mode 100644
index 000000000..75ad2eee9
--- /dev/null
+++ b/docs/md/road-map/maven-central.md
@@ -0,0 +1,1001 @@
+---
+title: Maven Central
+lock: no
+---
+
+# Maven Central 微服务包发布管理
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+诶，`你八股背的挺好，怎么实操这么差？`哎，`你算法刷的挺多，怎么编码这么烂？`啊，`你不是做过微服务，怎么不知道咋引包？`这是越来越多的面试官在招聘完的真实反馈，很多伙伴的经验不是来自于实践而是背诵！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-01.gif" width="150px">
+</div>
+
+**有些东西没做过就是不知道！**
+
+所有那些背的东西，都是对结果的单一描述，而不是用大量的实践验证得出的结果，那么就会缺少各种可能的回答。以及对结果的各种论点/观点。
+
+如，很多伙伴都提到做的是微服务项目，但对于基础的 Maven 在微服务中的使用，几乎是不知道的。那么就反向说明，你没有真的做过这些。所以你才不知道。
+
+所以，如果你想真的学习下来这些经验，就要对这些知识点一个个的实践、验证、积累。在小傅哥的编程路书中以及积累了大量的知识内容，可以学习；[https://bugstack.cn/md/road-map/road-map.html](https://bugstack.cn/md/road-map/road-map.html)
+
+案例工程；
+- [https://github.com/fuzhengwei/xfg-dev-tech-micro-service-a](https://github.com/fuzhengwei/xfg-dev-tech-micro-service-a)
+- [https://github.com/fuzhengwei/xfg-dev-tech-micro-service-b](https://github.com/fuzhengwei/xfg-dev-tech-micro-service-b)
+
+> 接下来，我们再分享下关于微服务 Maven 发包的实践知识。
+
+## 一、我为什么报错？
+
+“傅哥，这怎么报错了，我怎么引不到这个包？”
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-02.png" width="550px">
+</div>
+
+对于这样的报错，我估计不少伙伴碰到了都有点慌。怎么我刚下载下来的工程，什么都做没做就报错了。这个包在仓库里也没有呀？之所以你会感觉很慌，是因为没有微服务项目的开发经验。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-04.png" width="550px">
+</div>
+只要你碰到这样一个报错，那么在“作者/开发者/公司”的仓库中，一定会有这样一个其他的微服务，只要下载到自己本地，用 IntelliJ IDEA 打开，点击右侧的 maven install 就可以初始化包到你的本地 Maven 仓库了，这样你就能引入了。
+
+那关于微服务的包的构建和使用有什么管理和规范吗？🤔 有的！
+
+## 二、微服务包管理
+
+无论是我们个人开发还是在公司开发，都是有一套微服务包的开发和推送以及使用的规范。大家默认统一遵守，所以开发中才会非常协调的进行。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-03.png" width="550px">
+</div>
+
+首先，公司中有很多业务，很多需求，这些东西不能都在一个工程里开发。那么势必就会拆分为多个微服务系统以及通用的技术解决方案组件。那么这些微服务和组件之间就会存在引入调用关系。尤其是一些大的互联网公司，更是会采用 RPC 的通信解决内部微服务之间的高效调用，而 RPC 通信不同于 HTTP 是需要引入接口定义包的，所以必然存在一个微服务中引入另外一个微服务的 Jar 也就是 POM 配置。
+
+那么，如果是你个人验证阶段，是先在自己本地开发验证。这个时候不会发包到 maven 公司统一仓库或者中心仓库，那么就需要你自己本地在 A 服务中进行 install，把包发到个人的 maven 本地仓库文件夹中，之后你的 B 服务就可以引入使用了。
+
+之后，站在整个公司的视角。你开发完的组件，不只是你使用，还有其他很多人使用。但跨部门，跨组的别人又不一定都有你的代码库权限，这个时候就需要把本地微服务的 Jar 发包到公司的 Maven 镜像库中。一般稍微大一点的公司都会有自己的 Maven 镜像库，如果公司比较小则会使用阿里云这类云厂商提供的的制品库，如；[https://packages.aliyun.com/](https://packages.aliyun.com/) 让公司的所有人 Maven setting 配置文件都配置这套制品库，这样就解决了一个人发包，其他人也能拉取到使用。
+
+另外，如果你想你发的包，不只是你自己或公司里的人使用，那么就要把包发到 Maven 统一的中心仓库。[https://central.sonatype.com/publishing](https://central.sonatype.com/publishing) 这个过程稍微有点漫长，会持续 `4-12` 个小时才能完全同步好。
+
+> 下文会提到如何发包到阿里云制品库和 Maven 中心仓库。
+
+## 三、微服发包规范
+
+工程发包会分为开发阶段的 snapshot 包和正式上线使用的 release 包，snapshot 包同一个版本发包后可以被替代，release 包，只能每次更换版本号。
+
+```pom
+<dependency>
+    <groupId>cn.bugstack</groupId>
+    <artifactId>xfg-dev-tech-api</artifactId>
+    <version>0.0.0-SNAPSHOT</version>
+</dependency>
+
+<dependency>
+    <groupId>cn.bugstack</groupId>
+    <artifactId>xfg-dev-tech-api</artifactId>
+    <version>1.0</version>
+</dependency>
+```
+
+- 0.0.0-SNAPSHOT 以 SNAPSHOT 结尾是开发阶段包，都是 0.0.0-SNAPSHOT 命名。
+- release 包，只需要命名版本号即可。
+
+另外这样的微服务包的版本号，在一个工程中每个模块都需要在发包的时候一起操作修改。如果是手动的修改就容易遗漏导致问题，所以这里我们要使用 Maven 提供的插件管理包。如；
+
+```
+<plugin>
+    <groupId>org.codehaus.mojo</groupId>
+    <artifactId>versions-maven-plugin</artifactId>
+    <version>2.7</version>
+</plugin>
+```
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-05.png" width="650px">
+</div>
+
+- 配置好 `versions-maven-plugin` 点击 `version:set` 就可以统一管理工程的版本号了。
+
+## 四、阿里云效发包 - 研发组内用
+
+### 1. 阿里云制品库
+
+地址：[https://packages.aliyun.com/](https://packages.aliyun.com/) - 填写个人信息申请即可。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-06.png" width="750px">
+</div>
+
+申请后，你会看到制品仓库配置，包括生产库和非生产库，他们主要负责给你提供 release、snapshot 发包和拉取。
+
+### 2. 发包配置
+
+分别进入 release、snapshot，都可以获得一份 Maven settings.xml 配置文件，把两份文件夹下载后可以找到 release、snapshot 的差异，合并成一份文件。这样你就可以在本地发 release、snapshot 包了。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-07.png" width="750px">
+</div>
+
+**配置文件**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-08.png" width="750px">
+</div>
+
+**样例文件**
+
+```pom
+<?xml version="1.0" encoding="UTF-8"?>
+
+<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
+
+  <localRepository>/Users/fuzhengwei/Applications/apache-maven-3.8.4/repository</localRepository>
+
+  <mirrors>
+    <mirror>
+      <id>mirror</id>
+      <mirrorOf>central,jcenter,!2452122-snapshot-XqjwfN</mirrorOf>
+      <name>mirror</name>
+      <url>https://maven.aliyun.com/nexus/content/groups/public</url>
+    </mirror>
+  </mirrors>
+  <servers>
+    <server>
+      <id>2452122-snapshot-XqjwfN</id>
+      <username>65b081c2242105ca211dd310</username>
+      <password>每个人会有自己的密码</password>
+    </server>
+    <server>
+      <id>2452122-release-dbuebF</id>
+      <username>65b081c2242105ca211dd310</username>
+      <password>每个人会有自己的密码</password>
+    </server>
+  </servers>
+  <profiles>
+    <profile>
+      <id>rdc</id>
+      <properties>
+
+
+        <altSnapshotDeploymentRepository>
+          2452122-snapshot-XqjwfN::default::https://packages.aliyun.com/65b081d4076e069afe3d2f50/maven/2452122-snapshot-xqjwfn
+        </altSnapshotDeploymentRepository>
+
+        <altReleaseDeploymentRepository>
+          2452122-release-dbuebF::default::https://packages.aliyun.com/65b081d4076e069afe3d2f50/maven/2452122-release-dbuebf
+        </altReleaseDeploymentRepository>
+
+      </properties>
+      <repositories>
+        <repository>
+          <id>central</id>
+          <url>https://maven.aliyun.com/nexus/content/groups/public</url>
+          <releases>
+            <enabled>true</enabled>
+          </releases>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+        </repository>
+        <repository>
+          <id>snapshots</id>
+          <url>https://maven.aliyun.com/nexus/content/groups/public</url>
+          <releases>
+            <enabled>false</enabled>
+          </releases>
+          <snapshots>
+            <enabled>true</enabled>
+          </snapshots>
+        </repository>
+        <repository>
+          <id>2452122-snapshot-XqjwfN</id>
+          <url>https://packages.aliyun.com/65b081d4076e069afe3d2f50/maven/2452122-snapshot-xqjwfn</url>
+          <releases>
+            <enabled>false</enabled>
+          </releases>
+          <snapshots>
+            <enabled>true</enabled>
+          </snapshots>
+        </repository>
+        <repository>
+          <id>2452122-release-dbuebF</id>
+          <url>https://packages.aliyun.com/65b081d4076e069afe3d2f50/maven/2452122-release-dbuebf</url>
+          <releases>
+            <enabled>true</enabled>
+          </releases>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+        </repository>
+      </repositories>
+      <pluginRepositories>
+        <pluginRepository>
+          <id>central</id>
+          <url>https://maven.aliyun.com/nexus/content/groups/public</url>
+          <releases>
+            <enabled>true</enabled>
+          </releases>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+        </pluginRepository>
+        <pluginRepository>
+          <id>snapshots</id>
+          <url>https://maven.aliyun.com/nexus/content/groups/public</url>
+          <releases>
+            <enabled>false</enabled>
+          </releases>
+          <snapshots>
+            <enabled>true</enabled>
+          </snapshots>
+        </pluginRepository>
+        <pluginRepository>
+          <id>2452122-snapshot-XqjwfN</id>
+          <url>https://packages.aliyun.com/65b081d4076e069afe3d2f50/maven/2452122-snapshot-xqjwfn</url>
+          <releases>
+            <enabled>false</enabled>
+          </releases>
+          <snapshots>
+            <enabled>true</enabled>
+          </snapshots>
+        </pluginRepository>
+        <pluginRepository>
+          <id>2452122-release-dbuebF</id>
+          <url>https://packages.aliyun.com/65b081d4076e069afe3d2f50/maven/2452122-release-dbuebf</url>
+          <releases>
+            <enabled>true</enabled>
+          </releases>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+        </pluginRepository>
+      </pluginRepositories>
+    </profile>
+  </profiles>
+  <activeProfiles>
+    <activeProfile>rdc</activeProfile>
+  </activeProfiles>
+
+</settings>
+```
+
+### 3. 本地发包
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-09.png" width="750px">
+</div>
+
+### 4. 查看仓库
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-10.png" width="750px">
+</div>
+
+- 发包后，可以到你的仓库查看是否已经将本地包发到了仓库中。
+- 到这里，你的整个研发组，都配置好来自 [https://packages.aliyun.com/](https://packages.aliyun.com/)  Maven 配置下的下载链接，就可以统一使用这套包拉取到自己本来进行使用了。
+
+## 五、中心仓库发包 - 全球研发用
+
+官网：[https://central.sonatype.com/publishing](https://central.sonatype.com/publishing)
+文档：[https://central.sonatype.org/publish/publish-portal-upload/](https://central.sonatype.org/publish/publish-portal-upload/)
+
+### 1. GPG 安装
+
+我们需要一个GPG环境，用来对上传的文件进行加密和签名，保证你的jar包不被篡改。这也是发包到 Maven 中心仓库必须的操心。
+
+>1991年，程序员Phil Zimmermann为了避开政府监视，开发了加密软件PGP。这个软件非常好用，迅速流传开来，成了许多程序员的必备工具。但是，它是商业软件，不能自由使用。所以，自由软件基金会决定，开发一个PGP的替代品，取名为GnuPG。这就是GPG的由来。
+
+#### 1.1 windows
+
+1. 下载地址：[https://gpg4win.org/download.html](https://gpg4win.org/download.html)
+2. 下载完成后直接安装即可，比较傻瓜式安装很简单，记得选中文(如果你英文硬也可以不选)
+3. 生成密钥(可以使用命令行生成，也可以直接在操作界面生成)
+   1. 文件>新建密钥对(Ctrl+N) -- 创建个人 OpenPGP 密钥对
+   ![](https://bugstack.cn/assets/images/pic-content/2019/11/itstack-middleware-schedule-1.png)
+   2. 填写个人信息姓名和邮箱 并点击到 新建
+   ![](https://bugstack.cn/assets/images/pic-content/2019/11/itstack-middleware-schedule-2.png)
+   3. 填写密钥密码
+   ![](https://bugstack.cn/assets/images/pic-content/2019/11/itstack-middleware-schedule-3.png)
+   4. 将公钥上传到目录服务{如果上传失败，则通过：设置(S)->配置Kleopatra(C)，修改 OpenPGP密钥服务器为：hkp://keyserver.ubuntu.com:80}
+   ![](https://bugstack.cn/assets/images/pic-content/2019/11/itstack-middleware-schedule-4.png)
+   
+
+#### 1.2 mac
+
+1. 下载地址：[https://gpgtools.org/](https://gpgtools.org/)
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-19.png" width="650px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-20.png" width="650px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-21.png" width="650px">
+</div>
+
+- 下载后安装，打开后。点新建，即可创建新的秘钥。记得点击上传公钥，如果没有点击后续也可以在秘钥上右键上传。
+- 注意新秘钥的名称（姓名）是后续配置到 setting.xml、工程 pom 内的名称。
+
+### 2. 命名空间配置
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-11.png" width="750px">
+</div>
+
+Maven 中心仓库发包需要验证你的域名，确保全世界的唯一性。如果选择 github 登录，你会有一个默认配置的 NameSpace（io.github.fuzhengwei），这个东西的作用就是要和本地工程名 groupId 保持一致的。如工程是 cn.bugstack、plus.gaga、com.liergou，那么你在的 NameSpace 就需要配置一个这样的调过来的域名。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-archetype-08.png" width="750px">
+</div>
+
+- 如图配置完添加验证即可，最后验证成功就可以使用了。
+
+### 3. maven setting.xml
+
+```java
+<?xml version="1.0" encoding="UTF-8"?>
+
+<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
+
+  <localRepository>/Users/fuzhengwei/Applications/apache-maven-3.8.4/repository</localRepository>
+
+  <servers>
+    <server>
+      <id>填写，你的秘钥密码</id>
+      <username>l4Mw+E3f</username>
+      <password>你在</password>
+    </server>
+  </servers>
+
+  <profiles>
+    <profile>
+      <id>ossrh</id>
+      <activation>
+        <activeByDefault>true</activeByDefault>
+      </activation>
+      <properties>
+        <gpg.executable>gpg</gpg.executable>
+        <gpg.passphrase>填写，你的秘钥密码</gpg.passphrase>
+        <gpg.homedir>/Users/fuzhengwei/.gnupg/</gpg.homedir>
+      </properties>
+    </profile>
+  </profiles>
+
+  <activeProfiles>
+    <activeProfile>ossrh</activeProfile>
+  </activeProfiles>
+
+</settings>
+````
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-22.png" width="650px">
+</div>
+
+- 注意，打开你的 maven setting.xml 配置文件，完善以上配置内容。
+- servers 下的 username、password，来自于 [https://central.sonatype.com/account](https://central.sonatype.com/account) 
+- 官网使用说明：[https://central.sonatype.org/publish/generate-portal-token/](https://central.sonatype.org/publish/generate-portal-token/)
+
+### 4. 手动上传
+
+#### 4.1 上传要求
+
+文档：[https://central.sonatype.org/publish/publish-portal-upload/](https://central.sonatype.org/publish/publish-portal-upload/)
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-archetype-10.png" width="750px">
+</div>
+
+- 如文档上传要求，你需要把jar、pom、doc、sources 全部打包到 zip 包，同时每个文件的 asc、md5、sha1 也需要打包进来。
+- 这些文件也都是在旧版上传 maven 中央仓库的时候，所需提供的内容。
+
+#### 4.2 项目配置
+
+**源码**：[https://gitcode.net/KnowledgePlanet/road-map/xfg-frame-archetype-lite/-/tree/master/scaffold-lite](https://gitcode.net/KnowledgePlanet/road-map/xfg-frame-archetype-lite/-/tree/master/scaffold-lite)
+
+```pom
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+<!--    <parent>-->
+<!--        <groupId>cn.bugstack</groupId>-->
+<!--        <artifactId>xfg-dev-tech-micro-service-a</artifactId>-->
+<!--        <version>0.0.1-SNAPSHOT</version>-->
+<!--    </parent>-->
+
+    <groupId>cn.bugstack</groupId>
+    <artifactId>xfg-dev-tech-api</artifactId>
+    <version>0.0.0-SNAPSHOT</version>
+
+    <properties>
+        <java.version>1.8</java.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <retrofit2.version>2.9.0</retrofit2.version>
+        <slf4j.version>2.0.6</slf4j.version>
+        <maven-javadoc-plugin.version>3.2.0</maven-javadoc-plugin.version>
+        <maven-source-plugin.version>3.2.1</maven-source-plugin.version>
+        <maven-gpg-plugin.version>1.6</maven-gpg-plugin.version>
+        <maven-checksum-plugin.version>1.10</maven-checksum-plugin.version>
+    </properties>
+
+    <name>xfg-dev-tech-api</name>
+    <description>ce API . Copyright © 2023 bugstack虫洞栈 All rights reserved. 版权所有（C）小傅哥 https://github.com/fuzhengwei</description>
+    <url>https://github.com/fuzhengwei/xfg-dev-tech-micro-service-a</url>
+
+    <licenses>
+        <license>
+            <name>Apache License</name>
+            <url>https://opensource.org/license/apache-2-0/</url>
+            <distribution>repo</distribution>
+        </license>
+    </licenses>
+
+    <developers>
+        <developer>
+            <id>Xiaofuge</id>
+            <name>Xiaofuge</name>
+            <email>184172133@qq.com</email>
+            <url>https://github.com/fuzhengwei</url>
+            <organization>xfg-dev-tech-micro-service-a</organization>
+            <organizationUrl>https://github.com/fuzhengwei/xfg-dev-tech-micro-service-a</organizationUrl>
+            <roles>
+                <role>architect</role>
+                <role>developer</role>
+            </roles>
+            <timezone>Asia/Shanghai</timezone>
+        </developer>
+    </developers>
+
+    <scm>
+        <connection>scm:git:https://github.com/fuzhengwei/xfg-dev-tech-micro-service-a.git</connection>
+        <developerConnection>scm:git:https://github.com/fuzhengwei/xfg-dev-tech-micro-service-a.git</developerConnection>
+        <tag>HEAD</tag>
+        <url>https://github.com/fuzhengwei/xfg-dev-tech-micro-service-a</url>
+    </scm>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.0</version>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                    <encoding>${project.build.sourceEncoding}</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-gpg-plugin</artifactId>
+                <version>1.5</version>
+                <executions>
+                    <execution>
+                        <id>sign-artifacts</id>
+                        <phase>verify</phase>
+                        <goals>
+                            <goal>sign</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>2.12.4</version>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-source-plugin</artifactId>
+                <version>2.2.1</version>
+                <executions>
+                    <execution>
+                        <id>attach-sources</id>
+                        <goals>
+                            <goal>jar-no-fork</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <version>2.9.1</version>
+                <configuration>
+                    <encoding>UTF-8</encoding>
+                    <aggregate>true</aggregate>
+                    <charset>UTF-8</charset>
+                    <docencoding>UTF-8</docencoding>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>attach-javadocs</id>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                        <configuration>
+                            <additionalparam>-Xdoclint:none</additionalparam>
+                            <javadocExecutable>
+                                /Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home/bin/javadoc
+                            </javadocExecutable>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-release-plugin</artifactId>
+                <version>2.5.3</version>
+                <configuration>
+                    <autoVersionSubmodules>true</autoVersionSubmodules>
+                    <useReleaseProfile>false</useReleaseProfile>
+                    <releaseProfiles>release</releaseProfiles>
+                    <goals>deploy</goals>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>net.nicoulaj.maven.plugins</groupId>
+                <artifactId>checksum-maven-plugin</artifactId>
+                <version>${maven-checksum-plugin.version}</version>
+                <executions>
+                    <execution>
+                        <id>create-checksums</id>
+                        <goals>
+                            <goal>artifacts</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <profiles>
+        <profile>
+            <id>release</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-javadoc-plugin</artifactId>
+                        <version>2.9.1</version>
+                        <executions>
+                            <execution>
+                                <id>attach-javadocs</id>
+                                <goals>
+                                    <goal>jar</goal>
+                                </goals>
+                                <configuration>
+                                    <additionalparam>-Xdoclint:none</additionalparam>
+                                    <javadocExecutable>
+                                        /Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home/bin/javadoc
+                                    </javadocExecutable>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
+</project>
+```
+
+- 注意，`<groupId>cn.bugstack</groupId>` 这里不能是继承。
+- maven-javadoc-plugin：生成 doc 文档。这里要注意，因为我们脚手架不是代码文件，没有doc的，所以要在工程中加一个任意类名文件。工程中小傅哥加了个 Api 类。
+- maven-source-plugin：生成 source 文件。
+- maven-gpg-plugin：是签名的加密文件，需要本地安装过 gpg 包。注意；`checksum-maven-plugin` 需要在 `maven-gpg-plugin` 执行，这样就不用做下面的手动 md5 逻辑了。
+- checksum-maven-plugin：生成 md5、sha1 文件，但这里不会对 pom 生成此文件，还需要单独命令处理。
+- `/Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home/bin/javadoc` 配置你自己的 jdk 地址。
+
+```shell
+md5 ddd-scaffold-lite-1.0.pom > ddd-scaffold-lite-1.0.pom.md5
+shasum ddd-scaffold-lite-1.0.pom > ddd-scaffold-lite-1.0.pom.sha1
+```
+
+- 检查生成后的文件，去掉不需要的内容。
+
+#### 4.3 构建项目
+
+##### 1. 首次构建
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-13.png" width="750px">
+</div>
+
+- 需要构建 Release 包。
+
+##### 2. 执行命令
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-14.png" width="750px">
+</div>
+
+```java
+md5 xfg-dev-tech-api-1.0.pom > xfg-dev-tech-api-1.0.pom.md5
+shasum xfg-dev-tech-api-1.0.pom > xfg-dev-tech-api-1.0.pom.sha1
+```
+
+- 构建后，执行命令。增加新的校验文件。
+
+##### 3. 打包文件
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-15.png" width="750px">
+</div>
+
+- 创建一个和构建一样路径的文件夹，mac/linux 操作命名；`mkdir -p cn/bugstack/xfg-dev-tech-api/1.0/`
+- 之后把文件复制到文件夹中打一个zip包。
+
+#### 6. 发包
+
+##### 6.1 提交
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-16.png" width="650px">
+</div>
+
+- 提交你的压缩包。
+
+##### 6.2 等待通过&发包
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-17.png" width="650px">
+</div>
+
+- 稍微等待，验证通过后可以点击 Publish 发布。
+- 预计4-12小时后会同步到 maven 中心仓库以及阿里云的仓库。
+
+##### 6.3 发布效果
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-18.png" width="650px">
+</div>
+
+- 地址：[https://mvnrepository.com/search?q=cn.bugstack](https://mvnrepository.com/search?q=cn.bugstack)
+
+### 5. 自动发包（推荐）
+
+#### 5.1 pom 配置
+
+为你的工程配置 pom；
+
+```java
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>cn.bugstack</groupId>
+        <artifactId>xfg-dev-tech-micro-service-a</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>xfg-dev-tech-api</artifactId>
+
+    <properties>
+        <java.version>1.8</java.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <retrofit2.version>2.9.0</retrofit2.version>
+        <slf4j.version>2.0.6</slf4j.version>
+        <maven-javadoc-plugin.version>3.2.0</maven-javadoc-plugin.version>
+        <maven-source-plugin.version>3.2.1</maven-source-plugin.version>
+        <maven-gpg-plugin.version>1.6</maven-gpg-plugin.version>
+        <maven-checksum-plugin.version>1.10</maven-checksum-plugin.version>
+    </properties>
+
+    <name>xfg-dev-tech-api</name>
+    <description>ce API . Copyright © 2023 bugstack虫洞栈 All rights reserved. 版权所有（C）小傅哥 https://github.com/fuzhengwei</description>
+    <url>https://github.com/fuzhengwei/xfg-dev-tech-micro-service-a</url>
+
+    <licenses>
+        <license>
+            <name>Apache License</name>
+            <url>https://opensource.org/license/apache-2-0/</url>
+            <distribution>repo</distribution>
+        </license>
+    </licenses>
+
+    <developers>
+        <developer>
+            <id>Xiaofuge</id>
+            <name>Xiaofuge</name>
+            <email>184172133@qq.com</email>
+            <url>https://github.com/fuzhengwei</url>
+            <organization>xfg-dev-tech-micro-service-a</organization>
+            <organizationUrl>https://github.com/fuzhengwei/xfg-dev-tech-micro-service-a</organizationUrl>
+            <roles>
+                <role>architect</role>
+                <role>developer</role>
+            </roles>
+            <timezone>Asia/Shanghai</timezone>
+        </developer>
+    </developers>
+
+    <scm>
+        <connection>scm:git:https://github.com/fuzhengwei/xfg-dev-tech-micro-service-a.git</connection>
+        <developerConnection>scm:git:https://github.com/fuzhengwei/xfg-dev-tech-micro-service-a.git</developerConnection>
+        <tag>HEAD</tag>
+        <url>https://github.com/fuzhengwei/xfg-dev-tech-micro-service-a</url>
+    </scm>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>2.0.28</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.9</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>${slf4j.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+                <includes>
+                    <include>**/**</include>
+                </includes>
+            </resource>
+        </resources>
+        <testResources>
+            <testResource>
+                <directory>src/test/resources</directory>
+                <filtering>true</filtering>
+                <includes>
+                    <include>**/**</include>
+                </includes>
+            </testResource>
+        </testResources>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <version>3.2.0</version>
+                <configuration>
+                    <encoding>UTF-8</encoding>
+                    <resources>
+                        <resource>
+                            <directory>src/main/resources</directory>
+                            <filtering>false</filtering>
+                        </resource>
+                    </resources>
+                </configuration>
+            </plugin>
+
+            <!--   source源码插件 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-source-plugin</artifactId>
+                <version>2.2.1</version>
+                <executions>
+                    <execution>
+                        <id>attach-sources</id>
+                        <goals>
+                            <goal>jar-no-fork</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <!--   javadoc插件 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <version>2.9.1</version>
+                <configuration>
+                    <charset>UTF-8</charset>
+                    <encoding>UTF-8</encoding>
+                    <docencoding>UTF-8</docencoding>
+                    <additionalJOption>-Xdoclint:none</additionalJOption>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>attach-javadocs</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                        <configuration>
+                            <additionalparam>-Xdoclint:none</additionalparam>
+                            <!--  /Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home/bin/javadoc -->
+                            <javadocExecutable>${java.home}${file.separator}..${file.separator}bin${file.separator}javadoc</javadocExecutable>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <version>3.2.4</version>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                        <configuration>
+                            <filters>
+                                <filter>
+                                    <artifact>*:*</artifact>
+                                    <excludes>
+                                        <exclude>META-INF/*.SF</exclude>
+                                        <exclude>META-INF/*.DSA</exclude>
+                                        <exclude>META-INF/*.RSA</exclude>
+                                    </excludes>
+                                </filter>
+                            </filters>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <!--gpg加密-->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-gpg-plugin</artifactId>
+                <version>1.5</version>
+                <configuration>
+                    <!--指定用于签名的 GPG 密钥名称。-->
+                    <keyname>ossrh</keyname>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>sign-artifacts</id>
+                        <phase>verify</phase>
+                        <goals>
+                            <goal>sign</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>net.nicoulaj.maven.plugins</groupId>
+                <artifactId>checksum-maven-plugin</artifactId>
+                <version>1.10</version>
+                <executions>
+                    <execution>
+                        <id>create-checksums</id>
+                        <goals>
+                            <goal>artifacts</goal>
+                        </goals>
+                        <configuration>
+                            <algorithms>
+                                <algorithm>MD5</algorithm>
+                                <algorithm>SHA-1</algorithm>
+                            </algorithms>
+                            <attachChecksums>true</attachChecksums>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>create-pom-checksums</id>
+                        <goals>
+                            <goal>files</goal>
+                        </goals>
+                        <configuration>
+                            <fileSets>
+                                <fileSet>
+                                    <directory>${project.build.directory}</directory>
+                                    <includes>
+                                        <include>*.pom</include>
+                                    </includes>
+                                </fileSet>
+                            </fileSets>
+                            <algorithms>
+                                <algorithm>MD5</algorithm>
+                                <algorithm>SHA-1</algorithm>
+                            </algorithms>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <!--   central发布插件，可配置自动推送和发布。文档；https://central.sonatype.org/publish/publish-portal-maven/#wait-for-publishing  -->
+            <plugin>
+                <groupId>org.sonatype.central</groupId>
+                <artifactId>central-publishing-maven-plugin</artifactId>
+                <version>0.4.0</version>
+                <extensions>true</extensions>
+                <configuration>
+                    <publishingServerId>ossrh</publishingServerId>
+                    <tokenAuth>true</tokenAuth>
+                    <autoPublish>true</autoPublish>
+                </configuration>
+            </plugin>
+
+        </plugins>
+    </build>
+
+</project>
+```
+
+##### Maven 插件
+
+项目使用了多个 Maven 插件来支持构建、打包和发布流程:
+1. maven-resources-plugin (v3.2.0)
+	- 用于资源文件处理，确保 UTF-8 编码 
+2. maven-source-plugin (v2.2.1)
+	- 生成源码 jar 包，便于开发者查看源码 
+3. maven-javadoc-plugin (v2.9.1)
+	- 生成 JavaDoc 文档
+	- 配置了 UTF-8 编码
+	- 禁用了文档检查 (-Xdoclint:none) 
+	4 . maven-shade-plugin (v3.2.4)
+	- 用于创建可执行 jar 包
+	- 配置了过滤器排除签名文件 
+5. maven-gpg-plugin (v1.5)
+	- 用于对构建产物进行 GPG 签名
+	- 指定了签名密钥名称: ossrh 
+6. checksum-maven-plugin (v1.10)
+	- 生成构建产物的校验和 (MD5, SHA-1)
+	- 为 jar 包和 pom 文件创建校验和 
+7. central-publishing-maven-plugin (v0.4.0)
+	- 用于将项目发布到 Maven Central 仓库
+	- 配置了自动发布功能
+
+##### 发布配置
+
+项目配置了发布到 Maven Central 仓库的相关信息:
+
+- 发布服务 ID : ossrh
+- 认证方式 : 令牌认证 (tokenAuth=true)
+- 自动发布 : 启用 (autoPublish=true)
+
+文档：[https://central.sonatype.org/publish/publish-portal-maven/#wait-for-publishing](https://central.sonatype.org/publish/publish-portal-maven/#wait-for-publishing)
+
+>每个插件和配置项都为项目的构建、发布和管理提供了特定的功能支持。
+
+#### 5.2 发布
+
+##### 点击发布
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-23.png" width="950px">
+</div>
+
+##### 查看结果
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-maven-24.png" width="650px">
+</div>
+
+>发布完成后，需要1-3天，才能同步到 [https://mvnrepository.com/](https://mvnrepository.com/)
+
diff --git a/docs/md/road-map/mysql-time-zone.md b/docs/md/road-map/mysql-time-zone.md
new file mode 100644
index 000000000..4cf76975e
--- /dev/null
+++ b/docs/md/road-map/mysql-time-zone.md
@@ -0,0 +1,172 @@
+---
+title: MySQL Time Zone
+lock: need
+---
+
+# MySQL 8.0.22 引发的时区错误问题，应该如何正确的配置 TimeZone？
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+在实际的工作场景中有时候就是一个小小的问题，就可能引发出一个大大的bug。而且工作这么多年，看到的线上事故，往往也都是这些小的细节问题，所以学习这些具有实际经验的细节非常重要。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-mysql-time-zone-01.gif" width="150px">
+</div>
+
+**有些事故隐藏的很深！**
+
+其实很多时候事故也不是一开始就有的，而是随着需求的迭代，达到某一个条件后触达到事故的发生条件了才出现的。就像 MySQL 的时区配置问题，它既有不同版本 JDBC 连接引擎的不同，又有数据库设置的时区，还有服务端设置的时区，还包括在使用数据库配置时指定的时区。这些条件综合发生时才会出现事故。
+
+接下来，小傅哥就给大家分享下为啥是 8.0.22 版本才会引发时区错误问题。
+
+## 一、问题场景
+
+这是一条很普通的SQL语句；
+
+```java
+<insert id="insert" parameterType="cn.bugstack.xfg.dev.tech.infrastructure.po.EmployeePO">
+    INSERT INTO employee(employee_number, employee_name, employee_level, employee_title, create_time, update_time)
+    VALUES(#{employeeNumber}, #{employeeName}, #{employeeLevel}, #{employeeTitle}, now(), now())
+</insert>
+```
+
+修改下这条普通的SQL语句；
+
+```java
+<insert id="insert" parameterType="cn.bugstack.xfg.dev.tech.infrastructure.po.EmployeePO">
+    INSERT INTO employee(employee_number, employee_name, employee_level, employee_title, create_time, update_time)
+    VALUES(#{employeeNumber}, #{employeeName}, #{employeeLevel}, #{employeeTitle}, #{createTime}, now())
+</insert>
+```
+
+接下来在执行插入SQL语句；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-mysql-time-zone-02.png" width="850px">
+</div>
+
+- 原本直接使用数据库语句 now() 的并没有问题，而改为由程序透传的时间 createTime 后，日期时间发生了错误。差了8个小时。
+- 通常一般我们操作数据库的时候，写入的时间，往往都是 now()。但有时候比如要外部透传用户下单时间做本系统做一个返利活动，在什么时间内才返利，要记录时间。这个时候发现写入数据库的时间就不对了。
+- 因为原本你的系统都是走的数据库时间，现在突然多了一个来自系统的透传时间，那么你可能是注意不到的。另外由于本机的开发环境与服务器配置不一样，所以最终直至上线开始跑数据了，才发现问题。这个就是一般出现事故的原因。
+
+## 二、排查配置
+
+### 1. mysql jdbc 版本
+
+```java
+<dependency>
+    <groupId>mysql</groupId>
+    <artifactId>mysql-connector-java</artifactId>
+    <version>8.0.22</version>
+</dependency>
+```
+
+- 8.0.22 版本，官网提示有bug；`https://dev.mysql.com/doc/relnotes/connector-j/en/news-8-0-23.html`
+
+### 2. 链接参数配置
+
+```java
+jdbc:mysql://127.0.0.1:3306/road-map?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useSSL=true
+```
+
+- 注意首次没有配置时区。配置时区需要增加参数；`&serverTimezone=Asia/Shanghai`
+
+### 3. mysql time-zone 配置
+
+```java
+show variables like '%time_zone%';
+
++------------------+--------+
+| Variable_name    | Value  |
++------------------+--------+
+| system_time_zone | CST    |
+| time_zone        | SYSTEM |
++------------------+--------+
+```
+
+- 命令修改时区；`SET time_zone = 'SYSTEM';`
+- 命令修改时区；`SET time_zone = '+8:00';`
+- 注意CST配置，不是中国时区。默认是美国中部时间。
+  - 美国中部时间 Central Standard Time (USA) UTC-05:00 或 UTC-06:00
+  - 澳大利亚中部时间 Central Standard Time (Australia) UTC+09:30
+  - 中国标准时 China Standard Time UTC+08:00
+  - 古巴标准时 Cuba Standard Time UTC-04:00
+
+
+### 4. linux 服务器时间
+
+```java
+[root@lavm-aqhgp9nber ~]# timedatectl
+      Local time: Sat 2024-08-31 13:57:07 CST
+  Universal time: Sat 2024-08-31 05:57:07 UTC
+        RTC time: Sat 2024-08-31 05:57:06
+       Time zone: Asia/Shanghai (CST, +0800)
+     NTP enabled: yes
+NTP synchronized: yes
+ RTC in local TZ: no
+      DST active: n/a
+```
+
+- 命令修改时区；`sudo timedatectl set-timezone Asia/Shanghai`
+- 命令修改时区；`sudo timedatectl set-timezone America/New_York`
+
+## 三、源码问题 - MySQL JDBC
+
+### 1. 8.0.22 版本问题
+
+在 8.0.0 ~ 8.0.22 版本中，如果未配置时区，`serverTimezone=Asia/Shanghai` 则会取服务端时区，所以如果服务端配置的是 CST 时区，则会有问题。调试源码；
+
+**com.mysql.cj.protocol.a.NativeProtocol#configureTimezone**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-mysql-time-zone-03.png" width="850px">
+</div>
+
+- 在 8.0.22 版本中，获取时区的方法，如果本地为配置 jdbc 时区，则会获取服务端时区。也就是 CST 美国中部时间。
+- 所以，如果你要使用的是 8.0.22 就必须指定时区。`jdbc:mysql://IP:13306/road-map?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai` 
+
+### 2. 8.0.23 + 版本
+
+在 8.0.23 版本以后，如果未配置时区，调整为获取客户端时区。
+
+```java
+<dependency>
+    <groupId>mysql</groupId>
+    <artifactId>mysql-connector-java</artifactId>
+    <version>8.0.23</version>
+</dependency>
+```
+
+- 切换到 8.0.23 版本。
+
+**com.mysql.cj.protocol.a.NativeProtocol#configureTimezone**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-mysql-time-zone-04.png" width="850px">
+</div>
+
+- 在使用 8.0.23 TimeZone.getDefault() 注释 `Gets the default TimeZone of the Java virtual machine.` 获取 Java 虚拟机默认时区。这个方法也是 Java 本身代码的方法。
+- 你可以通过 Java Main 函数执行 `System.*out*.println("Default Time Zone: " + TimeZone.getDefault().getID());` 获取默认时区。打印结果为 `Default Time Zone: Asia/Shanghai`
+
+### 3. 官网说明
+
+地址：[https://dev.mysql.com/doc/relnotes/connector-j/en/news-8-0-23.html](https://dev.mysql.com/doc/relnotes/connector-j/en/news-8-0-23.html)
+
+**Bugs Fixed**
+
+```java
+After upgrading from Connector/J 5.1 to 8.0, the results of saving and then retrieving DATETIME and TIMESTAMP values became different sometimes. It was because while Connector/J 5.1 does not preserve a time instant by default, Connector/J 8.0.22 and earlier tried to do so by converting a timestamp to the server's session time zone before sending its value to the server. In this release, new mechanisms for controlling timezone conversion has been introduced—see Preserving Time Instants for details. Under this new mechanism, the default behavior of Connector/J 5.1 in this respect is preserved by setting the connection property preserveInstants=false. (Bug #30962953, Bug #98695, Bug #30573281, Bug #95644)
+```
+
+从 Connector/J 5.1 升级到 8.0 后，保存和检索 DATETIME 和 TIMESTAMP 值的结果有时会有所不同。这是因为，虽然 Connector/J 5.1 默认不保留时间点，但 Connector/J 8.0.22 及更早版本尝试通过在将时间戳的值发送到服务器之前将其转换为服务器的会话时区来保留时间点。在此版本中，引入了用于控制时区转换的新机制 - 有关详细信息，请参阅保留时间点。在这种新机制下，通过设置连接属性 retainInstants=false 来保留 Connector/J 5.1 在这方面的默认行为。（错误 #30962953、错误 #98695、错误 #30573281、错误 #95644）
+
+## 四、综上总结
+
+在使用MySQL的时候，确保服务器时区、MySQL时区、Java应用链接MySQL JDBC的参数配置，都指定到具体的时区上。MySQL JDBC 使用 8.0.23+ 版本，不要使用 8.0.0 ~ 8.0.22 版本，尤其是5.1升级要升级到 8.0.23 以及往后的版本。
+
+正确配置；`url: jdbc:mysql://127.0.0.1:3306/road-map?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=Asia/Shanghai`
diff --git a/docs/md/road-map/nas.md b/docs/md/road-map/nas.md
new file mode 100644
index 000000000..15a9e6b2e
--- /dev/null
+++ b/docs/md/road-map/nas.md
@@ -0,0 +1,126 @@
+---
+title: Nas
+lock: need
+---
+
+# Nas - 这是我犹豫了很久，才买的设备！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+在这之前我犹豫🦑了好久，一台不错的 Nas 四五千块，买这个东西能帮助我啥呢 🤔？但后来发现，这台 2c8g 双盘位 4TB Nas，等同于个人拥有了一台永久可用的，软件丰富的，具备远程访问能力的，终身 Linux 服务器。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-nas-01.gif" width="200px">
+</div>
+
+**谁更适合买一台 Nas？**
+
+虽然 Nas 确实很不错，但也不是所有人都有诉求，也不用都买很高配置很贵的。那谁有 Nas 诉求呢？家里有娃的，有大量的照片、视频、文件，需要家人一起存储使用。另外是喜欢看4k蓝光电影，可以用 Nas 搭建一套家庭影院。很多 Nas 也是主打这些功能。
+
+但其实我买 Nas，有上面的功能诉求，但还有作为程序员👨🏻‍💻的编程诉求。我希望能在这台 Nas 上安装 Docker 部署环境，并能通过 SSH 客户端，以使用 Linux 的方式，连接 Nas 完成项目的构建、镜像打包和部署。
+
+>嘿嘿，使用起来，它还真可以！不过，别买错 Nas，有些并不支持！
+
+## 一、Nas 是啥？
+
+NAS（Network Attached Storage，网络附加存储）是一种通过标准的网络拓扑结构（例如以太网）连接到一群计算机上的存储设备。它是一种具有很大存储容量的电脑外敷设备，通过集线器或交换机直接连在网络上，提供跨平台文件共享功能。
+
+更简单的来讲，你就把它当做一台部署在家里的 Linux 服务器就好，只不过它的体积不大，但有很大的硬盘容量。所有开通了权限的用户，都可以使用这台共享服务器。并且它提供了很多的软件资源和网络访问服务。
+
+## 二、买的哪家的 Nas？
+
+市面的 Nas 有很多，如；群晖、威联通、绿联、极空间、华为。它们到没有绝对的谁家好，只不过有会一些目标人群的不同。有一些网上的对比，可以参考；
+
+| 品牌     | 优势                                                                 | 劣势                                                                 |
+|----------|----------------------------------------------------------------------|----------------------------------------------------------------------|
+| 群晖     | - 软件生态丰富，DSM系统用户友好                                      | - 价格较高                                                           |
+|          | - 稳定性和可靠性强                                                  | - 硬件规格在同价位上可能不如竞争对手                                 |
+|          | - 拥有庞大的用户社区和丰富的在线资源                                |                                                                      |
+|          | - 提供多种数据保护和备份解决方案                                    |                                                                      |
+| 威联通   | - 硬件性能强，提供更高的硬件规格                                    | - 软件复杂性较高，新手用户可能较难上手                               |
+|          | - 支持虚拟化、容器化应用和多媒体功能                                | - 某些情况下软件更新可能导致系统不稳定                               |
+|          | - 提供丰富的扩展选项                                                |                                                                      |
+| 绿联     | - 价格实惠，适合预算有限的用户                                      | - 功能较为基础，适合简单存储需求                                     |
+|          | - 简单易用，适合家庭用户和小型办公室                                | - 在NAS市场的知名度和用户基础不如群晖和威联通                       |
+| 极空间   | - 性价比高，适合中小企业和个人用户                                  | - 软件生态和用户界面不如群晖和威联通成熟                             |
+|          | - 提供较为合理的硬件配置                                            | - 相对较小的用户社区和技术支持资源                                   |
+
+
+我买的是一台 `群晖 DS723+` 并配了`8G内存` + `2*2TB`硬盘互备，因为咱们要做 Docker 安装各类软件，内存大一些更好。选择群晖主要就是想着这东西资源丰富，可以像使用 Linux 服务器一样使用 Nas 满足开发和存储需求。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-nas-02.png" width="400px">
+</div>
+
+> 用了群晖 Nas 有5个月了，越用越爽。电脑里的东西基本都搬到群晖了，电脑只成为一个工具了，不在搞那么多存储。
+
+## 三、Nas 的编程用途
+
+群晖 Nas 提供了 群晖管家 APP，只要开启 QuickConnect，无论在家内网还是外网都可以访问和管理 Nas。另外群晖还提供了专门做照片和视频同步管理的 Photos Mobile APP 你可以直接下载使用。
+
+它所有的这些东西，只要对照提供的说明书都可以下载使用。难度极低，很好上手。这里小傅哥主要给大家分享下编程的用途。
+
+这里首先，对于使用 Windows 的小伙伴，如果你有台 Nas，就不需要本地做那么多让 Windows 兼容 Linux 的事情了。你可以直接在这个上面安装提供的 Docker 套件，并完成对应用程序的打包、构建以及 PUSH 镜像到 DockerHub。
+
+另外就是很多小伙伴的电脑配置不高，容量也不大，可以考虑购买 Nas 分摊一部分本身电脑的压力。就像我，如果开启多个 IntelliJ IDEA，在开启 Docker 提供分布式软件环境、在搞一堆网页，以及开启视频录制。这个时候就会非常卡顿了。所以我搞了台 Nas 来解决这个事情。
+
+### 1. 有很多编程软件
+
+群晖 Nas 提供了非常多的配套软件，适合于不同场景诉求的伙伴使用。所以很多买群晖的伙伴都说，是买软件送设备。嘿嘿，不过我更喜欢这部分编程相关的，尤其是这个 Docker、Git Server，嗖的就安装好。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-nas-03.png" width="850px">
+</div>
+
+- Nas 还支持配置定时开机关机、休眠，这样会比较省电，也不用一直在那打开着。
+- 另外可以自建frp，让自己的nas服务可以直接被公网访问。一年￥48 2c2g 服务器即可。[https://618.gaga.plus](https://618.gaga.plus) 专属地址。[frp](https://bugstack.cn/md/road-map/frp.html) 教程在 bugstack.cn - 路书中。
+
+### 2. Docker 使用
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-nas-04.png" width="850px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-nas-05.png" width="850px">
+</div>
+
+- 你可以在提供的操作界面配置 Docker Compose，完成项目文件的配置和启动。之后的体验就和正常 Linux 安装 Docker 部署软件一样了。
+- 不过我通常把这里都只是作为配置后的操作界面，配置的操作，我会在用SSH工具直接链接到Nas上。
+
+### 3. SSH 连接 Nas
+
+因为本身 Nas 也是一台 Linux 服务器，所以可以直接用 SSH 连接使用。推荐使用 [https://termius.com/](https://termius.com/) 工具链接，很好用。
+
+- 账号：你的 Nas 登录账号
+- 密码：你的 Nas 登录密码
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-nas-06.png" width="850px">
+</div>
+
+登录以后，你就可以像使用 Linux 一样操作了，不过大部分执行类命令，要加上 sudo，比如 `sudo docker images`
+
+### 4. 构建项目
+
+有了 Nas 有个很大的好处就是，你可以本地直接当 Nas 的硬盘是本地的一个文件夹，直接打开就操作。里面的文件直接复制粘贴进去或者拿出来就可以。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-nas-07.png" width="650px">
+</div>
+
+通过 IntelliJ IDEA 直接打开 Nas 中的项目即可，之后你可以用它上面的 Docker 对项目进行构建了。如下；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-nas-08.png" width="650px">
+</div>
+
+- build.sh 中执行的就是 docker 命令；`docker build -t system/s-pay-mall-mvc-app:1.0 -f ./Dockerfile .`
+- 构建完，就可以部署项目了。Linux 上怎么用，这里你就怎么用。
+
+> 当然 Nas 还有很多其他的用途，喜欢折腾的还可以搭建一些你需要的。
diff --git a/docs/md/road-map/nginx.md b/docs/md/road-map/nginx.md
index e4e8d874d..35ee7c714 100644
--- a/docs/md/road-map/nginx.md
+++ b/docs/md/road-map/nginx.md
@@ -1,5 +1,5 @@
 ---
-title: Nginx
+title: Nginx 环境配置
 lock: need
 ---
 
@@ -130,9 +130,10 @@ nginx
 
 ### 4.1 创建证书
 
-SSL 免费的证书，一种是 [freessl - 支持自动续期](https://bugstack.cn/md/road-map/ssl.html) 另外各个云服务厂商都有提供，可以自己申请。这里以阿里云举例；
+SSL 免费的证书，一种是 [ssl - 支持自动续期](https://bugstack.cn/md/road-map/ssl-httpsok.html) 另外各个云服务厂商都有提供，可以自己申请。这里以阿里云/京东云举例；
 
-阿里云免费域名证书：[https://yundun.console.aliyun.com/?p=cas#/certExtend/free/cn-hangzhou](https://yundun.console.aliyun.com/?p=cas#/certExtend/free/cn-hangzhou)
+- 阿里云免费域名证书：[https://yundun.console.aliyun.com/?p=cas#/certExtend/free/cn-hangzhou](https://yundun.console.aliyun.com/?p=cas#/certExtend/free/cn-hangzhou)
+- 京东云免费域名证书：[https://certificate-console.jdcloud.com/jsecssl/create?fastConfig=false&certBrand=TrustAsia&certType=domainType&protectionType=DV-1&gDomainCount=0](https://certificate-console.jdcloud.com/jsecssl/create?fastConfig=false&certBrand=TrustAsia&certType=domainType&protectionType=DV-1&gDomainCount=0) - 选择 TrustAsia 单域名 3个月 0元
 
 ![](https://bugstack.cn/images/article/devops/dev-ops-nginx-230418-02.png)
 
@@ -293,18 +294,18 @@ docker run \
 
 ![](https://bugstack.cn/images/article/devops/dev-ops-nginx-230418-04.png)
 
-## 五、OpenAI 访问
+## 五、重定向
 
-### 1. 重定向
+### 1. default.conf
 
 在 default.conf 中添加如下配置后重启 Nginx 即可；
 
 ```shell
 location /d5fe/ {
   rewrite ^/d5fe/(.*)$ /$1 break;
-  proxy_pass  https://api.openai.com;
+  proxy_pass  https://api.x.com;
   proxy_ssl_server_name on;
-  proxy_set_header Host api.openai.com;
+  proxy_set_header Host api.x.com;
   proxy_set_header Connection '';
   proxy_http_version 1.1;
   chunked_transfer_encoding off;
@@ -351,9 +352,9 @@ server {
     location /abc/ {
     	 auth_request /auth;
          rewrite ^/abc/(.*)$ /$1 break;
-         proxy_pass  https://api.openai.com;
+         proxy_pass  https://api.x.com;
          proxy_ssl_server_name on;
-         proxy_set_header Host api.openai.com;
+         proxy_set_header Host api.x.com;
          proxy_set_header Connection '';
          proxy_http_version 1.1;
          chunked_transfer_encoding off;
diff --git a/docs/md/road-map/ollama.md b/docs/md/road-map/ollama.md
new file mode 100644
index 000000000..753ad3832
--- /dev/null
+++ b/docs/md/road-map/ollama.md
@@ -0,0 +1,242 @@
+---
+title: Nas + Ollama + DeepSeek
+lock: need
+---
+
+# 【教程】在Nas上部署Ollama，搭建DeepSeek、配置PageAssist AI、提供API调用
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+在 OpenAI 刚兴起的时候，一个非算法的外行Java，想在个人电脑上部署个 GPT2 都费老鼻子👃🏻劲了。现在 DeepSeek 开源以后，拿这 Ollama 直接就能部署，兼职比程序员👨🏻‍💻安装 Java JDK 都容易。😂Java 二狗，也能过上算法的日子。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-ollama-00.gif" width="150px"/>
+</div>
+
+**自己部署的 DeepSeek 功能还挺多！**
+
+自己基于 Ollama 部署的一套 DeepSeek，可以提供独属于你自己一套的 AI，并且可以做图片识别、联网、知识库。而且如果你是一个需要使用 DeepSeek 接口做开发的码农，还可以直接使用自己提供的这套 API 做开发。
+
+接下来，小傅哥就带着你使用 Docker 完成 Ollama 的安装和 DeepSeek 模型的部署。Docker 可以在任何环境执行，小傅哥自己是放到 Nas 环境里部署。部署完成后，安装谷歌浏览器插件 Page Assist 使用 Ollama 部署的 DeepSeek 模型。
+
+## 一、部署脚本
+
+小傅哥这里为你提供了执行安装的脚本，以及测试API的方法；
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-ollama-01.png" width="850px"/>
+</div>
+
+- 代码：[https://github.com/fuzhengwei/xfg-dev-tech-ollama](https://github.com/fuzhengwei/xfg-dev-tech-ollama)
+- dev-ops，提供了 docker-compose.yml 部署 ollama 脚本。这个文件你可以放到任何安装了 Docker 的环境里执行。
+- src 代码，提供的是测试这套 Ollama 下的大模型。除了你本节部署的 DeepSeek，以后部署其他的也可以这样使用。
+
+## 二、部署安装
+
+### 1. 执行脚本
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-ollama-02.png" width="850px"/>
+</div>
+
+```java
+# docker compose -f docker-compose.yml up -d
+version: '3.8'
+services:
+  ollama:
+#    image: ollama/ollama:0.5.10
+    image: registry.cn-hangzhou.aliyuncs.com/xfg-studio/ollama:0.5.10
+    container_name: ollama
+    restart: unless-stopped
+    ports:
+      - "11434:11434"
+```
+
+- 原始镜像 `image: ollama/ollama:0.5.10` 代理镜像 `registry.cn-hangzhou.aliyuncs.com/xfg-studio/ollama:0.5.10` 
+- Nas 可以通过界面操作执行启动，如果你是 Linux 服务器，安装了 Docker，可以使用命令执行 `docker compose -f docker-compose.yml up -d`
+
+### 2. 模型说明 - DeepSeek
+
+| 模型             | 内存 | 存储   | 特点                                                 |
+| ---------------- | ---- | ------ | ---------------------------------------------------- |
+| deepseek-r1:1.5b | 8G   | 12GB   | 轻量级模型，运行速度快，性能有限。                   |
+| deepseek-r1:7b   | 16G  | 80GB   | 平衡型模型，性能较好，硬件需求适中。                 |
+| deepseek-r1:14b  | 32G  | 200GB  | 高性能模型，擅长复杂任务（数学推理，代码生成）       |
+| deepseek-r1:32b  | 64G  | 320GB  | 专业级模型，性能强大，适合高精度任务                 |
+| deepseek-r1:70b  | 128G | 500GB+ | 顶级模型，性能最强，适合大规模计算和高复杂任务执行。 |
+
+- 这里小傅哥选择的是 1.5b 模型，你可以按照自己的机器配置进行选择。
+
+### 3. 模型安装 - DeepSeek
+
+你需要进入到 Ollama 管理后台执行安装模型脚本；
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-ollama-03.png" width="850px"/>
+</div>
+
+```java
+# 拉取模型
+ollama pull deepseek-r1:1.5b
+
+# 运行模型
+ollama run deepseek-r1:1.5b
+
+# 联网模型
+ollama pull nomic-embed-text
+```
+
+- 命令：`docker exec -it ollama /bin/bash` 也可以进入控制台
+- 首先，安装完成后，可以执行运行之后在后台进行对话。对话完成需要关闭的话，运行 Ctrl + D 关闭。
+- 之后，安装联网模型。这个过程要持续一会。另外不要一下就选很大的模型，怕你扛不住。
+
+## 三、配置插件
+
+官网：[https://github.com/n4ze3m/page-assist](https://github.com/n4ze3m/page-assist)
+
+### 1. 搜索安装
+
+为了更方便的使用 DeepSeek 模型，这里可以在谷歌浏览器安装一个 Page Assist 插件。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-ollama-04.png" width="850px"/>
+</div>
+
+- 点击安装 Page Assist 插件
+
+### 2. 链接地址
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-ollama-07.png" width="850px"/>
+</div>
+
+### 3. 设置中文
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-ollama-05.png" width="850px"/>
+</div>
+
+### 4. 配置知识库 - RAG
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-ollama-06.png" width="850px"/>
+</div>
+
+### 5. 添加知识库 - PDF/MD
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-ollama-08.png" width="850px"/>
+</div>
+
+## 四、对话使用
+
+### 1. ai对话
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-ollama-09.png" width="850px"/>
+</div>
+
+- 你可以选择模型、联网、图片识别和自己设定的知识库。
+
+### 2. 页面对话
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-ollama-10.png" width="850px"/>
+</div>
+
+- 你可以在插件上右键，之后就可以与你需要的另外的网页进行对话。理解网页内容做解答。
+
+## 五、API 对接
+
+### 1. curl 接口
+
+```java
+curl http://192.168.1.109:11434/api/generate \
+  -H "Content-Type: application/json" \
+  -d '{
+        "model": "deepseek-r1:1.5b",
+        "prompt": "1+1",
+        "stream": false
+      }'
+
+```
+
+- 这是请求 Ollama DeepSeek 模型的 curl 操作。
+
+### 2. 代码请求
+
+#### 2.1 配置接口
+
+```java
+@Configuration
+public class OllamaConfig {
+
+    @Bean
+    public OllamaApi ollamaApi() {
+        Retrofit retrofit = new Retrofit.Builder()
+                .baseUrl("http://192.168.1.109:11434")
+                .addConverterFactory(JacksonConverterFactory.create()).build();
+
+        return retrofit.create(OllamaApi.class);
+    }
+
+    public interface OllamaApi {
+        @POST("/api/generate")
+        Call<OllamaResponse> generate(@Body OllamaRequest request);
+    }
+
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class OllamaRequest {
+        private String model;
+        private String prompt;
+        private boolean stream;
+    }
+    
+    // ... 省略部分代码
+}    
+```
+
+- 这里我们使用 retrofit2 框架封装对模型API的访问。
+
+#### 2.2 访问接口
+
+```java
+@Slf4j
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class OllamaTest {
+
+    @Resource
+    private OllamaConfig.OllamaApi api;
+
+    @Test
+    public void test_chat() throws IOException {
+        OllamaConfig.OllamaRequest request = new OllamaConfig.OllamaRequest(
+                "deepseek-r1:1.5b",
+                "1+1",
+                false
+        );
+
+        Call<OllamaConfig.OllamaResponse> generate = api.generate(request);
+        Response<OllamaConfig.OllamaResponse> execute = generate.execute();
+        OllamaConfig.OllamaResponse response = execute.body();
+
+        log.info("测试结果:{}", JSON.toJSONString(response.getResponse()));
+    }
+
+}
+```
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-ollama-11.png" width="950px"/>
+</div>
+
+- 如图，运行结果可以看到调用API没问题啦。
+- 另外，SpringAI 也提供了访问 ollama 的 Jar，也可以使用。后续会提供这块的内容。
\ No newline at end of file
diff --git a/docs/md/road-map/portainer.md b/docs/md/road-map/portainer.md
index 8378999a2..633b787ef 100644
--- a/docs/md/road-map/portainer.md
+++ b/docs/md/road-map/portainer.md
@@ -1,9 +1,9 @@
 ---
-title: Portainer
+title: Docker 管理面板（Portainer）
 lock: need
 ---
 
-# Portainer 环境配置
+# Docker 管理面板（Portainer）
 
 作者：小傅哥
 <br/>博客：[https://bugstack.cn](https://bugstack.cn)
@@ -36,6 +36,8 @@ docker.io/portainer/portainer:latest
 
 ### 2. 安装和启动
 
+**注意**：如果是阿里云服务器，还需要先执行 `docker volume crete portainer_data`
+
 ```java
 [root@CodeGuide]# docker run -d --restart=always --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
 ```
diff --git a/docs/md/road-map/private-docker-hub.md b/docs/md/road-map/private-docker-hub.md
index d1e8a62d4..ed3a35484 100644
--- a/docs/md/road-map/private-docker-hub.md
+++ b/docs/md/road-map/private-docker-hub.md
@@ -1,5 +1,5 @@
 ---
-title: Private DockerHub
+title: Docker 私有仓库
 lock: need
 ---
 
diff --git a/docs/md/road-map/spring-oauth2-sso-01.md b/docs/md/road-map/spring-oauth2-sso-01.md
new file mode 100644
index 000000000..9e029ad50
--- /dev/null
+++ b/docs/md/road-map/spring-oauth2-sso-01.md
@@ -0,0 +1,502 @@
+---
+title: OAuth2 SSO
+lock: need
+---
+
+# OAuth2 SSO - 前后端分离，单点登录案例
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+当你进入一个较大一些的中大厂互联网公司以后，你会发现自己参与的业务系统开发，好像从来没有关心过关于用户的身份鉴权，而是直接拿到用户的ID就做业务了。那这里的鉴权跑到哪里去了呢？🤔
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/spring-oauth2-sso-01-01.gif" width="150px">
+</div>
+
+其实在公司里是一套统一的授权服务和组件的，并且维护用户的ID、用户的关联绑定也都是这套系统来处理的。之后这套系统会和 API 网关进行对接，等网关下发到你的后端服务系统时，在内部微服间流转就是真实的用户ID啦。
+
+那么为了让伙伴们更好的理解关于 OAuth2 SSO 统一单点登录的前后端分离服务，小傅哥这里做了一个结合 Spring Security OAuth2很容易理解案例工程。学习后就可以扩展使用 SSO 到你自己的系统了，比如可以做一个统一的用户鉴权中心。
+
+## 一、单点登录
+
+单点登录（Single Sign-On，SSO）是一种认证技术，用户只需进行一次身份验证，就可以访问多个相互信任的应用系统，而无需再次输入凭证。SSO的主要目的是简化用户的登录过程，提高用户体验和安全性，同时减少管理多个用户名和密码的复杂性。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/spring-oauth2-sso-01-02.png" width="750px">
+</div>
+
+SSO的工作原理通常涉及以下几个步骤：
+
+1. **身份验证**：用户在第一次访问SSO系统时输入用户名和密码等凭据进行验证。
+2. **创建会话**：成功验证后，系统创建一个会话，可以是令牌、票证或其他凭据，以证明用户的身份。
+3. **访问授权**：当用户访问不同的应用时，SSO系统将会话信息传递给这些应用，以确认用户的身份并授予访问权限。
+4. **信任机制**：应用之间需要建立信任关系，通常通过共享密钥或使用公钥基础设施（PKI）来实现验证和授权。
+
+SSO的优点包括：
+
+- **提高用户体验**：用户只需记住一个用户名和密码，减少了填写登录信息的次数。
+- **增强安全性**：集中管理用户身份，方便监控和保护密码策略。
+- **降低管理成本**：减少IT部门处理密码重置等事务的工作量。
+
+## 二、案例工程
+
+### 1. 编程环境
+
+- JDK 1.8
+
+- SpringBoot 2.6.2
+
+- Maven 3.8.1
+
+- Docker - 负责安装 Nginx，如果没有 Docker 就本地直接安装 Nginx
+
+- SwitchHosts - 切换host，映射自定义域名地址，可以避免跨域问题。如果没有就直接修改本地的 host 文件。你可以配置自己的。
+
+```java
+192.168.1.107 sso.xfg.com
+192.168.1.107 client1.xfg.com
+192.168.1.107 client2.xfg.com
+```
+
+- 工程：[https://github.com/fuzhengwei/xfg-dev-tech-oauth2-sso](https://github.com/fuzhengwei/xfg-dev-tech-oauth2-sso)
+
+### 2. 工程结构
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/spring-oauth2-sso-01-03.png" width="400px">
+</div>
+
+- xfg-dev-tech-app 是 SSO Auth 的鉴权服务。
+- test 模块下有2个 client，方便验证一个登录成功后，另外一个不会再跳转登录了。
+- docs/dev-ops 下提供了 docker compose 脚本，用于部署 Nginx 以及配合的前后端分离的前端页面。
+
+### 3. 鉴权服务
+
+```yml
+server:
+  port: 8091
+  application:
+    name: xfg-dev-tech-sso
+  servlet:
+    context-path: /auth
+    session:
+      cookie:
+        name: OAuth2SSOToken
+
+```
+
+- yml 配置了 auth 路径和一个 session 名称。
+
+#### 3.1 鉴权配置
+
+**AuthorizationServerConfig**
+
+```java
+@Bean
+public ClientDetailsService inMemoryClientDetailsService() throws Exception {
+    return new InMemoryClientDetailsServiceBuilder()
+            // client1 mall
+            .withClient("client1")
+            .secret(passwordEncoder.encode("client1_secret"))
+            .scopes("all")
+            .authorizedGrantTypes("authorization_code", "refresh_token")
+            .redirectUris("http://client1.xfg.com/client1/login")
+            .accessTokenValiditySeconds(7200)
+            .autoApprove(true)
+            .and()
+      
+            // client2 lottery
+            .withClient("client2")
+            .secret(passwordEncoder.encode("client2_secret"))
+            .scopes("all")
+            .authorizedGrantTypes("authorization_code", "refresh_token")
+            .redirectUris("http://client2.xfg.com/client2/login")
+            .accessTokenValiditySeconds(7200)
+            .autoApprove(true)
+            .and()
+            .build();
+}
+```
+
+- 配置鉴权信息，这里配置了两个客户端信息。
+
+#### 3.2 验证入口
+
+```java
+@Component("unauthorizedEntryPoint")
+public class AppUnauthorizedEntryPoint implements AuthenticationEntryPoint {
+
+    @Override
+    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) throws IOException, ServletException {
+        Map<String, String[]> paramMap = request.getParameterMap();
+        StringBuilder param = new StringBuilder();
+        paramMap.forEach((k, v) -> {
+            param.append("&").append(k).append("=").append(v[0]);
+        });
+
+        param.deleteCharAt(0);
+        String isRedirectValue = request.getParameter("isRedirect");
+
+        if (!StringUtils.isEmpty(isRedirectValue) && Boolean.parseBoolean(isRedirectValue)) {
+            response.sendRedirect("http://sso.xfg.com/authPage/#/login?" + param);
+            return;
+        }
+
+        String authUrl = "http://sso.xfg.com/auth/oauth/authorize?" + param + "&isRedirect=true";
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("code", 800);
+        result.put("msg", "授权地址");
+        result.put("data", authUrl);
+
+        response.setContentType(MediaType.APPLICATION_JSON_VALUE);
+        PrintWriter writer = response.getWriter();
+        ObjectMapper mapper = new ObjectMapper();
+        writer.print(mapper.writeValueAsString(result));
+        writer.flush();
+        writer.close();
+    }
+
+}
+```
+
+- 需要实现 AuthenticationEntryPoint 接口，配置一个转发的地址。
+
+### 4. 客户端 - client1/client2
+
+#### 4.1 client1
+
+```java
+server:
+  port: 8001
+  servlet:
+    context-path: /client1
+
+security:
+  oauth2:
+    client:
+      client-id: client1
+      preEstablishedRedirectUri:
+      client-secret: client1_secret
+      access-token-uri: http://sso.xfg.com/auth/oauth/token
+      user-authorization-uri: http://sso.xfg.com/auth/oauth/authorize
+    resource:
+      user-info-uri: http://sso.xfg.com/auth/user
+      token-info-uri: http://sso.xfg.com/auth/oauth/check_token
+```
+
+```java
+@RestController
+public class Client01Controller {
+
+    @GetMapping("/create_pay_order")
+    public Result createPayOrder() {
+        Result result = new Result();
+        result.setCode(0);
+        result.setData("下单完成");
+        return result;
+    }
+
+    @GetMapping("/")
+    public void callback(HttpServletResponse response) throws IOException {
+        response.sendRedirect("http://client1.xfg.com/client1Page/#/home");
+    }
+
+}
+```
+
+- 模拟下单，和 callback 地址配置。
+
+#### 4.2 client2
+
+```java
+server:
+  port: 8002
+  servlet:
+    context-path: /client2
+
+security:
+  oauth2:
+    client:
+      client-id: client2
+      client-secret: client2_secret
+      preEstablishedRedirectUri:
+      access-token-uri: http://sso.xfg.com/auth/oauth/token
+      user-authorization-uri: http://sso.xfg.com/auth/oauth/authorize
+    resource:
+      user-info-uri: http://sso.xfg.com/auth/user
+      token-info-uri: http://sso.xfg.com/auth/oauth/check_token
+```
+
+```java
+@RestController
+public class Client02Controller {
+
+    @GetMapping("/lottery")
+    public Result lottery() {
+        Result result = new Result();
+        result.setCode(0);
+        result.setData("下单红包，金额：" + RandomStringUtils.randomNumeric(10) + "元");
+        return result;
+    }
+
+    @GetMapping("/")
+    public void callback(HttpServletResponse response) throws IOException {
+        response.sendRedirect("http://client2.xfg.com/client2Page/#/home");
+    }
+
+}
+```
+
+- 模拟另外一个微服务获取红包，以及 callback 地址服务。
+
+### 5. 前端页面
+
+#### 5.1 校验
+
+```html
+<div class="login-container">
+    <h2>登录</h2>
+    <input type="text" id="username" placeholder="用户名" required>
+    <input type="password" id="password" placeholder="密码" required>
+    <button id="login-btn">登录</button>
+</div>
+
+<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
+<script>
+    const base = 'http://sso.xfg.com'; // 设置你的基础URL
+
+    document.getElementById('login-btn').addEventListener('click', function() {
+        const loginForm = {
+            username: document.getElementById('username').value,
+            password: document.getElementById('password').value
+        };
+
+        postRequest('/auth/login', loginForm).then(resp => {
+            if (resp.data.code === 0) {
+                const pageUrl = window.location.href;
+                const param = pageUrl.split('?')[1];
+                window.location.href = '/auth/oauth/authorize?' + param;
+            } else {
+                console.log('登录失败：' + resp.data.msg);
+            }
+        });
+    });
+
+    function postRequest(url, params) {
+        return axios({
+            method: 'post',
+            url: `${base}${url}`,
+            data: params,
+            transformRequest: [function (data) {
+                let ret = '';
+                for (let it in data) {
+                    ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';
+                }
+                return ret;
+            }],
+            headers: {
+                'Content-Type': 'application/x-www-form-urlencoded'
+            }
+        });
+    }
+</script>
+```
+
+- 登录跳转操作，这里会走到 Nginx 中进行转发。
+
+#### 5.2 客户端01
+
+```html
+<div>
+    <button id="testButton">开始下单</button>
+    <p id="result">下单结果：</p>
+</div>
+
+<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
+<script>
+
+const base = 'http://client1.xfg.com';
+function getRequest(url) {
+    return axios.get(`${base}${url}`);
+}
+
+document.getElementById('testButton').addEventListener('click', function() {
+    getRequest('/client1/create_pay_order').then(resp => {
+        const resultElement = document.getElementById('result');
+        if (resp.data.code === 0) {
+            const linkHtml = "&nbsp;&nbsp;<a href='http://client2.xfg.com/client2Page/#/home'>领红包</a>";
+            resultElement.innerHTML = resp.data.data + linkHtml;
+        } else if (resp.data.code === 800) {
+            window.location.href = resp.data.data;
+        } else {
+            console.log('失败：' + resp.data);
+        }
+    }).catch(error => {
+        console.log('请求失败：', error);
+    });
+});
+
+</script>
+```
+
+- 下单的时候会检查是否登录，否则会被调整到 auth 校验。
+
+#### 5.2 客户端02
+
+```html
+<div>
+    <button id="testButton">随机红包</button>
+    <p id="result">红包结果：</p>
+</div>
+
+<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
+<script>
+
+const base = 'http://client2.xfg.com';
+function getRequest(url) {
+    return axios.get(`${base}${url}`);
+}
+
+document.getElementById('testButton').addEventListener('click', function() {
+    getRequest('/client2/lottery').then(resp => {
+        const resultElement = document.getElementById('result');
+        if (resp.data.code === 0) {
+            resultElement.textContent = resp.data.data;
+        } else if (resp.data.code === 800) {
+            window.location.href = resp.data.data;
+        } else {
+            console.log('失败：' + resp.data);
+        }
+    }).catch(error => {
+        console.log('请求失败：', error);
+    });
+});
+
+</script>
+```
+
+- 与 client1 的操作是一样的，但这里只要有一个登录了，另外一个就不会调整到 auth 页面登录了。
+
+### 6. Nginx 配置
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/spring-oauth2-sso-01-04.png" width="400px">
+</div>
+
+- Nginx 配置结构，docker compose 启动的时候会进行安装。
+
+#### 6.1 sso.conf
+
+```java
+server {
+    listen       80;
+    server_name  sso.xfg.com;
+
+    location /auth/ {
+        proxy_set_header Host $host;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_pass http://192.168.1.107:8091/auth/;
+    }
+
+    location /authPage/ {
+        alias /usr/share/nginx/html/;
+        index auth.html;
+    }
+
+    location ~ .*\.(js|css)$ {
+         alias /usr/share/nginx/html/;
+         index auth.html;
+    }
+
+}
+```
+
+#### 6.2 client1.conf
+
+```java
+server {
+    listen       80;
+    server_name  client1.xfg.com;
+
+    location /client1/ {
+        proxy_set_header Host $host;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_pass http://192.168.1.107:8001/client1/;
+    }
+
+    location /client1Page/ {
+        alias /usr/share/nginx/html/;
+        index client1.html;
+    }
+
+    location ~ .*\.(js|css)$ {
+        alias /usr/share/nginx/html/;
+        index client1.html;
+    }
+}
+```
+
+#### 6.3 client2.conf
+
+```java
+server {
+    listen       80;
+    server_name  client2.xfg.com;
+
+    location /client2/ {
+        proxy_set_header Host $host;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_pass http://192.168.1.107:8002/client2/;
+    }
+
+    location /client2Page/ {
+        alias /usr/share/nginx/html/;
+        index client2.html;
+    }
+
+    location ~ .*\.(js|css)$ {
+        alias /usr/share/nginx/html/;
+        index client2.html;
+    }
+}
+```
+
+> 更多的代码从工程中阅读即可，复杂度不高。
+
+## 三、测试验证
+
+### 1. 启动服务
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/spring-oauth2-sso-01-05.png" width="600px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/spring-oauth2-sso-01-07.png" width="600px">
+</div>
+
+- 你需要启动 Docker 的 Nginx，之后顺序启动 SSO 服务和2个客户端服务。
+- 另外要配置好 host，这样访问你的自定义域名地址，才会正确的跳转。（这东西在日常公司开发中会用到的很频繁）
+
+### 2. 访问客户端
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/spring-oauth2-sso-01-06.png" width="850px">
+</div>
+
+你可以访问地址1进行验证，登录之后也可以进入地址2进行验证；
+
+- [http://client1.xfg.com/client1Page/#/home](http://client1.xfg.com/client1Page/#/home)
+- [http://client2.xfg.com/client2Page/#/home](http://client2.xfg.com/client2Page/#/home)
+
+测试过程：
+
+- 首次登录，点击开始下单。会跳转登录，账密（xiaofuge/123456）。
+- 登录后再点击开始下单，则会看到下单完成，领红包。
+- 点击领红包，会跳转到 client2 的页面，点击随机红包，会进行服务端授权校验，之后就可以点击随机红包了。
diff --git a/docs/md/road-map/spring-oauth2.md b/docs/md/road-map/spring-oauth2.md
new file mode 100644
index 000000000..fa0d1e13b
--- /dev/null
+++ b/docs/md/road-map/spring-oauth2.md
@@ -0,0 +1,327 @@
+---
+title: OAuth2
+lock: need
+---
+
+# OAuth2 - 图解+案例，理解和实战OAuth2认证授权
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+你知道互联网大厂最怕的是什么吗？但凡有点这样的风吹草动，我们就要花费大量的时间进行修复和上线。一点都不敢耽误，对于紧急类型的，基本当天发现，当天就要升级上线。那是什么问题呢？🤔
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/student-learn-01.gif" width="150px">
+</div>
+
+**其实最怕的就是各类组件漏洞！**
+
+有这么一个东西，[13scan - 安全漏洞扫描](https://bugstack.cn/md/road-map/13scan-jdumpspider.html) 它可以扫描出系统组件的各项存在的漏洞，给出整改建议。因为这些漏洞的存在，就可能让不法用户通过接口调用到系统数据。比如，随意输入个订单号，就知道是谁，什么时间、购买的什么、地址在哪。这是非常可怕的。
+
+所以，在互联网大厂中，会有统一的安全授权认证服务 OAuth2。这样即使有外部对接的系统确实需要授权获得用户的数据，也可以在可靠的范围内进行授权和使用。
+
+那么，OAuth2 是个啥呢？🤔 本节我们来分享下并做个代码案例运行验证。
+
+## 一、OAuth2 是啥？
+
+**OAuth 2.0 的标准 RFC 6749，解释了 OAuth 是什么。**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-oauth2-01.png" width="650px">
+</div>
+
+**官网**：[https://datatracker.ietf.org/doc/html/rfc6749](https://datatracker.ietf.org/doc/html/rfc6749)
+
+OAuth 2.0 本身是一种开放标准，不是一个具体的服务类组件，而是一种标准。旨在为用户提供授权，允许第三方应用程序访问用户在某个服务提供者（如社交网络或云服务）上的信息，而无需将用户的凭证（如用户名和密码）透露给这些应用程序。OAuth 2.0 主要用于授权，而不是身份验证。
+
+而 Spring 中 OAuth2 就是对这套标准的具体实现，但这不是唯一实现，你甚至可以通过这套标准做一套自己的 OAuth2 授权框架。
+
+## 二、举个例子
+
+大家在日常的生活中使用互联网类的产品，包括；购物、视频、出行等，都可能收到活动类的短信，问你是否要参与一个这样的活动，如果参与则需要点击授权允许。那么这个过程就有 OAuth2 的授权使用。如图；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-oauth2-02.png" width="750px">
+</div>
+
+- 这是一套用户参与小傅哥分享的星球用户活动页面。用户点击参与后，会引导进入授权验证。显示进入微信登录，之后跳转到用户数据授权使用页。
+- 用户允许授权后，小傅哥的这套活动页就可以拿到用户个人的数据，通过个人的数据为唯一标识，允许用户参与本次活动。这些活动可以是一些抽奖、礼包领取、代码仓库授权等。这些场景的使用，就是 OAuth2 的授权框架作用。
+
+## 三、授权方式
+
+在看 OAuth2 之前，可以代入的思考下，如果是你做一个认证授权框架，你会怎么做。其实你在最开始学习编程使用账号密码在数据库里匹配验证，完成后生成一个 Token 让前端保存到 Cookie 里，之后每次请求后端都携带上这个 Cookie 进行校验。
+
+其实这个模型就是认证授权框架。认证；使用账密证明你是你，授权，则通过账密分配一个Token，让使用放通过 Token 进行数据访问。
+
+那么，OAuth2 作为认证授权框架，提供了四种授权访问，包括；
+- 授权模型（authorization-code）
+- 隐藏模式（简单授权）（implicit）
+- 密码模式（password）
+- 客户端凭证模式（client credentials）
+
+这四种授权方式，逐渐减弱。不过，无论那种授权方式，在第三方应用申请可调用数据的令牌前，都需要先完成系统备案，验明自身身份。包括客户端 ID、客户端秘钥 Client Secret。
+
+### 1. 授权模型
+
+授权模式：指第三方应用先申请一个授权码，之后再使用该码获得令牌。授权码模式通常用于具有浏览器界面的应用程序，尤其是在需要用户交互的场景下，例如传统的Web应用。由于使用了重定向和授权码，维护了更高的安全性。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-oauth2-03.png" width="650px">
+</div>
+
+**工作流程：**
+
+1. 用户在客户端（第三方应用）上点击登录。
+2. 客户端将用户重定向到授权服务器，携带其注册的客户端ID、重定向URI和请求的权限范围。
+3. 用户在授权服务器上验证身份，并同意授权后，授权服务器将用户重定向回客户端，附带一个授权码。
+4. 客户端使用该授权码向授权服务器请求访问令牌，同时发送客户端ID、客户端密钥和重定向URI。
+5. 授权服务器验证请求，并返回访问令牌（和可选的刷新令牌）。
+6. 客户端使用访问令牌访问受保护的资源。
+
+### 2. 隐藏模式
+
+隐式模式主要适用于在Web浏览器中运行的单页应用（SPA）等不安全的客户端环境，因为不需要后台服务器交换授权码，简化了流程。然而，隐式模式由于直接暴露令牌，安全性较低，不建议用于敏感操作。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-oauth2-04.png" width="650px">
+</div>
+
+**工作流程：**
+
+1. 用户在客户端上点击登录。
+2. 客户端将用户重定向到授权服务器，携带客户端ID、重定向URI及请求的权限范围。
+3. 用户在授权服务器进行身份验证，并同意授权后，授权服务器立即将访问令牌作为URI片段重定向回客户端。
+4. 客户端在接收到重定向后，解析URI以获取访问令牌，随后可直接使用该令牌访问受保护的资源。
+
+### 3. 密码模式
+
+密码模式适用于用户信任客户端的情况，如用户通过原生应用（移动应用）访问服务。在此情况下，客户端直接处理用户的凭据，使用时要确保应用的安全性。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-oauth2-05.png" width="650px">
+</div>
+
+**工作流程：**
+
+1. 用户在客户端直接输入其用户名和密码。
+2. 客户端将用户的凭据（用户名和密码）发送到授权服务器，请求访问令牌。
+3. 授权服务器验证凭据并返回访问令牌（和可选的刷新令牌）。
+4. 客户端使用访问令牌访问受保护的资源。
+
+### 4. 客户端凭证模式
+
+客户端凭证模式主要用于服务器与服务器之间的通信，如后台服务相互访问API，或者服务自身需要访问其资源。适用于没有用户上下文的场景，更多用于机器对机器（M2M）通信。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-oauth2-06.png" width="650px">
+</div>
+
+**工作流程**
+
+1. 客户端向授权服务器发送包含其客户端ID和客户端密钥的请求，请求访问令牌。
+2. 授权服务器验证客户端身份，并返回访问令牌。
+3. 客户端使用访问令牌访问受保护的资源，通常是与服务器本身相关的资源。
+
+## 四、授权代码
+
+有了上面的概念，我们再来看个实际的案例工程，验证四种授权模式。环境信息如下；
+
+- JDK 1.8
+- Maven 3.8.*
+- MySQL 5.x ~ 8.x，案例使用的是 8.x
+
+### 1. 工程结构
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-oauth2-07.png" width="450px">
+</div>
+
+- 首先，案例工程提供了 OAuth2 的授权框架 + 数据库配置实现。
+- docs 下提供了 docker compose 安装 MySQL 的脚本和导入库表的操作，这套库表就是授权框架的库表。
+- 验证功能的时候需要使用到 ApiPost，你可以下载使用，并到 api-json 导入。
+
+### 2. 核心实现
+
+除了 OAuth2 关于 Spring Security 部分已经在前面的课程讲解过，可以补充学习。[https://bugstack.cn/md/road-map/spring-security.html](https://bugstack.cn/md/road-map/spring-security.html)
+
+#### 2.1 账户认证
+
+```java
+@Override
+public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+    String clientId;
+    if (authentication != null) {
+        Object principal = authentication.getPrincipal();
+        if (principal instanceof User) {
+            User clientUser = (User) principal;
+            clientId = clientUser.getUsername();
+        } else if (principal instanceof OauthAccountUserDetails) {
+            getClientIdByRequest();
+            return (OauthAccountUserDetails) principal;
+        } else {
+            throw new UnsupportedOperationException();
+        }
+    } else {
+        clientId = getClientIdByRequest();
+    }
+    // 校验用户 - 直接从数据库查询
+    OauthAccount account = oauthAccountDao.loadUserByUsername(clientId, username);
+    if (account == null || !account.getAccountNonDeleted()) {
+        throw new UsernameNotFoundException("err user is not found!");
+    }
+    return new OauthAccountUserDetails(account, new ArrayList<>());
+}
+```
+
+#### 2.2 刷新授权
+
+```java
+@Bean
+public TokenEnhancer additionalInformationTokenEnhancer() {
+    return (accessToken, authentication) -> {
+        Map<String, Object> information = new HashMap<>(8);
+        Authentication userAuthentication = authentication.getUserAuthentication();
+        if (userAuthentication instanceof UsernamePasswordAuthenticationToken) {
+            UsernamePasswordAuthenticationToken token = (UsernamePasswordAuthenticationToken) userAuthentication;
+            Object principal = token.getPrincipal();
+            if (principal instanceof OauthAccountUserDetails) {
+                OauthAccountUserDetails userDetails = (OauthAccountUserDetails) token.getPrincipal();
+                OauthAccount oauthAccount = userDetails.getOauthAccount();
+                information.put("account_info", UserAccountVO.builder()
+                        .id(oauthAccount.getId())
+                        .clientId(oauthAccount.getClientId())
+                        .username(oauthAccount.getUsername())
+                        .mobile(oauthAccount.getMobile())
+                        .email(oauthAccount.getEmail())
+                        .build());
+                ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(information);
+            }
+        }
+        return accessToken;
+    };
+}
+```
+
+#### 2.3 添加账户
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-oauth2-08.png" width="850px">
+</div>
+
+```java
+@Resource
+private PasswordEncoder passwordEncoder;
+@Test
+public void test_passwordEncoder() {
+    log.info("测试结果:{}", passwordEncoder.encode("123456"));
+}
+```
+
+- 这里测试可以生成一个需要的密码，账户填写到数据库中使用。
+
+### 3. 测试验证
+
+在测试之前，你要启动服务，确保运行没问题。启动前配置数据库连接。
+
+```java
+spring:
+  datasource:
+    username: root
+    password: 123456
+    url: jdbc:mysql://192.168.1.109:13306/xfg-dev-tech-oauth2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&useSSL=true
+    driver-class-name: com.mysql.cj.jdbc.Driver
+```
+
+- 关于 ApiPost 的测试，你可以直接从工程中的 json 导入的你的 ApiPost 就可以使用了。
+
+#### 3.1 客户端凭证
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-oauth2-09.png" width="850px">
+</div>
+
+```java
+{
+	"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiYmlnLW1hcmtldC1hcHAiXSwic2NvcGUiOlsicmVhZCIsIndyaXRlIl0sImV4cCI6MTczNjY3OTA4MCwiYXV0aG9yaXRpZXMiOlsidXNlciJdLCJqdGkiOiI4NWY0YjY2Ni1mNDliLTRiNGEtOTM1Ni0xYjRiMTVmZmI5MWEiLCJjbGllbnRfaWQiOiJ4Zmctc3R1ZGlvIn0.CqMOMbBkHMnQicpkBEeqMyJEp9HbSiGgXoYUke_PWtI",
+	"token_type": "bearer",
+	"expires_in": 7198,
+	"scope": "read write",
+	"jti": "85f4b666-f49b-4b4a-9356-1b4b15ffb91a"
+}
+```
+
+- 请求：[http://127.0.0.1:8091/oauth/token?grant_type=client_credentials](http://127.0.0.1:8091/oauth/token?grant_type=client_credentials)
+- 认证：`xfg-studio/123456`
+
+#### 3.2 用户密码模式
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-oauth2-10.png" width="850px">
+</div>
+
+```java
+{
+	"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiYmlnLW1hcmtldC1hcHAiXSwiZXhwIjoxNzM2Njc5MTQxLCJ1c2VyX25hbWUiOiJ4aWFvZnVnZSIsImp0aSI6ImVhZWMzZmQ0LTViOTAtNGRhNy1hODQ1LTA2MDFmMjJiNDc2ZCIsImNsaWVudF9pZCI6InhmZy1zdHVkaW8iLCJzY29wZSI6WyJyZWFkIiwid3JpdGUiXX0.JgUxx6_aHqCBxuvYXvekw-ZW5pPnSw5LEKlfsd4qVyI",
+	"token_type": "bearer",
+	"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiYmlnLW1hcmtldC1hcHAiXSwidXNlcl9uYW1lIjoieGlhb2Z1Z2UiLCJzY29wZSI6WyJyZWFkIiwid3JpdGUiXSwiYXRpIjoiZWFlYzNmZDQtNWI5MC00ZGE3LWE4NDUtMDYwMWYyMmI0NzZkIiwiZXhwIjoxNzM5MjYzOTQyLCJqdGkiOiI5ZDc4ZjVjZS0xZTMwLTRiZTYtYWUyNi01NjY1NWQ4YjYzZjIiLCJjbGllbnRfaWQiOiJ4Zmctc3R1ZGlvIn0.8gMfqhBnc4wI9BsRENu_16RmZFqeCWVSyWcF4B9nA1I",
+	"expires_in": 7198,
+	"scope": "read write",
+	"account_info": {
+		"id": null,
+		"clientId": "xfg-studio",
+		"username": "xiaofuge",
+		"mobile": "13500002222",
+		"email": "523088136@qq.com"
+	}
+}
+```
+
+- 请求：[http://127.0.0.1:8091/oauth/token](http://127.0.0.1:8091/oauth/token)
+- 认证：`xfg-studio/123456`
+- 参数：`grant_type = password`、`username = xiaofuge`、`password = 123456`
+
+#### 3.3 授权模式
+
+##### 3.3.1 登录认证
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-oauth2-11.png" width="850px">
+</div>
+
+```java
+{
+	"status": 200,
+	"message": "hi login success!"
+}
+```
+
+- 请求：[http://127.0.0.1:8091/login](http://127.0.0.1:8091/login)
+- 认证：`xfg-studio/123456`
+- 参数：`username = xiaofuge`、`password = 123456`
+- 说明：你会拿到一个 Cookie `JSESSIONID=9000E64733AA6E947054AC4326C91AF8` 这个 cookie 用于获取授权码
+
+##### 3.3.2 获取授权码&跳转
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-oauth2-12.png" width="850px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-oauth2-13.png" width="850px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-oauth2-14.png" width="850px">
+</div>
+
+- 请求：[http://127.0.0.1:8091/oauth/authorize?client_id=xfg-studio&response_type=code&grant_type=authorization_code](http://127.0.0.1:8091/oauth/authorize?client_id=xfg-studio&response_type=code&grant_type=authorization_code)
+- 认证：无
+- 参数：`client_id = xfg-studio`、`response_type = code`、`grant_type=authorization_code`
+- 注意：如果 oauth_client_details 表字段配置 autoapprove = false 则不会直接跳转页面，会进行让用户确认。
+
+之后刷新令牌、检查令牌，就可以单独测试了。如果部署到云服务器，那么还可以走浏览器访问，单独有一个获取令牌的操作，之后再跳转地址。
diff --git a/docs/md/road-map/spring-security.md b/docs/md/road-map/spring-security.md
new file mode 100644
index 000000000..2994d05bc
--- /dev/null
+++ b/docs/md/road-map/spring-security.md
@@ -0,0 +1,777 @@
+---
+title: Spring Security
+lock: need
+---
+
+# Spring Security
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+<iframe id="B-Video" src="//player.bilibili.com/player.html?isOutside=true&aid=113676560369427&bvid=BV1pbkKYiEsM&cid=27412529520&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="100%" height="480"> </iframe>
+
+大家好，我是技术UP主小傅哥。
+
+在互联网大厂这些年做研发这么多年，有一个非常指导性的开发原则就是；你做的这个东西是否能让整个大组内的其他系统使用。所以，从15年入职开始，我有的各种创新的想法都落地实现了，一直被使用到现在。`那些组件也都成了一个个技术专利 👍🏻`
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/chatgpt/openai-01.jpg" width="200px">
+</div>
+
+但其实这样对通用逻辑的共性凝练，开发成统一的组件，在 Spring 框架中是有非常多的，这些东西也都在我们日常使用 Spring 时有所涉猎。包括我们本节要讲解的 Spring Security 组件。
+
+当你想让系统实现登录校验的服务，那么你不可能在每个系统里都写认证和授权服务，那么这个时候就要做一套统一的认证框架。这里 Spring Security 就是专注于为 Java 应用程序提供身份验证和授权的框架。提供；验证、授权、防止会话固定、点击劫持、跨域请求等。
+
+## 一、为啥需要安全框架
+
+举个例子；SpringBoot 有一个 actuator 框架，可以配合普罗米修斯做系统监控。包括采集系统的接口运行数据、JVM 信息、负载等各项指标。
+
+```java
+# 监控
+management:
+  endpoints:
+    web:
+      exposure:
+        include: "*"
+  endpoint:
+    health:
+      show-details: always
+  metrics:
+    export:
+      prometheus:
+        enabled: true
+  prometheus:
+    enabled: true
+```
+
+虽然很好用，但如果你一点安全都不加就直接在工程中配置，那么在网安人员的手里，基本就是一台肉鸡。一套 w13scan 正向代理，就能把你的工程底裤拔掉，拿出你的数据库账号密码。
+
+操作教程：[https://bugstack.cn/md/road-map/13scan-jdumpspider.html](https://bugstack.cn/md/road-map/13scan-jdumpspider.html)
+
+```java
+/bin/zsh /xiaofuge/develop/github/xfg-dev-tech-w13scan-jdumpspider/docs/jdumpspider.sh
+(base) xiaofuge@ZBMac-GV47H1GXD docs % /bin/zsh /Users/xiaofuge/Documents/develop/github/xfg-dev-tech-w13scan-jdumpspider/docs/jdumpspider.sh
+===========================================
+SpringDataSourceProperties
+-------------
+password = 123456
+driverClassName = com.mysql.cj.jdbc.Driver
+url = jdbc:mysql://127.0.0.1:13306/road_map?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC&useSSL=true
+username = root
+```
+
+所以，任何你暴漏出去对外使用的服务，都要做安全框架的认证和授权。
+
+## 二、认证和授权的原理
+
+有不少伙伴在初次使用 Spring Security 框架的时候，会觉得复杂度有些高。其实在之前没有 SpringBoot 之前，Security 这个框架使用是更复杂的。这也主要是因为 Security 支持的灵活性更高，所以抽象的也更复杂。但其实能做一个完整的小案例，也就不会觉得有多复杂了。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-spring-security-01.png" width="650px">
+</div>
+
+- 其实 Spring Security 要做也就2件事，认证（Authentication）你是谁，授权（Authorization）你干啥。其实就算你不使用 Spring Security 你自己做一个登录的功能，以及允许登录的用户可以操作的流程，也要做这样的事情。
+- Spring Security 在内部维护一个过滤器链，其中每个过滤器都有特定的职责，并且根据所需的服务在配置中添加或删除过滤器。过滤器的顺序很重要，因为它们之间存在依赖关系。
+- 文档：[https://docs.spring.io/spring-security/site/docs/3.0.x/reference/security-filter-chain.html](https://docs.spring.io/spring-security/site/docs/3.0.x/reference/security-filter-chain.html) - Web 应用程序安全过滤链
+
+## 三、一个简单的小案例
+
+Spring Security 提供了最简单的登录访问校验配置，如果你只是想给一些页面添加一个登录页面。那么只需要配置下 pom 和 yml 中提供的用户账密就可以登录校验了。
+
+源码：[https://github.com/fuzhengwei/xfg-dev-tech-spring-security-demo](https://github.com/fuzhengwei/xfg-dev-tech-spring-security-demo)
+
+### 1. 引入 pom
+
+```java
+<dependency>
+    <groupId>org.springframework.boot</groupId>
+    <artifactId>spring-boot-starter-security</artifactId>
+</dependency>
+```
+
+### 2. 配置yml
+
+```java
+server:
+  port: 8099
+
+spring:
+  security:
+    user:
+      name: xiaofuge
+      password: 123456
+```
+
+- security 的账号密码，就是你访问一个链接需要登录的账密。
+- 如果不配置账号，它会有一个固定的 user 加上在启动程序时控制台会随机生成密码。
+
+### 3. 测试接口
+
+```java
+@RestController
+@RequestMapping("/api/auth/")
+public class TestController {
+
+    @GetMapping("hi")
+    public String hi(){
+        return "hi security";
+    }
+}
+```
+
+### 4. 访问验证
+
+地址：[http://localhost:8099/api/test/hi](http://localhost:8099/api/test/hi)
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-spring-security-02.png" width="650px">
+</div>
+
+- 首次访问地址后，会自动跳转到一个登录页面。属于我们配置的账密进行登录。登录完成后，这里会写入一个 cookie，之后就可以访问我们的接口信息了。
+
+## 四、正式工程案例对接
+
+### 1. 工程结构
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-spring-security-03.png" width="650px">
+</div>
+
+- 地址：[https://github.com/fuzhengwei/xfg-dev-tech-spring-security](https://github.com/fuzhengwei/xfg-dev-tech-spring-security)
+- 这是一套在 DDD 六边形分层结构中添加的 Spring Security 认证框架。如图，介绍了分层模块的使用。
+- 接下来我们注册讲解这些代码块的用途。
+
+### 2. GuavaConfig - 本地缓存模拟用户
+
+```java
+@Slf4j
+@Configuration
+public class GuavaConfig {
+
+    @Bean(name = "userCache")
+    public Cache<String, UserEntity> userCache(PasswordEncoder passwordEncoder) {
+        Cache<String, UserEntity> cache = CacheBuilder.newBuilder()
+                .expireAfterWrite(365, TimeUnit.DAYS)
+                .build();
+
+        UserEntity userEntity01 = UserEntity.builder()
+                .userName("xiaofuge")
+                .password(passwordEncoder.encode("123456"))
+                .roles(Arrays.asList(RoleTypeEnum.ADMIN))
+                .build();
+
+        UserEntity userEntity02 = UserEntity.builder()
+                .userName("liergou")
+                .password(passwordEncoder.encode("123456"))
+                .roles(Arrays.asList(RoleTypeEnum.USER))
+                .build();
+
+        log.info("测试账密01 xiaofuge/123456 权限；admin");
+        log.info("测试账密02 liergou/123456 权限；user");
+
+        cache.put(userEntity01.getUserName(), userEntity01);
+        cache.put(userEntity02.getUserName(), userEntity02);
+        return cache;
+    }
+
+}
+```
+
+- 程序启动后，模拟注册完成的用户用户测试验证。用户也可以在测试中自己在注册用户。
+
+### 3. UserDetails 用户身份信息
+
+#### 3.1 身份实现
+
+```java
+public class UserDetailAuthSecurity implements UserDetails {
+
+    @Serial
+    private static final long serialVersionUID = 931859819772024712L;
+
+    private final UserEntity userEntity;
+
+    public UserDetailAuthSecurity(UserEntity userEntity) {
+        this.userEntity = userEntity;
+    }
+
+    @Override
+    public Collection<? extends GrantedAuthority> getAuthorities() {
+        return userEntity.getRoles()
+                .stream()
+                .map(role -> new SimpleGrantedAuthority("ROLE_" + role.getCode()))
+                .collect(Collectors.toList());
+    }
+
+    @Override
+    public String getPassword() {
+        return userEntity.getPassword();
+    }
+
+    @Override
+    public String getUsername() {
+        return userEntity.getUserName();
+    }
+    
+    // ...
+
+}
+```
+
+- 做授权校验是基于用户的 UserDetails 详细身份进行的。这东西就是一个依赖倒置，Spring 定义好接口标准，之后由使用方实现。
+
+#### 3.2 身份获取
+
+```java
+@Service
+public class UserDetailsServiceImpl implements UserDetailsService {
+
+    @Resource
+    private Cache<String, UserEntity> userCache;
+
+    @Override
+    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+        UserEntity userEntity = userCache.getIfPresent(username);
+        if (null == userEntity) return null;
+        return new UserDetailAuthSecurity(userEntity);
+    }
+
+}
+```
+
+- 这里还需要对 UserDetails 包装一层提供一个 UserDetailsService 接口的实现类。
+
+### 4. 授权&校验处理
+
+#### 4.1 JwtAuthenticationProvider - 验证账密
+
+```java
+public class JwtAuthenticationProvider implements AuthenticationProvider {
+
+    private final PasswordEncoder passwordEncoder;
+    private final UserDetailsService userDetailsService;
+
+    public JwtAuthenticationProvider(PasswordEncoder passwordEncoder, UserDetailsService userDetailsService) {
+        this.passwordEncoder = passwordEncoder;
+        this.userDetailsService = userDetailsService;
+    }
+
+    @Override
+    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
+        String username = String.valueOf(authentication.getPrincipal());
+        String password = String.valueOf(authentication.getCredentials());
+
+        UserDetails userDetails = userDetailsService.loadUserByUsername(username);
+        if (passwordEncoder.matches(password, userDetails.getPassword())) {
+            return new UsernamePasswordAuthenticationToken(username, password, userDetails.getAuthorities());
+        }
+
+        throw new BadCredentialsException("Auth Error!");
+    }
+
+    @Override
+    public boolean supports(Class<?> authentication) {
+        return UsernamePasswordAuthenticationToken.class.equals(authentication);
+    }
+
+}
+```
+
+- 这一部分是获取用户名和密码，通过 userDetailsService 获取信息进行密码比对。这个就和我们自己要做一个登录校验的方式是一样的。
+
+#### 4.2 JwtAuthenticationTokenFilter - 校验登录
+
+```java
+@Slf4j
+public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
+
+    private final static String AUTH_HEADER = "Authorization";
+    private final static String AUTH_HEADER_TYPE = "Bearer";
+
+    private final UserDetailsService userDetailsService;
+
+    public JwtAuthenticationTokenFilter(UserDetailsService userDetailsService) {
+        this.userDetailsService = userDetailsService;
+    }
+
+    @Override
+    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
+        String authHeader = request.getHeader(AUTH_HEADER);
+        if (Objects.isNull(authHeader) || !authHeader.startsWith(AUTH_HEADER_TYPE)){
+            filterChain.doFilter(request,response);
+            return;
+        }
+
+        String authToken = authHeader.split(" ")[1];
+        log.info("authToken:{}" , authToken);
+
+        if (!JWTUtil.verify(authToken, "key".getBytes(StandardCharsets.UTF_8))) {
+            filterChain.doFilter(request,response);
+            return;
+        }
+
+        final String userName = (String) JWTUtil.parseToken(authToken).getPayload("username");
+        UserDetails userDetails = userDetailsService.loadUserByUsername(userName);
+
+        UsernamePasswordAuthenticationToken authentication =
+                new UsernamePasswordAuthenticationToken(userDetails.getUsername(), userDetails.getPassword(), userDetails.getAuthorities());
+        authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
+
+        SecurityContextHolder.getContext().setAuthentication(authentication);
+
+        filterChain.doFilter(request, response);
+    }
+
+}
+```
+
+```java
+fetch(url, {
+    method: 'POST',
+    headers: {
+        'Content-Type': 'application/json',
+        'Authorization': `Bearer ${token}` // Include the token in the request headers
+    }
+})
+```
+
+- 这一部分是对 http 请求信息中的 Authorization Bearer 后面带有的 token 信息进行解析校验。如代码中提供了一部分前端请求代码，就是这里的 Token
+
+### 5. 认证&授权配置
+
+```java
+@Configuration
+@EnableWebSecurity
+@EnableMethodSecurity(prePostEnabled = true)
+public class SpringSecurityConfig {
+
+    // 不拦截的 URL
+    private final String[] requestMatchers = {"/api/auth/login", "/api/auth/register", "/api/auth/query_user_name", "/test/**"};
+
+    @Bean
+    public AuthenticationManager authenticationManager(AuthenticationConfiguration authConfig) throws Exception {
+        return authConfig.getAuthenticationManager();
+    }
+
+    @Bean
+    public PasswordEncoder passwordEncoder() {
+        return new BCryptPasswordEncoder();
+    }
+
+    @Bean
+    public JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter(UserDetailsService userDetailsService) {
+        return new JwtAuthenticationTokenFilter(userDetailsService);
+    }
+
+    @Bean
+    public JwtAuthenticationProvider jwtAuthenticationProvider(PasswordEncoder passwordEncoder, UserDetailsService userDetailsService) {
+        return new JwtAuthenticationProvider(passwordEncoder, userDetailsService);
+    }
+
+    @Bean
+    public SecurityFilterChain filterChain(HttpSecurity httpSecurity,
+                                           JwtAuthenticationProvider jwtAuthenticationProvider,
+                                           JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter,
+                                           AppUnauthorizedHandler appUnauthorizedHandler,
+                                           AppAccessDeniedHandler appAccessDeniedHandler
+    ) throws Exception {
+        // 使用JWT，可屏蔽csrf防护
+        httpSecurity.csrf(CsrfConfigurer::disable)
+                // 基于token存储到浏览器，不需要session
+                .sessionManagement(sessionManagementConfigurer -> sessionManagementConfigurer.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
+                .authorizeHttpRequests(authorizationRegistry -> authorizationRegistry
+                        // 允许对于网站静态资源的无授权访问
+                        .requestMatchers(HttpMethod.GET, "/", "/*.html").permitAll()
+                        // 对登录注册允许匿名访问
+                        .requestMatchers(requestMatchers).permitAll()
+                        // 访问授权，所有 /user/** 路径下的请求需要 ADMIN 角色。注意；Spring Security在处理角色时，会自动为角色名添加"ROLE_"前缀。因此，"ADMIN"角色实际上对应权限"ROLE_ADMIN"。
+                        .requestMatchers("/api/mall/**").permitAll()
+                        // 跨域请求会先进行一次options请求
+                        .requestMatchers(HttpMethod.OPTIONS).permitAll()
+                        // 对所有请求开启授权保护
+                        .anyRequest()
+                        // 已认证的请求自动被授权
+                        .authenticated()
+                )
+                // 禁用缓存
+                .headers(headersConfigurer -> headersConfigurer
+                        .cacheControl(HeadersConfigurer.CacheControlConfig::disable)
+                )
+                // 使用自定义 provider
+                .authenticationProvider(jwtAuthenticationProvider)
+                // 添加 JWT filter
+                .addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class)
+                // 添加自定义未授权和未登录结果返回
+                .exceptionHandling(exceptionConfigure -> exceptionConfigure
+                        .accessDeniedHandler(appAccessDeniedHandler)
+                        .authenticationEntryPoint(appUnauthorizedHandler));
+
+        return httpSecurity.build();
+    }
+
+}
+```
+
+- 那么这里所做的就是认证授权的配置，对哪些URL进行放行，哪些是要做拦截。
+- appAccessDeniedHandler、appUnauthorizedHandler，是自定义的鉴权拦截，如果登录不通过，可以统一返回给前端一个固定的错误码，便于跳转登录。
+
+### 6. 注册登录
+
+```java
+@Service
+public class AuthService implements IAuthService {
+
+    @Autowired
+    private PasswordEncoder passwordEncoder;
+
+    @Resource
+    private Cache<String, UserEntity> userCache;
+
+    @Autowired
+    private AuthenticationManager authenticationManager;
+
+    @Override
+    public void register(String userName, String password) {
+
+        UserEntity userEntity = UserEntity.builder()
+                .userName(userName)
+                .password(passwordEncoder.encode(password))
+                .roles(Arrays.asList(RoleTypeEnum.USER, RoleTypeEnum.ADMIN))
+                .build();
+
+        userCache.put(userName, userEntity);
+    }
+
+    @Override
+    public String login(String userName, String password) {
+        // 登录验证
+        authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(userName, password));
+        // 验证通过，获取 token
+        String token = JWT.create()
+                .setExpiresAt(new Date(System.currentTimeMillis() + (1000 * 30)))
+                .setPayload("username", userName)
+                .setKey("key".getBytes(StandardCharsets.UTF_8))
+                .sign();
+
+        return token;
+    }
+
+}
+```
+
+- 在 domain 模块中提供了一个简单的注册&登录服务。注册就是简单的像本地缓存 Guava 写入数据。登录校验会调用登录密码校验处理。在登录成功后返回 JWT 生成的 token 信息。
+
+### 7. 访问拦截
+
+#### 1. 认证授权
+
+```java
+@Slf4j
+@CrossOrigin("*")
+@RestController
+@RequestMapping("/api/auth/")
+public class AuthController {
+
+    @Resource
+    private IAuthService authService;
+
+    @Autowired
+    private AuthenticationManager authenticationManager;
+
+    @PostMapping("query_user_name")
+    public Response<String> queryUserName() {
+        try {
+            // 获取当前认证的用户信息
+            Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+            Object principal = authentication.getPrincipal();
+            return Response.<String>builder()
+                    .code(Response.ResponseCode.SUCCESS.getCode())
+                    .info(Response.ResponseCode.SUCCESS.getInfo())
+                    .data(principal.toString())
+                    .build();
+        } catch (Exception e) {
+            return Response.<String>builder()
+                    .code(Response.ResponseCode.UN_ERROR.getCode())
+                    .info(Response.ResponseCode.UN_ERROR.getInfo())
+                    .build();
+        }
+    }
+
+    @PostMapping("register")
+    public Response<Boolean> register(@RequestParam String userName, @RequestParam String password) {
+        try {
+            log.info("注册用户:{}", userName);
+            authService.register(userName, password);
+            return Response.<Boolean>builder()
+                    .code(Response.ResponseCode.SUCCESS.getCode())
+                    .info(Response.ResponseCode.SUCCESS.getInfo())
+                    .data(true)
+                    .build();
+        } catch (Exception e) {
+            log.info("注册用户失败:{}", userName);
+            return Response.<Boolean>builder()
+                    .code(Response.ResponseCode.UN_ERROR.getCode())
+                    .info(Response.ResponseCode.UN_ERROR.getInfo())
+                    .build();
+        }
+    }
+
+    @PostMapping("login")
+    public Response<String> login(@RequestParam String userName, @RequestParam String password) {
+        try {
+            log.info("登录用户:{}", userName);
+            // 登录获取 token
+            String token = authService.login(userName, password);
+
+            return Response.<String>builder()
+                    .code(Response.ResponseCode.SUCCESS.getCode())
+                    .info(Response.ResponseCode.SUCCESS.getInfo())
+                    .data(token)
+                    .build();
+        } catch (Exception e) {
+            log.info("登录用户失败:{}", userName);
+            return Response.<String>builder()
+                    .code(Response.ResponseCode.UN_ERROR.getCode())
+                    .info(Response.ResponseCode.UN_ERROR.getInfo())
+                    .build();
+        }
+    }
+
+}
+```
+
+- 提供注册、登录和查询用户信息接口。
+- 查询用户有些场景是会通过路径地址获取用户id，再根据用户id查询。但一些安全级别较高的，甚至不会透彻用户id，而是校验登录token，之后缓存用户id在使用。
+
+#### 2. 角色权限
+
+```java
+@Slf4j
+@CrossOrigin("*")
+@RestController
+@RequestMapping("/api/mall/")
+public class MallController {
+
+    @PreAuthorize("hasRole('ADMIN')")
+//    @PreAuthorize("hasRole('USER')")
+    @RequestMapping(value = "create_pay_order", method = RequestMethod.POST)
+    public Response<String> createPayOrder(@RequestBody CreatePayRequestDTO createPayRequestDTO) {
+        try {
+            // 获取当前认证的用户信息
+            Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+            Object principal = authentication.getPrincipal();
+
+            String userName = (String) principal;
+            String productId = createPayRequestDTO.getProductId();
+
+            log.info("商品下单，根据商品ID创建支付单开始 userName:{} productId:{}", userName, productId);
+
+            return Response.<String>builder()
+                    .code(Response.ResponseCode.SUCCESS.getCode())
+                    .info(Response.ResponseCode.SUCCESS.getInfo())
+                    .data(userName + " 下单成功。单号：" + RandomStringUtils.randomAlphabetic(12))
+                    .build();
+        } catch (Exception e) {
+            log.error("商品下单，根据商品ID创建支付单开始 productId:{}", createPayRequestDTO.getProductId(), e);
+            return Response.<String>builder()
+                    .code(Response.ResponseCode.UN_ERROR.getCode())
+                    .info(Response.ResponseCode.UN_ERROR.getInfo())
+                    .build();
+        }
+    }
+
+}
+```
+
+- 用户登录完成后，提供一个下单接口。
+- 注意，接口上有；ADMIN、USER 权限注解，我们在配置默认账号的时候，给xiaofuge是 ADMIN权限，liergou 是USER权限。配置不同的注解，会导致下单成功或者失败。
+
+## 五、通过页面验证逻辑
+
+这里小傅哥提供了一套前端简单的验证页面，方便大家学习；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-spring-security-04.png" width="650px">
+</div>
+
+- 如果感兴趣前端代码的调用，也可以进入源码学习。
+
+```java
+  .   ____          _            __ _ _
+ /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
+( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
+ \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
+  '  |____| .__|_| |_|_| |_\__, | / / / /
+ =========|_|==============|___/=/_/_/_/
+ :: Spring Boot ::                (v3.1.6)
+
+24-12-15.11:22:10.786 [main            ] INFO  Application            - Starting Application using Java 17.0.12 with PID 3656 (/Users/fuzhengwei/1024/KnowledgePlanet/road-map/xfg-dev-tech-spring-security/xfg-dev-tech-app/target/classes started by fuzhengwei in /Users/fuzhengwei/1024/KnowledgePlanet/road-map/xfg-dev-tech-spring-security)
+24-12-15.11:22:10.789 [main            ] INFO  Application            - The following 1 profile is active: "dev"
+24-12-15.11:22:12.330 [main            ] INFO  TomcatWebServer        - Tomcat initialized with port(s): 8091 (http)
+24-12-15.11:22:12.340 [main            ] INFO  Http11NioProtocol      - Initializing ProtocolHandler ["http-nio-8091"]
+24-12-15.11:22:12.343 [main            ] INFO  StandardService        - Starting service [Tomcat]
+24-12-15.11:22:12.343 [main            ] INFO  StandardEngine         - Starting Servlet engine: [Apache Tomcat/10.1.16]
+24-12-15.11:22:12.466 [main            ] INFO  [/]                    - Initializing Spring embedded WebApplicationContext
+24-12-15.11:22:12.466 [main            ] INFO  ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1615 ms
+24-12-15.11:22:12.705 [main            ] INFO  GuavaConfig            - 测试账密01 xiaofuge/123456 权限；admin
+24-12-15.11:22:12.705 [main            ] INFO  GuavaConfig            - 测试账密02 liergou/123456 权限；user
+24-12-15.11:22:13.188 [main            ] INFO  DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@1e225820, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@8aeab9e, org.springframework.security.web.context.SecurityContextHolderFilter@3332c7a5, org.springframework.security.web.header.HeaderWriterFilter@5099c59b, org.springframework.security.web.authentication.logout.LogoutFilter@6ac4c3f7, cn.bugstack.xfg.dev.tech.config.security.JwtAuthenticationTokenFilter@65eb76cd, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@3e39baf0, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@25a94b55, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@2a2dc0a, org.springframework.security.web.session.SessionManagementFilter@3635099, org.springframework.security.web.access.ExceptionTranslationFilter@5eb5da12, org.springframework.security.web.access.intercept.AuthorizationFilter@654e6a90]
+24-12-15.11:22:13.372 [main            ] INFO  Http11NioProtocol      - Starting ProtocolHandler ["http-nio-8091"]
+24-12-15.11:22:13.419 [main            ] INFO  TomcatWebServer        - Tomcat started on port(s): 8091 (http) with context path ''
+24-12-15.11:22:13.432 [main            ] INFO  Application            - Started Application in 3.597 seconds (process running for 4.098)
+```
+
+- 测试前启动 SpringBoot 服务。
+
+### 1. 首次登录
+
+地址：[login.html](login.html)
+
+```java
+function login() {
+        const username = document.getElementById('username').value;
+        const password = document.getElementById('password').value;
+
+        fetch('http://127.0.0.1:8091/api/auth/login', {
+            method: 'POST',
+            headers: {
+                'Content-Type': 'application/x-www-form-urlencoded'
+            },
+            body: new URLSearchParams({
+                userName: username,
+                password: password
+            })
+        })
+        .then(response => response.json())
+        .then(data => {
+            if (data.code === '0000') {
+                // Store token in localStorage on successful login
+                localStorage.setItem('xfg-dev-tech-spring-security-token', data.data);
+                window.location.href = 'index.html'; // 假设登录成功后跳转到首页
+            } else {
+                alert('登录失败: ' + data.info);
+            }
+        })
+        .catch(error => {
+            console.error('Error during login:', error);
+            alert('登录失败');
+        });
+}
+```
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-spring-security-05.png" width="400px">
+</div>
+
+- 测试账号；`xiaofuge/123456`、`liergou/123456`，xiaofuge 是 admin 权限，liergou 是 user 权限，你可以分别测试验证。
+- 你还可以自己注册新的账号进行验证。
+
+### 2. 首页下单
+
+```java
+document.addEventListener("DOMContentLoaded", function () {
+        var token = localStorage.getItem('xfg-dev-tech-spring-security-token');
+        if (!token) {
+            window.location.href = "login.html"; // Redirect to the login page
+            return;
+        }
+
+        var productId = "100010090091";
+        var url = 'http://127.0.0.1:8091/api/auth/query_user_name';
+
+        fetch(url, {
+            method: 'POST',
+            headers: {
+                'Content-Type': 'application/json',
+                'Authorization': `Bearer ${token}` // Include the token in the request headers
+            }
+        })
+        .then(response => response.json()) // Parse the JSON response
+        .then(json => {
+            const userNameDisplay = document.getElementById('userNameDisplay');
+            if (json.code === "0000") {
+                userNameDisplay.textContent = json.data;
+            } else {
+                userNameDisplay.textContent = '未登录';
+            }
+        })
+        .catch(error => {
+            console.error('Error fetching user name:', error);
+            document.getElementById('userNameDisplay').textContent = '未登录';
+        });
+
+    });
+
+document.getElementById('orderButton').addEventListener('click', function() {
+    var token = localStorage.getItem('xfg-dev-tech-spring-security-token');
+    if (!token) {
+        window.location.href = "login.html"; // Redirect to the login page
+        return;
+    }
+
+    var productId = "100010090091";
+    var url = 'http://127.0.0.1:8091/api/mall/create_pay_order';
+
+    var requestBody = {
+        productId: productId
+    };
+
+    fetch(url, {
+        method: 'POST',
+        headers: {
+            'Content-Type': 'application/json',
+            'Authorization': `Bearer ${token}` // Include the token in the request headers
+        },
+        body: JSON.stringify(requestBody) // Convert the request body to a JSON string
+    })
+    .then(response => response.json()) // Parse the JSON response
+    .then(json => {
+        if (json.code === "0000") { // Assume success code is "0000"
+            alert(json.data);
+        } else {
+            alert("code："+json.code +" "+json.info)
+            console.error('Error:', json.info); // Output error information
+        }
+    })
+    .catch(error => console.error('Error:', error));
+});
+```
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-spring-security-06.png" width="950px">
+</div>
+
+- 登录成功后可以通过浏览器 F12 查看到登录的 Token，如果要取消登录，可以操作代码把 Token 删掉。
+- 登录成功后就可以点击下单了。默认代码的权限配置的是只有 xiaofuge 可以下单，liergou不能下单。
+
+#### 2.1 下单通过
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-spring-security-07.png" width="350px">
+</div>
+
+```java
+24-12-15.11:26:48.606 [http-nio-8091-exec-6] INFO  MallController         - 商品下单，根据商品ID创建支付单开始 userName:xiaofuge productId:100010090091
+24-12-15.11:26:57.721 [http-nio-8091-exec-7] INFO  JwtAuthenticationTokenFilter - authToken:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MzQyMzMwMDYsInVzZXJuYW1lIjoieGlhb2Z1Z2UifQ.Dm1Mi_lmm-O9MTte77252ATzNca_2s5bZG_90mdq-48
+24-12-15.11:26:59.069 [http-nio-8091-exec-8] INFO  JwtAuthenticationTokenFilter - authToken:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MzQyMzMwMDYsInVzZXJuYW1lIjoieGlhb2Z1Z2UifQ.Dm1Mi_lmm-O9MTte77252ATzNca_2s5bZG_90mdq-48
+```
+
+#### 2.2 下单拒绝
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-spring-security-08.png" width="350px">
+</div>
+
+```java
+24-12-15.11:26:59.074 [http-nio-8091-exec-8] INFO  MallController         - 商品下单，根据商品ID创建支付单开始 userName:xiaofuge productId:100010090091
+24-12-15.11:27:50.157 [http-nio-8091-exec-9] INFO  AuthController         - 登录用户:liergou
+24-12-15.11:27:50.393 [http-nio-8091-exec-1] INFO  JwtAuthenticationTokenFilter - authToken:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MzQyMzMzMDAsInVzZXJuYW1lIjoibGllcmdvdSJ9.mVRzMx9tLj6A-oEDRElZwfRslhmP5AE0gQGeA6oI0N4
+24-12-15.11:27:51.438 [http-nio-8091-exec-3] INFO  JwtAuthenticationTokenFilter - authToken:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MzQyMzMzMDAsInVzZXJuYW1lIjoibGllcmdvdSJ9.mVRzMx9tLj6A-oEDRElZwfRslhmP5AE0gQGeA6oI0N4
+24-12-15.11:27:51.449 [http-nio-8091-exec-3] ERROR AppAccessDeniedHandler - access error
+org.springframework.security.access.AccessDeniedException: Access Denied
+```
+
+- 如日志，当权限拦截后，就会弹出指定的错误码信息。
+- 权限拦截是在 AppAccessDeniedHandler 实现类中指定的错误码。
diff --git a/docs/md/road-map/springcloud-bus.md b/docs/md/road-map/springcloud-bus.md
new file mode 100644
index 000000000..2d1942874
--- /dev/null
+++ b/docs/md/road-map/springcloud-bus.md
@@ -0,0 +1,422 @@
+---
+title: SpringCloud Bus
+lock: need
+---
+
+# SpringCloud Bus 消息总线
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+在互联网公司中开发的项目经常有一种场景，是在不重启应用的情况下，变更应用中某个属性信息的值。比如，我们为系统新增加允许外部调用接入的SC渠道值，测试阶段验证名单PIN、持续发布上线后的切量。这些东西都是不重启应用的情况下，动态做配置变更，那这样的东西在 SpringCloud 有什么现成的组件可以使用呢？
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-feign-01.gif" width="200px">
+</div>
+
+**在大厂这个组件叫什么？**
+
+这个东西它不同于 Redis，而是把配置写到本地类对应的属性上。而不是像 Redis 那样从一个统一的地方每次去取使用。在大厂中我们管这个组件叫统一配置中，专门应对分布式工程中类对应属性的值的控制。
+
+在小傅哥的大营销项目中，也带着大家实现过这样一款组件，叫[DCC](https://bugstack.cn/md/project/big-market/api/%E7%AC%AC29%E8%8A%82%EF%BC%9A%E5%88%86%E5%B8%83%E5%BC%8F%E5%8A%A8%E6%80%81%E9%85%8D%E7%BD%AE%E6%B4%BB%E5%8A%A8%E9%99%8D%E7%BA%A7.html)，基于 Zookeeper + AOP 切面实现。
+
+那么我们本节来看看 SpringCloud 是如何来处理这样一个场景的。
+
+## 一、组件介绍
+
+Spring Cloud Bus 将分布式系统的节点与轻量级消息代理相链接。然后可以使用它来广播状态更改（例如配置更改）或其他管理指令。该项目包含 AMQP 和 Kafka 代理实现。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-bus-01.png" width="750px">
+</div>
+
+在微服务架构中，通常使用轻量级的消息代理来创建一个共享的消息主题，让所有微服务实例都可以连接到这个主题上。因为这个主题中的消息会被所有实例监听和消费，因此通常称之为“消息总线”。连接到总线的每个实例都可以轻松地广播消息，以便所有其他连接该主题的实例能够接收到这些信息。
+
+## 二、测试工程
+
+小傅哥这里搭建了一套用于测试验证 SpringCloud Bus 消息总线的服务。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-bus-02.png" width="750px">
+</div>
+**工程**：[https://github.com/fuzhengwei/xfg-dev-tech-springcloud-bus](https://github.com/fuzhengwei/xfg-dev-tech-springcloud-bus) - `你可以把工程fork到你的github仓库，之后做后面的操作。`
+
+- 环境要求；jdk 1.8、maven 3.8.x、kafka - 提供了 docker 安装脚本在 docs 下。之后还有一个 [natapp](https://natapp.cn/) 做内网穿透。
+- 模块职责；config-bus 配置了整套消息总线所需的服务模块，一个是 eureka 的 registry 注册中心，一个是 SpringCloud Bus 消息总线的服务 server。kafka 是通用的模块，便于统一配置。xfg-dev-tech-app 是测试工程模块。
+
+## 三、环境安装
+
+本节的案例工程会需要用到 Kafka、RabbitMQ，所以需要安装这两套环境。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-bus-03.png" width="750px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-rabbitmq-02.png" width="750px">
+</div>
+
+- Mac 电脑会比较好安装一些，直接在 IntelliJ IDEA 点击小绿色按钮即可完成安装。安装完成后进入 [http://localhost:9000/#!/2/docker/containers](http://localhost:9000/#!/2/docker/containers)- 可看到 Kafka、RabbitMQ 运行。
+- Windows 需要开启 wsl2 在安装 Docker 之后就可以安装 docker 使用了。
+- 如果本机电脑配合低或者比较旧不好安装，推荐使用云服务器进行操作。云服务器就相当于你的一个远程电脑了，非常适合部署这些环境，同时怎么这套都不会影响你的本地环境。[https://618.gaga.plus - 推荐2c4g云服务。
+
+## 四、功能实现
+
+### 1. config-bus-kafka
+
+```java
+@Configuration
+@PropertySource("classpath:system.properties")
+public class KafkaConfig {
+}
+```
+
+```java
+spring.kafka.bootstrap-servers=127.0.0.1:9092
+
+spring.kafka.producer.retries=0
+spring.kafka.producer.batch-size=16384
+spring.kafka.producer.buffer-memory=33554432
+spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
+spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
+
+spring.kafka.consumer.group-id=springcloud-config-bus-group
+spring.kafka.consumer.auto-offset-reset=earliest
+spring.kafka.consumer.enable-auto-commit=false
+spring.kafka.consumer.auto-commit-interval=100
+spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
+spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
+```
+
+- 做一个统一的  kafka 配置 model，让其他模块引入。
+
+### 2. config-bus-registry
+
+```java
+package cn.bugstack.xfg.dev.tech;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
+
+@SpringBootApplication
+@EnableEurekaServer
+public class ConfigBusRegistryApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run( ConfigBusRegistryApplication.class, args );
+    }
+
+}
+```
+
+```java
+server:
+  port: 7397
+
+spring:
+  application:
+    name: eureka-server
+
+eureka:
+  instance:
+    # 使用 ip 代替实例名
+    prefer-ip-address: true
+    # 实例的主机名
+    hostname: ${spring.cloud.client.ip-address}
+    # 实例的 ID 规则
+    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
+  client:
+    # 是否向注册中心注册自己
+    registerWithEureka: false
+    # 是否向注册中心获取注册信息
+    fetchRegistry: false
+    serviceUrl:
+      # 注册中心地址
+      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
+```
+
+- 这部分是一个 eureka 的服务端，让注册中心和客户端，都被 eureka 管理。
+
+### 3. config-bus-server
+
+```java
+package cn.bugstack.xfg.dev.tech;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.config.server.EnableConfigServer;
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+
+@SpringBootApplication
+@EnableConfigServer
+@EnableEurekaClient
+public class ConfigBusServerApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(ConfigBusServerApplication.class, args);
+    }
+
+}
+```
+
+```java
+# 端口
+server:
+  port: 8000
+
+spring:
+  application:
+    name: config-bus-server
+  cloud:
+    config:
+      server:
+        git:
+          # 仓库地址
+          uri: https://github.com/fuzhengwei/xfg-dev-tech-springcloud-bus
+          # 对应 {label} 部分，即 Git 的分支
+          label: master
+          # 仓库文件夹名称，多个以逗号分隔
+          search-paths: config-bus/config-repo
+          # git 仓库用户名（公开库可以不用填写）
+          username:
+          # git 仓库密码（公开库可以不用填写）
+          password:
+    bus:
+      # 开启消息跟踪
+      enabled: true
+      trace:
+        enabled: true
+  kafka:
+    consumer:
+      group-id: config-bus-server-group
+
+eureka:
+  instance:
+    prefer-ip-address: true
+    hostname: ${spring.cloud.client.ip-address}
+    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
+  client:
+    serviceUrl:
+      defaultZone: http://${eureka.instance.hostname}:7397/eureka/
+
+management:
+  endpoints:
+    web:
+      exposure:
+        # 开启刷新端点
+        include: bus-refresh
+```
+
+- git 部分的配置，如注释说明。之后你要修改为自己的 Github 地址，这样你在修改配置时候，才能做 webhook 调用变更。
+- kafka 是默认的消费id，不需要修改。
+- management 需要开启 bus-refresh 刷新断点。
+
+### 4. config-repo
+
+system-dev.properties
+
+```java
+hello=I'm xfg dev config 09
+hi=I'm xfg dev config 08
+```
+
+- 这一层是配置文件，后面在你提交代码修改的时候，工程里也会一起修改。
+
+### 5. xfg-dev-tech-app
+
+#### 5.1 动态配置
+
+```java
+@RestController
+@RefreshScope
+public class ConfigClientController {
+
+    @Value("${hello}")
+    private String hi;
+
+    @RequestMapping("/hi")
+    public String hi() {
+        return this.hi;
+    }
+
+}
+```
+
+验证时访问地址；[http://127.0.0.1:9000/hi](http://127.0.0.1:9000/hi)
+
+#### 5.2 刷新配置
+
+```java
+package cn.bugstack.xfg.dev.tech.trigger;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+@Slf4j
+@RestController
+public class GitHubWebhookController {
+
+    @PostMapping("/webhook")
+    public String handleGitWebhook(@RequestBody String payload) {
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            JsonNode content = mapper.readTree(payload);
+
+            log.info("收到 webhook {} 更新配置通知", content.get("pusher"));
+
+            // 创建URL对象
+            URL url = new URL("http://127.0.0.1:8000/actuator/bus-refresh");
+
+            // 打开连接
+            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+
+            // 设置请求方法为POST
+            connection.setRequestMethod("POST");
+
+            // 开启输入输出流
+            connection.setDoOutput(true);
+
+            // 设置请求头，如果需要，可以设置Content-Type等
+            connection.setRequestProperty("Content-Type", "application/json");
+
+            // 获取输出流
+            try (OutputStream os = connection.getOutputStream()) {
+                // 如果有请求体数据，也可以在这里写入
+                // String jsonInputString = "{\"key\": \"value\"}";
+                // os.write(jsonInputString.getBytes("utf-8"));
+                os.flush();
+            }
+
+            // 发送请求并获取响应码
+            int responseCode = connection.getResponseCode();
+
+            log.info("调用 actuator/bus-refresh 更新全局配置完成 code:{}", responseCode);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return "done";
+    }
+
+}
+```
+
+- 做一个 webhook 接口，github 回调后，调用 `http://127.0.0.1:8000/actuator/bus-refresh` 刷新配置。
+- 也可以手动访问 `http://127.0.0.1:8000/actuator/bus-refresh` 自己刷新配置验证。
+
+## 五、功能验证
+
+### 1. 前置配置
+
+#### 1.1 内网穿透
+
+获取 natapp 免费隧道 authtoken，[https://natapp.cn/tunnel/lists](https://natapp.cn/tunnel/lists) 配置到工程中。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-bus-04.png" width="750px">
+</div>
+
+- 注意：免费隧道配置端口为9000，因为是要把本地这个 9000 端口的服务，映射出去。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-bus-05.png" width="550px">
+</div>
+
+- 启动 natapp 后，会得到一个公网域名地址。这个地址免费的会不断地变化，测试的时候注意。
+
+#### 1.2 webhook 配置
+
+进入 GitHub 工程中，Settings -> Webhooks 页面。地址：[https://github.com/fuzhengwei/xfg-dev-tech-springcloud-bus/settings/hooks/517530722](https://github.com/fuzhengwei/xfg-dev-tech-springcloud-bus/settings/hooks/517530722) - `你的和我的不同`
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-bus-06.png" width="750px">
+</div>
+
+- 拿到公网地址后，配置 webhook。如图配置完点击下面完成。更新的时候点击 update webhook。
+
+### 2. 启动服务
+
+陆续的启动；config-bus-registry、config-bus-server、xfg-dev-tech-app。
+
+### 3. 服务测试
+
+#### 3.1 第1次，访问配置接口
+
+地址：[http://127.0.0.1:9000/hi](http://127.0.0.1:9000/hi)
+
+```java
+I'm xfg dev config 09
+```
+
+#### 3.2 更新线上配置
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-bus-07.png" width="750px">
+</div>
+
+- 你可以在线更新配置，也可以本地更新配置后提交代码到 github。
+- 变更后点击 commit changes
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-bus-08.png" width="850px">
+</div>
+
+- 查看到 webhook 推送的记录。是成功的。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-bus-09.png" width="850px">
+</div>
+
+- 查看日志变更记录。`webhook {"name":"fuzhengwei","email":"fuzhengwei@users.noreply.github.com"} 更新配置通知`
+
+#### 3.2 第2次，访问配置接口
+
+地址：[http://127.0.0.1:9000/hi](http://127.0.0.1:9000/hi)
+
+```java
+I'm xfg dev config 10
+```
+
+- 配置已经从09变更为10，代表测试成功了。
+- 另外你还可以访问 [http://127.0.0.1:8000/system/dev](http://127.0.0.1:8000/system/dev) 查看整体的配置信息。
+
+```java
+{
+    "name": "system",
+    "profiles": [
+        "dev"
+    ],
+    "label": null,
+    "version": "fccaf3233af6d0ae16571d2c907ff87eaf1c8946",
+    "state": null,
+    "propertySources": [
+        {
+            "name": "https://github.com/fuzhengwei/xfg-dev-tech-springcloud-bus/config-bus/config-repo/system-dev.properties",
+            "source": {
+                "hello": "I'm xfg dev config 10",
+                "hi": "I'm xfg dev config 08"
+            }
+        }
+    ]
+}
+```
+
+
+
+
+
diff --git a/docs/md/road-map/springcloud-feign.md b/docs/md/road-map/springcloud-feign.md
new file mode 100644
index 000000000..f72cdef72
--- /dev/null
+++ b/docs/md/road-map/springcloud-feign.md
@@ -0,0 +1,229 @@
+---
+title: SpringCloud Feign
+lock: need
+---
+
+# SpringCloud Feign
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+在过往几年中在帮助大家学习编程中，我会看到不少新人伙伴在项目的时候会纠结，这个是RPC（Dubbo）的、这个是 SpringCloud（Feign）的，这个是 MVC 的、这个是 DDD 的。但其实不用纠结一点都。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-feign-01.gif" width="200px">
+</div>
+
+**其实这些东西都是一通百通**
+
+一个能把 Dubbo 用的透彻的人，换成 Feign 就是小儿科。一个能把 MVC 搞的明明白白的人，换成 DDD 那就是手到擒来。之所以有人会觉得换一下就不会了，是因为原本另外一个就没用明白。各类的工具、框架、组件，在编程中都有非常多的同类替代品。就算即使是 RPC 也是有非常多的产品，尤其中大厂中还有很多自研的组件。
+
+那么今天小傅哥就再分享下 SpringCloud Feign 结合到 DDD 战术设计六边形架构中的使用方式。
+
+## 一、组件介绍
+
+官网：[https://spring.io/projects/spring-cloud](https://spring.io/projects/spring-cloud)
+
+Spring Cloud 为开发人员提供了一系列工具，用于快速构建分布式系统中的一些常见模式（例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、微服务和契约测试）。分布式系统的协调产生了样板模式，使用 Spring Cloud，开发人员可以快速建立实现这些模式的服务和应用程序。它们可以在任何分布式环境中很好地工作，包括开发人员自己的笔记本电脑、裸机数据中心和 Cloud Foundry 等托管平台。
+
+本节会涉及到 Eureka 注册中心、Feign 简化微服务 HTTP 调用组件；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-feign-03.png" width="550px">
+</div>
+
+- Eureka 是一个由 Netflix 开发的服务发现工具，主要用于云端分布式系统中。它允许各个服务在启动时注册自己的信息，并能够动态地发现其他服务的位置和状态，从而实现负载均衡和故障转移。Eureka 在微服务架构中扮演着重要角色，帮助提高系统的可用性和弹性。其易于集成的特性使其成为许多企业在构建复杂分布式应用时的首选工具之一。
+- Feign 是一个受欢迎的 Java HTTP 客户端库，主要用于简化服务间的 HTTP 通信。它通过使用注解来定义 HTTP 请求接口，使得开发者可以更直观地调用远程服务。Feign 提供了可插拔的编码器和解码器，支持多种数据格式，并且可以与 Spring Cloud 集成，方便地实现负载均衡和服务发现。其简洁的 API 和高度的可扩展性，使得 Feign 成为微服务架构中常用的工具之一。
+
+## 二、测试工程
+
+小傅哥这里给搭建了一套测试 Feign 案例的六边形系统架构；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-feign-02.png" width="550px">
+</div>
+
+**工程**：[https://github.com/fuzhengwei/xfg-dev-tech-springcloud-feign](https://github.com/fuzhengwei/xfg-dev-tech-springcloud-feign)
+
+- eureka 模块，包括；server、client 端，server 端是注册中心，用于接收注册上来的服务接口，统一管理负载。client 端是为了模拟提供一个服务接口。你可以任何其他工程来提供 feign 客户端接口，也就是接口的提供方。这样消费方就可以通过注册中心调用了。
+- infrastructure 是基础设施层，在六边形架构中，用于处理调用外部的接口，内部的数据库，缓存等这样的基础功能。在 DDD 的软件设计方法中，会把这部分基础的东西从功能实现中拆分出来。
+- domain 和 infrastructure 是依赖倒置关系，所有 domain 要实现的服务需要的基础数据，都可以通过依赖倒置方式处理。也就是 domain 领域层定义接口，之后由基础设置层做功能实现。在通过 Spring 注入到 domain 领域中 service 具体的类中，这样就可以使用。
+- trigger 名词为触发器，用于承载给外部提供的服务能力，包括；http接口、rpc接口、job任务等，这些要调用我们服务能力的方式，都可以通过 trigger 层来实现。
+
+>更多的关于 DDD 六边形架构，可以从编程路书中学习；[https://bugstack.cn/md/road-map/ddd-guide-03.html](https://bugstack.cn/md/road-map/ddd-guide-03.html)
+
+## 三、功能实现
+
+### 1. 引入 spring cloud
+
+```java
+<parent>
+    <groupId>org.springframework.boot</groupId>
+    <artifactId>spring-boot-starter-parent</artifactId>
+    <version>2.0.6.RELEASE</version>
+    <relativePath/>
+</parent>
+
+<dependencyManagement>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-dependencies</artifactId>
+            <version>Finchley.SR2</version>
+            <type>pom</type>
+            <scope>import</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>2.0.28</version>
+        </dependency>
+    </dependencies>
+</dependencyManagement>
+```
+
+- 在官网中有对应版本关系可以参考：[https://spring.io/projects/spring-cloud](https://spring.io/projects/spring-cloud)
+
+### 2. eureka-server
+
+在公司中 eureka-server 是统一一套的，我们个人学习需要搭建一个这样的工程。
+
+#### 2.1 yml 配置
+
+```java
+server:
+  port: 7397
+
+eureka:
+  instance:
+    hostname: localhost
+  client:
+    registerWithEureka: false
+    fetchRegistry: false
+    serviceUrl:
+      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
+
+spring:
+  application:
+    name: eureka-server
+```
+
+- 添加 eureka 配置信息。这个端口 7397 后面其他的客户端调用就连接这个端口。
+
+#### 2.2 启动类
+
+```java
+package cn.bugstack.xfg.dev.tech;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
+
+@SpringBootApplication
+@EnableEurekaServer
+public class EurekaServerApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run( EurekaServerApplication.class, args );
+    }
+
+}
+```
+
+### 3. Eureka-client
+
+#### 3.1 yml 配置
+
+```java
+server:
+  port: 8002
+
+spring:
+  application:
+    name: eureka-client-api
+
+eureka:
+  client:
+    serviceUrl:
+      defaultZone: http://localhost:7397/eureka/
+```
+
+- 模拟启动一个客户端接口，并填写注册中心地址。
+
+#### 3.2 api 接口
+
+```java
+@EnableEurekaClient
+@RestController
+public class TestApiController {
+
+    @Value("${server.port}")
+    private int port;
+
+    @RequestMapping(path = "/api/queryUserInfo", method = RequestMethod.GET)
+    public String queryUserInfo(@RequestParam String userId) {
+        return "Hi 小傅哥，微信公众号：bugstack虫洞栈 | " + userId + " >: from eureka client port: " + port;
+    }
+
+}
+```
+
+- 添加一个客户端的接口，这里需要注意的是添加了一个 `@EnableEurekaClient` 注解。这样这个接口就可以被 eureka 注册中心管理。
+- 如果你有学习过小傅哥的[API网关](https://bugstack.cn/md/assembly/api-gateway/api-gateway.html)项目，那么就可以了解这样的设计，是如何完成接口注册的。
+
+### 4. 接口使用 - infrastructure
+
+在工程的基础设置层配置对外部的接口调用；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-feign-04.png" width="750px">
+</div>
+
+- 如果没有 fegin 我们最开始调用外部的 http 接口时候，就需要写很多的关于 http 的调用，这个过程是比较复杂的。在使用 feign 后，这个事就变得简单了，同时还增加了负载和故障迁移的能力。
+
+- 当然现在调用http的方式不只是以前的刀耕火种了，可以用 okttp、retrofit2 这样的框架处理 http 调用过程。如下这样的调用方式也是非常好维护的。
+
+```java
+@GET("cgi-bin/token")
+Call<WeixinTokenRes> getToken(@Query("grant_type") String grantType,
+@Query("appid") String appId,
+@Query("secret") String appSecret);
+```
+
+## 四、测试验证
+
+### 1. eureka 启动
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-feign-05.png" width="400px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-feign-06.png" width="400px">
+</div>
+
+- 分别启动 eureka 的服务端和测试的客户端，提供接口能力。
+- 启动后访问 eureka 服务端：[http://127.0.0.1:7397/](http://127.0.0.1:7397/)
+
+### 2. 测试工程启动
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-feign-07.png" width="600px">
+</div>
+
+```java
+fuzhengwei@MacBook-Pro xfg-dev-tech-springcloud-feign % curl http://127.0.0.1:8091/api/v1/query_user_info
+Hi 小傅哥，微信公众号：bugstack虫洞栈 | xfg >: from eureka client port: 8002% 
+```
+
+```java
+]}ServerList:org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList@680aded0
+24-11-24.10:32:49.968 [PollingServerListUpdater-0] INFO  ChainedDynamicProperty - Flipping property: eureka-client-api.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
+```
+
+- 启动应用测试工程，启动后可以访问验证。
+- 验证接口：`http://127.0.0.1:8091/api/v1/query_user_info`
\ No newline at end of file
diff --git a/docs/md/road-map/springcloud-stream.md b/docs/md/road-map/springcloud-stream.md
new file mode 100644
index 000000000..52e735683
--- /dev/null
+++ b/docs/md/road-map/springcloud-stream.md
@@ -0,0 +1,436 @@
+---
+title: SpringCloud Stream
+lock: need
+---
+
+# SpringCloud Stream
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+在我们日常开发中，有很多的同类共性功能组件，如；MQ 的有 Kafka、RabbitMQ，RPC 的有 GRpc、Dubbo。那如果我们想让服务可以平滑的从一套组件切换到另外一套，应该如何处理呢？🤔
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-feign-01.gif" width="200px">
+</div>
+
+**这样的东西我也做过**
+
+在我工作的公司，近10年的发展中，Redis 的缓存服务组件陆续的变换了3、4款，目前有2套最终稳定共用的。那么我为此开发了一款缓存中间件，可以做到动态切换、读写控制、监控管理，可以非常方便的迁移和升级。
+
+那么，在我们使用 MQ 的时候，如果在不改变系统工程代码的情况下，该怎样优雅的从一套MQ迁移到另外一套呢？今天小傅哥就带着大家来办这样一个事。
+
+## 一、组件介绍
+
+官网：[https://spring.io/projects/spring-cloud-stream](https://spring.io/projects/spring-cloud-stream)
+
+Spring Cloud Stream 是一个用于构建与共享消息系统连接的高度可扩展的事件驱动微服务的框架。
+
+该框架提供了一个灵活的编程模型，该模型建立在已建立且熟悉的 Spring 习语和最佳实践之上，包括对持久发布/订阅语义、消费者组和有状态分区的支持。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-stream-01.png" width="450px">
+</div>
+
+Spring Cloud Stream 支持对接的 MQ 包括：RabbitMQ、Kafka、RocketMQ、Azure Service Bus 等。
+
+## 二、测试工程
+
+小傅哥这里搭建了一套测试 MQ 案例的六边形架构；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-stream-02.png" width="650px">
+</div>
+
+**工程**：[https://github.com/fuzhengwei/xfg-dev-tech-springcloud-stream](https://github.com/fuzhengwei/xfg-dev-tech-springcloud-stream)
+
+- docs 提供了使用 docker 安装 kafka、rabbitmq 的环境脚本。docker 安装和使用教程：[https://bugstack.cn/md/road-map/docker.html](https://bugstack.cn/md/road-map/docker.html)
+- trigger 是六边形架构的触发器层，用于接收 MQ 消息。接收后就可以通过调用 domain 领域服务，完成功能的串联。另外 trigger 作为触发器，不只是可以接收 MQ 消息，还可以提供HTTP接口、RPC接口，Job任务调度。
+- domain 领域层是具体的业务逻辑实现层，当业务逻辑中有需要发MQ消息的时候，则可以通过 infrastructure 基础设施层通过依赖倒置实现 domain 领域层 adapter 适配器中的接口，完成消息的发送。
+
+## 三、环境安装
+
+本节的案例工程会需要用到 Kafka、RabbitMQ，所以需要安装这两套环境。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-springcloud-stream-03.png" width="650px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-rabbitmq-02.png" width="650px">
+</div>
+
+- Mac 电脑会比较好安装一些，直接在 IntelliJ IDEA 点击小绿色按钮即可完成安装。安装完成后进入 [http://localhost:9000/#!/2/docker/containers](http://localhost:9000/#!/2/docker/containers)- 可看到 Kafka、RabbitMQ 运行。
+- Windows 需要开启 wsl2 在安装 Docker 之后就可以安装 docker 使用了。
+- 如果本机电脑配合低或者比较旧不好安装，推荐使用云服务器进行操作。云服务器就相当于你的一个远程电脑了，非常适合部署这些环境，同时怎么这套都不会影响你的本地环境。[https://618.gaga.plus](https://618.gaga.plus) - 推荐2c4g云服务。
+
+## 四、功能验证
+
+在做项目的案例前，我们可以先做下 SpringCloud Stream 对接 Kafka、RabbitMQ 的案例，有了这个基础在做整个工程的案例就更容易了。
+
+### 1. pom 配置
+
+```java
+<dependency>
+    <groupId>org.springframework.cloud</groupId>
+    <artifactId>spring-cloud-dependencies</artifactId>
+    <version>Finchley.SR2</version>
+    <type>pom</type>
+    <scope>import</scope>
+</dependency>
+<!-- kafka -->
+<dependency>
+    <groupId>org.springframework.cloud</groupId>
+    <artifactId>spring-cloud-stream-binder-kafka</artifactId>
+</dependency>
+<!-- rabbit -->
+<dependency>
+    <groupId>org.springframework.cloud</groupId>
+    <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
+</dependency>
+```
+
+- 首先在 [spring-cloud-stream](https://spring.io/projects/spring-cloud-stream) 组件官网中是有一套对应的 SpringBoot、SpringCloud 版本匹配的关系的。如果你需要升级版本可以参考官网中的关系。
+- 这里的 kafka、rabbitmq，使用的时候要分别使用，把另外一套不使用的注释掉就可以。
+- 这里我们注释掉 rabbit 的引入，只测试 kafka 部分。
+
+### 2. yml 配置
+
+```java
+spring:
+#  rabbitmq:
+#    addresses: 192.168.1.108
+#    port: 5672
+#    username: admin
+#    password: admin
+#    listener:
+#      simple:
+#        prefetch: 10 # 每次投递n个消息，消费完在投递n个
+  kafka:
+    bootstrap-servers: 192.168.1.105:9092
+    producer:
+      # 发生错误后，消息重发的次数。
+      retries: 1
+      #当有多个消息需要被发送到同一个分区时，生产者会把它们放在同一个批次里。该参数指定了一个批次可以使用的内存大小，按照字节数计算。
+      batch-size: 16384
+      # 设置生产者内存缓冲区的大小。
+      buffer-memory: 33554432
+      acks: 1
+    consumer:
+      # 自动提交的时间间隔 在spring boot 2.X 版本中这里采用的是值的类型为Duration 需要符合特定的格式，如1S,1M,2H,5D
+      auto-commit-interval: 1S
+      # 该属性指定了消费者在读取一个没有偏移量的分区或者偏移量无效的情况下该作何处理：
+      # latest（默认值）在偏移量无效的情况下，消费者将从最新的记录开始读取数据（在消费者启动之后生成的记录）
+      # earliest ：在偏移量无效的情况下，消费者将从起始位置读取分区的记录
+      auto-offset-reset: earliest
+      # 是否自动提交偏移量，默认值是true,为了避免出现重复数据和数据丢失，可以把它设置为false,然后手动提交偏移量
+      enable-auto-commit: false
+  cloud:
+    stream:
+      bindings:
+        output:
+          destination: ${mq.topic.user}
+        input:
+          destination: ${mq.topic.user}
+        myoutput:
+          destination: ${mq.topic.user02}
+        myinput:
+          destination: ${mq.topic.user02}
+
+mq:
+  topic:
+    user: xfg-topic
+    user02: xfg-topic-02
+```
+
+- SpringCloud Stream，支持你以统一一套的方式配置不同的 MQ 渠道。需要使用 kafka、rabbitmq，就可以分别配置。
+- 之后你可以看到，cloud.stream.bindings 可以指定 input、output，这个既可以使用本身 SpringCloud Stream 提供的，也可以自定义。通过这样的一个方式，让所有的  MQ 都以这样的方式进行输入、输出对接。
+- 这里我们注释掉 rabbitmq 只测试 kafka
+
+### 3. 案例代码
+
+#### 3.1 自定义输入输出key
+
+```java
+public interface MyProcessor {
+
+    String INPUT = "myinput";
+    String OUTPUT = "myoutput";
+
+    @Input(INPUT)
+    SubscribableChannel input();
+
+    @Output(OUTPUT)
+    MessageChannel output();
+}
+```
+
+#### 3.2 单测类
+
+##### 3.2.1 默认方式
+
+```java
+Slf4j
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class StreamTest01 {
+
+    @Autowired
+    private MessageProducer producer;
+
+    @Test
+    public void test_publish() throws InterruptedException {
+        for (int i = 0; i < 2; i++) {
+            producer.send("mq 消息，哈喽哇！");
+        }
+
+        new CountDownLatch(1).await();
+    }
+
+    @Component
+    @EnableBinding(Source.class)
+    static class MessageProducer {
+
+        @Autowired
+        private Source source;
+
+        public void send(String message) {
+            source.output().send(MessageBuilder.withPayload(message).build());
+        }
+
+    }
+
+    @Component
+    @EnableBinding({Sink.class})
+    static class MessageConsumer {
+
+        @StreamListener(Sink.INPUT)
+        public void onMessage(String message) {
+            System.out.println("@测试 -> " + message);
+        }
+
+    }
+
+}
+```
+
+```java
+@测试 -> mq 消息，哈喽哇！
+@测试 -> mq 消息，哈喽哇！
+@测试 -> mq 消息，哈喽哇！
+@测试 -> mq 消息，哈喽哇！
+```
+
+- 使用组件中提供的 Source、Sink 带有的 input、output 方式处理消息。
+
+##### 3.2.2 自定义方式
+
+```java
+@Slf4j
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class StreamTest02 {
+
+    @Autowired
+    private MessageProducer producer;
+
+    @Test
+    public void test_publish() throws InterruptedException {
+        for (int i = 0; i < 2; i++) {
+            producer.send("mq 消息，哈喽哇！");
+        }
+
+        new CountDownLatch(1).await();
+    }
+
+    @Component
+    @EnableBinding(MyProcessor.class)
+    static class MessageProducer {
+
+        @Autowired
+        private MyProcessor source;
+
+        public void send(String message) {
+            source.output().send(MessageBuilder.withPayload(message).build());
+        }
+
+    }
+
+    @Component
+    @EnableBinding({MyProcessor.class})
+    static class MessageConsumer {
+        @StreamListener(MyProcessor.INPUT)
+        public void onMessage(String message) {
+            System.out.println("@测试 -> " + message);
+        }
+
+    }
+
+}
+```
+
+```java
+@测试 -> mq 消息，哈喽哇！
+@测试 -> mq 消息，哈喽哇！
+@测试 -> mq 消息，哈喽哇！
+@测试 -> mq 消息，哈喽哇！
+```
+
+- 自定义了 MyProcessor 可以自定设定 input、output 的名称。我这里设定的是 myinput、myoutput
+
+## 五、工程案例 - 六边形架构
+
+### 1. 消息事件定义
+
+```java
+public class UserMessageEvent extends BaseEvent<UserMessageEvent.UserMessage> {
+
+    @Value("${mq.topic.user}")
+    private String topic;
+
+    @Override
+    public EventMessage<UserMessage> buildEventMessage(UserMessage data) {
+        return EventMessage.<UserMessage>builder()
+                .id(RandomStringUtils.randomNumeric(11))
+                .timestamp(new Date())
+                .data(data)
+                .build();
+    }
+
+    @Override
+    public String topic() {
+        return topic;
+    }
+
+    /**
+     * 要推送的事件消息，聚合到当前类下。
+     */
+    @Data
+    @Builder
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class UserMessage {
+        private String userId;
+        private String userName;
+        private String userType;
+    }
+
+}
+```
+
+- 在 domain 领域层，adapter 适配器中定义消息事件。这也就是一个规范，当有基础层需要发送消息的时候，则需要通过定义的消息结构来处理。也就是我们在领域层定义标准，之后由基础设施层完成处理。
+
+### 2. 基础层添加发送工具
+
+```java
+@Slf4j
+@Component
+@EnableBinding(Source.class)
+public class EventPublisher {
+
+    @Autowired
+    @Qualifier(Source.OUTPUT)
+    private MessageChannel messageChannel;
+
+    @Autowired
+    private Source source;
+
+    public void publish(String topic, BaseEvent.EventMessage<?> eventMessage) {
+        try {
+            String messageJson = JSON.toJSONString(eventMessage);
+            source.output().send(MessageBuilder.withPayload(messageJson).build());
+            log.info("发送MQ消息 topic:{} message:{}", topic, messageJson);
+        } catch (Exception e) {
+            log.error("发送MQ消息失败 topic:{} message:{}", topic, JSON.toJSONString(eventMessage), e);
+            throw e;
+        }
+    }
+
+}
+```
+
+- 工程中所有的消息发送方式都是统一一套的，所以我们在基础层定义出发送消息的方法。各个模块需要使用的时候，直接调用就可以了。
+
+### 3. 发送事件消息
+
+```java
+@Service
+public class UserRepository extends UserMessageEvent implements IUserRepository {
+
+    @Resource
+    private EventPublisher publisher;
+
+    @Override
+    public void doSaveUser(UserEntity userEntity) {
+        // 推送消息
+        publisher.publish(this.topic(), this.buildEventMessage(UserMessageEvent.UserMessage.builder()
+                .userId(userEntity.getUserId())
+                .userName(userEntity.getUserName())
+                .userType(userEntity.getUserTypeVO().getDesc())
+                .build()));
+    }
+
+}
+```
+
+- 在基础设施层实现了领域层定义的方法后，就可以在完成业务领域服务功能后，开始推送消息了。
+
+### 4. 监听消费
+
+```java
+@Slf4j
+@Component
+@EnableBinding({Sink.class})
+public class MessageListener {
+
+    @StreamListener(Sink.INPUT)
+    public void onMessage(String message) {
+        log.info("接收消息:{}", message);
+    }
+
+}
+```
+
+- 监听消息，配置一个 INPUT，这样就可以接收到消息了。
+
+### 5. 测试验证
+
+```java
+@Slf4j
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class UserServiceTest {
+
+    @Resource
+    private IUserService userService;
+
+    @Test
+    public void test_register() throws InterruptedException {
+        while (true) {
+            UserEntity userEntity = new UserEntity();
+            userEntity.setUserId("10001");
+            userEntity.setUserName("小傅哥");
+            userEntity.setUserTypeVO(UserTypeVO.T8);
+
+            userService.register(userEntity);
+            Thread.sleep(1500);
+        }
+
+    }
+
+}
+```
+
+```java
+24-12-01.13:33:53.003 [main            ] INFO  AppInfoParser          - Kafka version : 1.0.2
+24-12-01.13:33:53.003 [main            ] INFO  AppInfoParser          - Kafka commitId : 2a121f7b1d402825
+24-12-01.13:33:53.043 [main            ] INFO  EventPublisher         - 发送MQ消息 topic:xfg-topic message:{"data":{"userId":"10001","userName":"小傅哥","userType":"架构师"},"id":"89743057693","timestamp":1733031232650}
+24-12-01.13:33:54.549 [main            ] INFO  EventPublisher         - 发送MQ消息 topic:xfg-topic message:{"data":{"userId":"10001","userName":"小傅哥","userType":"架构师"},"id":"80224746522","timestamp":1733031234546}
+```
+
+- 模拟测试持续发送消息。发送后就可以在监听消息的 MessageListener 收到具体的消息数据。
+
diff --git a/docs/md/road-map/ssl-httpsok.md b/docs/md/road-map/ssl-httpsok.md
new file mode 100644
index 000000000..adbb9292b
--- /dev/null
+++ b/docs/md/road-map/ssl-httpsok.md
@@ -0,0 +1,294 @@
+---
+title: 域名证书 ssl - httpsok
+lock: need
+---
+
+# 又一款！免费的SSL，还能自动续期，支持CDN/OSS！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+从今年开始，越来越多的云服务厂商开始限制了 ssl 1年期的申请，只提供3个月有效期并且限制数量申请。而购买一个 ssl 证书，一年都至少几千块。那没有 ssl 不行吗？🤔 如果你不害怕自己的小网站被嵌入流量污染变成`小yellow广告网站`，还是建议你加下 ssl！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ssl-httpsok-01.png" width="450px">
+</div>
+
+当你手里有超过1个以上的域名，如 `a.com`、`b.com`，之后你还对域名使用了多级域名部署不同的服务，如；`api.a.com`、`openai.b.com`、`blog.b.com` 那么这个时候一种是对每个域名都申请 ssl 证书，另外一种就是购买更贵的泛域名，支持 `*.a.com`。
+
+除了对域名证书的申请还包括了这些域名证书的管理工作，你得知道他们什么时候到期，什么时候要更新。我见过有些互联网公司也有忘记更新域名的情况，从 https 跳转到了访问微信提示的页面。所以我需要一款 `自动续期`、`支持泛域名`、`可视化所有证书时效性`、`可配置CDN`的一款工具！好在，我找到了！
+
+## 一、产品介绍
+
+[https://httpsok.com/?p=4kMR](https://httpsok.com/?p=4kMR)  - 让证书续期更简单，一行命令，轻松搞定SSL证书自动续期！这一款工具的老板，竟然认识小傅哥！😂
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ssl-httpsok-02.png" width="550px">
+</div>
+
+已亲自体验，确实挺好用！像傻瓜相机一样，贼简单。
+
+## 二、ssl证书
+
+### 步骤1；点击申请
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ssl-httpsok-04.png" width="750px">
+</div>
+
+### 步骤2；填写域名
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ssl-httpsok-03.png" width="850px">
+</div>
+
+### 步骤3；域名验证
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ssl-httpsok-05.png" width="850px">
+</div>
+
+### 步骤4；验证成功
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ssl-httpsok-06.png" width="850px">
+</div>
+
+- 如果验证不成功，可以修改下自己的域名 DNS：`ns1.alidns.com`
+
+### 步骤5；等待下发
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ssl-httpsok-07.png" width="850px">
+</div>
+
+### 步骤6；下载证书
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ssl-httpsok-08.png" width="850px">
+</div>
+
+- 这里我们下载 Nginx 的，因为我们的服务是部署 Nginx 的。
+
+## 三、域名配置
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ssl-httpsok-11.png" width="850px">
+</div>
+
+- 配置域名解析，把你要使用的域名和云服务器配置上A记录。这样请求到域名的时候就会解析到服务器的IP了，以及对应的 Nginx 转发。
+
+## 四、Nginx配置
+
+### 1. 脚本工程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ssl-httpsok-09.png" width="850px">
+</div>
+
+- 工程：[https://gitcode.net/KnowledgePlanet/road-map/xfg-dev-tech-ssl](https://gitcode.net/KnowledgePlanet/road-map/xfg-dev-tech-ssl)
+- 说明：工程中提供了Nginx配置的初始信息，你只需要参考修改为自己的域名后，执行 `docker-compose.yml` 即可安装 Nginx
+
+#### 1.1 修改域名
+
+```java
+server {
+    listen       80;
+    listen  [::]:80;
+    server_name  ssl01.xiaofuge.tech;
+
+    rewrite ^(.*) https://$server_name$1 permanent;
+
+}
+
+server {
+    listen       443 ssl;
+    server_name  ssl01.xiaofuge.tech;
+
+    ssl_certificate      /etc/nginx/ssl/_.xiaofuge.tech.pem;
+    ssl_certificate_key  /etc/nginx/ssl/_.xiaofuge.tech.key;
+
+    ssl_session_cache    shared:SSL:1m;
+    ssl_session_timeout  5m;
+
+    ssl_ciphers  HIGH:!aNULL:!MD5;
+    ssl_prefer_server_ciphers  on;
+
+    location / {
+        proxy_set_header   X-Real-IP         $remote_addr;
+        proxy_set_header   Host              $http_host;
+        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
+        root   /usr/share/nginx/html;
+        index  index.html index.htm;
+    }
+
+    error_page   500 502 503 504  /50x.html;
+    location = /50x.html {
+        root   /usr/share/nginx/html;
+    }
+}
+```
+
+- 首先，修改 `ssl01.xiaofuge.tech` 为你的域名。
+- 之后，修改 ssl 地址信息。这个地址是 docker-compose 映射的地址。如果你是 linux 直接安装，则可以直接使用 acme.sh 安装的时候生成的地址。
+- 注意，更多 Nginx 配置 [https://bugstack.cn/md/road-map/nginx.html](https://bugstack.cn/md/road-map/nginx.html)
+
+#### 1.2 修改证书
+
+#### 方式1
+
+```java
+version: '3'
+# docker-compose -f docker-compose.yml up -d
+services:
+  nginx:
+    image: nginx:alpine
+    container_name: nginx
+    ports:
+      - '443:443'
+      - '80:80'
+    volumes:
+      - ./nginx/logs:/var/log/nginx
+      - ./nginx/html:/usr/share/nginx/html
+      - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
+      - ./nginx/conf/conf.d:/etc/nginx/conf.d
+      - ./nginx/ssl:/etc/nginx/ssl/
+    privileged: true
+    restart: always
+```
+
+- 脚本映射了 ssl、conf.d 等文件内容。
+
+#### 方式2
+
+```java
+# 命令执行 docker-compose up -d
+# docker-compose -f docker-compose-nginx.yml up -d
+# 自动部署 https https://httpsok.com/doc/faq/docker-nginx.html
+version: '3.9'
+services:
+  # yum install -y httpd-tools
+  nginx:
+    image: registry.cn-hangzhou.aliyuncs.com/xfg-studio/nginx:latest
+    container_name: nginx
+    restart: always
+    ports:
+      - '443:443'
+      - '80:80'
+    environment:
+      HTTPSOK: https://httpsok.com/console/dashboard 写你的 token curl -s https://get.httpsok.com/ | bash -s 【这里的值】
+    volumes:
+      - ./nginx/logs:/var/log/nginx
+      - ./nginx/html:/usr/share/nginx/html
+      - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
+      - ./nginx/conf/conf.d:/etc/nginx/conf.d
+      - ./nginx/ssl:/etc/nginx/ssl/
+    privileged: true
+```
+
+- 官网说明：[https://httpsok.com/doc/faq/docker-nginx.html](https://httpsok.com/doc/faq/docker-nginx.html)
+
+### 2. 上传文件
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ssl-httpsok-10.png" width="850px">
+</div>
+
+- 配置信息全部修改后，上传到你的云服务器上。
+
+### 3. 执行脚本
+
+```java
+[root@lavm-aatjb98slj httpsok]# docker-compose up -d
+[+] Running 1/1
+ ✔ Container nginx  Started    
+```
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ssl-10.png" width="950px">
+</div>
+
+## 五、访问验证
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ssl-httpsok-12.png" width="850px">
+</div>
+
+- 访问地址；`https://ssl01.xiaofuge.tech/`、`https://ssl02.xiaofuge.tech/` 验证证书是否部署成功。
+- 如图，验证结果符合预期。
+
+## 六、自动部署
+
+这个自动部署非常重要，有了它我们就不用操心是什么时候过期，手动处理了！
+
+如果执行 `crontab -l `缺失命令，则按照下面安装；
+
+1. 进入容器【确保你的Nginx名称是nginx，如果是Nginx更换下】：
+
+   ```sh
+   docker exec -it nginx /bin/bash
+   ```
+
+2. 编辑 `/etc/apt/sources.list` 文件。你可以使用 `nano` 或 `vim`，如果这些编辑器没有安装，可以使用 `echo` 和 `cat` 命令手动编辑。例如：
+
+   ```sh
+   echo 'deb http://deb.debian.org/debian bookworm main' > /etc/apt/sources.list
+   echo 'deb http://security.debian.org/debian-security bookworm-security main' >> /etc/apt/sources.list
+   echo 'deb http://deb.debian.org/debian bookworm-updates main' >> /etc/apt/sources.list
+   ```
+
+3. 安装 `cron`：
+
+   ```sh
+   apt-get update
+   apt-get install -y cron
+   ```
+
+### 1. 获取脚本
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ssl-httpsok-13.png" width="850px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ssl-httpsok-14.png" width="850px">
+</div>
+
+### 2. 执行脚本
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ssl-httpsok-15.png" width="850px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ssl-httpsok-16.png" width="850px">
+</div>
+
+- 从 Docker Portainer 中的 Nginx 进入执行脚本。
+- 如果提示 `crontab not exits` 可以执行 crontab 安装。
+
+### 3. 安装查看
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ssl-httpsok-17.png" width="850px">
+</div>
+
+- 如上表示自动部署正常，当证书剩余15天过期后，会自动部署。
+- 服务器查看
+
+    ```java
+    root@9c0f0d45b3e6:/# crontab -l
+    50 11 * * * '/root/.httpsok/httpsok.sh' -m -r >> '/root/.httpsok/httpsok.log' 2>&1
+    ```
+
+### 4. 证书监控
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/roadmap-ssl-httpsok-18.png" width="850px">
+</div>
+
+- 这里还能看到每个证书剩余的有效期，还可以看到是哪个IP的服务器在使用。
diff --git a/docs/md/road-map/ssl.md b/docs/md/road-map/ssl.md
index 1f0caca23..b8b8cbc87 100644
--- a/docs/md/road-map/ssl.md
+++ b/docs/md/road-map/ssl.md
@@ -1,5 +1,5 @@
 ---
-title: ssl
+title: 域名证书 ssl - freessl
 lock: need
 ---
 
diff --git a/docs/md/road-map/tool.md b/docs/md/road-map/tool.md
new file mode 100644
index 000000000..603327e7a
--- /dev/null
+++ b/docs/md/road-map/tool.md
@@ -0,0 +1,36 @@
+---
+title: Tool
+lock: need
+---
+
+# Tool 工具整理
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+## SSH 客户端工具
+
+1. [nuoshell](https://www.nuoshell.com/) - 一款免费的专门为 Mac OSX 系统打造的，集多功能于一身的 SSH 客户端工具。
+2. [termius](https://termius.com/) - 含付费Plus功能，但基础功能已够用。可以支持电脑和移动设备使用，包括 SFTP 功能。
+3. [WindTerm](https://github.com/kingToolbox/WindTerm) - 专业的跨平台SSH/Sftp/Shell/Telnet/串口终端。完全免费，可用于商业和非商业用途，无任何限制。 
+4. [SSH Config Editor](http://hejki.tilda.ws/ssheditor) - 一款用于管理OpenSSH ssh客户端配置文件的工具。
+5. [ZOC](https://www.emtec.com/zoc/) - ZOC • 适用于 macOS 和 Windows 的 SSH 客户端和终端仿真器。
+6. [SecureCRT](https://mobaxterm.mobatek.net/)  - 带有 X11 服务器、选项卡式 SSH 客户端、网络工具等的增强型 Windows 终端。
+7. [Electerm](https://github.com/electerm/electerm) - 开源终端/ssh/telnet/serialport/sftp客户端(linux, mac, win)。
+8. [PuTTY](https://www.putty.org/) - PuTTY 是一个 SSH 和 telnet 客户端，最初由 Simon Tatham 为 Windows 平台开发。PuTTY 是开源软件，提供源代码，由一群志愿者开发和支持。
+9. [FinalShell SSH工具](http://www.hostbuf.com/t/988.html) - FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求.
+10. [Xterminal](https://www.terminal.icu/) - 不仅是强大的SSH工具，更提供本地控制台，以及更多即将推出的开发相关功能，让您专注于创造卓越的代码。
+
+## MySql 客户端工具
+
+1. [DBeaver Community - Free Universal Database Tool](https://dbeaver.io/download/) - `MySQL、Azure SQL Server、Apache Ignite...`
+2. [Sequel Pro](https://www.sequelpro.com/) - `不太推荐了，有bug`
+3. [Sequel Ace](https://apps.apple.com/us/app/sequel-ace/id1518036000?ls=1) - `推荐，是 Sequel Pro 的扩展维护版。免费好用！`
+4. [Navicat](https://www.navicat.com.cn/products) - `同好用的就是收费，破解的在公司用可不行`
+5. [IntelliJ Datagrip](https://www.jetbrains.com/zh-cn/datagrip/) - `免费使用30天`
+
+---
+
+个人在使用 nuoshell、termius 挺稳又好用。如果你还有好用的客户端，可以点击文末的 `在 GitHub 上编辑此页` 进行提交。这样会记录你的贡献。 
diff --git a/docs/md/road-map/trae.md b/docs/md/road-map/trae.md
new file mode 100644
index 000000000..3294a349b
--- /dev/null
+++ b/docs/md/road-map/trae.md
@@ -0,0 +1,210 @@
+---
+title: Trae.ai
+lock: need
+---
+
+# Trae.ai - 真好用，码农必备工具！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+有人说程序员这个行业👨🏻‍💻总是在革自己的命，一个个编码 AI 工具的出现，是不已经不需要那么多初级 CRUD 程序员了🤔。但恰恰相反，AI 工具的出现，是把初级程序员，迅速培养到了高级工程师！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-nas-01.gif" width="200px">
+</div>
+
+`其实 AI 让程序员更牛！`
+
+以前初学编程看不懂的代码，现在使用AI能动态做解释和提供案例，以前跨语言（java->vue/react）不能做的事情，现在可以搞了。以前不能写的插件（IntelliJ IDEA、谷歌浏览器），现在能实现了。以前写不出的高级感代码，现在随手就拿到全球最优秀的编码方案。
+
+今天介绍一款 AI 开发工具 [Trae.ai](https://www.trae.ai/) ，让刚入门编程的找到学习方法，让初级工程也能写出优秀的代码，让高级研发嘎嘎提高效率！
+
+>文末提供了 AI 应用开发实战项目，想提高  AI 应用编程能力的伙伴，可以获取学习项目。
+
+## 一、软件下载
+
+官网地址：[https://www.trae.ai/](https://www.trae.ai/) 
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-trae-01.png" width="650px">
+</div>
+
+- Trae 是一个自适应的 AI IDE，它可以改变您的工作方式，与您协作以更快地运行。
+- 在使用的时候，你可以一个工程同时在 IntelliJ IDEA 打开，也使用 Trae 打开。😂 `因为习惯 IntelliJ IDEA，各类调试还是很舒服的。`
+
+> 同类软件 [Cursor](https://www.cursor.com/cn)，不过这个想使用好的模型得付费，Trae 是不需要付费的！
+
+## 二、使用体验
+
+### 1. 提问代码
+
+**拖拽代码/文件夹/工程**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-trae-02.png" width="750px">
+</div>
+
+**添加代码到对话**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-trae-03.png" width="750px">
+</div>
+
+**通过#号，选择要对话的内容**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-trae-04.png" width="750px">
+</div>
+
+> 之所以分享这个软件，也是因为很多小白初学编程，拿到一个项目不知道从哪里看。现在你有了这个软件，就可以非常简单的对工程的代码进行提问了。也不需要复制到任何 AI 对话工具了，并且这套软件是免费的。
+
+### 2. 生成代码 - 后端
+
+这里我们举例，复制掘金发文接口，之后让 Trae.ai 帮我包装；
+
+#### 2.1 复制接口
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-trae-05.png" width="750px">
+</div>
+
+#### 2.2 研发设计 - 话术
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-trae-06.png" width="750px">
+</div>
+
+**生成话术，类似于研发设计**
+
+```java
+在 gateway 文件夹下，编写 IJueJinService 类，以 retrofit2 方式包装 curl 请求接口。接口入参仅为必要参数，如；cookie，发文的 Request 对象。
+
+curl 如下；
+
+curl 'https://api.juejin.cn/content_api/v1/article_draft/create?aid=2608&uuid=7058897578062890496' \
+  -H 'accept: */*' \
+  -H 'accept-language: zh-CN,zh;q=0.9,en;q=0.8' \
+  -H 'content-type: application/json' \
+  -b 'store-region=cn-bj; store-region-src=uid; __tea_cookie_tokens_2608=%******a51b13e5; uid_tt_ss=7aff2f2394310b3b71f07006a51b13e5; sid_tt=3813572f48984e4b5b3cc7f90733f2e9; sessionid=3813572f48984e4b5b3cc7f90733f2e9; sessionid_ss=3813572f48984e4b5b3cc7f90733f2e9; sid_ucp_v1=1.0.0-KDU4N2NlM2Q2NjFiODhjOGNhZGE5YzVlOTM4ZWZkY2U3ZTc3MzVjMjAKFwjemIC67ozUAxDT_ci_BhiwFDgCQPEHGgJsZiIgMzgxMzU3MmY0ODk4NGU0YjViM2NjN2Y5MDczM2YyZTk; ssid_ucp_v1=1.0.0-KDU4N2NlM2Q2NjFiODhjOGNhZGE5YzVlOTM4ZWZkY2U3ZTc3MzVjMjAKFwjemIC67ozUAxDT_ci_BhiwFDgCQPEHGgJsZiIgMzgxMzU3MmY0ODk4NGU0YjViM2NjN2Y5MDczM2YyZTk' \
+  -H 'dnt: 1' \
+  -H 'origin: https://juejin.cn' \
+  -H 'priority: u=1, i' \
+  -H 'referer: https://juejin.cn/' \
+  -H 'sec-ch-ua: "Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"' \
+  -H 'sec-ch-ua-mobile: ?0' \
+  -H 'sec-ch-ua-platform: "macOS"' \
+  -H 'sec-fetch-dest: empty' \
+  -H 'sec-fetch-mode: cors' \
+  -H 'sec-fetch-site: same-site' \
+  -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36' \
+  -H 'x-secsdk-csrf-token: 00010000000152d838f2c09c65e4feef033c275a8cff940c12228719074fe36f9ce2d18b4d251833ae62ea768117' \
+  --data-raw '{"category_id":"0","tag_ids":[],"link_url":"","cover_image":"","title":"测试文章","brief_content":"","edit_type":10,"html_content":"deprecated","mark_content":"","theme_ids":[],"pics":[]}'
+
+接口返回结果；
+
+{
+    "err_no": 0,
+    "err_msg": "success",
+    "data": {
+        "id": "7489358088379531291",
+        "article_id": "0",
+        "user_id": "2058727733595230",
+        "category_id": "0",
+        "tag_ids": [],
+        "link_url": "",
+        "cover_image": "",
+        "is_gfw": 0,
+        "title": "测试文章",
+        "brief_content": "",
+        "is_english": 0,
+        "is_original": 1,
+        "edit_type": 10,
+        "html_content": "deprecated",
+        "mark_content": "",
+        "ctime": "1743929226",
+        "mtime": "1743929226",
+        "status": 0,
+        "original_type": 0,
+        "theme_ids": []
+    }
+}
+
+根据接口信息封装 DTO 对象，放到 gateway dto 下。
+```
+
+#### 2.3 编码效果
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-trae-07.png" width="850px">
+</div>
+
+- 生成后，代码会直接写入到你说明的文件夹下，创建好相关的类信息。之后你可以点击全部接受，他会审查代码，如果代码有问题还会检修编写。
+
+### 3. 生成代码 - 前端
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-trae-08.png" width="950px">
+</div>
+
+- 这是小傅哥实现的一套 AI RAG&MCP 知识库项目，设计的一套页面。这套页面使用了 AI 做了大量的编码。`以前能写前端，但总感觉是屎上雕花，不出活！`这回有 AI 工具，省心多了。
+- AI 对于这类既定的，没有复杂的逻辑和各类框架综合使用的，真的描述一句优化UI，它就`苦吃苦吃`的干活了！
+
+> 你发现没，你只要写一些描述，它就能很好的干活了。这是因为 AI Agent 智能体会包括；规划、记忆、召回、工具（MCP），来把需求转换为可以看到的代码。
+
+## 三、实战项目
+
+这是小傅哥最近带着大家做的一套 AI 应用实战项目，《DeepSeek RAG&MCP 增强检索知识库系统》 - 解析文档&Git仓库代码&AI工作流，全程视频手把手教学。
+
+RAG：实现了除普通文档知识解析外，增加了 Git 代码库的拉取和解析，并提供操作接口。为工程师做项目开发时，`需求分析`、`研发设计`、`辅助编码`、`代码评审`、`风险评估`、`上线检测`等，做工程交付提效。
+
+MCP：用不了多久，各大互联网企业都将大量的推进落地，自有 MCP 服务的实现，用于增强企业 AI 应用的提效能力。因为 MCP 的加入，可以让你；一条命令`帮研发`，调用应用系统日志、排查系统CPU负载、自主选择是否调度数据库信息。也可以一条命令`帮运营`，搞定复杂的SQL执行、导出报表、分析数据、完成促活营销券的自动化配置上架。这就是 MCP的魅力！👍🏻
+
+**RAG + MCP = 智能AI工作流，如智能客服，智能编码助手，智能运维工程师等。**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/roadmap/tutorial/road-map-trae-09.png" width="650px">
+</div>
+
+```java
+@Test
+public void test_weixinNotice_chatMemory() {
+    System.out.println("\n>>> ASSISTANT: " + chatClient
+            .prompt("""
+                    我需要你帮我生成一篇文章，要求如下；
+                            
+            1. 场景为互联网大厂java求职者面试
+            2. 面试管提问 Java 核心知识、JUC、JVM、多线程、线程池、HashMap、ArrayList、Spring、SpringBoot、MyBatis、Dubbo、RabbitMQ、xxl-job、Redis、MySQL、Linux、Docker、设计模式、DDD等不限于此的各项技术问题。
+            3. 按照故事场景，以严肃的面试官和搞笑的水货程序员谢飞机进行提问，谢飞机对简单问题可以回答，回答好了面试官还会夸赞。复杂问题胡乱回答，回答的不清晰。
+            4. 每次进行3轮提问，每轮可以有3-5个问题。这些问题要有技术业务场景上的衔接性，循序渐进引导提问。最后是面试官让程序员回家等通知类似的话术。
+            5. 提问后把问题的答案，写到文章最后，最后的答案要详细讲述出技术点，让小白可以学习下来。
+                            
+            根据以上内容，不要阐述其他信息，请直接提供；文章标题、文章内容、文章标签（多个用英文逗号隔开）、文章简述（100字）
+                            
+            将以上内容发布文章到CSDN。
+                    """)
+            .advisors(advisor -> advisor
+                    .param(CHAT_MEMORY_CONVERSATION_ID_KEY, "1001")
+                    .param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100))
+            .call()
+            .content());
+                       
+                       
+    System.out.println("\n>>> ASSISTANT: " + chatClient
+            .prompt("""
+                     之后进行，微信公众号消息通知，平台：CSDN、主题：为文章标题、描述：为文章简述、跳转地址：从发布文章到CSDN获取 url
+                    """)
+            .advisors(advisor -> advisor
+                    .param(CHAT_MEMORY_CONVERSATION_ID_KEY, "1001")
+                    .param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 100))
+            .call()
+            .content());
+}
+```
+
+- 两轮对话，发文到CSDN，之后推送消息到公众号平台。这两轮对话是配置有记忆功能的，所以可以衔接上下文。
+- 这样的技术，还是非常有必要积累的，因为很多中大厂也都开了 AI 开发工程师的岗位。
diff --git "a/docs/md/spring/develop-spring/2021-06-30-\347\254\25410\347\253\240\357\274\232\346\250\252\345\210\200\350\267\203\351\251\254\357\274\214\345\205\263\344\272\216Bean\345\257\271\350\261\241\344\275\234\347\224\250\345\237\237\344\273\245\345\217\212FactoryBean\347\232\204\345\256\236\347\216\260\345\222\214\344\275\277\347\224\250.md" "b/docs/md/spring/develop-spring/2021-06-30-\347\254\25410\347\253\240\357\274\232\346\250\252\345\210\200\350\267\203\351\251\254\357\274\214\345\205\263\344\272\216Bean\345\257\271\350\261\241\344\275\234\347\224\250\345\237\237\344\273\245\345\217\212FactoryBean\347\232\204\345\256\236\347\216\260\345\222\214\344\275\277\347\224\250.md"
index 75cf8e09e..6113d86d4 100755
--- "a/docs/md/spring/develop-spring/2021-06-30-\347\254\25410\347\253\240\357\274\232\346\250\252\345\210\200\350\267\203\351\251\254\357\274\214\345\205\263\344\272\216Bean\345\257\271\350\261\241\344\275\234\347\224\250\345\237\237\344\273\245\345\217\212FactoryBean\347\232\204\345\256\236\347\216\260\345\222\214\344\275\277\347\224\250.md"
+++ "b/docs/md/spring/develop-spring/2021-06-30-\347\254\25410\347\253\240\357\274\232\346\250\252\345\210\200\350\267\203\351\251\254\357\274\214\345\205\263\344\272\216Bean\345\257\271\350\261\241\344\275\234\347\224\250\345\237\237\344\273\245\345\217\212FactoryBean\347\232\204\345\256\236\347\216\260\345\222\214\344\275\277\347\224\250.md"
@@ -552,7 +552,7 @@ Process finished with exit code 0
 ```
 
 - 从测试结果来看，我们的代理类 ProxyBeanFactory 已经完美替换掉了 UserDao 的功能。
-- 虽然看上去这一点实现并不复杂，甚至有点简单。但就是这样一点点核心内容的设计了，解决了所有需要和 Spring 结合的其他框架交互链接问题。*如果对此类内容感兴趣，也可以阅读小傅哥[《中间件设计和开发》](https://bugstack.cn/itstack-ark-middleware/2021/03/31/SpringBoot-%E4%B8%AD%E9%97%B4%E4%BB%B6%E8%AE%BE%E8%AE%A1%E5%92%8C%E5%BC%80%E5%8F%91-%E4%B8%93%E6%A0%8F%E5%B0%8F%E5%86%8C%E4%B8%8A%E7%BA%BF%E5%95%A6.html)*
+- 虽然看上去这一点实现并不复杂，甚至有点简单。但就是这样一点点核心内容的设计了，解决了所有需要和 Spring 结合的其他框架交互链接问题。*如果对此类内容感兴趣，也可以阅读小傅哥[《中间件设计和开发》](https://bugstack.cn/md/assembly/middleware/2021-03-31-%E3%80%8ASpringBoot%20%E4%B8%AD%E9%97%B4%E4%BB%B6%E8%AE%BE%E8%AE%A1%E5%92%8C%E5%BC%80%E5%8F%91%E3%80%8B%E4%B8%93%E6%A0%8F%E5%B0%8F%E5%86%8C%E4%B8%8A%E7%BA%BF%E5%95%A6%EF%BC%81.html)*
 
 ## 六、总结
 
diff --git a/docs/md/zsxq/introduce.md b/docs/md/zsxq/introduce.md
index 1dfa0cc38..549102610 100644
--- a/docs/md/zsxq/introduce.md
+++ b/docs/md/zsxq/introduce.md
@@ -13,22 +13,33 @@ lock: no
 
 ## 一、前言：星球介绍
 
-知识星球是 [小傅哥](https://bugstack.cn/md/zsxq/about/xiaofuge.html) 的 **付费** 编程学习圈，不同于网上的攒出来几百个T的免费资料，在星球内小傅哥会对你的问题 **1v1** 解答，帮你制定学习方案和规划职业路线。目标是针对性的帮每一个同学，通过星球内的有深度的[高质量原创项目](https://bugstack.cn/md/zsxq/other/join.html)，提升编程思维、领悟架构经验、吸收设计模式、掌握开发技巧，不只是为了面试，更是为了给自己的职业生涯续期。
+知识星球是 [小傅哥](https://bugstack.cn/md/zsxq/about/xiaofuge.html) 的技术社群，不同于网上的拼凑出来几百个G的免费资料，而是专门为大家的学习诉求进行的原创。在星球内小傅哥会对你的问题 **1v1** 解答，帮你制定学习方案和规划职业路线。目标是针对性的帮每一个同学，通过星球内的有深度的[高质量原创项目](https://bugstack.cn/md/zsxq/other/join.html)，提升编程思维、领悟架构经验、吸收设计模式、掌握开发技巧，不只是为了面试，更是为了给自己的职业生涯续期。
 
 如果你正在迷茫，找不到除了CRUD以外的深度项目、不知道该从哪学习、怎么更好的提升自己、如何让自己更有竞争力，以及怎么把自己的能力在简历上秀出来，星球会给你答案，帮你铺路，让你不在做一个躺平仔！—— *身为码农，多半穷苦，谁想躺平！*
 
 知识星球支持 APP【[安卓](https://a.app.qq.com/o/simple.jsp?pkgname=com.unnoo.quan)/[IOS](https://apps.apple.com/cn/app/xiao-mi-quan/id904106920?l=cn)】、[网页端](https://wx.zsxq.com/dweb2/index/group/48411118851818)和小程序，可随时随地使用。每天早/晚坐地铁花几分钟刷一刷，就能收获学习的幸福感。*可能就是某一次的学习，就能帮助你在面试、述职、答辩中脱颖而出！*
 
+1. 从你加入开始，所有过往的课程和积累内容，你都可以学习。从21年的积累到现在。
+2. 加入有效期1年内再新创作项目，都可以学习。
+3. 过期后，星球内从过期日到过去的内容，全部可以学习。
+4. 即使续费也是有效期内5折续费，续费只是相当于续费新项目和小傅哥的服务。
+
 **星球 APP / 小程序截图**：
 
 <div align="center">
-    <img src="https://bugstack.cn/images/system/system-introduce-01.png?raw=true" width="650px">
+    <img src="https://bugstack.cn/images/system/system-introduce-01.png" width="650px">
 </div>
 
 **星球 PC 网页版截图**：
 
 <div align="center">
-    <img src="https://bugstack.cn/images/system/system-introduce-02.png?raw=true" width="650px">
+    <img src="https://bugstack.cn/images/system/system-introduce-02.png" width="650px">
+</div>
+
+**星球 APP/PC 课程入口**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/zsxq-door.png" width="650px">
 </div>
 
 大家可以下载一个知识星球 APP 来提前体验~
@@ -38,39 +49,62 @@ lock: no
 加入星球，你可以获得已经在这条路上摸爬滚打多年的架构师，为你提供的如下服务。
 
 <div align="center">
-    <img src="https://bugstack.cn/images/article/zsxq/jianli-xiaozhao-07.png?raw=true" width="850px">
+    <img src="https://bugstack.cn/images/article/zsxq/zsxq-241007-02.png" width="650px">
 </div>
 
+这是一整套的实战项目学习进阶路线，从小白到大佬，全程视频手把手带着从0到1，一步步完成项目的设计、开发和上线。在整套内容学习过程中，小傅哥为你提供了非常好的技术交流社群，及时解决学习问题。还包括调试你的问题代码，带你快速🔜出坑！
+
+- 首先，这一整套全体系的学习课程比私教培训实惠，更比培训班上万的培训费便宜。可能也就是培训班1天的💰钱，就能学习到这一整套内容了。
+- 之后，你学习的整套课程，就是小傅哥这个架构师自己全部原创编写的。这也就是说，你所提到的任何问题，小傅哥都能给你解答和讨论。
+- 那么，这么实惠的课程，成体系的课程，还是架构师编写的。还有什么可犹豫的，完全可以撸起来了！
+
 ### 1. 学习项目
 
 很多来自中小公司、外包公司或者尚未毕业的本科生、研究生，手里都没有什么能拿的出手的项目，到大厂去刚一下。
 
 而加入星球就可以学习到小傅哥为你编写的在大厂水平以上的实战项目，包括你会学习到：分布式架构、微服务设计、领域驱动设计、设计模式实现、规则引擎决策树、秒杀分段锁、API网关通信等等，只有加入大厂才能学习到的核心技能。
 
-#### 1.1 业务项目
+#### 1.1 课程资源
 
-- [大营销平台系统设计实现](https://bugstack.cn/md/project/big-market/big-market.html) - 进行中👣
-- [OpenAi 大模型应用体系构建 - API-SDK、鉴权、公众号、微信支付](https://bugstack.cn/md/zsxq/project/chatgpt.html)
-- [Lottery 分布式抽奖系统 - 基于领域驱动设计的四层架构实践](https://bugstack.cn/md/zsxq/project/lottery.html)
-- [Netty+JavaFx实战：仿桌面版微信聊天](https://bugstack.cn/md/zsxq/project/im.html)
-- [ChatGPT AI 问答助手 - 小型，对接知识星球](https://bugstack.cn/md/zsxq/project/chatbot-api.html)
+**课程链接**：- 整个课程路线参考【课程日历图📅】，对应的资源链接汇总如下；
 
-#### 1.2 组件项目
+- 业务项目
 
-- [API网关：中间件设计和实践](https://bugstack.cn/md/zsxq/project/api-gateway.html)
-- [SpringBoot Starter 中间件设计和开发](https://bugstack.cn/md/zsxq/project/springboot-starter.html)
-- [IDEA Plugin 开发手册](https://bugstack.cn/md/zsxq/booklet/idea-plugin.html)
+  - 【3星】[(1.87w) Deepseek RAG、MCP、Agent 智能体](https://t.zsxq.com/Zq7hV)
+  - 【3星】[(1.15w) 拼团交易平台系统 - 微服务&分布式](https://t.zsxq.com/3X9GA)
+  - 【2星】[(0.6w) 小型支付商城系统 - 双架构开发（带小白入门）](https://t.zsxq.com/BDFJJ)
+  - 【4星】[(1.41w) 大营销平台系统 - 微服务&分布式](https://t.zsxq.com/199mpn9Lt)
+  - 【3星】[(0.77w) OpenAi(ChatGPT\ChatGLM) 微服务应用体系构建](https://t.zsxq.com/19aSkDvYB)
+  - 【4星】[(1.28w) Lottery DDD分布式抽奖系统](https://t.zsxq.com/qrUSd)
+  - 【2星】[(0.78w) IM实战(Netty+JavaFx)：仿桌面版微信聊天](https://t.zsxq.com/NcPgw)
+  - 【1星】[(0.12w) ChatGPT AI问答助手](https://t.zsxq.com/zGj7F)
 
-#### 1.3 技术小册
+- 组件项目
 
-- [字节码编程 - ASM、Javassist、Byte-Buddy](https://bugstack.cn/md/zsxq/booklet/bytecode.html)
-- [重学Java设计模式](https://bugstack.cn/md/zsxq/booklet/java-design.html)
-- [Java 面经手册](https://bugstack.cn/md/zsxq/booklet/java-interview.html)
-- [倚天村 • 图解数据结构](https://bugstack.cn/md/zsxq/booklet/data-structures.html)
+  - 【3星】[(0.36w) 通用技术组件 - 🔧扳手工程](https://bugstack.cn/md/zsxq/project/xfg-wrench.html)
+  - 【2星】[(0.11w) OpenAI 代码自动评审组件](https://t.zsxq.com/gYEVX)
+  - 【2星】[(0.23w) BCP透视业务流程 - 监控系统](https://t.zsxq.com/CVzpL)
+  - 【2星】[(0.15w) 动态线程池组件](https://t.zsxq.com/nSebo)
+  - 【2星】[(0.31w) 支付SDK设计和开发](https://t.zsxq.com/19WqNkhr2)
+  - 【5星】[(0.78w) API网关：中间件设计和实践](https://t.zsxq.com/xIe9E)
+  - 【3星】[(0.38w) SpringBoot 中间件设计和开发](https://t.zsxq.com/LZ82D)
+  - 【2星】[(0.39w) IDEA Plugin 插件开发](https://t.zsxq.com/VMaSW)
 
-#### 1.4 手撕源码
+- 其他项目（源码 + 基础）
 
-- [手写Mybatis：渐进式源码实践](https://bugstack.cn/md/zsxq/source-code/develop-mybatis.html)
+  - 【5星】[(1.06w) 手写Mybatis：渐进式源码实践](https://t.zsxq.com/xMQ6W)
+  - 【3星】[分布式技术栈基础教程](https://t.zsxq.com/Hl0W4)
+
+#### 1.2 课程收获
+
+1. 熟练掌握 Spring、SpringBoot、MyBatis 等开发框架技术，并对其使用源码所提供的接口、类、SPI标准开发各类组件，有一定的设计思路和落地能力。
+2. 熟练使用 RPC（Dubbo）、MQ（RabbitMQ、Kafka）、Redis、分库分表、XXL-JOB、Zookeeper、等分布式技术栈，在各个场景的运用。
+3. 深入积累 Spring AI、AI SDK、AI 应用、RAG、MCP、Agent 开发技能和实际项目运用能力
+4. 深度了解 MVC、DDD 架构知识，和框架搭建技巧以及微服务设计思想。
+5. 熟练使用设计模式、设计原则，对各类场景的方案设计和落地能力，深度提高自身编码思维和开发技术能力。
+6. 熟练运用 Docker、Portainer 等Dev-Ops手段，部署和运维 Nginx、Skywalking、Otter、Canal、ELK 等技术框架。
+7. 具备多类项目的开发能力，业务项目、技术项目、组件项目，以及对应的架构模型和设计思路。
+8. 积累八股问题、项目问题、场景问题的解答技巧，同时会有辅助简历编编写优化和评审，提高面试通过率。
 
 ### 2. 问题解答
 
@@ -94,6 +128,30 @@ lock: no
 
 - 提交你的简历：[《面试简历；优化、完善、辅导》简历作业太阳](https://t.zsxq.com/0epLHDzcD)
 
+#### 3.1 简历模板
+
+有好经历，有不错的项目，还需要一套上档次的描述方式，这样才能更加完美的展示出自己的实力！这里小傅哥给大家提供了一个描述经历的结构，这样写的简历会更好的突出自己的能力，提高筛选通过率。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/student-learn-05.png" width="550px">
+</div>
+
+- 首先，个人信息，可以突出下过往的经验积累，包括；在过往的XXX经历中，积累了XXX场景的经验，使个人具备了XXX方面不错的能力。同时兼具着对(技术/场景)的(喜好/热忱)，长期(学习/从事/钻研)某项技术，并做出了对应的(开源)(产品/服务/组件/插件)。此个人XXX发布到XXX市场以后，得到了用户(下载量/点赞量/使用数)的规模，获得了非常好的认可。地址：http://github.com/xxxx/xxxx
+- 之后，描述个人`教育背景`、`实习/实践经历`、`专业技能`和项目的编写。专业技能，要注意描述顺序和内容量，不宜过多，但要把招聘中核心技术栈体现出来。紧接着到项目描述，这部分最好有1~2个业务项目 + 1个组件类型项目，这样的组合简历内容，还是非常好用的。
+- 最后，补充一个自我评价。把自己描述成有技术追求的、有团队精神、有奋斗品质的优秀好青年。
+
+#### 3.2 编写案例
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/zsxq-241007-03.png" width="650px">
+</div>
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/zsxq-241007-04.png" width="650px">
+</div>
+
+- 在每个大项目下，提供了简历编写案例和问题汇总。举例；[《拼团交易平台系统》，关于面试中的技能、简历、问题汇总](https://bugstack.cn/md/project/group-buy-market/notes.html)
+
 ### 4. 学习氛围
 
 当然，被这样的“鼓励”下，我的周末😭全用在星球上了，不是录制课程视频，就是手写源码，也因为大家的图越画越牛，我也跟着让自己的图更上层楼。点名：课代表阿曦、新晋卷王奥斯卡最佳配角、画图侠诏无言、优秀作业无名氏🧐等等。
@@ -116,6 +174,12 @@ lock: no
 
 ### 5. 用户反馈
 
+经过小傅哥这么多年的努力，👨🏻‍💻认认真真的做编程项目之下，一点点把来自于互联网真实技术教给社群伙伴。也越来越多的被高校老师、在校学生、企业公司、社群粉丝、海外伙伴的认可。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250629-02.png" width="750px">
+</div>
+
 - [@待佳人晚归](https://t.zsxq.com/0eAFk84M7)：`写Lottery项目前，因为之前没有接触ddd，也没看过傅哥的视频，想先理解各个模块，然后再编写，傅哥讲的很好，代码太优雅了，一下子就上头了。`
 - [@念](https://t.zsxq.com/0euNUBW9H)：`对Lottery项目分支的开发过程需要多看几遍小傅哥的视频,会有更好的理解.特别是写完之后再去回顾视频,思路会清晰的多`
 - [@星期一](https://t.zsxq.com/0chHS92j5)：`通过两天的学习成功将第五、第六章节跑通并完成了测试，感受最深的是对策略模式和模板模式的进一步了解，之前在看重学java设计模式的时候，对于很多设计模式都处于一知半解的状态，现在结合这个抽奖系统，让我对这两个设计模式有了不一样的理解与认识，感觉真的很棒。这种边记笔记，边学习的感觉真的很好，以前可能看视频学，一天能看很多章节，但其实很多东西都没有弄懂，现在是一天一个章节，慢慢去理解代码怎么编写，怎么完成。这些天虽然还有些地方理解的不是很清楚，我还是继续接着学，到时候回头再来温习一遍。`
@@ -127,7 +191,7 @@ lock: no
 
 ## 三、加入：知识星球
 
-星球价格 **￥159** 一年，老用户续费 **5折** 一年（星球每年都会开发新的学习项目和技术小册等资料）。[查看星球项目](https://bugstack.cn/md/zsxq/other/join.html)
+星球价格 **￥159** 一年（全网最实惠社群），老用户续费 **5折** 一年（星球每年都会开发新的学习项目和技术小册等资料）。[查看星球项目](https://bugstack.cn/md/zsxq/other/join.html)
 
 >加入 3 天内可以全额退款，感兴趣的同学可以先加入体验，自己判断是否有价值。
 
@@ -166,7 +230,7 @@ lock: no
 ## 六、关于：星球定价
 
 1. 星球内的服务和实战项目都是小傅哥本人提供和**原创**，相信能够给大家带来**超过该价格的价值** 。举个例子，渐进式手把手带大家做**进大厂才可能看得见的项目**、有笔记有源码、有问题可以提，这比单独买一个课程或一套源码要值得多。其实都不到大城市一节补习班的钱，**哪怕把我的课程时长换算成培训机构的课时，也是便宜的超级多**。
-2. 持续的内容创作 + 回答问题 + 知识星球的运营(简历批阅、就业指导、架构设计) 需要小傅哥每个早上6点-8点以及周末/假期持续维护。如果不提高门槛(本次提价￥20)，真的是维护不过来。也希望加入星球的同学都是真的下定了决心想要进步，而不是像免费的交流群和社区一样 “闲聊扯淡”。
+2. 持续的内容创作 + 回答问题 + 知识星球的运营(简历批阅、就业指导、架构设计) 需要小傅哥每个早上6点-8点以及周末/假期持续维护。也希望加入星球的同学都是真的下定了决心想要进步，而不是像免费的交流群和社区一样 “闲聊扯淡”。
 3. 希望加入进来的同学能够利用好星球来坚持学习。如果这个星球真的帮助你达成了目标（比如晋升加了薪、跳槽诺了坑、校招进了厂），回过头来你会发现，这绝对是你 最值得的一笔投资 ！（免费的东西往往不会珍惜，别问我为什么知道！）
 4. 星球仍将随着人数和项目的增加会每次提价，感谢理解！—— 但已付费的加入的用户，续费折扣会很大，相当于只续费小傅哥的服务和新项目费用，没有什么比这更爽的了！**如果当年有人这样对我，我会买它个10年！**
 
diff --git a/docs/md/zsxq/material/guide.md b/docs/md/zsxq/material/guide.md
index bc1fee971..85e41efe1 100644
--- a/docs/md/zsxq/material/guide.md
+++ b/docs/md/zsxq/material/guide.md
@@ -56,6 +56,7 @@ lock: no
 申请加入仓库后，小傅哥会按照你的申请信息进行审核授权，授权完成后就可以访问项目地址，看到完整的星球课程学习项目了。地址：[https://gitcode.net/KnowledgePlanet](https://gitcode.net/KnowledgePlanet)
 
 **仓库使用**：`2种使用方式`
+
   1. 密码方式：登录的用户ID为 CSDN 个人中心的用户ID，[https://i.csdn.net/#/user-center/profile](https://i.csdn.net/#/user-center/profile) 密码为 CSDN 登录密码。如果没有密码或者忘记，可以在 CSDN 登录页找回密码。
   2. SSH 秘钥免登录方式，设置：[https://gitcode.net/-/profile/keys](https://gitcode.net/-/profile/keys) 文档：[生成 SSH 密钥](https://gitcode.net/codechina/help-docs/-/wikis/docs/ssh#%E7%94%9F%E6%88%90-ssh-%E5%AF%86%E9%92%A5)
 
@@ -63,15 +64,21 @@ lock: no
     <img src="https://bugstack.cn/images/system/zsxq-project.png?raw=true" width="650px">
 </div>
 
+课程和视频，使用说明；
+
+1. 申请一次仓库后（星球，课程入口，指引，仓库申请），就可以拉取课程代码（git clone），之后idea打开项目，可以切换分支。教程；https://bugstack.cn/md/road-map/git.html
+2. 文档；课程入口，每个项目，进入后，往下翻，会有一个【目录】。目录里的文章，进入后，是评论区，在点击链接进入文章详情。
+3. 视频；每个文章上面会有，视频地址，以及源码地址（审核仓库后直接点击就可以看）
+
 ## 三、课程：学习路线
 
 星球学习项目较多，建议学习路线如下；
 
-1. **为了面试**：Java面经手册(八股)、Lottery 分布式抽奖(项目)、SpringBoot Starter 中间件设计和开发(拉伸技术)、手写Spring/手写Mybatis(2选1)
-2. **夯实能力**：重学Java设计模式、Lottery 分布式抽奖、手写Spring、手写Mybatis
+1. **为了面试**：Java面经手册(八股)、Ai Agent、拼团交易、大营销（Lottery Plus）/Lottery 分布式抽奖(项目)、SpringBoot Starter 中间件设计和开发(拉伸技术)、手写Spring/手写Mybatis(2选1)
+2. **夯实能力**：重学Java设计模式、拼团交易、大营销（Lottery Plus）/Lottery 分布式抽奖(项目)、手写Spring、手写Mybatis、OpenAi 应用项目
 3. **拉伸技术**：字节码、IDEA Plugin 开发手册、SpringBoot Starter、API网关
 4. **网络编程**：Netty 4.x 小册、IM(Netty 4.x + JavaFx)
-5. **应届小白**：重学Java设计模式、Java面经手册、手写Spring/手写Mybatis(2选1)、Lottery 分布式抽奖、SpringBoot Starter 中间件设计和开发，之后学习拉伸技术、网络编程
+5. **应届小白**：重学Java设计模式、Java面经手册、手写Spring/手写Mybatis(2选1)、小型支付商城、SpringBoot Starter 中间件设计和开发，之后学习拉伸技术、网络编程
 6. **创新学习**：IDEA Plugin 插件开发、ChatGPT 微服务应用体系 —— `星球项目较多，也可以自行组合。如 IM + ChatGPT，开发角色智能AI。`
 
 ---
@@ -80,7 +87,7 @@ lock: no
 
 ## 四、简历：项目组合
 
-1. 建议的项目组合是；a【业务】Lottery、IM  + b【技术】API 网关 + c【组件】SpringBoot Starter + d【创新】ChatGPT 项目 + e【开源】IDEA Plugin 插件发布到 IDEA 插件市场。
+1. 建议的项目组合是；a【业务】拼团/大营销、IM  + b【技术】API 网关 + c【组件】SpringBoot Starter + d【创新】ChatGPT 项目 + e【开源】IDEA Plugin 插件发布到 IDEA 插件市场。
     1. 基础组合；a、c
     2. 中级组合；a、c、d/e
     3. 高级组合；a、b、e
diff --git a/docs/md/zsxq/material/student-learn-advanced.md b/docs/md/zsxq/material/student-learn-advanced.md
new file mode 100644
index 000000000..b6c42b78d
--- /dev/null
+++ b/docs/md/zsxq/material/student-learn-advanced.md
@@ -0,0 +1,87 @@
+---
+title: 路线：从小白到大佬，实战项目进阶路线
+lock: no
+---
+
+# 路线：从小白到大佬，实战项目进阶路线
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+经过🇨🇳10.1假期的狂卷，小傅哥的星球，又一个新业务项目《MVC + DDD 双架构 - 小型支付商城》完结啦。至此已交付6套业务、7套组件以及源码学习和基础教程，**共300节+课程！** 这也代表着，从小白到大佬的一整条进阶路线，小傅哥全部给你搭建出来了！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/zsxq-241007-01.gif" width="150px">
+</div>
+
+**从不废话，强的可怕！**
+
+在小傅哥给大家搭建的原创体系化成长路线学习内容中，可以系列的掌握，MVC 架构、DDD 架构，以及设计模式的实际场景巧妙运用，也有全体系的 Spring、SpringBoot、MyBatis 等基础框架的使用，综合微服务分布式架构 RPC、MQ、分库分表、任务调度、本地缓存、分布式环境、熔断、降级、限流、动态配置中心等的使用。以及普罗米修斯 + Grafana 监控、前端热力图，在结合 Docker、Portainer、Nginx、Jenkins、Github Actions 等运维实施能力的掌握。
+
+可以这么说，小傅哥在大厂用到的技术体系，会全程在项目中陆续体现出来，循序渐进的教给你使用。等你进入公司中，做这些内容都不会陌生了。甚至你还可以给公司提出可靠性解决方案，让领导对你刮目相看！
+
+## 一、进阶路线 - 300+节课程
+
+### 1. 课程目录
+
+这是一整套的实战项目学习进阶路线，从小白到大佬，全程视频手把手带着从0到1，一步步完成项目的设计、开发和上线。在整套内容学习过程中，小傅哥为你提供了非常好的技术交流社群，及时解决学习问题。还包括调试你的问题代码，带你快速🔜出坑！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/zsxq-241007-02.png" width="650px">
+</div>
+
+- 首先，这一整套全体系的学习课程比私教培训实惠，更比培训班上万的培训费便宜。可能也就是培训班1天的💰钱，就能学习到这一整套内容了。
+- 之后，你学习的整套课程，就是小傅哥这个架构师自己全部原创编写的。这也就是说，你所提到的任何问题，小傅哥都能给你解答和讨论。
+- 那么，这么实惠的课程，成体系的课程，还是架构师编写的。还有什么可犹豫的，完全可以撸起来了！
+
+### 2. 课程资源
+
+**课程链接**：- 整个课程路线参考【课程日历图📅】，对应的资源链接汇总如下；
+
+- 【3星】[(1.87w) Deepseek RAG、MCP、Agent 智能体](https://t.zsxq.com/Zq7hV)
+- 【2星】[(0.6W) 小型支付商城系统 - 双架构开发（带小白入门）](https://t.zsxq.com/3X9GA)
+- 【4星】[(1.41W) 大营销平台系统 - 微服务&分布式](https://t.zsxq.com/199mpn9Lt)
+- 【3星】[(0.77W) OpenAi(ChatGPT\ChatGLM) 微服务应用体系构建](https://t.zsxq.com/19aSkDvYB)
+- 【4星】[(1.28w) Lottery DDD分布式抽奖系统](https://t.zsxq.com/qrUSd)
+- 【2星】[(0.78w) IM实战(Netty+JavaFx)：仿桌面版微信聊天](https://t.zsxq.com/NcPgw)
+- 【2星】[(0.11W) OpenAI 代码自动评审组件](https://t.zsxq.com/gYEVX)
+- 【2星】[(0.23W) BCP透视业务流程 - 监控系统](https://t.zsxq.com/CVzpL)
+- 【2星】[(0.15W) 动态线程池组件](https://t.zsxq.com/nSebo)
+- 【2星】[(0.31w) 支付SDK设计和开发](https://t.zsxq.com/19WqNkhr2)
+- 【5星】[(0.78w) API网关：中间件设计和实践](https://t.zsxq.com/xIe9E)
+- 【3星】[(0.38w) SpringBoot 中间件设计和开发](https://t.zsxq.com/LZ82D)
+- 【2星】[(0.39w) IDEA Plugin 插件开发](https://t.zsxq.com/VMaSW)
+- 【5星】[手写Mybatis：渐进式源码实践](https://t.zsxq.com/xMQ6W)
+- 【3星】[分布式技术栈基础教程](https://t.zsxq.com/Hl0W4)
+
+### 3. 课程收获
+
+1. 熟练掌握 Spring、SpringBoot、MyBatis 等开发框架技术，并对其使用源码所提供的接口、类、SPI标准开发各类组件，有一定的设计思路和落地能力。
+2. 熟练使用 RPC（Dubbo）、MQ（RabbitMQ、Kafka）、Redis、分库分表、XXL-JOB、Zookeeper、等分布式技术栈，在各个场景的运用。
+3. 深度了解 MVC、DDD 架构知识，和框架搭建技巧以及微服务设计思想。
+4. 熟练使用设计模式、设计原则，对各类场景的方案设计和落地能力，深度提高自身编码思维和开发技术能力。
+5. 熟练运用 Docker、Portainer 等Dev-Ops手段，部署和运维 Nginx、Skywalking、Otter、Canal、ELK 等技术框架。
+6. 具备多类项目的开发能力，业务项目、技术项目、组件项目，以及对应的架构模型和设计思路。
+7. 积累八股问题、项目问题、场景问题的解答技巧，同时会有辅助简历编编写优化和评审，提高面试通过率。
+
+## 二、简历使用
+
+编程这一行，要想真的掌握些东西，就是需要大量的做有质量的项目，提高自己的编程思维，锻炼自己的编码能力！学习完的项目，陆续完善到自己简历，让自己的竞争力越来越强👍🏻。像六边形战士一样！
+
+### 举例1 - 大营销
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/zsxq-241007-03.png" width="650px">
+</div>
+
+### 举例2 - Api网关
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/zsxq-241007-04.png" width="650px">
+</div>
+
+说实话，有如此`清晰的架构设计`、有如此`规模的工程拆分`、有如此`运用的设计模式`，这样的实战项目，又是本身一个大厂架构师，所编码、写文档、录课程，其实真的不多。但这样的项目在小傅哥的星球【码农会锁】**已有10多个啦** ！你可以想象，你加入这样的技术社群，所能学习到多少硬核的技术东西。
diff --git a/docs/md/zsxq/memorabilia/campus-recruitment-offer.md b/docs/md/zsxq/memorabilia/campus-recruitment-offer.md
new file mode 100644
index 000000000..321aa476a
--- /dev/null
+++ b/docs/md/zsxq/memorabilia/campus-recruitment-offer.md
@@ -0,0 +1,132 @@
+---
+title: 秋招总结，6家大厂，5个SSP级别Offer！最终选择了最赚钱的方向。
+lock: need
+---
+
+# 2023年7月25日，校招简历应该怎么写
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+在互联网大厂，我写过11年的代码，带过团队，培养过新人，经历了非常多的业务场景设计和实现。总结一句，我是一位经验丰富的软件开发&架构师！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/chatgpt/openai-01.jpg?raw=true" width="150px">
+</div>
+
+**我清楚的知道，技术人怎么从小兵走到“头部”**
+
+15年入职大厂，23年走到T8架构师，连续晋升。无论是；承接项目、晋升述职，还是技术分享和培养新人，我都可以完成的非常漂亮。并在晋升T8时，以全票通过，获得领导的认可。
+
+所以，在个人技术成长和职业成长方面，我是有非常多的经验的。因为有这样的经历和这些经验，小傅哥于2021年，建设了一个自己运营的技术社群**「星球：码农会锁」**，直至今日已有1.6万人加入，帮助了超级多的伙伴完成了技术的成长和职业的进阶。
+
+`有伙伴辣评：“裸辞半年，我是被小傅哥，抬着进入的这家公司！”`
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/zsxq-241219-09.png" width="750px">
+</div>
+
+为了，让伙伴们更好的知道小傅哥有多值得，今天给大家分享一个在小傅哥社群学习成长的伙伴，拿到 Offer 的自我总结。这样的经验，可以非常好的帮助大家了解到如何学习、怎么有价值的学习！
+
+>接下来，是这位星球伙伴的自述。
+
+
+秋招顺利拿到offer，并且这几天毕业论文盲审顺利通过了，总算尘埃落定。感谢小傅哥的知识星球陪伴我走完了硕士生涯，写个帖子记录下我的学习历程以及我个人的秋招面试总结，希望对星球里的大家有些帮助～
+
+## 1. 我的背景
+
+先简单介绍下本人背景，211本985软工硕，一段美团日常实习一段淘天暑期实习，秋招拿到了字节ssp、美团sp😭、快手ssp、淘天ssp、蚂蚁ssp、京东ssp，都是交易/支付方向的offer，最终通过综合比较选择去了淘天。
+
+## 2. 学习的碎碎叨叨
+
+以下是碎碎叨叨的开始，长文⚠️，不想看的小伙伴可以直接下滑到「秋招总结」，有我的一些面试经验总结～
+
+我加入小傅哥的知识星球已经快近2年了，还记得当时刚开始学Java是在2023年的1月，那个时候我几乎天天去市图书馆，从最基础的Java基础开始学起，从早上学习到傍晚，学习时间其实不是很长，23年的寒假算是学了一些Java基础和SSM（虽然本科也学过一点皮毛，不过后来都忘记了）。
+
+寒假结束回到学校之后，我开始从早到晚的疯狂学习，一周稳定学习6天，大概每天除去吃饭、休息、睡觉的时间可以学习八个小时以上，每天大概有2-3小时来干科研，其余时间都学Java相关的。
+
+这段时间有种每天都在过期末周的感觉……在23年的3月份，我看到了小傅哥的知识星球，加入其中，并坚持每天打卡了几个月，这几个月，我主要集中学习的还是Java的八股，看了很多优质八股的网站，例如 `JavaGuide`、`Java进阶之路`、`小林coding`等，结合牛客的面经，综合学习了操作系统、计算机网络、`JUC`、`JVM`、`Redis`、`MySQL`、`Kafka`、`RocketMQ`、`zookeeper`、`分布式`、`Dubbo`等。
+
+这些八股知识我一直学习、补充完善、复习到秋招为止，也是这样反复的整理、理解、压缩、记忆，在面美团和秋招面试的时候，面试官问的八股问题我基本都能在2秒内快速回忆起，且问的问题90%都是我已经知道的。
+
+此外，在算法方面，我当时系统刷完了左程云的算法视频课程，这个课程比较的难，算是培养了我的算法思维吧（真实情况是感觉针对性不高……），以及后续我跟随代码随想录系统刷了2遍，代码随想录的算法题给我的感觉比左程云的课程更适合用来应对面试，其总结的方法非常实用。
+
+23年的6-8月份，由于毕业方向调整，我去学习了一段时间的Java Performance，这段时间了解了一些性能调优方面的基础知识，对于常规Java那块的知识就耽搁了。
+
+在9月份，我重新调整了毕业方向，再次投入到常规的Java学习路线中来，这个时候我是没有做实践项目的，在对比了几个知识星球的项目之后，我选择做了小傅哥的lottery抽奖系统(大营销)。小傅哥不仅录制了视频，让我可以跟着一步一步操作，而且也详细写了项目手册，这对于我这个鲜有实践经验的人来说是非常宝贵的。
+
+后面的10-11月份，我对lottery抽奖系统(大营销)可能会问的问题都进行了整理思考，为此我把小傅哥的知识星球上关于lottery相关的帖子翻了个遍，收获巨大。后面在面试美团的时候，我真切的感受到了吃透自己做的项目的重要性，面试官真的会问的很细很具体，如果能答上来，并据此进行不足之处的展望，那是非常加分的。
+
+在之后，23年的12月份，我开始投简历面试，月底各大公司招聘的机会不多，幸运的是美团招聘的岗位相对比较多，于是我最终选择去了美团。之后24年的1月到8月，我分别在美团和阿里实习，在9月系统准备秋招面试，1个月时间基本面完了，10月-11月写毕业论文，12月花了一点时间修改论文，大部分时间用来玩了，算是毕业入职前最后的放松😊。
+
+回看我这一路的学习历程，中间有过曲折，但总体都是顺顺利利的，这种顺利我认为一部分原因是我选对了学习的路径，从学习八股到学习项目，我选的都是非常优质的内容，这帮助我少走了很多的弯路。真的感觉非常幸运在正确的时间加入了小傅哥的知识星球，并学习收获了如此硬核的知识。后面我仍然会跟随小傅哥继续学习，并尝试将所学的内容写成文章沉淀下来～
+
+## 3. 秋招总结
+
+秋招可以斩获那么多的offer，我认为可以归因于以下几个方面，分别是学历与奖项、八股、算法、项目、实习、简历书写、面试表现。
+
+### 1、学历与奖项
+
+学历和奖项这块，只能从大一大二还处于大学较早期的时候开始发力，包括卷绩点保研、考研、参加大赛、参加科研项目等。目前学历和奖项是有些大厂能否过简历筛选的硬性标准，比如淘天会筛掉双非（非强校）的同学，但大部分厂还是可以放低要求的。学历这块我感觉只是起到了敲门砖的作用，面试官看重的还是同学面试时候展现出来的技术能力。
+
+### 2、八股
+
+虽然有了项目以及实习经历，但我在面试的时候，还是会问一些八股，因为公司的招聘规则里面需要考察候选人的基础，这个时候还是会问一些基础八股的。此外，八股往浅了说是一些基础的八股知识，往深了说，从项目、实习经历延伸开来的问题也可以归类为八股，例如一些架构题、三高性能等。
+
+八股的学习也可以从浅到深，浅的包括了面试常见的Java基础、JUC、JVM、Redis、MySQL、计算机网络、操作系统、MQ，如果时间有限，这些常规的八股题利用【JavaGuide+牛客面经+ChatGPT】可以速成一下。
+
+八股学习方式，我个人会采用【问答】的方式先进行整体的理解，每个知识点的问答题目可能会非常多，如果记忆那么多文字负担也会非常重，所以为了简化记忆的难度，我会用【思维导图】进行知识的压缩，利用思维导图记录知识的【关键词】，在回答的时候，可以利用这些关键词来补全上下文。这个方法总结来说就是我们常说的把书读薄再读厚，读薄是提取关键点，读厚是进行扩充以及建立知识点之间的关联性。
+
+更加深层的八股例如限流、熔断、高并发这些，可以结合自己的项目、实习经历进行针对性的学习，这些深层次的八股面试官问的时候也是从项目和实习经历展开。
+
+### 3、算法
+
+算法这块，日常时候可以跟随「代码随想录」系统刷上2遍，学习方法；然后反复地来刷leetCode的hot100以及top250，题目出现的频次可以查阅「CodeTop题库」。
+
+我在面试的过程中，面试官出的题基本都在这个范围内，哪怕不在这个范围内，也是这些题进行小的一些修改。在面试的时候，面试官给的做题时间比较短，这需要平时多刷几遍才能做到面试的时候可以立刻想到思路并写出代码。
+
+### 4、项目
+
+个人项目在面试第一份实习岗位的时候，非常重要。项目需要使用到一些常见的技术，例如MQ、MySQL、Redis等，并需要适当的复杂性。
+
+这里小傅哥写的项目就非常适合拿来写在简历上。在跟着学完一遍项目之后，还需要考虑到以下几个方面：
+
+1. 项目的难点与重点，也是需要在简历上呈现的点
+2. 项目一段话概括性介绍以及详细流程介绍
+3. 项目为什么用这个技术，例如为什么用Redis的分段锁，如果不用会怎么样，能否用其他技术代替，其他技术与该技术的区别等
+4. 项目使用了这个技术，会不会出现某些异常情况，例如Redis的锁超时释放了。是否会出现一些极端情况以及应对极端情况的措施，我在面试的时候会经常被询问到，面试官也比较看重这方面思考的周到性，一定要多准备这块。
+5. 项目技术相关的一些基础八股，例如Redis的锁的看门狗机制
+6. 项目的不足之处，对这些不足之处你认为可以从哪些方面进行优化完善
+7. 项目取得的一些技术性指标，例如耗时、QPS、节省人力等
+
+>小傅哥，有非常多的实战项目，包括不同难度的业务类型和组件类型的项目，可以按个人学习积累选择学习。
+
+![](https://bugstack.cn/images/article/zsxq/zsxq-241007-02.png)
+
+### 5、实习
+
+实习需要做的就是能拿一个项目写到简历上，项目需要有些复杂度，如果实习干的是打杂的活，那可能需要去看一些组里别的项目，吃透之后写到简历上。
+
+实习除了问项目之外，面试官也会问到实习期间学了什么技术，可以在实习期间再跟着学一些项目用到的技术原理。如果是日常实习，推荐带着学习的目的性去实习，毕竟后面很大概率是要跳到别的公司的；如果是暑期实习，并且感觉实习部门氛围不错的话，需要花点心思在转正上。
+
+### 6、简历书写与面试表现
+
+简历书写如果经历比较丰富的话，个人感觉可以写2页。简历上一般都会有的模块：教育经历（学校不错且成绩不错可以放开头）、实习经历、项目经历、个人技能、个人评价。简历书写的时候注重文字之间的排版以及不要写错别字，表达去除大白话，尽量写的精简专业一些。
+
+还有非常重要的是，很多星球都提供免费的简历修改服务，可以多修改几个版本。简历模板我用的是「简历本」，需要付费，市面上也有很多免费的网站，大家可以去搜索。
+
+在面试过程中，面对面试官问的问题，可以尽量回答的久一些，将一些可以联系的知识点也说出来，这样不仅可以减少面试提问的数量，也可以放一个🪝，引导面试官从自己熟悉的这块知识提问。还有面试表达的时候，最好能有条理，如果记忆的是知识点关键词的话，可以先说关键词，再对此进行补充。
+
+除了上面这些，还有非常重要的一点是运气🍀，祝愿大家都能遇到一个对口的面试官，顺利斩获offer～
+
+以上的秋招面试经验源自我个人经历的一些感悟，不同的人可能会不一样，仅供大家参考一下～最后祝愿大家都能有个好的offer🍀🍀🍀～
+
+>好啦🌶，以上就是来自小傅哥社群伙伴的分享，我认为非常有价值，非常值得大家参考。以这样的认知和学习，将来职业发展会走的非常好。
+
+<div align="center">
+    <img src="http://bugstack.cn/images/article/zsxq/zsxq-250115-01.jpg" width="450px">
+</div>
\ No newline at end of file
diff --git a/docs/md/zsxq/memorabilia/java-interview-experience.md b/docs/md/zsxq/memorabilia/java-interview-experience.md
new file mode 100644
index 000000000..dc3c604e6
--- /dev/null
+++ b/docs/md/zsxq/memorabilia/java-interview-experience.md
@@ -0,0 +1,100 @@
+---
+title: 这21套大厂Java资料，写够1万行，校招够了。写够10万行，可以冲P7了！
+lock: no
+---
+
+# 这21套大厂Java资料，写够1万行，校招够了。写够10万行，可以冲P7了！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>星球：[https://t.zsxq.com/05zj2niYR](https://t.zsxq.com/05zj2niYR)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+你见过面试评价表吗？`常用框架应用经验不足`、`缺少分布式项目经验`、`无C端场景开发经验`、`项目流程不完善`、`CRUD偏多，无架构和设计思考`、`复杂问题思考不足`、`伪场景需求，无实际应用`等。看完是不有点🥶冷汗直流。那怎么提升这些方面的知识？
+
+<div align="center">
+	<img src="https://bugstack.cn/images/roadmap/tutorial/road-map-docker-idea-00.png" width="150px"/>
+</div>
+
+**项目不行，编码量还不够！**
+
+之所以遇到这些面试问题，就是因为很多伙伴从毕业🎓到工作，以及在工作中基本都没做过什么好项目。不是毕业前做了一堆CRUD流程的Demo项目，就是工作后组装API接口的。往往这些过程都是有连带关系的，因为起步做的项目弱，缺少技术的积累和技术视野的认知，所以面试中表现的不够强，导致最终找工作的坑也会差。
+
+当然，聪明一些有想法的伙伴，肯定会想办法去找一些在大厂真实工作的架构师进行`"偷师"`。把来自中大厂的`业务经验`、`架构经验`、`编程思维`、`编码技巧`，学习下来在用于实践验证和增强简历竞争力。所以跟谁学习很重要！
+
+**注意**：📢 你的有效代码量，与你的能力息息相关。尤其是代码中含架构设计、设计模式、高级编码、场景问题的指标量占比越高越好。当你的积累远超过这一阶段诉求时候，你的能力也会很容易匹配到工作岗位。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zxsq-240917-03.png" width="950px"/>
+</div>
+
+>小傅哥准备了21套内容，帮你做有规划的、成体系的、可高效的，成为面试中、职场中，有竞争力的人！文末可以获取全部内容。
+
+## 一、初学踩坑
+
+`程序员👨🏻‍💻，大量的编码，才能锻炼出大量的经验。`
+
+在我初学编程以及到了每个阶段的瓶颈期，需要提升自己的时候，也尝试过在网上找资料。但往往这些资料都是不成体系的，很碎片化，后来才知道那都是一些博主为了博取流量，四处整合的资料，打包在给你。
+
+关于内容的质量、内容的连贯性、博主是不知道的，因为博主自己也没有学习过这些资料。但我们拿到后在花大量的时间看，而且还可能是看了一些过时不用的，就非常耗费精力。
+
+如图，19年的时候，级别T6，再上一层就是架构师。于是为了扩展知识学习，我找到2个T资料（后来又删了很多！）
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zxsq-240917-02.png" width="650px"/>
+</div>
+
+- 首先，是想锻炼一些架构思维、编码思维、逻辑思维，但往往市面这类资料几乎是没有。大部分都是基础教程，以及一些简单的管理类项目。代码质量还不及公司同事写的。
+- 之后，这些资料缺少连贯性，学习时候的前置知识说明和文档说明，都是缺失的（毕竟都是免费的）。
+- 最后，遇到问题是真没有人能问到，别说提升能力了，自己的那点能力都被薅干净，去解决课程bug！
+
+## 二、新的计划
+
+`19年，因为自身就有晋升的诉求，预期可哪找资料，不如公司里找人！`
+
+本身自己就在互联网大厂，身边这么多资源，还都是认识了很久的一群高级架构师。那还可哪找啥人学习，直接拉着架构师，让他们做各类分享，从分享的干货中学习多好。后来，我也把不断积累到的高级能力运用到了项目和编码中，还在后来开始做了技术分享，也就是大家看到的一整套、一整套的内容。
+
+我不图快，我只想认真的想把自己的技术，从基础到应用，一点点的全部分享出来。让伙伴们学习基础可以运用到项目，学习项目可以从基础中查阅到相关的案例。这样循序渐进，有紧有收的方式，才是正确的学习方式。
+
+**想写好这些东西，确实耗精力！5年了！**
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zxsq-240917-01.png" width="950px"/>
+</div>
+
+- 这是小傅哥，为大家陆续编写的编程技术资料。包括；基础教程、技术小册、源码学习，再到业务项目6套、组件项目7套。并且还在继续更新中，后续还有更多项目加入。—— 我要把大厂中做的项目，全部陆续的做成一个个学习项目，让大家可以提高自己的能力。
+- 业务项目6个，代码行数5万。组件项目7个，代码行数2.35万。源码学习，代码行数1.06万，整体将近10万行。每个项目都具有独特的架构、场景、设计、编码。学习任何一个都能带来非常多的技术收获，而且会学习到耳目一新的东西！
+
+## 三、成绩认可
+
+这5年来，我用大厂锻炼的一身技能，帮助了非常多的伙伴，实打实的提到了编程技术。还为星球伙伴做简历评审，现已积累了将近500份简历+评审记录（看过之后都会写简历了！）。在学习后，更有伙伴坦言：”我是被傅哥的技术，抬着进的这家公司！“
+
+### 1. 斩获Offer
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zxsq-240917-04.png" width="750px"/>
+</div>
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zxsq-240917-05.png" width="750px"/>
+</div>
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zxsq-240917-06.png" width="750px"/>
+</div>
+
+### 2. 简历优化
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zxsq-240917-07.png" width="750px"/>
+</div>
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zxsq-240917-08.png" width="750px"/>
+</div>
+
+>这些都是可以在小傅哥的社群学习到的内容和获得到的服务，有大厂架构师这样手把手的教，可以说是非常实在。并且你在以后工作中遇到的实际场景问题，也都可以给予解答，**让你顺利度过试用期！🍻**
+
diff --git a/docs/md/zsxq/memorabilia/job-hire-jd.md b/docs/md/zsxq/memorabilia/job-hire-jd.md
new file mode 100644
index 000000000..8ed6688ed
--- /dev/null
+++ b/docs/md/zsxq/memorabilia/job-hire-jd.md
@@ -0,0 +1,140 @@
+---
+title: 不废话，公司需要什么能力，我们就安排什么项目！
+lock: no
+---
+
+# 不废话，公司需要什么能力，我们就安排什么项目！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>星球：[https://t.zsxq.com/05zj2niYR](https://t.zsxq.com/05zj2niYR)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+“小傅哥，是真想把我教会！”，跟着小傅哥学习的越久，越发现很多以前单点的碎片知识，都被成体系的串联起来了。并且学习的这些东西，是真的匹配到了招聘的岗位，同时在面试中与面试官有的聊。**这是真的爽！**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/business-behavior-monitor/business-behavior-monitor-01.png" width="150px">
+</div>
+
+**匹配大厂招聘诉求学习！**
+
+就编程类的知识、项目、方向来讲有非常非常多，但如果你全心的投入到；`servlet`、`jsp`、`Struts2` 的过时技术，`坦克大战`、`学生管理系统`、`图书管理系统` 的大CRUD流水账项目，那么在投递简历的时候，真的很难匹配到招聘要求。
+
+而在我做互联网大厂架构师这么多年，经历过的众多各类型的项目，以及在这个过程中完成的技术调研、技术选型、方案设计、架构设计、项目交付，可以明确的给你讲，C端、高并发、分布式、微服务、DDD（越来越多中大厂使用）、AIGC（开始结合），这样的项目是可以更多的匹配到招聘诉求，也是更能提升个人能力的编程项目。**举例；如图，去哪网招聘**
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/job-hire-jd-03.png" width="650px">
+</div>
+
+- 首先，如招聘诉求描述，活动、营销、交易、AIGC、DDD、C端、抽象、拆分、以及常用分布式技术栈，都是各类互联网大厂中，最常做的业务类型和所需的技术方案。
+- 之后，你会发现右侧的内容，嘎嘎的匹配到了左侧的招聘诉求上！哈哈哈，这些内容都是小傅哥为你提供的实战编程项目，它们出身名门大厂，自带高级架构和巧妙的逻辑设计。在这些项目上，你可以学习到互联网大厂 + 大架构师的编码（`小公司出来的根本写不出这样的代码`），这不只是一场课程，也是一次优雅的编程旅行，携助你去期待的大厂入职。✈️
+
+## 他们都要DDD！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/job-hire-jd-07.png" width="650px">
+</div>
+网图，排名不一定准确，但在搜索官网的招聘中，会看到很多核心C端的岗位，都有；DDD、营销、交易、AIGC、高并发、分布式、微服务、设计模式的相关经验优先。举例；京东、小红书、百度。
+
+
+### 1. 京东
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/job-hire-jd-05.png" width="650px">
+</div>
+
+官网：[https://zhaopin.jd.com/web/job_info_list/3?isHunterFlag=false](https://zhaopin.jd.com/web/job_info_list/3?isHunterFlag=false)
+
+### 2. 小红书
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/job-hire-jd-04.png" width="650px">
+</div>
+
+官网：[https://job.xiaohongshu.com/](https://job.xiaohongshu.com/)
+
+### 3. 百度
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/job-hire-jd-06.png" width="650px">
+</div>
+
+官网：[https://talent.baidu.com/jobs/social-list](https://talent.baidu.com/jobs/social-list)
+
+>所以，这也是为什么小傅哥，把这些知识体系，拆开了、揉碎了，一口口的喂给你！并且小傅哥是真的复刻大厂的工作方式，把这些知识传授给你。
+
+## 1:1 复刻大厂流程
+
+**图，是对业务流程的深入理解，是对系统架构的逻辑抽象。**
+
+项目的承接，并不是一上来就直接干代码，而是要做一列的BRD评审、PRD评审，再到研发做系统的架构设计、库表设计、流程设计、外部对接，这个过程中会产生出很多的各类型图稿。这些东西都是非常有价值的内容，让我们可以更好的、更深入、更全面的理解一套系统。而且，在你工作以后，你很多时候都要和这些图打交道，这样你才能更好的完成工作的交付。
+
+那么，这些东西在小傅哥的社群里，都是随着项目一点点的渗透给你的。潜移默化的你也就学会了分析需求和设计系统。举例；
+
+### 1. 系统架构图
+
+**软件架构**是有关软件整体结构与组件的抽象描述，用于指导大型软件系统各个方面的设计。软件架构会包括软件组件、组件之间的关系，组件特性以及组件间关系的特性。软件架构可以和建筑物的架构相比拟。软件架构是构建计算机软件，开发系统以及计划进行的基础，可以列出开发团队需要完成的任务。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-system-design-diagram-02.png" width="950px">
+</div>
+
+- 这是一套大营销系统的分布式架构设计图，从前端到负载，从服务治理到后端分布式技术栈体现，从应用到部署和监控的全体系展示。在这样一套系统架构中，你可以清楚的知道从前到后的流程、各项分布式技术栈的用途、整个系统的脉络关系。所以这样的一个图可以清晰的指导我们做系统的搭建。
+- `佛瑞德·布鲁克斯`在写作《人月神话》一书时提及：软件系统的架构是有关软件系统该作什么以及不该作什么的实体观点。这些观点应和软件的实现分开。架构师的角色是“观点的看守者”，确认系统中增加的部分是符合此架构，因此可以保有概念完整性
+- 另外程序员`马尔文·康威`在1967年论文发表了康威定律，其中提到一个组织开发的软件，其架构会反映其组织架构。佛瑞德·布鲁克斯在写作《人月神话》一书时，就在书上时提到此例子，命名为“康威定律”。
+
+### 2. 四色建模图
+
+如果系统是 DDD 开发的，还需要做四色建模。在使用 DDD 的标准对系统建模前，一堆人要先了解 DDD 的操作手段，这样才能让产品、研发、测试、运营等了解业务的伙伴，都能在同一个语言下完成系统建模。
+
+- 蓝色 - 决策命令，是用户发起的行为动作，如；开始签到、开始抽奖、查看额度等。
+- 黄色 - 领域事件，过去时态描述。如；签到完成、抽奖完成、奖品发放完成。它所阐述的都是这个领域要完成的终态。
+- 粉色 - 外部系统，如你的系统需要调用外部的接口完成流程。
+- 红色 - 业务流程，用于串联决策命令到领域事件，所实现的业务流程。一些简单的场景则直接有决策命令到领域事件就可以了。
+- 绿色 - 只读模型，做一些读取数据的动作，没有写库的操作。
+- 棕色 - 领域对象，每个决策命令的发起，都是含有一个对应的领域对象。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/big-market/big-market-system-design-diagram-07.png" width="950px">
+</div>
+
+- 系统建模后可以细分出系统开发中要实现的领域，包括；返利、活动、策略、奖品，兑换可以是单独的领域也可以合并到返利实现。
+- 具体的建模过程可以阅读 [《架构：DDD 领域驱动设计，战略、战术、战役，落地指引规范》](https://bugstack.cn/md/project/big-market/ddd.html)
+
+### 3. 设计模式图
+
+设计模式是解耦系统流程非常重要的手段，通过设计模式把复杂的流程切割成可以被容易处理的执行单元，在通过设计模式的创建、行为、结构，三类模型完成执行动作的处理。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-promotion-250118-03.png" width="950px">
+</div>
+
+- 如图，这是一个规则树模型，解决的拼团中实际的场景业务。从根节点、开关节点、营销节点、人群节点，再到最终的正常和异常结束节点。每个节点分别处理自己的业务流程。
+- 你可以想象，如果没有这样的设计模式模型结构，那么在代码中，就是一个大方法中，一堆的逻辑编写，维护的成本是非常高的。
+
+### 4. 源码解析图
+
+各类的框架源码中有非常多的设计技巧，也有很多的架构思维模型。如大家常用的 MyBatis 框架，拆解后的设计，就可以看出有多少东西可以学习。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/spring/mybatis-220320-00.png" width="950px">
+</div>
+
+这是整个《手写 Mybatis》的全貌地图，小傅哥会带着大家逐步实现这里面的功能模块，分章节细化各个模块的实现流程，最终让读者实现出一个丰富、全面、细致的 ORM 框架。在学习的过程中，大家也可以参考这张图来对照手写的代码以及 Mybatis 的源码，这样更加有利于对 Mybatis 框架的理解。
+
+## 我是小白怎么开始
+
+我的学习伙伴有在校的，有实习的，有毕业的，大家处于不同阶段。所以，小傅哥花费近4年时间，以大厂晋级能力项的要求，拆分出14个项目，以不同难度方式从小白到大白，一路培养，直至成长为高端的码农！在这个过程，你不只是学习到了想法，还学习到了一整套方法论。
+
+如图，这是一整套的实战项目学习进阶路线，从小白到大佬，全程视频手把手带着从0到1，一步步完成项目的设计、开发和上线。在整套内容学习过程中，小傅哥为你提供了非常好的技术交流社群，及时解决学习问题。还包括调试你的问题代码，带你快速🔜出坑！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/zsxq/zsxq-241007-02.png" width="650px">
+</div>
+
+- 首先，这一整套全体系的学习课程比私教培训实惠，更比培训班上万的培训费便宜。可能也就是培训班1天的💰钱，就能学习到这一整套内容了。
+- 之后，你学习的整套课程，就是小傅哥这个架构师自己全部原创编写的。这也就是说，你所提到的任何问题，小傅哥都能给你解答和讨论。
+- 那么，这么实惠的课程，成体系的课程，还是架构师编写的。还有什么可犹豫的，完全可以撸起来了！
diff --git a/docs/md/zsxq/memorabilia/project-plan-v2406.md b/docs/md/zsxq/memorabilia/project-plan-v2406.md
index bde9ee5ce..b59c191fb 100644
--- a/docs/md/zsxq/memorabilia/project-plan-v2406.md
+++ b/docs/md/zsxq/memorabilia/project-plan-v2406.md
@@ -46,7 +46,6 @@ lock: no
 ### 2. 组件项目
 
 - 【2星】业务透视监控 - 技术点：通过执行数据采集，分析、计算、渲染，可视化业务流程图。
-- 【2星】自动Mock组件 - 技术点：通过单测运行时采集执行行为动作的类、方法、出入参，构建出自定义小型容器对象，动态化获取测试数据包，完成单测流程。
 - 【2星】工程方法链路地图 - 技术点：模仿 Sequence Diagram 采集工程执行链，通过 Marmaid 渲染出工程的类图、流程图等。
 
 ---
diff --git a/docs/md/zsxq/memorabilia/sideline.md b/docs/md/zsxq/memorabilia/sideline.md
new file mode 100755
index 000000000..1f4179c38
--- /dev/null
+++ b/docs/md/zsxq/memorabilia/sideline.md
@@ -0,0 +1,101 @@
+---
+title: 啊？小傅哥的技术"副业"，已经发展到了海外！
+lock: no
+---
+
+# 啊？小傅哥的技术"副业"，已经发展到了海外！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>星球：[https://t.zsxq.com/05zj2niYR](https://t.zsxq.com/05zj2niYR)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+😱一觉醒来我的社群地域范围又扩大了，从国内扩展到了海外。虽然以前也有海外的伙伴，但基本都是过去留学的，他们知道国内的各类论坛资料和公众号推文，所以也更容易关注到小傅哥。但这回不一样啦，直接微信加上来了“歪国仁”：**“hi brother, can you chat by english. i'm not in china.”**
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zsxq-241219-00.gif" width="150px"/>
+</div>
+
+**brother 我，给👬🏻兄弟们建了一个很全面的技术社群**
+
+做技术号主，做久了才发现，其实并不非得一直追热点，也不非得张牙舞爪的玩活宣传。而是踏踏实实的把技术做好，服务好每一个加入社群的用户，把他的问题当做自己的问题一样处理。就能形成良好的口碑，那么自然就有这些兄弟伙伴帮你做宣传。
+
+- 高校老师👩🏻‍🏫："去学小傅哥应用级别的项目经验，看看互联网公司都需要什么技术"
+- 哈工大师妹："如获至宝呀，终于不用再做烂大街项目了"
+- C9 f硕："组里师姐极力推荐您的知识星球，全面有细致"
+- 小红书用户："最近跟着小傅哥，原来真的会有大佬手把手教着写代码，规划学习路线，还能每天答疑解惑，甚至能教简历怎么写"
+- linux.do 用户："搜小傅哥，把上面的都学了，不敢说大厂，其他的你都能进"
+- 知乎用户："没有吹牛，不是托，那个 OpenAI 大模型和营销项目看的我头皮发麻，确实学到了很多的东西。"
+
+>还有来自海外的伙伴，也加入了小傅哥技术社群学习实战项目。@kirito、@arthurshby 👏🏻
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zsxq-241219-01.png" width="650px"/>
+</div>
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zsxq-241219-02.png" width="650px"/>
+</div>
+
+按照这样的发展势头，以后要给 [bugstack.cn](https://bugstack.cn/) 做中英文两个版本了 😂。小傅哥社群的伙伴反馈说，我是来学习技术的，没想到还顺便学习了英文。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zsxq-241219-03.png" width="750px"/>
+</div>
+
+小傅哥的社群有不少清北、北邮、哈工大以及很多C9、211、985的伙伴，还有很多来自阿里、美团、字节、京东、腾讯，等互联网大厂公司中的伙伴，这些人伙伴很多都能做英文交流，还能分享来自大厂的技术。这个社群已经形成了正向循环，不断探讨和积累实用技术，这让加入的伙伴只要认真学习，都会有非常大的提升。
+
+## 一、学习能力
+
+小傅哥，非常重视社群内伙伴的学习培养，从基础入门到进阶提升，花费了数年编写了大量的资料。这些成体系的内容，能把一个Java编程基础小白，抬着进入到高级开发。可以说跟着小傅哥学习，你会节省非常多的时间。并且目标感十足，有小傅哥为你解答，你会清楚的知道学习多少能走到哪。因为小傅哥的发展，也基本是这个行业的普通人打工人天花板呢了。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zsxq-241219-07.png" width="550px"/>
+</div>
+
+另外，小傅哥截取了社群伙伴的学习分享，你可以看到正是因为社区内有良好的学习氛围，又有可以深入研究的课程，所以大家也才更有东西，也真的能学习到东西。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zsxq-241219-05.png" width="750px"/>
+</div>
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zsxq-241219-06.png" width="750px"/>
+</div>
+
+
+>小傅哥的社群内有大量的技术积累，这里面搜索🔍的都是真实有价值的东西；大量的场景问题方案学习后就够面试讲的了，500多份简历评审记录就够为你做简历编写的蓝本了。
+
+## 二、手把手教
+
+就学习来说，只要你是个新人，就一定会遇到各种各样的问题。不少伙伴在加入前，给小傅哥说："我是新人，我装环境可能都会遇到问题，可以问你吗"。当然没问题，你加入我的社群，这都是我应该服务你的。不会你加入后，我就不管了，那还是人吗！
+
+所以，无论是编程环境问题、业务理解问题、编码实现问题，都有小傅哥一次次解答的身影。还专门为场景问题建立 Q&A 帮助大家快速排查处理。如；[https://bugstack.cn/md/project/big-market/qa.html](https://bugstack.cn/md/project/big-market/qa.html)
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zsxq-241219-08.png" width="750px"/>
+</div>
+
+- 类似这样的问题排查解答，星球里有非常非常多。主要就是帮助伙伴排查问题代码，引导学习并提高解决问题的思维。
+- 因为小傅哥的经验是非常清楚的知道的，编程这东西是过程经验积累学习，不是结果答案学习。错误是千千万的，但排查错误的过程方式是固定的。所以要学习根本的东西。那么这样一次次引导，慢慢也就积累了解决问题的能力。
+
+## 三、找到工作
+
+跟着小傅哥学习，不会浪费时间，不会走小道弯路。全程做技术兜底，遇到的各种问题都能帮你解决。包括你学习时候的代码bug，可以把代码提交到星球，我来帮你调试。最终把兄弟们送到各个竞争赛道的头部，拿到最牛的薪资待遇 Offer！
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zsxq-241219-09.png" width="850px"/>
+</div>
+
+## 四、实战项目
+
+这一年，干了近900万字！包括；小傅哥的社群干了一个大营销项目、一个小型支付、4个技术组件，还有一系列的技术文章和回答大家的技术类问题等。**更新频次嘎嘎高，知识积累相当大！**
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zsxq-241219-10.png" width="450px"/>
+</div>
+
+>🧧[加入学习](https://bugstack.cn/md/zsxq/other/join.html)
diff --git a/docs/md/zsxq/memorabilia/student-offer.md b/docs/md/zsxq/memorabilia/student-offer.md
index 07eafb3cd..fece7cf8d 100644
--- a/docs/md/zsxq/memorabilia/student-offer.md
+++ b/docs/md/zsxq/memorabilia/student-offer.md
@@ -1,7 +1,13 @@
+---
+title: 群聊截图！校招能拿到40W年薪Offer，不是没道理的！
+lock: no
+---
+
 # 群聊截图！校招能拿到40W年薪Offer，不是没道理的！
 
 作者：小傅哥
-博客：[https://bugstack.cn](https://bugstack.cn/)
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>星球：[https://t.zsxq.com/05zj2niYR](https://t.zsxq.com/05zj2niYR)
 
 > 沉淀、分享、成长，让自己和他人都能有所收获！😄
 
diff --git a/docs/md/zsxq/memorabilia/xiaofuge-team.md b/docs/md/zsxq/memorabilia/xiaofuge-team.md
new file mode 100644
index 000000000..f2aff8846
--- /dev/null
+++ b/docs/md/zsxq/memorabilia/xiaofuge-team.md
@@ -0,0 +1,90 @@
+---
+title: 加入小傅哥 = 加入大厂一个项目组？
+lock: no
+---
+
+# 加入小傅哥 = 加入大厂一个项目组？
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>星球：[https://t.zsxq.com/05zj2niYR](https://t.zsxq.com/05zj2niYR)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+**🌻 19年7月开始 - 至今，5年多时间**，一心搞技术、做项目、写推文。现在的小傅哥已经可以匹配互联网大厂中，一个`开发项目组`所积累的内容体量了。在小傅哥的这套成体系的知识内容下学习，完全可以达到从小白到高级开发工程师的进阶！
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/chatgpt/openai-01.jpg" width="150px"/>
+</div>
+
+**小傅哥都做了哪些内容？**
+
+依照于互联网公司所需的各项内容，小傅哥编写了；数据结构、应用算法、设计模式、系统架构、开发技术、工程测试、质量监控、Dev-Ops，在到实战项目，包括；6个业务项目、7个组件项目、手写源码。一步步的带着伙伴们跟着小傅哥从0到1的成长。这其中还涵盖了小傅哥的成长经验、晋升经验、架构经验，可以说是作业已经准备好了，你照着写就行了。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zsxq-240811-01.png" width="950px"/>
+</div>
+
+与网上拼凑的内容不同🙅🏻‍♀️。这些各项知识，全部都是小傅哥一行行敲代码，一句句写文章，这样即保证了内容的新鲜度，同时还具有非常强的学习连贯性。如，前面学习的系统框架、开发技术，在后面的实战项目中就会全部体现出来，并且会加深在实际场景的运用技巧。
+
+> 文末可获得全部的学习内容，还有🧧优惠券可以使用。**先到先得！**
+
+## 一、编程基础
+
+### 1. 数据结构
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/algorithm/data-structures-02.png" width="950px"/>
+</div>
+
+### 2. 应用数学
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/pdf-maths-02.png" width="950px"/>
+</div>
+
+### 3. 设计模式
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zsxq-240811-02.png" width="950px"/>
+</div>
+
+### 4. 八股面试
+
+<div align="center">
+	<img src="https://bugstack.cn/assets/images/2020/interview/interview-pdf-2.png" width="950px"/>
+</div>
+
+## 二、实战项目
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zsxq-240811-03.png" width="550px"/>
+</div>
+这些实战项目在你加入小傅哥社群后，全部都可以学习。星球的内容也是永久可看的，即使你加入后过期了，在过期时间前的内容也都是可以看的。那么，你可以想下，你现在加入，就是获得过往所有的和一年内创作的新的。嘎嘎爽！
+
+
+## 三、学习社群
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zsxq-240519-02.png" width="950px"/>
+</div>
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zsxq-240519-03.png" width="950px"/>
+</div>
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zsxq-240519-04.png" width="950px"/>
+</div>
+
+星球「码农会锁」，选择了最耗费小傅哥精力的方式，建立各个项目的社群。让每个伙伴都能快速的学习交流。虽然这样比较费小傅哥，但大家的学习成长是有目共睹的！
+
+## 四、面试能力
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/zsxq/zsxq-240811-04.png" width="950px"/>
+</div>
+
+小傅哥的星球会为每个加入的伙伴，根据自身的自我介绍提供专属的学习路线。星球「码农会锁」内的知识量很大，项目也很多。我会为你提供一个适合的学习组合，让你更加容易快速提高自身能力。
diff --git a/docs/md/zsxq/project/ai-knowledge.md b/docs/md/zsxq/project/ai-knowledge.md
new file mode 100644
index 000000000..c515ea4fe
--- /dev/null
+++ b/docs/md/zsxq/project/ai-knowledge.md
@@ -0,0 +1,167 @@
+---
+title: DeepSeek RAG&MCP&Agent 知识库 - 解析文档&Git仓库代码&AI工作流
+lock: no
+---
+
+# 《DeepSeek RAG&MCP&Agent 知识库》 - 解析文档&Git仓库代码&AI工作流
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>课程：[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+<iframe id="B-Video" src="//player.bilibili.com/player.html?isOutside=true&aid=114106895958308&bvid=BV1ty9sYtEkc&cid=28695397252&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="100%" height="480"> </iframe>
+
+大家好，我是技术UP主小傅哥。
+
+刚上周，老板说：`”把咱们招聘里也加一条，具备AI应用开发能力的优先！“`。是呀，现在越来越多的企业都在用AI开发能力提效了，如；聊天软件增加一键唯独信息归档提取、工作文档资料携AI对话分析、工程SQL语句脚本辅运营自动完成数据处理、代码编写用AI完成自动评审等等。这些都是在AI的基础上在构建应用，以后也会越来越多！所以，具备AI应用开发能力，也是每个工程师最应该具备的基础能力了。
+
+并且用不了多久，各大互联网企业都将大量的推进落地，自有 [MCP](https://github.com/modelcontextprotocol) 服务的实现，用于增强企业 AI 应用的提效能力。因为 [MCP](https://github.com/modelcontextprotocol) 的加入，可以让你；一条命令`帮研发`，调用应用系统日志、排查系统CPU负载、自主选择是否调度数据库信息。也可以一条命令`帮运营`，搞定复杂的SQL执行、导出报表、分析数据、完成促活营销券的自动化配置上架。这就是 [MCP](https://github.com/modelcontextprotocol) 的魅力！👍🏻
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-0-00.png" width="250px"/>
+</div>
+
+**那么牛，MCP 是什么？**
+
+专业的术语 `MCP = Model Context Protocol` 模型上下文协议，可实现应用与外部数据源和工具之间的无缝集成。无论您是构建 AI 驱动的 IDE、增强聊天界面还是创建自定义 AI 工作流，MCP 都提供了一种标准化的方式来连接他们所需的上下文。
+
+`来吧，上图！让你看看它是啥！`
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-01.png" width="850px"/>
+</div>
+
+- 首先，站在用户的使用视角，研发或者运营，可以通过话术描述，完成系列的 AI 工作流，并拿到最终的结果。这就是 MCP 最终为你提供的服务。
+- 那么，你可以想象，在日常的工作中，运营、研发、产品、测试等，都有非常多的重复非创作性的工作，占用了大量的时间成本。尤其是研发，写写代码，就有运营过来，帮我查个问题吧，小嘚嘚。但如果有这样的借助于 MCP 实现的 AI 工作流，就可以完成80%以上的工作量。
+- 之后，站在技术的实现视角，MCP 是一个标准结构框架，你可以按照它（Spring AI）提供的 SDK 开发方式，完成本地化 API 的接入开发。让 AI 有明确的方式调用各类 API 服务接口。如果没有 MCP 这会是一件很麻烦的事情。
+
+**跟着小傅哥学习，从不走偏！😄**
+
+- 2022年底，ChatGPT 开始火爆。
+- 2023年2月，小傅哥，开启了第一个基于AI的项目，ChatGPT AI 问答助手项目。让所有伙伴，都能学习到 AI 如何开发应用。
+- 2023年4月，启动OpenAI(ChatGPT/ChatGLM)微服务应用体系构建大型项目，让大家可以用微信登录、微信支付/蓝兔支付，构建自己的可对外付费提供服务的 OpenAI。这一年上车学习的伙伴，很多做了自己的 AI 产品，除了提高编程技能，又小赚了一辆宝马。
+- 2024年7月，结合企业诉求，开启 OpenAI + Github Acitons，实现代码自动化评审。这一年，不少伙伴在自己的公司中都有落地，个人也得到了述职晋升。
+- 2025年3月，咱们再起启航，基于 Ollama 部署 DeepSeek，开发 RAG 知识库，解析文档和Git仓库代码。这个东西，将是企业中构建自己知识库的又一项非常重要的事情。有了知识库，AI 代码的自动评审，会更加精准，也可以辅助分析需求等。
+
+那么，接下来小傅哥就细致的介绍下，本次开启的新项目，可以让大家学习到哪些知识，掌握哪些技术。
+
+> Spring AI MCP 与 24年末发布，学习此 AI 应用开发项目，你将是第一批具备 Java AI 应用实战开发能力的人。竞争力，嘎嘎滴！
+
+## 一、能学到啥
+
+该项目是结合当下最火的 Ollama、DeepSeek、SpringAI 等技术构建的 RAG 知识库实现。从前端到后端到 dev-ops 的全栈式功能手把手实现。
+
+- 前端，基于 AI 工具，设计前端对话页面，完成 HTML、JS、TailwindCSS 的编码工作。
+- 前端，配置跨域服务接口，前后端分离实现 UI + 服务端接口对接。
+- 后端，构建双层架构，直接面向需求编码。让学习伙伴更轻松完成 RAG 知识库核心知识的学习。
+- 后端，基于 Spring AI 完成 DeepSeek、OpenAI 双模型的策略对接，处理文本向量的解析和存储。
+- 后端，使用 postgresql 存储切割文本向量数据，完成知识库的解析和存储。
+- 后端，处理多样文本`（.md、.sql、.txt、.word...）`的解析储存以及Git克隆代码库遍历切割存储。
+- 后端，使用 Redis 存储知识库标签，用于检索展示使用。
+- 后端，基于 Flux 编写流式会话接口，以及增加知识库检索功能。
+- 运维，基于 Docker 部署 Ollama 环境，完成 DeepSeek 大模型配置。
+- 运维，使用 Linux、Docker、Nginx 完成项目的打包、构建、上线！
+
+虽然，知识库都有很多现成的工具。但研发的能力不是在于功能应用，而是具备这样的开发技能储备，在有需要的时候，可以举手🙋🏻‍♀️”我会，我来做！“
+
+> 此项目，全程视频手把手操作 + 全部的小册文档，你可以轻松上手学会这样一个项目！
+
+## 二、项目介绍
+
+这是一套基于 Ollama DeepSeek 大模型构建的增强 RAG 知识库检索项目，在这套项目上，实现了除普通文档知识解析外，增加了 Git 代码库的拉取和解析，并提供操作接口。为工程师做项目开发时，`需求分析`、`研发设计`、`辅助编码`、`代码评审`、`风险评估`、`上线检测`等，做工程交付提效。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-02.png" width="950px"/>
+</div>
+
+### 第1期，RAG 我们做了什么
+
+在 《DeepSeek RAG 增强知识库》第1阶段，基于 Spring AI 0.8.1 开发了一套可以上传文件和Git仓库进行解析、切割、存储，到使用向量库完成 AI 的知识库问答系统。并最终通过 Docker 部署上线。
+
+#### 1. 对话页面
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-03.png" width="950px"/>
+</div>
+
+- 这是全程视频手把手，带着大家通过AI工具，完成的UI设计实现课程会演示这个操作），实现的一款非常简单漂亮的UI效果。
+- 我们可以结合知识库，进行更加有效的提问。像是公司中，会把知识库提供出一个标准接口，给其他各个AI应用平台提供能力。
+
+#### 2. 上传知识
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-04.png" width="650px"/>
+</div>
+
+- 上传知识，可以解析不同类型的知识库。
+- 除了课程提供的文档库、代码库，你可以增加其他的知识库，如；网页的解析，与网页内容对话。让我们的UI，增加一个侧边栏，读取当前网页内容，分析对话。这样在公司中的一些工程的日志，错误分析时，可以更快的处理。
+
+#### 3. 解析知识 - 后台日志
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-1-05.png" width="850px"/>
+</div>
+
+- 上传知识后，可以看到日志信息。
+- 一套工程作为知识库是非常具有开发价值的，在我们做提问的时候就不需要，人工的去分析工程，而是直接使用了。
+
+### 第2期，MCP 我们要做什么
+
+与第2期相比，第1期可以称之为小试牛刀，让小伙伴们以最快、最快的往事，积累，运用 Spring AI 框架，开发自己的 RAG 知识库。~~也是方便有些死鬼，早点写到简历上~~
+
+到了第2期，你就开始吃上细糠了，小傅哥会带着你升级 Spring AI 框架为 1.0.0-M6 最新版本，多模型配置和操作 PG 向量库，使用 GPU 搭建响应速度更好的 Ollama DeepSeek 大模型（秒级处理），以及对接官网 DeepSeek 的大模型和统一 one-api 对接方式。
+
+但这还只是开始，随着基础框架的升级完成，我们将进入 MCP 服务的开发实现。通过 AI 指令，完成 AI 工作流，调度各项 MCP 处理我们的任务作业。如图，举例操作；
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-11-03.png" width="950px"/>
+</div>
+
+- 基于 MCP 服务的开发和对接，通过 AI 工作流指令，完成数据的采集和存放动作。💡 聪明的小伙伴以及开始联想，基于这样的 AI 开发，可以替代很多的日常工作啦。**没想到吧，也把自己替代了** 但仍然，蠢蠢欲动（我不做，别人也做呀）！~~实现后，晋升又有的讲啦！简历也有东西写啦！~~
+- 有了 MCP 后，相当于把我们需要；在一个网页操作数据库查询数据、打开另外一个网页看天气预报，再手动的创建个文件把以上的信息获取后，复制粘贴到文件里。这一些列操作，都让 AI 通过 MCP 模型上下文协议进行处理。也就是 AI 可以调用后台接口啦！
+
+### 课程目录
+
+#### 第1期 RAG Spring AI 0.8.1 - 完结
+
+1. 【更】AI RAG 知识库，项目介绍&需求分析&环境说明
+2. 【更】初始化知识库工程&部署模型&提交代码
+3. 【更】Ollama DeepSeek 流式应答接口实现
+4. 【更】Ollama DeepSeek 流式应答页面对接
+5. 【更】Ollama RAG 知识库上传、解析和验证
+6. 【更】Ollama RAG 知识库接口服务实现
+7. 【更】基于AI工具，设计前端UI和接口对接
+8. 【更】Git仓库代码库解析到知识库并完善UI对接
+9. 【更】扩展OpenAI模型对接，以及完整AI对接
+10. 【更】云服务器部署知识库（Docker、Nginx）
+
+#### 第2期 MCP Spring AI 1.0.0 - 开冲
+
+11. 【新】AI MCP 项目介绍
+12. 【新】吃上细糠，Spring AI 框架升级 + GPU 部署 AI
+13. 【新】吃上细糠，官网 DeepSeek + open-api 对接
+14. 【新】MCP 服务的应用类演示和使用
+15. 【新】MCP Spring  AI 客户端npx调用，以及资源讲解
+16. 【新】MCP Spring AI 服务端webflux实现
+17. 【新】MCP Spring AI 服务端 + 客户端对接使用
+18. 【新】服务接口实现，增强 RAG 知识库 + MCP 服务使用
+19. 【新】应用服务接口与前端页面对接
+20. ... 随课程开发提供，包括后续的云服务部署。
+
+
+### 课程计划
+
+课程已全部录制完成，计划在3月3日开更，3月16日之前全部剪辑更新完成。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/ai-rag-knowledge/ai-rag-knowledge-0-01.png" width="850px"/>
+</div>
+
+- 全课程包括文档 + 小册，全程视频手把手带着做。
+- 课程地址：[https://t.zsxq.com/GwNZp](https://t.zsxq.com/GwNZp)
+
+---
+
+课程包括；视频、小册、1 对 1 答疑解惑、专属VIP项目交流群，并且提供简历编写模板结构的一条龙🐲服务。让你学习后，直接拉开与还在玩具项目其他人的差距，面试脱颖而出提高竞争力！！！
\ No newline at end of file
diff --git a/docs/md/zsxq/project/big-market.md b/docs/md/zsxq/project/big-market.md
index f3b278faa..f5f8e544f 100644
--- a/docs/md/zsxq/project/big-market.md
+++ b/docs/md/zsxq/project/big-market.md
@@ -23,7 +23,7 @@ lock: no
 
 呐，接下来，小傅哥要带着大家做一个什么项目呢？🤔
 
-这个新项目，结合小傅哥已经带着大家完成的 OpenAi 大模型应用业务场景，做上层的营销活动。这就像互联网公司中有了电商、外卖、出行等场景一样，在场景之上做营销活动。所以我们的新项目是**《大营销平台系统》**！因为小傅哥的星球之前做过了一个抽奖，那么这个项目会用新的DDD架构，对抽奖系统进行重构，并扩展出`营销账户`、`用户返利`、`积分兑换`等服务，完成一整套的营销平台功能。💥
+这个新项目，结合小傅哥已经带着大家完成的 OpenAi 大模型应用业务场景，做上层的营销活动。这就像互联网公司中有了电商、外卖、出行等场景一样，在场景之上做营销活动。所以我们的新项目是 **《大营销平台系统》**！因为小傅哥的星球之前做过了一个抽奖，那么这个项目会用新的DDD架构，对抽奖系统进行重构，并扩展出`营销账户`、`用户返利`、`积分兑换`等服务，完成一整套的营销平台功能。💥
 
 小傅哥把互联网中真实的场景、架构、实现，拿出来让你成体系化的学习；
 
diff --git a/docs/md/zsxq/project/business-behavior-monitor.md b/docs/md/zsxq/project/business-behavior-monitor.md
index 348ce49d1..3fe36a96a 100644
--- a/docs/md/zsxq/project/business-behavior-monitor.md
+++ b/docs/md/zsxq/project/business-behavior-monitor.md
@@ -21,18 +21,6 @@ lock: no
     <img src="https://bugstack.cn/images/article/project/business-behavior-monitor/business-behavior-monitor-01.png" width="150px">
 </div>
 
-**根据投票，我们先卷这业务透视监控系统**
-
-开始的早，经历的久，在这趟职场生涯中，小傅哥的肚子里积累了非常多的实战经验的。所以小傅哥也计划着陆续的带着大家做出这些应用级别的实战项目。为了看看小伙伴们想先学哪个，小傅哥发起了投票。[投票地址](https://mp.weixin.qq.com/s/TULYFHzxQkgnXnU_Oq99hQ)
-
-<div align="center">
-    <img src="https://bugstack.cn/images/article/project/business-behavior-monitor/business-behavior-monitor-02.png" width="550px">
-</div>
-
-按照投票所展示，排序为；业务透视监控(440票)，优惠券系统(403票)、阶梯拉新(239票)、自动Mock组件(195票)、工程链路地图(132票)、礼账系统(62票)、问卷系统(62票)。
-
-按照投票结果，小傅哥带着大家，启动第一个组件项目，《业务透视监控》教给大家如何采集`系统数据`、`链路分析`、`数据解析`、`可视化渲染等`。
-
 >🧧 文末有优惠加入学习二维码，可以获得除了本文《业务透视监控》外，还有5个业务项目 + 5个组件项目。
 
 ## 一、能学到啥
diff --git a/docs/md/zsxq/project/group-buy-market.md b/docs/md/zsxq/project/group-buy-market.md
new file mode 100644
index 000000000..7cf2b9928
--- /dev/null
+++ b/docs/md/zsxq/project/group-buy-market.md
@@ -0,0 +1,132 @@
+---
+title: 拼团支付平台系统
+lock: no
+---
+
+# 《拼团交易平台系统》- 为各类交易场景，提供拼团服务。
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>课程：[https://t.zsxq.com/Yfbwo](https://t.zsxq.com/Yfbwo)
+
+> 沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+🌻 讲道理，为了提升能力冲击面试，不做点C端场景，不搞透业务流程，只是包个壳的小demo项目，真的进入面试官眼不了一点。面试官更喜欢的是他自己做过的真实的业务场景，这些东西都是非常成熟的业务和可上线使用的系统设计。所以，多做点这样的东西，才是提升能力的东西。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/business-behavior-monitor/business-behavior-monitor-01.png" width="150px">
+</div>
+
+**那咱们做什么项目呢？🤔**
+
+在小傅哥的项目版图中，为大家提供了；`下单支付（支付宝、微信、蓝兔）`、`抽奖活动`、`积分兑换`、`行为返利`等，那么咱这次再做一个与支付相关的，中大厂都有的，互联网中必备的项目 **《拼团交易平台系统》** - 为各类交易场景，提供拼团服务。
+
+在你看到的`拼多多`、`京东`、`腾讯`，都有很多的拼团场景。因为拼团可以在，设置折扣低价的情况下，激励用户分享到自身的圈子范围，完成拉新一起成单，提高交易完成量。所以这是一个互联网中必备的营销类系统。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-241109-01.png" width="750px">
+</div>
+
+跟着小傅哥（大厂架构师）学习，早些了解真正的真实业务项目，成为这个圈子里的技术佼佼者。横卷Offer！
+
+>🧧 文末提供了获取项目课程和代码。包括；已完结的6个业务项目、7个组件项目、以及各类基础教程。
+
+## 一、能学到啥
+
+小傅哥带着学习的项目，主打一个真实。全程从0到1，带着学习。直至完成开发再部署上线，并提供上线系统的域名配置、前端埋点、后端监控等一些列的真实实操技能。所以你能学习到的也是非常丰富的。
+
+- 【前端】熟练使用，HTML、Div、CSS、React、Typescript 等前端编程技术。
+- 【前端】掌握 fetch 方式对后端接口的调用，处理相关的逻辑数据。
+- 【后端】熟练搭建项目工程，学习工程分层结构概率和设计思路。掌握更多的六边形、洋葱、整洁架构。`提高简历技术亮点`
+- 【后端】熟练掌握 Spring、SpringBoot、MyBatis 等开发框架技术，并对框架源码所提供的扩展接口具备运用能力。
+- 【后端】熟练使用 SpringCloud 核心微服务分布式技术栈，包括：Fegin、Sentinel、Nacos、熔断、限流、降级等。`先做功能，后面逐步添加。`
+- 【后端】熟练使用大厂中常用的设计模式手段和设计原则技术，对各类场景的方案设计和落地能力，深度提高自身编码思维和开发技术能力。
+- 【后端】深度学习复杂场景的架构设计、编程思维，如果处理系统功能的边界和上下文的维护。—— 这些东西一定是从实践中才能学习到的。
+- 【后端】熟练使用 Mock 单测工具、JMeter 压测工具，增强代码交付质量。
+- 【后端】熟练掌握异常、枚举、错误码的定义和使用，并学习到如何合理打印服务日志，便于问题排查。
+- 【运维】熟练使用 Docker 在本地和服务端的配置和部署应用，以及在本地构建前后端镜像。
+- 【运维】熟练掌握 Git、GitCode，对工程代码的管理，推送、拉取、切换分支、合并代码等操作。
+- 【运维】熟练使用 Nginx 配置转发服务，并能申请ssl配置https服务。
+- 【运维】熟练使用 Grafana 监控系统，对系统的 JVM、磁盘、Tomcat、应用(QPS、响应时间、调用量)完整监控。
+
+此外，小傅哥会把系统开发过程中的思考、设计、编码，录制⏺成完整的**全程手把手带着学习的视频**，让大家可以学习到的更多、更细、更深！
+
+> 学项目，就要学一些有深度的、流程完善的、而不是连业务流程都串不下来的项目。这样的小demo项目，面试的时候，也会很容易被面试官攻击。
+
+## 二、项目介绍
+
+本次项目是一个包含 `前后端 + Dev-Ops` 的全栈式综合编程实战项目，完成后会与小傅哥星球「码农会锁」的其他项目进行对接使用，以此学习真实的微服务对接。如；之前的`大营销 + OpenAI` 完成上线部署，体验地址：[https://openai.gaga.plus](https://openai.gaga.plus)
+
+C端场景项目的特点，就是感觉前端展示的很少，但后端往往要有一大的流程等着实现。如；你要认领任务，邀请用户、完成既定目标、驱动流程流转、结算结果或逆向结果。所以这也是面试中，面试官喜欢扣场景细节的部分。
+
+在我们完成`拼团`项目后，会在星球的小型支付单独一个分支进行验证，以及对接到 OpenAI 业务项目上。如图示意（后续会做更漂亮的UI）；
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-241109-03.png" width="550px">
+</div>
+
+>体验地址：[https://openai.gaga.plus](https://openai.gaga.plus)
+
+### 1. 产品流程 - 核心流程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-241109-02.png" width="550px">
+</div>
+
+### 2. 功能流程 - UML
+
+如图这是一套拼团业务功能的研发设计流程图，涵盖了功能的流转细节。后续的功能实现会以这个为参考进行设计。
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-241109-04.png" width="550px">
+</div>
+
+> 很多的学习就是这样，要把细节夯实。不用贪多，但要求精。
+
+## 三、课程计划
+
+课程在`24年11月16日`开更，预计在30-40节课程。全程视频手把手带着做，即使是小白也能跟着学习下来。`实习/校招生也是小白，在公司也是直接快速进入项目理解和承接需求。`
+
+课程地址：[https://t.zsxq.com/Yfbwo](https://t.zsxq.com/Yfbwo)
+
+- 拼团支付营销平台介绍
+- 第1部分：系统设计
+  - 第1-1节：拼团需求分析
+  - 第1-2节：拼团库表设计（7~10张表）
+  - 第1-3节：研发系统设计（建模、架构）
+- 第2部分：服务实现
+  - 第2-1节：初始工程搭建
+  - 第2-2节：拼团活动实现
+  - 第2-3节：拼团规则设计 - 切量、黑白名单等、免拼、最低成团、次数限制、达成目标
+  - 第2-4节：折扣计算规则
+  - 第2-5节：人群标签设计 - 自动跑数据服务
+  - 第2-6节：拼团规则服务
+  - 第2-7节：参与拼团设计
+  - 第2-8节：拼团记账实现
+  - 第2-9节：拼团回调实现
+  - 第2-10节：拼团结果记录 - 接收外部拼单数据
+  - 第2-11节：拼团超时失败检测任务 - 退单流程
+  - 第2-12节：人群标签生成任务
+  - 第2-13节：外部接口设计
+  - 更多随课程揭晓 ...
+- 第3部分：外部对接
+  - 第3-1节：简易对接案例
+  - 第3-2节：对接小型支付，拼团下单
+  - 第3-3节：对接OpenAI大营销，拼团下单
+- 第4部分：开发运维
+  - 第4-1节：构建打包部署
+  - 第4-2节：HTTPS(ssl)、后端监控、前端监控
+
+>课程包括；视频、小册、1 对 1 答疑解惑、专属VIP项目交流群，并且提供简历编写模板结构的一条龙🐲服务。让你学习后，直接拉开与还在玩具项目其他人的差距，面试脱颖而出提高竞争力！！！
+
+## 四、加入学习
+
+跟着小傅哥学习，不会浪费时间，不会走小道弯路。全程做技术兜底，遇到的各种问题都能帮你解决。包括你学习时候的代码bug，可以把代码提交到星球，我来帮你调试。最终把兄弟们送到各个竞争赛道的头部，拿到最牛的薪资待遇 Offer！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/group-buy-market/group-buy-market-241109-05.png" width="550px">
+</div>
+
+>🧧 [加入](https://bugstack.cn/md/zsxq/other/join.html) 每年招聘，都能帮助兄弟们规划好学习路线，卷出最好的 Offer！星球里还有500份评审过的简历记录，看过后，就知道怎么写好简历了。
diff --git a/docs/md/zsxq/project/ltzf-sdk-java.md b/docs/md/zsxq/project/ltzf-sdk-java.md
index 6ad9f5912..65faee124 100644
--- a/docs/md/zsxq/project/ltzf-sdk-java.md
+++ b/docs/md/zsxq/project/ltzf-sdk-java.md
@@ -92,7 +92,3 @@ lock: no
 如果大家希望通过做有价值的编程项目，提高自己的编程思维和编码能力，可以加入小傅哥的【星球：码农会锁】。加入后解锁🔓所有往期项目，还可以学习后续新开发的项目。
 
 > [🧧加入](https://bugstack.cn/md/zsxq/other/join.html) 这样成体系的全量项目学习，放在一些平台售卖，至少都要上千块。但小傅哥的星球，只需要100多，就可以获得大厂架构师对你手把手教学！
-
-**在今年的面试中，星球帮助众多伙伴拿到**`微信支付`、`京东科技`、`度小满`、`蚂蚁金服`、`Lazada（电商优惠营销）`、`快手`、`美团到店`等Offer，还有的校招生薪资最高年包到45w！
-
-![图片](https://mmbiz.qpic.cn/sz_mmbiz_png/zTfAIs5rNXglxK5zQqzss9tq3P2Ss5mV3WX8dZ9m7fBLdhSXpFoKOE0kPaLpsybK1icOTRdL5VXEia7iaoPZ1CenQ/640?wx_fmt=png&from=appmsg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)
\ No newline at end of file
diff --git a/docs/md/zsxq/project/openai-code-review.md b/docs/md/zsxq/project/openai-code-review.md
index e6e7a128c..35a446461 100644
--- a/docs/md/zsxq/project/openai-code-review.md
+++ b/docs/md/zsxq/project/openai-code-review.md
@@ -215,4 +215,4 @@ jobs:
 
 >[🧧加入学习](https://bugstack.cn/md/zsxq/other/join.html) 这样一套项目，放在一些平台售卖，一个至少都是几百块。但小傅哥的星球，只需要100多，就可以获得全部的学习项目！
 
-**加入星球**：下载`星球APP`，从星球【课程入口】进入。里面有完整的学习指引，包括；使用说明、代码仓库、专属项目群、学习路线、往期项目。本项目地址：[https://t.zsxq.com/14EPV92wK](https://t.zsxq.com/14EPV92wK)
+**加入星球**：下载`星球APP`，从星球【课程入口】进入。里面有完整的学习指引，包括；使用说明、代码仓库、专属项目群、学习路线、往期项目。本项目地址：[https://t.zsxq.com/gYEVX](https://t.zsxq.com/gYEVX)
diff --git a/docs/md/zsxq/project/s-pay-mall.md b/docs/md/zsxq/project/s-pay-mall.md
new file mode 100644
index 000000000..1fe387716
--- /dev/null
+++ b/docs/md/zsxq/project/s-pay-mall.md
@@ -0,0 +1,154 @@
+---
+title: 小型支付电商系统
+lock: no
+---
+
+# 小型支付电商系统 - 一套项目2套架构开发（MVC+DDD）
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+🌻 在小傅哥带大家做的众多实战项目中，有些伙伴喜欢看 `DDD` 因为面试有的讲，有些伙伴想做 `MVC` 因为虽然知道 `DDD` 有亮点但初次接触怕学起来难。所以，这次我要一套项目，写出两套架构开发。你可以对比着学习，看看不同架构（`MVC&DDD`）如何设计和编码！
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/business-behavior-monitor/business-behavior-monitor-01.png" width="150px">
+</div>
+
+**那咱们做什么项目呢？🤔**
+
+这是一套`小型的支付电商系统`，提取实际生产中核心的真实模块作为咱们的开发需求，同时也是面试中最为常问的流程。包括；`如何微信扫码鉴权登录` + `模板消息通知`、`怎么做支付宝交易打通`、`商品支付掉单如何处理`、`相关的任务补偿怎么操作`等。把这些需求分别通过 MVC 架构、DDD 架构，进行设计实现。让学习的伙伴，对照出不同架构的设计思路和开发差异，即完成业务需求，也提高编程架构思维。—— 同龄人的差异，就是你比别人站的高的时候，略微出手，就是那个赛道的将相王侯 👍🏻！
+
+两套架构工程的代码已经写完啦（录制视频中）！接下来小傅哥就来介绍下这套项目，你能获得的技术知识。
+
+>文末有加入学习方式，还有优惠券可以使用。先到先得！
+
+## 一、能学到啥
+
+这是一套完整具备核心链路的小型项目，我们不在同类编码上反复重复，只关注核心链路。所以你可以花费很少的时间，积累丰富的架构和编程经验。在这套内容学习中，积累核心技术的运用，包括；
+
+- 【前端】熟练使用，简单 HTML、DIV、CSS，对扫码登录、商品下单页面的构建。
+- 【前端】掌握 fetch 方式对后端接口的调用，处理相关的逻辑数据。
+- 【后端】熟练搭建 MVC 工程项目、理解各个分层模块作用，对 MVC 的设计方法有清楚的认识。
+- 【后端】熟练搭建 DDD 工程项目、以及 DDD 脚手架搭建项目。并对 DDD 设计方法有清楚的认知。
+- 【后端】理解 DDD 架构设计思维，这部分会有大量的内容进行讲解。再结合后续的实战，会对架构有更深入的认识。
+- 【后端】熟练掌握 Spring、SpringBoot、MyBatis 等开发框架技术，并对框架源码所提供的扩展接口具备运用能力。
+- 【后端】熟练使用模板设计模式，对商品下单的流程拆解和实现。
+- 【后端】深度理解登录、支付、下单，全流程的核心设计和实现，而不是那种CRUD学习个DEMO，我们对接真实支付！
+- 【运维】熟练使用 Docker 在本地和服务端的配置和部署应用，以及在本地构建前后端镜像。
+- 【运维】熟练掌握 Git、GitCode，对工程代码的管理，推送、拉取、切换分支、合并代码等操作。
+- 【运维】熟练使用 Nginx 配置转发服务，给前端应用在 Nginx 进行部署。
+
+此外，小傅哥会把系统开发过程中的思考、设计、编码，录制⏺成完整的视频，让大家可以学习到的更多、更细、更深！
+
+## 二、项目介绍
+
+本次项目是一个包括 `前后端 + Dev-Ops` 且小型的综合实战项目，基于 SpringBoot、MyBatis、Nginx、Docker、微信公众号、支付宝沙箱等开发的项目。非常适合小白伙伴和有DDD学习诉求的伙伴上手！
+
+本次项目铺设出来的内容并不大，但具备详细的核心流程，你可以通过一条完整链路学习到 MVC 和 DDD 的开发设计与编码差异。这是非常重要的。
+
+### 1. 核心流程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-0-01.png" width="800px">
+</div>
+
+### 2. 项目工程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-0-02.png" width="600px">
+</div>
+
+- 一套项目需求，用两套架构开发。小傅哥，是真的想帮你提高架构思维！
+- 我会在全程视频手把手的编码过程中，为你讲解 MVC 与 DDD 的设计，它们之间的对象设计，思维方式，编码结构。
+
+### 3. 流程设计
+
+#### 3.1 登录流程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ddd-scene-solution/xfg-dev-tech-weixin-login-02.png" width="600px">
+</div>
+
+#### 3.2 下单流程
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/ddd-scene-solution/alipay-sandbox-13.png?raw=true" width="600px">
+</div>
+
+### 4. 运行效果
+
+<div align="center">
+    <img src="https://bugstack.cn/images/article/project/s-pay-mall/s-pay-mall-0-03.png" width="800px">
+</div>
+
+### 5. 运行日志
+
+```java
+24-08-04.11:03:13.922 [http-nio-8092-exec-3] INFO  LoginController        - 生成微信扫码登录 ticket gQGq8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyT01QWXBJTDBjckcxUlFZbWhDMUgAAgR0765mAwQAjScA
+24-08-04.11:11:00.291 [http-nio-8092-exec-7] INFO  WeixinPortalController - 接收微信公众号信息请求or0Ab6ivwmypESVp_bYuk92T6SvU开始 <xml><ToUserName><![CDATA[gh_e067c267e056]]></ToUserName>
+<FromUserName><![CDATA[or0Ab6ivwmypESVp_bYuk92T6SvU]]></FromUserName>
+<CreateTime>1722741062</CreateTime>
+<MsgType><![CDATA[event]]></MsgType>
+<Event><![CDATA[TEMPLATESENDJOBFINISH]]></Event>
+<MsgID>3576043305420816385</MsgID>
+<Status><![CDATA[success]]></Status>
+</xml>
+24-08-04.11:11:00.305 [http-nio-8092-exec-7] INFO  WeixinPortalController - 接收微信公众号信息请求or0Ab6ivwmypESVp_bYuk92T6SvU完成 <xml><ToUserName><![CDATA[gh_e067c267e056]]></ToUserName>
+<FromUserName><![CDATA[or0Ab6ivwmypESVp_bYuk92T6SvU]]></FromUserName>
+<CreateTime>1722741062</CreateTime>
+<MsgType><![CDATA[event]]></MsgType>
+<Event><![CDATA[TEMPLATESENDJOBFINISH]]></Event>
+<MsgID>3576043305420816385</MsgID>
+<Status><![CDATA[success]]></Status>
+</xml>
+24-08-04.11:11:12.374 [http-nio-8092-exec-9] INFO  LoginController        - 生成微信扫码登录 ticket gQGY8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyeGpIYm8yTDBjckcxUmktbXhDMU8AAgRS8a5mAwQAjScA
+24-08-04.11:11:18.541 [http-nio-8092-exec-1] INFO  AliPayController       - 商品下单，根据商品ID创建支付单开始 userId:or0Ab6ivwmypESVp_bYuk92T6SvU productId:or0Ab6ivwmypESVp_bYuk92T6SvU
+24-08-04.11:11:18.581 [http-nio-8092-exec-1] INFO  HikariDataSource       - HikariPool-1 - Starting...
+24-08-04.11:11:18.778 [http-nio-8092-exec-1] INFO  HikariDataSource       - HikariPool-1 - Start completed.
+24-08-04.11:11:19.177 [http-nio-8092-exec-1] INFO  AbstractOrderService   - 创建订单-完成，生成支付单。userId: or0Ab6ivwmypESVp_bYuk92T6SvU orderId: 3700032384239341 payUrl: <form name="punchout_form" method="post" action="https://openapi-sandbox.dl.alipaydev.com/gateway.do?charset=utf-8&method=alipay.trade.page.pay&sign=ThasDwUrX%2F%2BY6cnC3***&version=1.0&app_id=9021000132689924&sign_type=RSA2&timestamp=2024-08-04+11%3A11%3A19&alipay_sdk=alipay-sdk-java-4.38.157.ALL&format=json">
+<input type="hidden" name="biz_content" value="{&quot;out_trade_no&quot;:&quot;3700032384239341&quot;,&quot;total_amount&quot;:&quot;1.68&quot;,&quot;subject&quot;:&quot;测试商品&quot;,&quot;product_code&quot;:&quot;FAST_INSTANT_TRADE_PAY&quot;}">
+<input type="submit" value="立即支付" style="display:none" >
+</form>
+<script>document.forms[0].submit();</script>
+24-08-04.11:11:19.178 [http-nio-8092-exec-1] INFO  AliPayController       - 商品下单，根据商品ID创建支付单完成 userId:or0Ab6ivwmypESVp_bYuk92T6SvU productId:100010090091 orderId:3700032384239341
+```
+
+## 三、项目大纲
+
+**课程地址**：[https://t.zsxq.com/3X9GA](https://t.zsxq.com/3X9GA)
+
+- 第1部分：架构理论
+  - 第1节：DDD 架构概念
+  - 第2节：DDD 建模方法
+  - 第3节：DDD 工程模型（含 MVC 对比）
+- 第2部分：需求设计
+  - 第1节：小型支付商城需求设计
+  - 第2节：工程四色建模设计
+  - 第3节：库表设计
+- 第3部分：功能实现 - MVC
+  - 第1节：MVC 工程框架搭建 + 基础配置 + Git 使用
+  - 第2节：微信公众号鉴权
+  - 第3节：登录功能设计实现
+  - 第4节：商品下单
+  - 第5节：对接支付
+  - 第6节：支付回调处理
+- 第3部分：功能实现 - DDD
+  - 第1节：DDD 工程框架搭建 + 基础配置 + Git 使用
+  - 第2节：DDD 重构，微信公众号鉴权
+  - 第3节：DDD 重构，登录功能设计实现
+  - 第4节：DDD 重构，商品下单
+  - 第5节：DDD 重构，对接支付
+  - 第6节：DDD 重构，支付回调处理
+- 第4部分：开发运维
+  - 第1节：natapp 内网穿透
+  - 第2节：微信公众号，测试平台申请
+  - 第3节：支付宝沙箱申请
+  - 第4节：发布上线
+
+---
+
+课程包括；视频、小册、1 对 1 答疑解惑、专属VIP项目交流群，并且提供简历编写模板结构的一条龙🐲服务。让你学习后，直接拉开与还在玩具项目其他人的差距，面试脱颖而出提高竞争力！！！
\ No newline at end of file
diff --git a/docs/md/zsxq/project/xfg-wrench.md b/docs/md/zsxq/project/xfg-wrench.md
new file mode 100644
index 000000000..1d0fe1144
--- /dev/null
+++ b/docs/md/zsxq/project/xfg-wrench.md
@@ -0,0 +1,111 @@
+---
+title: 通用技术组件 - 🔧扳手工程
+lock: no
+---
+
+# 通用技术组件 - 🔧扳手工程，凝练共性功能，实现通用组件。为各个业务系统赋能！
+
+作者：小傅哥
+<br/>博客：[https://bugstack.cn](https://bugstack.cn)
+<br/>课程：[https://t.zsxq.com/o7IBm](https://t.zsxq.com/o7IBm)
+
+>沉淀、分享、成长，让自己和他人都能有所收获！😄
+
+大家好，我是技术UP主小傅哥。
+
+哈哈哈，死鬼！又带来了一个新项目，**《扳手工程》** 一个通用场景解决方案项目，嘎嘎的冲过来啦！`这已经是小傅哥社群里，第17个项目啦！😱`
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/chatgpt/chatgpt-extra-230905-01.png" width="150px"/>
+</div>
+
+**这是一个什么项目？**
+
+在互联网公司真实业务开发场景下，往往会有很多的业务工程系统进行落地，如；电商、交易、信贷、营销、分润、清分/结算等等，这些业务场景会落地非常多的业务系统。而这些业务系统中，会有很多的相同的非业务逻辑的共性技术诉求的处理，如；动态属性配置、熔断、限流、异常、数据采集监控、增强的mock服务、流量录制回放、切面拦截日志、模型设计框架等等。
+
+这些共性的组件东西，不可能让每个系统全部自己实现一遍，既耗费人力，最后又实现的五花八门非常难维护。所以，在互联网公司中，会单独把这类通用的逻辑凝练成共用的技术组件，让所需的业务场景进行引入使用。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/xfg-wrench/xfg-wrench-0-04.png" width="750px"/>
+</div>
+
+那么，这就是小傅哥要带着你做的一款通用《扳手工程》 SpringBoot Starter 系列组件，用于星球的业务项目中使用。**😂 星球里也确实有非常多的业务项目了，不开一个这样东西，那么就要很多业务项目都重复的实现！**
+
+> 💐 文末提供了17套实战项目源码，8套业务（含最新 AI RAG MCP）、8套组件，还有1套源码教程。
+
+## 一、能学到啥
+
+该项目是以真实的互联网企业架构方案为指导，建设星球业务项目通用技术组件支撑平台。全程手把手分析需求、架构工程、从0到1编码，让大家可以深入理解和学习组件化设计和落地。
+
+- 深入学习 Spring、SpringBoot、MyBatis 框架源码，掌握 SPI 机制实例化组件入口，理解 Spring Bean 生命周期与 BeanPostProcessor 的实际应用，实现属性级别的动态注入与代理。
+- 掌握 Redisson 客户端的配置与使用，基于 Redis 实现分布式发布/订阅消息机制。
+- 理解自定义注解实现配置属性的自动注入与动态刷新，学习分布式系统中配置中心的设计与实现，提升组件化开发与扩展能力。
+- 深入学习 Spring AOP 切面编程，掌握注解驱动的方法拦截与增强技术。
+- 熟练运用 Guava RateLimiter 实现令牌桶算法的接口限流保护机制。
+- 掌握自定义注解与反射机制结合，实现灵活的功能配置与参数提取，精通本地缓存设计与管理，提升系统性能与资源利用率。
+- 深入理解分布式系统限流与降级策略，构建高可用服务保障体系。
+- 熟练应用代理模式与策略模式，提升代码的可扩展性与可维护性，掌握 Java 反射机制在属性获取与方法调用中的高级应用。
+- 精通动态配置管理与功能开关设计，实现系统的灵活控制，深入理解异常处理与日志记录的最佳实践，提升系统可观测性。
+- 掌握面向接口编程思想，设计支持分布式场景扩展的组件架构，深入掌握责任链模式在复杂业务流程中的应用，提升系统解耦与扩展能力。
+- 学习策略模式在动态业务路由与决策中的实现，增强系统灵活性，掌握泛型与函数式接口在设计模式中的高阶用法，提升代码复用性与类型安全。
+- 理解链式调用与链路装配技术，实现业务处理链的灵活组装与动态扩展，掌握多线程与异步策略路由的设计与实现，提升系统并发处理能力。
+- 学习接口+抽象类+实现类的分层设计思想，为后续 SPI 等机制扩展预留入口。
+
+以上，仅是关于组件技术开发的一部分，如果你想把一些之前硬背过的关于核心技术组件场景解决方案的东西彻底学会，而不是简简单单的背，那么这趟技术列车千万别错过。
+
+## 二、项目介绍
+
+本次项目你会学习到非常多的共性场景解决方案，这些内容可以引入到你做过的业务项目中进行使用。全过程以实际问题场景触发，设计解决方案，手把手编码。组件项目完成后，还会带着你发布自己的Jar到共有平台（https://mvnrepository.com/） 其他人也能引入使用。
+
+### 1. 背景举例
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/xfg-wrench/xfg-wrench-0-03.png" width="950px"/>
+</div>
+
+当你学习大营销、拼团、OpenAI 应用等业务系统时，会遇到很多同类的功能诉求，如；规则树的设计模式、DCC 动态配置中心、接口限流配置等。这些东西其实都可以被抽象凝练成一个通用的技术组件，引入后直接配置使用即可，而不需要在每个业务系统中都开发一遍。
+
+### 2. 架构设计
+
+设计通用的统一规范的扳手工程；
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/xfg-wrench/xfg-wrench-0-01.png" width="450px"/>
+</div>
+
+- 首先，我们会搭建一套标准的扳手框架 Spring Starter 工程。在工程内，以模块化方式陆续实现，动态配置、限流服务、通用设计模块框架。
+- 之后，以 Redis 作为简单注册中心使用，管理动态配置、限流服务等，再以 admin 管理端，下达配置命令，来动态操作工程配置。
+
+### 3. 工程模型
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/xfg-wrench/xfg-wrench-0-02.png" width="450px"/>
+</div>
+
+- 定义 xfg-wrench 扳手工程，以 xfg-wrench-starter 为前缀，命名各项服务组件。如；`xfg-wrench-starter-dynamic-config-center`
+- xfg-wrench-test 为测试工程，用于验证各个模块的功能实现。
+- xfg-wrench-admin 为管理后台，后续陆续创建完成。以及其他模块组件陆续迭代开发。
+
+### 4. 流程设计（举例 DCC 动态配置）
+
+如图，动态配置中心功能流程设计；
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/xfg-wrench/xfg-wrench-1-01.png" width="850px"/>
+</div>
+
+- 以 SPI 机制，实现组件入口类的注册。驱动注册中心和 Spring 容器工作。也就是工程的 `META-INF/spring.factories` 文件里配置的类，会被引入此组件的其他 SpringBoot 应用进行调用启动。
+- 接下来，注册配置会链接 Redis 当做注册中心使用。因为 Redis 具备了存储和发布订阅的功能，如 Dubbo 也可以使用 Redis 作为简单注册中心使用一样。而后出初始化动态配置中心的服务，以及监听订阅消息。
+- 在之后，拦截 Spring 容器实例化的 Bean 对象，找到使用了自定义注解 `@DCCValue` 的属性，对其拦截动态读取 Redis 中配置属性值（如无则首次设置值），之后对属性进行反射调用，设置变更后端 属性值。
+- 最后是，我们操作推送 Redis 发布订阅消息，则可以被消息回调，变更属性值。
+
+## 三、加入学习
+
+课程采用 `文档` + `视频`教程，全流程带着你分析和实现，并且会把组件也业务项目结合。小傅哥带着你做的，就是互联网中真实场景的运用。
+
+<div align="center">
+	<img src="https://bugstack.cn/images/article/project/xfg-wrench/xfg-wrench-0-05.png" width="750px"/>
+</div>
+**注意📢**，本项目也只是**【星球：码农会锁】**众多项目中的1个，其他的项目还包括：拼团、大营销、小型支付商城、AI RAG MCP、OpenAI 代码自动评审、动态线程池、支付SDK、API网关、Lottery抽奖、IM通信、SpringBoot Starter 组件开发、IDEA Plugin 插件开发等，并还有开源项目学习。
+
+> 这将是一个新的技术旅程，在这趟车上🚗，你会了解到互联网公司大厂🏭是如何对这类场景的方案落地的。
diff --git a/package.json b/package.json
index 40ef97668..356fbb2af 100755
--- a/package.json
+++ b/package.json
@@ -22,7 +22,6 @@
     "@vssue/vuepress-plugin-vssue": "^1.4.8",
     "@vuepress/core": "^1.8.2",
     "browserslist": "^4.16.3",
-    "caniuse-lite": "^1.0.30001196",
     "screenfull": "^5.1.0",
     "vuepress-plugin-baidu-autopush": "^1.0.1",
     "vuepress-plugin-code-copy": "^1.0.6",
@@ -30,4 +29,4 @@
     "vuepress-plugin-img-lazy": "^1.0.4",
     "vuepress-plugin-table-of-contents": "^1.1.7"
   }
-}
\ No newline at end of file
+}
