From 62f6afba06889c0269e5be0e66d8262279dafad1 Mon Sep 17 00:00:00 2001
From: guomengyuan <2654196850@qq.com>
Date: Thu, 14 Nov 2024 18:48:29 +0800
Subject: [PATCH 1/6] tj
---
.../20241114-dotnet\346\240\267\345\274\217.md" | 11 +++++++++++
1 file changed, 11 insertions(+)
create mode 100644 "\351\203\255\346\242\246\345\252\233/20241114-dotnet\346\240\267\345\274\217.md"
diff --git "a/\351\203\255\346\242\246\345\252\233/20241114-dotnet\346\240\267\345\274\217.md" "b/\351\203\255\346\242\246\345\252\233/20241114-dotnet\346\240\267\345\274\217.md"
new file mode 100644
index 0000000..b386506
--- /dev/null
+++ "b/\351\203\255\346\242\246\345\252\233/20241114-dotnet\346\240\267\345\274\217.md"
@@ -0,0 +1,11 @@
+1、dotnet new mvc -o 名
+Views->Home->项目名.cshtml
+Controllers引用项目方法名
+2、wwwroot->css->建项目名.css->写样式
+3、.cshtml里用link引用样式 href="~/css/项目名.css"
+4、dotnet run --project 名
+5、ctrl+c 结束任务
+
+
+
+
\ No newline at end of file
--
Gitee
From 18903f435a73b838c41765c4c4319101aec750db Mon Sep 17 00:00:00 2001
From: guomengyuan <2654196850@qq.com>
Date: Sun, 24 Nov 2024 20:41:32 +0800
Subject: [PATCH 2/6] tj
---
.../20241117-\351\203\250\347\275\262.md" | 11 +
...9-\346\216\247\345\210\266\345\231\250.md" | 10 +
.../20241121-\344\274\240\345\217\202.md" | 58 ++++
.../20241122-\344\275\234\344\270\232.md" | 285 ++++++++++++++++++
.../20241122-\350\247\206\345\233\276.md" | 89 ++++++
5 files changed, 453 insertions(+)
create mode 100644 "\351\203\255\346\242\246\345\252\233/20241117-\351\203\250\347\275\262.md"
create mode 100644 "\351\203\255\346\242\246\345\252\233/20241119-\346\216\247\345\210\266\345\231\250.md"
create mode 100644 "\351\203\255\346\242\246\345\252\233/20241121-\344\274\240\345\217\202.md"
create mode 100644 "\351\203\255\346\242\246\345\252\233/20241122-\344\275\234\344\270\232.md"
create mode 100644 "\351\203\255\346\242\246\345\252\233/20241122-\350\247\206\345\233\276.md"
diff --git "a/\351\203\255\346\242\246\345\252\233/20241117-\351\203\250\347\275\262.md" "b/\351\203\255\346\242\246\345\252\233/20241117-\351\203\250\347\275\262.md"
new file mode 100644
index 0000000..0b60e93
--- /dev/null
+++ "b/\351\203\255\346\242\246\345\252\233/20241117-\351\203\250\347\275\262.md"
@@ -0,0 +1,11 @@
+##### 将一个Asp.Net Core MVC部署分几步
+```
+1、第一步、将程序扔到服务器
+a、打包程序 dotnet publish(打包的程序位于如下文件夹:bin/Release/net8.0/publish)
+
+b、使用一些工具将打包好的程序传到服务器,比如scp命令
+```
+```
+2、第二步、安装dotnet运行时
+我们在哪里安装sdk或者运行 答案是Debian这个Linux的发行版本
+```
diff --git "a/\351\203\255\346\242\246\345\252\233/20241119-\346\216\247\345\210\266\345\231\250.md" "b/\351\203\255\346\242\246\345\252\233/20241119-\346\216\247\345\210\266\345\231\250.md"
new file mode 100644
index 0000000..b348d4a
--- /dev/null
+++ "b/\351\203\255\346\242\246\345\252\233/20241119-\346\216\247\345\210\266\345\231\250.md"
@@ -0,0 +1,10 @@
+```
+using Microsoft.AspNetCore.Mvc
+namespace MVC项目名.Controlers;
+public class 类名 : Controller
+{
+ public 返回值 方法名(参数){
+ return 值;
+ }
+}
+```
\ No newline at end of file
diff --git "a/\351\203\255\346\242\246\345\252\233/20241121-\344\274\240\345\217\202.md" "b/\351\203\255\346\242\246\345\252\233/20241121-\344\274\240\345\217\202.md"
new file mode 100644
index 0000000..0d7747d
--- /dev/null
+++ "b/\351\203\255\346\242\246\345\252\233/20241121-\344\274\240\345\217\202.md"
@@ -0,0 +1,58 @@
+### 1. 从路由数据获取参数
+
+```
+路由数据通常来自 URL 路径的一部分。
+
+[HttpGet("{id}")]
+public IActionResult GetById(int id)
+{
+ // 使用 id 参数
+ return Ok($"You requested item with ID: {id}");
+}
+```
+
+### 2. 从查询字符串获取参数
+
+```
+查询字符串参数是从 URL 的 ? 后面的部分获取的
+
+[HttpGet]
+public IActionResult Search(string query)
+{
+ // 使用 query 参数
+ return Ok($"You searched for: {query}");
+}
+```
+
+### 3. 从表单数据获取参数
+
+```
+表单数据通常通过 POST 请求发送,并包含在请求体中
+
+[HttpPost]
+public IActionResult SubmitForm(string name, int age)
+{
+ // 使用 name 和 age 参数
+ return Ok($"Name: {name}, Age: {age}");
+}
+```
+
+### 4. 从请求体获取参数(复杂类型)
+
+```
+对于复杂的对象类型,ASP.NET Core MVC 会尝试从请求体中反序列化 JSON 或 XML 数据。
+
+public class Person
+{
+ public string Name { get; set; }
+ public int Age { get; set; }
+}
+
+[HttpPost]
+public IActionResult CreatePerson([FromBody] Person person)
+{
+ // 使用 person 对象
+ return Ok($"Created person: {person.Name}, Age: {person.Age}");
+}
+```
+
diff --git "a/\351\203\255\346\242\246\345\252\233/20241122-\344\275\234\344\270\232.md" "b/\351\203\255\346\242\246\345\252\233/20241122-\344\275\234\344\270\232.md"
new file mode 100644
index 0000000..29e3dc3
--- /dev/null
+++ "b/\351\203\255\346\242\246\345\252\233/20241122-\344\275\234\344\270\232.md"
@@ -0,0 +1,285 @@
+#### Linux练习
+
+1.任务
+
+```
+一、使用SSH客户端、Tabby应用、Xshell和Putty登录服务器
+SSH:注意事项:
+1、确保本地计算机和远程服务器都安装了SSH客户端和服务器。
+2、使用SSH登录命令时,格式通常为ssh用户名@服务器地址,然后输入密码进行登录。
+3、注意密码的保密性,避免在公共场合输入密码或在他人面前泄露密码。
+4、确保网络连接的稳定性,以便成功登录并执行远程命令。
+5、定期检查SSH连接的安全性,确保使用了最新的安全协议和加密算法,还需要注意保护私钥文件的安全,避免私钥泄露。
+
+
+Tabby:注意事项:
+1、下载安装Tabby应用,并根据自己的系统选择适合的版本。
+2、打开Tabby应用后,点击右上角的齿轮图标进入设置菜单。
+3、在设置菜单中选择“配置和连接”,然后添加新配置。
+4、选择SSH连接,并输入远程服务器的相关信息,如IP地址、端口、用户名等。
+5、保存配置后,点击运行按钮即可连接远程服务器。
+6、如果是首次连接,可能会要求输入远程服务器的登录密码。
+
+Xshell:注意事项:
+1、在电脑上安装好Xshell软件。
+2、打开Xshell软件后,点击“新建”按钮或选择“文件”菜单中的“新建会话”选项。
+3、在弹出的“新建连接”窗口中,输入连接名称、服务器IP地址或域名、端口号(默认22)、用户名和密码等信息。
+4、选择合适的认证方法,如密码认证或密钥认证。
+5、配置完成后,点击“确定”按钮即可连接服务器。
+6、如果连接成功,会显示服务器的登录提示信息,要求输入密码进行登录。
+
+Putty:注意事项:
+1、下载并安装最新版本的Putty软件。
+2、打开Putty软件后,在“Session”配置窗口中输入远程服务器的IP地址或域名、端口号(默认22)以及连接名称。
+3、在“Connection type”中选择“SSH”作为连接方式。
+4、配置完成后,点击“Save”按钮保存配置信息。
+5、点击“Open”按钮即可连接远程服务器。
+6、如果是首次连接,可能会弹出安全警告窗口,点击“是”即可继续连接。
+7、连接成功后,在命令行窗口中输入用户名和密码进行登录。
+
+| 工具 | SSH客户端 | Tabby应用 |Xshell | Putty |
+| --- | --- | --- | --- | --- |
+| 安全性 | 高(支持SSH协议) | 高(支持SSH协议) |高(支持SSH协议) | 高 |
+| 界面美观 | 一般(取决于终端模拟器) | 高 |高 | 一般(操作简单直观) |
+| 功能丰富性 | 基础功能(命令行操作) | 丰富 |丰富 | 简单(基本操作) |
+| 跨平台性 |一般(需安装对应版本的SSH客户端) | 高 |高 | 一般(主要支持Windows) |
+
+
+```
+
+
+
+2。任务更新软件源,命令:apt update,并了解这一步的实际用处和意义
+
+
+
+3.更新软件和补丁,命令:apt upgrade -y,并了解这一步的实际用处意义
+
+
+
+4.任务
+
+1)查看当前目录下的文件和文件夹
+
+
+
+2)查看当前路径
+
+
+
+3)创建一个新的文件夹
+
+
+
+4).删除一个文件夹
+
+
+
+5)移动或重命名文件/文件夹
+
+
+
+6)复制文件
+
+
+
+7)删除文件
+
+
+
+8)查看文件内容
+
+
+
+9)分页查看文件内容
+
+
+
+10)查找文件
+
+
+
+11)查看文件权限
+
+
+
+12)改变文件权限
+
+
+
+13)改变文件所有者
+
+
+
+14)查看当前登录用户
+
+
+
+15)查看系统运行时间和平均负载
+
+
+
+16).查看磁盘使用情况
+
+
+
+17)查看当前路径下的隐藏文件
+
+
+
+18)创建一个空文件
+
+
+
+19)查看当前系统的内核版本
+
+
+
+20)查看网络连接状态
+
+
+
+21)安装一个软件包
+
+
+
+22)卸载一个软件包
+
+
+
+23)更新软件包列表
+
+
+
+
+
+5.在服务器上安装SDK环境
+
+
+
+6.使用nginx部署10个静态网站,要求不同域名,不同内容
+
+
+
+
+
+
+
+
+
+1
+
+2
+
+3
+
+4
+
+5
+
+6
+
+7
+
+8
+
+9
+
+10
+
+7.使用nginx反向代理,部署简单的MVC项目
+
+
+
+#### MVC作业
+
+1
+
+```
+1.新建解决方案 dotnet new sln -n "解决方案名称"(这会生成一个 .sln 文件,用于管理多个项目)
+2.创建控制台项目 dotnet new console -n "项目名称" (用于指定项目的名称)
+项目名称会与项目文件夹的名称相匹配
+```
+
+2
+
+```
+dotnet new console -o Blog
+```
+
+3
+
+```
+cd .\Blog\
+```
+
+4
+
+```
+dotnet new mvc -o Blog
+```
+
+5
+
+```
+cd .\Blog\
+```
+
+6
+
+```
+dotnet new sln -n Solution
+dotnet new mvc -n Project
+dotnet sln Solution.sln add Project/Project.csproj
+dotnet new classlib -n Library1
+dotnet new classlib -n Library2
+dotnet new classlib -n Library3
+dotnet sln Solution.sln add Library1/Library1.csproj
+dotnet sln Solution.sln add Library2/Library2.csproj
+dotnet sln Solution.sln add Library3/Library3.csproj
+```
+
+
+
+
+
+7
+
+
+
+
+
+
+
+8
+
+
+
+
+
+
+
+9
+
+
+
+10
+
+
+
+
+
+11
+
+
+
+
+
+12
+
+
+
+
+
+
+
diff --git "a/\351\203\255\346\242\246\345\252\233/20241122-\350\247\206\345\233\276.md" "b/\351\203\255\346\242\246\345\252\233/20241122-\350\247\206\345\233\276.md"
new file mode 100644
index 0000000..7e4f813
--- /dev/null
+++ "b/\351\203\255\346\242\246\345\252\233/20241122-\350\247\206\345\233\276.md"
@@ -0,0 +1,89 @@
+* 控制器返回类型
+ * 一般数据类型 直接返回如int、double、string、IEnumerable等数据类型
+ * IActionResult类型 一个接口,用于返回HTTP状态,如200、401、404、500等
+ * 视图
+ * 重定向
+
+ ```
+ 视图(View)是负责渲染 HTML 响应给客户端的组件。视图通常与控制器(Controller)一起工作,控制器处理请求并准备数据,然后选择一个视图来呈现这些数据。视图通常存储在项目的 Views 文件夹中,并按照控制器名称组织在不同的子文件夹里。
+ ```
+
+ ####
+
+
+
+
+
+ #### 专项练习-控制器传参
+
+ 1.
+
+ 
+
+ 2.
+
+ 
+
+ 3.
+
+ 
+
+ 4.
+
+ 
+
+ 5.
+
+ 
+
+ 6.
+
+ 
+
+ ## 专项练习-基础能力
+
+ 1.
+
+ 
+
+ 2.
+
+ 
+
+ 3.
+
+ 
+
+ 4.
+
+ 
+
+ 5.
+
+ 
+
+ 6.
+
+ 
+
+ 7.
+
+ 
+
+
+
+ #### 专项练习-控制器返回值
+
+ 1.
+
+
+
+
+
+2
+
+
+
+3.
+
+
\ No newline at end of file
--
Gitee
From c9519f5007fdb44d8751ce5bc1c7dd572a7888ea Mon Sep 17 00:00:00 2001
From: guomengyuan <2654196850@qq.com>
Date: Sun, 24 Nov 2024 20:59:23 +0800
Subject: [PATCH 3/6] tj
---
.../20241122-\344\275\234\344\270\232.md" | 32 +++++++++----------
.../20241122-\350\247\206\345\233\276.md" | 30 ++++++++---------
2 files changed, 31 insertions(+), 31 deletions(-)
diff --git "a/\351\203\255\346\242\246\345\252\233/20241122-\344\275\234\344\270\232.md" "b/\351\203\255\346\242\246\345\252\233/20241122-\344\275\234\344\270\232.md"
index 29e3dc3..7062599 100644
--- "a/\351\203\255\346\242\246\345\252\233/20241122-\344\275\234\344\270\232.md"
+++ "b/\351\203\255\346\242\246\345\252\233/20241122-\344\275\234\344\270\232.md"
@@ -155,41 +155,41 @@ Putty:注意事项:
5.在服务器上安装SDK环境
-
+
6.使用nginx部署10个静态网站,要求不同域名,不同内容
-
+
-
+
-
+
-
+
-1
+1
-2
+2
-3
+3
-4
+4
-5
+5
-6
+6
-7
+7
-8
+8
-9
+9
-10
+10
7.使用nginx反向代理,部署简单的MVC项目
-
+
#### MVC作业
diff --git "a/\351\203\255\346\242\246\345\252\233/20241122-\350\247\206\345\233\276.md" "b/\351\203\255\346\242\246\345\252\233/20241122-\350\247\206\345\233\276.md"
index 7e4f813..61d5e31 100644
--- "a/\351\203\255\346\242\246\345\252\233/20241122-\350\247\206\345\233\276.md"
+++ "b/\351\203\255\346\242\246\345\252\233/20241122-\350\247\206\345\233\276.md"
@@ -18,45 +18,45 @@
1.
- 
+ 
2.
- 
+ 
3.
- 
+ 
4.
- 
+ 
5.
- 
+ 
6.
- 
+ 
## 专项练习-基础能力
1.
- 
+ 
2.
- 
+ 
3.
- 
+ 
4.
- 
+ 
5.
@@ -64,11 +64,11 @@
6.
- 
+ 
7.
- 
+ 
@@ -76,14 +76,14 @@
1.
-
+
2
-
+
3.
-
\ No newline at end of file
+
\ No newline at end of file
--
Gitee
From 4b6a1522b2f9255955fb913bb56a191b816b6944 Mon Sep 17 00:00:00 2001
From: guomengyuan <2654196850@qq.com>
Date: Sun, 1 Dec 2024 15:56:38 +0800
Subject: [PATCH 4/6] tj
---
.../20241128-\346\270\262\346\237\223.md" | 27 +++++++++++++++++++
1 file changed, 27 insertions(+)
create mode 100644 "\351\203\255\346\242\246\345\252\233/20241128-\346\270\262\346\237\223.md"
diff --git "a/\351\203\255\346\242\246\345\252\233/20241128-\346\270\262\346\237\223.md" "b/\351\203\255\346\242\246\345\252\233/20241128-\346\270\262\346\237\223.md"
new file mode 100644
index 0000000..400b971
--- /dev/null
+++ "b/\351\203\255\346\242\246\345\252\233/20241128-\346\270\262\346\237\223.md"
@@ -0,0 +1,27 @@
+第一题
+
+
+
+第二题
+
+
+
+第三题
+
+
+
+第四题
+
+
+
+第五题
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
--
Gitee
From 6ee5c908b0259b5f37f981452d0a3ba3462e9541 Mon Sep 17 00:00:00 2001
From: guomengyuan <2654196850@qq.com>
Date: Sun, 1 Dec 2024 21:02:20 +0800
Subject: [PATCH 5/6] tj
---
...26-\346\255\243\345\220\221\344\273\243\347\220\206.md" | 7 +++++++
.../20241128-\346\270\262\346\237\223.md" | 4 ++++
2 files changed, 11 insertions(+)
create mode 100644 "\351\203\255\346\242\246\345\252\233/20241126-\346\255\243\345\220\221\344\273\243\347\220\206.md"
diff --git "a/\351\203\255\346\242\246\345\252\233/20241126-\346\255\243\345\220\221\344\273\243\347\220\206.md" "b/\351\203\255\346\242\246\345\252\233/20241126-\346\255\243\345\220\221\344\273\243\347\220\206.md"
new file mode 100644
index 0000000..291ea07
--- /dev/null
+++ "b/\351\203\255\346\242\246\345\252\233/20241126-\346\255\243\345\220\221\344\273\243\347\220\206.md"
@@ -0,0 +1,7 @@
+# 正向代理
+
+pc ————》 由于一些原因不能直接访问web服务器(例如:隐藏ip等原因) ——X——》 web服务器 pc ——通过找一个——》 代理服务器 ——让代理服务器去访问——》 web服务器
+
+# 反向代理
+
+pc ——X——》 隐藏的web服务器 web服务器 ————》 设置一个 ————》 代理服务器 pc端 ————》 访问 ————》 代理服务器(只能通过代理服务器去访问) ————》 访问 ————》 web服务器
\ No newline at end of file
diff --git "a/\351\203\255\346\242\246\345\252\233/20241128-\346\270\262\346\237\223.md" "b/\351\203\255\346\242\246\345\252\233/20241128-\346\270\262\346\237\223.md"
index 400b971..9a2a2e8 100644
--- "a/\351\203\255\346\242\246\345\252\233/20241128-\346\270\262\346\237\223.md"
+++ "b/\351\203\255\346\242\246\345\252\233/20241128-\346\270\262\346\237\223.md"
@@ -1,3 +1,7 @@
+定义: @{ 属性(键值对) } 调用: @键
+
+
+
第一题

--
Gitee
From c27e965e8e21f6c0cdcd48f6ed39c4fcff8b822c Mon Sep 17 00:00:00 2001
From: guomengyuan <2654196850@qq.com>
Date: Sun, 8 Dec 2024 14:32:48 +0800
Subject: [PATCH 6/6] tj
---
.../20241203-\350\241\250\345\215\225.md" | 12 +++++
...60\345\242\236\345\210\240\351\231\244.md" | 45 +++++++++++++++++
.../20241206-linq\347\273\203\344\271\240.md" | 49 +++++++++++++++++++
3 files changed, 106 insertions(+)
create mode 100644 "\351\203\255\346\242\246\345\252\233/20241203-\350\241\250\345\215\225.md"
create mode 100644 "\351\203\255\346\242\246\345\252\233/20241205-\346\226\260\345\242\236\345\210\240\351\231\244.md"
create mode 100644 "\351\203\255\346\242\246\345\252\233/20241206-linq\347\273\203\344\271\240.md"
diff --git "a/\351\203\255\346\242\246\345\252\233/20241203-\350\241\250\345\215\225.md" "b/\351\203\255\346\242\246\345\252\233/20241203-\350\241\250\345\215\225.md"
new file mode 100644
index 0000000..4bdcb96
--- /dev/null
+++ "b/\351\203\255\346\242\246\345\252\233/20241203-\350\241\250\345\215\225.md"
@@ -0,0 +1,12 @@
+| [asp-controller](https://learn.microsoft.com/zh-cn/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper?view=aspnetcore-9.0#asp-controller) | 控制器的名称。 |
+| ------------------------------------------------------------ | :---------------------------------------------- |
+| [asp-action](https://learn.microsoft.com/zh-cn/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper?view=aspnetcore-9.0#asp-action) | 操作方法的名称。 |
+| [asp-area](https://learn.microsoft.com/zh-cn/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper?view=aspnetcore-9.0#asp-area) | 区域名称。 |
+| [asp-page](https://learn.microsoft.com/zh-cn/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper?view=aspnetcore-9.0#asp-page) | Razor 页面的名称。 |
+| [asp-page-handler](https://learn.microsoft.com/zh-cn/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper?view=aspnetcore-9.0#asp-page-handler) | Razor 页面处理程序的名称。 |
+| [asp-route](https://learn.microsoft.com/zh-cn/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper?view=aspnetcore-9.0#asp-route) | 路由的名称。 |
+| [asp-route-{value}](https://learn.microsoft.com/zh-cn/aspnet/core/mvc/views/tag-helpers/built-in/anchor-tag-helper?view=aspnetcore-9.0#asp-route-value) | 单个 URL 路由值。 例如,`asp-route-id="1234"`。 |
+
+
+
+
\ No newline at end of file
diff --git "a/\351\203\255\346\242\246\345\252\233/20241205-\346\226\260\345\242\236\345\210\240\351\231\244.md" "b/\351\203\255\346\242\246\345\252\233/20241205-\346\226\260\345\242\236\345\210\240\351\231\244.md"
new file mode 100644
index 0000000..29502de
--- /dev/null
+++ "b/\351\203\255\346\242\246\345\252\233/20241205-\346\226\260\345\242\236\345\210\240\351\231\244.md"
@@ -0,0 +1,45 @@
+### 新增
+
+```
+ 1、验证input输入是否符合要求
+ 2、将input博客信息保存数据库
+ 3、保存成功以后,重定向的列表页
+```
+
+
+
+### 删除
+
+```
+ 1.根据id找到要删除的记录
+ 2.找到,删除,重定向到列表页
+ 3.没找到,返回Notfound
+```
+
+
+
+### 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})
+```
+
+
+
+
diff --git "a/\351\203\255\346\242\246\345\252\233/20241206-linq\347\273\203\344\271\240.md" "b/\351\203\255\346\242\246\345\252\233/20241206-linq\347\273\203\344\271\240.md"
new file mode 100644
index 0000000..dad79fe
--- /dev/null
+++ "b/\351\203\255\346\242\246\345\252\233/20241206-linq\347\273\203\344\271\240.md"
@@ -0,0 +1,49 @@
+##### 基础练习
+
+1~3
+
+
+
+4~5
+
+
+
+6~7
+
+
+
+8~10
+
+
+
+11~13
+
+
+
+14~15
+
+
+
+#### 中级练习
+
+16~17
+
+
+
+18~19
+
+
+
+20~23
+
+
+
+#### 高级练习
+
+24~28
+
+
+
+29
+
+
\ No newline at end of file
--
Gitee