diff --git "a/\346\236\227\344\275\231\345\200\251/20241118Linux.md" "b/\346\236\227\344\275\231\345\200\251/20241118Linux.md" index 2adcd174b85a1c6779bb60a66b667b6196204262..050b3532f14348ead445e87286db506b162b77c3 100644 --- "a/\346\236\227\344\275\231\345\200\251/20241118Linux.md" +++ "b/\346\236\227\344\275\231\345\200\251/20241118Linux.md" @@ -1,3 +1,4 @@ +## 一.笔记 ### 1.Linux命令 ```js 一.如何登录服务器 @@ -48,4 +49,378 @@ nginx配置文件所放的位置在如下路径:/etc/nginx/conf.d/XXX.XXX.conf MVC项目的结构解读 2. 在Linux上部署MVC项目 -``` \ No newline at end of file +``` + + + +## 二.作业 +### 任务1 +```js + + * server_ip_address 指的是用户的ip地址 + eg:解析的域名 one.auroralyq.com + + 方式1:使用ssh客户端登录服务器 + ssh root@server_ip_address + 输入密码 + + 方式2:tabby应用登录服务器 + ssh root@server_ip_address + 输入密码 + + 方式3:xShell 登录服务器 + 1. 普通登录 + 在页面中点击“新建”,弹出的页面选中ssh,“主机”栏填服务器的IP地址,“端口号”默认22(可不填),“用户身份验证”中输入用户名和密码,最后点击确定和连接。 + 2. 使用命令行登录 + ssh root@server_ip_address + (如果端口号不是22,则需添加-p port_number指定端口 eg:-p 80) + + 方式4:putty 登录服务器 + 在Putty的主界面中,输入服务器的ip地址或者域名,确保“SSH”协议被默认选中且端口号为22,然后点击“Open”。如果服务器端口号不是22,需在“Port”字段中修改为指定端口。在弹出的命令窗口汇总输入用户名和密码即可: ssh root@server_ip_address + + + 注意事项: + 1.Tabby:某些快捷键可能与系统或者其他软件的快捷键冲突,需要调整;需要确保插件来源可靠。 + 2.xShell:商业软件需要合法购买使用,否则会面临法律风险;连接到新服务器时,如服务器密钥指纹改变或者未知,或有安全警告;同时打开多个链接会话且传输大量数据时,可能会占用较多系统资源。 + 3.Putty:生成的密钥格式与OpenSSH等默认格式不同,可能需要转换密钥格式;网络不稳定,链接可能会中断;默认设置下,可能会出现中文乱码问题,需要在设置中调整字符编码。 + 界面与操作便捷性: + 1. Tabby:界面简洁,支持多标签与分屏,快捷键丰富,支持多平台。 + 2. xShell:界面功能丰富,有强大的会话管理和文件传输功能,操作较复杂,主要用于windows平台。 + 3. Putty:界面简洁小巧,专注于基本的SSH连接功能,操作直观,支持对平台。 + + +``` + + +### 任务2 +```js +任务:更新软件源,命令:apt update,并了解这一步的实际用处和意义 + 用处和意义: + 1. 保持系统安全 + 2. 获取最新软件版本和功能 + 3. 维护系统稳定性 + 4. 支持软件正常使用(可及时发现并切换到可用源) +``` + +### 任务3 +```js +任务:更新软件和补丁,命令:apt upgrade -y,并了解这一步的实际用处意义 + * apt upgrade -y 作用: + 1. 升级软件包 + 2. 自行处理依赖关系 + 3. 自动确认升级 + + * 实际用处和意义: + 1. 系统安全增强 + 1. 修复安全漏洞 + 2. 更新安全机制 + 2. 性能优化,功能提升 + 3. 系统兼容性与稳定性维护 + +``` + +### 任务4: +```js +1. 查看当前目录下的文件和文件夹 + 命令:ls + 以列表形式呈现:ls -l +``` +![查看当前目录下的文件和文件夹](./images/Linuximg/1查看单签目录下文件夹.png) + +```js +2. 查看当前路径 + 命令:pwd +``` +![查看当前路径](./images/Linuximg/2查看当前路径.png) + +```js +3. 创建一个新的文件夹 + 命令:mkdir [文件夹名] +``` +![创建一个新的文件夹](./images/Linuximg/3创建一个新的文件夹.png) + +```js +4. 删除一个文件夹 + 命令:rmdir [文件夹名](注意:只能删除空文件夹) + rm -r 文件名 +``` +![删除一个文件夹](./images/Linuximg/4删除一个文件夹.png) + +```js +5. 移动或重命名文件/文件夹 + 命令:mv [原路径] [新路径] + + eg:将Blog.dll文件从当前目录移动到/home/user/one中 + mv Blog.dll /home/user/one + +``` + +```js +6. 复制文件 + 命令:cp [源文件] [目标路径] + + * (如果目标目录中已经存在同名文件,cp 命令会覆盖它,而不会给出警告(除非使用了 -i 选项)) + + eg: + 1. 复制文件到同一目录 + 例如,将文件 example.txt 复制为 copy_example.txt: + cp example.txt copy_example.txt + + 2. 复制文件到不同目录 + 例如,将文件 example.txt 复制到 /home/user/Documents 目录 + cp example.txt /home/user/Documents + + 3. 复制多个文件 + 例如,将 file1.txt 和 file2.txt 复制到 /home/user/Documents 目录: + cp file1.txt file2.txt /home/user/Documents/ + + 4. 复制文件夹 + 使用 -r 或 --recursive 选项来递归地复制文件夹及其内容。 + 例如,将文件夹 myfolder 及其所有内容复制到 /home/user/Documents 目录: + cp -r myfolder /home/user/Documents/ + + + +``` + +```js +7. 删除文件夹 + 命令:rm [文件名] + + eg: 删除Blog中的Blog.dll + 在Blog文件下,输入命令 rm -r Blog.dd 或者 rm Blog.dll +``` + + +```js +8. 查看文件内容 + 命令:cat [文件名] + + eg : 查看Blog.dll中的文件 + cat Blog.dll +``` + +```js +9. 分页查看文件内容 + 命令:less [文件名] + + eg:查看Blog中的Blog.dll + 则:less Blog.dll + + 1.向下滚动几页内容,然后向上滚动回到之前的位置。 + 使用 Page Down 和 Page Up 键来翻页。 + 2.搜索特定错误消息,比如 "error": + 按 / 然后输入 error,按 Enter 开始搜索。 + 3.使用 n 键跳转到下一个匹配项。 + 跳转到文件的第 100 行: + 4.按 g 然后输入 100,按 Enter。 + 查看完文件内容后,按 q 退出 less。 +``` + +```js +10. 查找文件 + 命令:find / -name [文件名] + / 表示从根目录开始搜索。如果你想从当前目录开始搜索,可以使用 . 代替 /。 + [文件名] 是你想要查找的文件的确切名称(可以包含通配符,如 *)。 + + 1. 查找根目录下名为index.txt的文件 + find / -name index.txt + + 2. 从当前目录开始查找名为 *.log 的所有日志文件: + find . -name "*.log" + + 3. 查找 /home 目录下名为 config.cfg 的文件,并限制搜索结果为文件 + find /home -type f -name config.cfg + +``` + +```js +11. 查看文件权限 + 命令:ls -l [文件或目录名] + + 与1相同,只是后面添加文件或者是目录名称 +``` +```js +12. 改变文件权限 + 命令:chmod [权限] [文件或目录名] + chmod [用户类型][操作][文件或目录名] + (1)其中,用户类型可以是: + u:文件所有者(user) + g:文件所属组(group) + o:其他人(others) + a:所有人(all),等同于 ugo 的组合 + (2)操作可以是: + +:添加权限 + -:移除权限 + =:设置精确权限(覆盖原有权限) + (3)权限类型可以是: + r:读权限(read) + w:写权限(write) + x:执行权限(execute) + + eg: + 1. 使用符号模式为文件 example.txt 添加执行权限给所有用户: + chmod a+x example.txt + 2. 使用符号模式移除文件 example.txt 的写权限对组和其他人: + chmod go-w example.txt + +``` +```js +13. 改变文件所有者 + 命令:chown [新所有者] [文件或目录名] + [新所有者] 是你想要将文件或目录的所有权赋予的用户名或用户ID。 + [文件或目录名] 是你想要更改所有者的文件或目录。 + + eg: + 1. 将文件 example.txt 的所有者更改为 newuser: + sudo chown newuser example.txt + 2. 将目录 myfolder 及其所有内容的所有者更改为 newuser: + sudo chown -R newuser myfolder + (注意,-R 选项用于递归地更改目录及其所有内容的所有者。) + 3. 将文件 example.txt 的所有者和组都更改为 newuser:newgroup: + sudo chown newuser:newgroup example.txt + (这个例子中,newuser 是新的所有者,newgroup 是新的组。) +``` +```js +14. 查看当前登录用户 + 命令:whoami + + eg:假设你以用户 alice 登录到系统,运行 whoami 命令将输出:alice;如果是root,则为root + +``` + +```js +15. 查看系统运行时间和平均负载 + 命令:uptime + + eg:运行 uptime 命令可能会得到类似以下的输出: + 15:34:56 up 2 days, 3:45, 2 users, load average: 0.00, 0.01, 0.05 + + 这个输出表示: + 15:34:56:当前的系统时间。 + up 2 days, 3:45:系统已经运行了2天又3小时45分钟。 + 2 users:当前有2个用户登录到系统。 + load average: 0.00, 0.01, 0.05:系统的平均负载,分别是过去1分钟、5分钟和15分钟的平均值。 + +``` + +```js +16. 查看磁盘使用情况 + 命令:df -h +``` +```js +17. 查看当前路径下的隐藏文件 + 命令:ls -a + + eg:运行 ls -a 命令可能会得到类似以下的输出(具体输出取决于当前目录的内容): + . .. .bash_logout .bashrc .profile example.txt .hiddenfile + + 解释: + . 和 .. 分别代表当前目录和父目录,它们是特殊的目录条目,不是隐藏文件,但在使用 ls -a 时总是会显示。 + .bash_logout、.bashrc 和 .profile 是常见的隐藏配置文件,用于存储 shell 会话的退出设置、初始化设置等。 + example.txt 是一个非隐藏文件。 + .hiddenfile 是一个隐藏文件。 +``` +```js +18. 创建一个空文件 + 命令:touch [文件名] +``` +```js +19. 查看当前系统的内核版本 + 命令:uname -r +``` +```js +20. 查看网络连接状态 + 命令:ifconfig 或 ip addr +``` +```js +21. 安装一个软件包 + 命令:sudo apt-get install [软件包名] + + 注意:debian下载这个软件包时,不加get + 即: apt install dotnet-sdk-8.0 (下载sdk) +``` +```js +22. 卸载一个软件包 + 命令:sudo apt-get remove [软件包名] + + 注意:卸载这个软件包时,也不加get + spt remove 软件包名 +``` + +```js +23. 更新软件包列表 + 命令:sudo apt-get update + + 输入 apt update即可 +``` + +### 任务5 在服务器上安装sdk环境 +```js + ​ 1.下载debian + + ​ 第一步: + + wget https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -O packages-microsoft-prod.deb + + ​ 第二步: + + dpkg -i packages-microsoft-prod.deb + + ​ 第三步:(先不操作) + + ​ rm packages-microsoft-prod.deb + + ​ 2.安装SDK + + ​ apt install -y dotnet-sdk-8.0 + + 测试是否安装sdk:sdkmanager --version +``` +### 任务5-1 使用nginx反向代理部署网站 +```js +2. 安装反向代理nginx + + ​ 1.安装nginx + + ​ yum install -y nginx + + ​ 2.设置nginx开机启动和nginx现在启动 + + ​ systemctl enable nginx + + ​ systemctl start nginx + + 3. 查看nginx情况 + + ​ systemctl status nginx +``` + +### 任务6 +h1.auroralyq.com + +### 任务7 +```js +7. 使用nginx反向代理,部署简单的MVC项目 + + 主要步骤: + + 1. 将程序扔到服务器 + 1. 打包程序 dotnet publish (打包的程序位于如下文件夹:bin/Release/net8.0/publish) + 2. 使用一些工具将打包好的程序传到服务器,比如scp命令 sftp工具 + 2. 安装dotnet运行时 + 1. 我们在哪里安装sdk或者运行时 答案是Debian这个Linux的发行版本 + 2. 安装的方式有几种 + 1. 包管理器 + 1. 下载一个文件 + 2. 将文件安装(其实下载的是一个源地址文件,安装是安装到软件源地址) + 3. 更新软件源 + 4. 安装sdk + 2. 二进制文件 + 3. 编译安装 + 3. 将上传的项目跑起来,命令:dotnet XXX.dll + 4. 创建nginx配置文件,关键配置内容:proxy_pass:[http://localhost:5000](https://gitee.com/link?target=http%3A%2F%2Flocalhost%3A5000) + 5. 后续:研究pm2,如何托管进程 +``` +![nginx配置](./images/Linuximg/nginx配置.png) + diff --git "a/\346\236\227\344\275\231\345\200\251/20241120\346\220\255\345\273\272\346\234\215\345\212\241\345\231\250.md" "b/\346\236\227\344\275\231\345\200\251/20241120\346\220\255\345\273\272\346\234\215\345\212\241\345\231\250.md" index 2d41d8d49edd43c8ad050d310527781c450639f3..c6991f8f775e9cd85422cfe0511a113684aa6e91 100644 --- "a/\346\236\227\344\275\231\345\200\251/20241120\346\220\255\345\273\272\346\234\215\345\212\241\345\231\250.md" +++ "b/\346\236\227\344\275\231\345\200\251/20241120\346\220\255\345\273\272\346\234\215\345\212\241\345\231\250.md" @@ -1,3 +1,4 @@ +## 一.笔记 ### 笔记 @startmindmap @@ -21,3 +22,135 @@ @endmindmap +## 二.作业-MVC练习 +### 1 +```js +1. 创建一个控制台项目,没有任何选项,体会项目名称和什么有关系 + + - 项目名称与上一级的文件名有关 +``` +![1](./images/MVC练习/1.png) + +### 2 +```js + 2. 创建一个控制项目,项目名称Blog +``` +![2](./images/MVC练习/2.png) + +### 3. +```js +3. 创建一个控制台项目,输出到Blog目录 + dotnet new mvc -o Blog + cd Blog + 在vsc中:编写脚本并运行 dotnet run + +``` +### 4 +```js +4. 创建一个MVC项目,指定项目名称 + dotnet new mvc -o Blog +``` +### 5 +```js +5. 创建一个MVC项目,指定输出目录 + dotnet new mvc -o Blog + cd Blog + 在vsc中:编写脚本并运行 dotnet run +``` + +### 6 +```js +6. 创建一个带解决方案,其下有一个MVC项目,3个类库项目的“综合项目” + dotnet new sln -o JieJue 创建解决方案 + dotnet new mvc -o Blog 创建一个mvc文件 + dotnet sln JieJue.sln add Blog.sln 将Blog添加到解决方案中 + 创建类库,添加到解决方案(3次) + dotnet new classlib -o Lei1 + dotnet sln JieJue.sln add Lei1 + +``` + +### 7 +```js +7. 创建一个项目,在默认控制器(Home)下,新增一个Action方法,名为Ok,同时为其创建对应视图以显示这个视图 + 在HomeController.cs控制器中, + public IActionResult ok(){ + return View(){} + } + 在View视图文件中,编写.cshtml文件 + +``` + +### 8 +```js +8. 创建一个项目,创建一个新的控制器,名为Blogs,新的控制器拥有一个名为Index的Action,该方法返回一个视图,视图显示“神级预判” + 终端中: + dotnet new mvc -o Blogs + Home控制器: + public IActionRerult Index(){ + return View() + } + 在View中: + 创建一个与控制器名相同的文件夹Blogs,文件名为Index.cshtml,在文件中输入“神级预判” +``` + +### 9 +```js +9. 给第8题的新控制,添加一个新的Action,名为Music,不接受任何参数,并返回对应的视图,视图显示“顶级打野” + Home控制器: + public IActionRerult Music(){ + return View() + } + 在View中: + 创建一个与控制器名相同的文件夹,文件名为Music.cshtml,在文件中输入“顶级打野” + +``` + +### 10 +```js +10. 给第8题的新控制器,新增一个Action,名为List,不接受任何参数,并返回对应视图,视图显示一个经典CRUD界面 + Home控制器: + public IActionRerult List(){ + return View() + } + 在View中: + 创建一个与控制器名相同的文件夹,文件名为List.cshtml + + +``` + +### 11 +```js +11. 新增一个控制器,名为Products,该控制器具有一个名为Edit的Action,这个Action接受一个int类型的参数id,显示这个id + Home控制器: + public IActionRerult Edit(int id){ + // return View() + return Conten(id.ToString()) + } + 在View中: + 创建一个与控制器名相同的文件夹,文件名为Edit.cshtml + +``` + +### 12 +```js +12. 在11题的新控制器中,新增一个名为Create的Action,该Action接受一个类型为Students(有姓名、年龄、体长属性)的参数,并展示该参数的`姓名`属性 + + Home控制器: + public IActionRerult Create(int id){ + // return View() + return Conten(id.ToString()) + } + 在View中: + 创建一个与控制器名相同的文件夹,文件名为Create.cshtml + + public class Students + { + public string Name { get; set; } + public int Age { get; set; } + public double Height { get; set; } // 注意:体长通常不是一个常见的属性名,这里我假设你是指身高,但保留了你提供的属性名 + } +``` + + + diff --git "a/\346\236\227\344\275\231\345\200\251/20241122\346\216\247\345\210\266\345\231\250\344\274\240\345\217\202.md" "b/\346\236\227\344\275\231\345\200\251/20241122\346\216\247\345\210\266\345\231\250\344\274\240\345\217\202.md" new file mode 100644 index 0000000000000000000000000000000000000000..1f7a13fc4e0f9f2a17eabbd56346b853ee5ad251 --- /dev/null +++ "b/\346\236\227\344\275\231\345\200\251/20241122\346\216\247\345\210\266\345\231\250\344\274\240\345\217\202.md" @@ -0,0 +1,78 @@ +## 一.笔记 + +### 1.控制器传参 +```js +1. 普通单个值传参 +``` +![单个值](./images/控制器传参/普通传参.png) +```js +2. 传递多个值 +``` +![多个值1](./images/控制器传参/多个值传参1.png) +![多个值2](./images/控制器传参/多个值传参2.png) + + +## 二.作业 +### 专项练习 +```js +1. 简单参数传递 在一个叫Blog控制器中,定义一个叫Index的Action,并且传递一个int类型的值,id为变量名 + public class BlogContriller : Controller{ + public IActionResult Index(int id){ + return Content(id.ToString()) + } + } + +2. 简单参数传递 在一个叫Blog控制器中,定义一个叫Index_2的Action,并且传递一个string类型的值,id为变量名 + public class BlogContriller : Controller{ + public IActionResult Index_2(string id){ + return Content(id) + } + } + +3. 简单参数传递 在一个叫Blog控制器中,定义一个叫Index_3的Action,并且传递一个string类型的值,name为变量名 + public class BlogContriller : Controller{ + public IActionResult Index_2(string name){ + return Content(name) + } + } + +4. 复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create的Action,并且传递一个BlogCreateDto类型的值,blogCreateDto为变量名 + public class BlogContriller : Controller{ + [HttpPost] + public IActionResult Create([FromBody] BlogCreateDto blogCreateDto){ + return Content(blogCreateDto.Title) + } + } + public class BlogCreateDto{ + // Title等为自动属性 + public string Title{get;set;}=null!; + public string Author{get;set;}=null!; + public string Content{get;set;}=null!; + } + +5. 复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create_1的Action,并且传递一个Products类型的值,productCreateDto为变量名 + public class BlogContriller : Controller{ + [HttpPost] + public IActionResult Create([FromBody] Products productCreateDto){ + return Content(blogCreateDto.Title) + } + } + public class Products{ + public string Name{get;set;}=null!; + public string Price{get;set;}=null!; + public string Stock{get;set;}=null!; + } + +6. 复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create_2的Action,并且传递一个Students类型的值,studentCreateDto为变量名 + public class BlogContriller : Controller{ + [HttpPost] + public IActionResult Create_2([FromBody] Students studentCreateDto){ + return Content(blogCreateDto.Title) + } + } + public class Students{ + public string Name{get;set;}=null!; + public string Price{get;set;}=null!; + public string Stock{get;set;}=null!; + } +``` diff --git "a/\346\236\227\344\275\231\345\200\251/images/Linuximg/1\346\237\245\347\234\213\345\215\225\347\255\276\347\233\256\345\275\225\344\270\213\346\226\207\344\273\266\345\244\271.png" "b/\346\236\227\344\275\231\345\200\251/images/Linuximg/1\346\237\245\347\234\213\345\215\225\347\255\276\347\233\256\345\275\225\344\270\213\346\226\207\344\273\266\345\244\271.png" new file mode 100644 index 0000000000000000000000000000000000000000..ff68f5dd30350476b97f9bb5056ac71ba1f8e954 Binary files /dev/null and "b/\346\236\227\344\275\231\345\200\251/images/Linuximg/1\346\237\245\347\234\213\345\215\225\347\255\276\347\233\256\345\275\225\344\270\213\346\226\207\344\273\266\345\244\271.png" differ diff --git "a/\346\236\227\344\275\231\345\200\251/images/Linuximg/2\346\237\245\347\234\213\345\275\223\345\211\215\350\267\257\345\276\204.png" "b/\346\236\227\344\275\231\345\200\251/images/Linuximg/2\346\237\245\347\234\213\345\275\223\345\211\215\350\267\257\345\276\204.png" new file mode 100644 index 0000000000000000000000000000000000000000..e847b1351ba6129dc416106e595787dc2b4b876c Binary files /dev/null and "b/\346\236\227\344\275\231\345\200\251/images/Linuximg/2\346\237\245\347\234\213\345\275\223\345\211\215\350\267\257\345\276\204.png" differ diff --git "a/\346\236\227\344\275\231\345\200\251/images/Linuximg/3\345\210\233\345\273\272\344\270\200\344\270\252\346\226\260\347\232\204\346\226\207\344\273\266\345\244\271.png" "b/\346\236\227\344\275\231\345\200\251/images/Linuximg/3\345\210\233\345\273\272\344\270\200\344\270\252\346\226\260\347\232\204\346\226\207\344\273\266\345\244\271.png" new file mode 100644 index 0000000000000000000000000000000000000000..a03440944d147daddfc8df6bf14ff6c29c02fb81 Binary files /dev/null and "b/\346\236\227\344\275\231\345\200\251/images/Linuximg/3\345\210\233\345\273\272\344\270\200\344\270\252\346\226\260\347\232\204\346\226\207\344\273\266\345\244\271.png" differ diff --git "a/\346\236\227\344\275\231\345\200\251/images/Linuximg/4\345\210\240\351\231\244\344\270\200\344\270\252\346\226\207\344\273\266\345\244\271.png" "b/\346\236\227\344\275\231\345\200\251/images/Linuximg/4\345\210\240\351\231\244\344\270\200\344\270\252\346\226\207\344\273\266\345\244\271.png" new file mode 100644 index 0000000000000000000000000000000000000000..20751430e0a309ba56fa440b8aab844ad1eb3362 Binary files /dev/null and "b/\346\236\227\344\275\231\345\200\251/images/Linuximg/4\345\210\240\351\231\244\344\270\200\344\270\252\346\226\207\344\273\266\345\244\271.png" differ diff --git "a/\346\236\227\344\275\231\345\200\251/images/Linuximg/nginx\351\205\215\347\275\256.png" "b/\346\236\227\344\275\231\345\200\251/images/Linuximg/nginx\351\205\215\347\275\256.png" new file mode 100644 index 0000000000000000000000000000000000000000..e9f90d89c4891f534ffcd4d42c3a5f5eccbdb023 Binary files /dev/null and "b/\346\236\227\344\275\231\345\200\251/images/Linuximg/nginx\351\205\215\347\275\256.png" differ diff --git "a/\346\236\227\344\275\231\345\200\251/images/MVC\347\273\203\344\271\240/1.png" "b/\346\236\227\344\275\231\345\200\251/images/MVC\347\273\203\344\271\240/1.png" new file mode 100644 index 0000000000000000000000000000000000000000..e793deb9a23eac1f298da7e1cce06e5638d4e831 Binary files /dev/null and "b/\346\236\227\344\275\231\345\200\251/images/MVC\347\273\203\344\271\240/1.png" differ diff --git "a/\346\236\227\344\275\231\345\200\251/images/MVC\347\273\203\344\271\240/2.png" "b/\346\236\227\344\275\231\345\200\251/images/MVC\347\273\203\344\271\240/2.png" new file mode 100644 index 0000000000000000000000000000000000000000..60e234ee9cb05804fa2c90e0de1a8f6b95eb2b01 Binary files /dev/null and "b/\346\236\227\344\275\231\345\200\251/images/MVC\347\273\203\344\271\240/2.png" differ diff --git "a/\346\236\227\344\275\231\345\200\251/images/\346\216\247\345\210\266\345\231\250\344\274\240\345\217\202/\345\244\232\344\270\252\345\200\274\344\274\240\345\217\2021.png" "b/\346\236\227\344\275\231\345\200\251/images/\346\216\247\345\210\266\345\231\250\344\274\240\345\217\202/\345\244\232\344\270\252\345\200\274\344\274\240\345\217\2021.png" new file mode 100644 index 0000000000000000000000000000000000000000..f5b8bd20961a3e97743cf004c753c49ba8e29c84 Binary files /dev/null and "b/\346\236\227\344\275\231\345\200\251/images/\346\216\247\345\210\266\345\231\250\344\274\240\345\217\202/\345\244\232\344\270\252\345\200\274\344\274\240\345\217\2021.png" differ diff --git "a/\346\236\227\344\275\231\345\200\251/images/\346\216\247\345\210\266\345\231\250\344\274\240\345\217\202/\345\244\232\344\270\252\345\200\274\344\274\240\345\217\2022.png" "b/\346\236\227\344\275\231\345\200\251/images/\346\216\247\345\210\266\345\231\250\344\274\240\345\217\202/\345\244\232\344\270\252\345\200\274\344\274\240\345\217\2022.png" new file mode 100644 index 0000000000000000000000000000000000000000..a78d7cfa05b571ea5c085308e94945b3b6548d5c Binary files /dev/null and "b/\346\236\227\344\275\231\345\200\251/images/\346\216\247\345\210\266\345\231\250\344\274\240\345\217\202/\345\244\232\344\270\252\345\200\274\344\274\240\345\217\2022.png" differ diff --git "a/\346\236\227\344\275\231\345\200\251/images/\346\216\247\345\210\266\345\231\250\344\274\240\345\217\202/\346\231\256\351\200\232\344\274\240\345\217\202.png" "b/\346\236\227\344\275\231\345\200\251/images/\346\216\247\345\210\266\345\231\250\344\274\240\345\217\202/\346\231\256\351\200\232\344\274\240\345\217\202.png" new file mode 100644 index 0000000000000000000000000000000000000000..d8d68ea51c2a7ced1087febb42001a8c1ce3a770 Binary files /dev/null and "b/\346\236\227\344\275\231\345\200\251/images/\346\216\247\345\210\266\345\231\250\344\274\240\345\217\202/\346\231\256\351\200\232\344\274\240\345\217\202.png" differ