diff --git "a/docs/doc/\360\237\217\204 \345\205\263\344\272\216/qfaugcu7d1ucqdq5.md" "b/docs/doc/\360\237\217\204 \345\205\263\344\272\216/qfaugcu7d1ucqdq5.md" index 99bd7b3..f687c34 100644 --- "a/docs/doc/\360\237\217\204 \345\205\263\344\272\216/qfaugcu7d1ucqdq5.md" +++ "b/docs/doc/\360\237\217\204 \345\205\263\344\272\216/qfaugcu7d1ucqdq5.md" @@ -2,10 +2,13 @@ title: 更新日志 urlname: qfaugcu7d1ucqdq5 date: '2024-05-22 08:47:22' -updated: '2024-06-19 23:20:00' -description: '---nav_path: changelog---2024-6-19新增内容:新增Go语言相关内容新增最强前端、最强后端相关内容新增友情链接功能2024-6-13优化网站排版:防止页面崩溃更新主页Icon增加网页动态效果适配部分移动端机型2024-6-06导航栏优化增加微信二维码增加友情链接增...' +updated: '2024-06-23 20:47:31' +description: '---nav_path: changelog2024-6-23新增keywords关键词2024-6-19新增内容:新增Go语言相关内容新增最强前端、最强后端相关内容新增友情链接功能2024-6-13优化网站排版:防止页面崩溃更新主页Icon增加网页动态效果适配部分移动端机型2024-6-06...' nav_path: changelog --- +## 2024-6-23 + +- 新增keywords关键词 ## 2024-6-19 - 新增内容:新增Go语言相关内容 diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/ak0bv8yd7g5uooog.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/ak0bv8yd7g5uooog.md" index a76004f..ad2557e 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/ak0bv8yd7g5uooog.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/ak0bv8yd7g5uooog.md" @@ -2,7 +2,7 @@ title: 第 14 章:异步编程 urlname: ak0bv8yd7g5uooog date: '2024-06-21 16:44:25' -updated: '2024-06-23 20:28:08' +updated: '2024-06-23 21:04:58' description: 'keywords: 异步编程, Task, async 等待, 并行编程。在现代编程中,异步编程(Asynchronous Programming)是一项关键技术,能够显著提升应用程序的响应速度和性能。本章将深入探讨异步编程的概念,以及如何在 C#中使用 Task、Task以及 async 和...' keywords: '异步编程, Task, async 等待, 并行编程。' --- @@ -199,8 +199,6 @@ class Program - **资源竞争**:并行任务可能会争夺系统资源,如 CPU 和内存,合理分配资源。 - **调试难度**:并行编程可能会增加代码的调试难度,注意日志记录和错误处理。 -## 总结 本章介绍了异步编程的基本概念,以及如何在 C#中使用 Task、Task、async 和 await 关键字实现异步操作。我们还探讨了并行编程的实现方式以及一些注意事项。通过异步和并行编程,可以显著提升应用程序的响应速度和性能,让你的程序更高效、更健壮。 -【本章节完毕】 diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/bfc28fyes41agqlo.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/bfc28fyes41agqlo.md" index c64b4c1..f0509dd 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/bfc28fyes41agqlo.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/bfc28fyes41agqlo.md" @@ -2,8 +2,8 @@ title: 第 7 章:类和对象 urlname: bfc28fyes41agqlo date: '2024-06-21 16:38:04' -updated: '2024-06-21 16:38:11' -description: 本章将介绍类和对象的概念、类的定义、对象的创建和使用、构造函数以及 this 关键字,帮助初学者深入理解面向对象编程的重要基础。 +updated: '2024-06-23 21:03:23' +description: 'keywords: 类和对象, C# 面向对象编程, C# 初学者, 构造函数, this 关键字在我们深入学习 C# 编程的过程中,理解类和对象是至关重要的。这一章将为你详细讲解类和对象的概念、如何定义类、创建和使用对象、构造函数的使用以及 this 关键字的作用。什么是类和对象在面向对象编...' keywords: '类和对象, C# 面向对象编程, C# 初学者, 构造函数, this 关键字' --- 在我们深入学习 C# 编程的过程中,理解类和对象是至关重要的。这一章将为你详细讲解类和对象的概念、如何定义类、创建和使用对象、构造函数的使用以及 `this` 关键字的作用。 @@ -139,8 +139,6 @@ public class Person 在上面的例子中,默认构造函数调用了带参数的构造函数,并传递了默认值。 -## 小结 本章详细介绍了类和对象的概念、类的定义、对象的创建和使用、构造函数以及 `this` 关键字。掌握这些基础知识是深入理解面向对象编程的关键。通过练习和实践,你会发现这些概念在实际编程中是如何帮助你构建清晰且高效的代码结构的。 -【本章节完毕】 diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/dnspn99ighi70h51.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/dnspn99ighi70h51.md" index c6c2ac8..09e9189 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/dnspn99ighi70h51.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/dnspn99ighi70h51.md" @@ -2,12 +2,10 @@ title: 第 18 章:开发一个博客系统 urlname: dnspn99ighi70h51 date: '2024-06-21 16:46:19' -updated: '2024-06-23 20:35:50' -description: 读者开发一个完整的博客系统,从系统需求分析到数据库设计,再到后端 API 开发和前端界面开发,以及系统的最终测试和部署。 +updated: '2024-06-23 21:05:41' +description: 'keywords: 博客系统开发, C# 编程, 后端 API, 前端开发, 数据库设计在本章中,我们将带领读者开发一个简单而功能齐全的博客系统。从系统需求分析开始,我们将逐步完成数据库设计、后端 API 开发、前端界面开发,并最终进行系统测试和部署。通过这个项目,读者将能够巩固之前所学的 C...' keywords: '博客系统开发, C# 编程, 后端 API, 前端开发, 数据库设计' --- -## 引言 - 在本章中,我们将带领读者开发一个简单而功能齐全的博客系统。从系统需求分析开始,我们将逐步完成数据库设计、后端 API 开发、前端界面开发,并最终进行系统测试和部署。通过这个项目,读者将能够巩固之前所学的 C# 知识,并将其应用于实际开发中。 ## 系统需求分析 @@ -541,5 +539,3 @@ export { CreateArticle, EditArticle }; 至此,我们已经完成了博客系统的开发、测试和部署。通过这个项目,读者不仅能够深入理解 C# 编程的实际应用,还能掌握完整的开发流程和实践经验。 -【本章节完毕】 - diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/els4225swlif6gyw.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/els4225swlif6gyw.md" index aabe5f1..4d49d4a 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/els4225swlif6gyw.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/els4225swlif6gyw.md" @@ -2,8 +2,8 @@ title: 第 19 章:开发一个机器学习应用 urlname: els4225swlif6gyw date: '2024-06-21 16:46:41' -updated: '2024-06-21 16:46:52' -description: 本章节将介绍如何在 C# 中开发一个机器学习应用,包括数据准备和预处理、模型训练和评估,以及模型的使用和部署。 +updated: '2024-06-23 21:05:53' +description: 'keywords: 机器学习, 数据预处理, 模型训练, 模型评估, 模型部署机器学习基础在开始我们的实际开发之前,首先要了解一些机器学习的基本概念。机器学习是一种通过数据来训练模型,从而使计算机能够在没有明确编程的情况下进行预测或决策的技术。机器学习的基本流程数据收集:获取用于训练模型的数据...' keywords: '机器学习, 数据预处理, 模型训练, 模型评估, 模型部署' --- ## 机器学习基础 @@ -177,5 +177,3 @@ public class PredictionsController : ControllerBase ``` 通过这些步骤,我们可以在 C# 中开发并部署一个完整的机器学习应用。从数据准备、模型训练到模型部署,每一步都至关重要,确保模型的准确性和实用性。 - -【本章节完毕】 diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/hen6f6d77mvbngfq.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/hen6f6d77mvbngfq.md" index 4a7cd92..e6a28f5 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/hen6f6d77mvbngfq.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/hen6f6d77mvbngfq.md" @@ -2,7 +2,7 @@ title: 第 15 章:反射 urlname: hen6f6d77mvbngfq date: '2024-06-21 16:44:42' -updated: '2024-06-21 16:45:08' +updated: '2024-06-23 21:05:05' description: 探讨 C#中的反射机制,包括 Type 类的使用,如何获取类型信息,创建对象以及调用方法的具体实现。 keywords: '反射, C# 反射, Type 类, 反射创建对象, 反射调用方法' --- @@ -149,8 +149,6 @@ class Program 2. **安全问题**:反射可以绕过访问修饰符限制,因此在使用时要慎重,避免破坏封装性和安全性。 3. **版本兼容性**:反射依赖于类型的结构,类型的一些改变可能会导致反射代码失效。 -## 小结 通过本章节的学习,我们了解了反射的基本概念和用途,掌握了如何使用 `Type` 类获取类型信息,动态创建对象以及调用方法。反射在很多高级编程场景中都有广泛的应用,但使用时需要注意性能和安全问题。 -【本章节完毕】 diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/ks16hc0d9oh0gryd.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/ks16hc0d9oh0gryd.md" index e786e97..ce49292 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/ks16hc0d9oh0gryd.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/ks16hc0d9oh0gryd.md" @@ -2,8 +2,8 @@ title: 第 13 章:LINQ urlname: ks16hc0d9oh0gryd date: '2024-06-21 16:44:10' -updated: '2024-06-21 16:44:24' -description: 本章详细介绍了 LINQ 的基本概念、查询语法和方法语法,通过实例展示了如何在 C# 中使用 LINQ 来处理对象和 XML 数据。 +updated: '2024-06-23 21:04:52' +description: 'keywords: LINQ, C# 查询语法, LINQ 方法语法, LINQ to Objects, LINQ to XML什么是 LINQLINQ (Language Integrated Query) 是一种在 C# 和其他 .NET 语言中用于查询数据的强大工具。它允许开发者以声明性...' keywords: 'LINQ, C# 查询语法, LINQ 方法语法, LINQ to Objects, LINQ to XML' --- ## 什么是 LINQ @@ -131,8 +131,5 @@ foreach (var person in people) } ``` -## 总结 - 通过本章的学习,我们了解了 LINQ 的基本概念和使用方法。我们探索了查询表达式语法和方法语法,并展示了如何在内存对象和 XML 数据上使用 LINQ。掌握 LINQ 将极大提高数据处理的效率,使代码更加简洁和易读。 -【本章节完毕】 diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/kugx9ym41ibcfat7.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/kugx9ym41ibcfat7.md" index 84081bb..4600c13 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/kugx9ym41ibcfat7.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/kugx9ym41ibcfat7.md" @@ -2,12 +2,10 @@ title: 第 9 章:多态 urlname: kugx9ym41ibcfat7 date: '2024-06-21 16:38:26' -updated: '2024-06-21 16:38:36' -description: 本章将深入探讨 C# 中的多态特性,包括虚方法、抽象类和接口的使用。通过具体示例和代码演示,帮助读者掌握多态的核心概念和应用。 +updated: '2024-06-23 21:04:04' +description: 'keywords: C# 多态, C# 虚方法, C# 抽象类, C# 接口, 面向对象编程多态性(Polymorphism)是面向对象编程中的一项核心特性,它允许一个接口有多个实现方式。C# 中的多态主要通过虚方法(virtual methods)、抽象类(abstract classes)...' keywords: 'C# 多态, C# 虚方法, C# 抽象类, C# 接口, 面向对象编程' --- -## 前言 - 多态性(Polymorphism)是面向对象编程中的一项核心特性,它允许一个接口有多个实现方式。C# 中的多态主要通过虚方法(virtual methods)、抽象类(abstract classes)和接口(interfaces)来实现。本章将详细介绍这些概念,并通过具体示例帮助你掌握如何在编程中应用多态。 ## 什么是多态 @@ -156,8 +154,5 @@ public class Program 在这个示例中,`IShape` 是一个接口,定义了一个方法 `Draw`。类 `Circle` 和 `Rectangle` 实现了 `IShape` 接口,并提供了 `Draw` 方法的具体实现。通过接口引用 `IShape`,我们可以调用不同类的 `Draw` 方法。 -## 小结 - 多态作为面向对象编程的核心特性,使得代码更加灵活和可扩展。通过虚方法、抽象类和接口,我们可以定义通用的接口,并在派生类中提供具体的实现。在实际开发中,合理利用多态可以使代码结构更加清晰和易于维护。 -【本章节完毕】 diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/ordcsqdus8g8xmsa.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/ordcsqdus8g8xmsa.md" index 34a05b7..0f96b8b 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/ordcsqdus8g8xmsa.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/ordcsqdus8g8xmsa.md" @@ -2,12 +2,10 @@ title: 第 10 章:封装 urlname: ordcsqdus8g8xmsa date: '2024-06-21 16:39:14' -updated: '2024-06-21 16:39:24' -description: 本章节介绍封装的概念,访问修饰符的种类及其使用方法,属性的定义和使用,索引器的应用,帮助读者理解和应用封装这一面向对象编程的重要特性,提升代码的安全性和可维护性。 +updated: '2024-06-23 21:04:19' +description: 'keywords: 封装, 访问修饰符, 属性, 索引器, C#面向对象封装是面向对象编程的四大基本特性之一。通过封装,我们可以隐藏对象的内部状态,只允许通过特定的方法访问和修改数据,从而保证数据的安全性和一致性。本章将详细介绍封装的概念、访问修饰符、属性及索引器的使用方法。什么是封装封装(E...' keywords: '封装, 访问修饰符, 属性, 索引器, C#面向对象' --- -## 前言 - 封装是面向对象编程的四大基本特性之一。通过封装,我们可以隐藏对象的内部状态,只允许通过特定的方法访问和修改数据,从而保证数据的安全性和一致性。本章将详细介绍封装的概念、访问修饰符、属性及索引器的使用方法。 ## 什么是封装 @@ -123,8 +121,5 @@ public class ShoppingCart 在上面的例子中,`ShoppingCart` 类定义了一个索引器,使我们可以通过索引访问购物车中的项目。 -## 小结 本章介绍了封装的概念、不同访问修饰符的使用方法、属性的定义和使用、以及索引器的应用。通过理解和应用封装,我们可以更好地保护数据的完整性,提高代码的可维护性和重用性。在实际开发中,合理使用封装是编写高质量代码的重要技巧。 - -【本章节完毕】 diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/ox3khairmgqwcy3l.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/ox3khairmgqwcy3l.md" index c8ad621..709e4ba 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/ox3khairmgqwcy3l.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/ox3khairmgqwcy3l.md" @@ -2,8 +2,8 @@ title: 第 20 章:你的下一步 urlname: ox3khairmgqwcy3l date: '2024-06-21 16:46:40' -updated: '2024-06-21 16:47:09' -description: 在本章中,我们将回顾整个 C#学习之旅,并探讨 C#的高级主题和新特性。还将推荐一些优质的 C#学习资源,并提供继续提升编程技能的方法。 +updated: '2024-06-23 21:06:07' +description: 'keywords: C#学习, 高级主题, 编程技能, 编程资源, 编程提升20.1 回顾你的 C#学习之旅在过去的章节中,我们从零开始,逐步深入地学习了 C#编程语言的各个方面。从基本语法到面向对象编程,从集合到 LINQ,再到异步编程和反射,每一步都为你打下了坚实的编程基础。回顾一下我们学...' keywords: 'C#学习, 高级主题, 编程技能, 编程资源, 编程提升' --- ## 20.1 回顾你的 C#学习之旅 @@ -109,8 +109,4 @@ public static decimal CalculateToll(object vehicle) => vehicle switch 通过写博客、录制视频教程或在技术论坛上回答问题,建立自己的技术影响力。 -## 20.5 致谢 - 感谢你一路学习 C#编程的坚持和努力。希望本书能够帮助你在 C#编程的道路上走得更远。如果你有任何问题或建议,欢迎在评论区留言讨论。 - -【本章节完毕】 diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/rxuh23os4gkbvdiy.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/rxuh23os4gkbvdiy.md" index b6b35fd..24ac0ad 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/rxuh23os4gkbvdiy.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/rxuh23os4gkbvdiy.md" @@ -2,12 +2,10 @@ title: 第 17 章:开发一个简单的游戏 urlname: rxuh23os4gkbvdiy date: '2024-06-21 16:45:36' -updated: '2024-06-21 16:45:52' -description: 本章节将指导你开发一个简单的游戏,从设计、界面开发到逻辑实现和测试优化,帮助你掌握 C# 实战技能。 +updated: '2024-06-23 21:05:29' +description: 'keywords: C# 游戏开发, C# 项目, 游戏设计, 游戏逻辑, 游戏优化在这一章中,我们将用 C# 开发一个简单的游戏。通过这个项目,你将学习如何设计游戏、开发游戏界面、实现游戏逻辑以及进行游戏测试和优化。这个项目不仅能帮助你巩固前面学到的 C#知识,还能让你在实践中体验开发游戏的...' keywords: 'C# 游戏开发, C# 项目, 游戏设计, 游戏逻辑, 游戏优化' --- -## 前言 - 在这一章中,我们将用 C# 开发一个简单的游戏。通过这个项目,你将学习如何设计游戏、开发游戏界面、实现游戏逻辑以及进行游戏测试和优化。这个项目不仅能帮助你巩固前面学到的 C#知识,还能让你在实践中体验开发游戏的乐趣。 ## 游戏设计 @@ -303,8 +301,6 @@ private void InitializeGameComponents() 2. **增加游戏难度**:随着得分的增加,可以逐渐提高游戏的速度,增加游戏的挑战性。 3. **丰富游戏体验**:可以增加道具、障碍物等元素,使游戏更具趣味性。 -## 总结 通过这一章的学习,我们完成了一个简单的贪吃蛇游戏的开发。从游戏设计、界面开发到逻辑实现和测试优化,你应该对 C# 的应用有了更深入的理解。希望你能继续探索和尝试,开发出更多有趣的项目。 -【本章节完毕】 diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/vpvppyhndghx56x3.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/vpvppyhndghx56x3.md" index 24a655e..ea6bcae 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/vpvppyhndghx56x3.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/vpvppyhndghx56x3.md" @@ -2,8 +2,8 @@ title: 第 11 章:集合 urlname: vpvppyhndghx56x3 date: '2024-06-21 16:41:11' -updated: '2024-06-21 16:41:24' -description: '探讨 C# 中集合的应用,包括 List、Dictionary 和 HashSet 的基本操作、定义、初始化及常见使用场景。' +updated: '2024-06-23 21:04:33' +description: 'keywords: 集合, List, Dictionary, HashSet, C#, 数据结构集合是编程中常用的数据结构之一,用于存储和管理一组数据。在 C# 中,集合类提供了丰富的功能,使得数据的存取和操作更加便捷高效。本章将详细介绍 List、Dictionary 和 HashSet 以及它们的常用操作。 @@ -398,13 +398,6 @@ class Program - Microsoft's official C# documentation on collections: [Introduction to Collections](https://docs.microsoft.com/en-us/dotnet/standard/collections/) - C# in Depth by Jon Skeet - A great book providing in-depth knowledge about C# and its features. -## 本章小结 - 在本章中,我们详细介绍了 C#中的集合类型,包括 `List`、`Dictionary` 和 `HashSet`,并且演示了它们的定义、初始化和常用操作。集合是编程中非常重要的工具,掌握它们将极大提高你的编程效率和代码质量。 希望通过本章的学习,你已经能够熟练应用这些集合类型来解决实际编程问题。在接下来的章节中,我们将继续探讨更多高级主题,进一步提升你的 C#编程技能。 - ---- - -【本章节完毕】 - diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/xow4xq2xbkemig5t.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/xow4xq2xbkemig5t.md" index d707ced..0637c51 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/xow4xq2xbkemig5t.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/xow4xq2xbkemig5t.md" @@ -2,12 +2,10 @@ title: 第 8 章:继承 urlname: xow4xq2xbkemig5t date: '2024-06-21 16:38:12' -updated: '2024-06-21 16:38:22' -description: 本章介绍了 C#中的继承概念,包括基类和派生类的定义、继承的实现、base 关键字的使用以及方法的重写,帮助读者掌握面向对象编程的核心技术之一。 +updated: '2024-06-23 21:03:52' +description: 'keywords: 继承, C# 继承, 基类和派生类, 方法重写, base 关键字继承是面向对象编程(OOP)的一个核心概念,它允许我们创建一个基类,并让其他类从这个基类继承,从而共享其方法和属性。这不仅提高了代码的重用性,还促进了代码的组织和维护。8.1 什么是继承继承是一种机制,它允许...' keywords: '继承, C# 继承, 基类和派生类, 方法重写, base 关键字' --- -## 前言 - 继承是面向对象编程(OOP)的一个核心概念,它允许我们创建一个基类,并让其他类从这个基类继承,从而共享其方法和属性。这不仅提高了代码的重用性,还促进了代码的组织和维护。 ## 8.1 什么是继承 @@ -171,8 +169,4 @@ public class Cat : Animal 在这个示例中,`Cat`类重写了`Animal`类的`Eat`方法,以提供不同的实现。 -## 总结 - 通过继承,代码得以重用和组织,更容易管理。理解和使用继承是掌握面向对象编程的重要一步。在下一章,我们将探讨多态,这是 OOP 的另一个关键概念。 - -【本章节完毕】 diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/xzt3w7c6r9o99dy9.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/xzt3w7c6r9o99dy9.md" index e0bb4a4..2765cf3 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/xzt3w7c6r9o99dy9.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/xzt3w7c6r9o99dy9.md" @@ -2,8 +2,8 @@ title: 第 12 章:委托和事件 urlname: xzt3w7c6r9o99dy9 date: '2024-06-21 16:41:27' -updated: '2024-06-21 16:41:55' -description: 本章介绍 C#中的委托和事件,包括委托的定义与使用、多播委托、事件的定义与触发等内容,帮助读者掌握这一重要编程概念。 +updated: '2024-06-23 21:04:41' +description: 'keywords: 委托, 事件, C#高级编程, 多播委托, 事件触发在 C#编程中,委托和事件是两个非常重要的概念,它们为编写灵活和响应式的代码提供了强大的机制。本章将详细介绍委托和事件的概念、定义和使用,以及它们在实际编程中的应用。什么是委托委托是一种引用类型,它可以持有指向某个方法的引...' keywords: '委托, 事件, C#高级编程, 多播委托, 事件触发' --- 在 C#编程中,委托和事件是两个非常重要的概念,它们为编写灵活和响应式的代码提供了强大的机制。本章将详细介绍委托和事件的概念、定义和使用,以及它们在实际编程中的应用。 @@ -171,8 +171,4 @@ public class Program 2. **可扩展性**:通过事件机制,可以轻松地添加或移除事件处理程序,而不会影响现有代码。 3. **增强代码可读性**:事件使得代码结构更清晰,易于维护。 -## 小结 - 在本章中,我们深入探讨了委托和事件的概念及其在 C#编程中的应用。通过定义和使用委托,我们可以实现灵活的方法调用机制,而事件则提供了一种高效的发布-订阅模型,使得代码更加模块化和易于维护。在接下来的章节中,我们将继续探讨 C#的其他高级主题,帮助你进一步提升编程技能。 - -【本章节完毕】 diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/yzb9otcc53egu51a.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/yzb9otcc53egu51a.md" index 39403e9..d0c7d61 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/yzb9otcc53egu51a.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/yzb9otcc53egu51a.md" @@ -2,7 +2,7 @@ title: 第 6 章:异常处理 urlname: yzb9otcc53egu51a date: '2024-06-21 16:37:49' -updated: '2024-06-21 16:37:59' +updated: '2024-06-23 21:03:10' description: 本章详细介绍了 C#中的异常处理机制,包括异常的类型、try-catch-finally 语句的使用、如何抛出异常以及如何定义自定义异常。通过图文结合的方式帮助读者深刻理解异常处理的原理和应用。 keywords: '异常处理, C#异常, try-catch-finally, 自定义异常, 抛出异常' --- @@ -94,8 +94,5 @@ public void CheckAge(int age) { 在该示例中,定义了一个名为`InvalidAgeException`的自定义异常类,并在`CheckAge`方法中使用该异常。 -## 总结 - 通过本章的学习,您应该已经掌握了 C#中的异常处理机制,包括如何使用`try-catch-finally`语句、如何手动抛出异常以及如何定义自定义异常。异常处理对于编写健壮和稳定的代码至关重要,希望您能够深入理解并熟练应用。 -【本章节完毕】 diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/zcn7ze3o53dx0bld.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/zcn7ze3o53dx0bld.md" index 3af4768..9e7f762 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/zcn7ze3o53dx0bld.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/zcn7ze3o53dx0bld.md" @@ -2,8 +2,8 @@ title: 第 16 章:特性 urlname: zcn7ze3o53dx0bld date: '2024-06-21 16:45:17' -updated: '2024-06-21 16:45:35' -description: 本章将详细介绍 C#中的特性,包括其定义、使用方法以及内置和自定义特性的具体操作。还将讨论如何使用反射来读取特性。 +updated: '2024-06-23 21:05:17' +description: 'keywords: C#特性, 特性定义, 内置特性, 自定义特性, C#反射什么是特性特性(Attribute)是 C#中的一种强大工具,使得开发者可以在代码中添加元数据。特性可以应用于几乎所有的 C#代码元素,包括类、方法、属性、字段等。通过特性,可以方便地对代码的行为进行标注和控制。特性...' keywords: 'C#特性, 特性定义, 内置特性, 自定义特性, C#反射' --- ## 什么是特性 @@ -154,8 +154,5 @@ public class Program 上述代码演示了如何使用反射来获取类和方法上的自定义特性,并输出其描述信息。 -## 总结 - 在 C#中,特性是一种强大的工具,通过它可以方便地为代码元素添加元数据,并在运行时读取和使用这些元数据。通过学习本章内容,你应该能够定义和使用特性,理解内置特性的应用场景,并使用反射来读取特性信息。 -【本章节完毕】 diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/zylpxs4lmgadb6pu.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/zylpxs4lmgadb6pu.md" index eca2f09..11b0cd5 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/zylpxs4lmgadb6pu.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/C#/zylpxs4lmgadb6pu.md" @@ -2,12 +2,10 @@ title: 第 5 章:字符串 urlname: zylpxs4lmgadb6pu date: '2024-06-21 16:37:36' -updated: '2024-06-21 16:37:48' +updated: '2024-06-23 21:02:59' description: 本章将深入探讨 C#中的字符串操作,包括拼接、截取、分割等基本操作,及其常用方法和正则表达式的应用。 keywords: '字符串操作, 字符串方法, 正则表达式, C#基础, 编程学习' --- -## 前言 - 字符串是程序中常见的数据类型之一,无论是处理用户输入、生成输出,还是进行数据处理,字符串都扮演着重要的角色。本章将详细介绍 C#中的字符串及其基本操作和常用方法,同时深入探讨正则表达式在字符串操作中的应用。 ## 5.1 什么是字符串 diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/Rust/gmxq1nek2xn8eefx.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/Rust/gmxq1nek2xn8eefx.md" index 808960e..0449e74 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/Rust/gmxq1nek2xn8eefx.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/Rust/gmxq1nek2xn8eefx.md" @@ -2,8 +2,8 @@ title: 第 14 章:Rust 和其他语言的交互 urlname: gmxq1nek2xn8eefx date: '2024-06-20 19:54:07' -updated: '2024-06-20 19:54:28' -description: 本章详细探讨 Rust 如何与其他编程语言进行交互,包括与 C 语言、Python、Node.js 和 Java 的集成,以及 Rust 和 WebAssembly 的使用。 +updated: '2024-06-23 21:01:27' +description: 'keywords: Rust, 交互, C 语言, Python, Node.js, WebAssembly在现代软件开发中,语言间的互操作性变得越来越重要。Rust 以其安全性、高性能和并发性著称,但在某些情况下,我们仍需要与其他编程语言进行交互。本章将详细探讨 Rust 如何与 C 语言、...' keywords: 'Rust, 交互, C 语言, Python, Node.js, WebAssembly' --- 在现代软件开发中,语言间的互操作性变得越来越重要。Rust 以其安全性、高性能和并发性著称,但在某些情况下,我们仍需要与其他编程语言进行交互。本章将详细探讨 Rust 如何与 C 语言、Python、Node.js 和 Java 进行交互,以及如何利用 Rust 和 WebAssembly 开发高效的 Web 应用。 diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/Rust/nicvmb8rysuguw8d.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/Rust/nicvmb8rysuguw8d.md" index 253d8b1..9ef44e9 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/Rust/nicvmb8rysuguw8d.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/Rust/nicvmb8rysuguw8d.md" @@ -2,8 +2,8 @@ title: 第 15 章:Rust 社区和学习资源 urlname: nicvmb8rysuguw8d date: '2024-06-20 19:54:29' -updated: '2024-06-20 19:54:59' -description: 本章将重点介绍 Rust 社区和学习资源,包括官方文档、论坛、聊天室、博客、播客、会议和活动,以及如何继续你的 Rust 学习之旅。 +updated: '2024-06-23 21:01:35' +description: 'keywords: Rust 社区, Rust 学习资源, Rust 论坛, Rust 活动, Rust 继续学习在学习 Rust 编程语言的过程中,掌握好社区资源和学习途径至关重要。本章将介绍 Rust 官方网站和文档、Rust 论坛和聊天室、Rust 博客和播客、Rust 会议和活动,并提...' keywords: 'Rust 社区, Rust 学习资源, Rust 论坛, Rust 活动, Rust 继续学习' --- 在学习 Rust 编程语言的过程中,掌握好社区资源和学习途径至关重要。本章将介绍 Rust 官方网站和文档、Rust 论坛和聊天室、Rust 博客和播客、Rust 会议和活动,并提供建议以继续你的 Rust 学习之旅。 diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/Rust/upsy7mxpgl7y6uqf.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/Rust/upsy7mxpgl7y6uqf.md" index 53bb746..91569ae 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/Rust/upsy7mxpgl7y6uqf.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/Rust/upsy7mxpgl7y6uqf.md" @@ -1,9 +1,9 @@ --- -title: d第 12 章:构建 Web 应用 +title: 第 12 章:构建 Web 应用 urlname: upsy7mxpgl7y6uqf date: '2024-06-20 19:48:23' -updated: '2024-06-23 20:33:28' -description: 本章节详细介绍如何使用 Rust 构建 Web 应用,包括 Web 框架的选择、处理 HTTP 请求、数据库操作,以及部署方法等内容。 +updated: '2024-06-23 21:01:05' +description: 'keywords: Rust Web 应用, Rust HTTP 请求, Rust 数据库操作, Rust Web 部署, Rust Web 框架在现代软件开发中,Web 应用已经成为不可或缺的一部分。本章将带你深入了解如何使用 Rust 构建一个高效、可靠的 Web 应用。我们将涵盖 Web...' keywords: 'Rust Web 应用, Rust HTTP 请求, Rust 数据库操作, Rust Web 部署, Rust Web 框架' --- 在现代软件开发中,Web 应用已经成为不可或缺的一部分。本章将带你深入了解如何使用 Rust 构建一个高效、可靠的 Web 应用。我们将涵盖 Web 框架的选择、处理 HTTP 请求、数据库操作,以及如何部署你的 Web 应用。 @@ -262,545 +262,7 @@ git add . git commit -m "Initial commit" git push heroku main ``` -## 结论 -通过本章的学习,你已经掌握了使用 Rust 构建 Web 应用的基本知识。从选择合适的 Web 框架,到处理 HTTP 请求,再到数据库操作和部署,你已经具备了构建和发布一个完整 Web 应用的能力。未来,你可以根据需求进一步--- -keywords: Rust Web 应用, Rust HTTP 请求, Rust 数据库操作, Rust Web 部署, Rust Web 框架 -description: 本章节详细介绍如何使用 Rust 构建 Web 应用,包括 Web 框架的选择、处理 HTTP 请求、数据库操作,以及部署方法等内容。 ---- - -# 第 12 章:构建 Web 应用 -在现代软件开发中,Web 应用已经成为不可或缺的一部分。本章将带你深入了解如何使用 Rust 构建一个高效、可靠的 Web 应用。我们将涵盖 Web 框架的选择、处理 HTTP 请求、数据库操作,以及如何部署你的 Web 应用。 -## 12.1 Web 框架介绍 -在 Rust 生态中,有许多优秀的 Web 框架,例如 **Rocket**、**Actix-web** 和 **Warp**。每个框架都有其独特的特点和适用场景。 -### 12.1.1 Rocket -Rocket 是一个简洁且强大的 Web 框架,注重安全性和类型安全。它的优点是易于上手和配置,但需要 nightly 版本的 Rust。 -```rust -#[macro_use] extern crate rocket; - -#[get("/")] -fn index() -> &'static str { - "Hello, world!" -} - -fn main() { - rocket::ignite().mount("/", routes![index]).launch(); -} -``` -### 12.1.2 Actix-web -Actix-web 是一个高性能、灵活的 Web 框架,支持异步编程,适用于构建高并发应用。 -```rust -use actix_web::{web, App, HttpServer, Responder}; - -async fn greet() -> impl Responder { - "Hello, world!" -} - -#[actix_web::main] -async fn main() -> std::io::Result<()> { - HttpServer::new(|| { - App::new() - .route("/", web::get().to(greet)) - }) - .bind("127.0.0.1:8080")? - .run() - .await -} -``` -### 12.1.3 Warp -Warp 是一个速度快且灵活的 Web 框架,使用 Filter 组合的方式定义路由,代码简洁且强大的类型系统使错误更容易被捕捉。 -```rust -use warp::Filter; - -#[tokio::main] -async fn main() { - let hello = warp::path::end() - .map(|| "Hello, world!"); - - warp::serve(hello) - .run(([127, 0, 0, 1], 3030)) - .await; -} -``` -## 12.2 处理 HTTP 请求 -处理 HTTP 请求是 Web 应用的核心功能之一。我们将以 Actix-web 为例,展示如何处理不同类型的 HTTP 请求。 -### 12.2.1 GET 请求 -GET 请求通常用于请求数据。例如,获取一个用户的信息: -```rust -use actix_web::{web, App, HttpServer, Responder}; - -async fn get_user() -> impl Responder { - "User info" -} - -#[actix_web::main] -async fn main() -> std::io::Result<()> { - HttpServer::new(|| { - App::new() - .route("/user", web::get().to(get_user)) - }) - .bind("127.0.0.1:8080")? - .run() - .await -} -``` -### 12.2.2 POST 请求 -POST 请求通常用于提交数据。例如,创建一个新用户: -```rust -use actix_web::{web, App, HttpServer, Responder, HttpResponse}; - -async fn create_user(user: web::Json) -> impl Responder { - HttpResponse::Ok().json(user.into_inner()) -} - -#[derive(serde::Deserialize)] -struct User { - name: String, - age: u32, -} - -#[actix_web::main] -async fn main() -> std::io::Result<()> { - HttpServer::new(|| { - App::new() - .route("/user", web::post().to(create_user)) - }) - .bind("127.0.0.1:8080")? - .run() - .await -} -``` -### 12.2.3 PUT 请求 -PUT 请求通常用于更新数据。例如,更新用户的信息: -```rust -async fn update_user(user: web::Json) -> impl Responder { - HttpResponse::Ok().json(user.into_inner()) -} - -#[actix_web::main] -async fn main() -> std::io::Result<()> { - HttpServer::new(|| { - App::new() - .route("/user", web::put().to(update_user)) - }) - .bind("127.0.0.1:8080")? - .run() - .await -} -``` -### 12.2.4 DELETE 请求 -DELETE 请求用于删除数据。例如,删除一个用户: -```rust -async fn delete_user() -> impl Responder { - HttpResponse::Ok().body("User deleted") -} - -#[actix_web::main] -async fn main() -> std::io::Result<()> { - HttpServer::new(|| { - App::new() - .route("/user", web::delete().to(delete_user)) - }) - .bind("127.0.0.1:8080")? - .run() - .await -} -``` -## 12.3 数据库操作 -在 Web 应用中,数据库操作是必不可少的。我们将使用 **Diesel** 这个 ORM 框架来管理数据库。 -### 12.3.1 安装 Diesel -首先,安装 Diesel CLI 工具: -```shell -cargo install diesel_cli --no-default-features --features sqlite -``` -然后,在 `Cargo.toml` 文件中添加 Diesel 的依赖: -```toml -[dependencies] -diesel = { version = "1.4.5", features = ["sqlite"] } -``` -### 12.3.2 配置数据库 -在项目根目录下创建一个 `diesel.toml` 文件,配置数据库连接: -```toml -[print_schema] -file = "src/schema.rs" - -[development] -database_url = "test.db" -``` -### 12.3.3 定义模型和 schema -定义一个用户模型和相应的数据库表结构: -```rust -use diesel::prelude::*; -use diesel::sqlite::SqliteConnection; - -#[derive(Queryable)] -struct User { - id: i32, - name: String, - age: i32, -} - -table! { - users (id) { - id -> Integer, - name -> Text, - age -> Integer, - } -} -``` -### 12.3.4 数据库操作示例 -创建、读取、更新和删除用户记录的示例代码: -```rust -use diesel::prelude::*; -use diesel::sqlite::SqliteConnection; - -pub fn create_user(conn: &SqliteConnection, name: &str, age: i32) -> usize { - use crate::schema::users; - - let new_user = NewUser { name, age }; - - diesel::insert_into(users::table) - .values(&new_user) - .execute(conn) - .expect("Error creating new user") -} - -pub fn get_all_users(conn: &SqliteConnection) -> Vec { - use crate::schema::users::dsl::*; - - users - .load::(conn) - .expect("Error loading users") -} - -pub fn update_user(conn: &SqliteConnection, user_id: i32, new_name: &str) -> usize { - use crate::schema::users::dsl::*; - - diesel::update(users.find(user_id)) - .set(name.eq(new_name)) - .execute(conn) - .expect("Error updating user") -} - -pub fn delete_user(conn: &SqliteConnection, user_id: i32) -> usize { - use crate::schema::users::dsl::*; - - diesel::delete(users.find(user_id)) - .execute(conn) - .expect("Error deleting user") -} -``` -## 12.4 部署 Web 应用 -最后,我们讨论如何部署你的 Web 应用。可以选择将应用部署到云服务器或容器中。 -### 12.4.1 使用 Docker 部署 -Docker 是一种流行的容器化技术,可以让你的应用在任何地方运行。 -#### 创建 Dockerfile -首先,在项目根目录下创建一个 `Dockerfile` 文件: -```dockerfile -FROM rust:1.56 - -WORKDIR /usr/src/myapp -COPY . . - -RUN cargo install --path . - -CMD ["myapp"] -``` -#### 构建和运行 Docker 镜像 -使用以下命令构建和运行 Docker 镜像: -```shell -docker build -t myapp . -docker run -p 8080:8080 myapp -``` -### 12.4.2 部署到 Heroku -Heroku 是一种流行的云平台服务,支持快速部署和扩展。 -#### 创建 Heroku 应用 -首先,在 Heroku 上创建一个新的应用: -```shell -heroku create myapp -``` -#### 部署代码 -使用 Git 将代码推送到 Heroku: -```shell -git add . -git commit -m "Initial commit" -git push heroku main -``` -## 结论 -通过本章的学习,你已经掌握了使用 Rust 构建 Web 应用的基本知识。从选择合适的 Web 框架,到处理 HTTP 请求,再到数据库操作和部署,你已经具备了构建和发布一个完整 Web 应用的能力。未来,你可以根据需求进一步--- -keywords: Rust Web 应用, Rust HTTP 请求, Rust 数据库操作, Rust Web 部署, Rust Web 框架 -description: 本章节详细介绍如何使用 Rust 构建 Web 应用,包括 Web 框架的选择、处理 HTTP 请求、数据库操作,以及部署方法等内容。 - ---- - -# 第 12 章:构建 Web 应用 -在现代软件开发中,Web 应用已经成为不可或缺的一部分。本章将带你深入了解如何使用 Rust 构建一个高效、可靠的 Web 应用。我们将涵盖 Web 框架的选择、处理 HTTP 请求、数据库操作,以及如何部署你的 Web 应用。 -## 12.1 Web 框架介绍 -在 Rust 生态中,有许多优秀的 Web 框架,例如 **Rocket**、**Actix-web** 和 **Warp**。每个框架都有其独特的特点和适用场景。 -### 12.1.1 Rocket -Rocket 是一个简洁且强大的 Web 框架,注重安全性和类型安全。它的优点是易于上手和配置,但需要 nightly 版本的 Rust。 - - - -# 第 12 章:构建 Web 应用 -在现代软件开发中,Web 应用已经成为不可或缺的一部分。本章将带你深入了解如何使用 Rust 构建一个高效、可靠的 Web 应用。我们将涵盖 Web 框架的选择、处理 HTTP 请求、数据库操作,以及如何部署你的 Web 应用。 -## 12.1 Web 框架介绍 -在 Rust 生态中,有许多优秀的 Web 框架,例如 **Rocket**、**Actix-web** 和 **Warp**。每个框架都有其独特的特点和适用场景。 -### 12.1.1 Rocket -Rocket 是一个简洁且强大的 Web 框架,注重安全性和类型安全。它的优点是易于上手和配置,但需要 nightly 版本的 Rust。 -```rust -#[macro_use] extern crate rocket; - -#[get("/")] -fn index() -> &'static str { - "Hello, world!" -} - -fn main() { - rocket::ignite().mount("/", routes![index]).launch(); -} -``` -### 12.1.2 Actix-web -Actix-web 是一个高性能、灵活的 Web 框架,支持异步编程,适用于构建高并发应用。 -```rust -use actix_web::{web, App, HttpServer, Responder}; - -async fn greet() -> impl Responder { - "Hello, world!" -} - -#[actix_web::main] -async fn main() -> std::io::Result<()> { - HttpServer::new(|| { - App::new() - .route("/", web::get().to(greet)) - }) - .bind("127.0.0.1:8080")? - .run() - .await -} -``` -### 12.1.3 Warp -Warp 是一个速度快且灵活的 Web 框架,使用 Filter 组合的方式定义路由,代码简洁且强大的类型系统使错误更容易被捕捉。 -```rust -use warp::Filter; - -#[tokio::main] -async fn main() { - let hello = warp::path::end() - .map(|| "Hello, world!"); - - warp::serve(hello) - .run(([127, 0, 0, 1], 3030)) - .await; -} -``` -## 12.2 处理 HTTP 请求 -处理 HTTP 请求是 Web 应用的核心功能之一。我们将以 Actix-web 为例,展示如何处理不同类型的 HTTP 请求。 -### 12.2.1 GET 请求 -GET 请求通常用于请求数据。例如,获取一个用户的信息: -```rust -use actix_web::{web, App, HttpServer, Responder}; - -async fn get_user() -> impl Responder { - "User info" -} - -#[actix_web::main] -async fn main() -> std::io::Result<()> { - HttpServer::new(|| { - App::new() - .route("/user", web::get().to(get_user)) - }) - .bind("127.0.0.1:8080")? - .run() - .await -} -``` -### 12.2.2 POST 请求 -POST 请求通常用于提交数据。例如,创建一个新用户: -```rust -use actix_web::{web, App, HttpServer, Responder, HttpResponse}; - -async fn create_user(user: web::Json) -> impl Responder { - HttpResponse::Ok().json(user.into_inner()) -} - -#[derive(serde::Deserialize)] -struct User { - name: String, - age: u32, -} - -#[actix_web::main] -async fn main() -> std::io::Result<()> { - HttpServer::new(|| { - App::new() - .route("/user", web::post().to(create_user)) - }) - .bind("127.0.0.1:8080")? - .run() - .await -} -``` -### 12.2.3 PUT 请求 -PUT 请求通常用于更新数据。例如,更新用户的信息: -```rust -async fn update_user(user: web::Json) -> impl Responder { - HttpResponse::Ok().json(user.into_inner()) -} - -#[actix_web::main] -async fn main() -> std::io::Result<()> { - HttpServer::new(|| { - App::new() - .route("/user", web::put().to(update_user)) - }) - .bind("127.0.0.1:8080")? - .run() - .await -} -``` -### 12.2.4 DELETE 请求 -DELETE 请求用于删除数据。例如,删除一个用户: -```rust -async fn delete_user() -> impl Responder { - HttpResponse::Ok().body("User deleted") -} - -#[actix_web::main] -async fn main() -> std::io::Result<()> { - HttpServer::new(|| { - App::new() - .route("/user", web::delete().to(delete_user)) - }) - .bind("127.0.0.1:8080")? - .run() - .await -} -``` -## 12.3 数据库操作 -在 Web 应用中,数据库操作是必不可少的。我们将使用 **Diesel** 这个 ORM 框架来管理数据库。 -### 12.3.1 安装 Diesel -首先,安装 Diesel CLI 工具: -```shell -cargo install diesel_cli --no-default-features --features sqlite -``` -然后,在 `Cargo.toml` 文件中添加 Diesel 的依赖: -```toml -[dependencies] -diesel = { version = "1.4.5", features = ["sqlite"] } -``` -### 12.3.2 配置数据库 -在项目根目录下创建一个 `diesel.toml` 文件,配置数据库连接: -```toml -[print_schema] -file = "src/schema.rs" - -[development] -database_url = "test.db" -``` -### 12.3.3 定义模型和 schema -定义一个用户模型和相应的数据库表结构: -```rust -use diesel::prelude::*; -use diesel::sqlite::SqliteConnection; - -#[derive(Queryable)] -struct User { - id: i32, - name: String, - age: i32, -} - -table! { - users (id) { - id -> Integer, - name -> Text, - age -> Integer, - } -} -``` -### 12.3.4 数据库操作示例 -创建、读取、更新和删除用户记录的示例代码: -```rust -use diesel::prelude::*; -use diesel::sqlite::SqliteConnection; - -pub fn create_user(conn: &SqliteConnection, name: &str, age: i32) -> usize { - use crate::schema::users; - - let new_user = NewUser { name, age }; - - diesel::insert_into(users::table) - .values(&new_user) - .execute(conn) - .expect("Error creating new user") -} - -pub fn get_all_users(conn: &SqliteConnection) -> Vec { - use crate::schema::users::dsl::*; - - users - .load::(conn) - .expect("Error loading users") -} - -pub fn update_user(conn: &SqliteConnection, user_id: i32, new_name: &str) -> usize { - use crate::schema::users::dsl::*; - - diesel::update(users.find(user_id)) - .set(name.eq(new_name)) - .execute(conn) - .expect("Error updating user") -} - -pub fn delete_user(conn: &SqliteConnection, user_id: i32) -> usize { - use crate::schema::users::dsl::*; - - diesel::delete(users.find(user_id)) - .execute(conn) - .expect("Error deleting user") -} -``` -## 12.4 部署 Web 应用 -最后,我们讨论如何部署你的 Web 应用。可以选择将应用部署到云服务器或容器中。 -### 12.4.1 使用 Docker 部署 -Docker 是一种流行的容器化技术,可以让你的应用在任何地方运行。 -#### 创建 Dockerfile -首先,在项目根目录下创建一个 `Dockerfile` 文件: -```dockerfile -FROM rust:1.56 - -WORKDIR /usr/src/myapp -COPY . . - -RUN cargo install --path . - -CMD ["myapp"] -``` -#### 构建和运行 Docker 镜像 -使用以下命令构建和运行 Docker 镜像: -```shell -docker build -t myapp . -docker run -p 8080:8080 myapp -``` -### 12.4.2 部署到 Heroku -Heroku 是一种流行的云平台服务,支持快速部署和扩展。 -#### 创建 Heroku 应用 -首先,在 Heroku 上创建一个新的应用: -```shell -heroku create myapp -``` -#### 部署代码 -使用 Git 将代码推送到 Heroku: -```shell -git add . -git commit -m "Initial commit" -git push heroku main -``` -## 结论 -通过本章的学习,你已经掌握了使用 Rust 构建 Web 应用的基本知识。从选择合适的 Web 框架,到处理 HTTP 请求,再到数据库操作和部署,你已经具备了构建和发布一个完整 Web 应用的能力。未来,你可以根据需求进一步--- ## 12.5 安全性 在构建 Web 应用时,安全性是一个不可忽视的重要方面。我们将探讨如何在 Rust 应用中实现常见的安全措施。 ### 12.5.1 防止 SQL 注入 @@ -911,6 +373,5 @@ async fn main() -> std::io::Result<()> { .await } ``` -## 12.7 结论 + 通过本章的学习,你已经掌握了使用 Rust 构建 Web 应用的基本知识。从选择合适的 Web 框架,到处理 HTTP 请求,再到数据库操作、安全措施、日志和监控,已经具备了构建和发布一个完整 Web 应用的能力。未来,你可以根据需求进一步优化和扩展你的 Web 应用,更加深入地探索 Rust 在 Web 开发中的潜力。 -【本章节完毕】 diff --git "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/Rust/zd6i0smgxmx9hc4r.md" "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/Rust/zd6i0smgxmx9hc4r.md" index 0f1b77b..b242d35 100644 --- "a/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/Rust/zd6i0smgxmx9hc4r.md" +++ "b/docs/doc/\360\237\222\273 \347\274\226\347\250\213\350\257\255\350\250\200/Rust/zd6i0smgxmx9hc4r.md" @@ -2,8 +2,8 @@ title: 第 13 章:系统编程和嵌入式开发 urlname: zd6i0smgxmx9hc4r date: '2024-06-20 19:53:21' -updated: '2024-06-20 19:54:06' -description: 本章将深入探讨 Rust 在系统编程和嵌入式开发中的应用,包括文件和目录操作、进程和信号处理、网络编程以及嵌入式系统开发。 +updated: '2024-06-23 21:01:17' +description: 'keywords: 系统编程, 嵌入式开发, Rust 文件操作, 网络编程, 信号处理在本章中,我们将探讨 Rust 语言在系统编程和嵌入式开发中的应用。Rust 的内存安全性和高性能特性使其成为系统级编程和嵌入式开发的理想选择。我们将涵盖以下内容:文件和目录操作进程和信号处理网络编程嵌入式...' keywords: '系统编程, 嵌入式开发, Rust 文件操作, 网络编程, 信号处理' --- 在本章中,我们将探讨 Rust 语言在系统编程和嵌入式开发中的应用。Rust 的内存安全性和高性能特性使其成为系统级编程和嵌入式开发的理想选择。我们将涵盖以下内容: diff --git a/elog.cache.json b/elog.cache.json index d3f3680..ba966d4 100644 --- a/elog.cache.json +++ b/elog.cache.json @@ -5152,13 +5152,13 @@ { "id": 170598462, "doc_id": "qfaugcu7d1ucqdq5", - "updated": 1718810400000, + "updated": 1719146851000, "properties": { "title": "更新日志", "urlname": "qfaugcu7d1ucqdq5", "date": "2024-05-22 08:47:22", - "updated": "2024-06-19 23:20:00", - "description": "---nav_path: changelog---2024-6-19新增内容:新增Go语言相关内容新增最强前端、最强后端相关内容新增友情链接功能2024-6-13优化网站排版:防止页面崩溃更新主页Icon增加网页动态效果适配部分移动端机型2024-6-06导航栏优化增加微信二维码增加友情链接增...", + "updated": "2024-06-23 20:47:31", + "description": "---nav_path: changelog2024-6-23新增keywords关键词2024-6-19新增内容:新增Go语言相关内容新增最强前端、最强后端相关内容新增友情链接功能2024-6-13优化网站排版:防止页面崩溃更新主页Icon增加网页动态效果适配部分移动端机型2024-6-06...", "nav_path": "changelog" }, "catalog": [ @@ -9008,13 +9008,13 @@ { "id": 174668839, "doc_id": "els4225swlif6gyw", - "updated": 1718959612000, + "updated": 1719147953000, "properties": { "title": "第 19 章:开发一个机器学习应用", "urlname": "els4225swlif6gyw", "date": "2024-06-21 16:46:41", - "updated": "2024-06-21 16:46:52", - "description": "本章节将介绍如何在 C# 中开发一个机器学习应用,包括数据准备和预处理、模型训练和评估,以及模型的使用和部署。", + "updated": "2024-06-23 21:05:53", + "description": "keywords: 机器学习, 数据预处理, 模型训练, 模型评估, 模型部署机器学习基础在开始我们的实际开发之前,首先要了解一些机器学习的基本概念。机器学习是一种通过数据来训练模型,从而使计算机能够在没有明确编程的情况下进行预测或决策的技术。机器学习的基本流程数据收集:获取用于训练模型的数据...", "keywords": "机器学习, 数据预处理, 模型训练, 模型评估, 模型部署" }, "catalog": [ @@ -9034,13 +9034,13 @@ { "id": 174668832, "doc_id": "ox3khairmgqwcy3l", - "updated": 1718959629000, + "updated": 1719147967000, "properties": { "title": "第 20 章:你的下一步", "urlname": "ox3khairmgqwcy3l", "date": "2024-06-21 16:46:40", - "updated": "2024-06-21 16:47:09", - "description": "在本章中,我们将回顾整个 C#学习之旅,并探讨 C#的高级主题和新特性。还将推荐一些优质的 C#学习资源,并提供继续提升编程技能的方法。", + "updated": "2024-06-23 21:06:07", + "description": "keywords: C#学习, 高级主题, 编程技能, 编程资源, 编程提升20.1 回顾你的 C#学习之旅在过去的章节中,我们从零开始,逐步深入地学习了 C#编程语言的各个方面。从基本语法到面向对象编程,从集合到 LINQ,再到异步编程和反射,每一步都为你打下了坚实的编程基础。回顾一下我们学...", "keywords": "C#学习, 高级主题, 编程技能, 编程资源, 编程提升" }, "catalog": [ @@ -9060,13 +9060,13 @@ { "id": 174668764, "doc_id": "dnspn99ighi70h51", - "updated": 1719146150000, + "updated": 1719147941000, "properties": { "title": "第 18 章:开发一个博客系统", "urlname": "dnspn99ighi70h51", "date": "2024-06-21 16:46:19", - "updated": "2024-06-23 20:35:50", - "description": "读者开发一个完整的博客系统,从系统需求分析到数据库设计,再到后端 API 开发和前端界面开发,以及系统的最终测试和部署。", + "updated": "2024-06-23 21:05:41", + "description": "keywords: 博客系统开发, C# 编程, 后端 API, 前端开发, 数据库设计在本章中,我们将带领读者开发一个简单而功能齐全的博客系统。从系统需求分析开始,我们将逐步完成数据库设计、后端 API 开发、前端界面开发,并最终进行系统测试和部署。通过这个项目,读者将能够巩固之前所学的 C...", "keywords": "博客系统开发, C# 编程, 后端 API, 前端开发, 数据库设计" }, "catalog": [ @@ -9086,13 +9086,13 @@ { "id": 174668574, "doc_id": "rxuh23os4gkbvdiy", - "updated": 1718959552000, + "updated": 1719147929000, "properties": { "title": "第 17 章:开发一个简单的游戏", "urlname": "rxuh23os4gkbvdiy", "date": "2024-06-21 16:45:36", - "updated": "2024-06-21 16:45:52", - "description": "本章节将指导你开发一个简单的游戏,从设计、界面开发到逻辑实现和测试优化,帮助你掌握 C# 实战技能。", + "updated": "2024-06-23 21:05:29", + "description": "keywords: C# 游戏开发, C# 项目, 游戏设计, 游戏逻辑, 游戏优化在这一章中,我们将用 C# 开发一个简单的游戏。通过这个项目,你将学习如何设计游戏、开发游戏界面、实现游戏逻辑以及进行游戏测试和优化。这个项目不仅能帮助你巩固前面学到的 C#知识,还能让你在实践中体验开发游戏的...", "keywords": "C# 游戏开发, C# 项目, 游戏设计, 游戏逻辑, 游戏优化" }, "catalog": [ @@ -9112,13 +9112,13 @@ { "id": 174668523, "doc_id": "zcn7ze3o53dx0bld", - "updated": 1718959535000, + "updated": 1719147917000, "properties": { "title": "第 16 章:特性", "urlname": "zcn7ze3o53dx0bld", "date": "2024-06-21 16:45:17", - "updated": "2024-06-21 16:45:35", - "description": "本章将详细介绍 C#中的特性,包括其定义、使用方法以及内置和自定义特性的具体操作。还将讨论如何使用反射来读取特性。", + "updated": "2024-06-23 21:05:17", + "description": "keywords: C#特性, 特性定义, 内置特性, 自定义特性, C#反射什么是特性特性(Attribute)是 C#中的一种强大工具,使得开发者可以在代码中添加元数据。特性可以应用于几乎所有的 C#代码元素,包括类、方法、属性、字段等。通过特性,可以方便地对代码的行为进行标注和控制。特性...", "keywords": "C#特性, 特性定义, 内置特性, 自定义特性, C#反射" }, "catalog": [ @@ -9138,12 +9138,12 @@ { "id": 174668451, "doc_id": "hen6f6d77mvbngfq", - "updated": 1718959508000, + "updated": 1719147905000, "properties": { "title": "第 15 章:反射", "urlname": "hen6f6d77mvbngfq", "date": "2024-06-21 16:44:42", - "updated": "2024-06-21 16:45:08", + "updated": "2024-06-23 21:05:05", "description": "探讨 C#中的反射机制,包括 Type 类的使用,如何获取类型信息,创建对象以及调用方法的具体实现。", "keywords": "反射, C# 反射, Type 类, 反射创建对象, 反射调用方法" }, @@ -9164,12 +9164,12 @@ { "id": 174668406, "doc_id": "ak0bv8yd7g5uooog", - "updated": 1719145688000, + "updated": 1719147898000, "properties": { "title": "第 14 章:异步编程", "urlname": "ak0bv8yd7g5uooog", "date": "2024-06-21 16:44:25", - "updated": "2024-06-23 20:28:08", + "updated": "2024-06-23 21:04:58", "description": "keywords: 异步编程, Task, async 等待, 并行编程。在现代编程中,异步编程(Asynchronous Programming)是一项关键技术,能够显著提升应用程序的响应速度和性能。本章将深入探讨异步编程的概念,以及如何在 C#中使用 Task、Task以及 async 和...", "keywords": "异步编程, Task, async 等待, 并行编程。" }, @@ -9190,13 +9190,13 @@ { "id": 174668364, "doc_id": "ks16hc0d9oh0gryd", - "updated": 1718959464000, + "updated": 1719147892000, "properties": { "title": "第 13 章:LINQ", "urlname": "ks16hc0d9oh0gryd", "date": "2024-06-21 16:44:10", - "updated": "2024-06-21 16:44:24", - "description": "本章详细介绍了 LINQ 的基本概念、查询语法和方法语法,通过实例展示了如何在 C# 中使用 LINQ 来处理对象和 XML 数据。", + "updated": "2024-06-23 21:04:52", + "description": "keywords: LINQ, C# 查询语法, LINQ 方法语法, LINQ to Objects, LINQ to XML什么是 LINQLINQ (Language Integrated Query) 是一种在 C# 和其他 .NET 语言中用于查询数据的强大工具。它允许开发者以声明性...", "keywords": "LINQ, C# 查询语法, LINQ 方法语法, LINQ to Objects, LINQ to XML" }, "catalog": [ @@ -9216,13 +9216,13 @@ { "id": 174667819, "doc_id": "xzt3w7c6r9o99dy9", - "updated": 1718959315000, + "updated": 1719147881000, "properties": { "title": "第 12 章:委托和事件", "urlname": "xzt3w7c6r9o99dy9", "date": "2024-06-21 16:41:27", - "updated": "2024-06-21 16:41:55", - "description": "本章介绍 C#中的委托和事件,包括委托的定义与使用、多播委托、事件的定义与触发等内容,帮助读者掌握这一重要编程概念。", + "updated": "2024-06-23 21:04:41", + "description": "keywords: 委托, 事件, C#高级编程, 多播委托, 事件触发在 C#编程中,委托和事件是两个非常重要的概念,它们为编写灵活和响应式的代码提供了强大的机制。本章将详细介绍委托和事件的概念、定义和使用,以及它们在实际编程中的应用。什么是委托委托是一种引用类型,它可以持有指向某个方法的引...", "keywords": "委托, 事件, C#高级编程, 多播委托, 事件触发" }, "catalog": [ @@ -9242,13 +9242,13 @@ { "id": 174667769, "doc_id": "vpvppyhndghx56x3", - "updated": 1718959284000, + "updated": 1719147873000, "properties": { "title": "第 11 章:集合", "urlname": "vpvppyhndghx56x3", "date": "2024-06-21 16:41:11", - "updated": "2024-06-21 16:41:24", - "description": "探讨 C# 中集合的应用,包括 List、Dictionary 和 HashSet 的基本操作、定义、初始化及常见使用场景。", + "updated": "2024-06-23 21:04:33", + "description": "keywords: 集合, List, Dictionary, HashSet, C#, 数据结构集合是编程中常用的数据结构之一,用于存储和管理一组数据。在 C# 中,集合类提供了丰富的功能,使得数据的存取和操作更加便捷高效。本章将详细介绍 List、Dictionary0.5 2024-06-17T03:09:59.000Z - - https://offernow.cn/s/self_improve/code_snippet - weekly - 1.0 - 2024-05-27T06:39:04.000Z - https://offernow.cn/s/self_improve/install_env weekly @@ -174,6 +168,12 @@ 0.5 2024-05-28T09:26:16.000Z + + https://offernow.cn/s/self_improve/code_snippet + weekly + 1.0 + 2024-05-27T06:39:04.000Z + https://offernow.cn/s/cs_base weekly @@ -238,7 +238,7 @@ https://offernow.cn/s/cs_base/os/hand_os/vpcarog0vdzlbgx3 weekly 0.5 - 2024-06-23T12:46:56.119Z + 2024-06-23T13:06:40.279Z https://offernow.cn/s/cs_base/os/hand_os/ho88cbpxgbc2gpnf @@ -358,7 +358,7 @@ https://offernow.cn/s/cs_base/zk26wlg3ozzqospe weekly 1.0 - 2024-06-23T12:46:56.119Z + 2024-06-23T13:06:40.280Z https://offernow.cn/s/cs_base/zk26wlg3ozzqospe/hee9hlritx0n8hcc @@ -1012,25 +1012,25 @@ https://offernow.cn/s/language/rust/upsy7mxpgl7y6uqf weekly 0.5 - 2024-06-23T12:33:28.000Z + 2024-06-23T13:01:05.000Z https://offernow.cn/s/language/rust/zd6i0smgxmx9hc4r weekly 0.5 - 2024-06-20T11:54:06.000Z + 2024-06-23T13:01:17.000Z https://offernow.cn/s/language/rust/gmxq1nek2xn8eefx weekly 0.5 - 2024-06-20T11:54:28.000Z + 2024-06-23T13:01:27.000Z https://offernow.cn/s/language/rust/nicvmb8rysuguw8d weekly 0.5 - 2024-06-20T11:54:59.000Z + 2024-06-23T13:01:35.000Z https://offernow.cn/s/language/c_sharp @@ -1066,97 +1066,97 @@ https://offernow.cn/s/language/c_sharp/zylpxs4lmgadb6pu weekly 0.5 - 2024-06-21T08:37:48.000Z + 2024-06-23T13:02:59.000Z https://offernow.cn/s/language/c_sharp/yzb9otcc53egu51a weekly 0.5 - 2024-06-21T08:37:59.000Z + 2024-06-23T13:03:10.000Z https://offernow.cn/s/language/c_sharp/bfc28fyes41agqlo weekly 0.5 - 2024-06-21T08:38:11.000Z + 2024-06-23T13:03:23.000Z https://offernow.cn/s/language/c_sharp/xow4xq2xbkemig5t weekly 0.5 - 2024-06-21T08:38:22.000Z + 2024-06-23T13:03:52.000Z https://offernow.cn/s/language/c_sharp/kugx9ym41ibcfat7 weekly 0.5 - 2024-06-21T08:38:36.000Z + 2024-06-23T13:04:04.000Z https://offernow.cn/s/language/c_sharp/ordcsqdus8g8xmsa weekly 0.5 - 2024-06-21T08:39:24.000Z + 2024-06-23T13:04:19.000Z https://offernow.cn/s/language/c_sharp/vpvppyhndghx56x3 weekly 0.5 - 2024-06-21T08:41:24.000Z + 2024-06-23T13:04:33.000Z https://offernow.cn/s/language/c_sharp/xzt3w7c6r9o99dy9 weekly 0.5 - 2024-06-21T08:41:55.000Z + 2024-06-23T13:04:41.000Z https://offernow.cn/s/language/c_sharp/ks16hc0d9oh0gryd weekly 0.5 - 2024-06-21T08:44:24.000Z + 2024-06-23T13:04:52.000Z https://offernow.cn/s/language/c_sharp/ak0bv8yd7g5uooog weekly 0.5 - 2024-06-23T12:28:08.000Z + 2024-06-23T13:04:58.000Z https://offernow.cn/s/language/c_sharp/hen6f6d77mvbngfq weekly 0.5 - 2024-06-21T08:45:08.000Z + 2024-06-23T13:05:05.000Z https://offernow.cn/s/language/c_sharp/zcn7ze3o53dx0bld weekly 0.5 - 2024-06-21T08:45:35.000Z + 2024-06-23T13:05:17.000Z https://offernow.cn/s/language/c_sharp/rxuh23os4gkbvdiy weekly 0.5 - 2024-06-21T08:45:52.000Z + 2024-06-23T13:05:29.000Z https://offernow.cn/s/language/c_sharp/dnspn99ighi70h51 weekly 0.5 - 2024-06-23T12:35:50.000Z + 2024-06-23T13:05:41.000Z https://offernow.cn/s/language/c_sharp/els4225swlif6gyw weekly 0.5 - 2024-06-21T08:46:52.000Z + 2024-06-23T13:05:53.000Z https://offernow.cn/s/language/c_sharp/ox3khairmgqwcy3l weekly 0.5 - 2024-06-21T08:47:09.000Z + 2024-06-23T13:06:07.000Z https://offernow.cn/s/language/php @@ -1822,7 +1822,7 @@ https://offernow.cn/s/interview/chat_view/20244/lgawhfx8pq2slyko weekly 0.5 - 2024-06-23T12:46:56.124Z + 2024-06-23T13:06:40.283Z https://offernow.cn/s/interview/chat_view/20244/iv993phgec0ybt41 @@ -2248,13 +2248,13 @@ https://offernow.cn/s/interview/bzcgeyqlpmluo6ln weekly 1.0 - 2024-06-23T12:46:56.124Z + 2024-06-23T13:06:40.284Z https://offernow.cn/s/interview/ddiqc8kv6p73lgsu weekly 1.0 - 2024-06-23T12:46:56.124Z + 2024-06-23T13:06:40.284Z https://offernow.cn/s/algorithm @@ -2296,6 +2296,6 @@ https://offernow.cn/s/web/changelog weekly 1.0 - 2024-06-19T15:20:00.000Z + 2024-06-23T12:47:31.000Z \ No newline at end of file