diff --git "a/\347\256\241\346\230\237\350\210\252/20241114-\347\275\221\347\253\231.md" "b/\347\256\241\346\230\237\350\210\252/20241114-\347\275\221\347\253\231.md" new file mode 100644 index 0000000000000000000000000000000000000000..113d20d7a4e00a2a146b6ac85424c29b3b30d4c1 --- /dev/null +++ "b/\347\256\241\346\230\237\350\210\252/20241114-\347\275\221\347\253\231.md" @@ -0,0 +1,36 @@ +# 网站搭建 +* ping 域名 +* ssh root@域名 输入密码 +* apt update +* apt upgrade-y +* syestemctl status nginx +* apt install nginx -y(安装) +* mkdir /var/www +* cd /var/www +* mkdir 域名 +* cd 域名 +* vim index.html +* cat index.html +* cd /etc/nginxx/conf.d/ +* vim 域名.conf +* nginx -t +* nginx -s reload +``` +server{ + + listen 80; #监听的端口 + server_name 9ihub.com; #监听的域名 + location / { + root /var/www/9ihub.com ;#网站所在路径 + index index.html; #默认的首页文件 + } +} +``` +# 搭建MVC项目 +* dotnet new mvc -o 文件名 +* dotnet run -project .\文件名\ +* dotnet watch +* dotnet build +* 解决方案:dotnet new sln -o .\文件名\ + +![20241114增删改查](https://yihen1556.oss-cn-guangzhou.aliyuncs.com/setu/20241114增删改查.png) \ No newline at end of file diff --git "a/\347\256\241\346\230\237\350\210\252/20241119-\347\273\203\344\271\240.md" "b/\347\256\241\346\230\237\350\210\252/20241119-\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..8c107ec2f1a34ebec86110abd8649a1448d146d0 --- /dev/null +++ "b/\347\256\241\346\230\237\350\210\252/20241119-\347\273\203\344\271\240.md" @@ -0,0 +1,86 @@ +#### 笔记 +使用[FromBody]属性来接收数据 +```cs +[HttpPost] +public IActionResult Create([FromBody] Item item) +{ + return View(); +} +``` +#### MVC练习 +1. 创建一个控制台项目,没有任何选项,体会项目名称和什么有关系 + * 项目名称 MyConsoleApp 是项目的唯一标识符,它决定了生成的程序集名称、命名空间以及输出的可执行文件的名称。 + * dotnet new console -n Blog +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 Blog +6. 创建一个带解决方案,其下有一个MVC项目,3个类库项目的“综合项目” + * dotnet new sln -n Blog + * dotnet new mvc -n Blog + * dotnet new classlib -n Bg1 + * dotnet new classlib -n Bg2 + * dotnet new classlib -n Bg3 +7. 创建一个项目,在默认控制器(Home)下,新增一个Action方法,名为Ok,同时为其创建对应视图以显示这个视图 +```cs +public IActionResult Ok() + { + return View(); + } +``` +8. 创建一个项目,创建一个新的控制器,名为Blogs,新的控制器拥有一个名为Index的Action,该方法返回一个视图,视图显示“神级预判” +```cs +using Microsoft.AspNetCore.Mvc; +namespace Blog.Controllers; +public class BlogsController : Controller +{ + public IActionResult Index() + { + return Content("神级预判"); + } +} +``` +9. 给第8题的新控制,添加一个新的Action,名为Music,不接受任何参数,并返回对应的视图,视图显示“顶级打野” +```cs +public IActionResult Index() + { + return Content("顶级打野"); + } +``` +10. 给第8题的新控制器,新增一个Action,名为List,不接受任何参数,并返回对应视图,视图显示一个经典CRUD界面 +```cs + public IActionResult List() + { + return View(); + } +

经典CRUD界面

+``` +11. 新增一个控制器,名为Products,该控制器具有一个名为Edit的Action,这个Action接受一个int类型的参数id,显示这个id +```cs +using Microsoft.AspNetCore.Mvc; +namespace Blog.Controllers; +public class ProductsController : Controller +{ + public IActionResult Edit(int id) + { + return Content($`ID:{id}`); + } +} +``` +12. 在11题的新控制器中,新增一个名为Create的Action,该Action接受一个类型为Students(有姓名、年龄、体长属性)的参数,并展示该参数的姓名属性 +```cs + public IActionResult Create([FromBody] Students stu) + { + return Content(stu.Name) + } + public class Students + { + public string Name { get; set; } = null!; + public int Age { get; set; } = null!; + public string Witch { get; set; } = null!; + } +``` \ No newline at end of file diff --git "a/\347\256\241\346\230\237\350\210\252/20241121-\347\254\224\350\256\260.md" "b/\347\256\241\346\230\237\350\210\252/20241121-\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..81c4a016f317e1e86e3763f80929371629e2ce7d --- /dev/null +++ "b/\347\256\241\346\230\237\350\210\252/20241121-\347\254\224\350\256\260.md" @@ -0,0 +1,9 @@ +# 笔记 +使用[FromBody]属性来接收数据 +``` +[HttpPost] +public IActionResult Create([FromBody] Item item) +{ + return View(); +} +``` \ No newline at end of file diff --git "a/\347\256\241\346\230\237\350\210\252/20241122-\345\237\272\347\241\200\350\203\275\345\212\233.md" "b/\347\256\241\346\230\237\350\210\252/20241122-\345\237\272\347\241\200\350\203\275\345\212\233.md" new file mode 100644 index 0000000000000000000000000000000000000000..cb0ddfbbde968cb69affd04085a499fc903f196e --- /dev/null +++ "b/\347\256\241\346\230\237\350\210\252/20241122-\345\237\272\347\241\200\350\203\275\345\212\233.md" @@ -0,0 +1,109 @@ +# 专项练习-基础能力 + +1. 生成一个随机整数,范围[0,100],注意是否包含 +```cs +public IActionResult Number() + { + int number =new Random.Next(0, 101); + return Contene($"随机数:{number}"); + } +``` +2. 生成一个随机整数,范围(0,100],注意是否包含 +```cs +public IActionResult Number2() + { + int number2 =new Random.Next(1, 101); + return Contene($"随机数:{number2}"); + } +``` +3. 生成10个随机整数,范围[5,80],注意是否包含 +```cs +public IActionResult Number3() + { + List number3 = new List(); + for (int i = 0; i < 10; i++) + { + number3.Add(new Random().Next(5, 81)); + } + return View(number3); + } +``` +4. 定义一个字符串,字符串中有100个中文字符,需要从中随机取1个字符串 +```cs +public IActionResult Number4() + { + string cn = "阳光灿烂大地暖绿草如茵花娇艳山河壮丽美如画蓝天白云映水面飞鸟翱翔鱼欢跃春夏秋冬四季转日月星辰耀九天男女老少笑开颜手脚并用勤劳作口耳相传智慧添红黄蓝绿色彩艳大小高低各不同多少长短有分别快慢动静皆自然风雨雷电显神奇木石水火有妙用衣食住行不可少喜怒哀乐情万千诗词歌赋韵味长琴棋书画雅趣生仁义礼智信为本忠孝廉耻心中存团结友爱力量大互帮互助共前行努力奋斗创未来幸福生活乐无边"; + int ch = new Random().Next(0, cn.Length); + return Content($"随机字符:{cn[ch].ToString()}"); + } +``` +5. 定义一个字符串,字符串中有100个中文字符,需要从中随机取5-50个字符,组成新的字符 +```cs +public IActionResult Number5() + { + string cn = "阳光灿烂大地暖绿草如茵花娇艳山河壮丽美如画蓝天白云映水面飞鸟翱翔鱼欢跃春夏秋冬四季转日月星辰耀九天男女老少笑开颜手脚并用勤劳作口耳相传智慧添红黄蓝绿色彩艳大小高低各不同多少长短有分别快慢动静皆自然风雨雷电显神奇木石水火有妙用衣食住行不可少喜怒哀乐情万千诗词歌赋韵味长琴棋书画雅趣生仁义礼智信为本忠孝廉耻心中存团结友爱力量大互帮互助共前行努力奋斗创未来幸福生活乐无边"; + int len = new Random().Next(5, 51); + string str = new string(cn.OrderBy(x => new Random().Next()).Take(len).ToArray()); + + return Content($"随机字符:{str}"); + } +``` +6. 定义2个字符串,第一个字符串中放百家姓,第二个字符串中放中文字符,要求从第一个字符串随机取得一个姓,再从第二个字符串中随机获得1到2个字符组成新字符串,和第一个字符串取得的姓组成一个姓名 +```cs +public class Program +{ + private static readonly string[] Surnames = { "赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈" }; + private static readonly string[] ChineseCharacters = { "伟", "刚", "勇", "毅", "俊", "峰", "强", "军", "平", "保" }; + + public static void Main() + { + Random random = new Random(); + string surname = Surnames[random.Next(Surnames.Length)]; + int nameLength = random.Next(1, 3); + string name = string.Concat(Enumerable.Range(0, nameLength).Select(_ => ChineseCharacters[random.Next(ChineseCharacters.Length)])); + string fullName = surname + name; + + Console.WriteLine($"随机生成的姓名: {fullName}"); + } +} +``` +7. 利用以上方法,随机生成100个BlogCreateDto类型(有Title、Author、Content属性)的对象,其中的内容都是随机生成且长度不定,并将其渲染到视图 +```cs + public class BlogCreateDto +{ + public string Title { get; set; } + public string Author { get; set; } + public string Content { get; set; } +} + + private static readonly string[] Surnames = { "赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈" }; + private static readonly string[] ChineseCharacters = { "伟", "刚", "勇", "毅", "俊", "峰", "强", "军", "平", "保" }; + private static readonly string[] SampleTitles = { "如何学习编程", "ASP.NET MVC教程", "C#高级特性", "前端开发技巧", "数据库优化" }; + private static readonly string[] SampleContents = { "本文介绍了如何学习编程...", "ASP.NET MVC是一个强大的框架...", "C#语言有许多高级特性...", "前端开发需要掌握多种技术...", "数据库优化可以提高性能..." }; + private static readonly Random random = new Random(); + + public ActionResult Index() + { + List blogs = new List(); + for (int i = 0; i < 100; i++) + { + blogs.Add(GenerateRandomBlog()); + } + return View(blogs); + } + + private BlogCreateDto GenerateRandomBlog() + { + string surname = Surnames[Random.Next(Surnames.Length)]; + int nameLength = Random.Next(1, 3); + string name = string.Concat(Enumerable.Range(0, nameLength).Select(_ => ChineseCharacters[random.Next(ChineseCharacters.Length)])); + string fullName = surname + name; + + return new BlogCreateDto + { + Title = SampleTitles[Random.Next(SampleTitles.Length)], + Author = fullName, + Content = SampleContents[Random.Next(SampleContents.Length)] + }; + } +``` \ No newline at end of file diff --git "a/\347\256\241\346\230\237\350\210\252/20241122-\346\216\247\345\210\266\345\231\250\344\274\240\345\217\202.md" "b/\347\256\241\346\230\237\350\210\252/20241122-\346\216\247\345\210\266\345\231\250\344\274\240\345\217\202.md" new file mode 100644 index 0000000000000000000000000000000000000000..71e6de7e58ddccceba4f7721468c218ebd1ce0bc --- /dev/null +++ "b/\347\256\241\346\230\237\350\210\252/20241122-\346\216\247\345\210\266\345\231\250\344\274\240\345\217\202.md" @@ -0,0 +1,88 @@ +# 笔记 +渲染视图 +```csharp +public IActionResult Index() +{ + return View(); +} +``` +# 控制器传参 + +1. 简单参数传递 在一个叫Blog控制器中,定义一个叫Index的Action,并且传递一个int类型的值,id为变量名 + +```cs +public IActionResult Index(int id) + { + return View(); + } +``` + +2. 简单参数传递 在一个叫Blog控制器中,定义一个叫Index_2的Action,并且传递一个string类型的值,id为变量名 + +```cs +public string Index_2(int id) + { + return id.ToString(); + } +``` + +3. 简单参数传递 在一个叫Blog控制器中,定义一个叫Index_3的Action,并且传递一个string类型的值,name为变量名 + +```cs +public IActionResult Index_3([FromBody]Student stu) + { + return Content(stu.Name); + } + public class Student + { + public string Name { get; set; } = null!; + } +``` + +4. 复杂参数传递 在一个叫Blog的控制器中,定义一个名为Create的Action,并且传递一个BlogCreateDto类型的值,blogCreateDto为变量名 + > PS BlogCreateDto类型具有Title、Author、Content自动属性 + > +```cs +public IActionResult Create([FromBody] BlogCreateDto blogCreateDto) + { + return View(); + } + public class BlogCreateDto + { + 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自动属性 + > +```cs +public IActionResult Create([FromBody] Products productCreateDto) + { + return View(); + } + 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自动属性 + > +```cs +public IActionResult Create([FromBody] Students studentCreateDto) + { + return View(); + } + public class Students + { + public string StudentName { get; set; } = null!; + public string Sex { get; set; } = null!; + public string Age { get; set; } = null!; + } +``` diff --git "a/\347\256\241\346\230\237\350\210\252/20241126-\347\254\224\350\256\260.md" "b/\347\256\241\346\230\237\350\210\252/20241126-\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..9fceeada8a903890182573e15b031f1245dcf530 --- /dev/null +++ "b/\347\256\241\346\230\237\350\210\252/20241126-\347\254\224\350\256\260.md" @@ -0,0 +1,9 @@ +### 笔记 +## 正向代理 + + +pc 通过找一个代理服务器 让代理服务器去访问 web服务器 + +## 反向代理 + +web服务器设置一个代理服务器让pc端 通过访问 代理服务器 访问 web服务器 \ No newline at end of file diff --git "a/\347\256\241\346\230\237\350\210\252/20241128-\344\275\234\344\270\232\345\217\212\347\254\224\350\256\260.md" "b/\347\256\241\346\230\237\350\210\252/20241128-\344\275\234\344\270\232\345\217\212\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..a1768fa84a78340743724b9c846cbbd75184a167 --- /dev/null +++ "b/\347\256\241\346\230\237\350\210\252/20241128-\344\275\234\344\270\232\345\217\212\347\254\224\350\256\260.md" @@ -0,0 +1,25 @@ +#### 笔记 +接收view +@model 命名空间.类名 @Model.键 + +定位点 +``` + +``` +#### 专业项练习-视图及其模板引擎 + +1. 渲染(展示)简单数据类型到视图 + +![](https://gitee.com/he-ziyueL/img/raw/master/20241201183422.png) +2. 渲染(展示)对象数据到视图 + + +3. 渲染(展示)集合数据到视图 + +![{DF2AB127-5378-4965-A2B8-FAF1457C59B7}](https://gitee.com/guo-mengyuan11/picture-bed/raw/master/images/202412011554225.png) +4. 渲染(展示)包含集合数据的对象数据到视图 + +![4](https://sgqt.oss-cn-hangzhou.aliyuncs.com/4.png) +5. 尝试构建如下图所示的经典CRUD列表 + +![20241201214137](https://yihen1556.oss-cn-guangzhou.aliyuncs.com/setu/20241201214137.png) \ No newline at end of file diff --git "a/\347\256\241\346\230\237\350\210\252/20241203-\350\241\250\345\215\225.md" "b/\347\256\241\346\230\237\350\210\252/20241203-\350\241\250\345\215\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..86da4f964c236f07d47b0d8469f91ce0873b524c --- /dev/null +++ "b/\347\256\241\346\230\237\350\210\252/20241203-\350\241\250\345\215\225.md" @@ -0,0 +1,15 @@ +#### 笔记 +基本表单结构: +```cs +
+ + +``` +#### 作业 +* 表单 +![](https://gitee.com/fjj04/picture-bed/raw/master/img/20241208200528210.png) +* 新增 +![](https://gitee.com/fjj04/picture-bed/raw/master/img/20241208200625794.png) +![](https://gitee.com/fjj04/picture-bed/raw/master/img/20241208200717957.png) +* 删除 +![](https://gitee.com/fjj04/picture-bed/raw/master/img/20241208200657645.png) \ No newline at end of file diff --git "a/\347\256\241\346\230\237\350\210\252/20241205-30\351\242\230.md" "b/\347\256\241\346\230\237\350\210\252/20241205-30\351\242\230.md" new file mode 100644 index 0000000000000000000000000000000000000000..0c15530502bc3a3f68f926e8ed7c6c492bcc4bb5 --- /dev/null +++ "b/\347\256\241\346\230\237\350\210\252/20241205-30\351\242\230.md" @@ -0,0 +1,387 @@ +## 笔记 +### 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}) + +## 作业 +##### 基础练习 + +1. **查询特定元素** + 找出数组中等于5的元素。 + + ```csharp + int[] numbers = [1, 2, 3, 4, 5, 6]; + var num=numbers.FirstOrDefault(n=>n==5); + return View(num); + ``` + +2. **查询特定范围的元素** + 找出数组中在2到8之间的元素。 + + ```csharp + int[] numbers = {1, 2, 3, 4, 5, 6}; + var num = numbers.Where(n => n >= 2 && n <= 8).ToList(); + return View(num); + ``` + +3. **查询并转换元素** + 将数组中的每个数字乘以2。 + + ```csharp + int[] numbers = { 1, 2, 3, 4, 5, 6 }; + var num = numbers.Select(n => n=n*2).ToList(); + return View(num); + ``` + +4. **查询特定属性的对象** + 找出所有名字以"王"开头的学生。 + + ```csharp + List students = new List + { + new Student {Id=1, Name = "王有才", Age = 21 }, + new Student {Id=2, Name = "王中王", Age = 22 }, + new Student {Id=3, Name = "张语嫣", Age = 23 }, + new Student {Id=4, Name = "詹宇航", Age = 35 }, + new Student {Id=5, Name = "郑雨良", Age = 26 }, + }; + var name = students.Where(s => s.Name.StartsWith("王")).ToList(); + return View(name); + ``` + +5. **查询并排序** + 找出所有年龄大于20岁的学生,并按年龄降序排列。 + + ```csharp + List students = new List + { + new Student {Id=1, Name = "王有才", Age = 21 }, + new Student {Id=2, Name = "罗婷", Age = 21 }, + new Student {Id=3, Name = "王中王", Age = 22 }, + new Student {Id=4, Name = "李子柒", Age = 22 }, + new Student {Id=5, Name = "张语嫣", Age = 23 }, + new Student {Id=6, Name = "詹宇航", Age = 35 }, + new Student {Id=7, Name = "郑雨良", Age = 26 }, + new Student {Id=8, Name = "欧文", Age = 26 }, + + }; + var name = students.Where(s => s.Age > 20).OrderByDescending(s => s.Age).ToList(); + return View(name); + ``` + +6. **查询并去重** + 找出数组中所有不重复的数字。 + + ```csharp + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var num = numbers.Distinct().ToArray(); + return View(model); + ``` + +7. **查询第一个元素** + 找出数组中第一个大于3的元素。 + + ```csharp + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var num = numbers.FirstOrDefault(n => n > 3); + return View(num); + ``` + +8. **查询最后一个元素** + 找出数组中最后一个小于7的元素。 + + ```csharp + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var num = numbers.LastOrDefault(n => n<7); + return View(num); + ``` + +9. **查询元素是否存在** + 检查数组中是否存在大于10的元素。 + + ```csharp + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var num = numbers.Any(n => n > 10); + ``` + +10. **查询元素的计数** + 计算数组中大于5的元素数量。 + + ```csharp + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var num = numbers.Count(n => n > 5); + ``` + +11. **查询元素的总和** + 计算数组中所有元素的总和。 + + ```csharp + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var num = numbers.Sum(); + ``` + +12. **查询元素的最大值** + 找出数组中的最大值。 + + ```csharp + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var num = numbers.Max(); + ``` + +13. **查询元素的最小值** + 找出数组中的最小值。 + + ```csharp + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var num = numbers.Min(); + ``` + +14. **查询元素的平均值** + 计算数组中所有元素的平均值。 + + ```csharp + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var num = numbers.Average(); + ``` + +15. **查询特定条件的元素** + 找出数组中能被3整除的元素。 + + ```csharp + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var num = numbers.Where(n => n % 3 == 0); + ``` + ![](https://gitee.com/fjj04/picture-bed/raw/master/img/20241208171746432.png) + +##### 中级练习 + +16. **查询并选择特定属性** + 找出所有学生的姓名和年龄。 + + ```csharp + List students = new List + { + new Student {Id=1, Name = "王有才", Age = 21 }, + new Student {Id=2, Name = "罗婷", Age = 21 }, + new Student {Id=3, Name = "王中王", Age = 22 }, + new Student {Id=4, Name = "李子柒", Age = 22 }, + new Student {Id=5, Name = "张语嫣", Age = 23 }, + new Student {Id=6, Name = "詹宇航", Age = 35 }, + new Student {Id=7, Name = "郑雨良", Age = 26 }, + new Student {Id=8, Name = "欧文", Age = 26 }, + }; + var stu = students.Select(static a => new { a.Name, a.Age }); + foreach (var name in stu) + { + Console.WriteLine($"姓名: {name.Name} ,年龄:{name.Age}"); + } + ``` +![](https://gitee.com/fjj04/picture-bed/raw/master/img/20241208174612245.png) +17. **查询并分组** + 按年龄分组学生,并计算每个年龄组的学生数量。 + + ```csharp + List students = new List + { + new Student {Id=1, Name = "王有才", Age = 21 }, + new Student {Id=2, Name = "罗婷", Age = 21 }, + new Student {Id=3, Name = "王中王", Age = 22 }, + new Student {Id=4, Name = "李子柒", Age = 22 }, + new Student {Id=5, Name = "张语嫣", Age = 23 }, + new Student {Id=6, Name = "詹宇航", Age = 35 }, + new Student {Id=7, Name = "郑雨良", Age = 26 }, + new Student {Id=8, Name = "欧文", Age = 26 }, + }; + var stu17 = students.GroupBy(student => student.Age).Select(group => new { Age = group.Key, Count = group.Count()}); + foreach (var group in stu17) + { + Console.WriteLine($"年龄: {group.Age}, 数量: {group.Count}"); + } + ``` +![](https://gitee.com/fjj04/picture-bed/raw/master/img/20241208182407327.png) +18. **查询并联结** + 联结学生和课程表,找出每个学生的所有课程。 + + ```csharp + List students = new List + { + new Student {Id=1, Name = "王有才", Age = 21 }, + new Student {Id=2, Name = "罗婷", Age = 21 }, + new Student {Id=3, Name = "王中王", Age = 22 }, + new Student {Id=4, Name = "李子柒", Age = 22 }, + new Student {Id=5, Name = "张语嫣", Age = 23 }, + new Student {Id=6, Name = "詹宇航", Age = 35 }, + new Student {Id=7, Name = "郑雨良", Age = 26 }, + new Student {Id=8, Name = "欧文", Age = 26 }, + }; + List courses=new List + { + new Course{StudentId=1,CourseName="英语"}, + new Course{StudentId=1,CourseName="数学"}, + new Course{StudentId=2,CourseName="语文"}, + new Course{StudentId=3,CourseName="物理"}, + new Course{StudentId=4,CourseName="化学"}, + new Course{StudentId=4,CourseName="生物"}, + new Course{StudentId=4,CourseName="语文"}, + }; + var studentCourses = from student in students join course in courses on student.Id equals course.StudentId into studentCourseGroup + select new{StudentName = student.Name,Courses = studentCourseGroup.Select(c => c.CourseName).ToList()}; + Console.WriteLine("每个学生的所有课程:"); + foreach (var sc in studentCourses) + { + Console.WriteLine($"学生: {sc.StudentName}, 课程: {string.Join(", ", sc.Courses)}"); + } + ``` +![](https://gitee.com/fjj04/picture-bed/raw/master/img/20241208185209194.png) +19. **查询并反转** + 反转数组中的元素顺序。 + + ```csharp + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var num19 = numbers.Reverse().ToArray(); + Console.WriteLine("反转后的数组: " + string.Join(", ", num19)); + + ``` +![](https://gitee.com/fjj04/picture-bed/raw/master/img/20241208192015708.png) +20. **查询并填充** + 找出数组中第一个大于2的元素,并用它填充后面的所有位置。 + + ```csharp + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + int fillValue = -1; // 初始化为-1,表示未找到 + for (int i = 0; i < numbers.Length; i++) + { + if (numbers[i] > 2) + { + fillValue = numbers[i]; + break; + } + } + // 如果找到了大于2的元素,则用它填充后面的所有位置 + if (fillValue != -1) + { + for (int i = Array.IndexOf(numbers, fillValue); i < numbers.Length; i++) + { + numbers[i] = fillValue; + } + } + // 输出修改后的数组 + Console.WriteLine("数组: " + string.Join(", ", numbers)); + ``` +![](https://gitee.com/fjj04/picture-bed/raw/master/img/20241208193141268.png) +21. **查询并排除** + 从数组中排除所有小于5的元素。 + ```csharp + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + var num21=numbers.Where((n=>n>5)).ToArray(); + Console.WriteLine("数组: " + string.Join(", ", num21)); + ``` + ![](https://gitee.com/fjj04/picture-bed/raw/master/img/20241208193448670.png) +22. **查询并填充默认值** + 如果数组中存在null值,用默认值0替换。 + + ```csharp + var numbers12=new List{ 1, null, 3, null, 5 }; + var num22 = numbers12.Select((n => n ?? 0)).ToArray(); + Console.WriteLine("数组: " + string.Join(", ", num22)); + ``` +![](https://gitee.com/fjj04/picture-bed/raw/master/img/20241208194022423.png) +23. **查询并转换类型** + 将字符串数组转换为整数数组。 + + ```csharp + string[] stringNumbers = { "1", "2", "3", "4" }; + int[] num23 = stringNumbers.Select(int.Parse).ToArray(); + Console.WriteLine("数组: " + string.Join(", ", num23)); + ``` +![](https://gitee.com/fjj04/picture-bed/raw/master/img/20241208194323585.png) + +24. **查询并使用OfType过滤** + 从对象数组中过滤出字符串类型的元素。 + + ```csharp + object[] objects = { "String", 123, "Another String", 456 }; + var result = objects.OfType().ToList(); + foreach (var num24 in result) + { + Console.WriteLine(num24); + } + ``` +![](https://gitee.com/fjj04/picture-bed/raw/master/img/20241208194613524.png) +##### 高级练习 + +25. **查询并使用Zip合并** + 合并两个数组,并创建一个包含元素对的新数组。 + + ```csharp + int[] numbers1 = { 1, 2, 3 }; + int[] numbers2 = { 4, 5, 6 }; + var num25 = numbers1.Zip(numbers2, (n1, n2) => new { n1, n2 }).ToList(); + foreach (var num in num25) + { + Console.WriteLine($"({num.n1}, {num.n2})"); + } + ``` +![](https://gitee.com/fjj04/picture-bed/raw/master/img/20241208195117560.png) +26. **查询并使用Range生成** + 生成一个包含1到10的整数数组。 + + ```csharp + int[] num26=Enumerable.Range(1,10).ToArray(); + foreach (var item in num26) + { + Console.WriteLine(item); + } + ``` +![](https://gitee.com/fjj04/picture-bed/raw/master/img/20241208195453841.png) +27. **查询并使用Repeat重复** + 重复一个元素多次,创建一个新数组。 + + ```csharp + int[] num27=Enumerable.Repeat(2,10).ToArray(); + foreach (var item in num27) + { + Console.WriteLine(item); + } + ``` +![](https://gitee.com/fjj04/picture-bed/raw/master/img/20241208195711400.png) +28. **查询并使用Take限制数量** + 从数组中取出前5个元素。 + + ```csharp + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + int[] num28=numbers.Take(5).ToArray(); + foreach (var item in num28) + { + Console.WriteLine(item); + } + ``` +![](https://gitee.com/fjj04/picture-bed/raw/master/img/20241208195931924.png) +29. **查询并使用Skip跳过元素** + 跳过数组中的前3个元素,然后取出剩余的元素。 + + ```csharp + int[] numbers = { 1, 2, 3, 4, 5, 6,18,23,64,7,18,2,3 }; + int[] num29=numbers.Skip(3).ToArray(); + foreach (var item in num29) + { + Console.WriteLine(item); + } + ``` +![](https://gitee.com/fjj04/picture-bed/raw/master/img/20241208200126295.png) diff --git "a/\347\256\241\346\230\237\350\210\252/linux.md" "b/\347\256\241\346\230\237\350\210\252/linux.md" new file mode 100644 index 0000000000000000000000000000000000000000..a30238276270c71cfcdc850853b7feda965a144b --- /dev/null +++ "b/\347\256\241\346\230\237\350\210\252/linux.md" @@ -0,0 +1,102 @@ +## Linux练习 +安装sdk +![20241124221852](https://yihen1556.oss-cn-guangzhou.aliyuncs.com/20241124221852.png) +### 任务1 +尝试使用以下几种方式分别登录服务器,说明它们分别的注意事项,并说明它们之间的区别 +ssh客户端 +tabby应用 +xShell +putty + +用户界面:SSH客户端和PuTTY较为简单,Tabby提供了现代化的界面,xShell提供了用户友好的图形界面。 + +平台支持:SSH客户端和PuTTY支持多平台,Tabby支持Windows、macOS和Linux,xShell主要针对Windows。 + +功能:SSH客户端功能强大但界面简单,PuTTY轻量级,Tabby和xShell提供了更多现代功能,如多标签和插件系统。 + +安全性:所有工具都支持SSH加密连接,但使用密钥对认证可以提供额外的安全性。 + +易用性:对于不熟悉命令行的用户,Tabby和xShell提供了更好的易用性。 + +### 任务2 +更新软件源,命令:apt update,并了解这一步的实际用处和意义: + +apt update命令是apt工具中的一个常用命令,用于更新本地软件包索引。 +它确保了你的系统软件包列表是最新的,这对于系统的维护、升级和安全性至关重要。 + +### 任务3 +更新软件和补丁,命令:apt upgrade -y,并了解这一步的实际用处意义 + +apt upgrade -y 是一个在基于Debian的Linux发行版(如Ubuntu)中使用的命令,用于升级所有已安装的软件包到最新版本。这个命令结合了 apt update 和 apt upgrade 的功能,并且自动回答“yes”以确认所有升级。 + +### 任务4 +``` +查看当前目录下的文件和文件夹 +命令:ls + +查看当前路径 +命令:pwd + +创建一个新的文件夹 +命令:mkdir [文件夹名] 例如:mkdir new_folder + +删除一个文件夹(注意:只能删除空文件夹) +命令:rmdir [文件夹名] 例如:rmdir new_folder + +移动或重命名文件/文件夹 +命令:mv [原路径] [新路径] 例如:mv old_name.txt new_name.txt + +复制文件 +命令:cp [源文件] [目标路径] 例如:cp file1.txt /path/to/destination/ + +删除文件 +命令:rm [文件名] 例如:rm file.txt + +查看文件内容 +命令:cat [文件名] 例如:cat file.txt + +分页查看文件内容 +命令:less [文件名] 例如:less file.txt + +查找文件 +命令:find / -name [文件名] 例如:find / -name filename.txt + +查看文件权限 +命令:ls -l [文件或目录名] 例如:ls -l file.txt + +改变文件权限 +命令:chmod [权限] [文件或目录名] 例如:chmod 755 file.txt(设置为可读可写可执行) + +改变文件所有者 +命令:chown [新所有者] [文件或目录名] 例如:chown new_owner file.txt + +查看当前登录用户 +命令:whoami + +查看系统运行时间和平均负载 +命令:uptime + +查看磁盘使用情况 +命令:df -h(以易读的格式显示) + +查看当前路径下的隐藏文件 +命令:ls -a + +创建一个空文件 +命令:touch [文件名] 例如:touch new_file.txt + +查看当前系统的内核版本 +命令:uname -r + +查看网络连接状态 +命令:ifconfig 或 ip addr(ifconfig 命令在某些新版本的Linux中已被ip命令取代) + +安装一个软件包 +命令:sudo apt-get install [软件包名] 例如:sudo apt-get install vim + +卸载一个软件包 +命令:sudo apt-get remove [软件包名] 例如:sudo apt-get remove vim + +更新软件包列表 +命令:sudo apt-get update +``` \ No newline at end of file