diff --git "a/\351\222\237\345\230\211\345\246\256 - \345\277\253\346\215\267\346\226\271\345\274\217.lnk" "b/\351\222\237\345\230\211\345\246\256 - \345\277\253\346\215\267\346\226\271\345\274\217.lnk" new file mode 100644 index 0000000000000000000000000000000000000000..e8db49703fb327dbb39d5a9ae1f268cb9040305c Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256 - \345\277\253\346\215\267\346\226\271\345\274\217.lnk" differ diff --git "a/\351\222\237\345\230\211\345\246\256/20241119--Debian\351\203\250\347\275\262MVC.md" "b/\351\222\237\345\230\211\345\246\256/20241119--Debian\351\203\250\347\275\262MVC.md" new file mode 100644 index 0000000000000000000000000000000000000000..ad97ed02426df38afbf8ea172c712f5d2aaef2cc --- /dev/null +++ "b/\351\222\237\345\230\211\345\246\256/20241119--Debian\351\203\250\347\275\262MVC.md" @@ -0,0 +1,25 @@ +# 登陆服务器 +1. ssh root@域名 +2. 安装nginx apt install -y ninx +3. 测试 systemctl status nginx +4. 安装sdk +#(官网下载8.0版本) 更新软件源 apt update + +# 创建一个新的文件夹 +#命令:mkdir [文件夹名] + +查看当前目录下的文件和文件夹 +命令:ls +打包程序 +dotnet publish + +配置 Nginx 反向代理 +server { + listen 80; + server_name 域名或者IP; + + location / { + proxy_pass http://localhost:5000; + } +} +检查是否有语法错误:nginx -t 重新加载配置:nginx -s reload \ No newline at end of file diff --git "a/\351\222\237\345\230\211\345\246\256/20241121-MVC\346\216\247\345\210\266\345\231\250.md" "b/\351\222\237\345\230\211\345\246\256/20241121-MVC\346\216\247\345\210\266\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..0f6de8d4f932fe049d74dc5001bf1976ad358f4a --- /dev/null +++ "b/\351\222\237\345\230\211\345\246\256/20241121-MVC\346\216\247\345\210\266\345\231\250.md" @@ -0,0 +1,19 @@ +# 通过路由传递参数: +在控制器的Action中,你可以通过在路由模板中定义参数来接收参数。 + +# 通过表单传递参数: +当使用表单提交数据时,可以通过模型绑定将表单字段绑定到Action方法的参数。 + + + +# 通过FromBody传递参数: +对于使用HTTP POST或PUT方法提交的JSON或XML数据,可以使用[FromBody]属性来接收数据。 + + +# 通过查询字符串传递参数: +当参数通过URL的查询字符串传递时,你可以在Action方法中通过参数接收它们。 + + +# 通过Header传递参数: +可以通过[FromHeader]属性来获取HTTP请求头中的参数。 + diff --git "a/\351\222\237\345\230\211\345\246\256/202411222-\346\216\247\345\210\266\345\231\250.md" "b/\351\222\237\345\230\211\345\246\256/202411222-\346\216\247\345\210\266\345\231\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..3b679a015bb18a17a19f358c7e97cdc3ed8d6e08 --- /dev/null +++ "b/\351\222\237\345\230\211\345\246\256/202411222-\346\216\247\345\210\266\345\231\250.md" @@ -0,0 +1,8 @@ +控制器返回类型 +一般数据类型直接返回 如int、double、string、IEnumerable等数据类型 +IActionResult 一个接口,用于返回HTTP信息状态,如200、401、404等 +视图 +重定向 +ActionResult类型 将一般数据类型和HTTP状态信息混合使用 +特定于格式的操作结果:如JsonResult和ContentResult +POCO(普通旧CLR对象) \ No newline at end of file diff --git "a/\351\222\237\345\230\211\345\246\256/20241126-\346\255\243\345\217\215\344\273\243\347\220\206.md" "b/\351\222\237\345\230\211\345\246\256/20241126-\346\255\243\345\217\215\344\273\243\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..aa31b3ca81e6c235e35b5f9dfd42766c5f8fa834 --- /dev/null +++ "b/\351\222\237\345\230\211\345\246\256/20241126-\346\255\243\345\217\215\344\273\243\347\220\206.md" @@ -0,0 +1,10 @@ +# 正向代理 +正向代理是指客户端通过代理服务器来浏览互联网资源,客户端需要先将自己的请求发送给代理服务器,然后由代理服务器转发请求并获取资源返回给客户端。 + +# 反向代理 +反向代理则是指客户端通过代理服务器来浏览内部资源,客户端并不直接与目标服务器通信,而是通过代理服务器来获取所需的资源。 + + + * 从功能上来看,正向代理主要用于保护真实客户端的信息,避开浏览管控,保护客户端隐私等;而反向代理主要用于负载均衡、缓存加速、安全防护等方面。正向代理是为了隐蔽客户端,而反向代理是为了隐蔽服务器。 + +* 在工作原理上,正向代理是客户端主动选择代理服务器来浏览资源,代理服务器相当于客户端的中转站;而反向代理是客户端无感知地通过代理服务器浏览资源,代理服务器相当于目标服务器的代表。 diff --git "a/\351\222\237\345\230\211\345\246\256/20241128-\350\247\206\345\233\276.md" "b/\351\222\237\345\230\211\345\246\256/20241128-\350\247\206\345\233\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..f6ed4e86ef7b188cd3699939f506adaa5165b85f --- /dev/null +++ "b/\351\222\237\345\230\211\345\246\256/20241128-\350\247\206\345\233\276.md" @@ -0,0 +1,30 @@ +自动生成Action访问的URL地址 +asp-controller的值为Controller的名称,asp-action的值就是Action的名称,则自动根据路由配置生成访问该Action的地址。 + +如果需要使用get方式进行传值,则可以使用“asp-route-参数名称”这种格式的属性,如asp-route-uid=“99999”,则生成的html将会变成: + +视图定义属性 +定义: @{ 属性(键值对) } 调用: @键 + +接收view +@model 命名空间.类名 @Model.键 + +定位点 +``` + +``` + +作业: + +专业项练习-视图及其模板引擎 +* 渲染(展示)简单数据类型到视图 +![alt text](36feb1b985b18a98055560e8879669f.png) +* 渲染(展示)对象数据到视图 +![alt text](image.png) +* 渲染(展示)集合数据到视图 +![alt text](image-1.png) +* 渲染(展示)包含集合数据的对象数据到视图 +![alt text](image-2.png) +* 尝试构建如下图所示的经典CRUD列表 +![alt text](865dad004392fd97ea9b4639b85886e.png) + diff --git "a/\351\222\237\345\230\211\345\246\256/20241205-\350\241\250\345\215\225.md" "b/\351\222\237\345\230\211\345\246\256/20241205-\350\241\250\345\215\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..25eb4d6f8e07e99903132367cc01bc8153d022ee --- /dev/null +++ "b/\351\222\237\345\230\211\345\246\256/20241205-\350\241\250\345\215\225.md" @@ -0,0 +1,63 @@ + # Linq集成查询和Lambda表达式 + +``` +1. First() FirstOrDefault() 获取集合中(符合条件的)第一个 + + First() 这个如果没有获取到,则报错 + FirstOrDefault() 没有获取到,则返回Null + +2. Single() SingleOrDefault() 获取集合中(符合条件)的其中一个 + + Single() 这个如果没有获取到,则报错 + SingleOrDefault() 没有获取到,则返回Null + +3. Where() 获取集合中符合条件的元素,将它们筛选出来放入一个新的集合中返回 + + Where 查找符合条件的内容 + +4. Select() 返回指定内容 + + Select() 返回指定内容 Select(x=>new {x.Id}) + +``` + + + +# 专项练习-Linq集成查询和Lambda表达式 + +![alt text](image.png) +![alt text](image-1.png) +![alt text](image-2.png) +![alt text](image-3.png) +![alt text](image-4.png) +![alt text](image-5.png) +![alt text](image-6.png) +![alt text](image-7.png) +![alt text](image-8.png) +![alt text](image-9.png) + + + +# 综合练习-CRUD + +## 1.从零开始,利用MVC搭建一个CRUD经典界面, + +![alt text](image-10.png) + +## 完成新增(或者创建)的功能,如下图: + +![alt text](image-11.png) + +## 完成修改功能,如下图: + +![alt text](image-12.png) + + + + + + + + + + diff --git "a/\351\222\237\345\230\211\345\246\256/MVC\347\273\203\344\271\240.md" "b/\351\222\237\345\230\211\345\246\256/MVC\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..40bab47554cf278b00a4d1040e201ee49b214b10 --- /dev/null +++ "b/\351\222\237\345\230\211\345\246\256/MVC\347\273\203\344\271\240.md" @@ -0,0 +1,452 @@ +# Linux练习 +1.任务:尝试使用以下几种方式分别登录服务器,说明它们分别的注意事项,并说明它们之间的区别 + +ssh客户端 +![alt text](image.png) +tabby应用 +配置和连接 新建SSH连接 + +xShell +点击“新建”,新建会话 + +填写一个便于标识的名称 +填写服务器的公网IP +点击用户身份验证 填写服务器的用户名和密码,之后点击“确定” 填写服务器的用户名和密码,之后点击“确定” +putty +配置连接:用户需要输入需要连接的主机或IP地址、端口号等信息,并点击“save”按钮 选中之前保持好的配置,点击“open”打开 + + + + +2.任务:更新软件源,命令:apt update,并了解这一步的实际用处和意义 +![alt text](image-1.png) + +3.任务:更新软件和补丁,命令:apt upgrade -y,并了解这一步的实际用处意义 +![alt text](image-2.png) + +4.任务:熟悉并完成以下练习 +``` + 1.查看当前目录下的文件和文件夹----命令:ls +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121200146.png) + +2.查看当前路径----命令:pwd +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121200224.png) + +3.创建一个新的文件夹----命令:mkdir [文件夹名] +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121200316.png) + +4.删除一个文件夹----命令:rmdir [文件夹名](注意:只能删除空文件夹) +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121201225.png) + +5.移动或重命名文件/文件夹----命令:mv [原路径] [新路径] +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121200442.png) + +6.复制文件----命令:cp [源文件] [目标路径] +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121201103.png) + +7.删除文件----命令:rm [文件名] +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121200358.png) + +8.查看文件内容----命令:cat [文件名] +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121201312.png) + +9.分页查看文件内容----命令:less [文件名] +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121201353.png) + +10.查找文件----命令:find / -name [文件名] +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121201504.png) + +11.查看文件权限----命令:ls -l [文件或目录名] +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121201536.png) + +12.改变文件权限----命令:chmod [权限] [文件或目录名] +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121201742.png) + +13.改变文件所有者----命令:chown [新所有者] [文件或目录名] +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121201906.png) + +14.查看当前登录用户----命令:whoami +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121201933.png) + +15.查看系统运行时间和平均负载----命令:uptime +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121201954.png) + +16.查看磁盘使用情况----命令:df -h +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121202026.png) + +17.查看当前路径下的隐藏文件----命令:ls -a +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121202055.png) + +18.创建一个空文件----命令:touch [文件名] +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121202125.png) + +19.查看当前系统的内核版本----命令:uname -r +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121202222.png) + +20.查看网络连接状态----命令:ifconfig 或 ip addr +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121202250.png) + +21.安装一个软件包----命令:sudo apt-get install [软件包名] +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121202558.png) + +22.卸载一个软件包----命令:sudo apt-get remove [软件包名] +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121202623.png) + +23.更新软件包列表----命令:sudo apt-get update +![](https://gitee.com/shen-yulin20051127/imgs/raw/master/imgs/20241121202459.png) + +``` + + +5.在服务器上安装SDK环境 +![alt text](image-3.png) + +参考资料:https://dot.net +# MVC练习 +1、创建一个控制台项目 +dotnet new console + +2、创建一个控制项目,项目名称Blog +dotnet new console -n Blog + +3、创建一个控制台项目,输出到Blog目录 +dotnet new console -o Blog + +4、创建一个MVC项目,指定项目名称 +dotnet new mvc -n Blog + +5、创建一个MVC项目,指定输出目录 +dotnet new mvc -o BlogDir + +6、创建一个带解决方案,其下有一个MVC项目,3个类库项目的“综合项目” +dotnet new sln -n Solution + +MVC项目: dotnet new mvc -n Blog + +类库: dotnet new classlib -n ClassLib1 dotnet new classlib -n ClassLib2 dotnet new classlib -n ClassLib3 + +7、创建一个项目,在默认控制器(Home)下,新增一个Action方法,名为Ok,同时为其创建对应视图以显示这个视图 +创建项目 dotnet new mvc -n Blog + + ``` + public IActionResult Ok() + { + return View(); + } + ``` + +创建对应视图 Views/Home/Ok.cshtml + +![alt text](image-1.png) + +8、创建一个项目,创建一个新的控制器,名为Blogs,新的控制器拥有一个名为Index的Action,该方法返回一个视图,视图显示“神级预判” + +![alt text](image-2.png) +``` + public class BlogsController : Controller + { + public IActionResult Index() + { + return View(); + } + } + ``` + ![alt text](image.png) +创建对应视图Views/Blogs/Index.cshtml +``` +

神级预判

+ +``` +9、给第8题的新控制,添加一个新的Action,名为Music,不接受任何参数,并返回对应的视图,视图显示“顶级打野” + +``` + public IActionResult Music() + { + return View(); + } +``` +![alt text](image-3.png) +创建对应视图Views/Blogs/Music.cshtml +``` +顶级打野 +``` +10、给第8题的新控制器,新增一个Action,名为List,不接受任何参数,并返回对应视图,视图显示一个经典CRUD界面 +``` + public IActionResult List() + { + return View(); + } + ``` +创建对应视图Views/Blogs/List.cshtml + +11、新增一个控制器,名为Products,该控制器具有一个名为Edit的Action,这个Action接受一个int类型的参数id,显示这个id +``` +public class ProductsController : Controller +{ + public IActionResult Edit(int id) + { + ViewBag.Id = id; + return View(); + } +} +``` +创建对应视图Views/Products/Edit.cshtml +``` +

Edit Product

+

编辑的产品ID:@ViewBag.Id

+ +``` +12、在11题的新控制器中,新增一个名为Create的Action,该Action接受一个类型为Students(有姓名、年龄、体长属性)的参数,并展示该参数的姓名属性 + +``` +public class ProductsController : Controller{ + public IActionResult Create(){ + var pro=new ProductStudent{ + Name="宋颂", + Age="20", + Tall="186" + }; + return View(pro); +} + } + public class ProductStudent{ + public string Name{get;set;}=null!; + public string Age{get;set;}=null!; + public string Tall{get;set;}=null!; + + } + + ``` + +# 专项练习-控制器传参 + + ``` +1、简单参数传递 在一个叫Blog控制器中,定义一个叫Index的Action,并且传递一个int类型的值,id为变量名 + + + public class BlogController : Controller + { + public IActionResult Index(int id) + { + return Content(id.ToString) + } + + } + + ``` + + +2、简单参数传递 在一个叫Blog控制器中,定义一个叫Index_2的Action,并且传递一个string类型的值,id为变量名 + + + ``` +public class BlogController : Controller + { + + public IActionResult Index_2(string id) + { + return Content(id) + } + + } + + ``` +3、简单参数传递 在一个叫Blog控制器中,定义一个叫Index_3的Action,并且传递一个string类型的值,name为变量名 + + + ``` +public class BlogController : Controller + { + public IActionResult Index_3(string name) + { + return Content(name) + } + } + + + ``` +4、复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create的Action,并且传递一个BlogCreateDto类型的值,blogCreateDto为变量名 +PS BlogCreateDto类型具有Title、Author、Content自动属性 + + + ``` + +public class BlogController : Controller + { + [HttpPost] + public IActionResult Create([FromBody] BlogCreateDto blogCreateDto){ + + return Content(blogCreateDto.Title) + } + + public class BlogCreateDto{ + + //BlogCreateDto类型具有Title、Author、Content自动属性 + 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为变量名 +PS Products类型具有Name、Price、Stock自动属性 + + + ``` + + public class BlogController : Controller + { + [HttpPost] + public IActionResult Create([FromBody] Products productCreateDto){ + return Content(blogCreateDto.Title) + } + //PS Products类型具有Name、Price、Stock自动属性 + 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为变量名 +PS Students类型具有StudentName、Sex、Age自动属性 + + + ``` + + public class BlogController : Controller + { + 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!; + } + } + + + ``` + + # 专项练习-基础能力 + +1、生成一个随机整数,范围[0,100],注意是否包含 + ``` +Random random = new Random(); +int number1 = random.Next(0, 101); + ``` +2、生成一个随机整数,范围(0,100],注意是否包含 + ``` +int number2 = random.Next(1, 100); + ``` +3、生成10个随机整数,范围[5,80],注意是否包含 + ``` +int[] numbers3 = new int[10]; +for (int i = 0; i < numbers3.Length; i++) +{ + numbers3[i] = random.Next(5, 81); +} + ``` +4、定义一个字符串,字符串中有100个中文字符,需要从中随机取1个字符串 + ``` +string chineseCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; +Random random = new Random(); +string oneChineseCharacter = chineseCharacters[random.Next(chineseCharacters.Length)]; + ``` +5、定义一个字符串,字符串中有100个中文字符,需要从中随机取5-50个字符,组成新的字符 + ``` +int length = random.Next(5, 51); +StringBuilder sb = new StringBuilder(); +for (int i = 0; i < length; i++) +{ + sb.Append(chineseCharacters[random.Next(chineseCharacters.Length)]); +} +string fiveToFiftyChineseCharacters = sb.ToString(); + ``` +6、定义2个字符串,第一个字符串中放百家姓,第二个字符串中放中文字符,要求从第一个字符串随机取得一个姓,再从第二个字符串中随机获得1到2个字符组成新字符串,和第一个字符串取得的姓组成一个姓名 + ``` +string surnames = "刘赵钱孙李周吴郑王冯陈卫蒋沈韩杨"; +string givenNames = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; +int surnameIndex = random.Next(surnames.Length); +string surname = surnames[surnameIndex].ToString(); +int givenNameLength = random.Next(1, 3); +StringBuilder givenNameSb = new StringBuilder(); +for (int i = 0; i < givenNameLength; i++) +{ + givenNameSb.Append(givenNames[random.Next(givenNames.Length)]); +} +string givenName = givenNameSb.ToString(); +string name = surname + givenName; + ``` +7、利用以上方法,随机生成100个BlogCreateDto类型(有Title、Author、Content属性)的对象,其中的内容都是随机生成且长度不定,并将其渲染到视图 + ``` +public class BlogCreateDto +{ + public string Title { get; set; } + public string Author { get; set; } + public string Content { get; set; } +} + +List blogs = new List(); +for (int i = 0; i < 100; i++) +{ + BlogCreateDto blog = new BlogCreateDto + { + Title = GenerateRandomString(10, 50), // 随机标题长度10-50 + Author = name, // 使用上面生成的姓名 + Content = GenerateRandomString(100, 1000) // 随机内容长度100-1000 + }; + blogs.Add(blog); +} + +string GenerateRandomString(int minLength, int maxLength) +{ + StringBuilder contentSb = new StringBuilder(); + int contentLength = random.Next(minLength, maxLength + 1); + for (int i = 0; i < contentLength; i++) + { + contentSb.Append(chineseCharacters[random.Next(chineseCharacters.Length)]); + } + return contentSb.ToString(); +} + ``` + + # 专项练习-控制器返回值 + 1、渲染简单数据到页面 + ![alt text](88c6bce7189d004e4998bd3d2a4bbf2.png) + +2.渲染复杂数据到页面 + ![alt text](88c6bce7189d004e4998bd3d2a4bbf2.png) + + 3.渲染集合数据到页面 + ``` + public IActionResult CollectionView() +{ + CollectionViewModel model = new CollectionViewModel + { + Items = new List { "Item1", "Item2", "Item3" } + }; + return View(model); +} + +``` +``` + +@model YourNamespace.CollectionViewModel + +
    + @foreach (var item in Model.Items) + { +
  • @item
  • + } +
+ +``` \ No newline at end of file diff --git "a/\351\222\237\345\230\211\345\246\256/image-1.png" "b/\351\222\237\345\230\211\345\246\256/image-1.png" new file mode 100644 index 0000000000000000000000000000000000000000..d57eadd6dcc73f8452ef57a9f92eb06e865c05cf Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/image-1.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/image-10.png" "b/\351\222\237\345\230\211\345\246\256/image-10.png" new file mode 100644 index 0000000000000000000000000000000000000000..f55e7f7f3e5babe877c6f1247dab977b96dff9c3 Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/image-10.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/image-11.png" "b/\351\222\237\345\230\211\345\246\256/image-11.png" new file mode 100644 index 0000000000000000000000000000000000000000..46f225486243afa567f83c36825a60ea06e6f433 Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/image-11.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/image-12.png" "b/\351\222\237\345\230\211\345\246\256/image-12.png" new file mode 100644 index 0000000000000000000000000000000000000000..77151fffcf40ebb6e27acf75bf8040b61c04c54c Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/image-12.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/image-2.png" "b/\351\222\237\345\230\211\345\246\256/image-2.png" new file mode 100644 index 0000000000000000000000000000000000000000..4fff81b8561aea540e5e02457949160e1d3e9f16 Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/image-2.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/image-3.png" "b/\351\222\237\345\230\211\345\246\256/image-3.png" new file mode 100644 index 0000000000000000000000000000000000000000..53d44e80f1061f3529de78ab3ba75953e4626f47 Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/image-3.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/image-4.png" "b/\351\222\237\345\230\211\345\246\256/image-4.png" new file mode 100644 index 0000000000000000000000000000000000000000..47ec0ad06610e4d5eab6a75086cb0a07ff3a4caf Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/image-4.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/image-5.png" "b/\351\222\237\345\230\211\345\246\256/image-5.png" new file mode 100644 index 0000000000000000000000000000000000000000..da16636638464fe619fe66e4374b9c49f0590e9b Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/image-5.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/image-6.png" "b/\351\222\237\345\230\211\345\246\256/image-6.png" new file mode 100644 index 0000000000000000000000000000000000000000..d4e86cce6e5654c6c8f811e7483a43efc49b53da Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/image-6.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/image-7.png" "b/\351\222\237\345\230\211\345\246\256/image-7.png" new file mode 100644 index 0000000000000000000000000000000000000000..dddb4ca0ba18840883fa1ce04389f2f833a2e14b Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/image-7.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/image-8.png" "b/\351\222\237\345\230\211\345\246\256/image-8.png" new file mode 100644 index 0000000000000000000000000000000000000000..ff2673a69fc4dc6a5a61fbbc353704798db6082b Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/image-8.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/image-9.png" "b/\351\222\237\345\230\211\345\246\256/image-9.png" new file mode 100644 index 0000000000000000000000000000000000000000..5265459e2b58532fecbb97d77bad0a5f502e7cfd Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/image-9.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/image.png" "b/\351\222\237\345\230\211\345\246\256/image.png" index b17dd1c19d245de73c3e457c4025aedf72ad928f..a623159170a2bf6fb9bef23e882724db0b7c999a 100644 Binary files "a/\351\222\237\345\230\211\345\246\256/image.png" and "b/\351\222\237\345\230\211\345\246\256/image.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/img/88c6bce7189d004e4998bd3d2a4bbf2.png" "b/\351\222\237\345\230\211\345\246\256/img/88c6bce7189d004e4998bd3d2a4bbf2.png" new file mode 100644 index 0000000000000000000000000000000000000000..709b8c315a681d97f374c03febfa0132c9810d3a Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/img/88c6bce7189d004e4998bd3d2a4bbf2.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/img/image-1.png" "b/\351\222\237\345\230\211\345\246\256/img/image-1.png" new file mode 100644 index 0000000000000000000000000000000000000000..54b050d78ec8652699b709da197b148f41e9e701 Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/img/image-1.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/img/image-2.png" "b/\351\222\237\345\230\211\345\246\256/img/image-2.png" new file mode 100644 index 0000000000000000000000000000000000000000..9f72eaf3dd13ef5fe71b65f42f9ad486e9e2973c Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/img/image-2.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/img/image-3.png" "b/\351\222\237\345\230\211\345\246\256/img/image-3.png" new file mode 100644 index 0000000000000000000000000000000000000000..c07759a942e7c1093caf37a9bf8976b983f6827e Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/img/image-3.png" differ diff --git "a/\351\222\237\345\230\211\345\246\256/img/image.png" "b/\351\222\237\345\230\211\345\246\256/img/image.png" new file mode 100644 index 0000000000000000000000000000000000000000..c7c9335d31724c673fe93dd4421a183eb1002cf4 Binary files /dev/null and "b/\351\222\237\345\230\211\345\246\256/img/image.png" differ