From 2bb60d00e8a19479b2dbd0fd15d6802081285a17 Mon Sep 17 00:00:00 2001 From: Cxx0822 <1556464090@qq.com> Date: Mon, 15 Dec 2025 23:25:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E5=B8=83=E5=B1=80?= =?UTF-8?q?=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/.vitepress/config.mts | 6 +- .../theme/components/ArticleMetadata.vue | 44 +++--- docs/.vitepress/theme/components/MyLayout.vue | 16 ++ docs/.vitepress/theme/index.ts | 2 + docs/DevOps/Docker.md | 144 ++++++++++++++++++ docs/DevOps/ElasticSearch.md | 2 - docs/DevOps/Jenkins.md | 2 - docs/DevOps/OpenObserve.md | 2 - docs/DevOps/images/docker.png | Bin 0 -> 17288 bytes docs/DevOps/images/虚拟机.png | Bin 0 -> 15626 bytes docs/DevOps/index.md | 1 + docs/Flutter/DartGuide.md | 2 - docs/Flutter/FlutterGuide.md | 2 - docs/Flutter/Practice.md | 2 - docs/Web-Backend/FastAPI/FastAPI-Guide.md | 2 - docs/Web-Backend/FastAPI/OAuth2.md | 2 - docs/Web-Backend/Others/Flyway.md | 2 - docs/Web-Backend/Others/MyBatis.md | 2 - docs/Web-Backend/Others/MySQL-Knowledge.md | 2 - docs/Web-Backend/Others/Netword-Program.md | 2 - docs/Web-Backend/Others/RustFS.md | 2 - .../SpringBoot/SpingBoot-Skills.md | 2 - .../SpringBoot/SpringBoot-Common.md | 2 - .../SpringBoot/SpringBoot-Start-Process.md | 2 - .../SpringBoot/SpringBoot3-GraalVM.md | 2 - docs/Web-Backend/SpringBoot/SpringBootBean.md | 2 - .../SpringBoot/SpringBootStarter.md | 2 - docs/Web-Backend/SpringBoot/SpringIOC.md | 2 - docs/Web-Backend/SpringBoot/SpringMVC.md | 2 - docs/Web-Front/Others/Browser-Process.md | 2 - docs/Web-Front/Others/JavaScript-Guide.md | 2 - docs/Web-Front/Others/Package.md | 2 - docs/Web-Front/Others/Vite-Principle.md | 2 - docs/Web-Front/Vue/Vue3-Architecture.md | 2 - docs/Web-Front/Vue/Vue3-Common.md | 2 - 35 files changed, 194 insertions(+), 73 deletions(-) create mode 100644 docs/.vitepress/theme/components/MyLayout.vue create mode 100644 docs/DevOps/Docker.md create mode 100644 docs/DevOps/images/docker.png create mode 100644 docs/DevOps/images/虚拟机.png diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index d5055f0..d4d3b39 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -79,7 +79,8 @@ export default withMermaid({ items: [ { text: 'OpenObserve部署和使用', link: '/DevOps/OpenObserve' }, { text: 'Jenkins部署和使用', link: '/DevOps/Jenkins' }, - { text: 'ElasticSearch部署和使用', link: '/DevOps/ElasticSearch' } + { text: 'ElasticSearch部署和使用', link: '/DevOps/ElasticSearch' }, + { text: 'Docker简介和安装', link: '/DevOps/Docker' } ] }, { text: 'Flutter', @@ -154,7 +155,8 @@ export default withMermaid({ items: [ { text: 'OpenObserve部署和使用', link: '/DevOps/OpenObserve' }, { text: 'Jenkins部署和使用', link: '/DevOps/Jenkins' }, - { text: 'ElasticSearch部署和使用', link: '/DevOps/ElasticSearch' } + { text: 'ElasticSearch部署和使用', link: '/DevOps/ElasticSearch' }, + { text: 'Docker简介和安装', link: '/DevOps/Docker' } ] } ], diff --git a/docs/.vitepress/theme/components/ArticleMetadata.vue b/docs/.vitepress/theme/components/ArticleMetadata.vue index e9e8811..0d24dae 100644 --- a/docs/.vitepress/theme/components/ArticleMetadata.vue +++ b/docs/.vitepress/theme/components/ArticleMetadata.vue @@ -1,10 +1,24 @@ + + + \ No newline at end of file diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts index 172b376..6ffc18b 100644 --- a/docs/.vitepress/theme/index.ts +++ b/docs/.vitepress/theme/index.ts @@ -9,9 +9,11 @@ import '../theme/style.css' import './style/var.css' import './style/vp-code.css' import './style/custom-block.css' +import MyLayout from './components/MyLayout.vue'; export default { extends: DefaultTheme, + Layout: MyLayout, setup() { const route = useRoute() const initZoom = () => { diff --git a/docs/DevOps/Docker.md b/docs/DevOps/Docker.md new file mode 100644 index 0000000..7163e6b --- /dev/null +++ b/docs/DevOps/Docker.md @@ -0,0 +1,144 @@ +# 一、Docker简介 +## 1.1 基础概念 +### 1.1.1 Docker概念 +  Docker是一个开源的应用容器引擎,可以让开发者将应用和依赖打包到一个轻量级、可移植的容器中,然后部署到任何流行的Linux或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 +  虚拟机和Docker的主要区别:**服务器虚拟化解决的核心问题是资源调配,而容器解决的核心问题是应用开发、测试和部署。** +![虚拟机](./images/虚拟机.png) +![docker](./images/docker.png) + +  传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。 + +| 特性| 容器| 虚拟机 | +| :---: | :---: | :---: | +| 启动 | 秒级 | 分钟级 | +| 硬盘使用 | 一般为 `MB` | 一般为 `GB` | +| 性能 | 接近原生 | 弱于 | +| 系统支持量 | 单机支持上千个容器 | 一般几十个 | + +### 1.1.2 Docker镜像——Image +  Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的**程序、库、资源、配置**等文件外,还包含了一些为运行时准备的一些**配置参数**(如匿名卷、环境变量、用户等)。**镜像不包含任何动态数据**,其内容在构建之后也不会被改变。 + +### 1.2.3 Docker容器——Container +  镜像(`Image`)和容器(`Container`)的关系,就像是面向对象程序设计中的 `类` 和 `实例` 一样,**镜像是静态的定义,容器是镜像运行时的实体**。容器可以被创建、启动、停止、删除、暂停等。 +  **容器的实质是进程**,但与直接在宿主执行的进程不同,**容器进程运行于属于自己的独立的**[命名空间(opens new window)](https://en.wikipedia.org/wiki/Linux_namespaces)。因此容器可以拥有自己的 `root` 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。 +  容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。 +  按照 Docker 最佳实践的要求,**容器不应该向其存储层内写入任何数据**,容器存储层要保持无状态化。**所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录**,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。 +  数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。 + +### 1.2.4 Docker仓库——Registry +  一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。 +  一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 `<仓库名>:<标签>` 的格式来指定具体是这个软件哪个版本的镜像。 +  最常使用的 Registry 公开服务是官方的 [Docker Hub](https://hub.docker.com/),这也是默认的 Registry。 + +# 二、Docker安装 +## 2.1 环境 +  Ubuntu20.04 + +## 2.2 安装 +1. 安装依赖 + +```bash +sudo apt-get install apt-transport-https ca-certificates curl software-properties-common +``` + +2. 添加 GPG 密钥 + +```bash +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - +``` + +  也可以使用阿里云Docker镜像: + +```bash +curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - +``` + +3. 添加Docker软件源 + +```bash +sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" +``` + +  阿里云Docker镜像: + +```bash +sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" +``` + +4. 安装Docker + +```bash +sudo apt-get install docker-ce +``` + +5. 配置Docker镜像服务 + +  1️⃣登录阿里云账号,在**容器镜像服务->镜像工具->镜像加速器**中找到**加速器地址**。 +  2️⃣在/etc/docker中新建文件 daemon.json + +```json +{ + "registry-mirrors": ["https://******.mirror.aliyuncs.com"] +} +``` + +  3️⃣执行命令: + +```bash +sudo systemctl daemon-reload +sudo systemctl restart docker +``` + +# 三、Portainer安装 +## 3.1 简介 +  [Portainer](https://www.portainer.io/) 是一个开源的轻量级Docker管理界面,提供直观的图形化用户界面,支持快速部署、操作和监控Docker容器、镜像、服务等。 +  Portainer提供用户管理、权限控制、容器生命周期管理、镜像操作、服务堆栈管理等功能。支持多节点管理和面板化展示。 + +## 3.2 安装 +  拉取镜像:`docker pull portainer/portainer-ce` + +## 3.3 启动 +  启动容器:`docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /dockerData/portainer:/data --restart=always --name portainer portainer/portainer-ce:latest` + +## 3.4 运行 +  在浏览器中输入`127.0.0.1:9090`即可访问Portainer管理系统。 + +# 四、Docker基础命令 +| 功能分类 | 命令功能 | 具体命令及示例 | +|------------------|--------------------------|-------------------------------------| +| **Docker环境** | 查看版本信息 | `docker version` | +| | 查看系统信息 | `docker info` | +| | 启动Docker服务(Linux) | `sudo systemctl start docker` | +| | 停止Docker服务(Linux) | `sudo systemctl stop docker` | +| | 重启Docker服务(Linux) | `sudo systemctl restart docker` | +| | 设置开机自启(Linux) | `sudo systemctl enable docker` | +| **镜像操作** | 搜索镜像(Docker Hub) | `docker search nginx` | +| | 拉取镜像(最新版) | `docker pull nginx` | +| | 拉取镜像(指定版本) | `docker pull nginx:1.24.0` | +| | 查看本地镜像 | `docker images` | +| | 删除镜像 | `docker rmi nginx:1.24.0` | +| | 删除悬空镜像 | `docker image prune` | +| | 删除所有未用 | `docker image prune -a` | +| | 构建镜像 | `docker build -t mynginx:v1 .`(当前目录Dockerfile) | +| | 保存镜像 | `docker save -o nginx.tar nginx:1.24.0` | +| | 加载镜像 | `docker load -i nginx.tar` | +| **容器操作** | 创建并启动容器 | `docker run -d --name mynginx -p 80:80 nginx` | +| | 查看运行中容器 | `docker ps` | +| | 查看所有容器(含停止) | `docker ps -a` | +| | 启动已停止容器 | `docker start mynginx` | +| | 停止运行中容器 | `docker stop mynginx`、`docker kill mynginx` | +| | 重启容器 | `docker restart mynginx` | +| | 进入运行中的容器 | `docker exec -it mynginx /bin/bash` | +| | 查看容器日志 | `docker logs mynginx` | +| | 删除容器 | `docker rm mynginx`、`docker rm -f mynginx`| +| | 清理所有停止的容器 | `docker container prune` | +| | 查看容器详情 | `docker inspect mynginx` | + +# 五、Docker Compose + +# 六、Docker实战 +  [Docker-完整项目的部署(保姆级教学)_docker部署-CSDN博客](https://blog.csdn.net/qq_71654538/article/details/136520075) + +# 七、参考资料 +1. [Docker — 从入门到实践](https://github.com/yeasy/docker_practice?tab=readme-ov-file) + diff --git a/docs/DevOps/ElasticSearch.md b/docs/DevOps/ElasticSearch.md index 18f8a8d..eda7e44 100644 --- a/docs/DevOps/ElasticSearch.md +++ b/docs/DevOps/ElasticSearch.md @@ -1,5 +1,3 @@ - - ## 一、基础概念 ## 二、Docker部署 diff --git a/docs/DevOps/Jenkins.md b/docs/DevOps/Jenkins.md index 4f1a5b6..a9dd0b3 100644 --- a/docs/DevOps/Jenkins.md +++ b/docs/DevOps/Jenkins.md @@ -1,5 +1,3 @@ - - # 一、Jenkins安装 ## 1.1 简介   Jenkins 是一款开源的持续集成(Continuous Integration, CI) 和持续交付(Continuous Delivery, CD) 自动化工具,广泛应用于软件开发流程中,帮助团队实现代码构建、测试、部署的自动化,从而提升开发效率、减少人为错误,并确保软件质量。 diff --git a/docs/DevOps/OpenObserve.md b/docs/DevOps/OpenObserve.md index d08e44e..0f859ac 100644 --- a/docs/DevOps/OpenObserve.md +++ b/docs/DevOps/OpenObserve.md @@ -1,5 +1,3 @@ - - ## 一、基础概念 ### 1.1 Fluent Bit   [Fluent Bit](https://fluentbit.io/)​​ 是一个开源的、轻量级、高性能的日志处理器和转发器。Fluent Bit 的核心任务是:​​**从各种来源收集日志、指标和追踪数据,进行处理和过滤,然后将其发送到一个或多个目的地。​** diff --git a/docs/DevOps/images/docker.png b/docs/DevOps/images/docker.png new file mode 100644 index 0000000000000000000000000000000000000000..13eda2dacfc91772f6bffad340a52c6aea8c905c GIT binary patch literal 17288 zcmV)4K+3;TNk&G1LjV9*MM6+kP&goTLjVBq%mAGMDzO5?06uLpl}Dr^q9Gfd=LEJI1YaFx&HIikN!_k5BFZ2y&3s{ z{fGUT_mlsf`?>Ce`?shE_0RQQt)J`v{`-ahLjO_!|J(!k=k+iD{?;G-y^%l7f9w6u z_n7~i|Nqzn|DUJ_{~o!1i~m3Tbn`9wU-h5sAG6=zeHZ*+iqHZF~Fg z`(IEmS$<3YZ~GtlkNbb%J;Qx3{0H{$-S6tZ0{%Dr=lpN@AKdTl|NsC0{(yfT{&oJF z{3q^@`S1V#{QkKAW8l&CZ}UI5-vB?$Kd677{^$7p^r8E&{EzV;=Rf)X)An)sm-nyw zAL2jI{@{Ir|0e#G{{Q>0`S05woB#g4-T!TW{(G5zy?@^P|Nrn|kZ;KRN2q%)V$r2Q z!FgOqs8`5x6*A|bHWs6{$Y|1AOiO8rZ80sTCA7r09RFoBC4ggHw0X-yq@O)zI`vJA zCjGtx6ehEy*Vjol`(XTUhMztWD^-Am2jE}v`oxr*{Gy~icT>{Oin}+NHO&Yj=QDoA z*bRk97s&$oAYNq6dG3hPIOryf#6-CRoLSAnToKqs(P4rp#Oo1+)FmIs?(HTAM1`B( znw8|}xyfg`h7^dP>UWOOExkU-hWRh(PlQj09J((L+~ND2KXZrT3HKT=Q9nJKG!Nct z>7sbLyQd-buL+09*>cF=$(~s&#w}FK)w{Jm6RG9^yBo5q4%Ru`kJ7|7W)WR(?i~cu zA^c5OJULzCi$+Ap7NUJqXucc%TL_dfXPP0o$L$xH%%Oj|M>@%`A~l4N*!Yy!j-u~f z6DMBg{l#xia<5SN@;l9&Kp>;d4vazf;kKEo?Gi&u+x^J_fxg~8u>MCgKwhwha;fD5 zOO2m%sgjH{;mlQQZh`RMNxLP0_tUkBlo|uN2n|V6E9HgeEc6uPjgi94hI?6w0bsSy8ZkXJSdMiBo8IA> zp)ZsIn=ghT0Ij`BYfpP0@LUcZI~)LR2AEFkbFEK^#<=k9 zT8FO);m=Qall$#;vI^GqcS^oRcY*rH9zQS@L}x}24_T#39CUn(gB67~~| z+Y9YP7xFW)IfnVo`o7{MIYfZ|ZWtYa5aT!?B z++dwkMt3D(p8%e%-f|?^sLcY*C90#Ma_o$`z zbPlx>J_H)RQkO>(@c=8$p`wgJC=oyAaXkDh7S~e%)ZDz$3US=t@ z#<^?ub300+iT2hxuo(EtSPn-crR7@~33>WxQ2j-4w>f-vnETU-3Zn~3yL*A*K0~_D zrYY?SV0lptT;%GhPEa1)vKcfUSiUwRZb~AK{Bd^^ah1HL(*_N$-$^9@;S
Y5~w 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 literal 0 HcmV?d00001 diff --git a/docs/DevOps/images/虚拟机.png b/docs/DevOps/images/虚拟机.png new file mode 100644 index 0000000000000000000000000000000000000000..8644fe9c08ecfd95403399b933f0f47f103f5220 GIT binary patch literal 15626 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

{BTePAA$Re4FN`;UoA=NHGCoZ76l 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 literal 0 HcmV?d00001 diff --git a/docs/DevOps/index.md b/docs/DevOps/index.md index 355c5fa..5ca15a4 100644 --- a/docs/DevOps/index.md +++ b/docs/DevOps/index.md @@ -8,3 +8,4 @@ title: DevOps - [OpenObserve部署和使用](/DevOps/OpenObserve) - [Jenkins部署和使用](/DevOps/Jenkins) - [ElasticSearch部署和使用](/DevOps/ElasticSearch) +- [Docker简介和安装](/DevOps/Docker) \ No newline at end of file diff --git a/docs/Flutter/DartGuide.md b/docs/Flutter/DartGuide.md index e6c8420..8e98aea 100644 --- a/docs/Flutter/DartGuide.md +++ b/docs/Flutter/DartGuide.md @@ -1,5 +1,3 @@ - - # 一、基础语法 ## 1.1 变量与常量 ```dart diff --git a/docs/Flutter/FlutterGuide.md b/docs/Flutter/FlutterGuide.md index 5f94272..0f500d0 100644 --- a/docs/Flutter/FlutterGuide.md +++ b/docs/Flutter/FlutterGuide.md @@ -1,5 +1,3 @@ - - # 应用核心Widget ```dart // Flutter 应用的入口,配置主题、路由、国际化等。 diff --git a/docs/Flutter/Practice.md b/docs/Flutter/Practice.md index d25a3c0..94ee240 100644 --- a/docs/Flutter/Practice.md +++ b/docs/Flutter/Practice.md @@ -1,5 +1,3 @@ - - # 安卓签名   每次安装/升级软件必须使用同一个签名,否则会将本地数据全部清空。 ## 1. 生成密钥库文件 diff --git a/docs/Web-Backend/FastAPI/FastAPI-Guide.md b/docs/Web-Backend/FastAPI/FastAPI-Guide.md index 8b38e86..46894e9 100644 --- a/docs/Web-Backend/FastAPI/FastAPI-Guide.md +++ b/docs/Web-Backend/FastAPI/FastAPI-Guide.md @@ -1,5 +1,3 @@ - - # 一、简介   [FastAPI](https://fastapi.tiangolo.com/zh/) 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 并基于标准的 Python 类型提示。   安装: diff --git a/docs/Web-Backend/FastAPI/OAuth2.md b/docs/Web-Backend/FastAPI/OAuth2.md index fd1c20a..b786fd0 100644 --- a/docs/Web-Backend/FastAPI/OAuth2.md +++ b/docs/Web-Backend/FastAPI/OAuth2.md @@ -1,5 +1,3 @@ - - # 一、基础概念 ## 1.1 ​​OAuth2 Password Bearer 模式​   用于**用户名+密码**登录,获取**access_token**。 diff --git a/docs/Web-Backend/Others/Flyway.md b/docs/Web-Backend/Others/Flyway.md index b5afc19..eb67298 100644 --- a/docs/Web-Backend/Others/Flyway.md +++ b/docs/Web-Backend/Others/Flyway.md @@ -1,5 +1,3 @@ - - # 一、简介   Flyway 是一个开源的数据库版本控制工具,它极大地简化了数据库的迁移和版本管理。它的核心思想是​​像**用 Git 管理代码一样来管理数据库的结构**​​。 diff --git a/docs/Web-Backend/Others/MyBatis.md b/docs/Web-Backend/Others/MyBatis.md index 481dae5..8bc7c05 100644 --- a/docs/Web-Backend/Others/MyBatis.md +++ b/docs/Web-Backend/Others/MyBatis.md @@ -1,5 +1,3 @@ - - # 一、简介   [MyBatis](https://mybatis.org/mybatis-3/)是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 diff --git a/docs/Web-Backend/Others/MySQL-Knowledge.md b/docs/Web-Backend/Others/MySQL-Knowledge.md index 1ea3ca7..2881f0d 100644 --- a/docs/Web-Backend/Others/MySQL-Knowledge.md +++ b/docs/Web-Backend/Others/MySQL-Knowledge.md @@ -1,5 +1,3 @@ - - # MySQL知识点 ## 一、基础知识 ### 1.1 数据类型 diff --git a/docs/Web-Backend/Others/Netword-Program.md b/docs/Web-Backend/Others/Netword-Program.md index 1438e14..20cdbf4 100644 --- a/docs/Web-Backend/Others/Netword-Program.md +++ b/docs/Web-Backend/Others/Netword-Program.md @@ -1,5 +1,3 @@ - - # 一、TCP ## 1.1 定义   TCP(Transmission Control Protocol,传输控制协议)是互联网核心的**面向连接、可靠、字节流**的传输层协议,工作在 OSI 模型的传输层(TCP/IP 模型的传输层),基于 IP 协议提供端到端的可靠数据传输服务。它是 HTTP、HTTPS、WebSocket、MQTT 等应用层协议的底层依赖,核心目标是解决 IP 协议 “无连接、不可靠、无顺序” 的缺陷,确保数据在不可靠的网络中准确、完整、有序地传输。 diff --git a/docs/Web-Backend/Others/RustFS.md b/docs/Web-Backend/Others/RustFS.md index ed0a229..3ce1444 100644 --- a/docs/Web-Backend/Others/RustFS.md +++ b/docs/Web-Backend/Others/RustFS.md @@ -1,5 +1,3 @@ - - # 简介   [RustFS](https://rustfs.com.cn/) 是一个基于 Rust 构建的高性能分布式对象存储系统。   具体以下特点: diff --git a/docs/Web-Backend/SpringBoot/SpingBoot-Skills.md b/docs/Web-Backend/SpringBoot/SpingBoot-Skills.md index 67365b8..6a39392 100644 --- a/docs/Web-Backend/SpringBoot/SpingBoot-Skills.md +++ b/docs/Web-Backend/SpringBoot/SpingBoot-Skills.md @@ -1,5 +1,3 @@ - - # 一、JsonView   JsonView 是 Jackson 提供的注解,用于控制对象序列化/反序列化时包含哪些字段。可以实现: - 不同接口返回不同字段 diff --git a/docs/Web-Backend/SpringBoot/SpringBoot-Common.md b/docs/Web-Backend/SpringBoot/SpringBoot-Common.md index 3f24fda..2d85a34 100644 --- a/docs/Web-Backend/SpringBoot/SpringBoot-Common.md +++ b/docs/Web-Backend/SpringBoot/SpringBoot-Common.md @@ -1,5 +1,3 @@ - - # 一、框架说明   本框架基于Spring Boot3框架二次开发,增加了依赖包管理和启动项配置等功能。 diff --git a/docs/Web-Backend/SpringBoot/SpringBoot-Start-Process.md b/docs/Web-Backend/SpringBoot/SpringBoot-Start-Process.md index dd84d5c..638b3fa 100644 --- a/docs/Web-Backend/SpringBoot/SpringBoot-Start-Process.md +++ b/docs/Web-Backend/SpringBoot/SpringBoot-Start-Process.md @@ -1,5 +1,3 @@ - - # 一、启动流程 ![暂无图片](https://cxx0822.iepose.cn/rustfs/blog/7d7b8c086729d400a3891a20f2107fa6.png 'SpringBoot启动流程.png') diff --git a/docs/Web-Backend/SpringBoot/SpringBoot3-GraalVM.md b/docs/Web-Backend/SpringBoot/SpringBoot3-GraalVM.md index f7d3a0d..ad3d567 100644 --- a/docs/Web-Backend/SpringBoot/SpringBoot3-GraalVM.md +++ b/docs/Web-Backend/SpringBoot/SpringBoot3-GraalVM.md @@ -1,5 +1,3 @@ - - # 一、原生镜像   传统 Java 应用基于 JVM 运行,需要加载完整的类库和 JVM 运行时环境,导致启动时间长、内存占用高。而**原生镜像技术通过提前编译(AOT)将 Java 应用直接编译为本地机器码,无需 JVM 即可运行**,具有以下核心优势: diff --git a/docs/Web-Backend/SpringBoot/SpringBootBean.md b/docs/Web-Backend/SpringBoot/SpringBootBean.md index b9c3e10..0723b74 100644 --- a/docs/Web-Backend/SpringBoot/SpringBootBean.md +++ b/docs/Web-Backend/SpringBoot/SpringBootBean.md @@ -1,5 +1,3 @@ - - # 一、Bean概念 ## 1.1 定义   Spring bean是Spring框架在运行时管理的对象,Bean是一个由Spring IoC容器实例化、组装和管理的对象。 diff --git a/docs/Web-Backend/SpringBoot/SpringBootStarter.md b/docs/Web-Backend/SpringBoot/SpringBootStarter.md index 5a7195a..7b900bb 100644 --- a/docs/Web-Backend/SpringBoot/SpringBootStarter.md +++ b/docs/Web-Backend/SpringBoot/SpringBootStarter.md @@ -1,5 +1,3 @@ - - # 一、简介   Spring Boot Starter是一组预定义的依赖项集合,旨在简化Maven或Gradle等构建工具中的依赖管理。每个Starter都包含了实现特定功能所需的库和组件,以及相应的配置文件。开发者只需在项目中引入相应的Starter依赖,即可快速搭建起具备该功能的项目骨架。   Starter=依赖+自动配置+配置文件 diff --git a/docs/Web-Backend/SpringBoot/SpringIOC.md b/docs/Web-Backend/SpringBoot/SpringIOC.md index fc694ca..f4680e8 100644 --- a/docs/Web-Backend/SpringBoot/SpringIOC.md +++ b/docs/Web-Backend/SpringBoot/SpringIOC.md @@ -1,5 +1,3 @@ - - # 一、IOC   Spring框架的核心是IOC(控制反转)容器,它负责管理应用程序中的对象(称为Bean)的创建、配置和组装。 diff --git a/docs/Web-Backend/SpringBoot/SpringMVC.md b/docs/Web-Backend/SpringBoot/SpringMVC.md index c5ca129..2abcf5b 100644 --- a/docs/Web-Backend/SpringBoot/SpringMVC.md +++ b/docs/Web-Backend/SpringBoot/SpringMVC.md @@ -1,5 +1,3 @@ - - # 一、基础概念   Spring MVC(Spring Model-View-Controller)是 Spring Framework 中的一部分,它是一个基于 **请求驱动** 的 Web 框架,主要用于构建 Web 应用程序,并且遵循 MVC(模型-视图-控制器) 设计模式。它将 Web 应用的业务逻辑、用户界面和请求处理分离,使得代码更加模块化和可维护。 diff --git a/docs/Web-Front/Others/Browser-Process.md b/docs/Web-Front/Others/Browser-Process.md index a648555..9e58fbe 100644 --- a/docs/Web-Front/Others/Browser-Process.md +++ b/docs/Web-Front/Others/Browser-Process.md @@ -1,5 +1,3 @@ - - # 一、网络请求阶段 1. DNS 解析 diff --git a/docs/Web-Front/Others/JavaScript-Guide.md b/docs/Web-Front/Others/JavaScript-Guide.md index bb853d1..5b7d2f5 100644 --- a/docs/Web-Front/Others/JavaScript-Guide.md +++ b/docs/Web-Front/Others/JavaScript-Guide.md @@ -1,5 +1,3 @@ - - # JavaScript简介 ## JavaScript 实现   完整的`JavaScript`实现包含以下几个部分: diff --git a/docs/Web-Front/Others/Package.md b/docs/Web-Front/Others/Package.md index 1e88580..033179c 100644 --- a/docs/Web-Front/Others/Package.md +++ b/docs/Web-Front/Others/Package.md @@ -1,5 +1,3 @@ - - # npm   2010年随Node.js发布的npm,首次为JavaScript引入了标准的包管理系统。其核心创新是**package.json文件**,通过语义化版本规范定义了依赖声明标准。这一设计解决了手动管理依赖时的版本混乱问题,为模块化开发提供了基础设施。 diff --git a/docs/Web-Front/Others/Vite-Principle.md b/docs/Web-Front/Others/Vite-Principle.md index 4258280..8166d95 100644 --- a/docs/Web-Front/Others/Vite-Principle.md +++ b/docs/Web-Front/Others/Vite-Principle.md @@ -1,5 +1,3 @@ - - # 一、Vite简介   Vite是新一代的前端构建工具,在尤雨溪开发Vue3.0的时候诞生。类似于Webpack+ Webpack-dev-server。   其主要利用浏览器**ESModule特性**导入组织代码,在服务器端按需编译返回,完全跳过了打包这个概念,服务器随起随用。生产中利用Rollup作为打包工具,号称下一代的前端构建工具。 diff --git a/docs/Web-Front/Vue/Vue3-Architecture.md b/docs/Web-Front/Vue/Vue3-Architecture.md index 886a789..8b15b9b 100644 --- a/docs/Web-Front/Vue/Vue3-Architecture.md +++ b/docs/Web-Front/Vue/Vue3-Architecture.md @@ -1,5 +1,3 @@ - - # 一、Vue3 整体架构图 ```mermaid graph TD diff --git a/docs/Web-Front/Vue/Vue3-Common.md b/docs/Web-Front/Vue/Vue3-Common.md index b736fe5..8072083 100644 --- a/docs/Web-Front/Vue/Vue3-Common.md +++ b/docs/Web-Front/Vue/Vue3-Common.md @@ -1,5 +1,3 @@ - - # 一、依赖管理   本项目会传递安装的依赖有: