-- MySqlBackup.NET 2.3.8.0
-- Dump Time: 2024-01-16 12:00:00
-- --------------------------------------
-- Server version 8.0.31 MySQL Community Server - GPL


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb3 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;


-- 
-- Definition of AccessLog
-- 

DROP TABLE IF EXISTS `AccessLog`;
CREATE TABLE IF NOT EXISTS `AccessLog` (
  `Id` varchar(36) NOT NULL,
  `Number` bigint NOT NULL,
  `LastModificationTime` datetime DEFAULT NULL,
  `CreationTime` datetime NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

-- 
-- Dumping data for table AccessLog
-- 

/*!40000 ALTER TABLE `AccessLog` DISABLE KEYS */;
INSERT INTO `AccessLog`(`Id`,`Number`,`LastModificationTime`,`CreationTime`) VALUES('022ebf71-7353-2d6b-290c-3a0fd80482b8',1152,NULL,'2024-01-02 00:24:55'),('0cc2ef9f-0f56-1a22-2731-3a0f858893b8',456,NULL,'2023-12-17 00:00:41'),('11ea4447-7d4b-ddaa-fd15-3a100124fd9c',300,NULL,'2024-01-10 00:04:49'),('18159d07-692d-6b23-d3f7-3a0fa4796282',159,NULL,'2023-12-23 00:12:19'),('20487b06-dc37-77da-dc72-3a0f7ad0ec95',119,NULL,'2023-12-14 22:03:53'),('268d50d0-ccb7-a4f6-c18f-3a0ff6e39435',487,NULL,'2024-01-08 00:17:10'),('295d930f-7a4c-769b-6361-3a0f9a31f103',211,NULL,'2023-12-21 00:18:05'),('2e27bd93-a188-5876-d72b-3a0fd325c4c6',46,NULL,'2024-01-01 01:43:08'),('35b89fda-6700-7042-b3e2-3a0fdd26cd98',499,NULL,'2024-01-03 00:20:28'),('3f94c9db-4c69-e0d2-4f37-3a0ffbfabd42',291,NULL,'2024-01-09 00:00:34'),('458a8823-f1d0-6c25-9cfe-3a0f80699711',385,NULL,'2023-12-16 00:08:44'),('46e95d4e-a2c7-4e01-7d42-3a0fc8a3b850',23,NULL,'2023-12-30 00:44:53'),('49858460-269e-3849-999d-3a0fc377847f',129,NULL,'2023-12-29 00:38:30'),('49dab4a5-7ffe-232b-11af-3a101ae0db8a',377,NULL,'2024-01-15 00:00:32'),('4f2f39b1-4a2c-5aa8-b278-3a0f7b45c5a7',270,NULL,'2023-12-15 00:11:31'),('5216c507-9965-84df-1716-3a0f951f1f68',235,NULL,'2023-12-20 00:39:25'),('5fe879f1-6c61-1cf6-ea7a-3a0fa9a24070',278,NULL,'2023-12-24 00:15:03'),('62f55edd-a45d-d266-7ef4-3a0f8fdf19a5',229,NULL,'2023-12-19 00:11:23'),('6e1dfaa3-9022-9b24-45b9-3a1015bba3cc',247,NULL,'2024-01-14 00:01:46'),('7505bd45-0abb-f9b3-154e-3a0f9f47c3e8',187,NULL,'2023-12-22 00:00:01'),('751ae5d0-d576-925e-0b92-3a0fb0516f66',474,NULL,'2023-12-25 07:24:07'),('82230212-b346-f44d-487e-3a0fcdacac8a',14,NULL,'2023-12-31 00:12:46'),('96c6823a-7af8-10c1-af1a-3a0ff1ba41cf',259,NULL,'2024-01-07 00:13:56'),('ad648d76-bb36-61fb-12b2-3a10109a7774',234,NULL,'2024-01-13 00:07:26'),('b06cf1e4-31fe-1494-b747-3a102037b53e',49,NULL,'2024-01-16 00:53:30'),('b983855d-f85c-23b5-d525-3a0fb99639c0',202,NULL,'2023-12-27 02:35:51'),('c4f5a8fc-f87c-77d2-a2bc-3a1006473fb4',291,NULL,'2024-01-11 00:00:20'),('d2952dd3-2b6d-5829-7ad7-3a0fbe32ef84',120,NULL,'2023-12-28 00:05:30'),('da025437-dbe6-bbbf-1f85-3a0fe76863dc',293,NULL,'2024-01-05 00:08:19'),('e235005b-166f-773e-82a1-3a0fec8facfc',361,NULL,'2024-01-06 00:09:19'),('eb61771f-0220-a2d1-461b-3a100b971dde',184,NULL,'2024-01-12 00:45:41'),('fbb4119a-52d3-c43e-b0af-3a0fe23c3c7e',501,NULL,'2024-01-04 00:01:59'),('fe09d95b-254d-0ed0-1fb5-3a0fb4064fdc',336,NULL,'2023-12-26 00:40:33'),('ff7de823-d3d4-178f-2513-3a0f8ac06a11',401,NULL,'2023-12-18 00:19:46');
/*!40000 ALTER TABLE `AccessLog` ENABLE KEYS */;

-- 
-- Definition of Agree
-- 

DROP TABLE IF EXISTS `Agree`;
CREATE TABLE IF NOT EXISTS `Agree` (
  `Id` varchar(36) NOT NULL,
  `CreationTime` datetime NOT NULL,
  `DiscussId` varchar(36) NOT NULL COMMENT '主题id',
  `CreatorId` varchar(36) DEFAULT NULL COMMENT '创建者',
  PRIMARY KEY (`Id`),
  KEY `index_CreatorId_DiscussId` (`CreatorId`,`DiscussId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

-- 
-- Dumping data for table Agree
-- 

/*!40000 ALTER TABLE `Agree` DISABLE KEYS */;
INSERT INTO `Agree`(`Id`,`CreationTime`,`DiscussId`,`CreatorId`) VALUES('079ba80b-9ab0-10b5-205b-3a0ff53b765c','2024-01-07 16:33:55','f6462b48-9601-0253-6450-3a0ff538dfa4','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('079d6be1-fc03-638d-c64d-3a101cf4a56c','2024-01-15 09:41:23','aaa00329-7f35-d3fe-d258-3a0f8380b742','0a6a0afd-6a31-4729-0c76-3a0fb8d4f73c'),('09dc0eaf-41c3-2ae9-4ac3-3a0ff9185ebe','2024-01-08 10:34:04','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('1150199e-c849-71c6-4224-3a0fe48da54e','2024-01-04 10:50:09','e9e69a38-ce1e-06f5-7944-3a0fdc942ef3','74b32e7e-4586-78ca-fd43-3a0fa9fbd640'),('12ed9673-f42d-b719-78e3-3a1013d35309','2024-01-13 15:08:24','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','0a6a0afd-6a31-4729-0c76-3a0fb8d4f73c'),('13381e5a-d7d6-1dd8-48df-3a0fdb0b9566','2024-01-02 14:31:30','fee1c7d4-999a-390a-d2a8-3a0fda7ed85f','74b32e7e-4586-78ca-fd43-3a0fa9fbd640'),('163e10c6-fb5a-2655-8dac-3a0fead152b0','2024-01-05 16:01:47','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','9ce9ce71-c3ef-0bd0-1e1a-3a0fead09645'),('1c3de122-d7cc-76da-8703-3a1009a26dd3','2024-01-11 15:38:48','e9e69a38-ce1e-06f5-7944-3a0fdc942ef3','cfa14797-eb98-cbdf-f4de-3a1009a1c9af'),('2322e99c-5d33-77b2-c236-3a0fb1a2e91b','2023-12-25 13:32:44','6b80ed42-50cd-db15-c073-3a0fa8f7fd77','4685a3e5-b7a5-33b8-b67d-3a0fb195641a'),('2d028e49-73ff-e771-6dc7-3a0fb6081862','2023-12-26 10:01:44','6b80ed42-50cd-db15-c073-3a0fa8f7fd77','74b32e7e-4586-78ca-fd43-3a0fa9fbd640'),('37c4c4a7-ceb1-d69e-27d8-3a1003357e06','2024-01-10 09:42:05','aaa00329-7f35-d3fe-d258-3a0f8380b742','ab7018b2-ad7d-835f-2d19-3a1003313e5a'),('427a5491-a69e-ca56-7da7-3a0fd6228373','2024-01-01 15:38:27','aaa00329-7f35-d3fe-d258-3a0f8380b742','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('453999dc-cbfc-2fd6-f3ec-3a0ff6a596a9','2024-01-07 23:09:28','e9e69a38-ce1e-06f5-7944-3a0fdc942ef3','98d7ce6a-37e1-a5b8-a877-3a0fdba5612e'),('474da6b6-d775-b448-8f94-3a0fb0aad5bc','2023-12-25 09:01:46','6b80ed42-50cd-db15-c073-3a0fa8f7fd77','3de3e074-8ebc-9280-0d16-3a0fae1099ef'),('505edb56-ad3d-3205-40b3-3a0fb10f756f','2023-12-25 10:51:41','46850bb5-45c0-015d-53a5-3a0fb10f6a61','74b32e7e-4586-78ca-fd43-3a0fa9fbd640'),('54d97aa3-9e0c-f7a5-8438-3a0fea909214','2024-01-05 14:51:04','e89c9593-f337-ada7-d108-3a0f83ae48e6','899ea329-a63f-bba9-0f68-3a0fea8fd365'),('59322173-31b8-1901-a87d-3a0ff592e996','2024-01-07 18:09:26','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','74b32e7e-4586-78ca-fd43-3a0fa9fbd640'),('5cad1b76-7fba-2f5c-c256-3a0fff8a4b14','2024-01-09 16:36:14','aaa00329-7f35-d3fe-d258-3a0f8380b742','be3f42e6-e6ae-25ab-7973-3a0ffe0c6503'),('5d5206b0-fd8f-6371-057f-3a0fff949b20','2024-01-09 16:47:30','330d1540-45b0-9a84-880a-3a0fff93c9ad','be3f42e6-e6ae-25ab-7973-3a0ffe0c6503'),('648ab0d4-4669-207d-78a5-3a0fc5675e0d','2023-12-29 09:40:06','e89c9593-f337-ada7-d108-3a0f83ae48e6','313abacd-9a19-5dbd-d665-3a0fc564495a'),('679539d2-a258-f2d3-e5fc-3a0fae87bcd2','2023-12-24 23:04:12','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('775db22e-180e-8e0a-b689-3a0fe41e8837','2024-01-04 08:48:47','46850bb5-45c0-015d-53a5-3a0fb10f6a61','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('7d614c80-59af-7102-e805-3a0fb5f0e3e6','2023-12-26 09:36:24','252ad40f-be77-3bc6-e31f-3a0fb1718e26','74b32e7e-4586-78ca-fd43-3a0fa9fbd640'),('8abcc2a3-a2a6-cb47-a0be-3a0ff4bc385e','2024-01-07 14:14:56','aaa00329-7f35-d3fe-d258-3a0f8380b742','ae04a0b3-3e0a-99bf-bcb0-3a0ff4bbeee4'),('8bdd64ea-c450-e172-47ca-3a0fae87c9f2','2023-12-24 23:04:15','6b80ed42-50cd-db15-c073-3a0fa8f7fd77','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('95938a60-3f2f-77c1-7020-3a0fae87480a','2023-12-24 23:03:42','7d4aa766-d97b-a395-7fc7-3a0fae13ca30','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('976822bc-ffc7-05e2-6ada-3a0fe02ebbfd','2024-01-03 14:28:00','37496047-2805-dda9-a94f-3a0fe02c7ffa','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('a34bf6a5-fd35-7c0e-d732-3a101cf77fb3','2024-01-15 09:44:30','f6462b48-9601-0253-6450-3a0ff538dfa4','0a6a0afd-6a31-4729-0c76-3a0fb8d4f73c'),('a6359e75-ab80-f44f-5fe2-3a0fdac1daa5','2024-01-02 13:10:58','aaa00329-7f35-d3fe-d258-3a0f8380b742','84f17d54-d35b-5581-e5d3-3a0fdabcaeae'),('ac688476-e1dc-e540-01d2-3a0fb6080c77','2023-12-26 10:01:41','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','74b32e7e-4586-78ca-fd43-3a0fa9fbd640'),('b1c06a2a-6c90-b831-ef93-3a0fb60814a5','2023-12-26 10:01:43','e89c9593-f337-ada7-d108-3a0f83ae48e6','74b32e7e-4586-78ca-fd43-3a0fa9fbd640'),('b370482f-4db8-e1d1-17cf-3a0fae87c25b','2023-12-24 23:04:13','e89c9593-f337-ada7-d108-3a0f83ae48e6','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('b5004b17-238d-e00d-bd9f-3a0fb8d5dd02','2023-12-26 23:05:44','6b80ed42-50cd-db15-c073-3a0fa8f7fd77','0a6a0afd-6a31-4729-0c76-3a0fb8d4f73c'),('cc163291-0d98-4e08-f74e-3a0fdf2a67d2','2024-01-03 09:43:39','e9e69a38-ce1e-06f5-7944-3a0fdc942ef3','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('cf187b0f-3a15-8ae7-bd93-3a101d20d5d0','2024-01-15 10:29:39','e9e69a38-ce1e-06f5-7944-3a0fdc942ef3','0a6a0afd-6a31-4729-0c76-3a0fb8d4f73c'),('cf767005-9201-6abd-e55e-3a100b41d52d','2024-01-11 23:12:32','e9e69a38-ce1e-06f5-7944-3a0fdc942ef3','eeb2b210-3f18-e3a6-fd89-3a100b40bc07'),('e431be80-e23a-ea16-0186-3a0fe1ff6939','2024-01-03 22:55:33','e9e69a38-ce1e-06f5-7944-3a0fdc942ef3','2d407f53-71c5-b2b6-ccdd-3a0fe1fed2a0'),('fbe8b6bb-8c25-e0c6-9546-3a0fffb36f7b','2024-01-09 17:21:10','37496047-2805-dda9-a94f-3a0fe02c7ffa','69371804-7f8b-2f4d-d9b3-3a0fb0adfcde'),('fda4f102-267f-f4ab-aec9-3a0fe47f1d6f','2024-01-04 10:34:16','6b80ed42-50cd-db15-c073-3a0fa8f7fd77','98d7ce6a-37e1-a5b8-a877-3a0fdba5612e'),('fe3c5555-b41b-8e52-2327-3a0fef7508e6','2024-01-06 13:39:05','e89c9593-f337-ada7-d108-3a0f83ae48e6','0a6a0afd-6a31-4729-0c76-3a0fb8d4f73c'),('fe7c3bd6-e6f1-0ec4-97d7-3a0fb73c5f2a','2023-12-26 15:38:27','aaa00329-7f35-d3fe-d258-3a0f8380b742','74b32e7e-4586-78ca-fd43-3a0fa9fbd640'),('fefdaed8-548b-870f-af45-3a0fdba2207a','2024-01-02 17:15:56','3e6d5b45-5095-7eae-cdf8-3a0fdb2bd515','59cf7e31-e3e4-544e-1038-3a0f836cc538');
/*!40000 ALTER TABLE `Agree` ENABLE KEYS */;

-- 
-- Definition of Article
-- 

DROP TABLE IF EXISTS `Article`;
CREATE TABLE IF NOT EXISTS `Article` (
  `Id` varchar(36) NOT NULL,
  `IsDeleted` tinyint(1) NOT NULL,
  `Content` longtext NOT NULL,
  `Name` varchar(255) NOT NULL,
  `DiscussId` varchar(36) NOT NULL,
  `ParentId` varchar(36) NOT NULL,
  `CreationTime` datetime NOT NULL,
  `CreatorId` varchar(36) DEFAULT NULL,
  `LastModifierId` varchar(36) DEFAULT NULL,
  `LastModificationTime` datetime DEFAULT NULL,
  `OrderNum` int NOT NULL COMMENT '排序',
  PRIMARY KEY (`Id`),
  KEY `index_Name` (`Name`),
  KEY `index_ParentId` (`ParentId`),
  KEY `index_DiscussId` (`DiscussId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

-- 
-- Dumping data for table Article
-- 

/*!40000 ALTER TABLE `Article` DISABLE KEYS */;
INSERT INTO `Article`(`Id`,`IsDeleted`,`Content`,`Name`,`DiscussId`,`ParentId`,`CreationTime`,`CreatorId`,`LastModifierId`,`LastModificationTime`,`OrderNum`) VALUES('0104dd98-ea24-3c69-0aa6-3a0ff53f8685',0,'\r\n- [CSharp Pad](http://csharppad.com/)  - 基于Web的C# REPL，具有出色的代码完成功能。 \r\n- [AzureCrawler](https://github.com/yagopv/AzureCrawler)  - 为Angular、Ember、Durandal或任何JavaScript应用程序获取HTML快照的工具 \r\n- [CSScript](https://www.cs-script.net/)  - CS-Script是一个基于CLR的脚本系统，使用C#作为编程语言。CS-Script目前针对Microsoft CLR (.NET 2.0/3.0/3.5/4.0/4.5)提供全面支持，同时在Mono上也有完全支持。它带有许多附加功能，如脚本托管。 \r\n- [CsvHelper](https://github.com/JoshClose/CsvHelper)  - 用于帮助读取和写入CSV文件的库 [https://github.com/JoshClose/CsvHelper](https://github.com/JoshClose/CsvHelper) \r\n- [RecordParser](https://github.com/leandromoh/recordparser)  - 用于帮助读取和写入零堆分配的CSV和Flat文件的库。 \r\n- [Hashids.net](https://github.com/ullmark/hashids.net)  - 从整数生成短唯一ID，如[https://hashids.org](https://hashids.org/) \r\n- [ConsoleTableExt](https://github.com/minhhungit/ConsoleTableExt)  - 用于创建.NET控制台应用程序的表格的流利库。 \r\n- [FlatMapper](https://github.com/joaomatossilva/FlatMapper)  - 以LINQ兼容的方式导入和导出纯文本文件的库。 \r\n- [FluentValidation](https://github.com/FluentValidation/FluentValidation)  - 用于.NET的小型验证库，使用流利接口和Lambda表达式构建验证规则。 \r\n- [FormHelper](https://github.com/SinanBozkus/FormHelper)  - 用于ASP.NET Core的表单和验证助手。Form Helper可帮助您创建Ajax表单和验证，无需编写任何JavaScript代码。（与Fluent Validation兼容） \r\n- [Guard](https://github.com/safakgur/guard)  - 高性能、可扩展的参数验证库。 \r\n- [Valit](https://github.com/valit-stack/Valit)  - Valit是一种性能优先的紧凑型高级模型验证库。 \r\n- [Validot](https://github.com/bartoszlenar/Validot)  - Validot是一种性能优先的紧凑型高级模型验证库。使用简单的声明式流利接口，它有效地处理类、结构、嵌套成员、集合、可为null的值，以及任何关系或组合。它还支持翻译、带测试的自定义逻辑扩展以及DI容器。 \r\n- [Humanizer](https://github.com/Humanizr/Humanizer)  - Humanizer可以满足您在操作和显示字符串、枚举、日期、时间、时间跨度、数字和数量方面的所有.NET需求。 \r\n- [LINQPad](https://www.linqpad.net/)  - 一个C#/VB/F#草稿本，可立即执行任何表达式、语句块或程序，具有丰富的输出格式和丰富的功能。还可以在LINQ中交互查询数据库。[$] \r\n- [LINQPad.QueryPlanVisualizer](https://github.com/Giorgi/LINQPad.QueryPlanVisualizer/)  - 直接在LINQPad内查看SQL Server和Postgres查询计划。 \r\n- [Polly](https://github.com/App-vNext/Polly)  - 以流利的方式表达瞬态异常处理和弹性策略，如重试、等待和重试、断路器以及舱壁隔离。 \r\n- [Rant](https://github.com/TheBerkin/rant3)  - Rant过程化文本生成DSL \r\n- [ScriptCS](https://github.com/scriptcs/scriptcs)  - 使用文本编辑器、NuGet和Roslyn的C#应用程序编写！ \r\n- [Shielded](https://github.com/jbakic/Shielded)  - 用于.NET的软件事务内存（STM）实现 \r\n- [MSBuild ILMerge task](https://archive.codeplex.com/?p=ilmergemsbuild)  - MSBuild ILMerge任务是一个NuGet包，允许您在自动化构建和/或Visual Studio项目中使用著名的ILMerge工具。 \r\n- [ReactJS.NET](https://github.com/reactjs/React.NET)  - ReactJS.NET是一个库，使得使用Babel与Facebook的React和JSX更容易从C#中使用。 \r\n- [Aeron.NET](https://github.com/AdaptiveConsulting/Aeron.NET)  - 高效可靠的UDP单播、UDP多播和IPC消息传输 - Aeron的.NET端口 \r\n- [TypeShape](https://github.com/eiriktsarpalis/TypeShape)  - TypeShape是一个小型、可扩展的F#库，用于实际的通用编程 \r\n- [Streams](https://github.com/nessos/Streams)  - 用于流数据的高效函数式风格管道的轻量级F#/C#库。 \r\n- [Warden](https://github.com/warden-stack/Warden)  - 为您的应用程序、资源和基础架构定义“健康检查”。保持您的Warden监视 \r\n- [ByteSize](https://github.com/omar/ByteSize)  - ByteSize是一个实用程序类，通过消除值的二义性，使代码中的字节大小表示更容易。ByteSize对字节的表示方式类似于System.TimeSpan对时间的表示方式。 \r\n- [Jot](https://github.com/anakic/jot)  - 用于持久化和还原应用程序状态的库（.settings文件的更好替代品）。 \r\n- [Enums.NET](https://github.com/TylerBrinkley/Enums.NET)  - Enums.NET是一个高性能的类型安全.NET枚举实用库。 \r\n- [HidLibrary](https://github.com/mikeobrien/HidLibrary)  - 该库使您能够在.NET中枚举和与Hid兼容的USB设备进行通信。 \r\n- [SystemWrapper](https://github.com/jozefizso/SystemWrapper)  - SystemWrapper是.NET库，用于更轻松地测试系统API。 \r\n- [YoutubeExplode](https://github.com/Tyrrrz/YoutubeExplode)  - 提取元数据和下载Youtube视频和播放列表的终极库。 \r\n- [DeviceId](https://github.com/MatthewKing/DeviceId)  - 生成可用于唯一标识计算机的“设备ID”。 \r\n- [DeviceDetector.NET](https://github.com/totpero/DeviceDetector.NET)  - 通用设备检测库将解析任何用户代理并检测浏览器、操作系统、所使用的设备（台式机、平板电脑、移动设备、电视、汽车等）、品牌和型号。 \r\n- [NaturalSort.Extension](https://github.com/tompazourek/NaturalSort.Extension)  - 为StringComparer添加自然排序支持（例如，\"abc1\"、\"abc2\"、\"abc10\"，而不是\"abc1\"、\"abc10\"、\"abc2\"）的扩展方法。 \r\n- [Coravel](https://github.com/jamesmh/coravel)  - 用于任务调度、缓存、排队、邮件、事件广播（等等）的.NET Core库，几乎不需要配置！ \r\n- [Quickenshtein](https://github.com/Turnerj/Quickenshtein)  - 一种极快且内存效率高的Levenshtein距离计算器，支持SIMD和多线程。 \r\n- [Infinity Crawler](https://github.com/TurnerSoftware/InfinityCrawler)  - 一个简单但功能强大的.NET的网络爬虫库 \r\n- [Build Versioning](https://github.com/TurnerSoftware/BuildVersioning)  - 用于.NET的简单构建版本控制，由Git标签提供支持 \r\n- [SystemTextJson.JsonDiffPatch](https://github.com/weichch/system-text-json-jsondiffpatch)  - 用于System.Text.Json的高性能、低分配的JSON对象差异和补丁扩展。支持以RFC 6902 JSON Patch格式生成补丁文档。\r\n* [.NET-libraries-that-make-your-life-easier](https://github.com/tallesl/net-libraries-that-make-your-life-easier) - 开源的.NET库，让你的生活更轻松\r\n* [awesome-LINQ](https://github.com/aloisdg/awesome-linq) - 精选的出色LINQ库、工具和更多资源集合。\r\n* [awesome-analyzers](https://github.com/Cybermaxs/awesome-analyzers) - 一个精选的.NET编译器平台（\"Roslyn\"）诊断分析器和代码修复工具列表。\r\n* [C# Algorithms, Data Structures](https://github.com/aalhour/C-Sharp-Algorithms) - C#算法和数据结构实现列表。\r\n* [Awesome .NET Core](https://github.com/thangchung/awesome-dotnet-core) - 一个出色的.NET Core库、工具、框架和软件集合。\r\n* [ASP.NET Core Library and Framework Support](https://github.com/jpsingleton/ANCLAFS) - 列出了ASP.NET Core和.NET Core当前支持的.NET库和框架。\r\n* [Awesome .NET Performance](https://github.com/adamsitnik/awesome-dot-net-performance) - 一个精选的出色.NET性能书籍、课程、培训、会议演讲、博客以及最具启发性的开源贡献者列表。\r\n* [awesome-ddd](https://github.com/heynickc/awesome-ddd) - 领域驱动设计（DDD）、命令查询责任分离（CQRS）、事件溯源和事件风暴资源的精选列表。\r\n* [Awesome Unity](https://github.com/RyanNielson/awesome-unity) - 高质量、社区驱动的Unity资源、项目和工具的分类集合。\r\n* [Awesome Xamarin](https://github.com/XamSome/awesome-xamarin) - 用于Xamarin移动项目的有趣库和工具的集合。\r\n* [Awesome Roslyn](https://github.com/ironcev/awesome-roslyn) - 一个精选的出色Roslyn书籍、教程、开源项目、分析器、代码修复和重构列表。\r\n* [.NET Open Source Developer Projects](https://github.com/Microsoft/dotnet/blob/master/dotnet-developer-projects.md) - 这个由社区维护的列表展示了对开发过程的各个方面都有用的.NET开源项目。\r\n* [Awesome Microservices .NET Core](https://github.com/mjebrahimi/Awesome-Microservices-NetCore) - 一个出色的Microservices在.NET Core中的培训系列、文章、视频、书籍、课程、示例项目和工具的集合。\r\n* [dotnet-console-games](https://github.com/dotnet/dotnet-console-games) - 在.NET控制台应用程序中实现的游戏示例。','其他','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,111),('0156f8b4-d1c0-2b7f-1052-3a0ff53f8681',0,'- [Paypal Merchant SDK](https://github.com/paypal/merchant-sdk-dotnet)  - 官方的.NET PayPal Merchant SDK \r\n- [NopCommerce](https://github.com/nopSolutions/nopCommerce)  - nopCommerce。免费的开源电子商务购物车（ASP.NET Core） \r\n- [ServiceStack.Stripe](https://github.com/ServiceStack/Stripe)  - stripe.com REST API的.NET客户端 \r\n- [SmartStoreNET](https://github.com/smartstore/SmartStoreNET)  - 免费的ASP.NET MVC电子商务购物车解决方案 \r\n- [Stripe.Net](https://github.com/stripe/stripe-dotnet)  - Stripe.net是[https://stripe.com/的全功能.NET](https://stripe.com/%E7%9A%84%E5%85%A8%E5%8A%9F%E8%83%BD.NET)  API \r\n- [Virto Commerce](https://github.com/VirtoCommerce/vc-platform)  - Virto Commerce是第二代发布的唯一一款完全基于开源许可下可用的企业级电子商务产品。Virto Commerce基于.NET 4.5，广泛使用MVC、IoC、EF、Azure、AngularJS等尖端技术。它可以部署在Microsoft Cloud（Azure）、Amazon Web Services（AWS）和本地环境中。[https://virtocommerce.com](https://virtocommerce.com/) \r\n- [SimplCommerce](https://github.com/simplcommerce/simplcommerce)  - 基于.NET Core构建的超级简单电子商务系统。易于使用和易于定制。由于.NET Core，您可以在Windows、Linux上运行SimplCommerce。支持各种RDBMS：Microsoft SQL Server、PostgreSQL、MySQL \r\n- [GrandNode](https://github.com/grandnode/grandnode2)  - 基于.NET Core 5.0和MongoDB的头部、多供应商、多租户的最先进的开源电子商务平台。 \r\n- [Square](https://github.com/square/connect-csharp-sdk)  - Square支付和其他Square API的官方SDK。 \r\n- [Adyen](https://github.com/Adyen/adyen-dotnet-api-library)  - 官方的Adyen Payment API Library for .NET。','电商支付','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,38),('01753787-da18-b28f-d697-3a0ff53f8682',0,'\r\n- [.NET Micro Framework 解释器](https://github.com/NETMF/netmf-interpreter)  - Microsoft® .NET Micro Framework (NETMF)，用于在小型设备上使用Visual Studio开发嵌入式应用程序的框架。','微型框架','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,69),('022bef00-2afb-9c35-8ec1-3a0fe9b5b449',0,'C# 中的异常是指程序在运行时遇到意外情况时产生的错误。通常情况下，当程序出现异常时，它将停止运行并抛出异常。为了防止程序崩溃并使程序更加健壮，我们需要使用异常处理技术。\r\n## 异常处理语法\r\n\r\nC# 中的异常处理使用 try-catch 块。try 块中包含可能抛出异常的代码，catch 块用于捕获并处理异常。\r\n\r\n```csharp\r\n\r\ntry\r\n{\r\n    // 可能抛出异常的代码\r\n}\r\ncatch (ExceptionType1 ex1)\r\n{\r\n    // 处理 ExceptionType1 类型的异常\r\n}\r\ncatch (ExceptionType2 ex2)\r\n{\r\n    // 处理 ExceptionType2 类型的异常\r\n}\r\nfinally\r\n{\r\n    // 在 try/catch 块之后执行的代码，不管是否出现异常都会执行\r\n}\r\n```\r\n\r\n\r\n\r\n其中，try 块是必需的，catch 和 finally 块都是可选的。在 try 块中，如果代码抛出异常，程序将立即跳转到最近的 catch 块中。如果 try 块中的代码没有抛出异常，则程序将跳过 catch 块并执行 finally 块中的代码。\r\n## 异常类型\r\n\r\n在 C# 中有许多不同的异常类型。每种异常类型都表示不同的错误情况。以下是一些常见的异常类型：\r\n\r\n- System.Exception：所有异常的基类。\r\n- System.ArgumentException：表示参数无效。\r\n- System.NullReferenceException：表示尝试访问空对象时出错。\r\n- System.IndexOutOfRangeException：表示索引超出范围。\r\n- System.IO.IOException：表示输入/输出错误。\r\n- System.FormatException：表示格式不正确。\r\n\r\n## 示例代码\r\n\r\n下面是一个使用 try-catch 块的示例代码：\r\n\r\n```csharp\r\n\r\ntry\r\n{\r\n    int a = 10;\r\n    int b = 0;\r\n    int c = a / b;\r\n}\r\ncatch (DivideByZeroException ex)\r\n{\r\n    Console.WriteLine(\"除数不能为零\");\r\n}\r\nfinally\r\n{\r\n    Console.WriteLine(\"程序结束\");\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的示例中，我们尝试将 10 除以 0。这将导致 DivideByZeroException 异常。由于我们使用了 try-catch 块，程序将不会崩溃并且会打印出“除数不能为零”的错误信息，然后执行 finally 块中的代码，输出“程序结束”。\r\n## 自定义异常\r\n\r\n除了使用内置的异常类型之外，我们还可以定义自己的异常类型。我们可以创建一个继承自 System.Exception 的类，然后使用它来表示我们程序中的特定错误情况。\r\n\r\n以下是一个自定义异常类型的示例代码：\r\n\r\n```csharp\r\n\r\npublic class MyException : Exception\r\n{\r\n    public MyException(string message) : base(message)\r\n    {\r\n    }\r\n}\r\n\r\ntry\r\n{\r\n    throw new MyException(\"自定义异常\");\r\n}\r\ncatch (MyException ex)\r\n{\r\n    Console.WriteLine(ex.Message);\r\n}\r\nfinally\r\n{\r\n    Console.WriteLine(\"程序结束\");\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的示例中,我们定义了一个名为 MyException 的自定义异常类型。它继承自 Exception 类，并包含一个构造函数，用于接受异常消息。\r\n\r\n然后，在 try 块中，我们使用 throw 语句抛出一个新的 MyException 异常。这将跳转到最近的 catch 块中，我们可以将其捕获并处理。在这里，我们只是简单地输出了异常消息。\r\n\r\n最后，我们执行 finally 块中的代码，输出“程序结束”。\r\n## 总结\r\n\r\n异常处理是 C# 程序设计中非常重要的一部分。通过使用 try-catch 块，我们可以在程序出现意外情况时捕获并处理异常，使程序更加健壮。同时，我们还可以使用自定义异常类型来表示程序中的特定错误情况。\r\n','C# 异常处理','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,27),('02b5b80f-45d8-a47f-c35b-3a0ff53f8683',0,'\r\n- [PushSharp](https://github.com/Redth/PushSharp)  - 用于向iOS、OSX、Android、Chrome、Windows Phone、Windows 8、Blackberry和Amazon设备发送推送通知的服务器端库。','推送通知','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,81),('03211927-fca5-84ae-b575-3a0ff53f8684',0,'* [Sprache](https://github.com/sprache/Sprache) - 一个简单、轻量级的库，可在C#代码中直接构建解析器。\r\n* [Pidgin](https://github.com/benjamin-hodgson/Pidgin) - 一个轻量、快速且灵活的C#解析库，由Stack Overflow开发。\r\n* [FParsec](https://github.com/stephan-tolksdorf/fparsec) - 一个用于F#的解析器组合库。\r\n* [Superpower](https://github.com/datalust/superpower) - 一个C#解析器构建工具包，具有高质量的错误报告功能。\r\n* [CSLY](https://github.com/b3b00/CSLY) - 一个轻量的嵌入式C#词法分析器/解析器生成器。','解析器','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,109),('047627b4-0fd7-8fb0-cb10-3a0fe7638b2c',1,'\r\n## 简介\r\n\r\n要开始使用 C# 进行开发，需要先搭建好开发环境。本文将介绍如何在 Windows 系统下安装并配置 C# 开发环境。\r\n\r\n## 安装 .NET SDK\r\n\r\n首先需要安装 .NET SDK，它是一个开发工具包，包括了用于开发 C# 应用程序所需的运行时、库和工具。 \r\n\r\n1. 前往 [.NET 官网](https://dotnet.microsoft.com/download/dotnet)  下载最新的 .NET SDK 安装程序。 \r\n2. 双击安装程序，按照提示进行安装。在安装过程中需要注意选择安装路径和安装的版本，可以选择安装多个版本的 .NET SDK。 \r\n3. 安装完成后，打开命令提示符或 PowerShell 窗口，输入以下命令来验证是否安装成功：\r\n\r\n```bash\r\ndotnet --version\r\n```\r\n\r\n如果能够输出正确的版本号，则说明安装成功。\r\n## 安装开发环境\r\n\r\nC# 开发可以使用多种开发环境，包括 Visual Studio、Visual Studio Code、Rider 等等。其中，Visual Studio 是最为常用的 C# 开发环境之一。\r\n### 安装 Visual Studio \r\n1. 前往 [Visual Studio 官网](https://visualstudio.microsoft.com/vs/)  下载 Visual Studio 安装程序。 \r\n2. 双击安装程序，按照提示进行安装。在安装过程中需要注意选择安装的组件，可以根据自己的需要进行选择。\r\n### 安装 Visual Studio Code \r\n1. 前往 [Visual Studio Code 官网](https://code.visualstudio.com/)  下载 Visual Studio Code 安装程序。 \r\n2. 双击安装程序，按照提示进行安装。在安装过程中需要注意选择安装的组件，可以根据自己的需要进行选择。\r\n## 配置开发环境\r\n\r\n无论使用哪种开发环境，都需要配置 C# 扩展和编译器。\r\n### 配置 Visual Studio \r\n1. 打开 Visual Studio，点击 \"文件\" -> \"新建\" -> \"项目\"。 \r\n2. 在弹出的对话框中，选择 \"C#\" -> \"控制台应用程序\"，然后选择项目名称和存储位置，最后点击 \"创建\"。 \r\n3. 在项目中添加新的 C# 文件，然后在其中编写代码。 \r\n4. 点击 \"生成\" -> \"生成解决方案\"，将代码编译成可执行文件。\r\n### 配置 Visual Studio Code \r\n1. 打开 Visual Studio Code，安装 \"C#\" 扩展。 \r\n2. 打开项目文件夹，然后在其中添加新的 C# 文件，然后在其中编写代码。 \r\n3. 打开终端窗口，输入以下命令来编译代码：\r\n\r\n```bash\r\ndotnet build\r\n```\r\n\r\n\r\n\r\n如果编译成功，则会在项目文件夹中生成可执行文件。\r\n## 示例代码\r\n\r\n下面是一个\r\n\r\n- 使用 Visual Studio Code 编写的 \"Hello, World!\" 程序的示例代码：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        Console.WriteLine(\"Hello, World!\");\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在 Visual Studio Code 中保存文件后，可以在终端窗口中输入以下命令来运行程序：\r\n\r\n```bash\r\n\r\ndotnet run\r\n```\r\n\r\n\r\n\r\n程序会在终端窗口中输出 \"Hello, World!\" 字符串。\r\n\r\n至此，你已经成功搭建了 C# 的开发环境，并编写了第一个 C# 程序。','C# 环境','67bbbd51-8f39-6bc3-46fe-3a0fa9fe8385','00000000-0000-0000-0000-000000000000','2024-01-05 00:03:01',NULL,'74b32e7e-4586-78ca-fd43-3a0fa9fbd640','2024-01-05 00:05:16',0),('04f04717-ed78-66a2-07b1-3a0ff53ad54c',0,'\r\n**1、nginx是如何实现高并发的？**\r\n\r\n答：一个主进程，多个工作进程，每个工作进程可以处理多个请求，每进来一个request，会有一个worker进程去处理。但不是全程的处理，处理到可能发生阻塞的地方，比如向上游（后端）服务器转发request，并等待请求返回。那么，这个处理的worker继续处理其他请求，而一旦上游服务器返回了，就会触发这个事件，worker才会来接手，这个request才会接着往下走。由于web server的工作性质决定了每个request的大部份生命都是在网络传输中，实际上花费在server机器上的时间片不多。这是几个进程就解决高并发的秘密所在。即@skoo所说的webserver刚好属于网络io密集型应用，不算是计算密集型。\r\n\r\n**2、Nginx如何处理HTTP请求？**\r\n\r\n答：Nginx使用反应器模式。主事件循环等待操作系统发出准备事件的信号，这样数据就可以从套接字读取，在该实例中读取到缓冲区并进行处理。单个线程可以提供数万个并发连接。\r\n\r\n**3、使用“反向代理服务器”的优点是什么?**\r\n\r\n答：反向代理服务器可以隐藏源服务器的存在和特征。它充当互联网云和web服务器之间的中间层。这对于安全方面来说是很好的，特别是当您使用web托管服务时。\r\n\r\n**4、列举Nginx服务器的最佳用途。**\r\n\r\n答：Nginx服务器的最佳用法是在网络上部署动态HTTP内容，使用SCGI、WSGI应用程序服务器、用于脚本的FastCGI处理程序。它还可以作为负载均衡器。\r\n\r\n**5、Nginx服务器上的Master和Worker进程分别是什么?**\r\n\r\n答：Master进程：读取及评估配置和维持 ；Worker进程：处理请求。\r\n\r\n**6、什么是C10K问题?**\r\n\r\n答：C10K问题是指无法同时处理大量客户端(10,000)的网络套接字。\r\n\r\n**7、请陈述stub_status和sub_filter指令的作用是什么?**\r\n\r\n答：（1）Stub_status指令：该指令用于了解Nginx当前状态的当前状态，如当前的活动连接，接受和处理当前读/写/等待连接的总数 ；（2）Sub_filter指令：它用于搜索和替换响应中的内容，并快速修复陈旧的数据\r\n\r\n**8、为什么不使用多线程？**\r\n\r\n答：Nginx:采用单线程来异步非阻塞处理请求（管理员可以配置Nginx主进程的工作进程的数量），不会为每个请求分配cpu和内存资源，节省了大量资源，同时也减少了大量的CPU的上下文切换，所以才使得Nginx支持更高的并发。\r\n\r\n**9、为什么要做动、静分离？**\r\n\r\n答：在我们的软件开发中，有些请求是需要后台处理的（如：.jsp,.do等等），有些请求是不需要经过后台处理的（如：css、html、jpg、js等等），这些不需要经过后台处理的文件称为静态文件，否则动态文件。因此我们后台处理忽略静态文件，但是如果直接忽略静态文件的话，后台的请求次数就明显增多了。在我们对资源的响应速度有要求的时候，应该使用这种动静分离的策略去解决动、静分离将网站静态资源（HTML，JavaScript，CSS等）与后台应用分开部署，提高用户访问静态代码的速度，降低对后台应用访问。这里将静态资源放到nginx中，动态资源转发到[tomcat](https://www.wkcto.com/courses/tomcat.html)服务器中,毕竟Tomcat的优势是处理动态请求。\r\n\r\n**10、ngx_http_upstream_module的作用是什么?**\r\n\r\n答：要在URL中保留双斜线，就必须使用merge_slashes_off；语法:merge_slashes [on/off] ； 默认值: merge_slashes on ；环境: http，server','Nginx面试题','f6462b48-9601-0253-6450-3a0ff538dfa4','00000000-0000-0000-0000-000000000000','2024-01-07 16:33:14','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,6),('068f3494-3fa5-aca0-96d9-3a0fdc9d3d46',0,'## 11日\n1.Yi.Abp开发仓库全部`迁移`至Yi仓库中\n\n## 12日\n1.完成`文章`Crud增删改查功能模块\n2.完成`主题`Crud增删改查功能模块\n3.修复`主题列表`总数错误问题\n\n## 13日\n1.完成全站`搜索`功能\n2.完善`头像`默认功能\n3.完成`评论`的功能模块\n\n## 14日\n1.首页`接口`设计\n2.首页`推荐分类`动态来自接口\n\n## 15日\n1.完善`点赞功能`的登录跳转\n2.支持`评论`的删除功能\n3.修复`访问趋势`的横坐标显示\n4.修复`文档`编辑功能\n\n## 16日\n1.支持文章的`面包屑`跳转\n2.修复首页进入`站点显示为空`问题\n3.支持`注册`功能模块\n\n## 17日\n1.支持`主题文章`的权限模块\n2.`登录注册`页面全部重做\n\n## 18日\n1.完善`首页板块`置顶功能\n2.完善`主题列表`显示功能\n3.新增`用户限制`功能模块\n\n## 19日\n1.完成后台的`板块`编辑功能\n2.完成后台的`主题`编辑功能\n3.完成数据`自动备份`功能\n4.完善文章及主题的`权限功能`\n\n## 20日\n1.完成是`否允许评论`设置\n2.完成第一版本`板块的设计`\n3.完成首页`top主题`展示\n4.修复登录`验证码`刷新问题\n5.修复`主题发布`权限问题\n\n## 21日\n1.完善`禁止发布主题`的板块右上角显示\n2.完善`未登录头像`显示状态\n\n## 22日\n1.修复`点赞人数`的问题\n2.修复`文章背景`显示不全样式错误问题\n\n## 23日\n1.修复`注册`完成后跳转登录功能\n2.修复`评论显示`错误问题\n3.修复`文章添加`子文章功能\n\n## 24日\n1.修复进入`个人中心`保存信息后没有立即生效或保存后跳到首页\n2.修复个人中心`性别`更改显示问题\n\n## 25日\n1.添加`联系我们`的页面跳转功能\n2.支持个人中心`头像`在线选择功能\n\n## 26日\n1.新增`页面加载`的动画渲染\n2.新增`本月排行`功能\n3.新增`推荐用户`功能\n4.新增`推荐主题`功能\n\n## 27日\n1.修复排行榜`头像`显示问题\n\n## 28日\n1.完善token过期后，`自动跳转`登录的用户体验\n\n## 29日\n元旦喽~','2023年12月','e9e69a38-ce1e-06f5-7944-3a0fdc942ef3','00000000-0000-0000-0000-000000000000','2024-01-02 21:50:13','59cf7e31-e3e4-544e-1038-3a0f836cc538','59cf7e31-e3e4-544e-1038-3a0f836cc538','2024-01-02 22:08:46',0),('06e932a1-8bec-235f-4480-3a0fe9b5b449',0,'\r\n当我们在编写 C# 代码时，变量是非常重要的一个概念。一个变量可以被看作是程序中存储值的容器。在 C# 中，变量可以存储多种不同类型的数据，包括整数、浮点数、布尔值和字符串等。\r\n### 定义变量\r\n\r\n在 C# 中，定义一个变量需要指定变量的类型，并给变量取一个名字。变量名必须以字母或下划线开头，并且不能包含空格或特殊字符。\r\n\r\n以下是定义一个整数变量的示例代码：\r\n\r\n```csharp\r\n\r\nint num = 42;\r\n```\r\n\r\n\r\n\r\n在上面的代码中，我们定义了一个名为 `num` 的整数变量，并将其初始化为 42。在变量名后面的等号表示给变量赋值的操作。\r\n\r\n我们还可以定义一个空的变量，如下所示：\r\n\r\n```csharp\r\n\r\nint num;\r\n```\r\n\r\n\r\n\r\n在上面的代码中，我们定义了一个名为 `num` 的整数变量，但没有给它赋初值。这样的变量称为未初始化变量。在使用未初始化变量时，可能会引发错误。\r\n### 变量类型\r\n\r\nC# 中有多种不同类型的变量。下面列出了一些常用的变量类型及其用途： \r\n- `int`：用于存储整数值。 \r\n- `float`：用于存储浮点数值。 \r\n- `double`：用于存储双精度浮点数值。 \r\n- `bool`：用于存储布尔值（true 或 false）。 \r\n- `string`：用于存储字符串值。 \r\n- `char`：用于存储单个字符。\r\n\r\n以下是一些定义不同类型变量的示例代码：\r\n\r\n```csharp\r\n\r\nint num = 42;\r\nfloat num2 = 3.14f;\r\ndouble num3 = 2.71828;\r\nbool flag = true;\r\nstring message = \"Hello, world!\";\r\nchar c = ''A'';\r\n```\r\n\r\n\r\n\r\n在上面的代码中，我们分别定义了一个整数变量 `num`、一个浮点数变量 `num2`、一个双精度浮点数变量 `num3`、一个布尔值变量 `flag`、一个字符串变量 `message` 和一个字符变量 `c`。\r\n### 变量作用域\r\n\r\n在 C# 中，变量的作用域指的是变量在程序中可见的范围。在定义一个变量时，需要确定该变量的作用域。一般来说，变量的作用域可以分为以下几种：\r\n- 局部变量：在一个代码块内定义的变量。它们只在该代码块内可见，不能被其他代码块访问。\r\n- 全局变量：在程序的任何地方定义的变量。它们可以被程序中的所有代码块访问。\r\n\r\n以下是一个定义局部变量和全局变量的示例代码：\r\n\r\n```csharp\r\n\r\nclass MyClass {\r\n    int num = 42; // 定义\r\n\r\n    void MyMethod() {\r\n        int num2 = 10; // 定义局部变量\r\n    }\r\n```\r\n\r\n\r\n\r\n}\r\n\r\n在上面的代码中，我们定义了一个名为 `num` 的类成员变量和一个名为 `num2` 的方法局部变量。`num` 是一个全局变量，可以被类中的任何方法访问。`num2` 是一个局部变量，只能在 `MyMethod` 方法中访问。\r\n### 变量命名规则\r\n\r\n在 C# 中，变量名必须遵循一些命名规则。以下是一些常见的命名规则：\r\n- 变量名必须以字母或下划线开头。\r\n- 变量名不能包含空格或特殊字符。\r\n- 变量名不能与 C# 关键字相同。\r\n- 变量名应该使用有意义的名称，以便其他开发人员能够理解变量的作用。\r\n\r\n以下是一些合法的变量名示例：\r\n\r\n```csharp\r\n\r\nint age;\r\nfloat price;\r\nstring firstName;\r\n```\r\n\r\n\r\n\r\n在上面的代码中，我们使用了合法的变量名 `age`、`price` 和 `firstName`。\r\n### 变量赋值\r\n\r\n在 C# 中，变量赋值是指将一个值存储到变量中。我们可以在定义变量时进行赋值，也可以在之后的代码中对变量进行赋值。\r\n\r\n以下是一些赋值示例代码：\r\n\r\n```csharp\r\n\r\nint num = 42; // 定义变量并赋值\r\nnum = 10; // 修改变量的值\r\n```\r\n\r\n\r\n\r\n在上面的代码中，我们首先定义了一个名为 `num` 的整数变量，并将其初始化为 42。然后，我们将变量的值修改为 10。\r\n### 总结\r\n\r\n本文介绍了 C# 中变量的定义、类型、作用域、命名规则和赋值等基本概念。掌握了这些概念，你就能够在 C# 中使用变量存储和操作数据了。\r\n','C# 变量','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,7),('076b1e8a-0869-9f4b-d0a9-3a0ff544b11d',0,'![image.png](/prod-api/file/203844ba-323a-65ee-c079-3a0ff544a327/true)','依赖注入','2da0361c-000d-e0d8-6737-3a0ff5421cdc','00000000-0000-0000-0000-000000000000','2024-01-07 16:44:00','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('07b22748-8108-3a98-338f-3a0ff53f8682',0,'- [CSCore](https://github.com/filoe/cscore)  - 高级音频库，支持实时音频数据的播放/录制、解码/编码和处理（效果、可视化等）。 \r\n- [TagLib#](https://github.com/mono/taglib-sharp)  - TagLib#（又称taglib-sharp）是一个用于读取和写入媒体文件中的元数据的库，包括视频、音频和照片格式。 \r\n- [LibVLCSharp](https://github.com/videolan/libvlcsharp)  - libvlc 的 Xamarin 绑定，是 VideoLAN 制作的 VLC 应用程序所使用的多媒体框架。 \r\n- [NAudio](https://github.com/naudio/NAudio)  - 支持多种文件格式（如 MP3、MP4、WAV、AIFF、Speex 等）的音频播放、解码和编码库。 \r\n- [Xabe.FFmpeg](https://github.com/tomaszzmuda/Xabe.FFmpeg)  - FFmpeg 的 .NET Standard 包装器。它允许在不了解 FFmpeg 如何工作的情况下处理媒体，并可以用于从 C# 应用程序传递自定义参数给 FFmpeg。【付费】 \r\n- [SeeShark](https://github.com/vignetteapp/SeeShark)  - 使用 FFmpeg 支持超过190种像素格式的.NET跨平台相机库。\r\n- [MetadataExtractor](https://github.com/drewnoakes/metadata-extractor-dotnet) - 使用简单易用的API从媒体（图像，视频，音频）中提取元数据。','媒体','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,67),('08d36286-b047-7a98-29f7-3a0ff53f867f',0,'* [CosmosOS](https://github.com/CosmosOS/Cosmos) - Cosmos是操作系统的“构建工具包”。使用托管语言（例如C＃，VB.NET等）构建自己的OS！','操作系统','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,4),('097bfcec-4b8a-1d91-71ac-3a0fe9b5b449',0,'在 C# 中读取文件的最基本方法是使用 System.IO 命名空间中的 StreamReader 类。StreamReader 类提供了一个方便的方法，用于从文件中读取字符流。以下是一份示例代码：\r\n\r\n```csharp\r\n\r\nusing System;\r\nusing System.IO;\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        string path = @\"C:\\example.txt\";\r\n        \r\n        // 创建一个 StreamReader 的实例来读取文件\r\n        StreamReader reader = new StreamReader(path);\r\n\r\n        // 读取文件的全部内容\r\n        string contents = reader.ReadToEnd();\r\n\r\n        // 关闭文件\r\n        reader.Close();\r\n\r\n        // 输出读取到的内容\r\n        Console.WriteLine(contents);\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在这个示例中，我们首先创建了一个字符串变量来存储文件路径。然后，我们创建了一个 StreamReader 实例，并将其用于读取文件的全部内容。最后，我们关闭了文件，并将读取到的内容输出到控制台上。\r\n## 文件输出\r\n\r\n在 C# 中写入文件的最基本方法是使用 System.IO 命名空间中的 StreamWriter 类。StreamWriter 类提供了一个方便的方法，用于向文件中写入字符流。以下是一份示例代码：\r\n\r\n```csharp\r\n\r\nusing System;\r\nusing System.IO;\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        string path = @\"C:\\example.txt\";\r\n\r\n        // 创建一个 StreamWriter 的实例来写入文件\r\n        StreamWriter writer = new StreamWriter(path);\r\n\r\n        // 写入一些内容到文件中\r\n        writer.WriteLine(\"Hello, world!\");\r\n\r\n        // 关闭文件\r\n        writer.Close();\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在这个示例中，我们首先创建了一个字符串变量来存储文件路径。然后，我们创建了一个 StreamWriter 实例，并将其用于向文件中写入一些内容。最后，我们关闭了文件。\r\n## 处理文件输入和输出\r\n\r\n除了读取和写入文件之外，我们还可以在 C# 中处理文件输入和输出。一个常见的用例是按行读取文件并对每一行执行一些操作，然后将结果写入到另一个文件中。以下是一份示例代码：\r\n\r\n```csharp\r\n\r\nusing System;\r\nusing System.IO;\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        string inputPath = @\"C:\\input.txt\";\r\n        string outputPath = @\"C:\\output.txt\";\r\n\r\n        // 创建一个 StreamReader 的实例来读取文件\r\n        StreamReader reader = new StreamReader(inputPath);\r\n\r\n        // 创建一个 StreamWriter 的实例来写入文件\r\n        StreamWriter writer = new StreamWriter(outputPath);\r\n\r\n        // 读取文件的每一行并处理\r\n        string line;\r\n        while ((line = reader.ReadLine()) != null)\r\n        {\r\n            // 在这里处理每一行，例如计算行数、单词数等等\r\n            int lineLength = line.Length;\r\n\r\n            // 将处理结果写入到输出文件中\r\n            writer.WriteLine($\"Length of line: {lineLength}\");\r\n        }\r\n\r\n        // 关闭文件\r\n        reader.Close();\r\n        writer.Close();\r\n    }\r\n}\r\n```\r\n\r\n在这个示例中，我们首先创建了两个字符串变量来存储输入和输出文件的路径。然后，我们创建了一个 StreamReader 实例，用于读取输入文件，以及一个 StreamWriter 实例，用于写入输出文件。接下来，我们使用一个 while 循环来读取输入文件的每一行，并对每一行执行一些操作。在这个示例中，我们只是计算了每一行的长度，并将结果写入到输出文件中。\r\n\r\n最后，我们关闭了输入和输出文件，并结束了程序的执行。\r\n\r\n需要注意的是，在实际的开发中，我们通常需要使用 try-catch 块来捕获可能会抛出异常的文件操作。同时，我们也需要注意在处理文件输入和输出时可能会遇到的一些其他问题，例如编码问题、换行符问题等等。\r\n\r\n总之，C# 提供了丰富的文件操作功能，我们可以使用它们来读取、写入和处理文件。在实际的开发中，我们需要根据具体的需求来选择合适的文件操作方式，并注意处理可能出现的异常和问题。\r\n','C# 文件的输入与输出','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,28),('09bbbc5d-4b2c-8b69-8dd8-3a0ff53f8681',0,'\r\n- [Blzhawk](https://github.com/TASEmulators/BizHawk)  - BizHawk是一个用C#编写的多系统模拟器。BizHawk为休闲玩家提供了一些不错的功能，例如全屏和手柄支持，还提供了所有系统核心的完整重新录制和调试工具。 \r\n- [Ryujinx](https://github.com/Ryujinx/Ryujinx)  - 用C#编写的实验性任天堂Switch模拟器。','模拟器','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,39),('0a0cb798-d950-44ce-9541-3a0ff53f8680',0,'\r\n- [.NET Fiddle](https://dotnetfiddle.net/)  - 在浏览器中编写、编译和运行C#、F#和VB代码。它相当于JSFiddle的.NET版本。 \r\n- [Sharplab](https://sharplab.io/)  - 使用不同的Roslyn分支和版本运行C#代码，查看生成的IL并检查JIT的输出。','代码片段','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,24),('0a16a81e-1201-48ce-a981-3a0f83ac968d',0,'## 简介\n> 工作单元模式是“维护一个被业务事务影响的对象列表，协调变化的写入和并发问题的解决”\n\n它的作用\n1. 事务相关\n2. 共用连接\n...\n\n## 如何使用\n依赖注入`IUnitOfWorkManager`，使用`CreateContext`创建一个`IUnitOfWork`工作单元\n在工作单元内部，可提交，回滚，获取仓储 \n``` cs\n        bool IsTran { get; set; }\n        bool IsCommit { get; set; }\n        bool IsClose { get; set; }\n\n        IRepository<T> GetRepository<T>();\n        bool Commit();\n```\n\n> 注意，在除Get请求上，其他请求默认都开启了工作单元（post、put、delelte）\n\n## 完整例子\n``` cs\n        private IUnitOfWorkManager _unitOfWorkManager { get; set; }\n        public void Test()\n        {\n            using (var uow = _unitOfWorkManager.CreateContext())\n            {\n                //仓储执行各种操作\n\n                //统一提交\n                uow.Commit();\n            }\n        \n        }\n```\n## 特性方式\n还可以通过`[UnitOfWork]`特性，打在方法上，该方法便会当作一个事务进行提交\n``` cs\n        [UnitOfWork]\n        public void Test()\n        {\n         //仓储执行各种操作\n        }\n```\n\n','工作单元','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','00000000-0000-0000-0000-000000000000','2023-12-16 15:20:46','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('0a283655-6ac5-61be-e263-3a0fe9b5b44a',0,'索引器是一种特殊的属性，它允许使用类似于数组的语法来访问对象的元素。它实际上是一个方法，可以通过类的实例名称后跟方括号中的索引来访问它。\r\n\r\nC# 中的索引器提供了一种方便的方法来访问和操作类中的元素，而不需要暴露类中的字段或属性。它们通常用于自定义集合类中，以允许使用类似于数组的语法来访问集合元素。\r\n## C# 索引器（Indexer）语法\r\n\r\n在 C# 中，索引器声明的语法如下所示：\r\n\r\n```csharp\r\n\r\naccess_modifier return_type this [ parameter_list ]\r\n{\r\n    // get and/or set accessor implementation\r\n}\r\n```\r\n\r\n\r\n\r\n其中： \r\n- `access_modifier`：表示索引器的访问修饰符，可以是 public、private、protected、internal 或 protected internal。 \r\n- `return_type`：表示索引器的返回类型，可以是任何有效的类型，包括 void。 \r\n- `parameter_list`：表示索引器的参数列表，可以包含一个或多个参数，每个参数都必须有一个类型和一个名称。\r\n\r\n在索引器的访问器实现中，可以实现 get 访问器、set 访问器或两者都实现。它们的语法如下：\r\n\r\n```csharp\r\n\r\nget\r\n{\r\n    // get accessor implementation\r\n}\r\n\r\nset\r\n{\r\n    // set accessor implementation\r\n}\r\n```\r\n\r\n\r\n\r\n在 get 访问器中，可以通过返回值返回所需的元素。在 set 访问器中，可以使用 value 关键字来获取传递给访问器的值，并进行所需的操作。\r\n## C# 索引器（Indexer）示例\r\n\r\n以下是一个简单的示例，演示如何在 C# 中使用索引器访问对象的元素：\r\n\r\n```csharp\r\n\r\npublic class MyCollection\r\n{\r\n    private string[] items = new string[10];\r\n\r\n    public string this[int index]\r\n    {\r\n        get { return items[index]; }\r\n        set { items[index] = value; }\r\n    }\r\n}\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        MyCollection collection = new MyCollection();\r\n\r\n        collection[0] = \"Item 1\";\r\n        collection[1] = \"Item 2\";\r\n\r\n        Console.WriteLine(collection[0]); // Output: Item 1\r\n        Console.WriteLine(collection[1]); // Output: Item 2\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的示例中，我们定义了一个名为 `MyCollection` 的类，它包含一个名为 `items` 的字符串数组。然后我们定义了一个名为 `this[int index]` 的索引器，它允许我们使用类似于数组的语法来访问和修改 `items` 数组中的元素。\r\n\r\n在 `Main` 方法中，我们创建了一个 `MyCollection` 实例，并使用索引器向集合中添加了两个元素。然后我们使用索引器读取并输出集合中的元素。\r\n## C# 索引器（Indexer）的注意事项\r\n\r\n以下是一些在使用 C# 索引器时需要注意的事项： \r\n- 索引器可以有多个参数，但它们的参数名必须不同。例如，`this[int i, int j]` 是有效的，但 `this[int i, int i]` 是无效的。 \r\n- 索引器可以重载，就像普通的方法一样。例如，我们可以定义一个名为 `this[string name]` 的索引器和一个名为 `this[int index]` 的索引器，它们都有不同的参数类型。\r\n- 如果只实现 get 访问器，则索引器是只读的。如果只实现 set 访问器，则索引器是只写的。如果两者都实现，则索引器是可读写的。\r\n- 索引器中的参数可以是 ref 或 out 类型。这使得我们可以在索引器内部修改参数的值，并在调用方的作用域内保留更改。\r\n- 索引器中的参数可以是可变参数。这使得我们可以使用任意数量的索引来访问对象的元素。\r\n## 结论\r\n\r\nC# 索引器提供了一种方便的方法来访问和操作对象的元素，而不需要暴露类中的字段或属性。它们通常用于自定义集合类中，以允许使用类似于数组的语法来访问集合元素。在实现索引器时，需要注意参数的类型和访问器的实现方式，以确保正确地访问和操作对象的元素。\r\n','C# 索引器（Indexer）','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,32),('0a6ccf33-c680-ab36-c63e-3a0ff53f8680',0,'- [Stream](https://github.com/GetStream/stream-chat-net)  官方 .NET API 客户端，用于 Stream Chat，这是一个用于构建聊天应用程序的服务。','聊天','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,19),('0a710732-22ec-279c-5164-3a0fe9b5b44a',0,'C# 中的委托是一个指向方法的引用，允许我们像对象一样处理方法。通过委托，我们可以将方法作为参数传递给其他方法，也可以将方法保存在变量中，然后在需要时执行它。\r\n## 定义委托\r\n\r\n在 C# 中，委托定义使用 `delegate` 关键字，其语法如下：\r\n\r\n```csharp\r\n\r\ndelegate returnType delegateName(parameterList);\r\n```\r\n\r\n\r\n\r\n其中： \r\n- `returnType`：表示委托所引用的方法的返回类型。 \r\n- `delegateName`：表示委托的名称。 \r\n- `parameterList`：表示委托所引用的方法的参数列表。\r\n\r\n下面是一个示例代码，定义了一个委托 `CalculateDelegate`：\r\n\r\n```csharp\r\n\r\ndelegate int CalculateDelegate(int x, int y);\r\n```\r\n\r\n\r\n\r\n该委托引用的方法需要接受两个 int 类型的参数，返回一个 int 类型的值。\r\n## 创建委托实例\r\n\r\n创建委托实例的语法如下：\r\n\r\n```csharp\r\n\r\ndelegateName instanceName = new delegateName(methodName);\r\n```\r\n\r\n\r\n\r\n其中： \r\n- `delegateName`：表示委托的名称。 \r\n- `instanceName`：表示委托实例的名称。 \r\n- `methodName`：表示委托所引用的方法的名称。\r\n\r\n下面是一个示例代码，创建了一个委托实例 `addDelegate`，引用了一个名为 `Add` 的方法：\r\n\r\n```csharp\r\n\r\ndelegate int CalculateDelegate(int x, int y);\r\n\r\nclass Program\r\n{\r\n    static int Add(int x, int y)\r\n    {\r\n        return x + y;\r\n    }\r\n\r\n    static void Main(string[] args)\r\n    {\r\n        CalculateDelegate addDelegate = new CalculateDelegate(Add);\r\n    }\r\n}\r\n```\r\n\r\n\r\n## 调用委托\r\n\r\n通过委托实例，我们可以调用委托所引用的方法。委托实例的调用方式与方法调用方式类似，只需要使用委托实例的名称即可。下面是一个示例代码，调用了上述创建的委托实例：\r\n\r\n```csharp\r\n\r\ndelegate int CalculateDelegate(int x, int y);\r\n\r\nclass Program\r\n{\r\n    static int Add(int x, int y)\r\n    {\r\n        return x + y;\r\n    }\r\n\r\n    static void Main(string[] args)\r\n    {\r\n        CalculateDelegate addDelegate = new CalculateDelegate(Add);\r\n\r\n        int result = addDelegate(1, 2);\r\n\r\n        Console.WriteLine(result);  // 输出：3\r\n    }\r\n}\r\n```\r\n\r\n\r\n## 委托链\r\n\r\nC# 中的委托还支持委托链的概念，即将多个委托实例组合成一个委托实例。当调用委托实例时，将按照添加顺序调用每个委托实例。委托链的语法如下：\r\n\r\n```csharp\r\n\r\ndelegateName = delegateName1 + delegateName2 + ...;\r\n```\r\n\r\n\r\n\r\n下面是一个示例代码，使用委托链实现了两个方法的加法：\r\n\r\n```csharp\r\n\r\ndelegate int CalculateDelegate(int x, int y);\r\n\r\nclass Program\r\n{\r\n    static int Add(int x, int y)\r\n    {\r\n        return x + y;\r\n    }\r\n\r\n    static int Multiply(int x, int y)\r\n    {\r\n        return x * y;\r\n    }\r\n\r\n    static void Main(string[] args)\r\n    {\r\n        CalculateDelegate addDelegate = new CalculateDelegate(Add);\r\n        CalculateDelegate multiplyDelegate = new CalculateDelegate(Multiply);\r\n\r\n        CalculateDelegate chainDelegate = addDelegate + multiplyDelegate;\r\n\r\n        int result = chainDelegate(2, 3);\r\n\r\n        Console.WriteLine(result);  // 输出：6\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上述示例代码中，我们创建了两个委托实例 `addDelegate` 和 `multiplyDelegate`，分别引用了 `Add` 和 `Multiply` 两个方法。然后，通过将这两个委托实例组合成一个委托链 `chainDelegate`，实现了两个方法的加法和乘法。最后，调用委托链实例 `chainDelegate`，输出了结果 6。\r\n## 总结\r\n\r\nC# 委托是一种非常重要的语言特性，它允许我们将方法作为参数传递给其他方法，也可以将方法保存在变量中，然后在需要时执行它。通过委托链，我们还可以将多个委托实例组合成一个委托实例，实现多个方法的组合调用。\r\n\r\n希望本文能够帮助大家更好地理解和使用 C# 委托。如果您有任何疑问或建议，欢迎在下方留言区留言。\r\n','C# 委托（Delegate）','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,33),('0a814c6d-3803-5e86-75ef-3a0f83ad712c',0,'## 简介\n当程序出现异常之后，框架需要记录，同时反馈前端对应的信息\n它通过`全局错误中间件`实现\n\n错误后，将统一返回以下模型格式：\n``` cs\npublic class RemoteServiceErrorInfo\n{\n\n        public string? Code { get; set; }\n\n        /// <summary>\n        /// message.\n        /// </summary>\n        public string? Message { get; set; }\n\n        /// <summary>\n        /// details.\n        /// </summary>\n        public string? Details { get; set; }\n\n        /// <summary>\n        /// data.\n        /// </summary>\n        public object? Data { get; set; }\n}\n```\n\n框架内部错误分为三大类：\n#### 系统内部错误\n> httpCode：500\n系统不能处理、或未发现的错误，需要即使进行修复\n#### 业务友好错误\n> httpCode:403\n跟业务相关，业务请求不合理，例如：登录失败、数据重复\n#### 授权错误\n> httpCode:401\n跟权限相关，代表当前用户权限不足\n\n## 使用\n你可以在程序任何地方进行抛出错误\n``` cs\n            throw new Exception(\"系统错误\");//状态码500\n            throw new UserFriendlyException(\"业务错误\");//状态码403\n            throw new NotImplementedException(\"未实现\");//状态码501\n            throw new UserFriendlyException(\"花里胡哨错误\",\"401\");//状态码401\n```\nAbp内部将自动抓取，并返回给前端','异常处理','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','00000000-0000-0000-0000-000000000000','2023-12-16 15:21:42','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('0c87f251-cc9e-29f3-e4eb-3a0ff57edf85',0,'\n**C#Winform全原创贪吃蛇无bug极致简易小白必学逻辑完整代码**\n\n**作者写给小白的话：**\n百度其实有很多贪吃蛇代码，但要么代码过于复杂根本看不懂，要么bug一堆为乞丐版贪吃蛇，要么解释不清楚为残缺代码，还有的是用数据结构弄的贪吃蛇，小白根本都不知道发生了什么，非常不适合学习，顶多复制看看就没了。\n**本程序特点：**\n基本把已知的bug解决完，简单易懂都是用基础做的，没有加数据结构。没有加任何花里胡哨的东西，代码明了简介，非常适合小白进行学习！\n\n![image.png](/prod-api/file/746b978f-f5a7-f00e-cf28-3a0ff57ea2be/true)\n![image.png](/prod-api/file/e15f1cf3-e48c-71db-050d-3a0ff57ec0fe/true)\n\n **1. **程序功能介绍：****\n 就是个贪吃蛇的游戏，没啥说的！\n \n **2. **代码功能解释：****\nsnake_show()//初始化蛇的生成界面\nmove_Tick()//计时器自动移动\nKeyPress()//接受按键控制方向\negg_show()//蛋的生成\neat()//吃蛋的过程\ncheak()//检测函数\ntail_show()//控制蛇尾的生成方向\nsnake_bug()//蛇吃到自己结束游戏\nwall_bug()//撞墙结束游戏\negg_bug()//蛋刷到蛇身的bug\n禁止按下反方向键移动bug\n **3. 全部完整代码：**\n\n 1. 创建winform项目,命名为MRTCS ------（末日贪吃蛇）\n\n    ps:主要之前一开始弄的是tcs（贪吃蛇），然后又弄了cjtcs（超级贪吃蛇），之后弄了zztcs（最终贪吃蛇）\n\n 2. 直接从工具箱拖2个timer计时器，改名为move和cheak，move间隔为300，cheak间隔为1,窗口大小设为1000，1000\n\n 3. 然后复制一下代码\n\n 4. 最后把代码里面的事件放进相应的控件中（load，move，cheak，KeyPress）\n\n 5. 运行ok！\n**以下代码：**\n\n``` cs\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\n\nnamespace MRTCS\n{\n    public partial class Form1 : Form\n    {\n        public Form1()\n        {\n            InitializeComponent();\n        }\n        int x = 0; int y = 0; int count = 0;\n        char fxp = ''s'';\n        char oldfxp = ''w'';\n  \n        bool egg_exist = false;\n        Label[,] map = new Label[100, 100];//地图的二维数组\n        Label[] snake = new Label[1000];//蛇的数组\n        Label egg = new Label();//蛋的标签\n        Random egg_position = new Random();\n\n        private void Form1_Load(object sender, EventArgs e)//load事件\n        {\n\n            snake_show();\n       \n\n        }\n        private void snake_show()//初始化蛇的生成界面\n        {\n            Label snake_template = new Label();\n            snake_template.Size = new Size(100, 100);\n            snake_template.BackColor = Color.Black;\n            snake_template.Location = new Point(0, 0);\n            snake[count] = snake_template;\n            Controls.Add(snake[count]);\n        }\n       \n\n        private void move_Tick(object sender, EventArgs e)//计时器自动移动\n        {\n            if (count > 0)\n            {\n                for (int i = count; i > 0; i--)\n                {\n                    snake[i].Location = snake[i - 1].Location;\n                }\n            }\n            switch (fxp)\n            {\n                case ''a'': snake[0].Left -= 100; break;\n                case ''d'': snake[0].Left += 100; break;\n                case ''w'': snake[0].Top -= 100; break;\n                case ''s'': snake[0].Top += 100; break;\n            }\n\n            eat();\n\n        }\n\n        private void Form1_KeyPress(object sender, KeyPressEventArgs e)//接受按键控制方向\n        {\n            {\n                switch (e.KeyChar)\n                {\n                    case ''a'': if (oldfxp != ''d'' || count == 0) fxp = ''a''; break;\n                    case ''d'': if (oldfxp != ''a'' || count == 0) fxp = ''d''; break;\n                    case ''w'': if (oldfxp != ''s'' || count == 0) fxp = ''w''; break;\n                    case ''s'': if (oldfxp != ''w'' || count == 0) fxp = ''s''; break;\n                }\n                oldfxp = fxp;\n            }\n        }\n        private void egg_show()//蛋的生成\n        {\n            int x = egg_position.Next(0, 9);\n            int y = egg_position.Next(0, 9);\n            egg.Location = new Point(x * 100, y * 100);\n            egg.Size = new Size(100, 100);\n            egg.BackColor = Color.Red;\n            Controls.Add(egg);\n        }\n\n        private void eat()//吃蛋的过程\n        {\n            if (snake[0].Location == egg.Location)\n            {\n                ++count;\n                Label snake_template = new Label();\n                snake_template.Size = new Size(100, 100);\n                snake_template.BackColor = Color.Black;\n                snake_template.Location = tail_show(); /*new Point(snake[count - 1].Left - 100, snake[count - 1].Top);*/\n                snake[count] = snake_template;\n                Controls.Add(snake[count]);\n                egg_exist = false;\n            }\n        }\n\n        private void cheak_Tick(object sender, EventArgs e)//检测\n        {\n            if (!egg_exist)//刷蛋\n            {\n                egg_show();\n                egg_exist = true;\n            }\n            egg_bug();\n            snake_bug();\n            wall_bug();\n        }\n\n        private void egg_bug()//蛋刷到蛇身\n        {\n            for (int i = 0; i < count + 1; i++)\n            {\n                if (snake[i].Location == egg.Location && i != 0)\n                {\n                    egg_exist = false;\n                }\n\n            }\n        }\n        private void snake_bug()//蛇吃到自己\n        {\n            for (int i = 0; i < count + 1; i++)\n            {\n                if (snake[i].Location == snake[0].Location && i != 0)\n                {\n                    move.Enabled = false;\n                    cheak.Enabled = false;\n                    MessageBox.Show(\"GameOver!\");\n\n                }\n\n            }\n        }\n        private void wall_bug()//撞墙\n        {\n            if (snake[0].Left < 0 || snake[0].Left > 900 || snake[0].Top < 0 || snake[0].Top > 900)\n            {\n                move.Enabled = false;\n                cheak.Enabled = false;\n                MessageBox.Show(\"GameOver!\");\n            }\n\n        }\n        private Point tail_show()//蛇尾的生成\n        {\n            if (count == 0|| count == 1)\n            {\n                if (snake[0].Top == egg.Top && snake[0].Left - 100 == egg.Left)\n                    return new Point(snake[0].Left + 100, snake[0].Top);\n                if (snake[0].Top == egg.Top && snake[0].Left + 100 == egg.Left)\n                    return new Point(snake[0].Left - 100, snake[0].Top);\n                if (snake[0].Left == egg.Left && snake[0].Top - 100 == egg.Top)\n                    return new Point(snake[0].Left, snake[0].Top + 100);\n                if (snake[0].Left == egg.Left && snake[0].Top + 100 == egg.Top)\n                    return new Point(snake[0].Left, snake[0].Top - 100);\n                else\n                    return new Point(-200,-200);\n            }\n            else\n            {\n                if (snake[count-1].Top == egg.Top && snake[count-2].Left - 100 == egg.Left)\n                    return new Point(snake[count-1].Left + 100, snake[count-1].Top);\n                if (snake[count-1].Top == egg.Top && snake[count - 2].Left + 100 == egg.Left)\n                    return new Point(snake[count-1].Left - 100, snake[count-1].Top);\n                if (snake[count-1].Left == egg.Left && snake[count - 2].Top - 100 == egg.Top)\n                    return new Point(snake[count-1].Left, snake[count-1].Top + 100);\n                if (snake[count-1].Left == egg.Left && snake[count - 2].Top + 100 == egg.Top)\n                    return new Point(snake[count-1].Left, snake[count-1].Top - 100);\n                else\n                    return new Point(-200, -200);\n            }\n        }\n    }\n}\n\n```\n以上为全部代码！\n**感谢阅读！**\n**有具体不懂的可以私聊问我！乐意教学！**\n','C#Winform--贪吃蛇','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 17:47:33','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('0cec4258-46f2-2df8-f5c0-3a0ff5452e3b',0,'![image.png](/prod-api/file/4314e274-d913-a5d7-709f-3a0ff54524af/true)','Middleware中间件','2da0361c-000d-e0d8-6737-3a0ff5421cdc','00000000-0000-0000-0000-000000000000','2024-01-07 16:44:32','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('0d334442-9fc3-0c8c-cf39-3a0ff53f867f',0,'- [Algorithmia](https://github.com/SolutionsDesign/Algorithmia)  - 用于 .NET 3.5 及更高版本的算法和数据结构库。Algorithmia 包含复杂的算法和数据结构，如图形、优先队列、命令、撤销重做等。 \r\n- [C# Algorithms](https://github.com/aalhour/C-Sharp-Algorithms)  - 标准数据结构和算法的 C# 插拔式类库项目。它包含 35+ 数据结构和 30+ 算法，设计为面向对象的独立组件。 \r\n- [Towel](https://github.com/ZacharyPatten/Towel)  - 数据结构、算法、数学、元数据、扩展、控制台、测量和其他有用的工具。 \r\n- [Akade.IndexedSet](https://github.com/akade/Akade.IndexedSet)  - 一个方便的数据结构，支持高效的内存中索引和查询，包括范围查询和模糊字符串匹配。','算法数据结构','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,2),('0e393c8b-4eec-a3fe-c511-3a0ff53f8680',0,'- [dnSpy](https://github.com/0xd4d/dnSpy)  - 开源的.NET程序集浏览器、编辑器、反编译器和调试器 \r\n- [ILSpy](https://ilspy.net/)  - ILSpy是开源的.NET程序集浏览器和反编译器 \r\n- [JustDecompile Engine](https://github.com/telerik/JustDecompileEngine)  - [JustDecompile](https://www.telerik.com/products/decompiler.aspx) 的反编译引擎 \r\n- [dotPeek](https://www.jetbrains.com/decompiler/)  - 免费的独立工具，基于ReSharper捆绑的反编译器。它可以可靠地将任何.NET程序集反编译为等效的C#或IL代码。它可以基于原始二进制文件直接创建Visual Studio解决方案。**[专有]**  **[免费]**','反编译','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,32),('0f753094-b421-7381-7ef4-3a0ff53f8680',0,'- [FastReport](https://github.com/FastReports/FastReport)  - 用于 .NET Core 2.x/.Net Framework 4.x 的开源报告生成器。FastReport 可用于 ASP.NET MVC 和 Web API 应用程序。 \r\n- [NReco PivotData](https://www.nrecosite.com/pivot_data_library_net.aspx)  - 内存中的数据聚合/OLAP 库，支持生成数据透视表（导出为 HTML），包括 ASP.NET 数据透视表构建控件 **[$][免费用于单一部署/非SaaS]** 。','报表','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,16),('10eba897-7340-df30-3faf-3a0fe48288e8',1,'C# 是一种现代化的面向对象编程语言，主要用于 Windows 平台的开发。在 C# 中，程序结构是指程序的组织方式和代码的组成部分，包括命名空间、类、方法等。\r\n## 命名空间\r\n\r\n命名空间是 C# 中用来组织代码的一种机制。它可以包含类、结构体、枚举、委托等类型，并且可以嵌套其他命名空间。命名空间的定义通常放在源文件的顶部，格式如下：\r\n\r\n```csharp\r\n\r\nnamespace MyNamespace\r\n{\r\n    // 类、结构体、枚举、委托等类型定义\r\n}\r\n```\r\n\r\n\r\n\r\n其中，`MyNamespace` 是命名空间的名称，可以根据实际需要自定义。如果在一个程序中定义了多个命名空间，可以使用 `using` 关键字引用它们，例如：\r\n\r\n```csharp\r\n\r\nusing System;\r\nusing MyNamespace;\r\n```\r\n\r\n\r\n## 类\r\n\r\n类是 C# 中最基本的组织代码的单元，它用来定义对象的属性和方法。一个类可以包含多个属性和方法，它们被称为类的成员。类的定义格式如下：\r\n\r\n```csharp\r\n\r\nclass MyClass\r\n{\r\n    // 类的成员定义\r\n}\r\n```\r\n\r\n\r\n\r\n其中，`MyClass` 是类的名称，也可以根据实际需要自定义。类的成员包括字段、属性、方法和事件等，它们的访问权限可以使用 `public`、`private`、`protected` 和 `internal` 关键字进行控制。\r\n## 方法\r\n\r\n方法是 C# 中用来执行特定操作的代码块，它可以带有参数和返回值。方法的定义格式如下：\r\n\r\n```csharp\r\n\r\npublic void MyMethod(int arg1, string arg2)\r\n{\r\n    // 方法体\r\n}\r\n```\r\n\r\n\r\n\r\n其中，`public` 是访问修饰符，表示该方法可以被其他类访问；`void` 表示该方法没有返回值；`MyMethod` 是方法的名称，可以根据实际需要自定义；`int arg1` 和 `string arg2` 是方法的参数，它们的类型需要在参数名称之前声明。\r\n## 控制语句\r\n\r\nC# 中有多种控制语句可以用来控制程序的执行流程，包括条件语句、循环语句和跳转语句等。\r\n### 条件语句\r\n\r\n条件语句用来根据条件判断执行不同的代码块。C# 中的条件语句包括 `if`、`else` 和 `switch` 语句，例如：\r\n\r\n```csharp\r\n\r\nif (condition)\r\n{\r\n    // 条件为真时执行的代码\r\n}\r\nelse\r\n{\r\n    // 条件为假时执行的代码\r\n}\r\n\r\nswitch (variable)\r\n{\r\n    case value1:\r\n        // 变量等于 value1 时执行的代码\r\n        break;\r\n    case value2:\r\n        // 变量等于 value2 时执行的代码\r\n        break;\r\n    default:\r\n        // 变量不等于 value1 或 value2 时执行的代码\r\n        break;\r\n```\r\n\r\n\r\n\r\n}\r\n\r\n```arduino\r\n\r\n### 循环语句\r\n\r\n循环语句用来多次执行相同的代码块。C# 中的循环语句包括 `while`、`do-while` 和 `for` 语句，例如：\r\n\r\n```csharp\r\nwhile (condition)\r\n{\r\n    // 循环条件为真时执行的代码\r\n}\r\n\r\ndo\r\n{\r\n    // 至少执行一次的循环代码\r\n} while (condition);\r\n\r\nfor (int i = 0; i < 10; i++)\r\n{\r\n    // 执行 10 次的循环代码\r\n}\r\n```\r\n\r\n\r\n### 跳转语句\r\n\r\n跳转语句用来改变程序的执行流程。C# 中的跳转语句包括 `break`、`continue` 和 `return` 语句，例如：\r\n\r\n```csharp\r\n\r\nwhile (true)\r\n{\r\n    if (condition)\r\n    {\r\n        break; // 跳出循环\r\n    }\r\n    if (otherCondition)\r\n    {\r\n        continue; // 继续循环下一次迭代\r\n    }\r\n}\r\n\r\npublic int MyMethod()\r\n{\r\n    return 0; // 返回一个整数值\r\n}\r\n```\r\n\r\n\r\n## 异常处理\r\n\r\n异常处理是指在程序运行过程中发生错误时，采取一些措施来保证程序正常运行。C# 中的异常处理机制使用 `try`、`catch` 和 `finally` 语句来实现，例如：\r\n\r\n```csharp\r\n\r\ntry\r\n{\r\n    // 可能会抛出异常的代码\r\n}\r\ncatch (Exception ex)\r\n{\r\n    // 处理异常的代码\r\n}\r\nfinally\r\n{\r\n    // 无论是否抛出异常都会执行的代码\r\n}\r\n```\r\n\r\n\r\n\r\n其中，`try` 语句包含可能会抛出异常的代码块；`catch` 语句用来捕获并处理异常，`Exception ex` 表示要捕获的异常类型，可以根据实际需要自定义；`finally` 语句包含无论是否抛出异常都会执行的代码块。\r\n## 总结\r\n\r\nC# 程序结构包括命名空间、类、方法、控制语句和异常处理等组成部分。掌握 C# 程序结构对于编写高质量的 C# 程序非常重要，希望本文能够帮助您更好地理解和掌握 C# 程序结构。\r\n','C# 程序结构','67bbbd51-8f39-6bc3-46fe-3a0fa9fe8385','00000000-0000-0000-0000-000000000000','2024-01-04 10:38:00','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','2024-01-04 23:56:49',0),('11de4df7-29ad-6cdb-4c29-3a0ff587b4bf',0,'**C#Winform--俄罗斯方块**\n\n**作者心得**\n好吧，我承认，这是一个面向过程弄的\n虽然打算面向对象，但技术不成熟，弄着弄着，就变成面向对象了\n代码。。。。数量直接指数爆炸，我怕这个页面都放不下\n另外，第一次使用了第三方控件，美滋滋\n\n**部分核心源代码**\n（太多！太多了！也就只能放下一个地图）\n（其他面向过程代码真的太多了）\n\n```csharp\n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\nusing CCWin;\nnamespace ZJELSFK\n{\n    public partial class Form1 : CCSkinMain\n    {\n        public Form1()\n        {\n            InitializeComponent();\n        }\n        Button[,] map = new Button[15, 25];\n        bool start = true;\n        char fxp = ''o'';\n        int x = 4;\n        int y = 0;\n        int sco = 0;\n        string create = \"O\";\n        string create_next = \"O\";\n        bool number = true;\n        bool change = false;\n        bool end = false;\n        Random random = new Random();\n        private void Form1_Load(object sender, EventArgs e)//创建地图\n        {\n        \n            for (int i = 0; i < 10; i++)\n            {\n                for (int j = 0; j < 20; j++)\n                {\n                    Button map_template = new Button();\n                    map_template.Size = new Size(20, 20);\n                    map_template.BackColor = Color.White;\n                    map_template.Location = new Point(i * 20 + 20, j * 20);\n                    map[i, j] = map_template;\n                    Controls.Add(map[i, j]);\n                }\n            }\n\n            for (int i = 0; i < 21; i++)\n            {\n                Button map_template2 = new Button();\n                map_template2.Size = new Size(20, 20);\n                map_template2.BackColor = Color.Black;\n                map_template2.Location = new Point(0, i * 20);\n                Controls.Add(map_template2);\n                Button map_template3 = new Button();\n                map_template3.Size = new Size(20, 20);\n                map_template3.BackColor = Color.Black;\n                map_template3.Location = new Point(220, i * 20);\n                Controls.Add(map_template3);\n                if (i < 12)\n                {\n                    Button map_template4 = new Button();\n                    map_template4.Size = new Size(20, 20);\n                    map_template4.BackColor = Color.Black;\n                    map_template4.Location = new Point(i * 20, 400);\n                    Controls.Add(map_template4);\n                }\n            }\n            create = random_blocks();\n            create_next = random_blocks(); //初始化随机方块\n        }\n\n\n```\n\n**效果截图**\n![image.png](/prod-api/file/cf85afd6-a509-fea9-b88a-3a0ff5877418/true)\n\n![image.png](/prod-api/file/8244f012-bd52-da0a-508b-3a0ff5879277/true)\n**作者的话**\n这个俄罗斯方块还挺好玩的，其实打算弄下去，改进为 面相对象，但是当我有这个想法的时候，已经开发Asp项目，放弃了winform，不想再弄这玩意儿了，哎！\n','C#Winform--俄罗斯方块','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 17:57:12','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('121ea144-a7e6-76d6-c651-3a0ff53f8681',0,'- [Curryfy](https://github.com/leandromoh/Curryfy)  - 提供强类型的C#委托扩展方法，以利用函数式编程技巧，如柯里化和部分应用。 \r\n- [language-ext](https://github.com/louthy/language-ext)  - 该库使用C# 6+的特性，提供了一个功能性的“基础类库”，如果你闭上眼睛看，它可以看起来像是语言本身的扩展。它还包括一个类似于Erlang的进程系统（actors），可以选择将消息和状态持久化到Redis（注意，你可以在不使用Redis的情况下进行内部消息传递）。进程系统还支持消息和状态的Rx流，允许完整的反应式事件和消息分发系统。 \r\n- [Optional](https://github.com/nlkl/Optional)  - 一个强大的C#选项类型。 \r\n- [JFlepp.Maybe](https://github.com/jflepp/JFlepp.Maybe)  - 一个适用于C#的Maybe类型，旨在将F#中的Option类型以C#的方式进行移植。 \r\n- [Optuple](https://github.com/atifaziz/Optuple)  - 为.NET Standard提供了一种在非侵入性方式中为`(bool, T)`提供Option-like语义的库；也就是说，对于库或其用户来说，没有新的选项类型依赖关系。 \r\n- [MoreLinq](https://github.com/MoreLinq/MoreLinq)  - 为LINQ to Objects提供额外的方法。\r\n','函数式编程','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,45),('12ed21a4-d495-aa73-a6da-3a0fe75ec506',1,'title: C# 简介\r\narticle: false\r\ndate: 2023-04-15 11:39:44\r\npermalink: /pages/9d25e7/\r\n---\r\n\r\n## 简介\r\n\r\nC# 是由微软公司开发的一种面向对象、类型安全、高效且简单的编程语言。它最初于 2000 年发布，并随后成为 .NET 框架的一部分，逐渐成为开发 Windows 应用程序和 Web 应用程序的主要选择之一。C# 语言的设计目标是提供一种现代、通用、面向对象的编程语言，使开发人员能够更轻松地构建 Windows 应用程序、Web 应用程序、服务端应用程序等。\r\n## 语言特点\r\n\r\nC# 语言具有以下特点：\r\n\r\n- 简单易学：C# 语法简单，易于理解，同时也有着很多的教程和文档。\r\n- 类型安全：C# 提供了类型检查，能够在编译时发现很多错误。\r\n- 面向对象：C# 是一种面向对象的语言，支持类、接口、继承、封装等面向对象的概念。\r\n- 支持泛型：C# 支持泛型编程，能够实现更加通用的代码。\r\n- 自动内存管理：C# 采用垃圾回收机制，不需要开发人员手动管理内存，减少了内存泄漏等问题的出现。\r\n\r\n## 应用领域\r\n\r\nC# 语言的应用领域非常广泛，主要包括以下方面：\r\n\r\n- Windows 应用程序开发：C# 是 Windows 平台上的主流编程语言，开发 Windows 应用程序非常方便。\r\n- Web 应用程序开发：C# 和 ASP.NET 框架一起使用，可以开发 Web 应用程序和服务端应用程序。\r\n- 游戏开发：C# 和 Unity 一起使用，能够开发各种类型的游戏。\r\n- 移动应用程序开发：C# 和 Xamarin 一起使用，可以开发 Android 和 iOS 平台上的移动应用程序。\r\n\r\n## 开发环境\r\n\r\n如果你想使用 C# 开发应用程序，可以使用 Visual Studio 开发环境。Visual Studio 是一款功能强大、易于使用的 IDE，支持多种编程语言，包括 C#。除此之外，你还可以使用 Visual Studio Code、Rider 等其他的开发环境。\r\n\r\n## 示例代码\r\n\r\n下面是一个使用 C# 编写的 \"Hello, World!\" 程序的示例代码：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        Console.WriteLine(\"Hello, World!\");\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n这个程序会在控制台输出 \"Hello, World!\" 字符串。\r\n','C# 简介','67bbbd51-8f39-6bc3-46fe-3a0fa9fe8385','00000000-0000-0000-0000-000000000000','2024-01-04 23:57:48','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','2024-01-05 00:05:21',0),('151a241c-e397-fd94-405d-3a0ff58e2131',0,'**作者的话**\n原谅我，第一次接触这玩意儿\nAJAX\nAsynchronous JavaScript and XML（异步的 JavaScript 和 XML）\n\nJauery\njQuery 是一个 JavaScript 库。\n制作了一个类似于百度的高级搜索功能，边输边加载\n**效果展示**\n![image.png](/prod-api/file/68d6b594-52dd-399f-f296-3a0ff58e14c2/true)\n\n```csharp\n<!DOCTYPE html>\n@{\n    Layout = \"\";\n}\n\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <title>AJAX高级搜索</title>\n    <script src=\"~/Scripts/jquery-3.4.1.js\"></script>\n    <link rel=\"stylesheet\" href=\"https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css\">\n    <script src=\"https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js\"></script>\n    <script src=\"https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js\"></script>\n    <script>\n\n        $(function () {\n            //1.页面加载之后，找到文本框的内容对它触发一个事件\n            $(\"#txtTitle\").keyup(function () {\n                //2.获取到文本框的内容,注意去空格\n                var title = $.trim($(\"#txtTitle\").val());\n                //3.获取到输入的内容之后，就要通过ajax传给后台\n                $.post(\"/Home/Test\", { \"title\": title }, function (data) {\n                    if (title == \"\") {\n                        $(\"#dtitles\").hide();\n                    }\n                    else {\n                        //显示展示div,把它清空\n                        $(\"#dtitles\").show().html(\"\");\n                        if (data == \"\") {\n                            $(\"#dtitles\").hide().html(\"\");\n                        }\n                        else {\n                            $(\"#dtitles\").append(data);\n\n                            //点击输入框复制\n                            $(\"li\").click(function () {\n                                $(\"#txtTitle\").val($(this).text());\n                                $(\"#dtitles\").hide().html(\"\");\n                            });\n\n                            //4.鼠标移上去之后，加一个背景\n                            $(\"li\").hover(function () {\n                                $(this).addClass(\"li1\");\n                            }, function () {\n                                $(this).removeClass(\"li1\");\n                            });\n                        }\n                    }\n                });\n            });\n\n\n        });\n    </script>\n    <style>\n        * {\n            padding: 0px;\n            margin: 0px;\n        }\n\n        #searchbox {\n            height: 46px;\n            width: 624px;\n            position: absolute;\n            top: 50%;\n            left: 50%;\n            margin-top: -300px;\n            margin-left:-322px;\n        }\n\n\n\n        #txtTitle {\n            height: 46px;\n            width: 524px;\n            line-height: 35px;\n            border: solid 1px #4791FF;\n            float: left;\n            border-radius: 5px 0 0 5px\n        }\n\n        #btnSelect a {\n            width: 100px;\n            height: 46px;\n            background: #167ED9;\n            display: block;\n            line-height: 37px;\n            color: #ffffff;\n            text-align: center;\n            line-height: 50px;\n            float: left;\n            border-radius: 0 5px 5px 0\n        }\n\n        a:link {\n            text-decoration: none;\n            list-style-type: none;\n        }\n\n        a:hover {\n            cursor: pointer;\n            list-style-type: none;\n        }\n\n        #dtitles {\n            width: 524px;\n            height: 300px;\n            border: solid 1px #CCCCCC;\n            display: none;\n            font-size: 12px;\n            \n        }\n\n        .li1 {\n            background: #F0F0F0;\n        }\n\n        ul li {\n            list-style: none;\n            margin-left: 5px;\n        }\n    </style>\n</head>\n<body>\n\n    <div id=\"searchbox\">\n\n            <div style=\"margin-left:15%;\"><img style=\"height: 206px; width: 432px\" src=\"~/bg.png\" /></div>\n\n            \n        <div><input type=\"text\" id=\"txtTitle\"></div>\n        \n        <div id=\"btnSelect\"><a href=\"javascript:;\">百度</a></div>\n        <div id=\"dtitles\"></div>\n    </div>\n    \n\n</body>\n</html>\n```\n\n\n','AjaxJquery--制作一个类似百度的搜索方式','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 18:04:13','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('1534dfeb-6884-fb07-d310-3a0ff58ef6f7',0,'**作者的话**\n这个已经投入实战了！！\n一个真正有意义的项目哦！\n自动打水印，一键上传，包括班级上传统计在这里插入代码片\n\n**效果展示**\n![image.png](/prod-api/file/09469f24-044a-a463-969e-3a0ff58eee8b/true)\n\n\n**源代码**\n\n```csharp\n@{\n    ViewBag.Title = \"Home Page\";\n}\n@using StudentSys.Models\n@{\n    jiftEntities ji = new jiftEntities();\n    var stu = from u in ji.student\n              select new\n              {\n                  u.name,\n                  u.num,\n                  u.time,\n                  u.sub\n              };\n}\n\n\n\n<link href=\"~/Content/bootstrap.css\" rel=\"stylesheet\" />\n\n\n<head>\n\n    <style>\n        #textul li {\n            height: 50px;\n            border: solid 1px #ced4da;\n            list-style-type: none;\n            color: #007bff;\n            line-height: 50px;\n            position: relative;\n            border-bottom: none;\n        }\n    </style>\n</head>\n\n<div class=\"container bg-light mt-1 shadow-sm\">\n    <div class=\"row\">\n        <ul id=\"textul\" class=\"my-5 col-3\">\n            @{\n                foreach (var k in stu)\n                {\n                    string t = \"[已提交]\";\n                    if (k.sub == 0)\n                    {\n                        t = \"[未提交]\";\n                    }\n                    <li class=\"text-center shadow-sm\">@t@k.num@k.name@k.time</li>\n\n                }\n            }\n        </ul>\n        <form method=\"post\" action=\"\" enctype=\"multipart/form-data\">\n        <div class=\"col-9\">\n            <div class=\"my-5 mx-auto w-75\">\n                <div class=\"input-group flex-nowrap\">\n                    <div class=\"input-group-prepend\">\n                        <span class=\"input-group-text\" id=\"addon-wrapping\">姓名：</span>\n                    </div>\n                    <input id=\"name\" type=\"text\" class=\"form-control\" placeholder=\"请输入你的姓名\" aria-label=\"请输入你的姓名\" aria-describedby=\"addon-wrapping\">\n                </div>\n            </div>\n\n            <div class=\"text-center\">\n                <p id=\"imgUploadX\" class=\"m-auto\"></p>\n            </div>\n               \n            \n\n\n            <div class=\"my-5 text-center mt-1\">\n                <input type=\"file\" id=\"uploadFile\" class=\"clip row m-auto invisible\" accept=\"image/*\">\n                <div class=\"row\">\n                    <div class=\"col-6\">\n                <label for=\"uploadFile\" class=\"btn btn-outline-primary m-auto col-6\">选择图片</label>\n                    </div>\n                    <div class=\"col-6\">\n                <button type=\"button\" class=\"btn btn-outline-primary m-auto  col-6\">提交截图</button>\n                     </div>\n                    </div>\n            </div>\n        </div>\n            </form>\n    </div>\n</div>\n<script>\n    var eleUploadFile = document.getElementById(''uploadFile'');\n    var eleImgUploadX = document.getElementById(''imgUploadX'');\n    if (history.pushState) {\n        eleUploadFile.addEventListener(''change'', function (event) {\n            var reader = new FileReader();\n            var file = event.target.files[0] || event.dataTransfer.files[0];\n            reader.onload = function (e) {\n                var base64 = e.target.result;\n                if (base64.length > 1024 * 10000) {\n                    alert(''图片尺寸请小于10000K'');\n                    return;\n                } else {\n                    // 使用canvas合成图片，并base64化\n                    imgTogether(base64, function (url) {\n                        // 尺寸\n                        var size =500 / (window.devicePixelRatio || 1);\n                        // 预览\n                        eleImgUploadX.innerHTML = ''<img class=\"mx-auto\" src=\"'' + url + ''\" width=\"'' + size + ''\" height=\"'' + size + ''\">'';\n                    });\n                }\n            };\n            reader.readAsDataURL(file);\n        });\n\n        // canvas图片合成\n        var imgTogether = function (url, callback) {\n            var canvas = document.createElement(''canvas'');\n            var size = 500;\n            canvas.width = size;\n            canvas.height = size;\n\n            var context = canvas.getContext(''2d'');\n\n            // 这是上传图像\n            var imgUpload = new Image();\n            imgUpload.setAttribute(\"crossOrigin\", ''Anonymous'');\n            imgUpload.onload = function () {\n                // 绘制\n                context.drawImage(imgUpload, 0, 0, size, size, 0, 0, size, size);\n                // 再次绘制\n                var imgname = document.getElementById(''name'').value;\n                context.font = \"50px Verdana\";\n                context.fillText(imgname, 10, 50, 250);\n                // 回调\n                callback(canvas.toDataURL(''image/png''));\n            };\n            imgUpload.src = url;\n        };\n    } else if (eleImgUploadX) {\n        eleImgUploadX.className = ''remind'';\n        eleImgUploadX.innerHTML = ''本演示IE10+下才有效果'';\n    }\n</script>\n\n```\n','JqueryJs--青年大学习截图上传统计工具','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 18:05:08','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('163afc07-fc66-3f79-ab38-3a0ff53f8684',0,'\r\n* [EmbedIO](https://github.com/unosquare/embedio) - 基于Mono构建的跨平台Web服务器。\r\n* [XSP](https://github.com/mono/xsp) - Mono的ASP.NET托管服务器。该模块包括一个Apache模块，一个可以连接到其他Web服务器的FastCGI模块，以及用于测试的独立服务器（类似于Microsoft的Cassini）。','WebServers','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,105),('16521d2c-0fe5-4496-8dd0-3a0fe7845287',1,'\r\n## 简介\r\n\r\nC# 是由微软公司开发的一种面向对象、类型安全、高效且简单的编程语言。它最初于 2000 年发布，并随后成为 .NET 框架的一部分，逐渐成为开发 Windows 应用程序和 Web 应用程序的主要选择之一。C# 语言的设计目标是提供一种现代、通用、面向对象的编程语言，使开发人员能够更轻松地构建 Windows 应用程序、Web 应用程序、服务端应用程序等。\r\n## 语言特点\r\n\r\nC# 语言具有以下特点：\r\n\r\n- 简单易学：C# 语法简单，易于理解，同时也有着很多的教程和文档。\r\n- 类型安全：C# 提供了类型检查，能够在编译时发现很多错误。\r\n- 面向对象：C# 是一种面向对象的语言，支持类、接口、继承、封装等面向对象的概念。\r\n- 支持泛型：C# 支持泛型编程，能够实现更加通用的代码。\r\n- 自动内存管理：C# 采用垃圾回收机制，不需要开发人员手动管理内存，减少了内存泄漏等问题的出现。\r\n\r\n## 应用领域\r\n\r\nC# 语言的应用领域非常广泛，主要包括以下方面：\r\n\r\n- Windows 应用程序开发：C# 是 Windows 平台上的主流编程语言，开发 Windows 应用程序非常方便。\r\n- Web 应用程序开发：C# 和 ASP.NET 框架一起使用，可以开发 Web 应用程序和服务端应用程序。\r\n- 游戏开发：C# 和 Unity 一起使用，能够开发各种类型的游戏。\r\n- 移动应用程序开发：C# 和 Xamarin 一起使用，可以开发 Android 和 iOS 平台上的移动应用程序。\r\n\r\n## 开发环境\r\n\r\n如果你想使用 C# 开发应用程序，可以使用 Visual Studio 开发环境。Visual Studio 是一款功能强大、易于使用的 IDE，支持多种编程语言，包括 C#。除此之外，你还可以使用 Visual Studio Code、Rider 等其他的开发环境。\r\n\r\n## 示例代码\r\n\r\n下面是一个使用 C# 编写的 \"Hello, World!\" 程序的示例代码：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        Console.WriteLine(\"Hello, World!\");\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n这个程序会在控制台输出 \"Hello, World!\" 字符串。\r\n','C# 简介','67bbbd51-8f39-6bc3-46fe-3a0fa9fe8385','00000000-0000-0000-0000-000000000000','2024-01-05 00:38:49','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','2024-01-05 00:39:19',0),('190541cc-32a2-3c3d-e711-3a0ff53f8680',0,'- [AIMLBot (Program#)](http://aimlbot.sourceforge.net/)  - 一个小型、快速、符合标准但易于定制的基于 AIML（人工智能标记语言）的聊天机器人的 C# 实现。 \r\n- [SIML](https://simlbot.com/)  - 合成智能标记语言，下一代聊天机器人和数字助手语言。 \r\n- [Mpt-Instruct-DotNet-S](https://github.com/NethermindEth/Mpt-Instruct-DotNet-S)  - 能够生成和解释 C# 代码的低级虚拟机（LLM），以及其用于在消费者 CPU 上运行的 C# 包装器（需要5GB以上RAM），包含控制台和 Blazor 示例项目。\r\n* [BotSharp](https://github.com/SciSharp/BotSharp) - BotSharp是AI Bot平台构建者的开源机器学习框架。\r\n* [NadekoBot](https://github.com/Kwoth/NadekoBot) - 用C#编写的开源，通用的Discord聊天机器人。\r\n* [Telegram.Bot](https://github.com/TelegramBots/Telegram.Bot) -  Telegram Bot API客户端。\r\n* [Funogram](https://github.com/Dolfik1/Funogram) -  F#Telegram Bot Api库。','人工智能','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,8),('193b98cd-64dc-af38-dcdd-3a0ff53f8683',0,'- [Rx.NET](https://github.com/dotnet/reactive)  - 响应式扩展（Rx）是一个用于组合异步和基于事件的程序的库，使用可观察序列和LINQ风格的查询操作符。 \r\n- [Dynamic Data](https://github.com/reactivemarbles/DynamicData)  - 集合的响应式扩展（Rx）。 \r\n- [ObsevableComputations](https://github.com/IgorBuchelnikov/ObservableComputations)  - 一个跨平台的.NET库，用于处理参数和结果均实现了INotifyPropertyChanged和INotifyCollectionChanged（ObservableCollection）接口的对象的计算。','响应式编程','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,85),('195867e3-fe66-4959-9dea-3a0ff543218e',0,'![image.png](/prod-api/file/4c618d9f-802d-12e7-6d4e-3a0ff542fb7e/true)','Program入口','2da0361c-000d-e0d8-6737-3a0ff5421cdc','00000000-0000-0000-0000-000000000000','2024-01-07 16:42:18','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('1986d25f-215f-5a84-c57c-3a0ff53f8683',0,'\r\n- [Ceras](https://github.com/rikimaru0345/Ceras)  - Ceras是一个二进制序列化器。它将任何对象转换为byte[]，并可以反向操作。它在功能、速度和使用上都超越一般，支持引用循环、大型/复杂的继承链、将对象分成部分等功能。 \r\n- [CsvExport](https://github.com/jitbit/CsvExport)  - 非常简单轻巧的CSV导出工具，与Excel兼容，支持转义文本和引号等功能。 \r\n- [Protobuf.NET](https://github.com/protobuf-net/protobuf-net)  - Protocol Buffers是Google用于大部分数据通信的二进制序列化格式的名称。 \r\n- [Json.NET](https://github.com/JamesNK/Newtonsoft.Json)  - 非常流行的高性能JSON框架，用于.NET。 \r\n- [ServiceStack.Text](https://github.com/ServiceStack/ServiceStack.Text)  - 用于servicestack.net的JSON、JSV和CSV文本序列化器。 \r\n- [Msgpack-Cli](https://github.com/msgpack/msgpack-cli)  - 适用于通用语言基础结构的MessagePack实现。 \r\n- [Jil](https://github.com/kevin-montrose/Jil)  - 快速的.NET JSON序列化器，基于Sigil构建（StackOverflow使用）。 \r\n- [ProtoBuf](https://github.com/SilentOrbit/protobuf)  - 根据.proto规范生成协议缓冲区序列化的C#代码。 \r\n- [FlatSharp](https://github.com/jamescourtney/FlatSharp)  - 快速、符合习惯的FlatBuffers实现。使用.fbs文件或属性。 \r\n- [F# Data](https://fsprojects.github.io/FSharp.Data/)  - F#类型提供程序，用于访问XML、JSON、CSV和HTML文件（基于示例文档）以及访问WorldBank数据。 \r\n- [Bond](https://github.com/Microsoft/bond)  - 用于处理有模式数据的跨平台框架。支持跨语言的序列化和功能强大的通用机制，用于高效操作数据。 \r\n- [Hyperion](https://github.com/akkadotnet/Hyperion)  - 高性能的多态序列化器，用于.NET框架。 \r\n- [FileHelpers](https://github.com/MarcosMeli/FileHelpers)  - 免费且易于使用的.NET库，用于在文件、字符串或流中导入或导出固定长度或分隔记录的数据。 \r\n- [FsPickler](https://github.com/mbraceproject/FsPickler)  - 用于.NET的快速多格式消息序列化器。 \r\n- [Migrant](https://github.com/antmicro/Migrant)  - 快速且灵活的序列化框架，可用于未装饰的类。 \r\n- [Utf8Json](https://github.com/neuecc/Utf8Json)  - 用于C#（.NET、.NET Core、Unity和Xamarin）的快速且零分配的JSON序列化器，直接读写UTF8二进制数据以提高性能。 \r\n- [ObjectDumper.NET](https://github.com/thomasgalliker/ObjectDumper)  - 将内存中的对象序列化为C#代码的工具。 \r\n- [FluentSerializer](https://github.com/Marvin-Brouwer/FluentSerializer#readme)  - 针对多种数据格式的基于配置文件的序列化器。','序列化','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,91),('19a572c7-eaf9-4f01-35f8-3a0ff544ebfb',0,'![image.png](/prod-api/file/68284e28-7430-1949-5631-3a0ff544df96/true)','Autofac','2da0361c-000d-e0d8-6737-3a0ff5421cdc','00000000-0000-0000-0000-000000000000','2024-01-07 16:44:15','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('1c8ab2c9-7714-b114-5978-3a0ff53f8682',0,'\r\n- [Cloudmersive PDF](https://cloudmersive.com/pdf-api)  - Cloudmersive PDF是一个本地的.NET Framework和.NET Core NuGet库以及API服务，可以高度扩展和准确地创建、修改、加密或转换PDF文档；并且可以免费使用，没有过期时间 **[免费]** \r\n- [Docotic.Pdf](https://bitmiracle.com/pdf-library/)  - 用于在.NET和.NET Core应用程序中创建、读取、编辑、绘制和打印PDF文档的PDF库。100%托管，没有不安全的代码块。 **[需要付费]**  **]** \r\n- [ITextSharp](https://github.com/itext/itextsharp)  - iText是一个PDF库，允许您在便携式文档格式（PDF）中创建、调整、检查和维护文档。 **[需要付费]**  **[免费提供给开源项目]** \r\n- [PdfiumViewer](https://github.com/pvginkel/PdfiumViewer)  - PdfiumViewer是基于PDFium项目的PDF查看器。 \r\n- [WkhtmlToPdf](https://github.com/codaxy/wkhtmltopdf)  - 基于wkhtmltopdf控制台实用程序的C#包装器。允许使用HTML和CSS生成漂亮的PDF。 \r\n- [Pdfium.Net SDK](https://pdfium.patagames.com/)  - 高级C# PDF库，用于渲染、创建、编辑、合并、拆分、打印和查看PDF文档。开源的PDF查看器可在[GitHub](https://github.com/patagames) 上找到。还提供[NuGet包](https://www.nuget.org/packages/Pdfium.Net.SDK/) ，可轻松将其包含到项目中。 **[需要付费]** \r\n- [PdfPig](https://uglytoad.github.io/PdfPig/)  - 在C#中从PDF中读取、创建和提取文本和其他内容（PdfBox的端口）。 \r\n- [QuestPDF](https://www.questpdf.com/)  - QuestPDF是一个经过现代化和经过测试的开源库，通过提供友好、可发现和可预测的C#流畅API，可以帮助您生成PDF文档。 \r\n- [Kevsoft.PDFtk](https://github.com/kevbite/Kevsoft.PDFtk)  - 用于驱动强大的pdftk二进制文件的包装器，可以填充PDF表单、获取字段信息、连接多个文档或页面、拆分文档、添加或替换印章，以及附加文件到页面或从页面下载文件。\r\n- [PdfSharpCore](https://github.com/ststeiger/PdfSharpCore)  - PdfSharpCore 是开源 .NET 库，可轻松即时创建和处理 PDF 文档。 相同的绘图例程可用于创建 PDF 文档、在屏幕上绘图或将输出发送到任何打印机。**[免费]** **[MIT开源]** ','PDF','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,78),('1d72b54e-ad7e-2f79-90e8-3a0ff53f8680',0,'\r\n- [BootstrapBlazor](https://github.com/dotnetcore/BootstrapBlazor)  - 基于 Bootstrap 和 Blazor 的企业级 UI 组件集合。 \r\n- [ant-design-blazor](https://github.com/ant-design-blazor/ant-design-blazor)  - 基于 Ant Design 和 Blazor WebAssembly 的企业级 UI 组件集合。 \r\n- [MASA.Blazor](https://github.com/BlazorComponent/MASA.Blazor)  - 基于 Material Design 和 Blazor WebAssembly 的企业级 UI 组件集合。 \r\n- [Megabit.Blazorise](https://github.com/Megabit/Blazorise)  - Blazorise 是一个构建在 Blazor 和 CSS 框架（如 Bootstrap、Bulma 和 Material）之上的组件库，非常易于使用。 \r\n- [blazork8s](https://github.com/weibaohui/blazork8s)  - 使用 Blazor 和 .NET Core 构建的 Kubernetes 管理界面。\r\n','Blazor','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,12),('1e533a0a-3ac0-5562-5e8d-3a0ff53f8682',0,'- [ExcelDna](https://github.com/Excel-DNA/ExcelDna)  - ExcelDna使使用C＃、F#或VB .NET创建和部署Excel插件更加容易。 \r\n- [ClosedXML](https://github.com/ClosedXML/ClosedXML)  - ClosedXML使开发人员更容易创建Excel 2007/2010文件。 \r\n- [NPOI](https://github.com/tonyqus/npoi)  - 该项目是POI Java项目的.NET版本，位于[https://poi.apache.org/。](https://poi.apache.org/%E3%80%82) \r\n- [EPPlus](https://github.com/JanKallman/EPPlus)  - EPPlus是一个.NET库，使用Open Office XML格式（xlsx）读取和写入Excel 2007/2010文件。 \r\n- [Open XML SDK](https://github.com/officedev/open-xml-sdk)  - Open XML SDK提供了用于处理Open XML文档（DOCX、XLSX和PPTX）的开源库。 \r\n- [DocX](https://github.com/xceedsoftware/DocX)  - DocX是一个.NET库，允许开发人员操作Word 2007/2010/2013文件，不需要安装Microsoft Word或Office。 \r\n- [ExcelDataReader](https://github.com/ExcelDataReader/ExcelDataReader)  - 用于读取Microsoft Excel文件（2.0-2007）的轻量级快速C#库。 \r\n- [NetOffice](https://github.com/NetOfficeFw/NetOffice)  - 用于Microsoft Office应用程序的.NET包装程序集。 \r\n- [GemBox.Bundle](https://www.gemboxsoftware.com/bundle)  - 一组.NET组件，支持快速、简单和高效地处理办公文件（Excel、Word、PowerPoint、PDF和电子邮件）。 **[需要付费]**  **[提供免费Lite版本]** \r\n- [Outlook Redemption](http://www.dimastr.com/redemption/home.htm)  - 用于处理Outlook对象模型和（扩展的）MAPI的库。支持Outlook 98 - 2019。可以与Exchange和Outlook中的对象/邮件/帐户/文件夹一起使用。 **[需要付费]** \r\n- [ShapeCrawler](https://github.com/ShapeCrawler/ShapeCrawler)  - 用于在没有安装Microsoft Office的情况下处理PowerPoint演示文稿的流畅API。 \r\n- [MiniExcel](https://github.com/shps951023/MiniExcel)  - 一个微型Excel助手，避免OOM并具有高性能，可用于创建/映射/模板填充数据。 \r\n- [Toxy](https://github.com/nissl-lab/toxy)  - .NET文本提取框架，支持一些文件格式。\r\n','Office','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,74),('1ee1880c-52cc-dc89-b4b5-3a0ff53f8680',0,'- [.NET Compiler Platform (\"Roslyn\") Analyzers](https://github.com/dotnet/roslyn-analyzers)  - 一些最初用于帮助完善静态分析API设计和实现的Roslyn诊断分析器。 \r\n- [PVS-Studio](https://pvs-studio.com/en/pvs-studio/)  - PVS-Studio是一款代码质量、安全性（SAST）和代码安全性的静态分析器。[[免费提供给开源项目](https://pvs-studio.com/en/order/open-source-license/) ] **[$]** \r\n- [NDepend](https://www.ndepend.com/)  - 是一个用于估算.NET代码质量和技术债务的Visual Studio和VS Team Services扩展程序，可使用C# LINQ语法创建代码规则，可视化代码结构并关注变更和演进。**[$]** \r\n- [App.Metrics](https://github.com/AppMetrics/AppMetrics)  - App Metrics是一个开源跨平台的.NET库，用于记录和报告应用程序内的指标，并报告其健康状况。更多详情请查看[文档](https://www.app-metrics.io/) 。 \r\n- [CodeMaid](http://www.codemaid.net/)  - Visual Studio扩展，用于清理、深入分析和简化C#、C++、F#、VB、PHP、JSON、XAML、XML、ASP、HTML、CSS、LESS、SCSS、JavaScript和TypeScript代码。 \r\n- [StyleCop](https://github.com/StyleCop)  - StyleCop分析C#源代码以强制执行一组样式和一致性规则。 \r\n- [Gendarme](https://github.com/spouliot/gendarme)  - 可扩展的基于规则的工具，用于查找.NET应用程序和库中的问题。 \r\n- [Metrics-Net](https://github.com/Recognos/Metrics.NET)  - 捕获CLR和应用程序级别的指标。因此，您知道发生了什么。 \r\n- [AspNet.Metrics](https://github.com/alhardy/aspnet-metrics)  - 捕获CLR、应用程序级别的Web请求指标。使用Metrics-Net的中间件和扩展。 \r\n- [BenchmarkDotNet](https://github.com/dotnet/BenchmarkDotNet)  - 强大的.NET性能基准库。 \r\n- [Bencher](https://bencher.dev/)  - 一套连续基准测试工具，旨在在持续集成中捕获性能回归。 \r\n- [Codinion](https://www.codinion.com/)  - 为C#和一些其他\"Visual\"特性提供了增强的语法突出显示。**[$]** \r\n- [NsDepCop](https://github.com/realvizu/NsDepCop)  - 用于在C#项目中强制实施命名空间依赖规则的静态代码分析工具。 \r\n- [WebBen](https://github.com/omerfarukz/WebBen)  - 用于对您的Hypertext Transfer Protocol (HTTP)服务器进行基准测试的工具。\r\n* [awesome-static-analysis](https://github.com/mre/awesome-static-analysis) - 针对各种编程语言的静态分析工具，链接和代码质量检查器的精选列表。\r\n* [CodeFormatter](https://github.com/dotnet/codeformatter) - CodeFormatter是使用Roslyn来自动重写我们的代码格式。\r\n* [DevSkim](https://github.com/Microsoft/DevSkim) - DevSkim是IDE扩展和语言分析器的框架，可在开发人员编写代码时在开发环境中提供内联安全性分析。\r\n* [RefactoringEssentials](https://github.com/icsharpcode/RefactoringEssentials) - Visual Studio扩展工具，支持分析和重构代码。\r\n* [roslyn-analyzers](https://github.com/dotnet/roslyn-analyzers) - Roslyn分析器分析您的代码的样式，质量和可维护性，设计和其他问题。\r\n* [StyleCopAnalyzers](https://github.com/DotNetAnalyzers/StyleCopAnalyzers) - StyleCop规则实现的.NET编译器平台。\r\n* [Audit.NET](https://github.com/thepirat000/Audit.NET) - 一个可扩展的框架，用于审核.NET和.NET Core中的执行操作。\r\n* [coverlet](https://github.com/tonerdo/coverlet) - Coverlet是.NET的跨平台代码覆盖框架。\r\n* [MiniCover](https://github.com/lucaslorentz/minicover) - 跨平台代码覆盖工具\r\n* [NBench](https://github.com/petabridge/NBench) - .NET应用程序的性能基准测试框架\r\n* [Nexogen.Libraries.Metrics](https://github.com/nexogen-international/Nexogen.Libraries.Metrics) - 用于在.NET中收集应用程序指标并将其导出到Prometheus的库。\r\n* [OpenCover](https://github.com/OpenCover/opencover) - 代码覆盖工具（仅适用于WINDOWS OS）\r\n* [PerformanceMonitor](https://github.com/dotnet-architecture/PerformanceMonitor) - .NET应用程序性能监视器。\r\n* [prometheus-net](https://github.com/prometheus-net/prometheus-net) - .NET指标,监视系统,检测应用程序的prometheus库。\r\n* [Prometheus.Client](https://github.com/PrometheusClientNet/Prometheus.Client) - Prometheus客户端。','代码分析和指标','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,23),('214c9cf9-a708-52dd-6009-3a0ff53f8680',0,'- [SharpCompress](https://github.com/adamhathcock/sharpcompress)  - SharpCompress是用于.NET/Mono/Silverlight/WP7的压缩库，可以进行解压缩，支持rar、7zip、zip、tar、bzip2和gzip，提供了前向只读和文件随机访问API。它还实现了zip、tar、bzip2和gzip的写入支持。 \r\n- [DotNetZip.Semverd](https://github.com/haf/DotNetZip.Semverd)  - 一个开源项目，提供了处理ZIP文件的.NET库以及一些相关工具。（是[不再维护 DotNetZip](https://archive.codeplex.com/?p=dotnetzip) 的分支） \r\n- [SharpZipLib](https://icsharpcode.github.io/SharpZipLib/)  - 一个完全用C#编写的Zip、GZip、Tar和BZip2库，适用于.NET平台。 \r\n- [Snappy for Windows](https://snappy.machinezoo.com/)  - 基于P/Invoke的.NET Snappy压缩库。 \r\n- [Snappy.Sharp](https://github.com/jeffesp/Snappy.Sharp)  - 用C#实现的Google Snappy压缩算法。\r\n* [lz4net](https://github.com/MiloszKrajewski/K4os.Compression.LZ4) - 适用于所有.NET平台的超快速压缩算法。','压缩','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,26),('21c32610-8371-97fb-5e14-3a0fe670d770',0,'测试导入','测试.md','4a14cce8-795a-8c68-8c2a-3a0fe1c7215a','00000000-0000-0000-0000-000000000000','2024-01-04 19:37:55','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,0),('22141ebb-7c79-d5a3-f662-3a0f83ae86b6',0,'我们的代码可直接编写在Src中，src中便是提供的模板使用\n\n当然，作为单独的模块或者示例，也可以通过前面的章节使用`脚手架`进行生成一个单独的模板\n\n## 使用脚手架创建代码目录\n![image.png](/prod-api/file/c364dd77-0905-22bc-c179-3a1004655d1b/true)\n我们本次的示例代码将全部放在源代码中的`sample`文件夹中，该文件夹只是提供的一个示例，作为顶层依赖，项目生成不会依赖于它\n\n![image.png](/prod-api/file/15ffd2d6-fe6d-7638-adc0-3a100467b186/true)\n进入对应的目录，使用\n``` shell\ndotnet new yi --name=Acme.BookStore\n```\n生成模板代码文件\n![image.png](/prod-api/file/0792c52d-d4c6-148b-0426-3a1004685bfc/true)\n\n然后将每一层项目手动添加到自己的项目解决方案中，右键添加现有方案\n\n![image.png](/prod-api/file/7a0fd471-767e-a5ed-eead-3a10046a90dd/true)\n\n设置启动项为Acme.BookStore.Web直接进行启动即可\n\n![image.png](/prod-api/file/32cccbae-df9d-b1be-dbc7-3a10046c47f6/true)\n\n> 可以看到swagger，至此一行代码没写，已经集成好了rbac与bbs的模块\n\n## 补充，去除内置的模块化\n由于模块化的存在，各个模板之间可以相互引用，如果我们的项目没有Bbs的功能，可直接去除依赖即可，相同的，没有Rbac也是可以直接去除的。\n\n当我们开发了属于自己的模块，其他项目也可以直接进行模块的依赖，非常的优雅\n\n去除模块依赖方式也非常的简单，只需要将各层相关的nuget或者项目依赖去除，将报错的红色的应用清理一下就完成了','1.创建应用服务端','e89c9593-f337-ada7-d108-3a0f83ae48e6','00000000-0000-0000-0000-000000000000','2023-12-16 15:22:53','59cf7e31-e3e4-544e-1038-3a0f836cc538','59cf7e31-e3e4-544e-1038-3a0f836cc538','2024-01-10 15:25:59',0),('2319a427-c784-2b02-ea26-3a0ff53f8680',0,'- [Fody](https://github.com/Fody/Fody)  - 编辑.net程序集的可扩展工具。\r\n- [ILRepack](https://github.com/gluck/il-repack)  - ILMerge 的开源替代品。 \r\n- [Mono.Cecil](https://github.com/jbevain/cecil)  - Cecil 是一个用于生成和检查以 ECMA CIL 格式表示的程序和库的库。','程序集','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,9),('259333a1-1672-cc4c-ae1e-3a0ff53ad549',0,'# AspNetCore面试题\r\n\r\n**1、什么是dot net core的startup class?**\r\n\r\n答：Startup class是dot net core应用的入口。所有的dot net core应用必须有这个class 这个类用来配置应用。\r\n\r\n　　这个类的调用是在program main函数里面进行配置的。类的名字可以自己定义。\r\n\r\n**2、什么是中间件?**\r\n\r\n答：中间件在这里是指注入到应用中处理请求和响应的组件。\r\n\r\n**3、application builder的use和run方法有什么区别?**\r\n\r\n答：这两个方法都在start up class的configure方法里面调用。都是用来向应用请求管道里面添加中间件的。Use方法可以调用下一个中间件的添加，而run不会。\r\n\r\n**4、dot net core 管道里面的map拓展有什么作用?**\r\n\r\n答：可以针对不同的路径添加不同的中间件。\r\n\r\n**5、dot net core里面的路径是如何处理的?**\r\n\r\n答：路径处理是用来为进入的请求寻找处理函数的机制。所有的路径在函数运行开始时进行注册。\r\n\r\n　　主要有两种路径处理方式，常规路径处理和属性路径处理。常规路径处理就是用MapRoute的方式设定调用路径，属性路径处理是指在调用函数的上方设定一个路径属性。\r\n\r\n**6、如何在dot net core中激活session功能?**\r\n\r\n答：首先要添加session包. 其次要在config service方法里面添加session。然后又在configure方法里面调用usesession。\r\n\r\n**7、描述一下依赖注入后的服务生命周期?**\r\n\r\n答：asp.net core主要提供了三种依赖注入的方式\r\n\r\n其中AddTransient与AddSingleton比较好区别\r\n\r\nAddTransient瞬时模式：每次都获取一个新的实例\r\n\r\nAddSingleton单例模式：每次都获取同一个实例\r\n\r\n \r\n\r\n而AddTransient与AddScoped的区别更不容易区别一点\r\n\r\n首先这两种方式每次请求得到的都不是同一个对象，从这点看会发现这两个都一样。\r\n\r\n但是我们可以继续分细一点，虽然不同的请求得到的结果不同，但是我们可以在同一次请求中去获取多次实例测试。\r\n\r\n小总结:\r\n\r\nAddTransient瞬时模式：每次请求，都获取一个新的实例。即使同一个请求获取多次也会是不同的实例\r\n\r\nAddScoped：每次请求，都获取一个新的实例。同一个请求获取多次会得到相同的实例\r\n\r\nAddSingleton单例模式：每次都获取同一个实例\r\n\r\n**8、dot net core跟dot net比较有哪些更好的地方?**\r\n\r\n　　答：第一是跨平台，它可以运行在三大操作系统上面，windows， Linux和MAC。\r\n\r\n　　第二是对架构本身安装没有依赖，因为所有的依赖都跟程序本身在一起。\r\n\r\n　　第三是dot net core处理请求的效率更高，能够处理更多的请求。\r\n\r\n　　第四是dot net core有更多的安装配置方法。\r\n\r\n**9、asp dot core有哪些好的功能？**\r\n\r\n答：第一是依赖注入。\r\n\r\n第二是日志系统架构。\r\n\r\n第三是引入了一个跨平台的网络服务器，kestrel。可以没有iis, apache和nginx就可以单独运行。\r\n\r\n第四是可以使用命令行创建应用。\r\n\r\n第五是使用APP settings json file来配置工程。\r\n\r\n第六是使用start up来注册服务。\r\n\r\n第七是更好的支持异步编程。\r\n\r\n第八是支持web socket和signal IR。\r\n\r\n第九是对于跨网站的请求的预防和保护机制。','AspNetCore面试题','f6462b48-9601-0253-6450-3a0ff538dfa4','00000000-0000-0000-0000-000000000000','2024-01-07 16:33:14','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,1),('2694ee8d-3b1a-b0a3-e2e0-3a0ff58533cf',0,'**C#Unity--3D迷宫**\n\n**作者心得**\n2d迷宫都有了\n能少的了3d？？？\n这不就来了？\n\n**源代码**\n\n```csharp\nusing System.Collections;\nusing System.Collections.Generic;\nusing UnityEngine;\n\npublic class Player : MonoBehaviour\n{\n    Transform m_camTransform;\n    Vector3 m_camRot;\n    float m_camHeight = 1.4f;\n    public Transform m_transform;\n    CharacterController m_ch;\n    float m_movSpeed = 3.0f;\n    float m_gravity = 2.0f;\n    public int m_life = 5;\n    // Start is called before the first frame update\n    void Start()\n    {\n        m_transform = this.transform;\n        m_ch = this.GetComponent<CharacterController>();\n        m_camTransform = Camera.main.transform;\n        m_camTransform.position = m_transform.TransformPoint(0, m_camHeight,0);\n        m_camTransform.rotation = m_transform.rotation;\n        m_camRot = m_camTransform.eulerAngles;\n        Cursor.lockState = CursorLockMode.Locked;\n        Cursor.visible = false;\n    }\n\n    // Update is called once per frame\n    void Update()\n    {\n        if (m_life <= 0)\n            return;\n        Control();\n    }\n    void Control()\n    {\n        float rh = Input.GetAxis(\"Mouse X\");\n        float rv = Input.GetAxis(\"Mouse Y\");\n        m_camRot.x -= rv;\n        m_camRot.y += rh;\n        m_camTransform.eulerAngles = m_camRot;\n        Vector3 camrot = m_camTransform.eulerAngles;\n        camrot.x = 0;camrot.z = 0;\n        m_transform.eulerAngles = camrot;\n        float xm = 0, ym = 0, zm = 0;\n        //ym -= m_gravity * Time.deltaTime;\n        if (Input.GetKey(KeyCode.W))\n        {\n            zm += m_movSpeed * Time.deltaTime;\n        }\n        if (Input.GetKey(KeyCode.S))\n        {\n            zm -= m_movSpeed * Time.deltaTime;\n        }\n        if (Input.GetKey(KeyCode.A))\n        {\n            xm -= m_movSpeed * Time.deltaTime;\n        }\n        else if (Input.GetKey(KeyCode.D))\n        {\n            xm += m_movSpeed * Time.deltaTime;\n        }\n        m_ch.Move(m_transform.TransformDirection(new Vector3(xm, ym, zm)));\n\n        m_camTransform.position = m_transform.TransformPoint(0,m_camHeight, 0);\n    }\n}\n\n```\n**效果截图**\n![image.png](/prod-api/file/3b9028e9-fdb9-8981-6d29-3a0ff5850b28/true)\n![image.png](/prod-api/file/452132ed-d7df-8f85-6acc-3a0ff5851bda/true)\n\n**作者的话**\n迷宫算是unity的入门\n毕竟都是我自学，也没打算研究太深\n另外，我记得最后unity弄了一个大型3d跑酷的项目\n为此，还特意去学了建模\n那个项目奔跑，跳跃，捡道具，玩法较多\n可惜，毕竟年代久远加换了n次系统，现在貌似找不到了\n可惜！\n','C#Unity--3D迷宫','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 17:54:28','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('26db64b6-61c4-d057-3f49-3a0ff53f8682',0,'\r\n- [Cledev.OpenAI](https://github.com/lucabriguglia/Cledev.OpenAI)  - 用于OpenAI的.NET SDK，包括ChatGPT、DALL-E和Whisper APIs以及一个Blazor Server游乐场。','OpenAI','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,75),('2adcde6b-ced1-8a06-b92f-3a0ff53f8680',0,'- [Unfold](https://github.com/thomasvm/unfold)  - 用于.NET Web应用程序的基于PowerShell的部署解决方案 \r\n- [DbUp](https://github.com/DbUp/DbUp)  - 用于将更改部署到SQL Server数据库的.NET库。它跟踪已经运行的SQL脚本，并运行需要的更改脚本，以使您的数据库保持最新 \r\n- [Octo Pack](https://github.com/OctopusDeploy/OctoPack)  - 用于构建您的应用程序的NuGet包，以便使用Octopus Deploy等工具进行部署 \r\n- [yuniql](https://github.com/rdagumampan/yuniql)  - 免费且开源的架构版本控制和迁移工具，使用.NET Core制作。使用纯SQL运行迁移，在普通文件夹中安排版本，并通过独立的CLI（无需CLR）、Azure Pipelines、Docker或ASP.NET Core代码从CSV中种子数据。详细信息请访问 [https://yuniql.io](https://yuniql.io/)\r\n','部署','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,33),('2e3b7f34-b6d7-78c3-6c56-3a0ff53f8683',0,'\r\n- [SqlKata](https://sqlkata.com/)  - 一个优雅的SQL查询构建器，支持复杂查询、联接、子查询、嵌套的条件、供应商引擎目标等等。','SQL构建器','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,82),('306d2f85-60de-0f9d-2770-3a0ff53f8682',0,'\r\n- [Community Toolkit](https://github.com/CommunityToolkit)  - 用于各种.NET技术的控件和辅助库以及示例的集合。包括由Microsoft支持的现代MVVM库，包括[Windows Community Toolkit](https://github.com/CommunityToolkit/WindowsCommunityToolkit) 、[MAUI Community Toolkit](https://github.com/CommunityToolkit/Maui) 和[Dotnet Community Toolkit](https://github.com/CommunityToolkit/dotnet) 。 \r\n- [Caliburn.Micro](https://github.com/Caliburn-Micro/Caliburn.Micro)  - 一个小而强大的框架，专为在所有XAML平台上构建应用程序而设计。它对MV*模式的强大支持将使您能够快速构建解决方案，无需牺牲代码质量或可测试性。 \r\n- [MVVM Light Toolkit](https://github.com/lbugnion/mvvmlight)  - 该工具包的主要目的是加速在WPF、Silverlight、Windows Store（RT）和Windows Phone中创建和开发MVVM应用程序。 \r\n- [Catel](https://www.catelproject.com/)  - Catel是一个应用程序开发平台，重点关注MVVM（WPF、Silverlight、Windows Phone和WinRT）和MVC（ASP.NET MVC）。Catel的核心包含了IoC容器、模型、验证、记忆、消息中介器、参数检查等。 \r\n- [UpdateControls](https://updatecontrols.net/cs/)  - Update Controls不需要您实现`INotifyPropertyChanged`或声明`DependencyProperty`。它直接连接控件到CLR属性。这使它非常适合Model/View/ViewModel模式。 \r\n- [ReactiveUI](https://github.com/reactiveui/reactiveui/)  - 用于.NET的MVVM框架，集成了Reactive Extensions（Rx）框架，使开发人员能够使用WPF、Windows Store应用程序、WP8或Xamarin构建优雅的可测试应用程序。 \r\n- [Okra App Framework](https://okraframework.github.io/)  - 专为Windows 8.1构建的面向应用程序的MVVM框架，考虑了依赖注入，包括一套完整的Visual Studio MVVM模板。 \r\n- [Prism](https://github.com/PrismLibrary/Prism)  - 一个跨平台的桌面和移动MVVM开发框架。 \r\n- [Win Application Framework (WAF)](https://github.com/jbe2277/waf)  - 一个轻量级的框架，帮助您创建结构良好的WPF和UWP应用程序。它支持您应用分层架构和Model-View-ViewModel模式。 \r\n- [MVVMCross](https://github.com/MvvmCross/MvvmCross)  - 跨平台的mvvm移动开发框架，适用于WPF、Silverlight for WP7和WP8、Mono for Android、MonoTouch for iOS、Windows通用项目（WPA8.1和Windows 8.1商店应用程序）。广泛使用可移植类库（PCL）来提供可维护的跨平台C#本机应用程序。 \r\n- [Stylet](https://github.com/canton7/stylet/)  - 受Caliburn Micro启发的最小MVVM框架，具有良好的文档、高测试覆盖率和自己的IoC容器 \r\n- [Gemini](https://github.com/tgjones/gemini)  - 在概念上类似于Visual Studio Shell的IDE框架。基于WPF、AvalonDock和Caliburn Micro构建。 \r\n- [Toms Toolbox](https://github.com/tom-englert/TomsToolbox)  - 用于轻松构建基于[Managed Extensibility Framework (MEF)](https://docs.microsoft.com/en-us/dotnet/framework/mef/) 的模块化MVVM应用程序的可视化组合框架。 \r\n- [MVVM Dialogs](https://github.com/FantasticFiasco/mvvm-dialogs)  - 简化了在WPF或UWP中使用MVVM时从视图模型打开对话框的概念的框架。 \r\n- [Smaragd](https://github.com/nkristek/Smaragd)  - 一个跨平台、轻量级的库，用于使用MVVM架构开发.NET应用程序。 \r\n- [EBind](https://github.com/SIDOVSKY/EBind)  - 简洁、快速且功能丰富的.NET数据绑定解决方案。\r\n','MVVM','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,71),('3075ba2d-9ff6-c20a-ba97-3a0ff53f8681',0,'\r\n- [Sandcastle](https://github.com/EWSoftware/SHFB)  - 类似于 NDoc 的 Sandcastle 帮助文件生成器。 \r\n- [SourceBrowser](https://github.com/KirillOsenkov/SourceBrowser)  - 源代码浏览器网站生成工具，用于支持 [https://referencesource.microsoft.com。](https://referencesource.microsoft.com./) \r\n- [Swashbuckle](https://github.com/domaindrivendev/Swashbuckle.WebApi)  - 无缝地为 Web API 项目添加 Swagger 文档。 \r\n- [F# Formatting](https://fsprojects.github.io/FSharp.Formatting/)  - 用于从 F# 脚本文件、Markdown 文档和内联 XML 或 Markdown 注释文档化 F# 和 C# 项目的工具。 \r\n- [DocFX](https://github.com/dotnet/docfx)  - 用于构建和发布.NET项目的API文档的工具。 \r\n- [DocNet](https://github.com/FransBouma/DocNet)  - 友好的静态文档生成器，使用Markdown文件来构建内容。','文档','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,37),('31c6abdb-855d-d980-1d58-3a0ff53f8683',0,'- [FluentScheduler](https://github.com/fluentscheduler/FluentScheduler)  - 具有流畅界面的任务调度程序，可从您的应用程序运行自动化作业 \r\n- [NCrontab](https://github.com/atifaziz/NCrontab)  - 用于解析和格式化 [crontab](http://crontab.org/)  表达式以及根据 crontab 日程计算时间发生的类库 \r\n- [NCrontab.Scheduler](https://github.com/thomasgalliker/NCrontab.Scheduler)  - 用于调度基于 NCrontab 的任务的简单任务调度库 \r\n- [QuartzNet](https://github.com/quartznet/quartznet)  - Quartz企业调度程序 .NET 版 \r\n- [Hangfire](https://github.com/HangfireIO)  - 在.NET应用程序内执行fire-and-forget、延迟和循环任务的简单方法 \r\n- [Chroniton](https://github.com/leosperry/Chroniton)  - 用于在计划上运行强类型作业（任务）的简单、完全可集成和可自定义库。 \r\n- [DurableTask](https://github.com/Azure/durabletask)  - 该框架允许用户使用异步/等待功能在C#中编写长时间运行的持久工作流。 \r\n- [Workflow Core](https://github.com/danielgerlag/workflow-core)  - 轻量级可嵌入的工作流引擎\r\n- [Coravel](https://github.com/jamesmh/coravel) -  .Net Core符合Laravel：调度，排队等\r\n- [Gofer.NET](https://github.com/brthor/Gofer.NET) - 用于.NET Core的分布式后台任务/作业的简易C#API。','任务调度','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,88),('327f39b2-9e42-3615-6a8b-3a0fdcb0be5d',0,'## 2日\n1.正式上线`头像选择`功能\n2.新增`excel`上传下载功能\n3.支持接口`枚举`swagger友好显示\n\n## 3日\n1.新增右上角开源`地址导航`\n2.新增`文章导入`功能\n3.禁用操作主题或者文章时候进行`切换`\n\n## 4日\n1.上线`文章导入`功能，支持默认与vuepress方式\n2.新增首页用户注册人数、在线人数、昨日新增`用户分析`模块\n3.完善`面包屑`的显示及跳转\n\n## 5日\n1.完善首页`用户分析`模块实时显示\n\n## 6日\n1.开发`第三方登录OAuth`框架模块\n2.优化`置顶主题`的显示\n\n## 7日\n1.后端OAuth模块接入`QQ`实现\n2.后端OAuth模块接入`Gitee`实现\n3.随着业务的累积，优化`领域划分`结构\n4.优化`主题的高度`样式显示\n5.优化`目录的提示`显示交互体验\n6.新增用户头像的`悬浮窗口`显示\n\n## 8日\n1.优化`板块置顶`显示\n2.优化`在线人数`显示\n3.添加`第三方登录`页面搭建\n\n## 9日\n1.个人中心添加`第三方登录`界面\n2.登录页面添加`第三方登录`界面\n\n## 10日\n1.后端添加`脚手架`模板生成功能\n2.正式上线`第三方登录`QQ登录、Gitee登录\n\n## 11日\n1.后端优化`索引`结构\n2.后端实现`积分模块`，包含签到、钱钱、经验、排行榜\n\n## 12日\n1.后端初步搭建`任务调度`管理模块\n\n## 13日\n1.完成上线`任务调度`管理模块\n2.添加上线`签到`功能页面\n\n## 15日\n1.上线`钱钱`功能模块\n2.完善`签到记录`功能\n3.修复`评论换行`问题','2024年1月','e9e69a38-ce1e-06f5-7944-3a0fdc942ef3','00000000-0000-0000-0000-000000000000','2024-01-02 22:11:31','59cf7e31-e3e4-544e-1038-3a0f836cc538','59cf7e31-e3e4-544e-1038-3a0f836cc538','2024-01-15 16:50:19',0),('3357ce5e-6027-0983-4015-3a0ff53f8682',0,'- [Microsoft Ajax Minifier](https://archive.codeplex.com/?p=ajaxmin)  - 包含JS和CSS最小化器，具有最高的性能，因为它们专门为.NET设计。可选择为JS代码生成源映射。 \r\n- [Web Markup Minifier](https://github.com/Taritsyn/WebMarkupMin)  - .NET库，包含一组标记最小化器。该项目的目标是通过减小HTML、XHTML和XML代码的大小来提高Web应用程序的性能。 \r\n- [CompressedStaticFiles](https://github.com/AnderssonPeter/CompressedStaticFiles)  - 无需按需压缩即可将压缩的静态文件发送到浏览器，还支持在浏览器指示支持时发送更高级的图像格式。','最小化器','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,70),('342681a0-40ff-9f91-9815-3a0fe9b5b449',0,'预处理器指令是一组在编译C#代码之前处理源代码的指令。它们以#符号开头，并用于控制编译器的行为。预处理器指令在代码中不执行，而是在编译代码之前对其进行修改。本文将介绍C#中常用的预处理器指令，并提供一些示例代码。\r\n## 条件编译指令\r\n\r\n条件编译指令用于根据特定条件编译代码。这些条件可以是预定义的符号，也可以是自定义的符号。\r\n### #if 指令\r\n\r\n#if 指令指定一个条件，只有当该条件为 true 时，代码才会被编译。\r\n\r\n```arduino\r\n\r\n#define DEBUG\r\n#if DEBUG\r\n    Console.WriteLine(\"Debug 版本\");\r\n#endif\r\n```\r\n\r\n\r\n### #elif 指令\r\n\r\n#elif 指令允许您指定多个条件。如果前面的 #if 或 #elif 条件不成立，则编译器会测试下一个条件。\r\n\r\n```arduino\r\n\r\n#define PLATFORM_X64\r\n#if PLATFORM_X86\r\n    Console.WriteLine(\"32位平台\");\r\n#elif PLATFORM_X64\r\n    Console.WriteLine(\"64位平台\");\r\n#endif\r\n```\r\n\r\n\r\n### #else 指令\r\n\r\n#else 指令指定一个条件不成立时执行的代码块。\r\n\r\n```arduino\r\n\r\n#define DEBUG\r\n#if DEBUG\r\n    Console.WriteLine(\"Debug 版本\");\r\n#else\r\n    Console.WriteLine(\"Release 版本\");\r\n#endif\r\n```\r\n\r\n\r\n### #endif 指令\r\n\r\n#endif 指令指示条件编译块的结束。\r\n\r\n```arduino\r\n\r\n#if DEBUG\r\n    Console.WriteLine(\"Debug 版本\");\r\n#else\r\n    Console.WriteLine(\"Release 版本\");\r\n#endif\r\n```\r\n\r\n\r\n## 行号指令\r\n\r\n行号指令允许您在编译器输出中包含源代码行号。\r\n### #line 指令\r\n\r\n#line 指令允许您更改行号和文件名，以控制编译器输出。\r\n\r\n```arduino\r\n\r\n#line 200 \"MyFile.cs\"\r\nConsole.WriteLine(\"输出在第 200 行，文件名为 MyFile.cs\");\r\n```\r\n\r\n\r\n### #line default 指令\r\n\r\n#line default 指令将行号指令重置为默认值，文件名也设置为当前文件的文件名。\r\n\r\n```arduino\r\n\r\n#line default\r\nConsole.WriteLine(\"重置为默认行号和文件名\");\r\n```\r\n\r\n\r\n## 错误指令\r\n\r\n错误指令允许您在代码中生成编译错误和警告。\r\n### #error 指令\r\n\r\n#error 指令在代码中生成一个编译错误，并显示指定的错误消息。\r\n\r\n```arduino\r\n\r\n#if PLATFORM_X86\r\n    Console.WriteLine(\"32位平台\");\r\n#else\r\n    #error 仅支持32位平台\r\n#endif\r\n```\r\n\r\n\r\n### #warning 指令\r\n\r\n#warning 指令在代码中生成一个编译警告，并显示指定的警告消息。\r\n\r\n```arduino\r\n\r\n#warning 这段代码需要进行性能优化\r\n```\r\n\r\n\r\n## 版本指令\r\n\r\n版本指令用于指定程序集的版本信息\r\n\r\n### #define 指令\r\n\r\n#define 指令用于定义符号。定义符号后，您可以在代码中使用 #if 指令来检查该符号是否定义。\r\n\r\n```arduino\r\n\r\n#define VERSION_1\r\n#if VERSION_1\r\n    Console.WriteLine(\"版本 1\");\r\n#else\r\n    Console.WriteLine(\"版本 2\");\r\n#endif\r\n```\r\n\r\n\r\n### #undef 指令\r\n\r\n#undef 指令用于取消定义符号。\r\n\r\n```arduino\r\n\r\n#define VERSION_1\r\n#if VERSION_1\r\n    Console.WriteLine(\"版本 1\");\r\n#endif\r\n\r\n#undef VERSION_1\r\n#if VERSION_1\r\n    Console.WriteLine(\"版本 1\");\r\n#else\r\n    Console.WriteLine(\"未定义版本\");\r\n#endif\r\n```\r\n\r\n\r\n## 程序集指令\r\n\r\n程序集指令用于指定程序集的元数据。\r\n### #assembly 指令\r\n\r\n#assembly 指令指定程序集的元数据，如程序集名称、版本、作者、版权等。\r\n\r\n```csharp\r\n\r\n[assembly: AssemblyTitle(\"MyApplication\")]\r\n[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyDescription(\"这是我的应用程序\")]\r\n```\r\n\r\n\r\n### #pragma 指令\r\n\r\n#pragma 指令用于指定编译器的行为。\r\n\r\n```arduino\r\n\r\n#pragma warning disable 0168\r\n```\r\n\r\n\r\n\r\n以上代码将禁用警告 0168。\r\n## 总结\r\n\r\n以上是C#中常用的预处理器指令，它们允许您在编译代码之前修改源代码和编译器行为。在编写C#程序时，预处理器指令是一个非常有用的工具，可以帮助您控制编译器的行为，并根据不同的条件编译不同的代码。\r\n','C# 预处理器指令','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,25),('345c66bf-c163-f40c-09aa-3a0ff53f867f',0,'- [.NET Boxed Templates](https://github.com/Dotnet-Boxed/Templates)  - 包含一切的 .NET 项目模板，提供了启动所需的最少代码量，以加速开发过程。 \r\n- [ASP.NET Core Starter Kit](https://github.com/kriasoft/aspnet-starter-kit)  - 后端：.NET Core、EF Core、C#；前端：Babel、Webpack、React、CSS 模块。 \r\n- [ProjectScaffold](https://github.com/fsprojects/ProjectScaffold)  - 由 F# 基金会推荐的典型 .NET 解决方案，包括文件系统设置、用于依赖项的 Paket 和用于构建/测试自动化的 FAKE。默认情况下，构建过程还会编译文档并生成 NuGet 包。 \r\n- [Serene](https://github.com/volkanceylan/Serenity)  - Serenity 是一个旨在简化和缩短基于服务架构的数据中心业务应用程序开发的 ASP.NET MVC 应用程序平台。Serenity 是一个用于构建 Serenity 应用程序的启动模板。 \r\n- [Side-Waffle](https://github.com/LigerShark/side-waffle)  - 用于 Web 和桌面开发的大量有用模板的集合。 \r\n- [Template10](https://github.com/Windows-XAML/Template10)  - 包含设计模式的 Windows 10 模板。 \r\n- [Nucleus](https://github.com/alirizaadiyahsi/Nucleus)  - 使用 ASP.NET Core API 分层架构的 Vue 启动应用程序模板，采用 JWT 基于身份验证。 \r\n- [JHipster.NET](https://github.com/jhipster/jhipster-dotnetcore)  - JHipster 蓝图，用 asp.net core 替换原始的 SpringBoot 后端。Jhipster 的主要目标是展示现代 Web 开发的最佳实践，用 Java 实现。因此，该项目的目标是在 .NET 中做同样的事情。前端可以使用 Angular、React 和不久的将支持 Blazor。\r\n* [aspnet-core-react-template](https://github.com/bradymholt/aspnet-core-react-template) -  ASP.NET Core/ React SPA应用程序模板。\r\n* [AspNetCoreSpa](https://github.com/asadsahi/AspNetCoreSpa) - Asp.Net Core和Angular 8 SPA Fullstack应用程序模板。\r\n* [ASP.NET-MVC-Template](https://github.com/NikolayIT/ASP.NET-MVC-Template) - 带有Angular的ASP.NET MVC 5，ASP.NET Core和ASP.NET Core的现成模板。\r\n* [AddFeatureFolders](https://github.com/OdeToCode/AddFeatureFolders) - 为ASP.NET Core中的MVC控制器和视图启用功能文件夹。\r\n* [Angular Visual Studio Webpack Starter](https://github.com/damienbod/AngularWebpackVisualStudio) - 用于Webpack，Visual Studio，ASP.NET Core和Angular的模板。应用程序的客户端和服务器端都在一个ASP.NET Core项目中实现，这使得部署更容易。\r\n* [CleanArchitecture](https://github.com/ardalis/CleanArchitecture) - 一个高度适配的ASP.NET Core框架。\r\n* [CleanArchitecture (SPA)](https://github.com/JasonGT/CleanArchitecture) - 遵循Clean Architecture的原理使用Angular 8和ASP.NET Core 3创建单页应用程序（SPA）的解决方案模板\r\n* [DNTFrameworkCoreTemplate](https://github.com/rabbal/DNTFrameworkCoreTemplate) - 基于[DNTFrameworkCore]的Boilerplate项目模板。\r\n* [dotnet new caju](https://github.com/ivanpaulovich/dotnet-new-caju) - 代码整洁框架，[clean-architecture-manga](https://github.com/ivanpaulovich/clean-architecture-manga)。\r\n* [EISK](https://github.com/EISK/eisk.webapi) - 为开发人员资源提供简单的用例，以使用[体系结构最佳实践]在.NET Core之上构建可伸缩的应用程序 (DDD, onion architecture etc)\r\n* [JavaScriptServices](https://github.com/aspnet/JavaScriptServices) -  Microsoft ASP.NET核心JavaScript服务。\r\n* [kendo-ui-core](https://github.com/telerik/kendo-ui-core) - 一个基于jQuery的HTML5小部件库，用于构建现代Web应用程序。\r\n* [QuickApp](https://github.com/emonney/QuickApp) - 具有完整登录，用户和角色管理的ASP.NET Core / Angular4启动项目模板。\r\n* [Serenity](https://github.com/volkanceylan/Serenity) -  Serenity是一个ASP.NET MVC / TypeScript应用程序框架，旨在通过基于服务的体系结构，简化和缩短以数据为中心的应用程序开发。\r\n* [Toucan](https://github.com/mrellipse/toucan) - 用于构建单页应用程序的Boilerplate。服务器是围绕SOLID原则设计的多项目.Net Core解决方案。客户端是TypeScript 2，Vuejs 2，Vuex 2。','应用模板','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,1),('34dc6ac8-b63c-7dcb-14ec-3a0ff53f8681',0,'\r\n- [.NET Interactive](https://github.com/dotnet/interactive)  - .NET Interactive将.NET的强大功能嵌入到您的交互式体验中。','交互式编程','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,57),('3721d2e0-5c12-ddec-8437-3a0ff5429c67',0,'![image.png](/prod-api/file/ae2370b5-e190-706c-6470-3a0ff5428232/true)','总览','2da0361c-000d-e0d8-6737-3a0ff5421cdc','00000000-0000-0000-0000-000000000000','2024-01-07 16:41:44','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('38f0c9ee-10b0-b273-f75b-3a0fe9b5b449',0,'C# 中的结构体 (Struct) 是一种用户定义的值类型。与类 (Class) 不同，结构体是一种轻量级的类型，适用于小型数据结构。结构体可以包含数据成员和方法成员。\r\n## 结构体的定义\r\n\r\n结构体的定义使用 `struct` 关键字，结构体名称遵循 Pascal 命名法，并且应该以大写字母开头。以下是结构体的一般语法：\r\n\r\n```csharp\r\n\r\nstruct StructName\r\n{\r\n    // 数据成员和方法成员\r\n}\r\n```\r\n\r\n\r\n\r\n下面是一个简单的结构体定义的示例：\r\n\r\n```csharp\r\n\r\nstruct Point\r\n{\r\n    public int X;\r\n    public int Y;\r\n\r\n    public Point(int x, int y)\r\n    {\r\n        X = x;\r\n        Y = y;\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在这个示例中，我们定义了一个 `Point` 结构体，它包含了两个整型的数据成员 `X` 和 `Y`，以及一个构造函数用于初始化这两个数据成员。\r\n## 结构体的实例化\r\n\r\n结构体是一种值类型，所以在声明结构体变量时，它会被分配在栈上而不是堆上。可以使用 `new` 运算符来实例化结构体对象，也可以使用默认构造函数来初始化结构体对象。\r\n\r\n```csharp\r\n\r\nPoint p1 = new Point(10, 20);\r\nPoint p2 = default(Point); // 使用默认构造函数初始化\r\n```\r\n\r\n\r\n## 结构体的使用\r\n\r\n结构体可以像类一样使用。可以访问结构体的数据成员和方法成员。\r\n\r\n```csharp\r\n\r\nConsole.WriteLine(\"p1.X = {0}, p1.Y = {1}\", p1.X, p1.Y);\r\np1.X = 100;\r\nConsole.WriteLine(\"p1.X = {0}, p1.Y = {1}\", p1.X, p1.Y);\r\n```\r\n\r\n\r\n## 结构体的比较\r\n\r\n结构体可以使用比较运算符进行比较。在默认情况下，结构体的比较是按值进行的，即比较结构体的每个数据成员。\r\n\r\n```csharp\r\n\r\nPoint p3 = new Point(10, 20);\r\nif (p1 == p3)\r\n{\r\n    Console.WriteLine(\"p1 and p3 are equal.\");\r\n}\r\nelse\r\n{\r\n    Console.WriteLine(\"p1 and p3 are not equal.\");\r\n}\r\n```\r\n\r\n\r\n## 总结\r\n\r\n结构体是一种轻量级的值类型，适用于小型数据结构。与类不同，结构体是一种值类型，分配在栈上而不是堆上。结构体可以包含数据成员和方法成员，并且可以使用比较运算符进行比较。\r\n## 示例代码\r\n\r\n以下是一个完整的示例程序，用于演示结构体的使用：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nstruct Point\r\n{\r\n    public int X;\r\n    public int Y;\r\n\r\n    public Point(int x, int y)\r\n    {\r\n        X = x;\r\n        Y = y;\r\n    }\r\n}\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        Point p1 = Point(10, 20);\r\n        Point p2 = default(Point);\r\n\r\n        Console.WriteLine(\"p1.X = {0}, p1.Y = {1}\", p1.X, p1.Y);\r\n        Console.WriteLine(\"p2.X = {0}, p2.Y = {1}\", p2.X, p2.Y);\r\n\r\n        p1.X = 100;\r\n        Console.WriteLine(\"p1.X = {0}, p1.Y = {1}\", p1.X, p1.Y);\r\n\r\n        Point p3 = new Point(10, 20);\r\n        if (p1 == p3)\r\n        {\r\n            Console.WriteLine(\"p1 and p3 are equal.\");\r\n        }\r\n        else\r\n        {\r\n            Console.WriteLine(\"p1 and p3 are not equal.\");\r\n        }\r\n    }\r\n}\r\n```\r\n\r\n输出：\r\n```\r\np1.X = 10, p1.Y = 20\r\np2.X = 0, p2.Y = 0\r\np1.X = 100, p1.Y = 20\r\np1 and p3 are equal.\r\n```\r\n','C# 结构（Struct）','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,17),('391cc105-0620-02c2-f020-3a0ff53f8680',0,'- [ASP.NET Identity](https://github.com/aspnet/Identity/)  - ASP.NET Core Identity是用于构建ASP.NET Core Web应用程序的身份验证库。\r\n- [ASP.NET SAML](https://github.com/jitbit/AspNetSaml)  - 用于 ASP.NET 应用程序的 SAML 认证支持。 \r\n- [DotNetOpenAuth](https://github.com/DotNetOpenAuth/DotNetOpenAuth)  - OpenID、OAuth 和 InfoCard 协议的 C# 实现。 \r\n- [Logibit Hawk](https://github.com/logibit/logibit.hawk/)  - F# [Hawk](https://github.com/outmoded/hawk)  认证库。 \r\n- [IdentityModel](https://github.com/IdentityModel)  - 用于 .NET 4.5 和 MVC4/Web API 中的身份和访问控制的辅助库。 \r\n- [IdentityServer](https://github.com/IdentityServer)  - 可扩展的 OAuth2 和 OpenID Connect 提供程序框架。 \r\n  * [IdentityServer4.EntityFramework](https://github.com/IdentityServer/IdentityServer4.EntityFramework) - EF的IdentityServer4库。\r\n  * [IdentityServer4.MongoDB](https://github.com/diogodamiani/IdentityServer4.MongoDB) - MongoDB 的IdentityServer4库。\r\n  * [IdentityServer4.EntityFrameworkCore](https://github.com/2020IP/TwentyTwenty.IdentityServer4.EntityFrameworkCore) - EF Core 的IdentityServer4库。\r\n  * [IdentityServer4.Templates](https://github.com/IdentityServer/IdentityServer4.Templates) - IdentityServer4模板.\r\n- [OAuth](https://github.com/danielcrenna/vault/tree/master/oauth)  - 用 C# 编写的生成 OAuth 1.0a 签名的轻量级库。 \r\n- [Stuntman](https://rimdev.io/stuntman/)  - Stuntman 是一个用于在开发过程中模拟用户身份的库，利用 .NET Claims Identity。 \r\n- [openiddict](https://github.com/openiddict/openiddict-core)  - 灵活多用途的 .NET OAuth 2.0/OpenID Connect 堆栈。\r\n  * [oidc-debugger](https://github.com/nbarbettini/oidc-debugger) - OAuth 2.0和OpenID Connect调试工具\r\n* [AspNet.Security.OpenIdConnect.Server](https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server) - 用于OWIN / Katana和ASP.NET Core的OpenID Connect / OAuth2服务器框架。\r\n* [Auth0](https://github.com/auth0/auth0.net) - Auth0身份验证和管理API的.NET客户端。\r\n* [Casbin.NET](https://github.com/casbin-net/Casbin.NET) - 支持ACL，RBAC，ABAC的授权库。\r\n* [stormpath-sdk](https://github.com/stormpath/stormpath-sdk-dotnet) - Stormpath使开发人员能够将用户身份验证，用户管理和安全工作流程快速构建到其应用程序中。\r\n* [aspnetcore-security-headers](https://github.com/juunas11/aspnetcore-security-headers) - 用于向ASP.NET Core应用程序添加安全标头的中间件。\r\n* [HtmlSanitizer](https://github.com/mganss/HtmlSanitizer) - 清除HTML以避免XSS攻击。\r\n* [jose-jwt](https://github.com/dvsekhvalnov/jose-jwt) - 用于处理JOSE对象的库(JWT，JWA，JWS及相关)。\r\n* [Jwt.Net](https://github.com/jwt-dotnet/jwt) -  Jwt.Net，一个用于.NET的JWT(JSON Web令牌)实现。\r\n* [JWT Simple Server](https://github.com/Xabaril/JWTSimpleServer) - 用于ASP.NET Core的轻量级动态jwt服务器。\r\n* [NWebsec](https://github.com/NWebsec/NWebsec) -  ASP.NET的安全库。\r\n* [reCAPTCHA](https://github.com/PaulMiami/reCAPTCHA) - 用于ASP.NET Core的reCAPTCHA 2.0。\r\n* [roslyn-security-guard](https://github.com/dotnet-security-guard/roslyn-security-guard) - 旨在帮助.NET应用程序进行安全审计的Roslyn分析器。\r\n* [OwaspHeaders](https://github.com/GaProgMan/OwaspHeaders.Core) -  .NET Core中间件，用于注入Owasp推荐的HTTP标头，以提高安全性。\r\n* [Security](https://github.com/aspnet/Security) - 于Web应用程序的安全性和授权的中间件。\r\n* [SecurityHeaders](https://github.com/andrewlock/NetEscapades.AspNetCore.SecurityHeaders) - 允许向ASP.NET Core网站添加安全标头的小包。','认证授权','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,11),('394a5e45-3061-c7de-b2ab-3a0fe6ad9c4c',1,'import axios, {\r\n  AxiosInstance,\r\n  AxiosError,\r\n  AxiosRequestConfig,\r\n  AxiosResponse,\r\n} from \"axios\";\r\nimport { ElMessage } from \"element-plus\";\r\nimport qs from \"qs\";\r\n\r\n// 数据返回的接口\r\n// 定义请求响应参数，不含data\r\ninterface Result {\r\n  code: number;\r\n  msg: string;\r\n}\r\n\r\n// 请求响应参数，包含data\r\ninterface ResultData<T = any> extends Result {\r\n  newslist?: T;\r\n}\r\nenum RequestEnums {\r\n  TIMEOUT = 20000,\r\n  OVERDUE = 600, // 登录失效\r\n  FAIL = 999, // 请求失败\r\n  SUCCESS = 200, // 请求成功\r\n}\r\nconst config = {\r\n  // 默认地址\r\n  // baseURL: import.meta.env.VITE_APP_API_BASE_URL as string,\r\n  headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\r\n  // 设置超时时间\r\n  timeout: RequestEnums.TIMEOUT as number,\r\n};\r\n\r\nclass RequestHttp {\r\n  service: AxiosInstance;\r\n  maxNum: number;\r\n  completeCount: number;\r\n  urls: AxiosRequestConfig[];\r\n  len: number;\r\n  public constructor(config: AxiosRequestConfig) {\r\n    // 实例化axios\r\n    this.service = axios.create(config);\r\n    this.maxNum = 2;\r\n    this.completeCount = 0;\r\n    this.urls = [];\r\n    this.len = 0;\r\n    this.service.interceptors.request.use(\r\n      (config: AxiosRequestConfig) => {\r\n        // console.log(config)\r\n        return this.enqueue(config);\r\n        // return config\r\n      },\r\n      (error: AxiosError) => {\r\n        Promise.reject(error);\r\n      }\r\n    );\r\n    this.service.interceptors.response.use(\r\n      (response: AxiosResponse) => {\r\n        const { data, config } = response;\r\n        if (data.code === RequestEnums.OVERDUE) {\r\n          localStorage.setItem(\"token\", \"\");\r\n          return Promise.reject(data);\r\n        }\r\n        if (data.code && data.code !== RequestEnums.SUCCESS) {\r\n          ElMessage.error(data);\r\n          return Promise.reject(data);\r\n        }\r\n        return data;\r\n      },\r\n      (error: AxiosError) => {\r\n        const { response } = error;\r\n        if (response) {\r\n          this.handleCode(response.status);\r\n        }\r\n        if (!window.navigator.onLine) {\r\n          ElMessage.error(\"网络连接失败\");\r\n        }\r\n      }\r\n    );\r\n  }\r\n  handleCode(code: number): void {\r\n    switch (code) {\r\n      case 401:\r\n        ElMessage.error(\"登录失败，请重新登录\");\r\n        break;\r\n      default:\r\n        ElMessage.error(\"请求失败\");\r\n        break;\r\n    }\r\n  }\r\n\r\n  // 常用方法封装\r\n  get<T>(url: string, params?: object): Promise<ResultData<T>> {\r\n    return this.service.get(url, { params });\r\n  }\r\n  post<T>(url: string, params?: object): Promise<ResultData<T>> {\r\n    return this.service.post(url, qs.stringify(params));\r\n  }\r\n  put<T>(url: string, params?: object): Promise<ResultData<T>> {\r\n    return this.service.put(url, qs.stringify(params));\r\n  }\r\n  delete<T>(url: string, params?: object): Promise<ResultData<T>> {\r\n    return this.service.delete(url, { params });\r\n  }\r\n\r\n  private enqueue(config: AxiosRequestConfig) {\r\n    this.urls.push(config);\r\n    this.len++;\r\n    if (this.completeCount < this.maxNum) {\r\n      this.next();\r\n    }\r\n  }\r\n\r\n  private next() {\r\n    let count = this.completeCount++;\r\n    this.service.interceptors.request.use((config:AxiosRequestConfig)=>{\r\n      console.log()\r\n    })\r\n  }\r\n}\r\n\r\n// 导出一个实例对象\r\nexport default new RequestHttp(config);\r\n','demo.txt','32518510-b9d5-4436-a902-3a0fe686d8ce','00000000-0000-0000-0000-000000000000','2024-01-04 20:44:18','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','2024-01-04 20:44:22',0),('3a17ec67-1bd1-6275-515a-3a0ff53f8680',0,'\r\n- [cmd](https://github.com/manojlds/cmd)  - 一个用于以更简单方式运行外部程序的C#库。演示了C#的“动态”特性。','DLR','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,36),('3d055ac4-e5bf-2546-3c46-3a0fe6a6a54f',1,'测试导入11111111','测试.md','32518510-b9d5-4436-a902-3a0fe686d8ce','00000000-0000-0000-0000-000000000000','2024-01-04 20:36:41','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','2024-01-04 20:36:54',0),('3d74a219-292e-21df-3fe4-3a0ff53f8684',0,'* [Fleck](https://github.com/statianzo/Fleck) -  Fleck是C#中的WebSocket服务器实现。 Fleck不需要继承，容器或其他引用。\r\n* [SignalR](https://github.com/SignalR/SignalR) -  Web应用程序的实时Web功能，包括服务器端推送。\r\n* [SuperSocket](https://github.com/kerryjiang/SuperSocket) - 轻量级，跨平台和可扩展的套接字服务器应用程序框架。\r\n* [Websocket-Sharp](https://github.com/sta/websocket-sharp) - WebSocket协议的C#客户端和服务器实现。\r\n* [WebSocket4NET](https://archive.codeplex.com/?p=websocket4net) - 适用于.NET 2.0+、Xamarin、Mono、Silverlight、Windows Phone和WinRT的WebSocket客户端。\r\n* [Crossertech](https://crosser.io/) - 为你在Microsoft.NET平台上构建实时应用程序提供了一组强大的工具，以及更多功能。\r\n* [WampSharp](https://github.com/Code-Sharp/WampSharp) -  Web 应用程序消息传递协议的 C# 实现\r\n* [The Web Application Messaging Protocol](https://wamp-proto.org/) - 一种提供远程过程调用和通过 WebSocket 发布/订阅的消息传递模式的协议。\r\n* [NetGain](https://github.com/StackExchange/NetGain) - 高性能的WebSocket服务器库，用于支持Stack Overflow。\r\n* [websocket-manager](https://github.com/radu-matei/websocket-manager) -  ASP .NET Core的实时库。\r\n* [Websockets.PCL](https://github.com/NVentimiglia/Websockets.PCL) - WebSockets.PCL是一个可移植的类库，支持Profile 259，用于实现C#的WebSocket。\r\n* [Websocket.Client](https://github.com/Marfusios/websocket-client) - 一个多平台封装，覆盖了原生C#类ClientWebSocket，具有内置的重新连接和错误处理功能。','WebSocket','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,106),('3e28fd34-bc31-3b08-760d-3a0fe9b5b449',0,'\r\nC# 可空类型（Nullable）是一种用于表示变量可以具有空（null）值的特殊类型。在 C# 中，如果一个变量没有被赋值，那么它将自动地被赋值为 null，这通常是一个不合法的值。然而，有时候我们需要表示一个变量可以为空值，这时候就需要使用可空类型。\r\n## 定义可空类型\r\n\r\nC# 中的可空类型是通过在类型名称后面加上一个问号（?）来定义的，例如：\r\n\r\n```csharp\r\n\r\nint? nullableInt = null;\r\ndouble? nullableDouble = 3.14;\r\nbool? nullableBool = true;\r\n```\r\n\r\n\r\n\r\n在上面的例子中，`nullableInt` 被定义为一个可空的整数类型，它的值为 null。`nullableDouble` 被定义为一个可空的双精度浮点数类型，它的值为 3.14。`nullableBool` 被定义为一个可空的布尔类型，它的值为 true。\r\n## 操作可空类型\r\n\r\n当我们使用可空类型时，需要注意一些操作的差异。例如，如果我们想要获取一个可空类型的值，需要使用 `.Value` 属性：\r\n\r\n```csharp\r\n\r\nint? nullableInt = null;\r\nif (nullableInt.HasValue)\r\n{\r\n    int value = nullableInt.Value;\r\n    Console.WriteLine(value); // 这里不会输出任何内容，因为 nullableInt 的值为 null。\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的例子中，我们首先检查 `nullableInt` 是否有值，然后使用 `.Value` 属性获取其值。由于 `nullableInt` 的值为 null，所以我们不会在控制台输出任何内容。\r\n\r\n另外，还可以使用 `??` 运算符来给可空类型一个默认值。例如：\r\n\r\n```csharp\r\n\r\nint? nullableInt = null;\r\nint value = nullableInt ?? 0;\r\nConsole.WriteLine(value); // 输出 0\r\n```\r\n\r\n\r\n\r\n在上面的例子中，由于 `nullableInt` 的值为 null，所以我们使用 `??` 运算符将其替换为默认值 0。\r\n## 示例代码\r\n\r\n下面是一个完整的示例代码，展示了如何使用可空类型：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nclass Program\r\n{\r\n    static void Main()\r\n    {\r\n        int? nullableInt = null;\r\n        double? nullableDouble = 3.14;\r\n        bool? nullableBool = true;\r\n\r\n        if (nullableInt.HasValue)\r\n        {\r\n            int value = nullableInt.Value;\r\n            Console.WriteLine(value);\r\n        }\r\n\r\n        int value2 = nullableInt ?? 0;\r\n        Console.WriteLine(value2);\r\n\r\n        double value3 = nullableDouble ?? 0.0;\r\n        Console.WriteLine(value3);\r\n\r\n        bool value4 = nullableBool ?? false;\r\n        Console.WriteLine(value4);\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的示例代码中，我们定义了三个可空类型的变量 `nullableInt`、`nullableDouble` 和 `nullableBool`，然后分别演示了如何使用 `.Value` 属性和 `??` 运算符获取其值，并将其输出到控制台上。\r\n','C# 可空类型（Nullable）','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,14),('3ef5dd22-29dd-2d41-23c1-3a0ff53f8681',0,'- [ExtensionMethods.Net](https://www.extensionmethod.net/csharp)  - 包含一系列扩展方法的网站。 \r\n- [Z.ExtensionMethods](https://github.com/zzzprojects/Z.ExtensionMethods)  - 包含1000多个有用的扩展方法。','扩展','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,44),('40575263-2283-7ba3-7b16-3a0ff53f8681',0,'\r\n- [AngleSharp](https://github.com/AngleSharp/AngleSharp)  - 完整的HTML5 DOM和CSS3 OM构建。 \r\n- [dotless](https://github.com/dotless/dotless)  - Ruby Less CSS库的.NET端口，详见 [http://www.dotlesscss.org。](http://www.dotlesscss.org./) \r\n- [ExCSS](https://github.com/TylerBrinks/ExCSS)  - 用于C#的CSS3解析库。 \r\n- [HtmlAgilityPack](https://html-agility-pack.net/?z=codeplex)  - 敏捷的HTML解析器，构建可读/可写的DOM，并支持普通的XPath或XSLT。 \r\n- [LibSass Host](https://github.com/Taritsyn/LibSassHost)  - 围绕 [libSass](https://sass-lang.com/libsass)  库的.NET封装，具备支持虚拟文件系统的能力。 \r\n- [LtGt](https://github.com/Tyrrrz/LtGt)  - 轻量级HTML处理器，可用于解析和导航DOM，处理CSS选择器，可以转换为Linq2Xml，易于扩展等等。\r\n','HTML-CSS','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,52),('4264aef4-979f-f533-dc79-3a100334d6a8',0,'## 简介\n上节说到，真正关注的代码其实只用在src中\n![image.png](/prod-api/file/7f52e9a7-6b6d-cc80-64f6-3a10031e9214/true)\n当我们要新建一个项目或者模块的时候，并不想取这个`Yi.Abp`的名字，我们可以使用dotnet的脚手架进行模板的生成\n\n**环境**：只需要dotnet sdk即可\n\n## 步骤\n![image.png](/prod-api/file/2a8d18c4-4899-433d-3553-3a10032e9645/true)\n在模板文件目录上，有一个`.template.config`文件夹，就是通过这个进行控制模板的生成及替换\n\n进入该目录，使用cmd执行以以下命令：\n``` shell\ndotnet new install . --force\n```\n\n![image.png](/prod-api/file/0a92e464-13af-ef93-77b9-3a10032fe20c/true)\n\n出现 `已安装以下模板` 及代表安装完成\n\n>我们只需要安装一次即可，如果模板文件发生变化，我们生成出来的文件也是一样会变化的\n\n当模板安装完成，接下来我们可以选择一个自己想要的空白文件夹，输入命令：\n\n``` shell\ndotnet new yi --name=Acme.BookStore\n#Acme.BookStore可以替换成你想要生成的名称即可\n```\n\n![image.png](/prod-api/file/55536e5a-ef47-1593-3701-3a100333df31/true)\n\n最后查看目录：\n![image.png](/prod-api/file/20286d62-a9d1-6ab0-7fc0-3a1003348554/true)\n这个便是我们想要的结果了','脚手架使用','aaa00329-7f35-d3fe-d258-3a0f8380b742','00000000-0000-0000-0000-000000000000','2024-01-10 09:41:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('42a6889a-d6f5-3836-9195-3a0fe745e5ba',0,'测试导入22222222222222','测试2.md','32518510-b9d5-4436-a902-3a0fe686d8ce','00000000-0000-0000-0000-000000000000','2024-01-04 23:30:38','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,0),('43c8fd5c-e80b-7071-63ed-3a0fe9b5b440',0,'\r\n## 简介\r\n\r\nC# 是由微软公司开发的一种面向对象、类型安全、高效且简单的编程语言。它最初于 2000 年发布，并随后成为 .NET 框架的一部分，逐渐成为开发 Windows 应用程序和 Web 应用程序的主要选择之一。C# 语言的设计目标是提供一种现代、通用、面向对象的编程语言，使开发人员能够更轻松地构建 Windows 应用程序、Web 应用程序、服务端应用程序等。\r\n## 语言特点\r\n\r\nC# 语言具有以下特点：\r\n\r\n- 简单易学：C# 语法简单，易于理解，同时也有着很多的教程和文档。\r\n- 类型安全：C# 提供了类型检查，能够在编译时发现很多错误。\r\n- 面向对象：C# 是一种面向对象的语言，支持类、接口、继承、封装等面向对象的概念。\r\n- 支持泛型：C# 支持泛型编程，能够实现更加通用的代码。\r\n- 自动内存管理：C# 采用垃圾回收机制，不需要开发人员手动管理内存，减少了内存泄漏等问题的出现。\r\n\r\n## 应用领域\r\n\r\nC# 语言的应用领域非常广泛，主要包括以下方面：\r\n\r\n- Windows 应用程序开发：C# 是 Windows 平台上的主流编程语言，开发 Windows 应用程序非常方便。\r\n- Web 应用程序开发：C# 和 ASP.NET 框架一起使用，可以开发 Web 应用程序和服务端应用程序。\r\n- 游戏开发：C# 和 Unity 一起使用，能够开发各种类型的游戏。\r\n- 移动应用程序开发：C# 和 Xamarin 一起使用，可以开发 Android 和 iOS 平台上的移动应用程序。\r\n\r\n## 开发环境\r\n\r\n如果你想使用 C# 开发应用程序，可以使用 Visual Studio 开发环境。Visual Studio 是一款功能强大、易于使用的 IDE，支持多种编程语言，包括 C#。除此之外，你还可以使用 Visual Studio Code、Rider 等其他的开发环境。\r\n\r\n## 示例代码\r\n\r\n下面是一个使用 C# 编写的 \"Hello, World!\" 程序的示例代码：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        Console.WriteLine(\"Hello, World!\");\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n这个程序会在控制台输出 \"Hello, World!\" 字符串。\r\n','C# 简介','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,1),('43f54add-90e9-c3c1-56ac-3a0ff53f8684',0,'* WebAssembly\r\n  * [Blazor](https://github.com/aspnet/blazor) - Blazor是使用C＃/ Razor和HTML的.NET Web框架，可在带有WebAssembly的浏览器中运行。 \r\n    * [Awesome Blazor](https://github.com/AdrienTorris/awesome-blazor) - Blazor的资源，Blazor是使用C＃/ Razor和HTML的.NET Web框架，可在具有WebAssembly的浏览器中运行。\r\n    * [Blazor Redux](https://github.com/torhovland/blazor-redux) - 将Redux状态存储与Blazor连接。\r\n  * [Ooui](https://github.com/praeclarum/Ooui) - 是使用Web技术的.NET跨平台的小型UI库。\r\n* [ReactJS.NET](https://github.com/reactjs/React.NET) - 用于JSX编译和React组件的服务器端呈现的.NET库。\r\n* [redux.NET](https://github.com/GuillaumeSalles/redux.NET) -  .NET应用程序的可预测状态容器。\r\n* [ASP.NET MVC](https://dotnet.microsoft.com/apps/aspnet) - ASP.NET是一个用于构建出色的网站和应用程序的免费Web框架。\r\n* [Coalesce](https://coalesce.intellitect.com/) -  Coalesce是一个用于快速开发ASP.NET Core Web应用程序的框架。\r\n* [FubuMVC](https://github.com/DarthFubuMVC/fubumvc) - 一种用于.NET的前端控制器风格的MVC框架。\r\n* [NancyFx](https://github.com/NancyFx/Nancy) - 一个轻量级、低仪式感的框架，用于在.NET和Mono上构建基于HTTP的服务。\r\n* [IISNode](https://github.com/tjanczuk/iisnode) - 在IIS中托管Node.js应用程序。\r\n* [Suave.IO](https://suave.io/) - 一个框架/库/ Web服务器，让你在提前完成项目后，当你看到你用F#编写的美丽代码时，会感到欣慰得流泪。F#.\r\n* [DotVVM](https://github.com/riganti/dotvvm) - 面向不喜欢编写JavaScript的人的MVVM框架，支持OWIN和ASP.NET Core，并提供Visual Studio 2015和2017的免费扩展。\r\n* [Giraffe](https://github.com/giraffe-fsharp/Giraffe) - 用于构建丰富Web应用程序的功能性（F#）ASP.NET Core微框架。','Web框架','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,104),('44a285c9-706c-77c3-37f5-3a0fe480668b',1,'---\r\ntitle: C# 简介\r\narticle: false\r\ndate: 2023-04-15 11:39:44\r\npermalink: /pages/9d25e7/\r\n---\r\n\r\n## 简介\r\n\r\nC# 是由微软公司开发的一种面向对象、类型安全、高效且简单的编程语言。它最初于 2000 年发布，并随后成为 .NET 框架的一部分，逐渐成为开发 Windows 应用程序和 Web 应用程序的主要选择之一。C# 语言的设计目标是提供一种现代、通用、面向对象的编程语言，使开发人员能够更轻松地构建 Windows 应用程序、Web 应用程序、服务端应用程序等。\r\n## 语言特点\r\n\r\nC# 语言具有以下特点：\r\n\r\n- 简单易学：C# 语法简单，易于理解，同时也有着很多的教程和文档。\r\n- 类型安全：C# 提供了类型检查，能够在编译时发现很多错误。\r\n- 面向对象：C# 是一种面向对象的语言，支持类、接口、继承、封装等面向对象的概念。\r\n- 支持泛型：C# 支持泛型编程，能够实现更加通用的代码。\r\n- 自动内存管理：C# 采用垃圾回收机制，不需要开发人员手动管理内存，减少了内存泄漏等问题的出现。\r\n\r\n## 应用领域\r\n\r\nC# 语言的应用领域非常广泛，主要包括以下方面：\r\n\r\n- Windows 应用程序开发：C# 是 Windows 平台上的主流编程语言，开发 Windows 应用程序非常方便。\r\n- Web 应用程序开发：C# 和 ASP.NET 框架一起使用，可以开发 Web 应用程序和服务端应用程序。\r\n- 游戏开发：C# 和 Unity 一起使用，能够开发各种类型的游戏。\r\n- 移动应用程序开发：C# 和 Xamarin 一起使用，可以开发 Android 和 iOS 平台上的移动应用程序。\r\n\r\n## 开发环境\r\n\r\n如果你想使用 C# 开发应用程序，可以使用 Visual Studio 开发环境。Visual Studio 是一款功能强大、易于使用的 IDE，支持多种编程语言，包括 C#。除此之外，你还可以使用 Visual Studio Code、Rider 等其他的开发环境。\r\n\r\n## 示例代码\r\n\r\n下面是一个使用 C# 编写的 \"Hello, World!\" 程序的示例代码：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        Console.WriteLine(\"Hello, World!\");\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n这个程序会在控制台输出 \"Hello, World!\" 字符串。\r\n','01.C# 简介.md','67bbbd51-8f39-6bc3-46fe-3a0fa9fe8385','00000000-0000-0000-0000-000000000000','2024-01-04 10:35:41','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','2024-01-04 23:56:50',0),('49eaf5a1-f354-f3b2-f4b1-3a0ff57d53ce',0,'## 《4.0v意世界--WinRar解压》\n - （采用winform平台，采用c#语言，winform项目下载即可使用）\n - （这个就有点来头了，首先使用的winrar解压操作，还有treeview和listview联合操作做了一个树状磁盘目录）\n - （最近打算去弄个自己的博客，希望支持）\n - （有人说做这个有什么用？主要他能实现自动化操作，我可以设置当你打开这个软件的时候，自动进行安装，相当于自动更新游戏的傻瓜操作）\n **效果图如下：**\n![image.png](/prod-api/file/c5007661-c34c-d8e1-da05-3a0ff57c98d4/true)\n\n![image.png](/prod-api/file/34acf4b5-a870-6542-f8b5-3a0ff57cb7fa/true)\n\n![image.png](/prod-api/file/e3fb8dce-be93-a318-a034-3a0ff57cd15d/true)\n\n![image.png](/prod-api/file/bb5318e2-4154-8192-7bbd-3a0ff57ce5a5/true)\n\n![image.png](/prod-api/file/b713dbcd-3708-8bcf-915e-3a0ff57cfc1e/true)\n**核心代码：**\n\n解压操作：\n``` cs\n public static string ExistsWinRar()\n            {\n                string result = string.Empty;\n\n                string key = @\"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\WinRAR.exe\";\n                RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(key);\n                if (registryKey != null)\n                {\n                    result = registryKey.GetValue(\"\").ToString();\n                }\n                registryKey.Close();\n\n                return result;\n          \n        }\n\n        public static void UnRAR(string rarFilePath, string unrarDestPath)\n        {\n            string rarexe = ExistsWinRar();\n            if (String.IsNullOrEmpty(rarexe))\n            {\n                throw new Exception(\"未安装WinRAR程序。\");\n            }\n            try\n            {\n                //组合出需要shell的完整格式  \n                string shellArguments = string.Format(\"x -o+ \\\"{0}\\\" \\\"{1}\\\\\\\"\", rarFilePath, unrarDestPath);\n\n                //用Process调用  \n                using (Process unrar = new Process())\n                {\n                    ProcessStartInfo startinfo = new ProcessStartInfo();\n                    startinfo.FileName = rarexe;\n                    startinfo.Arguments = shellArguments;               //设置命令参数  \n                    startinfo.WindowStyle = ProcessWindowStyle.Hidden;  //隐藏 WinRAR 窗口  \n\n                    unrar.StartInfo = startinfo;\n                    unrar.Start();\n                    unrar.WaitForExit();//等待解压完成  \n\n                    unrar.Close();\n                }\n            }\n            catch\n            {\n                throw;\n            }\n        }\n\n        private void button1_Click(object sender, EventArgs e)\n        {\n            string rarFilePath = textBox1.Text;\n            string unrarDestPath = textBox2.Text;\n            try\n            {\n                UnRAR(rarFilePath, unrarDestPath);\n                MessageBox.Show(\"成功！\");\n            }\n            catch\n            {\n                MessageBox.Show(\"错误！\");\n            };\n        }\n\n        private void button2_Click(object sender, EventArgs e)\n        {\n            Form2 p =new Form2();\n            p.ShowDialog();\n        }\n\n        private void cheak_Tick(object sender, EventArgs e)\n        {\n            textBox1.Text = data.data_t;\n            textBox2.Text = data.data_f;\n        }\n    }\n```\n\n\n磁盘管理操作：\n  \n\n``` cs\n        private void Form2_Load(object sender, EventArgs e)\n        {\n            TreeNode rootNode = new TreeNode(\"我的电脑\");\n            treeView1.Nodes.Add(rootNode);\n\n        }\n\n        private void ListViewShow(TreeNode NodeDir)\n        {\n            listViewFile.Clear();\n            try\n            {\n                if (NodeDir.Parent == null)\n                {\n                    foreach (string DrvName in Directory.GetLogicalDrives())\n                    {\n                        ListViewItem ItemList = new ListViewItem(DrvName);\n                        listViewFile.Items.Add(ItemList);\n                    }\n                }\n                else\n                {\n                    foreach (string dirName in Directory.GetDirectories((string)NodeDir.Tag))\n                    {\n                        ListViewItem dirItem = new ListViewItem(dirName);\n                        listViewFile.Items.Add(dirItem);\n                    }\n                    foreach (string fileName in Directory.GetFiles((string)NodeDir.Tag))\n                    {\n                        ListViewItem fileItem = new ListViewItem(fileName);\n                        listViewFile.Items.Add(fileItem);\n                    }\n                }\n            }\n            catch { }\n        }\n        private void TreeViewShow(TreeNode selectNode)\n        {\n            try\n            {\n                if (selectNode.Nodes.Count == 0)\n                {\n                    if (selectNode.Parent == null)\n                    {\n                        foreach (string drvName in Directory.GetLogicalDrives())\n                        {\n                            TreeNode drvNode = new TreeNode(drvName);\n                            drvNode.Tag = drvName;\n                            selectNode.Nodes.Add(drvNode);\n                        }\n                    }\n                    else\n                    {\n                        foreach (string dirName in Directory.GetDirectories((string)selectNode.Tag))\n                        {\n                            TreeNode dirNode = new TreeNode(dirName);\n                            dirNode.Tag = dirName;\n                            selectNode.Nodes.Add(dirNode);\n                        }\n                    }\n                }\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show(ex.Message);\n            }\n        }\n \n\n        private void listViewFile_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            //int selectCount = listViewFile.SelectedItems.Count;\n            if (listViewFile.SelectedItems.Count == 0)\n                return;\n            data.data_t = listViewFile.SelectedItems[0].Text;\n        }\n\n        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)\n        {\n            TreeViewShow(e.Node);\n            ListViewShow(e.Node);\n            if (treeView1.SelectedNode.Nodes.Count == 0)\n                return;\n            data.data_f = treeView1.SelectedNode.Text;\n        }\n\n        private void button1_Click(object sender, EventArgs e)\n        {\n            this.Close();\n        }\n    }\n```\n','C#Winform--WinRar解压','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 17:45:52','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('49f2547a-3d6c-0da4-4554-3a0fe672a3a9',1,'测试导入11111111','测试.md','4a14cce8-795a-8c68-8c2a-3a0fe1c7215a','00000000-0000-0000-0000-000000000000','2024-01-04 19:39:53','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','2024-01-04 19:55:11',0),('4a109e3c-d4b5-2c34-487d-3a0fe6affc1a',1,'测试导入22222222222222','测试2.md','32518510-b9d5-4436-a902-3a0fe686d8ce','00000000-0000-0000-0000-000000000000','2024-01-04 20:46:53','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','2024-01-04 20:46:59',0),('4b13f388-6ff1-bd67-4276-3a0ff53ad54c',0,'# 微服务面试题\r\n\r\n**1、什么是微服务？**\r\n\r\n答：单个轻量级服务一般为一个单独微服务，微服务讲究的是 专注某个功能的实现，比如登录系统只专注于用户登录方面功能的实现，讲究的是职责单一，开箱即用，可以独立运行。微服务架构系统是一个分布式的系统，按照业务进行划分服务单元模块，解决单个系统的不足，满足越来越复杂的业务需求。\r\n\r\n​    马丁福勒（Martin Fowler）：就目前而言，对于微服务业界并没有一个统一的、标准的定义。但通常而言，微服务架构是一种架构模式或者说是架构风格，它提倡将单一应用程序划分成一组小的服务。每个服务运行在其独立的自己的进程中服务之间相互配合、相互协调，为用户提供最终价值。服务之间采用轻量级通信。每个服务都围绕具体业务进行构建，并能够独立部署到生产环境等。另外应尽量避免统一的、集中的服务管理机制。\r\n\r\n通俗的来讲：\r\n\r\n微服务就是一个独立的职责单一的服务应用程序。在 intellij idea 工具里面就是用maven开发的一个个独立的module，具体就是使用springboot 开发的一个小的模块，处理单一专业的业务逻辑，一个模块只做一个事情。\r\n\r\n微服务强调的是服务大小，关注的是某一个点，具体解决某一个问题/落地对应的一个服务应用，可以看做是idea 里面一个 module。\r\n\r\n比如你去医院：你的牙齿不舒服，那么你就去牙科。你的头疼，那么你就去脑科。一个个的科室，就是一个微服务，一个功能就是一个服务。\r\n\r\n**2、微服务之间如何独立通讯的?**\r\n\r\n答： 同步通信：.Net5通过 RPC GRPC 远程过程调用或者通过 REST  接口json调用 等。\r\n\r\n 异步：消息队列，如：RabbitMq、ActiveM、Kafka 等。\r\n\r\n**3、什么是熔断？什么是服务降级？**\r\n\r\n答：服务熔断的作用类似于我们家用的保险丝，当某服务出现不可用或响应超时的情况时，为了防止整个系统出现雪崩，暂时停止对该服务的调用。\r\n\r\n服务降级是从整个系统的负荷情况出发和考虑的，对某些负荷会比较高的情况，为了预防某些功能（业务场景）出现负荷过载或者响应慢的情况，在其内部暂时舍弃对一些非核心的接口和数据的请求，而直接返回一个提前准备好的fallback（退路）错误处理信息。这样，虽然提供的是一个有损的服务，但却保证了整个系统的稳定性和可用性。\r\n\r\n**4、微服务的优缺点是什么？说下你在项目中碰到的坑。**\r\n\r\n答：优点：松耦合，聚焦单一业务功能，无关开发语言，团队规模降低。在开发中，不需要了解多有业务，只专注于当前功能，便利集中，功能小而精。微服务一个功能受损，对其他功能影响并不是太大，可以快速定位问题。微服务只专注于当前业务逻辑代码，不会和 html、css 或其他界面进行混合。可以灵活搭配技术，独立性比较舒服。\r\n\r\n​      缺点：随着服务数量增加，管理复杂，部署复杂，服务器需要增多，服务通信和调用压力增大，运维工程师压力增大，人力资源增多，系统依赖增强，数据一致性，性能监控。\r\n\r\n**5、你所知道微服务的技术栈有哪些？列举一二。**\r\n\r\n答：微服务条目 落地技术\r\n服务开发 AspnetCore、.Net5、.Net6\r\n服务配置与管理 携程公司的Apollo、社区的的Consul等\r\n服务注册与发现 Eurka、Consul、Zookeeper等\r\n服务调用 Rest（服务通信）、RPC、GRpc\r\n服务熔断器 Polly、Envoy等\r\n负载均衡 Nginx等\r\n服务接口调用（客户端简化工具） WebAPI等\r\n消息队列 Kafka、RabbitMQ、ActiveMQ等\r\n服务配置中心管理 Apollo、Chef等\r\n服务路由（API网关） Ocelot等\r\n服务监控 Zabbix，Nagios，Skywalking等\r\n全链路追踪 Zipkin，Brave，Skywalking等\r\n服务部署 Docker，OpenStack，Kubernetes等\r\n数据流操作开发包 SpringCloud Stream（封装与Redis，Rabbit，kafka等发送接收消息）\r\n事件消息总线CAP\r\n\r\n**6、什么是微服务架构？**\r\n\r\n答：微服务架构 就是 对微服务进行管理整合应用的。微服务架构 依赖于 微服务，是在微服务基础之上的。\r\n\r\n例如：上面已经列举了什么是微服务。在医院里，每一个科室都是一个独立的微服务，那么 这个医院 就是 一个大型的微服务架构，就类似 院长 可以 对下面的 科室进行管理。微服务架构主要就是这种功能。\r\n\r\n**7、设计微服务的最佳实践是什么？**\r\n\r\n答：\r\n\r\n1. 为每个微服务分开数据存储\r\n2. 将代码保持在类似的成熟度等级上\r\n3. 为每个微服务进行单独的构建\r\n4. 部署到容器中\r\n5. 将服务器视为无状态的\r\n\r\n**8、单体应用、SOA 和微服务架构有什么区别？****\r\n\r\n答：\r\n\r\n- **单体应用**类似于一个大容器，其中程序的所有组件都被组装在一起并紧密包装。\r\n- **SOA**是一组相互通信的服务。通信可以涉及简单的数据传送，也可以涉及两个或多个协调某些活动的服务。\r\n- **微服务架构**是一种架构风格，它将应用程序构建为以业务域为模型的小型自治服务集合。\r\n\r\n**9、在使用微服务架构时，你面临的挑战是什么？****\r\n\r\n答：\r\n\r\n开发较小的微服务听起来很容易，但在开发时会经常遇到一些挑战。\r\n\r\n- **自动化组件**：难以自动化，因为有许多较小的组件。对于每个组件，都必须采取构建、发布和监控的步骤。\r\n- **可感知性**：将大量组件维持在一起会带来难以部署、维护、监控和识别的问题。它需要在所有组件周围具有很好的感知能力。\r\n- **配置管理**：有时在各种环境中维护组件的配置会很困难。\r\n- **调试**：很难找到与产生的错误相关的每一项服务。维护一个集中式的日志和控制面板对调试问题至关重要。\r\n\r\n**10、为什么需要域驱动设计（DDD）？**\r\n\r\n答：\r\n\r\n- 映射领域\r\n- 降低复杂性\r\n- 可测试性\r\n- 可维护性\r\n- 知识丰富的设计\r\n- 将业务和服务结合在一起\r\n- 上下文集中\r\n- 通用语言\r\n\r\n**11、你对分布式事务的理解？**\r\n\r\n答：\r\n\r\n**分布式事务**是单个事件导致两个或多个不能以原子方式提交的单独数据源的突变的情况。在微服务的世界中，它变得更加复杂，因为每个服务都是一个工作单元，并且在大多数情况下，多个服务必须协同工作才能使业务成功。\r\n\r\n12、什么是幂等性（Idempotence）及用在那里？\r\n\r\n**幂等性**是能够以同样的方式做两次，而最终结果将保持不变，就好像它只做了一次的特性。\r\n\r\n**用法**：在远程服务或数据源中使用幂等性，以便当它多次接收指令时，只处理一次。\r\n\r\n**13、什么是有界上下文？**\r\n\r\n答：有界上下文是领域驱动设计的核心模式。 DDD 战略设计部门的重点是处理大型模型和团队。 DDD 通过将大型模型划分为不同的有界上下文并明确其相互关系来处理大型模型。\r\n\r\n**14、容器在微服务中的用途是什么？**\r\n\r\n答：容器是管理基于微服务的程序以便单独开发和部署它们的好方法*。*你可以将微服务封装在容器镜像及其依赖项中，然后可以用它来滚动开发按需实例的微服务而无需任何额外的工作。\r\n\r\n**15、什么是金丝雀发布（Canary Releasing）？**\r\n\r\n答：**金丝雀发布**是一种降低在生产中引入新版本软件风险的技术。通过在将更改传递给整个基础架构之前将更改缓慢地推广到一小部分用户来完成的。','微服务面试题','f6462b48-9601-0253-6450-3a0ff538dfa4','00000000-0000-0000-0000-000000000000','2024-01-07 16:33:14','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,11),('4b209706-6455-f4a5-357e-3a0ff53f867f',0,'- [Telegram.Bot](https://github.com/TelegramBots/Telegram.Bot)  - 用于 [Telegram Bot API](https://core.telegram.org/bots/api)  的 .NET 客户端。 \r\n- [TLSharp](https://github.com/sochix/TLSharp)  - 它非常适合任何希望直接向 Telegram 用户发送数据或编写自定义 Telegram 客户端的开发人员。 \r\n- [WTelegramClient](https://github.com/wiz0u/WTelegramClient)  - 使用最新版本的 [Telegram Client API](https://core.telegram.org/methods)  自动化 Telegram 上的用户帐户。 \r\n- [NancyFx](https://github.com/NancyFx/Nancy)  - 轻量级、低仪式感的框架，用于在 .NET 和 Mono 上构建基于 HTTP 的服务。 \r\n- [ASP.NET Web API](https://dotnet.microsoft.com/apps/aspnet/apis)  - 使构建可触及广泛范围的客户端，包括浏览器和移动设备在内的 HTTP 服务变得容易的框架。 \r\n- [Breeze](https://breeze.github.io/doc-net/)  - 使用 OData 3 协议，启用丰富的数据访问。提供了 JavaScript 和 C# 的客户端库。 \r\n- [Mobius: C# API for Spark](https://github.com/Microsoft/Mobius)  - Mobius 为 Apache Spark 添加了 C# 语言绑定，使其能够在 C# 中实现 Spark 驱动程序代码和数据处理操作。 \r\n- [ServiceStack](https://github.com/ServiceStack/ServiceStack)  - 精心设计的、非常快速的、非常愉快的 Web 服务框架，适用于所有情况。 \r\n- [Nelibur](https://github.com/Nelibur/Nelibur)  - Nelibur 是基于纯 WCF 的消息传递式 Web 服务框架。Nelibur 简化了创建高性能和基于消息的 Web 服务，并且您肯定拥有 WCF 的所有功能。 \r\n- [WebAPI Contrib](https://github.com/WebApiContrib/WebAPIContrib)  - 一组开源项目，帮助改进与 ASP.NET Web API 的工作。 \r\n- [Xamarin.Essentials](https://docs.microsoft.com/en-us/xamarin/essentials/)  - Xamarin.Essentials 为移动应用程序提供跨平台 API。 \r\n- [FFImageLoading - Fast & Furious Image Loading](https://github.com/luberda-molinet/FFImageLoading)  - 这个库可以在 Xamarin.iOS、Xamarin.Android、Xamarin.Forms、Xamarin.Mac / Xamarin.Tizen 和 Windows（UWP、WinRT）上快速、轻松地加载图像。 \r\n- [Ocelot](https://github.com/ThreeMammals/Ocelot)  - .NET Core API 网关。 \r\n- [CommandQuery](https://github.com/hlaueriksson/CommandQuery)  - 用于 ASP.NET Core、AWS Lambda、Azure Functions、Google Cloud Functions、ASP.NET Web API 2 的命令查询分离。 \r\n- [Cloud Storage](https://github.com/managedcode/Storage) ：此库提供了访问和操作不同云 Blob 存储提供程序（Azure Storage、AWS S3、Google Cloud Storage）中的数据的通用接口。它使得在提供程序之间轻松切换或同时使用多个提供程序变得容易，而无需学习和使用多个 API。\r\n* [autorest](https://github.com/Azure/autorest) -  Swagger(OpenAPI)规范代码生成器，具有C#和Razor模板。支持C#，Java，Node.js，TypeScript，Python和Ruby。\r\n* [aspnet-api-versioning](https://github.com/Microsoft/aspnet-api-versioning) - 提供一组库，这些库可将服务API版本添加到ASP.NET Web API，具有ASP.NET Web API的OData和ASP.NET Core。\r\n* [AspNetCoreRateLimit](https://github.com/stefanprodan/AspNetCoreRateLimit) -  ASP.NET限速中间件。\r\n* [CondenserDotNet](https://github.com/Drawaes/CondenserDotNet) - 使用Kestrel和Consul的API Condenser / Reverse Proxy，包括轻量级consul库。\r\n* [Flurl](https://github.com/tmenier/Flurl) - 适用于.NET的Fluent URL构建器和可测试的HTTP。\r\n* GraphQL\r\n  * [Dapper.GraphQL](https://github.com/landmarkhw/Dapper.GraphQL) - 一个旨在将Dapper和graphql-dotnet项目集成在一起的库，主要考虑的是易用性和性能。\r\n  * [graphql-aspnetcore](https://github.com/JuergenGutsch/graphql-aspnetcore) -  ASP.NET Core MiddleWare创建GraphQL端点。\r\n  * [graphql-convention](https://github.com/graphql-dotnet/conventions) - 该库是GraphQL的补充层，使您可以使用现有的属性和方法作为字段解析器，将.NET类自动包装到GraphQL模式定义中。\r\n  * [graphiql-dotnet](https://github.com/JosephWoodward/graphiql-dotnet) - 用于ASP.NET Core的GraphiQL中间件。\r\n  * [graphql-dotnetcore](https://github.com/mkmarek/graphql-dotnetcore) - 基于[graphql-js](https://github.com/graphql/graphql-js)的.NETQL GraphQL。\r\n  * [graphql-dotnet](https://github.com/graphql-dotnet/graphql-dotnet) - GraphQL for .NET。\r\n  * [graphql-dotnet-server](https://github.com/graphql-dotnet/server) - GraphQL for .NET - 订阅传输WebSockets。\r\n  * [Hot Chocolate](https://github.com/ChilliCream/hotchocolate) - .Net Core和.NET Framework的GraphQL服务器。\r\n  * [FSharp.Data.GraphQL](https://github.com/fsprojects/FSharp.Data.GraphQL) - Facebook GraphQL查询语言的[FSharp]((https://fsprojects.github.io/FSharp.Data.GraphQL))实现。\r\n  * [parser](https://github.com/graphql-dotnet/parser) - .NET中GraphQL的词法分析器和解析器。\r\n  * [tanka-graphql](https://github.com/pekkah/tanka-graphql) - GraphQL执行库和服务器库，支持SignalR，Apollo，模式操纵以及Apollo和graphql-js熟悉的其他功能。\r\n* [halcyon](https://github.com/visualeyes/halcyon) -  ASP.NET的HAL实现。\r\n* [JSON API .NET Core](https://github.com/Research-Institute/json-api-dotnet-core) - 用于ASP.Net Core的JSON API框架。\r\n* [LightNode](https://github.com/neuecc/LightNode) - 基于OWIN构建的Micro RPC / REST框架\r\n* [NetCoreStack.Proxy](https://github.com/NetCoreStack/Proxy) - 适用于.NET Standard 2.0的类型安全的分布式REST库(NetCoreStack Flying Proxy)\r\n* [NSwag](https://github.com/RSuter/NSwag) - 用于.NET，Web API和TypeScript的Swagger / OpenAPI工具链。\r\n* [OData](https://github.com/OData/WebApi/tree/feature/netcore) - 开放数据协议(OData)支持创建基于HTTP的数据服务，允许使用统一资源标识符识别资源( URIs)并在抽象数据模型中定义，由Web客户端使用简单的HTTP消息进行发布和编辑。\r\n* [OpenAPI Generator](https://github.com/OpenAPITools/openapi-generator) - 可以通过 OpenAPI Generator，在给定 OpenAPI 规范(v2, v3)的情况下自动生成 API 客户端库、server stubs、文档以及配置。\r\n* [refit](https://github.com/paulcbetts/refit) -  适用于.NET Core，Xamarin和.NET的自动类型安全REST库。\r\n* [RestClient.Net](https://github.com/MelbourneDeveloper/RestClient.Net) - 适用于所有C#跨平台的REST客户端。\r\n* [RestEase](https://github.com/canton7/RestEase) - 易于使用的类型安全REST API客户端库，简单且可自定义。\r\n* [RestLess](https://github.com/letsar/RestLess) -  .Net Standard的自动类型安全无反射REST API客户端库。\r\n* [Restier](https://github.com/OData/RESTier) -  RESTier是一个RESTful API开发框架，用于在.NET平台上构建基于OData V4的标准化RESTful服务。\r\n* [Restsharp](https://github.com/restsharp/RestSharp) - 用于.NET的简单REST和HTTP API客户端\r\n* [Swashbuckle](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) - Swagger工具，生成API文档，包括用于测试的UI。\r\n  * [MicroElements.Swashbuckle.FluentValidation](https://github.com/micro-elements/MicroElements.Swashbuckle.FluentValidation) - 向Swagger添加FluentValidation规则。\r\n  * [Swashbuckle.AspNetCore.Filters](https://github.com/mattfrear/Swashbuckle.AspNetCore.Filters) - 一堆有用的Swashbuckle.AspNetCore筛选器。\r\n * [WebAnchor](https://github.com/mattiasnordqvist/Web-Anchor) - Web Anchor 提供了类型安全，可测试和灵活的，运行时生成的Web资源访问。简单来说提供了Web APi灵活的访问方式。\r\n* [WebAPIContrib for ASP.NET CORE](https://github.com/WebApiContrib/WebAPIContrib.Core) - ASP.NET Core的附加组件和扩展库。','API','[REDACTED]','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,3),('4b4b193e-9601-501b-011b-3a0f83825961',0,'## 它是什么？\n\nYiFramework是一个基于.Net8+Abp.vNext+SqlSugar的DDD领域驱动设计后端开源框架\n\n中文名称：意框架\n\n英文名称：YiFramework\n\n但是，不仅仅是如此\n\n## 它的理念\n谁说Abp复杂？谁说DDD难？打破常规，化繁为简，新人入门，项目二开，最佳方式之一\n\n> 一百个人，就有一百种DDD，Yi框架不一定是极度严格的DDD，而是站在巨人的肩膀上，经过极多项目的提炼，摸索出一种最佳实践\n\n\n优雅的进行快速开发，通常，简单程度与优雅程度不可兼得，Yi框架并不一昧的追求极致的解耦，会站在用户使用角度上，在使用难易度进行考虑衡量\n\n> 一个面向用户的快速开发后端框架\n\n在真正的使用这，你会明白这一点，极致的简单，也是优雅的一种体现。\n\n## 特点\n- 面向用户的后端框架，使用简单，适合小型、中型、企业级项目\n- 项目直接内置源码，不打包，非常适合进行二开改造\n- 内置包含大量通用场景模块\n- 等等\n\n## 基础设施简介\n\n以下全部功能可直接使用：\n\n- [Abp.vNext官网](https://docs.abp.io/zh-Hans/abp/latest/)\n\n- [SqlSugar官网](https://www.donet5.com/home/doc)\n\n## 内置模块简介\n- Rbac权限管理系统\n- Bbs论坛社区系统\n\n\n> 重复的东西，无需再写一遍，这也是优雅的体现之一\n','Yi框架简介','aaa00329-7f35-d3fe-d258-3a0f8380b742','00000000-0000-0000-0000-000000000000','2023-12-16 14:34:38','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('4f5bac5d-5e36-59a3-d15a-3a0f83aace6f',0,'## 简介\n熟悉Asp.NetCore的小伙伴们，对依赖注入可太熟悉，这里也不在过多的讲述依赖注入知识\n默认内置的注入方式，通常是在启动类文件，一个一个手动注入，例如：\n``` cs\nservice.Addsingle<接口,类>()\n```\n同样，当服务过多，添加服务的代码会显的非常长，不够优雅\n可以使用框架内置的接口\n- IScopedDependency\n- ISingletonDependency\n- ITransientDependency\n\n也可以使用框架内置的特性\n- DependencyAttribute\n- ExposeServicesAttribute\n\n> 使用特性，可以指定特定类、接口作为抽象\n## 如何使用\n#### 特性方式：\n在实现类上标注特性即可\n``` cs\n[ExposeServices(typeof(ITestService))]\n[Dependency(ServiceLifetime.Transient)]\npublic class Test\n{\n}\n```\n\n#### 接口方式：\n同理，根据不同的接口，选择不同的生命周期，自动会优先找自动以`I+类名`的接口作为抽象\n``` cs\npublic class Test:ITest,ISingletonDependency\n{\n}\n```','依赖注入','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','00000000-0000-0000-0000-000000000000','2023-12-16 15:18:50','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('509444a0-17ff-2d0c-9100-3a0facd63cea',0,'## 111111111111111','11','8593141f-ca6b-dbac-7c57-3a0facd5b208','00000000-0000-0000-0000-000000000000','2023-12-24 15:10:42','a46718ba-f869-6473-142b-3a0facd47b09',NULL,NULL,0),('517df697-63d3-0412-8aa6-3a0ff53f8682',0,'- [MathNet](https://www.mathdotnet.com/)  - Math.NET 是一个开源倡议，旨在构建和维护涵盖基本数学的工具包，以满足.NET开发人员的高级和日常需求。 \r\n- [Microsoft Automatic Graph Layout](https://github.com/Microsoft/automatic-graph-layout)  - 用于图形布局和查看的一组工具。 \r\n- [UnitConversion](https://github.com/atulmish/UnitConversion)  - 可扩展的 .NET Core 和 .NET Framework 单位转换库。 \r\n- [ALGLIB](https://www.alglib.net/)  - ALGLIB 是一个跨平台的数值分析和数据处理库。它支持多种编程语言（C++、C#、Delphi）和多种操作系统（Windows 和 POSIX，包括 Linux）【专有】和【免费版】。 \r\n- [AutoDiff](https://github.com/alexshtf/autodiff)  - AutoDiff 是一个用于快速计算由表达式定义的函数梯度的库。主要在数值优化中有用。 \r\n- [GeometRi](https://github.com/RiSearcher/GeometRi.CSharp)  - 用于 .Net 的简单轻量级计算几何库。 \r\n- [Rationals](https://github.com/tompazourek/Rationals)  - 用于 .NET 的有任意精度的有理数算术实现。 \r\n- [MKL.NET](https://github.com/AnthonyLloyd/MKL.NET)  - 用于 Intel MKL 的简单跨平台 .NET API。 \r\n- [AngouriMath](https://github.com/asc-community/AngouriMath)  - 一个开源的符号/计算代数库，主要用于 C# 和 F#。它涵盖了各种功能，可视为.NET中SymPy的替代品。 \r\n- [Vim.Math3d](https://github.com/vimaec/math3d)  - 一个功能丰富的跨平台替代 System.Numerics，支持一致的序列化和二进制布局，以及用于高效3D数学的其他结构和算法。 \r\n- [WPF-Math](https://github.com/ForNeVeR/wpf-math)  - 一个用于 WPF 框架的渲染数学公式的 .NET 库，使用 LaTeX 排版风格。 \r\n- [Jodo.Numerics](https://github.com/JosephJShort/Jodo/#numerics)  - 提供额外的数字类型（如定点数和不溢出的数）以及对运算符、数学、字符串解析等的全面支持。经过广泛测试，跨平台兼容。','数学','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,66),('52d7c4f6-5a2e-9bea-4584-3a0f83ad066c',0,'## 简介\n> 鉴权是用于解析用户的令牌，知道用户是否携带令牌，并且知道用户信息是谁\n\n改鉴权使用的是微软Asp.NetCore扩鉴权扩展方式\n程序模块已内置 \n``` cs\ncontext.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)\n    .AddJwtBearer(options =>\n    {\n        options.TokenValidationParameters = new TokenValidationParameters\n        {\n            ClockSkew = TimeSpan.Zero,\n            ValidateIssuer = true,\n            ValidateAudience = true,\n            ValidateLifetime = true,\n            ValidateIssuerSigningKey = true,\n            ValidIssuer = jwtOptions.Issuer,\n            ValidAudience = jwtOptions.Audience,\n            RequireExpirationTime = true,\n            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtOptions.SecurityKey))\n        };\n        options.Events = new JwtBearerEvents\n        {\n            OnMessageReceived = context =>\n            {\n                var accessToken = context.Request.Query[\"access_token\"];\n                if (!string.IsNullOrEmpty(accessToken))\n                {\n                    context.Token = accessToken;\n                }\n                return Task.CompletedTask;\n            }\n        };\n    });\n```\n## 如何使用\n默认已经集成，所以在使用方面，可要求客户端添加标准的jwtbear头即可\n\nswagger 接口文档中，已集成，直接输入jwttoken即可\n![Alt text](../image/swaggerIndex.png)\n\n我们采用的是HSA对称加密方式，只需要具备密钥\n对应的配置文件\n``` json\n  //鉴权\n  \"JwtOptions\": {\n    \"Issuer\": \"https://ccnetcore.com\",\n    \"Audience\": \"https://ccnetcore.com\",\n    \"SecurityKey\": \"zqxwcevrbtnymu312412ihe9rfwhe78rh23djoi32hrui3ryf9e8wfh34iuj54y0934uti4h97fgw7hf97wyh8yy69520\",\n    \"ExpiresMinuteTime\": 86400\n  }\n```\n## Token如何来\n那肯定是登录啊，登录接口会返回Token\n\n那如何制作Token？直接上代码，下面这个也是登录的创建token的方式\n\n``` cs\n        /// <summary>\n        /// 创建令牌\n        /// </summary>\n        /// <param name=\"dic\"></param>\n        /// <returns></returns>\n        private string CreateToken(Dictionary<string, object> dic)\n        {\n            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtOptions.SecurityKey));\n            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);\n            var claims = dic.Select(x => new Claim(x.Key, x.Value.ToString())).ToList();\n            var token = new JwtSecurityToken(\n               issuer: _jwtOptions.Issuer,\n               audience: _jwtOptions.Audience,\n               claims: claims,\n               expires: DateTime.Now.AddSeconds(_jwtOptions.ExpiresMinuteTime),\n               notBefore: DateTime.Now,\n               signingCredentials: creds);\n            string returnToken = new JwtSecurityTokenHandler().WriteToken(token);\n\n            return returnToken;\n        }\n```\n','Jwt鉴权','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','00000000-0000-0000-0000-000000000000','2023-12-16 15:21:15','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('52e07765-63e1-c17c-67df-3a0ff53ad54c',0,'\r\n**1、那些地方用到了单例模式**\r\n\r\n答：\r\n\r\n1. 网站的计数器，一般也是采用单例模式实现，否则难以同步。\r\n2. 应用程序的日志应用，一般都是单例模式实现，只有一个实例去操作才好，否则内容不好追加显示。\r\n3. 多线程的线程池的设计一般也是采用单例模式，因为线程池要方便对池中的线程进行控制\r\n4. Windows的（任务管理器）就是很典型的单例模式，他不能打开俩个\r\n5. windows的（回收站）也是典型的单例应用。在整个系统运行过程中，回收站只维护一个实例。\r\n\r\n**2、举一个用 .Net5中实现的装饰模式(decorator design pattern)？它是作用于对象层次还是类** **层次？** 答：装饰模式增加强了单个对象的能力。.Net5 IO 到处都使用了装饰模式，典型例子就是 Buffered 系列类如 BufferedStream 它们增强了 Stream 对象， 以实现提升性能的 Buffer 层次的读取和写入。\r\n\r\n**3、适配器模式是什么？什么时候使用？\\****\r\n\r\n答：适配器模式（Adapter Pattern）是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式，它结合了两个独立接口的功能。适配器模式提供对接口的转换。如果你的客户端使用某些接口，但是你有另外一些接口，你就可以写一个适配去来连接这些接口。\r\n\r\n**4、适配器模式与装饰器模式有什么区别？\\****\r\n\r\n答：虽然适配器模式和装饰器模式的结构类似，但是每种模式的出现意图不同。适配器模式被用于桥接两个接口，而装饰模式的目的是在不修改类的情况下给类增加新的功能。\r\n\r\n装饰者模式：动态地将责任附加到对象上，若要扩展功能，装饰者模提供了比继承更有弹性的替代方案。\r\n\r\n通俗的解释：装饰模式就是给一个对象增加一些新的功能，而且是动态的，要求装饰对象和被装饰对象实现同一个接口，装饰对象持有被装饰对象的实例。\r\n\r\n适配器模式：将一个类的接口，转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。\r\n\r\n适配器模式有三种：类的适配器模式、对象的适配器模式、接口的适配器模式。\r\n\r\n通俗的说法：适配器模式将某个类的接口转换成客户端期望的另一个接口表示，目的是消除由于接口不匹配所造成的类的兼容性问题。\r\n\r\n**5、适配器模式和代理模式之间有什么不同？\\****\r\n\r\n答：这个问题与前面的类似，适配器模式和代理模式的区别在于他们的意图不同。由于适配器模式和代理模式都是封装真正执行动作的类，因此结构是一致的，但是适配器模式用于接口之间的转换，而代理模式则是增加一个额外的中间层，以便支持分配、控制或智能访问。\r\n\r\n**6、使用工厂模式最主要的好处是什么？你在哪里使用？**\r\n\r\n答：工厂模式的最大好处是增加了创建对象时的封装层次。如果 你使用工厂来创建对象，之后你可以使用更高级和更高性能的实现来替换原始的产品实现或类，这不需要在调用层做任何修改。可以看我的文章工厂模式得更详细的解释和和了解更多的好处。\r\n\r\n**7、什么时候使用享元模式？**\r\n\r\n答：享元模式通过共享对象来避免创建太多的对象。为了使用享元模式，你需要确保你的对象是不可变的，这样你才能安全的共享。Net5中 String 池、Integer 池以及 Long 池都是很好的使用了享元模式的例子。\r\n\r\n**8、什么是责任链设计模式\\****\r\n\r\n答：责任链模式（Chain of Responsibility Pattern）为请求创建了一个接收者对象的链。这种模式给予请求的类型，对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中，通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求，那么它会把相同的请求传给下一个接收者，依此类推。\r\n\r\n**9、你可以说出几个在.Net5中使用的设计模式吗？**\r\n\r\n答：装饰器设计模式（Decorator design pattern）被用于多个.Net5 IO类中。单例模式（Singleton pattern）用于Runtime，Calendar和其他的一些类中。工厂模式（Factory pattern）被用于各种不可变的类如HttpClient，像HttpClientFactory，观察者模式（Observer pattern）被用于DiagnosticSource和很多的事件监听中。','设计模式面试题','f6462b48-9601-0253-6450-3a0ff538dfa4','00000000-0000-0000-0000-000000000000','2024-01-07 16:33:14','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,9),('5373ab8e-b1ce-b873-faf1-3a0f8385b93a',0,'# 后端\nC# Asp.NetCore 8.0\n- [x] 动态Api：Abp.vNext\n- [x] 鉴权授权：Jwt\n- [x] 日志：Serilog\n- [x] 模块化：Abp.vNext\n- [x] 依赖注入：Autofac\n- [x] 对象映射：Mapster\n- [x] ORM: SqlsugarCore\n- [x] 多租户：Abp.vNext\n- [x] 后台任务：Quartz.Net\n- [x] 本地缓存：Abp.vNext\n- [x] 分布式缓存：Abp.vNext\n- [x] 事件总线：Abp.vNext\n\n# 前端\njs Vue3.2\n- [x] 异步请求：axios\n- [x] 图表：echarts\n- [x] ui：element-plus\n- [x] 存储：pinia\n- [x] 路由：vue-router\n- [x] 打包：vite\n\n# 运维\n- [x] 部署：nginx\n- [x] CICD：gitlab+Jenkins\n- [x] Docker：harbor\n\n\n','核心技术','aaa00329-7f35-d3fe-d258-3a0f8380b742','00000000-0000-0000-0000-000000000000','2023-12-16 14:38:19','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('54a0da70-7907-9ca4-55b2-3a0f83acd072',0,'## 简介\n种子数据一直都是一个很繁琐的东西，例如在初始化数据的时候，添加默认用户\n可以通过导入sql的方式进行添加种子数据，也可以通过程序代码中自动初始化数据\n我们目前提供后者\n\n## 如何使用\n一切的根源，来源自：`IDataSeedContributor`\n直接使用实现`IDataSeedContributor`接口,我们只需要实现 `SeedAsync(DataSeedContext context)`即可\n\n在实现类上，要将该类加入容器中，推荐通过内置的依赖注入模块\n\n当然，对于扩展，你可以重写其他的方法\n\n#### 其他方式使用\n另外，你可以直接依赖注入，直接使用IDataSeeder SeedAsync方法，重新手动执行种子数据\n> 默认在程序启动的时候，会根据配置文件选择，是否执行种子数据\n\n## 完整例子\n``` cs\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing SqlSugar;\nusing Volo.Abp.Data;\nusing Volo.Abp.DependencyInjection;\nusing Volo.Abp.Domain.Repositories;\nusing Volo.Abp.Guids;\nusing Yi.Framework.Rbac.Domain.Entities;\nusing Yi.Framework.SqlSugarCore.Abstractions;\n\nnamespace Yi.Framework.Bbs.SqlSugarCore.DataSeeds\n{\n    public class ConfigDataSeed : IDataSeedContributor, ITransientDependency\n    {\n        private ISqlSugarRepository<ConfigEntity> _repository;\n        public ConfigDataSeed(ISqlSugarRepository<ConfigEntity> repository)\n        {\n            _repository = repository;\n        }\n        public async Task SeedAsync(DataSeedContext context)\n        {\n            if (!await _repository.IsAnyAsync(x => true))\n            {\n                await _repository.InsertManyAsync(GetSeedData());\n            }\n        }\n        public List<ConfigEntity> GetSeedData()\n        {\n            List<ConfigEntity> entities = new List<ConfigEntity>();\n            ConfigEntity config1 = new ConfigEntity()\n            {\n                ConfigKey = \"bbs.site.name\",\n                ConfigName = \"站点名称\",\n                ConfigValue = \"意社区\"\n            };\n            entities.Add(config1);\n\n            ConfigEntity config2 = new ConfigEntity()\n            {\n                ConfigKey = \"bbs.site.author\",\n                ConfigName = \"站点作者\",\n                ConfigValue = \"橙子\"\n            };\n            entities.Add(config2);\n\n            ConfigEntity config3 = new ConfigEntity()\n            {\n                ConfigKey = \"bbs.site.icp\",\n                ConfigName = \"站点Icp备案\",\n                ConfigValue = \"赣ICP备20008025号\"\n            };\n            entities.Add(config3);\n\n\n            ConfigEntity config4 = new ConfigEntity()\n            {\n                ConfigKey = \"bbs.site.bottom\",\n                ConfigName = \"站点底部信息\",\n                ConfigValue = \"你好世界\"\n            };\n            entities.Add(config4);\n            return entities;\n        }\n    }\n\n\n}\n\n \n```','种子数据','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','00000000-0000-0000-0000-000000000000','2023-12-16 15:21:01','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('55ba8148-b948-9c55-ffd5-3a0ff53f8682',0,'\r\n- [NetCoreServer](https://github.com/chronoxor/NetCoreServer)  - 超快和低延迟的异步套接字服务器和客户端C# .NET Core库，支持TCP、SSL、UDP、HTTP、HTTPS、WebSocket协议以及10K连接问题的解决方案（NETStandard）。 \r\n- [SharpPcap](https://github.com/chmorgan/sharppcap)  - 完全托管的、跨平台（Windows、Mac、Linux）的.NET库，用于从实时和基于文件的设备捕获数据包。\r\n- [AspNetCore.Proxy](https://github.com/twitchax/AspNetCore.Proxy) -  Proxy代理库。\r\n- [CurlThin](https://github.com/stil/CurlThin) - 轻量级cURL绑定库，支持通过curl_multi接口进行多个同时传输。\r\n- [NETStandard.HttpListener](https://github.com/StefH/NETStandard.HttpListener) - HttpListener(NETStandard)。\r\n- [Networker](https://github.com/MarkioE/Networker) - 一个简单易用的.NET TCP和UDP网络库，旨在实现灵活，可扩展和快速。','网络','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,72),('57ffa3f7-03c4-fc7d-1ae8-3a0fe745b5ca',1,'测试导入11111111','测试.md','32518510-b9d5-4436-a902-3a0fe686d8ce','00000000-0000-0000-0000-000000000000','2024-01-04 23:30:26','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','2024-01-04 23:30:32',0),('58170f2f-ef75-82b0-6964-3a0ff53f8682',0,'\r\n- ## Markdown 处理 \r\n- [MarkdownSharp](https://code.google.com/archive/p/markdownsharp)  - Markdown处理器的开源C#实现，被广泛用于Stack Overflow等地方。 \r\n- [F# Formatting](https://fsprojects.github.io/FSharp.Formatting/)  - 用于文档化F#和C#项目的工具。该库包含可扩展的Markdown解析器作为核心组件。 \r\n- [CommonMark.NET](https://github.com/Knagis/CommonMark.NET)  - 用于将Markdown文档转换为HTML的C#实现CommonMark规范。经过最大性能和可移植性的优化。 \r\n- [markdig](https://github.com/lunet-io/markdig)  - 用于.NET的快速、强大、符合CommonMark规范的可扩展Markdown处理器。','Markdown','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,64),('595c740e-00a0-54f3-a662-3a0fe9b5b449',0,'当我们在使用面向对象编程语言时，多态性是一个非常重要的概念。C# 是一种面向对象编程语言，它支持多态性的特性。\r\n## 什么是多态性？\r\n\r\n多态性是指同一种行为或方法在不同的对象上具有不同的实现方式或表现形式的能力。这意味着，一个对象的方法可以被多个对象使用，并且每个对象可以根据自己的特定情况来执行该方法。这使得代码更加灵活和可重用。\r\n## 多态性的类型\r\n\r\n在 C# 中，有两种类型的多态性：静态多态性和动态多态性。\r\n### 静态多态性\r\n\r\n静态多态性又被称为编译时多态性或重载。它是指在编译时就能够确定要执行哪个方法，而不是在运行时才确定。在 C# 中，实现静态多态性的方法有方法重载和运算符重载。\r\n#### 方法重载\r\n\r\n方法重载是指在一个类中定义多个具有相同名称但参数类型或数量不同的方法。编译器将根据调用方法时传递的参数类型和数量来确定要执行的方法。\r\n\r\n例如，下面的代码演示了方法重载的实现：\r\n\r\n```csharp\r\n\r\nclass Calculator\r\n{\r\n    public int Add(int a, int b)\r\n    {\r\n        return a + b;\r\n    }\r\n    \r\n    public double Add(double a, double b)\r\n    {\r\n        return a + b;\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的示例中，`Calculator` 类中定义了两个名为 `Add` 的方法。一个方法接受 `int` 类型的参数，另一个方法接受 `double` 类型的参数。编译器会根据传递的参数类型和数量来确定要执行的方法。例如：\r\n\r\n```csharp\r\n\r\nvar calculator = new Calculator();\r\n\r\nint result1 = calculator.Add(2, 3); // 调用第一个 Add 方法，返回 5\r\ndouble result2 = calculator.Add(2.5, 3.5); // 调用第二个 Add 方法，返回 6.0\r\n```\r\n\r\n\r\n#### 运算符重载\r\n\r\nC# 允许我们对运算符进行重载，这样我们就可以对自定义类型进行运算。例如，我们可以对 `+` 运算符进行重载，使其能够对自定义类型进行加法运算。\r\n\r\n例如，下面的代码演示了如何对自定义类型 `Point` 进行加法运算：\r\n\r\n```csharp\r\n\r\nclass Point\r\n{\r\n    public int X { get; set; }\r\n    public int Y { get; set; }\r\n    \r\n    public static Point operator +(Point p1, Point p2)\r\n    {\r\n        return new Point { X = p1.X + p2.X, Y = p1.Y + p2.Y };\r\n    }\r\n}\r\n\r\nvar p1 = new Point { X = 2, Y = 3 };\r\nvar p2 = new Point { X = 4, Y = 5 };\r\nvar p3 = p1 + p2; //\r\n```\r\n\r\n在上面的示例中，我们定义了 `Point` 类，并对 `+` 运算符进行了重载。重载方法采用静态方法的形式，并且必须以 `operator` 关键字开头，后面跟着要重载的运算符。在这个示例中，我们定义了 `+` 运算符的重载方法。这个方法接受两个 `Point` 类型的参数，并返回一个新的 `Point` 对象，表示两个点的和。\r\n### 动态多态性\r\n\r\n动态多态性又被称为运行时多态性或覆盖。它是指在运行时才能够确定要执行哪个方法。在 C# 中，实现动态多态性的方法有虚方法和抽象方法。\r\n#### 虚方法\r\n\r\n虚方法是指在基类中定义的方法，它可以被子类重写。在基类中，我们可以使用 `virtual` 关键字来声明一个方法是虚方法。在子类中，我们可以使用 `override` 关键字来重写基类中的虚方法。\r\n\r\n例如，下面的代码演示了如何使用虚方法：\r\n\r\n```csharp\r\n\r\nclass Shape\r\n{\r\n    public virtual double GetArea()\r\n    {\r\n        return 0;\r\n    }\r\n}\r\n\r\nclass Circle : Shape\r\n{\r\n    public double Radius { get; set; }\r\n    \r\n    public override double GetArea()\r\n    {\r\n        return Math.PI * Radius * Radius;\r\n    }\r\n}\r\n\r\nclass Square : Shape\r\n{\r\n    public double Side { get; set; }\r\n    \r\n    public override double GetArea()\r\n    {\r\n        return Side * Side;\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的示例中，我们定义了一个 `Shape` 类，它包含一个虚方法 `GetArea`。`Circle` 和 `Square` 类都继承自 `Shape` 类，并重写了 `GetArea` 方法。这样，在我们调用 `GetArea` 方法时，具体执行哪个方法取决于对象的实际类型。例如：\r\n\r\n```csharp\r\n\r\nvar circle = new Circle { Radius = 5 };\r\nvar square = new Square { Side = 10 };\r\n\r\ndouble circleArea = circle.GetArea(); // 返回 78.53981633974483\r\ndouble squareArea = square.GetArea(); // 返回 100\r\n```\r\n\r\n\r\n#### 抽象方法\r\n\r\n抽象方法是指在基类中定义的没有实现体的方法，它必须在派生类中被实现。在基类中，我们可以使用 `abstract` 关键字来声明一个方法是抽象方法。在子类中，我们必须使用 `override` 关键字来实现基类中的抽象方法。\r\n\r\n例如，下面的代码演示了如何使用抽象方法：\r\n\r\n```csharp\r\n\r\nabstract class Shape\r\n{\r\n    public abstract double GetArea();\r\n}\r\n\r\nclass Circle : Shape\r\n{\r\n    public double Radius { get; set; }\r\n    \r\n    public override double GetArea()\r\n    {\r\n        return Math.PI * Radius * Radius;\r\n    }\r\n}\r\n\r\nclass Square : Shape\r\n{\r\n    public double Side { get; set; }\r\n    \r\n    public override double GetArea()\r\n    {\r\n        return Side * Side;\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的示例中，我们定义了一个抽象类`Shape`，它包含一个抽象方法 `GetArea`。`Circle` 和 `Square` 类都继承自 `Shape` 类，并实现了 `GetArea` 方法。这样，在我们调用 `GetArea` 方法时，具体执行哪个方法取决于对象的实际类型。例如：\r\n\r\n```csharp\r\n\r\nShape circle = new Circle { Radius = 5 };\r\nShape square = new Square { Side = 10 };\r\n\r\ndouble circleArea = circle.GetArea(); // 返回 78.53981633974483\r\ndouble squareArea = square.GetArea(); // 返回 100\r\n```\r\n\r\n\r\n\r\n在上面的示例中，我们将 `Circle` 和 `Square` 对象赋值给 `Shape` 类型的变量。这样做的好处是可以提高代码的灵活性，因为我们可以使用基类类型的变量来引用派生类对象。\r\n## 总结\r\n\r\n多态性是面向对象编程中非常重要的概念。C# 支持两种类型的多态性：静态多态性和动态多态性。静态多态性是在编译时确定要执行的方法，它的实现方式包括方法重载和运算符重载。动态多态性是在运行时才能够确定要执行的方法，它的实现方式包括虚方法和抽象方法。\r\n\r\n示例代码如下：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nnamespace PolymorphismExample\r\n{\r\n    class Program\r\n    {\r\n        static void Main(string[] args)\r\n        {\r\n            var calculator = new Calculator();\r\n\r\n            int result1 = calculator.Add(2, 3);\r\n            double result2 = calculator.Add(2.5, 3.5);\r\n\r\n            Console.WriteLine($\"2 + 3 = {result1}\");\r\n            Console.WriteLine($\"2.5 + 3.5 = {result2}\");\r\n\r\n            var p1 = new Point { X = 2, Y = 3 };\r\n            var p2 = new Point { X = 4, Y = 5 };\r\n            var p3 = p1 + p2;\r\n\r\n            Console.WriteLine($\"({p1.X}, {p1.Y}) + ({p2.X}, {p2.Y}) = ({p3.X}, {p3.Y})\");\r\n\r\n            Shape circle = new Circle { Radius = 5 };\r\n            Shape square = new Square { Side = 10 };\r\n\r\n            double circleArea = circle.GetArea();\r\n            double squareArea = square.GetArea();\r\n\r\n            Console.WriteLine($\"圆的面积是 {circleArea}\");\r\n            Console.WriteLine($\"正方形的面积是 {squareArea}\");\r\n        }\r\n    }\r\n\r\n    class Calculator\r\n    {\r\n        public int Add(int a, int b)\r\n        {\r\n            return a + b;\r\n        }\r\n\r\n        public double Add(double a, double b)\r\n        {\r\n            return a + b;\r\n        }\r\n    }\r\n\r\n    class Point\r\n    {\r\n        public int X { get; set; }\r\n        public int Y { get; set; }\r\n\r\n        public static Point operator +(Point p1, Point p2)\r\n        {\r\n            return new Point { X = p1.X + p2.X, Y = p1.Y + p2.Y };\r\n        }\r\n    }\r\n\r\n    abstract class Shape\r\n    {\r\n        public abstract double GetArea();\r\n    }\r\n\r\n    class Circle : Shape\r\n    {\r\n        public double Radius { get; set; }\r\n\r\n        public override double GetArea()\r\n        {\r\n            return Math.PI *continued* * Radius * Radius;\r\n        }\r\n    }\r\n\r\n    class Square : Shape\r\n    {\r\n        public double Side { get; set; }\r\n\r\n        public override double GetArea()\r\n        {\r\n            return Side * Side;\r\n        }\r\n    }\r\n}\r\n\r\n```\r\n\r\n以上是一个简单的 C# 多态性示例。这个示例中使用了方法重载、运算符重载、虚方法和抽象方法。每种多态性的实现方式都有各自的优点和适用场景。在实际编程中，我们可以根据具体情况选择使用适当的多态性实现方式来提高代码的灵活性和可重用性。\r\n','C# 多态性','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,21),('59a0ebc6-b076-5be7-6eb7-3a0ff5881694',0,'**C#WPF--网络资源爬虫**\n\n**作者心得**\n真没你想的那么高级，真的\n算是我第一个与http有交互的玩意儿吧\n运用到了：正则表达式\n（后来代码被我弄去研究了，貌似改动过）\n\n**源代码**\n\n```csharp\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\nusing System.Net;\nusing System.Text.RegularExpressions;\nusing System.IO;\n\nnamespace TQJ\n{\n    /// <summary>\n    /// MainWindow.xaml 的交互逻辑\n    /// </summary>\n    public partial class MainWindow : Window\n    {\n       \n        public MainWindow()\n        {\n            InitializeComponent();\n        }\n\n\n        public string wwwtext;\n        public static string textclass;\n      \n\n        private void Window_Initialized(object sender, EventArgs e)\n        {\n          \n            if (!Directory.Exists(@\"e:\\data\"))\n            {\n                Directory.CreateDirectory(@\"e:\\data\");\n            }\n\n        }\n        public static string get_uft8(string unicodeString)\n        {\n            UTF8Encoding utf8 = new UTF8Encoding();\n            Byte[] encodedBytes = utf8.GetBytes(unicodeString);\n            String decodedString = utf8.GetString(encodedBytes);\n            return decodedString;\n        }\n\n        private void Button_Click(object sender, RoutedEventArgs e)//提取图片\n        {\n            wwwtext = www.Text;\n           string lt= (\"_\" + System.Guid.NewGuid().ToString() + \"_\" + System.Guid.NewGuid().ToString()).ToUpper();\n            try\n            {\n                //WebClient client = new WebClient();\n                ////Byte[] pageData = client.DownloadData(\"\");\n                ////string html= Encoding.GetEncoding(\"utf-8\").GetString(pageData);\n                ////TextBox.Text += html;\n\n                ////MatchCollection matches = Regex.Matches(html, @\"[0-9]{4}\", RegexOptions.IgnoreCase);\n\n                ////foreach (Match item in matches)\n                ////{\n                ////    TextBox.Text = TextBox.Text + item.Value;\n                ////    string pathImg = \"http://120.77.214.11/code.ajx?t=\" + item.Value;\n                //client.DownloadFile(\"https://vpn.jift.edu.cn/http/77726476706e69737468656265737421e3e44ed22d396e44300d8db9d6562d/cas/codeimage?vpn-1\", @\"e:\\data\\\" + System.DateTime.Now.ToFileTime() + \".jpg\");\n                //                          //}\n            MessageBox.Show(\"提取成功！\", \"提示！\");\n            }\n            catch\n            {\n                MessageBox.Show(\"该网站已加密，请换一个试试\");\n            }\n\n        }\n\n        private void Button_Click_1(object sender, RoutedEventArgs e)//提取电话\n        {\n            StreamWriter sw = new StreamWriter(@\"e:\\data\\phone.txt\", true); \n            wwwtext = www.Text;\n            try\n            {\n                WebClient client = new WebClient();\n                string html = client.DownloadString(wwwtext);\n                MatchCollection matches = Regex.Matches(html, @\"(134|135|136|137|138|139|150|151|152|157|158|159|147|182|183|184|187|188|170|178|130|131|132|145|155|156|185|186|176|170|171|166|133|153|180|181|189|170|177|173)(\\b)?[0-9]{8}\");\n                foreach (Match item in matches)\n                {\n                    sw.WriteLine(item.Value);\n                    TextBox.Text = TextBox.Text +\"\\r\\n\"+ item.Value;\n                }\n                MessageBox.Show(\"提取成功！\", \"提示！\");\n            }\n            catch\n            {\n                MessageBox.Show(\"该网站不存在电话号码，请换一个试试\");\n            }\n\n            sw.Close();\n\n        }\n\n        private void Button_Click_2(object sender, RoutedEventArgs e)\n        {\n            StreamWriter sw = new StreamWriter(@\"e:\\data\\email.txt\", true);\n            wwwtext = www.Text;\n            try\n            {\n                WebClient client = new WebClient();\n                string html = client.DownloadString(wwwtext);\n                MatchCollection matches = Regex.Matches(html, @\"([A-Za-z0-9\\u4e00-\\u9fa5]+)@([a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+)\");\n                foreach (Match item in matches)\n                {\n                    sw.WriteLine(\"用户名:\" + item.Groups[1].Value+\";域名:\"+ item.Groups[2].Value);\n                    TextBox.Text = TextBox.Text + \"\\r\\n\" + \"用户名:\" + item.Groups[1].Value + \";域名:\" + item.Groups[2].Value;\n                }\n                MessageBox.Show(\"提取成功！\", \"提示！\");\n            }\n            catch\n            {\n                MessageBox.Show(\"该网站不存在邮箱，请换一个试试\");\n            }\n\n            sw.Close();\n        }\n\n        private void Button_Click_3(object sender, RoutedEventArgs e)\n        {\n            StreamWriter sw = new StreamWriter(@\"e:\\data\\address.txt\", true);\n            wwwtext = www.Text;\n            try\n            {\n                WebClient client = new WebClient();\n                string html = client.DownloadString(wwwtext);\n                MatchCollection matches = Regex.Matches(html, @\"(.+)\\[port=([0-9]{2,5})(,type=(.+))?\\]\");\n                foreach (Match item in matches)\n                {\n                    sw.WriteLine(\"IP:\" + item.Groups[1].Value + \";port:\" + item.Groups[2].Value);\n                    TextBox.Text = TextBox.Text + \"\\r\\n\" + \"IP:\" + item.Groups[1].Value + \";port:\" + item.Groups[2].Value;\n                }\n                MessageBox.Show(\"提取成功！\", \"提示！\");\n            }\n            catch\n            {\n                MessageBox.Show(\"该网站不存在地址，请换一个试试\");\n            }\n\n            sw.Close();\n        }\n\n        private void Button_Click_4(object sender, RoutedEventArgs e)\n        {\n            textclass = www.Text;\n            this.Hide();\n            Window1 p = new Window1();\n            p.Show();\n        }\n\n        private void Button_Click_5(object sender, RoutedEventArgs e)\n        {\n            Form1 form1 = new Form1();\n            form1.Show();\n        }\n\n        private void Button_Click_6(object sender, RoutedEventArgs e)\n        {\n           TextBox.Text=( \"_\"+System.Guid.NewGuid().ToString()+\"_\"+System.Guid.NewGuid().ToString()).ToUpper();\n        }\n    }\n    }\n\n\n```\n**效果截图**\n![image.png](/prod-api/file/9b3282c2-304f-6f2d-b431-3a0ff5880480/true)\n**作者的话**\n好像这个是我最后一个winform项目了\n接下来应该走Asp .net项目了\n虽然这2个关系不大，但是winform作为c#入门真的很有帮助！','C#WPF--网络资源爬虫','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 17:57:37','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('5ac86950-2d82-1a53-0eac-3a0fa8f8c42f',0,'## jenkins流水线\n\n在上一章，已经将核心的环境给安装了，接下来我们可进行jenkins的流水线配置\n\n> 这里开始配置的前提，需要将推荐插件下载，不安装插件流水线的功能都没有，同时检测`Publish Over SSH`插件是否已经安装，需要这个插件进行远程执行命令\n\n## 配置凭据\n我们需要先将密钥配置好，因为我们等下的流水线的git拉去代码要将密钥进行登录\n\n在`系统管理/凭据/系统/全局凭据 (unrestricted)`中添加一个用户名和密码的凭据，这里我们可以填写我们git仓库的的账号即可\n\n## 配置免密登录\n这一步至关重要，由于我们会远程向其他服务器执行命名，需要先配置免密登录。\n\n通常来说，jenkins只做拉去代码，打包发布成可执行的包，至于执行包发布给谁，可以通过ssh发送，对应的服务器只需要收到包，解压，然后直接启动即可，如果服务器资源不够，也可以考虑`127.0.0.1`当远程服务器\n\n``` shell\n#获取rsa密钥对\nssh-keygen -t rsa\\\n\n#将密钥进行拷贝\nssh-copy-id -i /root/.ssh/id_rsa.pub root\\@localhost\n```\n按以上的提示一步一步回车即可\n\n如果提示命令没有找到，需安装openssh客户端\n``` shell\nyum -y install openssh-clients\\\n```\n## Publish over SSH配置\n由于我们使用到这个插件进行命令与文件的传输\n\n需要在`系统管理/System/Publish over SSH`中进行配置这个插件\n\n主要就是针对的上方的免密登录功能\n\n以下详细介绍每一个配置吧~\n``` shell\nname: 只是一个标识\n\nHostname: 远程ip，如果是本机可以localhost\n\nUsername：远程登录用户名，可以root\n\nRemote Directory：远程传输根目录，待会传输文件的目录会拼接上这个，我是习惯传输到/home下，所以可以填写/home\n\nKey 输入框粘贴 `/root/.ssh/id_rsa` 中的密钥，全部都要粘贴进去哦~\n```\n保存之前，可以进行测试，看以下是否成功！\n\n## 环境变量配置\n如果之前配置的环境变量，不是系统环境变量，需要单独为jenkins赋上\n\n不然执行命令，将提示命令未找到，主要是dotnet与npm\n\n我们可以在`系统管理/System`中的全局属性下有一个`环境变量`\n``` shell\nkey: PATH\nvalue: /usr/share/Modules/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/dotnet:/opt/nodejs/node-v18.13.0-linux-x64/bin\n```\n\n### 后端脚本编写\n\n有了环境，我们可以将我们的代码手动发布上传，测试一下是否可以手动执行dotnet运行，如果成功，将说明环境安装成功\n\n之后，我们可以写两个脚本，一个启动、一个关闭，放到我们的程序入口，关于程序的启动和关闭，可以由脚本来控制会减少很多的问题及困难\n\n我们其实已经在程序里带出来了，就是框架中的`start.sh`及`end.sh`\n\n``` shell\n#!/bin/bash\n./end.sh\nnohup dotnet Yi.Abp.Web.dll > /dev/null 2>&1 &\necho \"Yi-启动成功!\"\n\n\n#!/bin/bash\nkill $(lsof -t -i:19001)\necho \"Yi-进程已关闭\"\n\n```\n\n编写启动和停止脚本，我们还要给它赋值权限，否则不是一个有效的执行文件\n\n``` shell\nchmod +x start.sh\nchmod +x end.sh\n```\n\n> 这里如果提示：unix编码问题 ^M\n可以使用vim进行转码\n``` shell\nvim test.sh\n:set ff=unix\n:wq\n\n```\n\n\n## 流水线编写\n\n好了，到了这步，如果你一切顺利，恭喜你，准备进入流水线的脚本编写了\n\n> 心急吃不了热豆腐，我们得静下心来，这块需要慢慢配置，一点一点调试\n\n首页->新建任务->流水线\n\n> 以下脚本为Yi框架的cicd脚本，后端与前端及各个项目是不一样\n\n我这里已经将脚本编写好，可根据实际情况进行更改，主要是密钥和授权等\n\n### 后端流水线脚本：\n``` java\npipeline {\n    agent any\n\n    stages {\n        stage(''git'') {\n            steps {\n                git branch: ''abp'', credentialsId: ''[REDACTED]'', url: ''https://gitee.com/ccnetcore/Yi.git''\n                echo ''仓库克隆成功''\n            }\n        }\n        stage(''build'') {\n            steps {\n                sh \"\"\"\n                cd Yi.Abp.Net8/src/Yi.Abp.Web;\n                dotnet publish -c Release;\n                \"\"\"\n                echo ''构建成功''\n            }\n        }\n        stage(''zip'') {\n            steps {\n                sh \"\"\"\n                mkdir -p ./publish\n                7za a ./publish/publish_01.zip ./Yi.Abp.Net8/src/Yi.Abp.Web/bin/Release/net8.0/publish/*;\n                \"\"\"\n                echo ''压缩包成功''\n            }\n        }\n        stage(''publish'') {\n            steps {\n                sshPublisher(publishers: [sshPublisherDesc(configName: ''ccnetcore'', transfers: [sshTransfer(cleanRemote: false, excludes: '''', execCommand: ''''''cd /home/yi/net8\necho 开始解压\nunzip -o /home/yi/build/publish_01.zip  -d ./\necho 开始启动\nsh start.sh\necho 启动成功'''''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: ''[, ]+'', remoteDirectory: ''yi/build'', remoteDirectorySDF: false, removePrefix: ''publish'', sourceFiles: ''publish/publish_01.zip'')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])\n                echo ''发布成功''\n            }\n        }\n    }\n}\n\n```\n### 前端rbac脚本：\n``` shell\npipeline {\n    agent any\n\n    stages {\n        stage(''git'') {\n            steps {\n                git branch: ''abp'', credentialsId: ''[REDACTED]'', url: ''https://gitee.com/ccnetcore/Yi.git''\n                echo ''仓库克隆成功''\n            }\n        }\n        stage(''build'') {\n            steps {\n                sh \"\"\"\n                cd Yi.RuoYi.Vue3;\n                npm config set registry https://registry.npm.taobao.org;\n                npm i;\n                npm run build:prod;\n                \"\"\"\n                echo ''构建成功''\n            }\n        }\n        stage(''zip'') {\n            steps {\n                sh \"\"\"\n                mkdir -p ./publish\n                7za a ./publish/publish_rbac_01.zip ./Yi.RuoYi.Vue3/dist/*;\n                \"\"\"\n                echo ''压缩包成功''\n            }\n        }\n        stage(''publish'') {\n            steps {\n                sshPublisher(publishers: [sshPublisherDesc(configName: ''ccnetcore'', transfers: [sshTransfer(cleanRemote: false, excludes: '''', execCommand: ''''''cd /home/yi/rbac\necho 开始解压\nunzip -o /home/yi/build/publish_rbac_01.zip  -d ./\necho 替换完成'''''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: ''[, ]+'', remoteDirectory: ''yi/build'', remoteDirectorySDF: false, removePrefix: ''publish'', sourceFiles: ''publish/publish_rbac_01.zip'')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])\n                echo ''发布成功''\n            }\n        }\n    }\n}\n\n```\n\n### 前端bbs脚本\n``` shell\npipeline {\n    agent any\n\n    stages {\n        stage(''git'') {\n            steps {\n                git branch: ''abp'', credentialsId: ''[REDACTED]'', url: ''https://gitee.com/ccnetcore/Yi.git''\n                echo ''仓库克隆成功''\n            }\n        }\n        stage(''build'') {\n            steps {\n                sh \"\"\"\n                cd Yi.Bbs.Vue3;\n                npm config set registry https://registry.npm.taobao.org;\n                npm install;\n                npm run build;\n                \"\"\"\n                echo ''构建成功''\n            }\n        }\n        stage(''zip'') {\n            steps {\n                sh \"\"\"\n                mkdir -p ./publish\n                7za a ./publish/publish_bbs_01.zip ./Yi.Bbs.Vue3/dist/*;\n                \"\"\"\n                echo ''压缩包成功''\n            }\n        }\n        stage(''publish'') {\n            steps {\n                sshPublisher(publishers: [sshPublisherDesc(configName: ''ccnetcore'', transfers: [sshTransfer(cleanRemote: false, excludes: '''', execCommand: ''''''cd /home/yi/bbs\necho 开始解压\nunzip -o /home/yi/build/publish_bbs_01.zip  -d ./\necho 替换完成'''''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: ''[, ]+'', remoteDirectory: ''yi/build'', remoteDirectorySDF: false, removePrefix: ''publish'', sourceFiles: ''publish/publish_bbs_01.zip'')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])\n                echo ''发布成功''\n            }\n        }\n    }\n}\n\n```\n\n编写完成之后，可以逐步一下一下进行测试，看看哪里有问题再进行更改\n\n> 以上脚本，都是一步一个脚印，一晚一行代码磨出来的，比较适合现在的场景，可推荐使用，坑比较少\n\n## 进阶\n后续，你可以尝试`gitlab+jenkins+harbor+docker+k8s`的路线，这块橙子也是搭建过好几次，但需求点过于多，比较费劲，同时一般只有非常大型的项目才用的上，再次就不过多赘述了，想讲实战讲清楚，估计是当前篇幅至少10倍以上，里面的坑我之前pdf简单汇总了一次，大概就有23面以上，现在可能很有很多工具，安装应该没有那么复杂了，不过我还暂时没有去接触的场景，如果你想像我一样，可以一起播撒这颗种子，让更多人的收获\n\n## 结语\n可以看的出来，一个大家认为很简答的cicd，如果像从零开始一下一下搭建出来，坑还是蛮多的，爬出这些坑也是比较费事，并没有网上说的那么容易\n\n本人这种环境搭建不下10次以上，也只是`无他，熟能生巧而已`\n\n> 搞的多了，也就麻了，水来土挡，坑来我填\n\n最后，如果你这边怀着激动心情，讲上述的过程全部跑成功了,那么恭喜你啦~我亲爱的朋友，这篇文章教程就有它真正的意义了！\n\n','Jenkins流水线配置','6b80ed42-50cd-db15-c073-3a0fa8f7fd77','00000000-0000-0000-0000-000000000000','2023-12-23 21:09:56','59cf7e31-e3e4-544e-1038-3a0f836cc538','59cf7e31-e3e4-544e-1038-3a0f836cc538','2023-12-26 10:01:04',0),('5bc73d5b-d9d3-a9fa-fbcf-3a0f83ac66c2',0,'## 简介\n审计日志是对数据的操作记录\n例如：\n1. 数据的创建者\n2. 数据的创建时间\n3. 数据的更新者\n4. 数据的更新时间\n\n对于重要的数据，我们应该提供审计日志功能，方便进行数据追溯\n框架内部已`自动集成`，使用起来非常简单\n## 如何使用\n我们把全部的审计日志封装一个对象\n你的**实体**可直接继继承或者实现接口\nAuditedObject与IAuditedObject\n\n它包含4个属性字段，\n``` cs\n  public DateTime CreationTime { get; set; }= DateTime.Now;\n\n  public Guid? CreatorId { get; set; }\n\n  public Guid? LastModifierId { get; set; }\n\n  public DateTime? LastModificationTime { get; set; }\n\n```\n\n**在执行插入的时候：**\n会自动为`CreationTime` 与 `CreatorId` 赋值\n\n\n**在执行更新的时候：**\n会自动为`LastModificationTime` 与 `LastModifierId`  赋值\n\n当然，如果只需要部分的审计日志，你完全可以实现单独的接口\n分别为：\n``` cs\nIHasCreationTime\nIMayHaveCreator\nIModificationAuditedObject\nIHasModificationTime\n```','审计日志','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','00000000-0000-0000-0000-000000000000','2023-12-16 15:20:34','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('5c85168f-9d75-dbd7-5de8-3a0ff53f8680',0,'- [iCal.NET](https://github.com/rianjs/ical.net)  iCal.NET 是一个面向 .NET 的 iCalendar（RFC 5545）类库，旨在提供 RFC 5545 兼容性，并与流行的日历应用程序和类库完全兼容。','日历','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,18),('5cb28486-6431-0144-7613-3a0ff584b04a',0,'**C#Unity--2D迷宫**\n\n**作者心得**\n哇！这是？第一次接触游戏引擎！！！！\n体验真的极佳！\n那时候基本上课教一些跟专业没关系的课程\n偶然听别说c#在unity占的分量，我决定来试试！\n看了很多书，很多教程！很庆幸，我们学校图书馆还有好几本关于unity的书籍，于是上课时间，统统浏览几遍！\n\n**源代码**\n```csharp\nusing System.Collections;\nusing System.Collections.Generic;\nusing UnityEngine;\n\npublic class move : MonoBehaviour\n{\n    public float speed = 1.0F;\n    // Start is called before the first frame update\n    void Start()\n    {\n        \n    }\n\n    // Update is called once per frame\n    void Update()\n    {\n        if (Input.GetKey(\"up\"))\n            this.transform.Translate(0, 0, speed*Time.deltaTime);\n        if (Input.GetKey(\"down\"))\n            this.transform.Translate(0, 0, -speed * Time.deltaTime);\n        if (Input.GetKey(\"left\"))\n            this.transform.Translate(-speed * Time.deltaTime, 0, 0);\n        if (Input.GetKey(\"right\"))\n            this.transform.Translate(speed * Time.deltaTime, 0, 0);\n    }\n}\n\n\n\nusing System.Collections;\nusing System.Collections.Generic;\nusing UnityEngine;\nusing UnityEngine.SceneManagement;\nusing UnityEngine.UI;\n\npublic class open : MonoBehaviour\n{\n    private GameObject btn;\n    // Start is called before the first frame update\n    void Start()\n    {\n        btn = GameObject.Find(\"Button\");\n        btn.GetComponent<Button>().onClick.AddListener(fuck);\n    }\n\n    // Update is called once per frame\n    void Update()\n    {\n\n    }\n    void fuck()\n    {\n        SceneManager.LoadScene(\"changjin\");\n     }\n\n}\n\n```\n\n**效果截图**\n![image.png](/prod-api/file/5b5636e6-2cea-55f8-7917-3a0ff5846cc2/true)\n\n![image.png](/prod-api/file/74316a26-3f13-4c5c-7b53-3a0ff5848221/true)\n**作者的话**\n在unity里面，c#语言只是其中的一小部分，所以大部分时间要花费到引擎的操作上，关于这个方面的教程，其实很多专业的是要收费的，而且真正在语言逻辑上的教程，不是特别多\n完成了我儿时的一个梦想吧！！！','C#Unity--2D迷宫','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 17:53:54','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('5d262962-7eda-3abd-853a-3a0ff53f8683',0,'\r\n* [Stateless](https://github.com/dotnet-state-machine/stateless) - 直接在.NET代码中创建状态机和轻量级的基于状态机的工作流\r\n* [Automatonymous](https://github.com/MassTransit/Automatonymous) - 用于.NET的状态机库 - 允许您编写流畅风格的状态机\r\n* [LiquidState](https://github.com/prasannavl/LiquidState) -  用于.NET的高效异步和同步状态机','状态机','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,93),('5d2fd0cc-354b-6457-9390-3a0ff53f8680',0,'- [Appccelerate - Command Line Parser](https://appccelerate.github.io/commandlineparser.html)  - 具有流畅定义语法、不同参数类型、必需和可选参数、值限制、别名、类型转换和半自动使用帮助消息组合的命令行解析器。 \r\n- [Argu](https://github.com/fsprojects/Argu)  - 用于F#应用程序的声明性CLI参数和XML配置解析器。 \r\n- [CliFx](https://github.com/Tyrrrz/CliFx)  - 用于构建命令行界面的声明性框架。 \r\n- [Typin](https://github.com/adambajguz/Typin)  - 用于交互式CLI应用程序和命令行工具（直接模式）的简单易用的声明性框架，其根源来自CliFx。 \r\n- [clipr](https://github.com/nemec/clipr)  - 受Python的argparse启发的CLI库，可将命令行转换为强类型对象。它支持自定义参数类型、自动（和本地化）帮助生成以及各种存储解析参数的方式。 \r\n- [CliWrap](https://github.com/Tyrrrz/CliWrap)  - 用于命令行界面的包装器。 \r\n- [Colorful.Console](https://github.com/tomakita/Colorful.Console)  - 彩色控制台输出。 \r\n- [CommandDotNet](https://github.com/bilal-fazlani/commanddotnet)  - 使用C#以可组合的方式对控制台应用程序进行建模。使用方法定义命令。使用属性或嵌套类定义子命令。可扩展的解析和命令执行。 \r\n- [Command Line Parser](https://github.com/commandlineparser/commandline)  - 命令行解析库为CLR应用程序提供了操作命令行参数和相关任务的清晰简洁的API。 \r\n- [CommandLineUtils](https://github.com/natemcmaster/CommandLineUtils)  - 这是Microsoft.Extensions.CommandLineUtils的分支，不再进行积极开发。 \r\n- [CsConsoleFormat](https://github.com/Athari/CsConsoleFormat)  - 用于高级格式化控制台输出的.NET C#库。 \r\n- [Docopt](https://github.com/docopt/docopt.net)  - 命令行界面描述语言，将让您欣然接受。 \r\n- [EntryPoint](https://github.com/Nick-Lucas/EntryPoint)  - 用于.NET Core和.NET Framework 4.5+的可组合CLI参数解析器。 \r\n- [Fluent Command Line Parser](https://github.com/fclp/fluent-command-line-parser)  - 使用流畅易用的界面的简单、强类型的.NET C#命令行解析器库。 \r\n- [JustCli](https://github.com/jden123/JustCli)  - 这只是一个快速创建自己的命令行工具的快速方法。 \r\n- [Gui.cs](https://github.com/migueldeicaza/gui.cs)  - 用于.NET的终端用户界面工具包。 \r\n- [Power Args](https://github.com/adamabdelhamed/PowerArgs)  - PowerArgs将命令行参数转换为易于编程的.NET对象。它还提供了许多可选功能，如参数验证、自动生成的用法、制表符完成和丰富的可扩展性。 \r\n- [ReadLine](https://github.com/tonerdo/readline)  - 用于.NET/.NET Core的类似GNU-Readline的库。 \r\n- [RunInfoBuilder](https://github.com/rushfive/RunInfoBuilder)  - 一种独特的命令行解析器，利用对象树来定义命令。 \r\n- [SharpNetSH](https://github.com/rpetz/SharpNetSH)  - 用于C#的简单netsh库。 \r\n- [spectre.console](https://github.com/spectresystems/spectre.console)  - 一个使创建漂亮的控制台应用程序更容易的库。','CLI','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,20),('5eab4655-8cbb-fde2-612f-3a0ff53f8681',0,'\r\n- [ImageWizard](https://github.com/usercode/ImageWizard)  - 基于ASP.NET Core和ImageSharp / SkiaSharp / SvgNet / DocNET的图像处理Web服务。 \r\n- [ImageResizer](https://imageresizing.net/)  - 在图像URL中添加命令，以在毫秒内获得修改后的版本。实时调整、编辑等图像。 \r\n- [ImageProcessor](https://github.com/JimBobSquarePants/ImageProcessor)  - 用于实时操作图像的开源.NET库。 \r\n- [ImageSharp](https://github.com/SixLabors/ImageSharp)  - 用于处理图像文件的跨平台完全托管的库。 \r\n- [MagicScaler](https://github.com/saucecontrol/PhotoSauce)  - 面向.NET的高性能图像处理管道，专注于使复杂的图像任务变得简单。 \r\n- [DynamicImage](https://dynamicimage.apphb.com/)  - 用于ASP.NET的高性能开源图像处理库。 \r\n- [MetadataExtractor](https://github.com/drewnoakes/metadata-extractor-dotnet)  - 从图像文件中提取Exif、IPTC、XMP、ICC和其他元数据。 \r\n- [Emgu CV](http://www.emgu.com/wiki/index.php/Main_Page)  - 用于OpenCV库的.NET Framework跨平台包装器。 \r\n- [SimpleITK](https://simpleitk.org/)  - Insight的简化路径。用于生物医学科学和其他领域的Python、R、Java、C＃、Lua、Ruby、TCL和C++的开源多维图像分析。 \r\n- [DotImaging](https://github.com/dajuric/dot-imaging)  - 极简的.NET图像可移植平台。 \r\n- [Magick.NET](https://github.com/dlemstra/Magick.NET)  - ImageMagick库的.NET包装器。 \r\n- [OpenCvSharp](https://github.com/shimat/opencvsharp/)  - 用于.NET Framework的OpenCV的跨平台包装器。 \r\n- [PixelViewer](https://github.com/carina-studio/PixelViewer)  - 跨平台（Windows/macOS/Linux）图像查看器，支持从文件读取原始亮度/YUV/RGB/ARGB/Bayer像素数据并渲染它。还支持10/16位YUV和查看图像帧序列（v1.99+）。 \r\n- [TeximpNet](https://bitbucket.org/Starnick/teximpnet)  - 用于读取/操作/写入图像文件的跨平台.NET Standard库。主要关注创建用于图形/游戏应用程序的2D/3D/Cubemap纹理，特别是将图像转换为GPU压缩格式并生成mipmap。该库包装了FreeImage本机库以导入/导出30多种常见图像格式，并包装了Nvidia Texture Tools本机库以获取GPU压缩功能。还具有用C#编写的完整的DDS格式导入器/导出器。 \r\n- [Colourful](https://github.com/tompazourek/Colourful)  - 用于处理颜色空间的开源.NET库。 \r\n- [Imgix-CSharp](https://docs.imgix.com/libraries/imgix-csharp)  - 轻松更新图像URL以实现快速响应。**[$]**\r\n* [GLFWDotNet](https://github.com/smack0007/GLFWDotNet) -  GLFW的.NET绑定。\r\n* [LibVLCSharp](https://github.com/videolan/libvlcsharp) - LibVLCSharp是基于VideoLAN的LibVLC库的.NET平台的跨平台音频和视频API。\r\n* [QRCoder](https://github.com/codebude/QRCoder) - 二维码实现库\r\n* [SharpBgfx](https://github.com/MikePopoloski/SharpBgfx) -  bgfx图形库的C#绑定。\r\n* [Structure.Sketching](https://github.com/JaCraig/Structure.Sketching) - 用于支持.NET Core的.NET应用程序的图像处理库。\r\n* [veldrid](https://github.com/mellinoe/veldrid) - 一个用于.NET的低级硬件加速3D图形库。\r\n* [ZXing.Net](https://github.com/micjahn/ZXing.Net/) 二维码、条形码的生成和读取\r\n### 颜色处理 \r\n- [ColorHelper](https://github.com/iamartyom/ColorHelper)  - 用于处理颜色的实用方法。\r\n','图片处理','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,55),('5f8b348b-7196-e2e5-e179-3a0fe9b5b449',0,'涉及文本处理时，正则表达式是一种非常强大的工具。在C#中，您可以使用 System.Text.RegularExpressions 命名空间中的类来实现正则表达式。\r\n## 什么是正则表达式？\r\n\r\n正则表达式是一种基于文本模式匹配的工具。它们允许您在文本中查找和操作特定的字符串，而不是在字符串中遍历每个字符来查找需要的信息。正则表达式由一系列字符和元字符组成，用于定义要查找的模式。\r\n## 正则表达式语法\r\n\r\nC#中的正则表达式使用与其他语言类似的语法。下面是一些常见的元字符： \r\n\r\n- `.` 匹配任意单个字符（除了换行符）。 \r\n- `*` 匹配0个或多个相同字符。 \r\n- `+` 匹配1个或多个相同字符。 \r\n- `?` 匹配0个或1个相同字符。 \r\n- `^` 匹配行首。 \r\n- `$` 匹配行尾。 \r\n- `[]` 匹配方括号内的任意一个字符。 \r\n- `()` 将其中的内容分组。 \r\n- `|` 匹配两个或多个表达式中的任意一个。 \r\n- `\\` 转义字符。\r\n\r\n下面是一个使用这些元字符的示例：\r\n\r\n```csharp\r\n\r\n// 匹配任意以 \"hello\" 开头，以数字结尾的字符串\r\nstring pattern = \"^hello.*[0-9]$\";\r\n```\r\n\r\n\r\n\r\n在这个例子中，`^` 表示该模式必须从行首开始，`.*` 表示可以匹配任意数量的任意字符，`[0-9]` 表示可以匹配任意数字，`$` 表示该模式必须以行尾结尾。\r\n## C#中的正则表达式\r\n\r\n在C#中，您可以使用 System.Text.RegularExpressions 命名空间中的类来实现正则表达式。下面是一个基本的示例：\r\n\r\n```csharp\r\n\r\nusing System;\r\nusing System.Text.RegularExpressions;\r\n\r\nclass Program\r\n{\r\n    static void Main()\r\n    {\r\n        // 定义要匹配的字符串\r\n        string input = \"hello world\";\r\n\r\n        // 定义要查找的模式\r\n        string pattern = \"world\";\r\n\r\n        // 创建一个正则表达式对象\r\n        Regex regex = new Regex(pattern);\r\n\r\n        // 在输入字符串中查找匹配项\r\n        Match match = regex.Match(input);\r\n\r\n        // 输出匹配项\r\n        Console.WriteLine(\"Match: {0}\", match.Value);\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在这个例子中，我们使用了 Regex 类来创建一个正则表达式对象，然后使用 Match 方法在输入字符串中查找匹配项。\r\n## 正则表达式替换\r\n\r\n除了查找匹配项，您还可以使用正则表达式来替换字符串中的内容。下面是一个示例：\r\n\r\n```csharp\r\n\r\nusing System;\r\nusing System.Text.RegularExpressions;\r\n\r\nclass Program\r\n{\r\n    static void Main()\r\n    {\r\n        // 定义要匹配的字符串\r\n        string input = \"645928634267898\";\r\n        // 定义要查找的模式\r\n        string pattern = @\"\\d+\";\r\n\r\n        // 定义替换的字符串\r\n        string replacement = \"42\";\r\n\r\n        // 创建一个正则表达式对象\r\n        Regex regex = new Regex(pattern);\r\n\r\n        // 在输入字符串中替换匹配项\r\n        string result = regex.Replace(input, replacement);\r\n\r\n        // 输出结果\r\n        Console.WriteLine(\"Result: {0}\", result);\r\n    }\r\n}\r\n```\r\n\r\n在这个例子中，我们使用了 Replace 方法来替换输入字符串中的所有数字（`\\d+`）为字符串 `\"42\"`。\r\n\r\n## 正则表达式选项\r\n\r\n您还可以使用选项来控制正则表达式的匹配方式。下面是一些常见的选项：\r\n\r\n- `IgnoreCase` 忽略大小写。\r\n- `Multiline` 多行模式。\r\n- `Singleline` 单行模式。\r\n- `ExplicitCapture` 禁止自动捕获。\r\n- `Compiled` 编译正则表达式以提高性能。\r\n\r\n下面是一个示例，使用 `IgnoreCase` 选项来匹配任意大小写的单词 `\"hello\"`：\r\n\r\n```csharp\r\nusing System;\r\nusing System.Text.RegularExpressions;\r\n\r\nclass Program\r\n{\r\n    static void Main()\r\n    {\r\n        // 定义要匹配的字符串\r\n        string input = \"Hello world\";\r\n        // 定义要查找的模式\r\n        string pattern = \"hello\";\r\n\r\n        // 创建一个正则表达式对象，并设置选项\r\n        Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);\r\n\r\n        // 在输入字符串中查找匹配项\r\n        Match match = regex.Match(input);\r\n\r\n        // 输出匹配项\r\n        Console.WriteLine(\"Match: {0}\", match.Value);\r\n    }\r\n}\r\n```\r\n\r\n在这个例子中，我们使用了 RegexOptions.IgnoreCase 选项来忽略大小写。\r\n\r\n## 结论\r\n\r\n正则表达式是一种非常强大的工具，可以用于查找和替换文本中的特定字符串。在C#中，您可以使用 System.Text.RegularExpressions 命名空间中的类来实现正则表达式。使用正则表达式需要一些练习，但一旦您掌握了它，您就可以使用它来处理各种文本操作。\r\n```\r\n','C# 正则表达式','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,26),('5fab87fd-6160-d220-b44d-3a0fe75e4a6d',1,'title: C# 环境\r\narticle: false\r\ndate: 2023-04-15 12:10:08\r\npermalink: /pages/02eb36/\r\n---\r\n\r\n## 简介\r\n\r\n要开始使用 C# 进行开发，需要先搭建好开发环境。本文将介绍如何在 Windows 系统下安装并配置 C# 开发环境。\r\n\r\n## 安装 .NET SDK\r\n\r\n首先需要安装 .NET SDK，它是一个开发工具包，包括了用于开发 C# 应用程序所需的运行时、库和工具。 \r\n\r\n1. 前往 [.NET 官网](https://dotnet.microsoft.com/download/dotnet)  下载最新的 .NET SDK 安装程序。 \r\n2. 双击安装程序，按照提示进行安装。在安装过程中需要注意选择安装路径和安装的版本，可以选择安装多个版本的 .NET SDK。 \r\n3. 安装完成后，打开命令提示符或 PowerShell 窗口，输入以下命令来验证是否安装成功：\r\n\r\n```bash\r\ndotnet --version\r\n```\r\n\r\n如果能够输出正确的版本号，则说明安装成功。\r\n## 安装开发环境\r\n\r\nC# 开发可以使用多种开发环境，包括 Visual Studio、Visual Studio Code、Rider 等等。其中，Visual Studio 是最为常用的 C# 开发环境之一。\r\n### 安装 Visual Studio \r\n1. 前往 [Visual Studio 官网](https://visualstudio.microsoft.com/vs/)  下载 Visual Studio 安装程序。 \r\n2. 双击安装程序，按照提示进行安装。在安装过程中需要注意选择安装的组件，可以根据自己的需要进行选择。\r\n### 安装 Visual Studio Code \r\n1. 前往 [Visual Studio Code 官网](https://code.visualstudio.com/)  下载 Visual Studio Code 安装程序。 \r\n2. 双击安装程序，按照提示进行安装。在安装过程中需要注意选择安装的组件，可以根据自己的需要进行选择。\r\n## 配置开发环境\r\n\r\n无论使用哪种开发环境，都需要配置 C# 扩展和编译器。\r\n### 配置 Visual Studio \r\n1. 打开 Visual Studio，点击 \"文件\" -> \"新建\" -> \"项目\"。 \r\n2. 在弹出的对话框中，选择 \"C#\" -> \"控制台应用程序\"，然后选择项目名称和存储位置，最后点击 \"创建\"。 \r\n3. 在项目中添加新的 C# 文件，然后在其中编写代码。 \r\n4. 点击 \"生成\" -> \"生成解决方案\"，将代码编译成可执行文件。\r\n### 配置 Visual Studio Code \r\n1. 打开 Visual Studio Code，安装 \"C#\" 扩展。 \r\n2. 打开项目文件夹，然后在其中添加新的 C# 文件，然后在其中编写代码。 \r\n3. 打开终端窗口，输入以下命令来编译代码：\r\n\r\n```bash\r\ndotnet build\r\n```\r\n\r\n\r\n\r\n如果编译成功，则会在项目文件夹中生成可执行文件。\r\n## 示例代码\r\n\r\n下面是一个\r\n\r\n- 使用 Visual Studio Code 编写的 \"Hello, World!\" 程序的示例代码：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        Console.WriteLine(\"Hello, World!\");\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在 Visual Studio Code 中保存文件后，可以在终端窗口中输入以下命令来运行程序：\r\n\r\n```bash\r\n\r\ndotnet run\r\n```\r\n\r\n\r\n\r\n程序会在终端窗口中输出 \"Hello, World!\" 字符串。\r\n\r\n至此，你已经成功搭建了 C# 的开发环境，并编写了第一个 C# 程序。','C# 环境','67bbbd51-8f39-6bc3-46fe-3a0fa9fe8385','00000000-0000-0000-0000-000000000000','2024-01-04 23:57:17','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','2024-01-04 23:57:29',0),('63f41eab-e3e8-f326-f234-3a0ff53f8682',0,'\r\n- [C# StatsD 客户端](https://github.com/Pereingo/statsd-csharp-client)  - 用于Etsy的StatsD的C#客户端。 \r\n- [Foundatio](https://github.com/FoundatioFx/Foundatio#metrics)  - 具有内存、Redis、StatsD 和 Metrics.NET 实现的通用接口。','指标','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,68),('64dae1b0-2176-8f65-e613-3a0ff53f8682',0,'\r\n- [NuGet](https://www.nuget.org/)  - .NET的包管理器。 \r\n- [BaGet](https://github.com/loic-sharma/BaGet/)  - 一个跨平台、轻量级的NuGet和Symbol服务器。 \r\n- [Cloudsmith](https://cloudsmith.com/nuget-feed/)  - 一个完全托管的包管理SaaS，支持NuGet、Npm、Docker等等。 **[对公共/OSS项目免费]**  **[需要付费]** \r\n- [MyGet](https://www.myget.org/)  - 托管的NuGet、NPM、Bower和VSIX包存储库。还提供CI即服务。 **[需要付费]** \r\n- [Paket](https://github.com/fsprojects/Paket)  - 用于.NET的包依赖管理器，支持NuGet包和GitHub存储库。 [https://fsprojects.github.io/Paket/](https://fsprojects.github.io/Paket/) \r\n- [Sleet](https://github.com/emgarten/sleet/)  - 具有对AWS S3和Azure Storage的支持的NuGet v3静态Feed生成器。','包管理器','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,77),('66404b12-48fb-558a-d57b-3a0ff53f8683',0,'\r\n* [Twilio-csharp](https://github.com/twilio/twilio-csharp) - 用于通过Twilio发送和接收电话和短信的C#/.NET库。','SMS','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,92),('694dda1f-4b94-213f-55be-3a0ff53f8682',0,'\r\n- [ClearScript](https://github.com/Microsoft/ClearScript)  - 一个使将脚本添加到您的.NET应用程序变得容易的库。它目前支持JavaScript（通过V8和JScript）和VBScript。 \r\n- [Edge.js](https://github.com/tjanczuk/edge)  - 在Windows、macOS和Linux上在进程内运行.NET和Node.js代码。 \r\n- [Jint](https://github.com/sebastienros/jint)  - 用于.NET的JavaScript解释器，提供完全的ECMA 5.1兼容性，可以在任何.NET平台上运行。 \r\n- [Jurassic](https://github.com/paulbartrum/jurassic)  - ECMAScript语言和运行时的实现。它旨在为.NET提供性能最佳且最符合标准的JavaScript实现。 \r\n- [YantraJS](https://github.com/yantrajs/yantra)  - 用于.NET Standard的JavaScript运行时（类似于NodeJS），将JavaScript编译为IL，支持许多ES6特性、生成器、CommonJS模块、CSX模块和表达式编译器。\r\n','JS引擎','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,61),('6be5f490-32c6-9148-190a-3a0fe9b5b449',0,'继承是面向对象编程中的一个重要概念，它允许一个类（称为子类或派生类）继承另一个类（称为父类或基类）的属性和方法。在 C# 中，使用 `:` 符号来实现继承。\r\n## 基本语法\r\n\r\n下面是 C# 继承的基本语法：\r\n\r\n```csharp\r\n\r\nclass ChildClass : ParentClass\r\n{\r\n    // 子类的成员\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的代码中，`ChildClass` 继承自 `ParentClass`。子类可以访问父类中的公共和受保护的成员，但不能访问私有成员。\r\n## 示例代码\r\n\r\n下面是一个简单的示例代码，演示了如何使用继承来创建一个基本的图形类：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nclass Shape\r\n{\r\n    protected int width;\r\n    protected int height;\r\n\r\n    public void SetWidth(int w)\r\n    {\r\n        width = w;\r\n    }\r\n\r\n    public void SetHeight(int h)\r\n    {\r\n        height = h;\r\n    }\r\n}\r\n\r\nclass Rectangle : Shape\r\n{\r\n    public int GetArea()\r\n    {\r\n        return (width * height);\r\n    }\r\n}\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        Rectangle rect = new Rectangle();\r\n\r\n        rect.SetWidth(5);\r\n        rect.SetHeight(7);\r\n\r\n        // 输出矩形的面积\r\n        Console.WriteLine(\"矩形的面积：{0}\", rect.GetArea());\r\n        Console.ReadKey();\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的代码中，`Rectangle` 类继承自 `Shape` 类。`Shape` 类中定义了 `width` 和 `height` 两个受保护的成员变量以及 `SetWidth` 和 `SetHeight` 两个公共的方法，用于设置宽度和高度。`Rectangle` 类中定义了 `GetArea` 方法，用于计算矩形的面积。在 `Main` 方法中，我们创建了一个 `Rectangle` 对象，设置其宽度和高度，并输出矩形的面积。\r\n## 继承关系的访问修饰符\r\n\r\nC# 中有三种访问修饰符用于控制继承关系中成员的访问权限： \r\n- `public`：可以在任何地方访问。 \r\n- `protected`：可以在派生类中访问，但不能在其他地方访问。 \r\n- `private`：只能在当前类中访问。\r\n\r\n下面是一个示例代码，演示了不同访问修饰符在继承关系中的应用：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nclass BaseClass\r\n{\r\n    public int publicVar = 1;\r\n    protected int protectedVar = 2;\r\n    private int privateVar = 3;\r\n}\r\n\r\nclass DerivedClass : BaseClass\r\n{\r\n    public void PrintVars()\r\n    {\r\n        Console.WriteLine(\"publicVar = {0}\", publicVar);\r\n        Console.WriteLine(\"protectedVar = {0}\", protectedVar); // 可以访问父类的受保护成员\r\n        // Console.WriteLine\r\n```\r\n\r\n在上面的代码中，`BaseClass` 类中定义了三个成员变量，分别使用了 `public`、`protected` 和 `private` 访问修饰符。`DerivedClass` 类继承自 `BaseClass` 类，并在其中定义了 `PrintVars` 方法，用于输出不同访问修饰符的成员变量。可以看到，公共成员变量可以在任何地方访问，受保护成员变量可以在派生类中访问，但不能在其他地方访问，私有成员变量只能在当前类中访问。\r\n## 多重继承\r\n\r\nC# 不支持多重继承，即一个类不能同时继承多个类。但是，可以通过接口来实现多重继承的效果。接口是一种只包含抽象成员的类型，它定义了一组行为，由实现该接口的类来提供具体的实现。\r\n\r\n下面是一个示例代码，演示了如何使用接口来实现多重继承的效果：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\ninterface I1\r\n{\r\n    void Method1();\r\n}\r\n\r\ninterface I2\r\n{\r\n    void Method2();\r\n}\r\n\r\nclass MyClass : I1, I2\r\n{\r\n    public void Method1()\r\n    {\r\n        Console.WriteLine(\"实现 I1 中的 Method1 方法\");\r\n    }\r\n\r\n    public void Method2()\r\n    {\r\n        Console.WriteLine(\"实现 I2 中的 Method2 方法\");\r\n    }\r\n}\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        MyClass obj = new MyClass();\r\n        obj.Method1();\r\n        obj.Method2();\r\n        Console.ReadKey();\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的代码中，`MyClass` 类实现了 `I1` 和 `I2` 两个接口，并分别实现了这两个接口中的方法。在 `Main` 方法中，我们创建了一个 `MyClass` 对象，并调用了其中的两个方法。可以看到，使用接口来实现多重继承的效果。\r\n\r\n## 抽象类和虚方法\r\n\r\n在 C# 中，可以使用抽象类和虚方法来实现多态性。抽象类是一种不能实例化的类，它的主要作用是作为其他类的基类，其中可以定义抽象方法、虚方法、属性等。抽象方法是一种没有具体实现的方法，由继承它的子类来提供具体实现。\r\n\r\n下面是一个示例代码，演示了如何使用抽象类和抽象方法来实现多态性：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nabstract class Shape\r\n{\r\n    public abstract void Draw(); // 抽象方法\r\n}\r\n\r\nclass Circle : Shape\r\n{\r\n    public override void Draw() // 重写抽象方法\r\n    {\r\n        Console.WriteLine(\"画一个圆形\");\r\n    }\r\n}\r\n\r\nclass Rectangle : Shape\r\n{\r\n    public override void Draw() // 重写抽象方法\r\n    {\r\n        Console.WriteLine(\"画一个矩形\");\r\n    }\r\n}\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        Shape[] shapes = new Shape[2];\r\n        shapes[0] = new Circle();\r\n        shapes[1] = new Rectangle();\r\n\r\n        foreach (Shape shape in shapes)\r\n        {\r\n            shape.Draw(); // 多态调用\r\n        }\r\n\r\n        Console.ReadKey();\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的代码中，`Shape` 类是一个抽象类，其中定义了一个抽象方法 `Draw`。`Circle` 类和 `Rectangle` 类分别继承自 `Shape` 类，并重写了 `Draw` 方法。在 `Main` 方法中，我们创建了一个 `Shape` 类型的数组，并分别将 `Circle` 类和 `Rectangle` 类的对象赋值给其中的元素。然后，我们使用 `foreach` 循环遍历数组，并多态调用其中的 `Draw` 方法。可以看到，多态性使得我们可以在运行时根据对象的实际类型来调用相应的方法。\r\n\r\n另一种实现多态性的方法是使用虚方法。虚方法是一种带有默认实现的方法，可以在子类中被重写。在 C# 中，可以使用 `virtual` 关键字来定义虚方法。\r\n\r\n下面是一个示例代码，演示了如何使用虚方法来实现多态性：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nclass Shape\r\n{\r\n    public virtual void Draw() // 虚方法\r\n    {\r\n        Console.WriteLine(\"画一个形状\");\r\n    }\r\n}\r\n\r\nclass Circle : Shape\r\n{\r\n    public override void Draw() // 重写虚方法\r\n    {\r\n        Console.WriteLine(\"画一个圆形\");\r\n    }\r\n}\r\n\r\nclass Rectangle : Shape\r\n{\r\n    public override void Draw() // 重写虚方法\r\n    {\r\n        Console.WriteLine(\"画一个矩形\");\r\n    }\r\n}\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        Shape[] shapes = new Shape[2];\r\n        shapes[0] = new Circle();\r\n        shapes[1] = new Rectangle();\r\n\r\n        foreach (Shape shape in shapes)\r\n        {\r\n            shape.Draw(); // 多态调用\r\n        }\r\n\r\n        Console.ReadKey();\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的代码中，`Shape` 类中定义了一个虚方法 `Draw`。`Circle` 类和 `Rectangle` 类分别继承自 `Shape` 类，并重写了 `Draw` 方法。在 `Main` 方法中，我们创建了一个 `Shape` 类型的数组，并分别将 `Circle` 类和 `Rectangle` 类的对象赋值给其中的元素。然后，我们使用 `foreach` 循环遍历数组，并多态调用其中的 `Draw` 方法。可以看到，虚方法也可以实现多态性，它使得子类可以重写父类中的方法，并根据需要进行自定义。\r\n## 总结\r\n\r\n继承是面向对象编程中的一个重要概念，它允许一个类继承另一个类的属性和方法。在 C# 中，使用 `:` 符号来实现继承。可以使用抽象类和抽象方法、虚方法以及接口来实现多态性。抽象类和抽象方法用于定义一组行为，由继承它的子类来提供具体实现；虚方法是一种带有默认实现的方法，可以在子类中被重写；接口是一种只包含抽象成员的类型，它定义了一组行为，由实现该接口的类来提供具体的实现。\r\n','C# 继承','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,20),('6c7a0d71-7d4e-abc0-4e77-3a0ff53ad54a',0,'\r\n**1、JIT是如何工作的**\r\n\r\n答：JIT 引擎在编译中间代码之前，会寻找方法的本机机器代码缓存并且判断其是否可用，如果可用则直接加载，如果不可用，JIT 引擎会查找类型中的方法存根，找到该中间代码并且进行编译。\r\n\r\n**2、值类型和引用类型的区别**\r\n\r\n答：所有继承自System.ValueType 的类型是值类型，而其他类型都是引用类型。值类型的赋值会产生一个新的数据副本，所以每个值类型都拥有一个数据副本，而引用类型的赋值则是赋值引用。值类型的对象分配在堆栈上，而引用类型的对象分配在堆上。当比较两个值类型时，进行的是内容比较，而比较两个引用类型时，进行的是引用比较。\r\n\r\n**3、解释泛型的基本原理**\r\n\r\n答：泛型类似C++中的模板，允许程序员定义更通用的类型和算法，并且在具体使用时再生成具体的封闭类型。所有带泛型参数的类型都是一个开放式类型，它不能被实例化，但具备所有封闭类型的其他特性，本质上，它和封闭类型没有区别。\r\n\r\n**4、如何自定义序列化和反序列化的过程**\r\n\r\n答：通过实现 ISerializable 接口中的 GetObjectData 方法可以实现自定义的序列化，而通过添加带有SerializationInfo 和StreamingContext的参数的构造方法可以自定义反序列化的过程。\r\n\r\n**5、如何使用 IFormattable 接口实现格式化输出**\r\n\r\n答：IFormattable接口帮助类型实现了多样式的格式化输出。IFormattable 的ToString方法接受一个代表格式的字符串参数，通过对这个参数的分析来进行格式化输出。另外，IFormattable.ToString方法接受一个IFormatProvider类型的参数，以允许类型的使用者提供格式化的方法。\r\n\r\n**6、请解释委托的基本原理** \r\n\r\n答：委托是一类继承自System.Delegate 的类型，每个委托对象至少包含了一个指向某个方法的指针，该方法可以是实例方法，也可以是静态方法。委托实现了回调方法的机制，能够帮助程序员设计更加简洁优美的面向对象程序。\r\n\r\n**7、什么是链式委托**\r\n\r\n答：链式委托是指一个由委托串成的链表，当链表上的一个委托被回调时，所有链表上该委托的后续委托将会被顺序执行。\r\n\r\n**8、请解释反射的基本原理和其实现的基石**\r\n\r\n答：反射是一种动态分析程序集、模块、类型、字段等目标对象的机制，它的实现依托于元数据。元数据是存储在PE 文件中的数据块，它详细记录了程序集或模块内部的结构、引用的类型和程序集和清单\r\n\r\n**9、如何利用反射来实现工厂模式**\r\n\r\n答：使用反射可以实现灵活性较高的工厂模式，其关键在于动态地查找产品所包含的所有零件，而不需要通过代码来逐一分析使用者的需求。反射工厂模式具有灵活性高，运行效率相对较低的特点。\r\n\r\n**10、如何以较小的内存代价保存 Type、Field 和 Method 信息**\r\n\r\n答：System.RuntimeTypeHandle、System.RuntimeMethodHandle 和 System.RuntimeFieldHandle 三个类型，分别包含了一个指向类型、方法和字段描述的指针，用保存指针的方式来代替保存整个类型、方法和字段的信息描述对象，可以有效地减少内存的消耗。而在实际需要用到这些信息时，又可以通过这三个句柄类型对象，分别得到System.Type、System.Reflection.MethodInfo 和System.Reflection.FieldInfo 类型对象。\r\n\r\n**11、如何防止 SQL注入式攻击**\r\n\r\n答：SQL 注入式攻击时常见的一种攻击方法，主要利用的是系统设计的弊端。程序员在设计时需要考虑到注入式攻击的问题，避免直接使用用户输入拼接 SQL 语句，适当使用加密数据进行存储，并且在合适的场合使用存储过程。\r\n\r\n**12、请简要叙述数据库连接池的机制**\r\n\r\n答：ADO.NET 对上层用户提供了数据库连接池的服务，使用完的数据库连接将被有选择的保持在数据库连接池中，以供下次使用。当用户以某个连接字符串申请数据库连接时，数据库连接池将尝试寻找在池中寻找具有相同的连接字符串的连接，并直接提供给用户。\r\n\r\n**13、如何提高连接池内连接的重用率** \r\n\r\n答：为了提高数据库连接池的重用率，唯一的方法就是尽量保证系统访问数据库所使用的连接字符串不变。例如建立跳板数据库，使所有连接都首先尝试访问跳板数据库。另外，统一使用超级用户帐号可以进一步统一连接字符串，但这为系统带来了安全上的隐患。\r\n\r\n**14、哈希表和数组列表有什么区别？**\r\n\r\n答：哈希表以值对和名称的形式存储数据, 而数组列表仅存储值。\r\n\r\n你需要将名称传递给哈希表中的值, 而在数组中, 则需要传递索引号来访问值。\r\n\r\n在数组中, 你只能存储类似类型的数据类型, 而在哈希表中, 你可以存储不同类型的数据类型。例如整数, 字符串等\r\n\r\n**15、什么是内存映射文件？**\r\n\r\n答：内存映射文件用于将文件内容映射到应用程序的逻辑地址。它使你能够在同一台计算机上运行多个进程以彼此共享数据。要获得一个内存映射文件对象, 可以使用MemoryMappedFile.CreateFromFiles()方法。它表示磁盘上文件中的持久性内存映射文件。\r\n\r\n**16、使用哪种方法在.NET中实施垃圾收集？**\r\n\r\nSystem.GC.Collect()方法。\r\n\r\n**17、.Net中有哪些不同类型的索引？**\r\n\r\n答：.Net中有两种类型的索引：\r\n\r\n聚集索引和非聚集索引\r\n\r\n**18、.Net中有几种类型的内存？**\r\n\r\n答：.Net中有两种类型的内存\r\n\r\n- 堆栈内存\r\n- 堆内存\r\n\r\n**19、元组可以容纳多少个元素？**\r\n\r\n答：一个元组可以容纳1到8个元素。如果元素多于8个, 则可以将第8个元素定义为另一个元组。元组可以指定为参数或方法的返回类型。','Net面试题','f6462b48-9601-0253-6450-3a0ff538dfa4','00000000-0000-0000-0000-000000000000','2024-01-07 16:33:14','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,2),('6cd9bf40-ebab-eac0-7879-3a0f8386e1fa',0,'本项目为前后端分离项目，后端需要.Net8环境启动，前端需Node.js环境启动\n\n推荐下载开发工具：\n\n- Visual Studio 2022\n- Visual Studio Core\n\n\n## 后端\nvs选中启动项目Yi.Abp.Web模板项目  \n![web.png](/prod-api/file/ac0cfcbc-d396-d018-e1e4-3a0f83a65dcd/true)\n\n直接启动即可，无任何其他环境依赖，数据库默认采用`Sqlsite`，缓存默认采用`本地缓存`\n\n启动后，浏览器将会弹出项目接口地址swagger：\n\n![swagger.png](/prod-api/file/858c073a-1500-e367-7d98-3a0f83a6ab73/true)\n\n> 纳尼？怎么就看到一个测试接口？莫急，由于模块化方式，接口会越来越多，已自动分组至右上角，请点击分组\n\n恭喜你，已经成功运行后端，是不是很简单？\n\n> 等等？表结构呢？表数据呢？为什么没有sql文件？在这里，统统不需要，配置文件默认开启CodeFirst可自动建库及表结构，默认开启DataSeed种子数据，自动创建初始化数据\n\n默认种子数据超级管理员账号：cc  /  123456\n\n## 前端\n对于前端，默认提供两个项目，分别对应后端的BBS与RBAC\n\n- BBS -> Yi.BBS.Vue3\n- RBAC -> Yi.RuoYi.Vue3\n\n可根据需要选择进行启动\n\n1:还原依赖\n\n> npm install\n\n2:启动项目\n\n> npm run dev\n\n\n## 配置启动地址：\n前端：\n![feStart.png](/prod-api/file/484b2079-2bf8-f804-7439-3a0f83a6f264/true)\n后端：\n![start.png](/prod-api/file/aa00f562-378a-5dbc-67d6-3a0f83a71042/true)','如何启动','aaa00329-7f35-d3fe-d258-3a0f8380b742','00000000-0000-0000-0000-000000000000','2023-12-16 14:39:35','59cf7e31-e3e4-544e-1038-3a0f836cc538','59cf7e31-e3e4-544e-1038-3a0f836cc538','2023-12-16 15:14:47',0),('6d1cfd55-9440-6304-bacf-3a0ff53f8680',0,'- [Composite C1](https://github.com/Orckestra/C1-CMS-Foundation)  - 一个关注用户体验和可适应性的Web CMS。 \r\n- [mojoPortal ](https://github.com/i7media/mojoportal) - MojoPortal是一个可扩展的、跨数据库、移动友好的Web内容管理系统（CMS）和基于C# ASP.NET的Web应用程序框架。 \r\n- [N2CMS](https://github.com/n2cms/n2cms)  - 开源、轻量级、代码优先的CMS，能够无缝集成到任何MVC项目中。 \r\n- [Orchard ](https://github.com/OrchardCMS/Orchard) - 自由、开源、面向社区的项目，旨在在ASP.NET平台上交付应用程序和可重用组件。 \r\n- [Piranha CMS](https://github.com/PiranhaCMS/Piranha)  - Piranha是用于开发基于CMS的Web应用程序的有趣、快速和轻量级.NET框架。它构建在ASP.NET MVC和Web Pages上，完全与Visual Studio和WebMatrix兼容。[https://piranhacms.org](https://piranhacms.org/) \r\n- [Umbraco](https://github.com/umbraco/Umbraco-CMS)  - Umbraco是基于ASP.NET平台的免费开源内容管理系统。 \r\n- [DotNetNuke](https://www.dnnsoftware.com/community/download)  - DNN平台是我们的免费开源Web CMS，是每个专业DNN解决方案的基础。全球有超过75万组织构建了由DNN平台支持的网站。 \r\n- [BlogEngine.NET](https://github.com/rxtur/BlogEngine.NET)  - 简单但功能齐全的ASP.NET博客系统。 \r\n- [Squidex](https://github.com/Squidex/squidex)  - 开源无头CMS和内容管理中心。[https://squidex.io](https://squidex.io/)\r\n* [Awesome-CMS-Core](https://github.com/SaiGonSoftware/Awesome-CMS-Core) - Awesome-CMS-Core是一个使用ASP.Net Core和ReactJS构建的开源CMS，考虑到模块分离问题并提供最新的技术趋势，如.Net Core，React，Webpack，SASS，后台作业，Message Queue。\r\n* [Blogifier.Core](https://github.com/blogifierdotnet/Blogifier.Core) - Blogifier是用ASP.NET Core编写的简单，美观，轻巧的开源博客。\r\n* [Cofoundry](https://github.com/cofoundry-cms/cofoundry) - Cofoundry是一个可扩展且灵活的.NET Core CMS和应用程序框架，专注于代码优先开发。\r\n* [CoreWiki](https://github.com/csharpfritz/CoreWiki) - 一个简单的ASP.NET core wiki。\r\n* [dasblog-core](https://github.com/poppastring/dasblog-core) - DasBlog博客项目。\r\n* [Lynicon](https://github.com/jamesej/lyniconanc) - Lynicon CMS系统。\r\n* [Miniblog](https://github.com/madskristensen/Miniblog.Core) - ASP.NET Core博客引擎。\r\n* [Mixcore CMS](https://github.com/mixcore/mix.core) - 由DotNet Core支持的开源CMS。 Mixcore CMS是一个可扩展的开放平台，用于Web内容管理和数字体验。 Mixcore CMS在网络上提供了强大的功能和无限的灵活性。\r\n* [NetCoreCMS](https://github.com/OnnoRokomSoftware/NetCoreCMS) - NetCoreCMS是使用ASP.Net Core 2.0 MVC开发的模块化主题支持的内容管理系统。\r\n* [Orchard Core CMS](https://github.com/OrchardCMS/OrchardCore) - 在模块化和可扩展的应用程序框架之上使用ASP.NET Core构建的开源内容管理系统。\r\n* [Platformus](https://github.com/Platformus) - 基于ASP.NET Core 1.0和ExtCore框架的免费，开源和跨平台的CMS。\r\n* [SimpleContent](https://github.com/joeaudette/cloudscribe.SimpleContent) - 用于ASP.NET Core的简单而灵活的内容和博客引擎，可以使用或不使用数据库。\r\n* [Swastika I/O Core CMS](https://github.com/Swastika-IO/Swastika-IO-Core) - 基于SIOH框架的ASP.NET Core / Dotnet核心系统（例如CMS，电子商务，论坛，问题解答，CRM ...）\r\n* [Weapsy](https://github.com/Weapsy/Weapsy) - 基于DDD和CQRS的开源ASP.NET核心CMS。它支持开箱即用的MSSQL，MySQL，SQLite和PostgreSQL。\r\n* [Wyam](https://github.com/Wyamio/Wyam) - 模块化静态内容和静态站点生成器。\r\n* [ZKEACMS](https://github.com/SeriaWei/ZKEACMS.Core) - 视觉设计，通过拖放构建网站。','CMS','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,22),('6e5518a2-b364-582d-53fa-3a0ff53f8680',0,'- [BouncyCastle](https://bouncycastle.org/)  - 与.NET System.Security.Cryptography一起，是CLR上的加密算法的参考实现。 \r\n- [HashLib](https://archive.codeplex.com/?p=hashlib)  - HashLib是几乎包含您曾经见过的所有哈希算法的集合，支持几乎所有算法，并且非常易于使用。 \r\n- [libsodium-net](https://github.com/adamcaudill/libsodium-net)  - libsodium的.NET版本 - 一个安全的密码库。 \r\n- [NaCl.Core](https://github.com/daviddesmet/NaCl.Core)  - 一个仅受管理的.NET密码库，提供现代密码学基元。 \r\n- [Paseto.Core](https://github.com/daviddesmet/paseto-dotnet)  - 用于.NET的Paseto（跨平台安全令牌）实现。 \r\n- [Pkcs11Interop](https://github.com/Pkcs11Interop/Pkcs11Interop)  - 用于未受管理的PKCS#11库的托管.NET包装器，用于访问密码硬件。 \r\n- [StreamCryptor](https://github.com/bitbeans/StreamCryptor)  - 使用libsodium和protobuf进行流加密和解密。 \r\n- [SecurityDriven.Inferno](https://github.com/sdrapkin/SecurityDriven.Inferno)  - .NET密码库。经过专业审核。 \r\n- [CryptoNet](https://github.com/maythamfahmi/CryptoNet)  - .NET简单的密码库。原生C#。\r\n* [BCrypt.Net](https://github.com/BcryptNet/bcrypt.net) - BCrypt密码库。\r\n* [BCrypt.NET-Core](https://github.com/neoKushan/BCrypt.Net-Core) - 用于安全存储密码的BCrypt.NET库。\r\n* [multiformats](https://github.com/multiformats/cs-multihash) - 用于编码/解码Multihashes的库，它是一个“容器”，用于描述计算摘要的散列算法。\r\n* [nsec](https://github.com/ektrah/nsec) -  NSec是基于libsodium的.NET Core新加密库。','密码学','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,28),('72682d24-c618-cd0d-8253-3a0ff53f8681',0,'- [Mediator.Net](https://github.com/mayuanyang/Mediator.Net)  - 用于在.NET中发送命令、发布事件和支持管道的请求响应的简单中介者。 \r\n- [MediatR](https://github.com/jbogard/MediatR)  - 在.NET中实现的简单、不雄心勃勃的中介者实现。 \r\n- [Rx Event Aggregator](https://mikebridge.github.io/articles/csharp-domain-event-aggregator/)  - 来自Reactive.EventAggregator的超级简单的Reactive-Extension代码。 \r\n- [TinyMessenger](https://github.com/grumpydev/TinyMessenger)  - 用于松散耦合通信的轻量级事件聚合器/消息传递器。 \r\n- [Xer.Cqrs](https://github.com/XerProjects/Xer.Cqrs)  - 一个简单的库，用于创建基于CQRS模式的应用程序，支持属性路由和托管处理程序。使用C#开发，目标是.NET Standard 1.0。 \r\n- [FluentMediator](https://github.com/ivanpaulovich/FluentMediator)  - FluentMediator是一个不显眼的库，允许开发人员为命令、查询和事件构建自定义管道。 \r\n- [EventFlow](https://github.com/eventflow/EventFlow)  - EventFlow是一个面向.NET的Async/await优先的CQRS和事件溯源DDD框架。\r\n','事件消息','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,42),('7332245e-3011-2404-9e9b-3a0fe9b5b449',0,'当我们需要定义一个类或者结构体的公共接口时，C# 中的接口（Interface）就是一个非常有用的工具。接口定义了一组公共方法、属性和事件，而这些方法、属性和事件可以被实现接口的类或者结构体所使用。接口本身不包含实现代码，而是定义了一组规范，实现接口的类或者结构体必须实现这些规范。\r\n## 接口的语法\r\n\r\n在 C# 中，定义一个接口需要使用 `interface` 关键字，接口中包含一组方法、属性和事件的定义。下面是一个简单的接口定义示例：\r\n\r\n```csharp\r\n\r\ninterface IExampleInterface\r\n{\r\n    void ExampleMethod();\r\n    int ExampleProperty { get; set; }\r\n    event EventHandler ExampleEvent;\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的示例中，`IExampleInterface` 定义了一个方法 `ExampleMethod()`，一个属性 `ExampleProperty` 和一个事件 `ExampleEvent`。接口中的方法和属性可以有不同的访问修饰符，但是接口中的所有成员都默认为公共的。\r\n## 实现接口\r\n\r\n实现接口的类或者结构体必须实现接口中定义的所有成员。在 C# 中，使用 `:` 符号实现接口：\r\n\r\n```csharp\r\n\r\nclass ExampleClass : IExampleInterface\r\n{\r\n    public void ExampleMethod()\r\n    {\r\n        // 实现接口中定义的方法\r\n    }\r\n\r\n    public int ExampleProperty { get; set; }\r\n\r\n    public event EventHandler ExampleEvent;\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的示例中，`ExampleClass` 实现了 `IExampleInterface` 接口中定义的所有成员。\r\n## 示例代码\r\n\r\n下面是一个完整的示例代码，演示了如何定义和实现一个接口：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\ninterface IExampleInterface\r\n{\r\n    void ExampleMethod();\r\n    int ExampleProperty { get; set; }\r\n    event EventHandler ExampleEvent;\r\n}\r\n\r\nclass ExampleClass : IExampleInterface\r\n{\r\n    private int _exampleProperty;\r\n\r\n    public void ExampleMethod()\r\n    {\r\n        Console.WriteLine(\"调用了 ExampleMethod()\");\r\n    }\r\n\r\n    public int ExampleProperty\r\n    {\r\n        get { return _exampleProperty; }\r\n        set { _exampleProperty = value; }\r\n    }\r\n\r\n    public event EventHandler ExampleEvent;\r\n\r\n    public void RaiseExampleEvent()\r\n    {\r\n        if (ExampleEvent != null)\r\n            ExampleEvent(this, EventArgs.Empty);\r\n    }\r\n}\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        ExampleClass exampleObject = new ExampleClass();\r\n        exampleObject.ExampleMethod();\r\n        exampleObject.ExampleProperty = 42;\r\n        Console.WriteLine(\"ExampleProperty 值为：{0}\", exampleObject.ExampleProperty);\r\n        exampleObject.ExampleEvent += new EventHandler(exampleObject_ExampleEvent);\r\n        exampleObject.RaiseExampleEvent();\r\n    }\r\n\r\n    static void exampleObject_ExampleEvent(object sender, EventArgs e)\r\n    {\r\n        Console.WriteLine(\"调用了 ExampleEvent\");\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的示例中，我们定义了一个接口 `IExampleInterface`，并实现了一个类 `ExampleClass`，该类实现了 `IExampleInterface` 中定义的所有成员。我们还定义了一个事件 `ExampleEvent`，并在 `RaiseExampleEvent()` 方法中引发了该事件。在 `Main()` 方法中，我们创建了一个 `ExampleClass` 对象，调用了 `ExampleMethod()` 方法和设置了 `ExampleProperty` 属性的值，并注册了 `ExampleEvent` 事件的处理程序。\r\n\r\n当我们运行程序时，我们会看到以下输出：\r\n\r\n```scss\r\n\r\n调用了 ExampleMethod()\r\nExampleProperty 值为：42\r\n调用了 ExampleEvent\r\n```\r\n\r\n\r\n\r\n这表明我们成功地实现了接口，并且成功地触发了 `ExampleEvent` 事件。\r\n## 总结\r\n\r\n接口是 C# 中非常有用的工具，它们定义了一组公共方法、属性和事件，这些方法、属性和事件可以被实现接口的类或者结构体所使用。接口本身不包含实现代码，而是定义了一组规范，实现接口的类或者结构体必须实现这些规范。实现接口的类或者结构体必须实现接口中定义的所有成员，否则编译器将会报错。\r\n\r\n在 C# 中，使用接口可以使代码更加灵活和可扩展。接口允许我们将实现代码与公共接口分离，这样我们可以在不改变公共接口的情况下更改实现代码。此外，使用接口可以使我们编写更加通用和可复用的代码，因为实现接口的类或者结构体可以在不同的场景中使用。\r\n','C# 接口（Interface）','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,23),('78721e15-67db-906c-482c-3a0ff53f867f',0,'* [CoreWF](https://github.com/dmetzgar/corewf/) -  Windows Workflow Foundation(WF)到.NET Core的端口。\r\n* [workflow-core](https://github.com/danielgerlag/workflow-core) -  .NET Standard的轻量级工作流引擎。\r\n* [WorkflowEngine.NET](https://github.com/optimajet/WorkflowEngine.NET) - 在应用程序中添加工作流程的组件。\r\n* [Wexflow](https://github.com/aelassas/Wexflow) - 高性能，可扩展，模块化和跨平台的工作流引擎。','工作流','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,5),('79b6d958-c40b-4013-f371-3a0ff5826e3a',0,'**C#Winform--打字游戏选择关卡挑战boss**\n\n**作者心得**\n好家伙，这又是我第一个真正意义上自己弄的winform程序\n那个时候才刚刚学面向对象\n主要以面相过程为主\n自己瞎弄了一个这个玩意儿，当时还真的挺自豪的！\n\n**项目核心代码**\n（面相过程，你们懂的，代码炸裂多）\n\n```csharp\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\n\n\nnamespace dz\n{\n\n    public partial class Form1 : Form\n    {\n        int f = 0;\n        public Form1()\n        {\n            InitializeComponent();\n        }\n\n        private void timer1_Tick(object sender, EventArgs e)\n        {\n\n            if (Class1.shuliang == 3)\n            {\n                if (lab1.Top > 400 || lab2.Top > 400 || lab3.Top > 400 )\n                {\n                    end.Enabled = true;\n                    end.Text = \"死\";\n                    text1.Enabled = false;\n                    btn1.Enabled = false;\n                    p.Show();\n                }\n            }\n\n            if (Class1.shuliang == 4)\n            {\n                if (lab1.Top > 400 || lab2.Top > 400 || lab3.Top > 400 || lab20.Top > 400)\n                {\n                    end.Enabled = true;\n                    end.Text = \"死\";\n                    text1.Enabled = false;\n                    btn1.Enabled = false;\n                    p.Show();\n                }\n            }\n\n            if (Class1.shuliang == 5)\n            {\n                if (lab1.Top > 400 || lab2.Top > 400 || lab3.Top > 400 || lab20.Top > 400 || lab21.Top > 400)\n                {\n                    end.Enabled = true;\n                    end.Text = \"死\";\n                    text1.Enabled = false;\n                    btn1.Enabled = false;\n                    p.Show();\n                }\n            }\n            lab1.Top = lab1.Top + 10;\n            lab2.Top = lab2.Top + 10;\n            lab3.Top = lab3.Top + 10;\n            lab20.Top = lab20.Top + 10;\n            lab21.Top = lab20.Top + 10;\n            if (Convert.ToInt32(lab6.Text) >= 50)\n            {\n                Class1.shu = Class1.shu + 1;\n                this.Close();\n                MessageBox.Show(\"恭喜你挑战成功！\",\"祝贺！\");\n                Form4 p = new Form4();\n                p.Show();\n\n            }\n\n\n\n        }\n\n\n\n        private void Form1_Load(object sender, EventArgs e)\n        {\n            pl.Text = Class1.play;\n            num2.Value = Class1.shuliang;\n            num1.Value = Class1.sudu;\n            pb1.Value = 100;\n\n        }\n\n        private void text1_TextChanged(object sender, EventArgs e)\n        {\n            Random g1 = new Random();\n            char g = Convert.ToChar(g1.Next(97, 123));\n            Random q1 = new Random();\n            int q = q1.Next(0, 777);\n\n        a: Random g2 = new Random();\n            char g3 = Convert.ToChar(g2.Next(97, 123));\n            Random q2 = new Random();\n            int q3 = q2.Next(0, 777);\n            if (q3 == q)\n                goto a;\n\n            b: Random g4 = new Random();\n            char g5 = Convert.ToChar(g4.Next(97, 123));\n            Random q4 = new Random();\n            int q5 = q4.Next(0, 777);\n            if (q5 == q3 || q5 == q)\n                goto b;\n\n            c: Random g6 = new Random();\n            char g7 = Convert.ToChar(g6.Next(97, 123));\n            Random q6 = new Random();\n            int q7 = q6.Next(0, 777);\n            if (q7 == q5 || q7 == q3 || q7 == q)\n                goto c;\n\n            d: Random g8 = new Random();\n            char g9 = Convert.ToChar(g8.Next(97, 123));\n            Random q8 = new Random();\n            int q9 = q8.Next(0, 777);\n            if (q9 == q5 || q9 == q3 || q9 == q || q9 == q7)\n                goto d;\n\n\n            if (text1.Text == lab1.Text)\n            {\n                lab1.Top = 0;\n                lab1.Left = q;\n                lab1.Text = g.ToString();\n                f++;\n            }\n            if (text1.Text == lab2.Text)\n            {\n                lab2.Top = 0;\n                lab2.Left = q3;\n                lab2.Text = g3.ToString();\n                f++;\n            }\n            if (text1.Text == lab3.Text)\n            {\n                lab3.Top = 0;\n                lab3.Left = q5;\n                lab3.Text = g5.ToString();\n                f++;\n            }\n            if (text1.Text == lab20.Text)\n            {\n                lab20.Top = 0;\n                lab20.Left = q7;\n                lab20.Text = g7.ToString();\n                f++;\n            }\n            if (text1.Text == lab21.Text)\n            {\n                lab21.Top = 0;\n                lab21.Left = q9;\n                lab21.Text = g9.ToString();\n                f++;\n            }\n            text1.Text = \"\";\n            lab6.Text = f.ToString();\n        }\n\n\n\n\n\n\n        private void btn1_Click(object sender, EventArgs e)\n        {\n            timer1.Enabled = true;\n            text1.Enabled = true;\n            text1.Focus();\n            num1.Enabled = false;\n            num2.Enabled = false;\n        }\n\n        private void numericUpDown1_ValueChanged(object sender, EventArgs e)\n        {\n\n            timer1.Interval = 1000 - Convert.ToInt32(num1.Value) * 100 + 1;\n        }\n\n        private void btn2_Click(object sender, EventArgs e)\n        {\n            timer1.Enabled = false;\n            text1.Enabled = false;\n            num1.Enabled = false;\n            num2.Enabled = false;\n        }\n\n\n        private void num2_ValueChanged(object sender, EventArgs e)\n        {\n\n            if (num2.Value == 3)\n            {\n                lab20.Enabled = false;\n                lab20.Visible = false;\n                lab20.Top = 0;\n            }\n            if (Class1.shuliang == 4)\n            {\n                lab20.Enabled = true;\n                lab20.Visible = true;\n                lab21.Enabled = false;\n                lab21.Visible = false;\n            }\n            if (num2.Value == 5)\n            {\n                lab20.Enabled = true;\n                lab20.Visible = true;\n                lab21.Enabled = true;\n                lab21.Visible = true;\n            }\n        }\n\n\n\n\n\n\n\n        private void button1_Click(object sender, EventArgs e)\n        {\n            Form4 p = new Form4();\n            this.Close();\n            p.Show();\n        }\n\n\n\n\n\n    }\n}\n```\n**效果截图**\n![image.png](/prod-api/file/347dbcc3-9def-00b3-630f-3a0ff581d707/true)\n\n![image.png](/prod-api/file/c006dbd9-4f18-4407-2fd4-3a0ff581f4ed/true)\n\n![image.png](/prod-api/file/78630f5a-e28e-e61f-da5a-3a0ff58207e2/true)\n\n![image.png](/prod-api/file/8866a71d-1265-0b34-1ccb-3a0ff58218fc/true)\n\n![image.png](/prod-api/file/01a826bb-03f8-811e-28ff-3a0ff582415f/true)\n\n![image.png](/prod-api/file/bc67376d-44fb-ebf8-12b9-3a0ff582539e/true)\n\n![image.png](/prod-api/file/7e4026dc-38b6-b918-d823-3a0ff5826452/true)\n\n**作者的话**\n哇！n年后看到自己熬夜加班写的玩意儿，心中就一句话\n“这tm是什么玩意儿！”\n不过对于刚刚接触这个领域的小白来说，对于winform的使用更上一层楼！\n','C#Winform--打字游戏','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 17:51:26','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('7a541684-b837-c5db-e00c-3a0ff53f8681',0,'\r\n- [NetTopologySuite](https://github.com/NetTopologySuite/NetTopologySuite/)  - 一个快速而可靠的面向.NET平台的GIS解决方案。 \r\n- [SharpMap](https://github.com/SharpMap)  - 一个易于使用的地图库，用于Web和桌面应用程序。 \r\n- [OsmSharp](https://www.osmsharp.com/)  - 用于处理OpenStreetMap (OSM)数据的C#库。提供了读取、写入和路线规划的OSM数据功能。 \r\n- [GeoJSON4EntityFramework](https://github.com/alatas/GeoJSON4EntityFramework)  - 一个库，用于从Entity Framework Spatial数据或Well-Known Text (WKT)输入创建GeoJSON。 \r\n- [GeoJSON.NET](https://github.com/GeoJSON-Net/GeoJSON.Net)  - 用于GeoJSON类型及相应的Json.Net（de）序列化器的.NET库。 \r\n- [CoordinateSharp](https://github.com/Tronald/CoordinateSharp)  - 轻松解析或转换坐标格式，并计算基于位置的太阳/月球信息。 \r\n- [DEM Net Elevation API](https://github.com/dem-net/dem.net)  - 用于Digital Elevation Models的.NET库，允许生成glTF / STL格式的3D地形。','GIS','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,47),('7bfb9ec1-ab1c-dea3-e22d-3a0ff58b50e3',0,'**作者的话**\nUnity最后一个项目\n花了很多心血\n（采用Unity引擎，采用c#语言，下载自带unity，下载即玩）\n（做这个真的花了很多心血，这个应该是我最后做的一个unity项目了，已经完全没有任何意义再深钻进去，最近方向可能朝unreal虚幻4引擎出发）\n（实现玩家的移动，以及视角的改变，玩家奔跑，玩家跳跃，脚步声音。使用unity引擎完全模仿与现实重力操作，ugui界面，碰撞到小球加得分，碰到大球传送操作，以及退出，打开新场景操作。）\n（选择分辨率，按键配置，进入界面后点击开始游戏，踩小球加得分显示，踩大球传送操作，踩红色方块会掉落，跑到最后的终点即为通过！）\n**效果展示**\n![image.png](/prod-api/file/2d531444-b11b-c84b-8a87-3a0ff58a61d1/true)\n![image.png](/prod-api/file/7826bb93-7109-247f-b6b8-3a0ff58aa4a9/true)\n![image.png](/prod-api/file/2dfbda7a-c561-0f26-6f12-3a0ff58ad3c4/true)\n![image.png](/prod-api/file/3291b43a-2e34-27d3-3756-3a0ff58af989/true)\n![image.png](/prod-api/file/75ce61e9-875a-043d-6e60-3a0ff58b4069/true)\n**下载**\n[提取码: ynaq](https://pan.baidu.com/s/1FTiLDfm5jFx04cOG77BffA)','C#Unity--3D跑酷','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 18:01:09','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('7c7f8dfe-48fd-4eca-9e5b-3a0fe9b5b449',0,'C# 是一种现代的面向对象编程语言，由微软开发并广泛应用于各种应用程序开发中。本文将介绍 C# 的基本语法，包括变量、数据类型、运算符、控制语句等内容。\r\n## 变量\r\n\r\n在 C# 中，变量是一种用于存储值的命名存储位置。在使用变量之前，需要先声明变量的类型和名称。例如，以下代码声明了一个整型变量：\r\n\r\n```csharp\r\n\r\nint age;\r\n```\r\n\r\n\r\n\r\n在此声明中，`int` 表示变量的类型，`age` 表示变量的名称。声明变量后，可以为其赋值：\r\n\r\n```csharp\r\n\r\nage = 18;\r\n```\r\n\r\n\r\n\r\n也可以在声明变量时进行初始化：\r\n\r\n```csharp\r\n\r\nint age = 18;\r\n```\r\n\r\n\r\n## 数据类型\r\n\r\nC# 中的数据类型包括整型、浮点型、布尔型、字符型等。以下是一些常见的数据类型及其范围：\r\n\r\n|数据类型|描述|范围|\r\n|--|--|--|\r\n|int|整型|-2,147,483,648 到 2,147,483,647|\r\n|float|单精度浮点型|约 -3.4 x 10^38 到 3.4 x 10^38|\r\n|double|双精度浮点型|约 -1.7 x 10^308 到 1.7 x 10^308|\r\n|bool|布尔型|true 或 false|\r\n|char|字符型|0 到 65,535|\r\n\r\n在 C# 中，还有一些其他的数据类型，如字符串型、枚举型等，可以根据需要进行选择和使用。\r\n## 运算符\r\n\r\nC# 中的运算符包括算术运算符、关系运算符、逻辑运算符等。以下是一些常见的运算符及其用法：\r\n### 算术运算符\r\n\r\n|运算符|描述|例子|\r\n|--|--|--|\r\n|+|加法|3 + 5 = 8|\r\n|-|减法|7 - 2 = 5|\r\n|*|乘法|4 * 6 = 24|\r\n|/|除法|10 / 2 = 5|\r\n|%|取模|10 % 3 = 1|\r\n\r\n### 关系运算符\r\n\r\n|运算符|描述|例子|\r\n|--|--|--|\r\n|==|等于|3 == 5 返回 false|\r\n|!=|不等于|3 != 5 返回 true|\r\n|>|大于|7 > 2 返回 true|\r\n|<|小于|4 < 6 返回 true|\r\n|>=|大于等于|10 >= 2 返回 true|\r\n|<=|小于等于|4 <= 6 返回 true|\r\n\r\n### 逻辑运算符\r\n\r\n|运算符|描述|例子|\r\n|--|--|--|\r\n|&&| 与运算 | 如果两个操作数都为 true，则结果为 true，否则为 false | true && false 返回 false |\r\n| &#124;&#124; | 或运算 | 如果两个操作数有一个为 true，则结果为 true，否则为 false | true || false 返回 true |\r\n| ! | 非运算 | 如果操作数为 true，则结果为 false，否则为 true | !true 返回 false |\r\n## 控制语句\r\n\r\nC# 中的控制语句包括条件语句、循环语句等。以下是一些常见的控制语句及其用法：\r\n### 条件语句\r\n\r\nC# 中的条件语句包括 `if`、`else`、`else if` 等关键字，用于根据条件执行不同的代码块。例如：\r\n\r\n```csharp\r\n\r\nif (age >= 18)\r\n{\r\n    Console.WriteLine(\"你已经成年了！\");\r\n}\r\nelse\r\n{\r\n    Console.WriteLine(\"你还未成年！\");\r\n}\r\n```\r\n\r\n\r\n\r\n在此代码中，如果 `age` 大于等于 18，则输出“你已经成年了！”；否则输出“你还未成年！”。\r\n### 循环语句\r\n\r\nC# 中的循环语句包括 `while`、`do while`、`for` 等关键字，用于重复执行一段代码块。例如：\r\n\r\n```csharp\r\n\r\nint i = 0;\r\nwhile (i < 10)\r\n{\r\n    Console.WriteLine(i);\r\n    i++;\r\n}\r\n```\r\n\r\n\r\n\r\n在此代码中，变量 `i` 从 0 开始逐渐递增，当 `i` 小于 10 时，循环执行输出 `i` 的值，直到 `i` 等于 10 时循环结束。\r\n## 总结\r\n\r\n本文介绍了 C# 的基本语法，包括变量、数据类型、运算符、控制语句等内容。学习这些基础知识是 C# 编程的第一步，也是成为一名优秀的 C# 开发者的必要条件。希望本文能够帮助读者更好地了解和掌握 C# 编程。\r\n','C# 基本语法','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,4),('7d833437-6802-0ace-114b-3a0fe9b5b448',0,'C# 是一种现代化的面向对象编程语言，主要用于 Windows 平台的开发。在 C# 中，程序结构是指程序的组织方式和代码的组成部分，包括命名空间、类、方法等。\r\n## 命名空间\r\n\r\n命名空间是 C# 中用来组织代码的一种机制。它可以包含类、结构体、枚举、委托等类型，并且可以嵌套其他命名空间。命名空间的定义通常放在源文件的顶部，格式如下：\r\n\r\n```csharp\r\n\r\nnamespace MyNamespace\r\n{\r\n    // 类、结构体、枚举、委托等类型定义\r\n}\r\n```\r\n\r\n\r\n\r\n其中，`MyNamespace` 是命名空间的名称，可以根据实际需要自定义。如果在一个程序中定义了多个命名空间，可以使用 `using` 关键字引用它们，例如：\r\n\r\n```csharp\r\n\r\nusing System;\r\nusing MyNamespace;\r\n```\r\n\r\n\r\n## 类\r\n\r\n类是 C# 中最基本的组织代码的单元，它用来定义对象的属性和方法。一个类可以包含多个属性和方法，它们被称为类的成员。类的定义格式如下：\r\n\r\n```csharp\r\n\r\nclass MyClass\r\n{\r\n    // 类的成员定义\r\n}\r\n```\r\n\r\n\r\n\r\n其中，`MyClass` 是类的名称，也可以根据实际需要自定义。类的成员包括字段、属性、方法和事件等，它们的访问权限可以使用 `public`、`private`、`protected` 和 `internal` 关键字进行控制。\r\n## 方法\r\n\r\n方法是 C# 中用来执行特定操作的代码块，它可以带有参数和返回值。方法的定义格式如下：\r\n\r\n```csharp\r\n\r\npublic void MyMethod(int arg1, string arg2)\r\n{\r\n    // 方法体\r\n}\r\n```\r\n\r\n\r\n\r\n其中，`public` 是访问修饰符，表示该方法可以被其他类访问；`void` 表示该方法没有返回值；`MyMethod` 是方法的名称，可以根据实际需要自定义；`int arg1` 和 `string arg2` 是方法的参数，它们的类型需要在参数名称之前声明。\r\n## 控制语句\r\n\r\nC# 中有多种控制语句可以用来控制程序的执行流程，包括条件语句、循环语句和跳转语句等。\r\n### 条件语句\r\n\r\n条件语句用来根据条件判断执行不同的代码块。C# 中的条件语句包括 `if`、`else` 和 `switch` 语句，例如：\r\n\r\n```csharp\r\n\r\nif (condition)\r\n{\r\n    // 条件为真时执行的代码\r\n}\r\nelse\r\n{\r\n    // 条件为假时执行的代码\r\n}\r\n\r\nswitch (variable)\r\n{\r\n    case value1:\r\n        // 变量等于 value1 时执行的代码\r\n        break;\r\n    case value2:\r\n        // 变量等于 value2 时执行的代码\r\n        break;\r\n    default:\r\n        // 变量不等于 value1 或 value2 时执行的代码\r\n        break;\r\n```\r\n\r\n\r\n\r\n}\r\n\r\n```arduino\r\n\r\n### 循环语句\r\n\r\n循环语句用来多次执行相同的代码块。C# 中的循环语句包括 `while`、`do-while` 和 `for` 语句，例如：\r\n\r\n```csharp\r\nwhile (condition)\r\n{\r\n    // 循环条件为真时执行的代码\r\n}\r\n\r\ndo\r\n{\r\n    // 至少执行一次的循环代码\r\n} while (condition);\r\n\r\nfor (int i = 0; i < 10; i++)\r\n{\r\n    // 执行 10 次的循环代码\r\n}\r\n```\r\n\r\n\r\n### 跳转语句\r\n\r\n跳转语句用来改变程序的执行流程。C# 中的跳转语句包括 `break`、`continue` 和 `return` 语句，例如：\r\n\r\n```csharp\r\n\r\nwhile (true)\r\n{\r\n    if (condition)\r\n    {\r\n        break; // 跳出循环\r\n    }\r\n    if (otherCondition)\r\n    {\r\n        continue; // 继续循环下一次迭代\r\n    }\r\n}\r\n\r\npublic int MyMethod()\r\n{\r\n    return 0; // 返回一个整数值\r\n}\r\n```\r\n\r\n\r\n## 异常处理\r\n\r\n异常处理是指在程序运行过程中发生错误时，采取一些措施来保证程序正常运行。C# 中的异常处理机制使用 `try`、`catch` 和 `finally` 语句来实现，例如：\r\n\r\n```csharp\r\n\r\ntry\r\n{\r\n    // 可能会抛出异常的代码\r\n}\r\ncatch (Exception ex)\r\n{\r\n    // 处理异常的代码\r\n}\r\nfinally\r\n{\r\n    // 无论是否抛出异常都会执行的代码\r\n}\r\n```\r\n\r\n\r\n\r\n其中，`try` 语句包含可能会抛出异常的代码块；`catch` 语句用来捕获并处理异常，`Exception ex` 表示要捕获的异常类型，可以根据实际需要自定义；`finally` 语句包含无论是否抛出异常都会执行的代码块。\r\n## 总结\r\n\r\nC# 程序结构包括命名空间、类、方法、控制语句和异常处理等组成部分。掌握 C# 程序结构对于编写高质量的 C# 程序非常重要，希望本文能够帮助您更好地理解和掌握 C# 程序结构。\r\n','C# 程序结构','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,3),('7d97f31b-f6d1-a22e-f18d-3a0f83ab84fa',0,'## 简介\n如何获取当前请求用户信息？这个问题有很多个答案\n\n常规是通过HttpContext对象进行获取，它通常是在ControllerBase中，控制器中内置了HttpContext对象\n也可以通过依赖注入HttpContext访问器中获取\n\n> 但是，他们都不够优雅，原因：与HttpContext具备了强耦合，如果对于没有HttpContext,将会非常的难维护，例如：单元测速\n\n你可以依赖注入使用：`ICurrentUser`\n它是瞬态注入，但是它能够获取当前作用域的用户信息\n## 如何使用\n任何地方，依赖注入：`ICurrentUser`\n它包含属性：\n``` cs\n public interface ICurrentUser\n    {\n//是否授权\n        public bool IsAuthenticated { get; }\n//id\n        public Guid Id { get; }\n//用户名\n        public string UserName { get; }\n//租户id\n        public Guid TenantId { get; }\n//邮件\n        public string Email { get; }\n\n        public bool EmailVerified { get; }\n//电话\n        public string PhoneNumber { get;  }\n\n        public bool PhoneNumberVerified { get; }\n//角色codes\n        public string[]? Roles { get; }\n\n\n    }\n```\n直接使用即可\n\n> 注意，当前用户功能默认是继承到Core模块，所以你无需进行任何引用，直接使用即可\n','当前用户','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','00000000-0000-0000-0000-000000000000','2023-12-16 15:19:36','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('7e32ca0b-77b8-fb07-2379-3a0fe9b5b449',0,'循环是编程中的重要概念之一，它可以帮助我们重复执行相同的代码块。在 C# 中，我们有几种循环结构可以使用，包括 for 循环、while 循环和 do-while 循环。\r\n\r\n## for 循环\r\n\r\nfor 循环是一种常用的循环结构，它可以指定循环变量的初始值、终止条件和每次迭代后的操作。下面是一个 for 循环的示例：\r\n\r\n```csharp\r\n\r\nfor (int i = 0; i < 10; i++)\r\n{\r\n    Console.WriteLine(\"当前数字为：\" + i);\r\n}\r\n```\r\n\r\n\r\n\r\n在这个示例中，我们初始化循环变量 i 为 0，然后指定循环条件为 i < 10，每次迭代后 i 的值增加 1。循环体内的代码将被执行 10 次，输出当前数字的值。\r\n## while 循环\r\n\r\nwhile 循环是另一种常用的循环结构，它可以在满足条件的情况下重复执行相同的代码块。下面是一个 while 循环的示例：\r\n\r\n```csharp\r\n\r\nint j = 0;\r\nwhile (j < 10)\r\n{\r\n    Console.WriteLine(\"当前数字为：\" + j);\r\n    j++;\r\n}\r\n```\r\n\r\n\r\n\r\n在这个示例中，我们初始化循环变量 j 为 0，然后指定循环条件为 j < 10。循环体内的代码将被执行 10 次，输出当前数字的值。\r\n## do-while 循环\r\n\r\ndo-while 循环是一种与 while 循环类似的循环结构，不同的是它会先执行一次循环体内的代码，然后再判断循环条件是否满足。下面是一个 do-while 循环的示例：\r\n\r\n```csharp\r\n\r\nint k = 0;\r\ndo\r\n{\r\n    Console.WriteLine(\"当前数字为：\" + k);\r\n    k++;\r\n} while (k < 10);\r\n```\r\n\r\n\r\n\r\n在这个示例中，我们初始化循环变量 k 为 0，然后执行一次循环体内的代码，输出当前数字的值。之后判断循环条件是否满足，如果满足则继续执行循环体内的代码，直到循环条件不满足为止。\r\n\r\n以上就是 C# 中常用的循环结构及其示例代码。需要注意的是，在使用循环结构时一定要注意循环变量的初始值、终止条件和每次迭代后的操作，否则可能会导致死循环或者无限循环的情况发生。\r\n\r\n## foreach 循环\r\n\r\nforeach 循环用于遍历一个集合或数组中的所有元素。下面是一个 foreach 循环的示例：\r\n\r\n```csharp\r\n\r\nint[] numbers = { 1, 2, 3, 4, 5 };\r\nforeach (int num in numbers)\r\n{\r\n    Console.WriteLine(\"当前数字为：\" + num);\r\n}\r\n```\r\n\r\n\r\n\r\n在这个示例中，我们定义了一个整型数组 numbers，并初始化了其中的元素。然后使用 foreach 循环遍历数组中的所有元素，每次迭代后输出当前数字的值。\r\n## for 循环的扩展语法\r\n\r\nfor 循环的扩展语法可以让我们更方便地遍历一个集合或数组中的所有元素。下面是一个 for 循环的扩展语法的示例：\r\n\r\n```csharp\r\n\r\nint[] numbers = { 1, 2, 3, 4, 5 };\r\nfor (int i = 0; i < numbers.Length; i++)\r\n{\r\n    Console.WriteLine(\"当前数字为：\" + numbers[i]);\r\n}\r\n```\r\n\r\n在这个示例中，我们定义了一个整型数组 numbers，并初始化了其中的元素。然后使用 for 循环的扩展语法遍历数组中的所有元素，每次迭代后输出当前数字的值。\r\n\r\n需要注意的是，使用 foreach 循环和 for 循环的扩展语法遍历一个集合或数组时，必须保证该集合或数组是可迭代的，即实现了 `IEnumerable` 接口或其泛型版本 `IEnumerable<T>` 接口。\r\n\r\n以上就是 C# 中常用的循环结构及其高级用法。需要注意的是，在使用高级循环结构时也要注意循环变量的初始值、终止条件和每次迭代后的操作，否则同样可能会导致死循环或者无限循环的情况发生。\r\n\r\n## foreach 循环的 LINQ 版本\r\n\r\nforeach 循环的 LINQ 版本可以让我们更方便地筛选集合或数组中的元素。下面是一个 foreach 循环的 LINQ 版本的示例：\r\n\r\n```csharp\r\n\r\nint[] numbers = { 1, 2, 3, 4, 5 };\r\nforeach (int num in numbers.Where(n => n % 2 == 0))\r\n{\r\n    Console.WriteLine(\"当前偶数为：\" + num);\r\n}\r\n```\r\n\r\n\r\n\r\n在这个示例中，我们定义了一个整型数组 numbers，并初始化了其中的元素。然后使用 foreach 循环的 LINQ 版本筛选出其中的偶数，每次迭代后输出当前偶数的值。\r\n\r\n需要注意的是，使用 foreach 循环的 LINQ 版本时必须引入 System.Linq 命名空间，并使用 Where 扩展方法进行筛选。\r\n## while 循环的 lock 版本\r\n\r\nwhile 循环的 lock 版本可以让我们更方便地实现线程同步。下面是一个 while 循环的 lock 版本的示例：\r\n\r\n```csharp\r\n\r\nobject lockObj = new object();\r\nint count = 0;\r\nwhile (true)\r\n{\r\n    lock (lockObj)\r\n    {\r\n        if (count >= 10)\r\n        {\r\n            break;\r\n        }\r\n        Console.WriteLine(\"当前计数为：\" + count);\r\n        count++;\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在这个示例中，我们定义了一个锁对象 lockObj 和一个计数器 count。然后使用 while 循环的 lock 版本实现了线程同步，每次迭代时都会获取锁对象 lockObj，然后判断计数器 count 是否大于等于 10，如果是则退出循环，否则输出当前计数的值并将计数器加 1。\r\n\r\n需要注意的是，使用 while 循环的 lock 版本时必须保证锁对象的可见性，并使用 lock 关键字对临界区进行保护。\r\n\r\n以上就是 C# 中特殊的循环结构及其用法。需要注意的是，在使用特殊循环结构时也要注意循环变量的初始值、终止条件和每次迭代后的操作，以及特殊循环结构的语法和用法。\r\n','C# 循环','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,11),('7fa91a48-0a81-9d20-4624-3a0ff53f8682',0,'\r\n- [FluentEmail](https://github.com/lukencode/FluentEmail)  - 一个带有Razor模板支持的System.Net.Mail的流畅包装器。 \r\n- [MailKit](https://github.com/jstedfast/MailKit)  - 一个完整的跨平台邮件堆栈，包括IMAP、POP3、SMTP、身份验证等。建立在MimeKit之上。 \r\n- [MailKitSimplified](https://github.com/danzuep/MailKitSimplified)  - 一个完全功能齐全的MailKit的流畅包装器，使发送和接收电子邮件尽可能简单。 \r\n- [MimeKit](https://github.com/jstedfast/MimeKit)  - 一个跨平台的.NET MIME创建和解析库，支持S/MIME、PGP、TNEF和Unix mbox spools。 \r\n- [PreMailer.Net](https://github.com/milkshakesoftware/PreMailer.Net)  - 一个C#库，将您的样式表移动到内联样式属性，以最大限度提高与电子邮件客户端的兼容性。 \r\n- [StrongGrid](https://github.com/Jericho/StrongGrid)  - SendGrid v3 API的客户端。不仅允许您发送电子邮件，还允许您批量导入联系人、管理列表和段落、为您的列表创建自定义字段等等。还包括一个用于SendGrid Webhooks的解析器。\r\n* [MailBody](https://github.com/doxakis/MailBody) - 使用流畅的界面(.NET)创建电子邮件。\r\n* [MailMergeLib](https://github.com/axuno/MailMergeLib) -  SMTP邮件客户端库，为文本，内嵌图像和附件提供邮件合并功能，以及发送邮件的良好吞吐量和容错能力。\r\n* [netDumbster](https://github.com/cmendible/netDumbster) - 用于测试的.Net假SMTP服务器。克隆流行的Dumbster。\r\n* [Papercut](https://github.com/ChangemakerStudios/Papercut) - 简单桌面SMTP服务器。\r\n* [SmtpServer](https://github.com/cosullivan/SmtpServer) - 用于创建自己的SMTP服务器的库。','邮件','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,65),('7fb0d992-3f13-9de9-16b9-3a0ff585f1fb',0,'**C#WPF--身份证查询**\n\n**作者心得**\n很简单的玩意儿，不过并不是通过api调用，只是简单的测试身份证号码的规则，麻雀虽小，五脏俱全！\n\n**源代码**\n\n```csharp\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace SFZ\n{\n    /// <summary>\n    /// MainWindow.xaml 的交互逻辑\n    /// </summary>\n    public partial class MainWindow : Window\n    {\n        public MainWindow()\n        {\n            InitializeComponent();\n        }\n\n        private void Button_Click(object sender, RoutedEventArgs e)\n        {    char last = ''#'';\n             int num=login.GetLineLength(0);\n             if (num == 18)\n            {\n                char[] count = new char[18];\n                count = login.Text.ToCharArray();\n                int[] middle= new int[18];\n                int i = 0;\n                foreach (char k in count)\n                {\n                    middle[i] = k-48;\n                    i++;\n                }\n\n                int with=middle[0] * 7 + middle[1] * 9 + middle[2] * 10 + middle[3] * 5 + middle[4] * 8 + middle[5] * 4 + middle[6] * 2 + middle[7] * 1 + middle[8] * 6\n                    + middle[9] * 3 + middle[10] * 7 + middle[11] * 9 + middle[12] * 10 + middle[13] * 5 + middle[14] * 8 + middle[15] * 4 + middle[16] * 2;\n\n                int avg = with % 11;\n                switch (avg)\n                {\n                    case 0:\n                        last = ''1'';\n                        break;\n                    case 1:\n                        last = ''0'';\n                        break;\n                    case 2:\n                        last = ''X'';\n                        break;\n                    case 3:\n                        last = ''9'';\n                        break;\n                    case 4:\n                        last = ''8'';\n                        break;\n                    case 5:\n                        last = ''7'';\n                        break;\n                    case 6:\n                        last = ''6'';\n                        break;\n                    case 7:\n                        last = ''5'';\n                        break;\n                    case 8:\n                        last = ''4'';\n                        break;\n                    case 9:\n                        last = ''3'';\n                        break;\n                    case 10:\n                        last = ''2'';\n                        break;\n                }\n                if (last == count[17])\n                {\n                    MessageBox.Show(\"合法的身份证！\");\n                }\n                else\n                {\n                    MessageBox.Show(\"输入的身份证不合法！\");\n                }\n\n\n\n\n            }\n            else\n            {\n                MessageBox.Show(\"你没有输入完整的身份证号！\", \"提示\");\n            }\n        }\n\n        private void Button_Click_1(object sender, RoutedEventArgs e)\n        {\n            login.Text = \"\";\n            MessageBox.Show(\"文本已经重置！\");\n        }\n    }\n}\n\n```\n\n**效果截图**\n![image.png](/prod-api/file/b7842ce4-d5e3-df27-119a-3a0ff585e190/true)\n**作者的话**\n int with=middle[0] * 7 + middle[1] * 9 + middle[2] * 10 + middle[3] * 5 + middle[4] * 8 + middle[5] * 4 + middle[6] * 2 + middle[7] * 1 + middle[8] * 6+ middle[9] * 3 + middle[10] * 7 + middle[11] * 9 + middle[12] * 10 + middle[13] * 5 + middle[14] * 8 + middle[15] * 4 + middle[16] * 2\n 这里是运算法则了，刚好只是老师上课提出了一下，干脆就给他弄了出来！乱填的话，貌似只有10分之1的几率蒙对！最后一个校验码可不是乱发的！','C#WPF--本地身份证查询','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 17:55:17','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('7fe37284-06cf-7edc-b336-3a0ff5445eb3',0,'![image.png](/prod-api/file/5028c4fc-825d-d804-26af-3a0ff5444fb3/true)','WebHost主机','2da0361c-000d-e0d8-6737-3a0ff5421cdc','00000000-0000-0000-0000-000000000000','2024-01-07 16:43:39','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('7ff10e71-a90b-b6ed-3887-3a0fe9b5b449',0,'\r\n在C#中，常量是在程序中被定义并且在程序执行期间不会改变其值的标识符。常量在程序中用于存储不会改变的数据，例如Pi的值或其他常用的常数值。\r\n## 常量的声明\r\n\r\n常量的声明使用`const`关键字，声明语法如下：\r\n\r\n```php\r\n\r\nconst <数据类型> <常量名称> = <常量值>;\r\n```\r\n\r\n\r\n\r\n其中，`<数据类型>`表示常量的数据类型，`<常量名称>`表示常量的名称，`<常量值>`表示常量的值。\r\n\r\n例如，下面的代码定义了一个名为`Pi`的常量，其值为3.14159：\r\n\r\n```csharp\r\n\r\nconst double Pi = 3.14159;\r\n```\r\n\r\n\r\n## 常量的特点\r\n\r\n常量具有以下特点：\r\n- 常量必须在声明时进行初始化，且初始化后不可更改；\r\n- 常量的作用域和生命周期与变量相同，但是常量只能在声明时进行赋值，不可以在方法内部或其它代码块内部进行赋值；\r\n- 常量只能使用常量表达式进行初始化，即常量表达式的值在编译时就已经确定，并且只能使用常量、枚举常量、值类型常量和对它们的简单计算。\r\n## 常量表达式\r\n\r\n常量表达式是指在编译时可以计算得出结果的表达式。在C#中，常量表达式可以包括以下类型的操作符： \r\n- 算术操作符（`+`、`-`、`*`、`/`、`%`） \r\n- 关系操作符（`<`、`>`、`<=`、`>=`、`==`、`!=`） \r\n- 逻辑操作符（`&&`、`||`、`!`） \r\n- 位操作符（`&`、`|`、`^`、`~`、`<<`、`>>`） \r\n- 赋值操作符（`=`, `+=`, `-=` 等）\r\n\r\n常量表达式还可以包括以下常量类型： \r\n- 整型常量（`int`、`long`、`short`、`byte`、`sbyte`、`uint`、`ulong`、`ushort`） \r\n- 浮点型常量（`float`、`double`、`decimal`） \r\n- 字符常量（`char`） \r\n- 布尔常量（`bool`） \r\n- 字符串常量（`string`） \r\n- 枚举常量（`enum`）\r\n\r\n下面是一个使用常量表达式定义常量的示例代码：\r\n\r\n```csharp\r\n\r\nconst double radius = 5.0;\r\nconst double circumference = 2 * Pi * radius;\r\n```\r\n\r\n\r\n\r\n在上面的代码中，`circumference`的值是使用常量表达式计算得出的。\r\n## 示例代码\r\n\r\n下面是一个简单的示例程序，其中定义了两个常量，分别用于存储圆的半径和圆的周长\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nclass Program\r\n{\r\n    const double Pi = 3.14159;\r\n\r\n    static void Main(string[] args)\r\n    {\r\n        const double radius = 5.0;\r\n        double circumference = 2 * Pi * radius;\r\n\r\n        Console.WriteLine(\"半径为 {0} 的圆的周长为 {1}\", radius, circumference);\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的示例代码中，我们定义了一个名为`Pi`的常量，并使用常量表达式初始化了常量`circumference`。在`Main`方法中，我们使用常量`radius`和`circumference`计算圆的周长，并将结果输出到控制台。\r\n## 总结\r\n\r\n本文介绍了C#中常量的基本概念、声明方式、特点以及常量表达式的使用。通过示例代码的演示，读者可以更好地理解和掌握C#中常量的使用方法。\r\n','C# 常量','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,8),('8427dfea-27e8-45ae-7613-3a0fe9b5b44a',0,'## 什么是不安全代码\r\n\r\n不安全代码是一种能够直接操作内存的代码，它使用指针来引用内存地址。指针是一个变量，它存储了一个内存地址，可以用来访问该地址处的数据。\r\n\r\n在C#中，使用unsafe关键字可以创建不安全代码块，其中包含使用指针的代码。在不安全代码块内，可以声明指针类型的变量，并使用&运算符获取某个变量的地址，使用*运算符访问该地址处的数据。\r\n## 如何使用不安全代码\r\n\r\n使用不安全代码需要遵循以下几个步骤： \r\n1. 将代码放入不安全代码块中。\r\n\r\n```csharp\r\n\r\nunsafe\r\n{\r\n    // 不安全代码\r\n}\r\n``` \r\n2. 声明指针类型的变量。\r\n\r\n```arduino\r\n\r\nint* ptr;\r\n``` \r\n3. 初始化指针变量。\r\n\r\n```arduino\r\n\r\nint* ptr = &someVariable;\r\n``` \r\n4. 访问指针变量所指向的数据。\r\n\r\n```arduino\r\n\r\nint value = *ptr;\r\n``` \r\n5. 修改指针变量所指向的数据。\r\n\r\n```\r\n\r\n*ptr = newValue;\r\n``` \r\n6. 在使用完指针后，需要使用fixed关键字来防止垃圾回收器移动内存块，以确保指针仍然指向正确的内存位置。\r\n\r\n```csharp\r\n\r\nfixed (int* ptr = &someVariable)\r\n{\r\n    // 不安全代码\r\n}\r\n```\r\n## 示例代码\r\n\r\n下面是一个简单的示例，展示了如何使用不安全代码来交换两个整数的值：\r\n\r\n```csharp\r\n\r\nstatic unsafe void Swap(int* p1, int* p2)\r\n{\r\n    int temp = *p1;\r\n    *p1 = *p2;\r\n    *p2 = temp;\r\n}\r\n\r\nstatic unsafe void Main()\r\n{\r\n    int x = 1;\r\n    int y = 2;\r\n    Console.WriteLine($\"Before: x={x}, y={y}\");\r\n\r\n    fixed (int* p1 = &x)\r\n    {\r\n        fixed (int* p2 = &y)\r\n        {\r\n            Swap(p1, p2);\r\n        }\r\n    }\r\n\r\n    Console.WriteLine($\"After: x={x}, y={y}\");\r\n}\r\n```\r\n\r\n\r\n\r\n在这个示例中，我们使用了一个不安全代码块和指针类型的变量来引用x和y的地址。然后我们调用了Swap函数来交换x和y的值。在Swap函数内部，我们使用指针来访问和修改变量的值。在使用完指针后，我们使用了fixed关键字来确保指针仍然指向正确的内存位置。\r\n## 注意事项\r\n\r\n使用不安全代码需要格外小心，因为它涉及到直接操作内存。以下是一些需要注意的事项： \r\n- 不安全代码只能在有特殊权限的情况下使用，比如管理员权限。 \r\n- 不安全代码不会受到.NET Framework的保护，因此需要对代码进行精心编写和测试，以确保其正确性和安全性。 \r\n- 使用不安全代码时必须自己管理内存，包括分配和释放内存。如果不小心出错，可能会导致内存泄漏或访问非法内存地址，造成严重的安全漏洞。 \r\n- 使用不安全代码时必须谨慎地验证所有输入数据，以避免缓冲区溢出或其他安全问题。 \r\n- 不要在不必要的情况下使用不安全代码。只有在必须直接访问内存时，才应该使用不安全代码。\r\n## 结论\r\n\r\n在某些情况下，使用不安全代码可以提高性能和灵活性，但必须非常小心地使用它。在使用不安全代码时，必须注意安全和正确性，并遵循所有最佳实践。\r\n','C# 不安全代码','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,38),('85b79425-d940-2f32-e047-3a0ff53f8684',0,'* [ArchUnitNET](https://github.com/TNG/ArchUnitNET) - 使用fluent API检查C#代码架构的简单库。\r\n* [NetArchTest](https://github.com/BenMorris/NetArchTest) -  适用于.Net Standard的fluent API，可以在单元测试中强制执行架构规则。\r\n* [AutoFixture](https://github.com/AutoFixture/AutoFixture) - AutoFixture是一个针对.NET的开源框架。\r\n* [BDTest](https://github.com/thomhurst/BDTest/wiki) - 行为驱动的测试和报告框架！\r\n* [BDDfy](https://github.com/TestStack/TestStack.BDDfy) - BDDfy是有史以来最简单的BDD框架！\r\n* [Bogus](https://github.com/bchavez/Bogus) - 用于C#的简单而明智的伪数据生成器，基于著名的faker.js进行移植和开发。\r\n* [ExpressionToCode](https://github.com/EamonNerbonne/ExpressionToCode) - 在包含表达式和子表达式值的断言中使用纯C#语法，用于生成失败消息。\r\n* [FakeItEasy](https://github.com/FakeItEasy/FakeItEasy) - 用于.NET的易于使用的模拟库https://fakeiteasy.github.io\r\n* [Fluent Assertions](https://github.com/fluentassertions/fluentassertions) -  一组.NET扩展方法，允许您更自然地指定TDD或BDD样式测试的预期结果。\r\n* [FluentAutomation](https://github.com/stirno/FluentAutomation) - 使用fluent API进行简单UI自动化测试。\r\n* [FsCheck](https://github.com/fscheck/FsCheck) - 用于.NET的随机测试。\r\n* [Fuchu](https://github.com/mausch/Fuchu) - 用于F#的单元测试库，将测试作为值进行处理，极易创建DSL。\r\n* [Machine.Specifications](https://github.com/machine/machine.specifications) - Machine.Specifications (MSpec)是一个上下文/规范框架，去除了语言噪音并简化了测试。\r\n* [Moq](https://github.com/Moq/moq4) - 最受欢迎和友好的.NET模拟框架\r\n* [Moq.Contrib.HttpClient](https://github.com/maxkagamine/Moq.Contrib.HttpClient) - 用于使用Moq模拟HttpClient和IHttpClientFactory的扩展方法集。\r\n* [NBomber](https://github.com/PragmaticFlow/NBomber) - 用于Pull和Push场景的非常简单的负载测试框架。它完全由F#编写，目标是.NET Core和完整的.NET Framework。\r\n* [NBuilder](https://github.com/garethdown44/nbuilder) - 快速生成测试对象\r\n* [NCrunch](https://www.ncrunch.net/) - Visual Studio的自动化连续和并发测试工具。【付费】\r\n* [NFluent](http://www.n-fluent.net) - NFluent是一个断言库，旨在提高您的.NET TDD体验。\r\n* [NSubstitute](https://nsubstitute.github.io/) - 适用于.NET模拟框架的友好替代品\r\n* [NUnit](https://github.com/nunit/nunit) - 适用于所有.NET语言的单元测试框架\r\n* [Rhino Mocks](https://github.com/ayende/rhino-mocks) - 用于.NET的动态模拟框架\r\n* [Testcontainers](https://github.com/testcontainers/testcontainers-dotnet) - 用于所有兼容的.NET Standard版本的丢弃Docker容器实例的测试库。\r\n* [SecTester](https://github.com/NeuraLegion/sectester-net) - SecTester是一个新工具，将 [Bright](https://brightsec.com/) 企业级扫描引擎直接集成到您的集成或e2e测试中。【专有】【免费】\r\n* [Shouldly](https://github.com/shouldly/shouldly) - Shouldly是一个断言框架，侧重于在断言失败时提供出色的错误消息，同时保持简单和简洁。\r\n* [Snapshooter](https://github.com/SwissLife-OSS/snapshooter) - 适用于.NET Core和.NET Framework的快照测试工具\r\n* [SpecFlow](https://github.com/SpecFlowOSS/SpecFlow) - 将业务需求与.NET代码绑定\r\n* [Stryker.NET](https://github.com/stryker-mutator/stryker-net) - 适用于.NET Core项目的突变测试\r\n* [xBehave.net](https://github.com/xbehave/xbehave.net) -  用自然语言描述您的测试的xUnit.net扩展。\r\n* [xUnit.net](https://github.com/xunit/xunit) - 用于.NET Framework的免费、开源、面向社区的单元测试工具。\r\n* [Canopy](https://github.com/lefthandedgoat/canopy) -  Canopy是一个免费的、开源的F# Web自动化和测试框架\r\n* [Expecto](https://github.com/haf/expecto) - 适用于F#的平滑测试框架，测试作为值。单元测试、属性基础测试、性能测试和压力测试。\r\n* [ReportPortal](https://reportportal.io) - 基于AI的测试自动化仪表板。获取、聚合和分析测试报告，确定发布健康状况。\r\n* [Compare-Net-Objects](https://github.com/GregFinzer/Compare-Net-Objects) - 使用反射对任何两个.NET对象进行深度比较。显示两个对象之间的差异。\r\n* [Verify](https://github.com/VerifyTests/Verify) - 验证工具，可实现对复杂模型和文档的简单批准。\r\n* [CsCheck](https://github.com/AnthonyLloyd/CsCheck) -  C#的随机测试库，包括并发、因果分析、回归和性能测试。','测试','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,98),('85e07931-38d0-4a42-7541-3a0ff53ad54c',0,'\r\n**1、如何保证RabbitMQ消息的顺序性？**\r\n\r\n答：\r\n\r\n- 拆分多个 queue(消息队列)，每个 queue(消息队列) 一个 consumer(消费者)，就是多一些 queue (消息队列)而已，确实是麻烦点；\r\n- 或者就一个 queue (消息队列)但是对应一个 consumer(消费者)，然后这个 consumer(消费者)内部用内存队列做排队，然后分发给底层不同的 worker 来处理。\r\n\r\n**2、消息如何分发？**\r\n\r\n答：\r\n\r\n- 若该队列至少有一个消费者订阅，消息将以循环（round-robin）的方式发送给消费者。每条消息只会分发给一个订阅的消费者（前提是消费者能够正常处理消息并进行确认）。通过路由可实现多消费的功能\r\n\r\n**3、消息基于什么传输？**\r\n\r\n答：\r\n\r\n- 由于 TCP 连接的创建和销毁开销较大，且并发数受系统资源限制，会造成性能瓶颈。RabbitMQ 使用信道的方式来传输数据。信道是建立在真实的 TCP 连接内的虚拟连接，且每条 TCP 连接上的信道数量没有限制。\r\n\r\n**4、如何保证消息不被重复消费？或者说，如何保证消息消费时的幂等性？**\r\n\r\n答：\r\n\r\n- 先说为什么会重复消费：正常情况下，消费者在消费消息的时候，消费完毕后，会发送一个确认消息给消息队列，消息队列就知道该消息被消费了，就会将该消息从消息队列中删除；\r\n- 但是因为网络传输等等故障，确认信息没有传送到消息队列，导致消息队列不知道自己已经消费过该消息了，再次将消息分发给其他的消费者。\r\n- 针对以上问题，一个解决思路是：保证消息的唯一性，就算是多次传输，不要让消息的多次消费带来影响；保证消息等幂性；\r\n  - 比如：在写入消息队列的数据做唯一标示，消费消息时，根据唯一标识判断是否消费过；\r\n  - 假设你有个系统，消费一条消息就往数据库里插入一条数据，要是你一个消息重复两次，你不就插入了两条，这数据不就错了？但是你要是消费到第二次的时候，自己判断一下是否已经消费过了，若是就直接扔了，这样不就保留了一条数据，从而保证了数据的正确性。\r\n\r\n**5、如何确保消息正确地发送至 RabbitMQ？ 如何确保消息接收方消费了消息？**\r\n\r\n答：发送方确认模式\r\n\r\n- 将信道设置成 confirm 模式（发送方确认模式），则所有在信道上发布的消息都会被指派一个唯一的 ID。\r\n- 一旦消息被投递到目的队列后，或者消息被写入磁盘后（可持久化的消息），信道会发送一个确认给生产者（包含消息唯一 ID）。\r\n- 如果 RabbitMQ 发生内部错误从而导致消息丢失，会发送一条 nack（notacknowledged，未确认）消息。\r\n- 发送方确认模式是异步的，生产者应用程序在等待确认的同时，可以继续发送消息。当确认消息到达生产者应用程序，生产者应用程序的回调方法就会被触发来处理确认消息。\r\n\r\n接收方确认机制\r\n\r\n- 消费者接收每一条消息后都必须进行确认（消息接收和消息确认是两个不同操作）。只有消费者确认了消息，RabbitMQ 才能安全地把消息从队列中删除。\r\n- 这里并没有用到超时机制，RabbitMQ 仅通过 Consumer 的连接中断来确认是否需要重新发送消息。也就是说，只要连接不中断，RabbitMQ 给了 Consumer 足够长的时间来处理消息。保证数据的最终一致性；\r\n\r\n下面罗列几种特殊情况\r\n\r\n- 如果消费者接收到消息，在确认之前断开了连接或取消订阅，RabbitMQ 会认为消息没有被分发，然后重新分发给下一个订阅的消费者。（可能存在消息重复消费的隐患，需要去重）\r\n- 如果消费者接收到消息却没有确认消息，连接也未断开，则 RabbitMQ 认为该消费者繁忙，将不会给该消费者分发更多的消息。\r\n\r\n**6、如何保证RabbitMQ消息的可靠传输？**\r\n\r\n答：\r\n\r\n- 消息不可靠的情况可能是消息丢失，劫持等原因；\r\n- 丢失又分为：生产者丢失消息、消息列表丢失消息、消费者丢失消息；\r\n\r\n产者丢失消息\r\n\r\n1. **生产者丢失消息**：从生产者弄丢数据这个角度来看，RabbitMQ提供transaction和confirm模式来确保生产者不丢消息；\r\n\r\n   transaction机制就是说：发送消息前，开启事务（channel.txSelect()）,然后发送消息，如果发送过程中出现什么异常，事务就会回滚（channel.txRollback()）,如果发送成功则提交事务（channel.txCommit()）。然而，这种方式有个缺点：吞吐量下降；\r\n\r\n   confirm模式用的居多：一旦channel进入confirm模式，所有在该信道上发布的消息都将会被指派一个唯一的ID（从1开始），一旦消息被投递到所有匹配的队列之后；\r\n\r\n   rabbitMQ就会发送一个ACK给生产者（包含消息的唯一ID），这就使得生产者知道消息已经正确到达目的队列了；\r\n\r\n   如果rabbitMQ没能处理该消息，则会发送一个Nack消息给你，你可以进行重试操作。\r\n\r\n消息队列丢数据\r\n\r\n1. **消息队列丢数据**：消息持久化。\r\n\r\n   处理消息队列丢数据的情况，一般是开启持久化磁盘的配置。\r\n\r\n   这个持久化配置可以和confirm机制配合使用，你可以在消息持久化磁盘后，再给生产者发送一个Ack信号。\r\n\r\n   这样，如果消息持久化磁盘之前，rabbitMQ阵亡了，那么生产者收不到Ack信号，生产者会自动重发。\r\n\r\n   那么如何持久化呢？\r\n\r\n   这里顺便说一下吧，其实也很容易，就下面两步\r\n\r\n   1. 将queue的持久化标识durable设置为true,则代表是一个持久的队列\r\n   2. 发送消息的时候将deliveryMode=2\r\n\r\n   这样设置以后，即使rabbitMQ挂了，重启后也能恢复数据\r\n\r\n消费者丢失消息\r\n\r\n1. **消费者丢失消息**：消费者丢数据一般是因为采用了自动确认消息模式，改为手动确认消息即可！\r\n\r\n   消费者在收到消息之后，处理消息之前，会自动回复RabbitMQ已收到消息；\r\n\r\n   如果这时处理消息失败，就会丢失该消息；\r\n\r\n   解决方案：处理消息成功后，手动回复确认消息。\r\n\r\n**7、为什么不应该对所有的 message 都使用持久化机制？**\r\n\r\n答：\r\n\r\n- 首先，必然导致性能的下降，因为写磁盘比写 RAM 慢的多，message 的吞吐量可能有 10 倍的差距。\r\n- 其次，message 的持久化机制用在 RabbitMQ 的内置 cluster 方案时会出现“坑爹”问题。矛盾点在于，若 message 设置了 persistent 属性，但 queue 未设置 durable 属性，那么当该 queue 的 owner node 出现异常后，在未重建该 queue 前，发往该 queue 的 message 将被 blackholed ；若 message 设置了 persistent 属性，同时 queue 也设置了 durable 属性，那么当 queue 的 owner node 异常且无法重启的情况下，则该 queue 无法在其他 node 上重建，只能等待其 owner node 重启后，才能恢复该 queue 的使用，而在这段时间内发送给该 queue 的 message 将被 blackholed 。\r\n- 所以，是否要对 message 进行持久化，需要综合考虑性能需要，以及可能遇到的问题。若想达到 100,000 条/秒以上的消息吞吐量（单 RabbitMQ 服务器），则要么使用其他的方式来确保 message 的可靠 delivery ，要么使用非常快速的存储系统以支持全持久化（例如使用 SSD）。另外一种处理原则是：仅对关键消息作持久化处理（根据业务重要程度），且应该保证关键消息的量不会导致性能瓶颈。\r\n\r\n**8、如何保证高可用的？RabbitMQ 的集群**\r\n\r\n答：\r\n\r\n- RabbitMQ 是比较有代表性的，因为是基于主从（非分布式）做高可用性的，我们就以 RabbitMQ 为例子讲解第一种 MQ 的高可用性怎么实现。RabbitMQ 有三种模式：单机模式、普通集群模式、镜像集群模式。\r\n\r\n单机模式\r\n\r\n1. **单机模式**，就是 Demo 级别的，一般就是你本地启动了玩玩儿的?，没人生产用单机模式\r\n\r\n普通集群模式\r\n\r\n1. 普通集群模式\r\n\r\n   ：\r\n\r\n   - 意思就是在多台机器上启动多个 RabbitMQ 实例，每个机器启动一个。\r\n   - 你创建的 queue，只会放在一个 RabbitMQ 实例上，但是每个实例都同步 queue 的元数据（元数据可以认为是 queue 的一些配置信息，通过元数据，可以找到 queue 所在实例）。你消费的时候，实际上如果连接到了另外一个实例，那么那个实例会从 queue 所在实例上拉取数据过来。这方案主要是提高吞吐量的，就是说让集群中多个节点来服务某个 queue 的读写操作。\r\n\r\n像集群模式\r\n\r\n1. **镜像集群模式**：\r\n   - 这种模式，才是所谓的 RabbitMQ 的高可用模式。跟普通集群模式不一样的是，在镜像集群模式下，你创建的 queue，无论元数据还是 queue 里的消息都会存在于多个实例上，就是说，每个 RabbitMQ 节点都有这个 queue 的一个完整镜像，包含 queue 的全部数据的意思。然后每次你写消息到 queue 的时候，都会自动把消息同步到多个实例的 queue 上。RabbitMQ 有很好的管理控制台，就是在后台新增一个策略，这个策略是镜像集群模式的策略，指定的时候是可以要求数据同步到所有节点的，也可以要求同步到指定数量的节点，再次创建 queue 的时候，应用这个策略，就会自动将数据同步到其他的节点上去了。\r\n   - 这样的好处在于，你任何一个机器宕机了，没事儿，其它机器（节点）还包含了这个 queue 的完整数据，别的 consumer 都可以到其它节点上去消费数据。坏处在于，第一，这个性能开销也太大了吧，消息需要同步到所有机器上，导致网络带宽压力和消耗很重！RabbitMQ 一个 queue 的数据都是放在一个节点里的，镜像集群下，也是每个节点都放这个 queue 的完整数据。\r\n\r\n**8、如何解决消息队列的延时以及过期失效问题？消息队列满了以后该怎么处理？有几百万消息持续积压几小时，说说怎么解决？**\r\n\r\n答：\r\n\r\n- 消息积压处理办法：临时紧急扩容：\r\n- 先修复 consumer 的问题，确保其恢复消费速度，然后将现有 cnosumer 都停掉。\r\n  新建一个 topic，partition 是原来的 10 倍，临时建立好原先 10 倍的 queue 数量。\r\n  然后写一个临时的分发数据的 consumer 程序，这个程序部署上去消费积压的数据，消费之后不做耗时的处理，直接均匀轮询写入临时建立好的 10 倍数量的 queue。\r\n  接着临时征用 10 倍的机器来部署 consumer，每一批 consumer 消费一个临时 queue 的数据。这种做法相当于是临时将 queue 资源和 consumer 资源扩大 10 倍，以正常的 10 倍速度来消费数据。\r\n  等快速消费完积压数据之后，得恢复原先部署的架构，重新用原先的 consumer 机器来消费消息。\r\n  MQ中消息失效：假设你用的是 RabbitMQ，RabbtiMQ 是可以设置过期时间的，也就是 TTL。如果消息在 queue 中积压超过一定的时间就会被 RabbitMQ 给清理掉，这个数据就没了。那这就是第二个坑了。这就不是说数据会大量积压在 mq 里，而是大量的数据会直接搞丢。我们可以采取一个方案，就是批量重导，这个我们之前线上也有类似的场景干过。就是大量积压的时候，我们当时就直接丢弃数据了，然后等过了高峰期以后，比如大家一起喝咖啡熬夜到晚上12点以后，用户都睡觉了。这个时候我们就开始写程序，将丢失的那批数据，写个临时程序，一点一点的查出来，然后重新灌入 mq 里面去，把白天丢的数据给他补回来。也只能是这样了。假设 1 万个订单积压在 mq 里面，没有处理，其中 1000 个订单都丢了，你只能手动写程序把那 1000 个订单给查出来，手动发到 mq 里去再补一次。\r\n- mq消息队列块满了：如果消息积压在 mq 里，你很长时间都没有处理掉，此时导致 mq 都快写满了，咋办？这个还有别的办法吗？没有，谁让你第一个方案执行的太慢了，你临时写程序，接入数据来消费，消费一个丢弃一个，都不要了，快速消费掉所有的消息。然后走第二个方案，到了晚上再补数据吧。\r\n\r\n**9、消息的重复问题**\r\n\r\n答：\r\n\r\n- 造成消息重复的根本原因是：网络不可达。\r\n- 所以解决这个问题的办法就是绕过这个问题。那么问题就变成了：如果消费端收到两条一样的消息，应该怎样处理？\r\n- 消费端处理消息的业务逻辑保持幂等性。只要保持幂等性，不管来多少条重复消息，最后处理的结果都一样。保证每条消息都有唯一编号且保证消息处理成功与去重表的日志同时出现。利用一张日志表来记录已经处理成功的消息的 ID，如果新到的消息 ID 已经在日志表中，那么就不再处理这条消息。\r\n\r\n**10、rabbitmq 的使用场景**\r\n\r\n答：\r\n\r\n（1）服务间异步通信\r\n\r\n（2）顺序消费\r\n\r\n（3）定时任务\r\n\r\n（4）请求削峰\r\n\r\n**11、消息队列有什么优缺点？RabbitMQ有什么优缺点？**\r\n\r\n答：\r\n\r\n- 优点上面已经说了，就是**在特殊场景下有其对应的好处**，**解耦**、**异步**、**削峰**。\r\n- 缺点有以下几个：\r\n\r\n1. **系统可用性降低**\r\n   本来系统运行好好的，现在你非要加入个消息队列进去，那消息队列挂了，你的系统不是呵呵了。因此，系统可用性会降低；\r\n2. **系统复杂度提高**\r\n   加入了消息队列，要多考虑很多方面的问题，比如：一致性问题、如何保证消息不被重复消费、如何保证消息可靠性传输等。因此，需要考虑的东西更多，复杂性增大。\r\n3. **一致性问题**\r\n   A 系统处理完了直接返回成功了，人都以为你这个请求就成功了；但是问题是，要是 BCD 三个系统那里，BD 两个系统写库成功了，结果 C 系统写库失败了，咋整？你这数据就不一致了。','RabbitMQ面试题','f6462b48-9601-0253-6450-3a0ff538dfa4','00000000-0000-0000-0000-000000000000','2024-01-07 16:33:14','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,7),('86bca130-e2f5-1f92-fde5-3a0ff53f8681',0,'\r\n- [Wix Toolset](https://wixtoolset.org/)  - 创建Windows安装体验的最强大工具集。 \r\n- [Squirrel](https://github.com/squirrel/squirrel.windows)  - Squirrel既是一组工具，又是一个库，用于完全管理桌面Windows应用程序的安装和更新。 \r\n- [Chocolatey](https://github.com/chocolatey/choco)  - 类似于`yum`或`apt-get`，但适用于Windows。 \r\n- [Wax](https://marketplace.visualstudio.com/items?itemName=TomEnglert.Wax)  - 用于WiX项目的交互式编辑器。 \r\n- [Onova](https://github.com/Tyrrrz/Onova)  - 用于桌面应用程序的无主见自动更新框架。','安装工具','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,56),('874c5ab4-a567-ef2b-ea37-3a0fe9b5b449',0,'在C#编程语言中，字符串（String）是一种常用的数据类型，它用于存储一系列的字符。字符串是不可变的，这意味着一旦创建，就不能更改其值。本文将介绍如何在C#中创建、操作和使用字符串。\r\n## 创建字符串\r\n\r\n在C#中，可以使用字符串字面量或字符串构造函数来创建字符串。字符串字面量是由一对双引号包围的字符序列，如下所示：\r\n\r\n```csharp\r\n\r\nstring str1 = \"Hello, World!\";\r\n```\r\n\r\n\r\n\r\n字符串构造函数可以通过传递字符数组或字符指针来创建字符串，如下所示：\r\n\r\n```csharp\r\n\r\nchar[] chars = {''H'', ''e'', ''l'', ''l'', ''o'', '','', '' '', ''W'', ''o'', ''r'', ''l'', ''d'', ''!''};\r\nstring str2 = new string(chars);\r\n```\r\n\r\n\r\n## 操作字符串\r\n\r\nC#提供了许多方法来操作字符串。以下是一些常见的字符串操作：\r\n### 连接字符串\r\n\r\n使用\"+\"运算符或String.Concat方法可以连接两个或多个字符串。示例如下：\r\n\r\n```csharp\r\n\r\nstring str3 = \"Hello\";\r\nstring str4 = \"World\";\r\nstring str5 = str3 + \", \" + str4 + \"!\";\r\nstring str6 = String.Concat(str3, \", \", str4, \"!\");\r\n```\r\n\r\n\r\n### 获取字符串长度\r\n\r\n使用String.Length属性可以获取字符串的长度，即其中包含的字符数。示例如下：\r\n\r\n```csharp\r\n\r\nstring str7 = \"Hello, World!\";\r\nint len = str7.Length;\r\n```\r\n\r\n\r\n### 截取字符串\r\n\r\n使用String.Substring方法可以截取字符串的一部分。该方法接受两个参数：起始索引和长度。示例如下：\r\n\r\n```csharp\r\n\r\nstring str8 = \"Hello, World!\";\r\nstring substr1 = str8.Substring(0, 5);   // substr1的值为\"Hello,\"\r\nstring substr2 = str8.Substring(7);      // substr2的值为\"World!\"\r\n```\r\n\r\n\r\n### 替换字符串\r\n\r\n使用String.Replace方法可以将字符串中的一部分替换为另一个字符串。该方法接受两个参数：要替换的子字符串和替换后的字符串。示例如下：\r\n\r\n```csharp\r\n\r\nstring str9 = \"Hello, World!\";\r\nstring newStr = str9.Replace(\"World\", \"C#\");\r\n```\r\n\r\n\r\n## 字符串格式化\r\n\r\n在C#中，可以使用字符串插值（String Interpolation）或String.Format方法来格式化字符串。字符串插值使用\"$\"符号和花括号来将表达式嵌入到字符串中。示例如下：\r\n\r\n```csharp\r\n\r\nstring name = \"Alice\";\r\nint age = 25;\r\nstring str10 = $\"My name is {name} and I am {age} years old.\";\r\n```\r\n\r\n\r\n\r\nString.Format方法使用花括号和占位符来指定格式，示例如下：\r\n\r\n```csharp\r\n\r\nstring name2 = \"Bob\";\r\nint age2 = 30;\r\nstring str11 = String.Format(\"My name is {0} and I am {1} years old.\", name2, age2);\r\n```\r\n\r\n\r\n## 总结\r\n\r\n字符串是C#编程语言中的一个重要数据类型，可以通过字符串字面量或字符串构造函数来创建字符串。C#提供了许多方法来操作字符串，包括连接字符串、获取字符串长度、截取字符串和替换字符串等。此外，C#还提供了字符串格式化的功能，可以使用字符串插值或String.Format方法来格式化字符串。对于C#程序员来说，熟练掌握字符串的使用非常重要。\r\n\r\n## 示例代码\r\n\r\n下面是一个完整的示例代码，演示了如何创建、操作和格式化字符串：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nclass Program {\r\n    static void Main(string[] args) {\r\n        // 创建字符串\r\n        string str1 = \"Hello, World!\";\r\n        char[] chars = {''H'', ''e'', ''l'', ''l'', ''o'', '','', '' '', ''W'', ''o'', ''r'', ''l'', ''d'', ''!''};\r\n        string str2 = new string(chars);\r\n\r\n        // 连接字符串\r\n        string str3 = \"Hello\";\r\n        string str4 = \"World\";\r\n        string str5 = str3 + \", \" + str4 + \"!\";\r\n        string str6 = String.Concat(str3, \", \", str4, \"!\");\r\n\r\n        // 获取字符串长度\r\n        string str7 = \"Hello, World!\";\r\n        int len = str7.Length;\r\n\r\n        // 截取字符串\r\n        string str8 = \"Hello, World!\";\r\n        string substr1 = str8.Substring(0, 5);   // substr1的值为\"Hello,\"\r\n        string substr2 = str8.Substring(7);      // substr2的值为\"World!\"\r\n\r\n        // 替换字符串\r\n        string str9 = \"Hello, World!\";\r\n        string newStr = str9.Replace(\"World\", \"C#\");\r\n\r\n        // 字符串格式化\r\n        string name = \"Alice\";\r\n        int age = 25;\r\n        string str10 = $\"My name is {name} and I am {age} years old.\";\r\n\r\n        string name2 = \"Bob\";\r\n        int age2 = 30;\r\n        string str11 = String.Format(\"My name is {0} and I am {1} years old.\", name2, age2);\r\n\r\n        // 输出结果\r\n        Console.WriteLine(str1);\r\n        Console.WriteLine(str2);\r\n        Console.WriteLine(str5);\r\n        Console.WriteLine(str6);\r\n        Console.WriteLine(len);\r\n        Console.WriteLine(substr1);\r\n        Console.WriteLine(substr2);\r\n        Console.WriteLine(newStr);\r\n        Console.WriteLine(str10);\r\n        Console.WriteLine(str11);\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n输出结果：\r\n\r\n```csharp\r\n\r\nHello, World!\r\nHello, World!\r\nHello, World!\r\nHello, World!\r\n13\r\nHello,\r\nWorld!\r\nHello, C#!\r\nMy name is Alice and I am 25 years old.\r\nMy name is Bob and I am 30 years old.\r\n```\r\n','C# 字符串（String）','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,16),('87bd6bb3-8307-a074-fbb5-3a0fe7845287',1,'C# 是一种现代化的面向对象编程语言，主要用于 Windows 平台的开发。在 C# 中，程序结构是指程序的组织方式和代码的组成部分，包括命名空间、类、方法等。\r\n## 命名空间\r\n\r\n命名空间是 C# 中用来组织代码的一种机制。它可以包含类、结构体、枚举、委托等类型，并且可以嵌套其他命名空间。命名空间的定义通常放在源文件的顶部，格式如下：\r\n\r\n```csharp\r\n\r\nnamespace MyNamespace\r\n{\r\n    // 类、结构体、枚举、委托等类型定义\r\n}\r\n```\r\n\r\n\r\n\r\n其中，`MyNamespace` 是命名空间的名称，可以根据实际需要自定义。如果在一个程序中定义了多个命名空间，可以使用 `using` 关键字引用它们，例如：\r\n\r\n```csharp\r\n\r\nusing System;\r\nusing MyNamespace;\r\n```\r\n\r\n\r\n## 类\r\n\r\n类是 C# 中最基本的组织代码的单元，它用来定义对象的属性和方法。一个类可以包含多个属性和方法，它们被称为类的成员。类的定义格式如下：\r\n\r\n```csharp\r\n\r\nclass MyClass\r\n{\r\n    // 类的成员定义\r\n}\r\n```\r\n\r\n\r\n\r\n其中，`MyClass` 是类的名称，也可以根据实际需要自定义。类的成员包括字段、属性、方法和事件等，它们的访问权限可以使用 `public`、`private`、`protected` 和 `internal` 关键字进行控制。\r\n## 方法\r\n\r\n方法是 C# 中用来执行特定操作的代码块，它可以带有参数和返回值。方法的定义格式如下：\r\n\r\n```csharp\r\n\r\npublic void MyMethod(int arg1, string arg2)\r\n{\r\n    // 方法体\r\n}\r\n```\r\n\r\n\r\n\r\n其中，`public` 是访问修饰符，表示该方法可以被其他类访问；`void` 表示该方法没有返回值；`MyMethod` 是方法的名称，可以根据实际需要自定义；`int arg1` 和 `string arg2` 是方法的参数，它们的类型需要在参数名称之前声明。\r\n## 控制语句\r\n\r\nC# 中有多种控制语句可以用来控制程序的执行流程，包括条件语句、循环语句和跳转语句等。\r\n### 条件语句\r\n\r\n条件语句用来根据条件判断执行不同的代码块。C# 中的条件语句包括 `if`、`else` 和 `switch` 语句，例如：\r\n\r\n```csharp\r\n\r\nif (condition)\r\n{\r\n    // 条件为真时执行的代码\r\n}\r\nelse\r\n{\r\n    // 条件为假时执行的代码\r\n}\r\n\r\nswitch (variable)\r\n{\r\n    case value1:\r\n        // 变量等于 value1 时执行的代码\r\n        break;\r\n    case value2:\r\n        // 变量等于 value2 时执行的代码\r\n        break;\r\n    default:\r\n        // 变量不等于 value1 或 value2 时执行的代码\r\n        break;\r\n```\r\n\r\n\r\n\r\n}\r\n\r\n```arduino\r\n\r\n### 循环语句\r\n\r\n循环语句用来多次执行相同的代码块。C# 中的循环语句包括 `while`、`do-while` 和 `for` 语句，例如：\r\n\r\n```csharp\r\nwhile (condition)\r\n{\r\n    // 循环条件为真时执行的代码\r\n}\r\n\r\ndo\r\n{\r\n    // 至少执行一次的循环代码\r\n} while (condition);\r\n\r\nfor (int i = 0; i < 10; i++)\r\n{\r\n    // 执行 10 次的循环代码\r\n}\r\n```\r\n\r\n\r\n### 跳转语句\r\n\r\n跳转语句用来改变程序的执行流程。C# 中的跳转语句包括 `break`、`continue` 和 `return` 语句，例如：\r\n\r\n```csharp\r\n\r\nwhile (true)\r\n{\r\n    if (condition)\r\n    {\r\n        break; // 跳出循环\r\n    }\r\n    if (otherCondition)\r\n    {\r\n        continue; // 继续循环下一次迭代\r\n    }\r\n}\r\n\r\npublic int MyMethod()\r\n{\r\n    return 0; // 返回一个整数值\r\n}\r\n```\r\n\r\n\r\n## 异常处理\r\n\r\n异常处理是指在程序运行过程中发生错误时，采取一些措施来保证程序正常运行。C# 中的异常处理机制使用 `try`、`catch` 和 `finally` 语句来实现，例如：\r\n\r\n```csharp\r\n\r\ntry\r\n{\r\n    // 可能会抛出异常的代码\r\n}\r\ncatch (Exception ex)\r\n{\r\n    // 处理异常的代码\r\n}\r\nfinally\r\n{\r\n    // 无论是否抛出异常都会执行的代码\r\n}\r\n```\r\n\r\n\r\n\r\n其中，`try` 语句包含可能会抛出异常的代码块；`catch` 语句用来捕获并处理异常，`Exception ex` 表示要捕获的异常类型，可以根据实际需要自定义；`finally` 语句包含无论是否抛出异常都会执行的代码块。\r\n## 总结\r\n\r\nC# 程序结构包括命名空间、类、方法、控制语句和异常处理等组成部分。掌握 C# 程序结构对于编写高质量的 C# 程序非常重要，希望本文能够帮助您更好地理解和掌握 C# 程序结构。\r\n','C# 程序结构','67bbbd51-8f39-6bc3-46fe-3a0fa9fe8385','00000000-0000-0000-0000-000000000000','2024-01-05 00:38:49','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','2024-01-05 00:39:19',0),('8865edcd-2f0e-6648-9c34-3a0ff58d7dbd',0,'**作者的话**\n读取D盘文件，随机点名，方便快捷\n其实没什么用，做这个原因还得从一个蝙蝠说起\n\n**效果截图**\n![image.png](/prod-api/file/c369df5a-b111-6b0e-0859-3a0ff58d1db9/true)\n![image.png](/prod-api/file/a25e4271-8563-aceb-9dfc-3a0ff58d2f8c/true)\n![image.png](/prod-api/file/d9480ed6-2b7e-5226-18c2-3a0ff58d64f6/true)\n\n**源代码**\n已丢失\n并未上传服务器','AspWebform--随机点名系统','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 18:03:31','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('8a7c39bf-fb17-ef90-bda9-3a0ff53ad54c',0,'\r\n**1、Redis 有哪几种数据淘汰策略？**\r\n\r\n答：\r\n\r\n- noeviction:返回错误当内存限制达到，并且客户端尝试执行会让更多内存被使用的命令。\r\n- allkeys-lru: 尝试回收最少使用的键（LRU），使得新添加的数据有空间存放。\r\n- volatile-lru: 尝试回收最少使用的键（LRU），但仅限于在过期集合的键,使得新添加的数据有空间存放。\r\n- allkeys-random: 回收随机的键使得新添加的数据有空间存放。\r\n- volatile-random: 回收随机的键使得新添加的数据有空间存放，但仅限于在过期集合的键。\r\n- volatile-ttl: 回收在过期集合的键，并且优先回收存活时间（TTL）较短的键,使得新添加的数据有空间存放。\r\n\r\n**2、Redis 一个字符串类型的值能存储最大容量是多少？**\r\n\r\n512M\r\n\r\n**3、为什么 Redis 需要把所有数据放到内存中？**\r\n\r\n答：Redis 为了达到最快的读写速度将数据都读到内存中，并通过异步的方式将数据写入磁盘。\r\n\r\n所以 redis 具有快速和数据持久化的特征，如果不将数据放在内存中，磁盘 I/O 速度为严重影响 redis 的性能。\r\n\r\n在内存越来越便宜的今天，redis 将会越来越受欢迎， 如果设置了最大使用的内存，则数据**已有记录数达到内存限值后不能继续插入新值。**\r\n\r\n**4、Redis 集群方案应该怎么做？都有哪些方案？**\r\n\r\n- codis\r\n- 目前用的最多的集群方案，基本和 twemproxy 一致的效果，但它支持在节点数量改变情况下，旧节点数据可恢复到新 hash 节点。\r\n- redis cluster3.0 自带的集群，特点在于他的分布式算法不是一致性 hash，而是 hash 槽的概念，以及自身支持节点设置从节点。\r\n- 在业务代码层实现，起几个毫无关联的 redis 实例，在代码层，对 key 进行 hash 计算，然后去对应的redis 实例操作数据。这种方式对 hash 层代码要求比较高，考虑部分包括，节点失效后的替代算法方案，数据震荡后的自动脚本恢复，实例的监控，等等。\r\n\r\n**5、Redis 集群方案什么情况下会导致整个集群不可用？**\r\n\r\n答：有 A，B，C 三个节点的集群,在没有复制模型的情况下,如果节点 B 失败了，那么整个集群就会以为缺少5501-11000 这个范围的槽而不可用。\r\n\r\n**6、MySQL 里有 2000w 数据，redis 中只存 20w 的数据，如何保证 redis 中的数据都是热点数据？**\r\n\r\n答：redis 内存数据集大小上升到一定大小的时候，就会施行数据淘汰策略。\r\n\r\n**7、Redis 有哪些适合的场景？**\r\n\r\n**会话缓存（Session Cache）**\r\n\r\n**全页缓存（FPC）**\r\n\r\n**队列**\r\n\r\n**排行榜/计数器**\r\n\r\n**发布/订阅**\r\n\r\n**8、说说 Redis 哈希槽的概念？**\r\n\r\n答：Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念，Redis 集群有 16384 个哈希槽，每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽，集群的每个节点负责一部分 hash 槽。\r\n\r\n**9、Redis 集群的主从复制模型是怎样的？**\r\n\r\n答：为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用，所以集群使用了主从复制模型,每个节点都会有 N-1 个复制品.\r\n\r\n**10、Redis 集群会有写操作丢失吗？为什么？**\r\n\r\n答：Redis 并不能保证数据的强一致性，这意味着在实际中集群在特定的条件下可能会丢失写操作。\r\n\r\n**11、Redis 集群之间是如何复制的？**\r\n\r\n答：异步复制\r\n\r\n**12、Redis 集群最大节点个数是多少？**\r\n\r\n答：16384 个\r\n\r\n**13、Redis 集群如何选择数据库？**\r\n\r\n答：Redis 集群目前无法做数据库选择，默认在 0 数据库。\r\n\r\n**14、Redis 如何做内存优化？**\r\n\r\n答：尽可能使用散列表（hashes），散列表（是说散列表里面存储的数少）使用的内存非常小，所以你应该尽可能的将你的数据模型抽象到一个散列表里面。\r\n\r\n比如你的 web 系统中有一个用户对象，不要为这个用户的名称，姓氏，邮箱，密码设置单独的 key,而是应该把这个用户的所有信息存储到一张散列表里面。\r\n\r\n**15、什么是缓存穿透？如何避免？什么是缓存雪崩？何如避免？**\r\n\r\n**缓存穿透**\r\n\r\n一般的缓存系统，都是按照 key 去缓存查询，如果不存在对应的 value，就应该去后端系统查找（比如DB）。一些恶意的请求会故意查询不存在的 key,请求量很大，就会对后端系统造成很大的压力。这就叫做缓存穿透。\r\n\r\n**如何避免？**\r\n\r\n> 1：对查询结果为空的情况也进行缓存，缓存时间设置短一点，或者该 key 对应的数据 insert 了之后清理缓存。\r\n>\r\n> 2：对一定不存在的 key 进行过滤。可以把所有的可能存在的 key 放到一个大的 Bitmap 中，查询时通过该 bitmap 过滤。\r\n\r\n**缓存雪崩**\r\n\r\n当缓存服务器重启或者大量缓存集中在某一个时间段失效，这样在失效的时候，会给后端系统带来很大压力。导致系统崩溃。\r\n\r\n**如何避免？**\r\n\r\n> 1：在缓存失效后，通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个 key 只允许一个线程查询数据和写缓存，其他线程等待。\r\n>\r\n> 2：做二级缓存，A1 为原始缓存，A2 为拷贝缓存，A1 失效时，可以访问 A2，A1 缓存失效时间设置为短期，A2 设置为长期\r\n>\r\n> 3：不同的 key，设置不同的过期时间，让缓存失效的时间点尽量均匀\r\n\r\n**16、Redis 回收进程如何工作的？**\r\n\r\n答：一个客户端运行了新的命令，添加了新的数据。Redi 检查内存使用情况，如果大于 maxmemory 的限制, 则根据设定好的策略进行回收。一个新的命令被执行，等等。\r\n\r\n所以我们不断地穿越内存限制的边界，通过不断达到边界然后不断地回收回到边界以下。\r\n\r\n如果一个命令的结果导致大量内存被使用（例如很大的集合的交集保存到一个新的键），不用多久内存限制就会被这个内存使用量超越。\r\n\r\n**17、使用过 Redis 分布式锁么，它是怎么实现的？**\r\n\r\n答：先拿 setnx 来争抢锁，抢到之后，再用 expire 给锁加一个过期时间防止锁忘记了释放。\r\n\r\n如果在 setnx 之后执行 expire 之前进程意外 crash 或者要重启维护了，那会怎么样？\r\n\r\nset 指令有非常复杂的参数，这个应该是可以同时把 setnx 和 expire 合成一条指令来用的！\r\n\r\n**18、使用过 Redis 做异步队列么，你是怎么用的？有什么缺点？**\r\n\r\n答：般使用 list 结构作为队列，rpush 生产消息，lpop 消费消息。当 lpop 没有消息的时候，要适当 sleep一会再重试。\r\n\r\n**缺点：**\r\n\r\n- 在消费者下线的情况下，生产的消息会丢失，得使用专业的消息队列如 rabbitmq 等。\r\n- 能不能生产一次消费多次呢？\r\n- 使用 pub/sub 主题订阅者模式，可以实现 1:N 的消息队列。','Redis面试题','f6462b48-9601-0253-6450-3a0ff538dfa4','00000000-0000-0000-0000-000000000000','2024-01-07 16:33:14','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,8),('8b32cf4c-84ab-1aac-d310-3a0ff53ad54c',0,'\r\n**1、Mysql 的存储引擎,myisam和innodb的区别。**\r\n\r\n答：\r\n\r\n1.MyISAM 是非事务的存储引擎，适合用于频繁查询的应用。表锁，不会出现死锁，适合小数据，小并发。\r\n\r\n2.innodb是支持事务的存储引擎，合于插入和更新操作比较多的应用，设计合理的话是行锁（最大区别就在锁的级别上），适合大数据，大并发。\r\n\r\n**2、MySQL数据库作发布系统的存储，一天五万条以上的增量，预计运维三年,怎么优化？**\r\n\r\n答：a. 设计良好的数据库结构，允许部分数据冗余，尽量避免join查询，提高效率。\r\nb. 选择合适的表字段数据类型和存储引擎，适当的添加索引。\r\nc. mysql库主从读写分离。\r\nd. 找规律分表，减少单表中的数据量提高查询速度。\r\ne。添加缓存机制，比如memcached，apc等。\r\nf. 不经常改动的页面，生成静态页面。\r\ng. 书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.\r\n\r\n**3、对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题？**\r\n\r\n答：a. 确认服务器是否能支撑当前访问量。\r\nb. 优化数据库访问。\r\nc. 禁止外部访问链接（盗链）, 比如图片盗链。\r\nd. 控制文件下载。\r\ne. 使用不同主机分流。\r\nf. 使用浏览统计软件，了解访问量，有针对性的进行优化。\r\n\r\n**4、锁的优化策略**\r\n\r\n答：① 读写分离\r\n\r\n② 分段加锁\r\n\r\n③ 减少锁持有的时间\r\n\r\n④ 多个线程尽量以相同的顺序去获取资源\r\n\r\n**5、索引的底层实现原理和优化**\r\n\r\n答：B+树，经过优化的B+树\r\n\r\n主要是在所有的叶子结点中增加了指向下一个叶子节点的指针，因此InnoDB建议为大部分表使用默认自增的主键作为主索引。\r\n\r\n**6、 什么情况下设置了索引但无法使用** \r\n\r\n答：① 以“%”开头的LIKE语句，模糊匹配\r\n\r\n② OR语句前后没有同时使用索引\r\n\r\n③ 数据类型出现隐式转化（如varchar不加单引号的话可能会自动转换为int型）\r\n\r\n**7、实践中如何优化MySQL**\r\n\r\n答：① SQL语句及索引的优化\r\n\r\n② 数据库表结构的优化\r\n\r\n③ 系统配置的优化\r\n\r\n④ 硬件的优化\r\n\r\n**8、SQL注入漏洞产生的原因？如何防止？**\r\n\r\n答：SQL注入产生的原因：程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤，导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。\r\n\r\n防止SQL注入的方式：\r\n开启配置文件中的magic_quotes_gpc 和 magic_quotes_runtime设置\r\n\r\n执行sql语句时使用addslashes进行sql语句转换\r\n\r\nSql语句书写尽量不要省略双引号和单引号。\r\n\r\n过滤掉sql语句中的一些关键词：update、insert、delete、select、 * 。\r\n\r\n提高数据库表和字段的命名技巧，对一些重要的字段根据程序的特点命名，取不易被猜到的。\r\n\r\nPhp配置文件中设置register_globals为off,关闭全局变量注册\r\n\r\n控制错误信息，不要在浏览器上输出错误信息，将错误信息写到日志文件中。\r\n\r\n**9、索引的目的是什么？**\r\n\r\n答：快速访问数据表中的特定信息，提高检索速度\r\n\r\n创建唯一性索引，保证数据库表中每一行数据的唯一性。\r\n\r\n加速表和表之间的连接\r\n\r\n使用分组和排序子句进行数据检索时，可以显著减少查询中分组和排序的时间\r\n\r\n**10、索引对数据库系统的负面影响是什么？**\r\n\r\n答：负面影响：\r\n创建索引和维护索引需要耗费时间，这个时间随着数据量的增加而增加；索引需要占用物理空间，不光是表需要占用数据空间，每个索引也需要占用物理空间；当对表进行增、删、改、的时候索引也要动态维护，这样就降低了数据的维护速度。\r\n\r\n**11、为数据表建立索引的原则有哪些？**\r\n\r\n答：在最频繁使用的、用以缩小查询范围的字段上建立索引。\r\n\r\n在频繁使用的、需要排序的字段上建立索引\r\n\r\n**12、什么情况下不宜建立索引？**\r\n\r\n答：对于查询中很少涉及的列或者重复值比较多的列，不宜建立索引。\r\n\r\n对于一些特殊的数据类型，不宜建立索引，比如文本字段（text）等\r\n\r\n**13、主键、外键和索引的区别？**\r\n\r\n答：主键、外键和索引的区别\r\n\r\n定义：\r\n\r\n 主键–唯一标识一条记录，不能有重复的，不允许为空\r\n\r\n 外键–表的外键是另一表的主键, 外键可以有重复的, 可以是空值\r\n\r\n 索引–该字段没有重复值，但可以有一个空值\r\n\r\n作用：\r\n\r\n 主键–用来保证数据完整性\r\n\r\n 外键–用来和其他表建立联系用的\r\n\r\n 索引–是提高查询排序的速度\r\n\r\n个数：\r\n\r\n 主键–主键只能有一个\r\n\r\n 外键–一个表可以有多个外键\r\n\r\n 索引–一个表可以有多个唯一索引','MySql面试题','f6462b48-9601-0253-6450-3a0ff538dfa4','00000000-0000-0000-0000-000000000000','2024-01-07 16:33:14','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,5),('8b367c9e-a3fa-acf6-c83a-3a0ff53f8682',0,'- [MiniProfiler](https://github.com/MiniProfiler/dotnet)  - 用于ASP.NET网站的简单而有效的迷你性能分析工具。 \r\n- [Glimpse](https://github.com/glimpse/glimpse)  - 针对Web的开源诊断平台。 \r\n- [Unchase.FluentPerformanceMeter](https://github.com/unchase/Unchase.FluentPerformanceMeter)  - 一个开源、跨平台的.NET Standard 2.0库，专为方法性能测量而设计。\r\n','性能分析工具','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,79),('8b6997e1-1e88-a082-8ebd-3a0ff53f8684',0,'\r\n* [Atata](https://github.com/atata-framework/atata) - 基于Selenium WebDriver的自动化Web测试全功能框架。\r\n* [Managed Windows API](http://mwinapi.sourceforge.net/) - 无需源代码，可以审查和自动化第三方Windows / VC++应用程序。\r\n* [FlaUI](https://github.com/FlaUI/FlaUI) - FlaUI是一个.NET库，用于自动化测试Windows应用程序的用户界面（Win32、WinForms、WPF、Store Apps等）。\r\n* [PuppeteerSharp](https://github.com/hardkoded/puppeteer-sharp) - Puppeteer Sharp是官方Node.JS Puppeteer API的.NET移植。\r\n* [PuppeteerSharp.Contrib](https://github.com/hlaueriksson/puppeteer-sharp-contrib) - 对Puppeteer Sharp的贡献，提供了一种方便的方式来编写可读性高且健壮的浏览器测试。','UI自动测试','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,101),('8b86ccfe-e0e1-7003-149a-3a0ff53f8680',0,'- [Psake](https://github.com/psake/psake)  - 基于 .NET 的构建自动化工具，使用 PowerShell 编写。 \r\n- [FAKE](https://github.com/fsharp/FAKE)  - F# Make，一个跨平台的构建自动化系统。 \r\n- [Invoke-Build](https://github.com/nightroman/Invoke-Build)  - 受 Psake 启发的 PowerShell 构建和测试自动化工具。 \r\n- [MSBuild](https://github.com/dotnet/msbuild)  - 微软构建引擎（MSBuild），用于 .NET 和 Visual Studio 的构建平台。 \r\n- [Cake](https://github.com/cake-build/cake)  - Cake（C# Make），一个具有 C# DSL 的跨平台构建自动化系统。 \r\n- [Nake](https://github.com/yevhen/Nake)  - 基于魔法脚本的 C# 任务运行器。 \r\n- [Nuke](https://github.com/nuke-build/nuke)  - 跨平台构建自动化系统。 \r\n- [FlubuCore](https://github.com/dotnetcore/FlubuCore)  - 用于构建项目和执行部署脚本的跨平台构建和部署自动化系统，使用 C# 代码。\r\n* [cake-build](https://github.com/cake-build/cake) - 跨平台构建自动化系统。\r\n* [Colorful.Console](https://github.com/tomakita/Colorful.Console) - 设置您的C#控制台输出样式！\r\n* [dotnet-docker](https://github.com/dotnet/dotnet-docker) - 用于.NET Core和.NET Core Tools的基本Docker镜像。\r\n* [Dockerize.NET](https://github.com/brthor/Dockerize.NET) - .NET Cli工具，用于将.NET Core应用程序打包到Docker映像中：“ dotnet dockerize”\r\n* [GitInfo](https://github.com/kzu/GitInfo) - 来自MSBuild，C#和VB的Git和SemVer信息，一种MSBuild编译工具。\r\n* [GitVersioning](https://github.com/AArnott/Nerdbank.GitVersioning) - 使用version.json文件生成的唯一版本标记程序集和程序包等，并包括用于非官方构建的git commit ID。\r\n* [go-dotnet](https://github.com/matiasinsaurralde/go-dotnet) - .NET Core Runtime的PoC Go包装器。\r\n* [Image2Docker](https://github.com/docker/communitytools-image2docker-win) - 将现有Windows应用程序工作，移植到Docker的PowerShell模块。\r\n* [LocalAppVeyor](https://github.com/joaope/LocalAppVeyor) - .NET Core全局工具，可将appveyor.yml部署AppVeyor到本地。\r\n* [Opserver](https://github.com/opserver/Opserver) -  Stack Exchange的监控系统。\r\n* [vsts-agent](https://github.com/Microsoft/vsts-agent/blob/master/README.md) -  Visual Studio Team Services构建和发布代理。','自动构建','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,15),('8c908541-e5f8-0468-ecb6-3a0ff5812925',0,'**C#Winform--永远点不到否**\n\n**作者心得**\n本程序，为早期的作品\n这个应该是我第一个winform程序，从此走向c#之路\n非常，非常简单的玩意儿（虽然是提前预习弄的）\n还是挺怀念的\n\n**源代码**\n\n```csharp\n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\n\nnamespace Love\n{\n    public partial class Form1 : Form\n    {\n        public Form1()\n        {\n            InitializeComponent();\n        }\n\n        private void Form1_Load(object sender, EventArgs e)\n        {\n\n        }\n\n        private void btn2_Click(object sender, EventArgs e)\n        {\n            Form1 form1 = new Form1();\n            form1.ShowDialog(this);\n\n        }\n\n\n        private void Form1_FormClosed(object sender, FormClosedEventArgs e)\n        {\n            Form1 form1 = new Form1();\n            form1.ShowDialog(this);\n\n\n        }\n\n        private void Form1_FormClosing(object sender, FormClosingEventArgs e)\n        {\n            e.Cancel = true;\n        }\n\n        private void btn1_Click(object sender, EventArgs e)\n        {\n            System.Environment.Exit(0);\n        }\n    }\n}\n```\n**效果截图**\n![image.png](/prod-api/file/3c908cc9-25f0-c0d4-c53d-3a0ff580c1c4/true)\n\n![image.png](/prod-api/file/c1b8956f-b420-852d-8c9b-3a0ff580db04/true)\n**作者的话**\n没啥说的，就当一个怀念吧！我的第一个winform！','C#Winform–永远点不到否','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 17:50:03','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('8dd60ddf-0a79-5ec8-f65a-3a0ff53f8681',0,'- [Cinchoo ETL](https://github.com/Cinchoo/ChoETL)  - 用于.NET的ETL框架（读取/写入CSV、Flat、Xml、JSON、Key-Value格式的文件）。 \r\n- [Reactive ETL](https://archive.codeplex.com/?p=reactiveetl)  - Reactive ETL是使用.NET的响应式扩展重写的Rhino ETL。\r\n','ETL','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,41),('8dea1b24-cfd6-f9fc-b3fb-3a0f83aa4f67',0,'## 简介\n通常，在Asp.NetCore中，**容器组装**过程 与 **管道模型组装** 过程 会将启动类文件变的非常长，同时也需要明确各个模块的依赖关系\n例如：\n我们需要仓储的功能，但是仓储的实现需要依赖Sqlsugar\n老的引入写法：\n``` cs\nservice.AddUow();\nservice.AddSqlsugar();\n......\nvar app=service.Build();\napp.UseSqlsugar();\n......\n```\n这个文件会变得非常长，同时如果有顺序依赖关系的模块，还需按顺序组装\n例如：\n在Asp.NetCore,我们只有先鉴权才能进行授权操作\n当模块越来越多，我们维护起来将越来越困难，所以引入了模块化功能\n\n## 使用\n每一个类库都可以有自己的模块化文件，我们通常命名为类库全名+Module\n例如:`Yi.Template.Application`的模块类叫做`YiTemplateApplicationModule`\n\n另外，该模块类实现`AbpModule`基类\nConfigureServices:用来配置容器服务\nOnApplicationInitialization：管道模型组装后执行\n\nAbp内置`DependsOn`特性标签，可进行维护各个模块之间的依赖关系\n\n## 完整例子\n创建模块化文件：\n``` cs\nusing Volo.Abp.Caching;\nusing Volo.Abp.Domain;\nusing Volo.Abp.Modularity;\nusing Yi.Abp.Domain.Shared;\nusing Yi.Framework.Bbs.Domain;\nusing Yi.Framework.Mapster;\nusing Yi.Framework.Rbac.Domain;\n\nnamespace Yi.Abp.Domain\n{\n    [DependsOn(\n        typeof(YiAbpDomainSharedModule),\n       \n\n        typeof(YiFrameworkRbacDomainModule),\n        typeof(YiFrameworkBbsDomainModule),\n\n        typeof(YiFrameworkMapsterModule),\n        typeof(AbpDddDomainModule),\n        typeof(AbpCachingModule)\n        )]\n    public class YiAbpDomainModule : AbpModule\n    {\n        public virtual void ConfigureServices(ServiceConfigurationContext context)\n        {\n        }\n\n        public virtual void OnPreApplicationInitialization(ApplicationInitializationContext context)\n        {\n        }\n    }\n}\n```','模块化','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','00000000-0000-0000-0000-000000000000','2023-12-16 15:18:17','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('8f4b6dfa-e6dd-7659-f5bc-3a0ff53f8684',0,'\r\n* [CefSharp](https://github.com/cefsharp/CefSharp/) - 基于Chromium的HTML5、CSS3和JS网络浏览器，用于WinForms和WPF。','Web浏览器','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,103),('8f9fb278-84f3-8411-f6fc-3a0f83ac322a',0,'## 简介\n> 想做一个快乐的Crud boy？？好，满足你\n\n可能绝大部分简单的业务，真的只是不用类型的Crud，大量的重复代码，使用cv方式，不够优雅\n\n框架内部内部封装各种场景下的crud\n\n## 使用\n在应用层继承`YiCrudAppService`crud服务即可\n在这之前，你应该先了解各个dto的作用：\n\n> 注意，我们当然可以直接使用Abp中的`CrudAppService`，但由于Abp内置的Crud还缺少一些常用的接口，比如批量删除等方式，所以推荐使用`YiCrudAppService`，使用上完全没有区别\n\n``` cs\n- TGetOutputDto (单查返回的dto)\n- TGetListOutputDto (多查返回的dto)\n- TGetListInput (多查的条件)\n- TCreateInput (创建的dto)\n- TUpdateInput （更新的dto）\n```\n根据Dto业务场景，它有很多种选项，依次为：\n``` cs\n- YiCrudAppService<TEntity, TEntityDto, TKey>\n- YiCrudAppService<TEntity, TEntityDto, TKey, TGetListInput>\n- YiCrudAppService<TEntity, TEntityDto, TKey, TGetListInput, TCreateInput>\n- YiCrudAppService<TEntity, TEntityDto, TKey, TGetListInput, TCreateInput, TUpdateInput>\n- YiCrudAppService<TEntity, TGetOutputDto, TGetListOutputDto, TKey, TGetListInput, TCreateInput, TUpdateInput>\n```\ndto可以放到`Application.Contracts`层，同理接口继承`IYiCrudAppService`即可\n```cs\n- YiCrudAppService<TEntityDto, TKey>\n- YiCrudAppService<TEntityDto, TKey, TGetListInput>\n- YiCrudAppService<TEntityDto, TKey, TGetListInput, TCreateInput>\n- YiCrudAppService<TEntityDto, TKey, TGetListInput, TCreateInput, TUpdateInput>\n- YiCrudAppService<TGetOutputDto, TGetListOutputDto, TKey, TGetListInput, TCreateInput, TUpdateInput>\n```\n>  可以发现，接口，不应该与实体有直接关系\n\n其中，在YiCrudAppService中，我们提供了一些内置的方法：\n```cs\npublic virtual async Task<TGetOutputDto> CreateAsync(TCreateInput input)\npublic virtual async Task<bool> DeleteAsync(string id)\npublic virtual async Task<TGetOutputDto> UpdateAsync(TKey id, TUpdateInput input)\npublic virtual async Task<TGetOutputDto> GetAsync(TKey id)\npublic virtual async Task<PagedResultDto<TGetListOutputDto>> GetListAsync(TGetListInput input)\n```\n同时还有映射关系：\n``` cs\nprotected virtual Task<TGetOutputDto> MapToGetOutputDtoAsync(TEntity entity)\nprotected virtual Task<List<TGetListOutputDto>> MapToGetListOutputDtosAsync(List<TEntity> entities)\nprotected virtual Task<TGetListOutputDto> MapToGetListOutputDtoAsync(TEntity entity)\nprotected virtual Task<TGetOutputDto> MapToGetOutputDtoAsync(TEntity entity)\nprotected virtual Task<List<TGetListOutputDto>> MapToGetListOutputDtosAsync(List<TEntity> entities)\nprotected virtual Task<TGetListOutputDto> MapToGetListOutputDtoAsync(TEntity entity)\n```\n另外，它也提供了对应的`仓储`及`当前用户`等常用属性','Crud增删改查','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','00000000-0000-0000-0000-000000000000','2023-12-16 15:20:21','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('90c73b17-e059-e4c8-9c22-3a0ff53f5c76',0,'- [.NET Boxed Framework](https://github.com/Dotnet-Boxed/Framework)  - .NET Core 扩展和助手 NuGet 包。 \r\n- [ASP.NET Boilerplate](https://github.com/aspnetboilerplate/aspnetboilerplate)  - 用于新型现代 ASP.NET MVC Web 应用程序的起点，包含最佳实践和最流行的工具。 \r\n- [ABP](https://github.com/abpframework/abp)  - ASP.NET Boilerplate Web 应用程序框架的下一代。 \r\n- [Orleans](https://github.com/dotnet/orleans)  - Orleans 是一个框架，提供了构建分布式高规模计算应用程序的简单方法，无需学习和应用复杂的并发或其他扩展模式。 \r\n- [Newbe.Claptrap](https://github.com/newbe36524/Newbe.Claptrap)  - 这是一组以响应式、事件源和 Actor 模式为基础的服务器端开发框架。在此基础上，开发人员可以更简单地开发“分布式”、“扩展”和“易于测试”的应用程序。 \r\n- [CoreFX](https://github.com/dotnet/corefx)  - corefx 存储库包含 .NET Core 的库实现（称为 \"CoreFX\"）。它包括 System.Collections、System.IO、System.Xml 和许多其他组件。 \r\n- [CSLA .NET](https://github.com/MarimerLLC/csla)  - 业务层开发框架 [https://cslanet.com/](https://cslanet.com/) \r\n- [Mono](https://github.com/mono/mono)  - 开源的 ECMA CLI、C#、F#、VB 和 .NET 实现。 \r\n- [Mono-Addins](https://github.com/mono/mono-addins)  - Mono.Addins 是一个用于创建可扩展应用程序和扩展这些应用程序的通用框架。 \r\n- [peasy](https://github.com/peasy/Peasy.NET)  - Peasy 是一个中间层框架，提供易于使用和灵活的规则引擎，旨在解决常见的挑战，如并发处理、事务支持、容错、线程处理、可扩展性、异步和多客户端支持，以及易于测试，无需学习曲线！ \r\n- [Plastic](https://github.com/sang-hyeon/Plastic)  - Plastic 提供了对域、应用程序规则、业务规则或应用程序中的业务逻辑的封装。为此，使用了命令模式。 \r\n- [Signals](https://github.com/EmitKnowledge/Signals)  - Signals 是一个基于 .NET5 的框架，旨在通过为开发团队提供工具、方面和流程来提高开发团队的质量和生产力。 \r\n- [Spring.Net](https://github.com/spring-projects/spring-net)  - Spring.NET 是一个开源应用程序框架，可使构建企业 .NET 应用程序更加容易。 \r\n- [DotNetty](https://github.com/Azure/DotNetty)  - DotNetty 是 Netty 的移植，用于快速开发可维护的高性能协议服务器和客户端。 \r\n- [AspectCore Framework](https://github.com/dotnetcore/AspectCore-Framework)  - AspectCore Framework 是基于面向方面编程的跨平台框架，用于 .NET Core 和 .NET Framework。核心支持方面拦截、依赖注入集成、Web 应用程序、数据验证等。 \r\n- [HopFramework](https://github.com/DiegoTondim/hop-framework)  - HopFramework 是一个框架，通过简单的代码和配置应用领域驱动设计和许多模式，以提供更好的解决方案。 \r\n- [Fusion](https://github.com/servicetitan/Stl.Fusion)  - .NET Core 和 Blazor 库，试图通过引入一种新颖的“计算可观察对象”来显著改善实时和高负载服务的实现方式 - 不可变、线程安全，最重要的是，对开发者几乎是透明的。[示例 1](https://github.com/servicetitan/Stl.Fusion.Samples)  [示例 2](https://github.com/alexyakunin/BoardGames) \r\n- [silky](https://github.com/liuhll/silky)  - Silky 框架旨在帮助开发人员通过 .NET 平台下的简单代码和配置，快速构建微服务开发框架。\r\n* [ASP.NET Boilerplate](https://github.com/aspnetboilerplate/aspnetboilerplate) -  ABP是一个通用的WEB应用程序框架和项目模板。\r\n* [Abp vNext](https://github.com/abpframework/abp) - 该项目是ABP Web应用程序框架的下一代。\r\n* [AsyncEx](https://github.com/StephenCleary/AsyncEx) -  async / await的帮助程序库。\r\n* [Aeron.NET](https://github.com/AdaptiveConsulting/Aeron.NET) - 高效可靠的UDP单播，UDP组播和IPC消息传输。\r\n* [akka.net](https://github.com/akkadotnet/akka.net) - Akka是一个基于scala语言的Actor模型库，旨在构建一套高并发、分布式、自动容错、消息驱动应用的工具集。\r\n* [Aggregates.NET](https://github.com/volak/Aggregates.NET) -  Aggregates.NET是一个框架，可以帮助开发人员将优秀的NServiceBus和EventStore库集成在一起。\r\n* [ASP.NET MVC](https://github.com/dotnet/aspnetcore/tree/master/src/Mvc) - 官方WEB应用程序框架，MVC。\r\n* [ASP.NET Core](https://github.com/aspnet/AspNetCore) - ASP.NET Core是一个跨平台的.NET框架。\r\n* [Butterfly Server .NET](https://github.com/firesharkstudios/butterfly-server-dotnet) - 允许用最少的工作量构建实时Web应用程序，分布式追踪的服务器端库。\r\n* [CAP](https://github.com/dotnetcore/CAP) - CAP是处理分布式事务的解决方案，还具有EventBus功能，它轻巧，易于使用且高效。\r\n* [Carter](https://github.com/CarterCommunity/Carter) -  Carter是一个路由框架，使代码更加简单明确。\r\n* [Chromely](https://github.com/mattkol/Chromely) -  Electron.NET的轻量级替代品，构建HTML5桌面应用程序框架。\r\n* [Cinchoo ETL](https://github.com/Cinchoo/ChoETL) - 用于.NET的ETL框架(用于CSV，Flat，Xml，JSON，键值对格式文件的分析器/写入器)。\r\n* [CQRSlite](https://github.com/gautema/CQRSlite) - 用于帮助在C#中编写CQRS和Eventsourcing应用程序的轻量级框架。\r\n* [dataaccess_aspnetcore](https://github.com/digipolisantwerp/dataaccess_aspnetcore) -  EF的UnitOfWork和Repositories的基类。\r\n* [DNTFrameworkCore](https://github.com/rabbal/DNTFrameworkCore) - DNTFrameworkCore 是一个轻量级且可扩展的基础结构，用于基于ASP.NET Core构建高质量的Web应用程序\r\n* [DotNetCorePlugins](https://github.com/natemcmaster/DotNetCorePlugins) - 用于动态加载.NET Core程序集，将其作为主应用程序的扩展来执行与Assembly.LoadFrom不同。\r\n* [DotnetSpider](https://github.com/dotnetcore/DotnetSpider) -  DotnetSpider，一个类似于WebMagic和Scrapy的.NET标准爬虫库。它是轻量级，高效且快速的高级Web爬网和抓取框架。\r\n* [DotNetty](https://github.com/Azure/DotNetty) -  netty端口，事件驱动的异步网络应用程序框架。\r\n* [dotvvm](https://github.com/riganti/dotvvm) -  Web应用程序的开源MVVM框架。\r\n* [ElectronNET](https://github.com/ElectronNET/Electron.NET) - 使用ASP.NET NET Core构建跨平台桌面应用程序。\r\n* [EmbedIO](https://github.com/unosquare/embedio) - 一个小型的，跨平台，基于模块的Web服务器。\r\n* [Ether.Network](https://github.com/aloisdg/Ether.Network) - Ether.Network是一个开源网络库，允许开发人员通过sockets创建简单，快速和可扩展的套接字服务器或客户端的基本库。\r\n* [EventFlow](https://github.com/eventflow/EventFlow) - EventFlow是一个易于使用的基本CQRS + ES框架。\r\n* [ExcelDataReader](https://github.com/ExcelDataReader/ExcelDataReader) - 用C#编写的轻量级快速库，用于读取Microsoft Excel文件。\r\n* [ExtCore](https://github.com/ExtCore) - 用于创建模块化和可扩展的Web应用程序框​​架。\r\n* [Finbuckle.MultiTenant](https://github.com/Finbuckle/Finbuckle.MultiTenant) -  Finbuckle.MultiTenant是ASP.NET Core的多租户库。它提供用于租户解析，每个租户应用程序配置和每个租户数据隔离的功能。\r\n* [fission](https://github.com/fission/fission) -  Fission 是一个构建在 Kubernetes 之上的 FaaS框架。ission 利用Kubernetes 集群管理、调度、网络管理等，将容器编排功能留给 Kubernetes，而 Fission 就专注于 FaaS 特性。\r\n* [Furion](https://gitee.com/dotnetchina/Furion) -  Furion 基于 .NET5/6/7/8+ 平台，您可以将它集成到任何 .NET/C# 应用程序中。\r\n* [grpc](https://github.com/grpc/grpc/tree/master/src/csharp) - 远程过程调用(RPC)为构建分布式应用程序和服务提供了有用的抽象，grpc库。\r\n* [Halibut](https://github.com/OctopusDeploy/Halibut) - 使用基于SSL的JSON-RPC的.NET安全通信框架。\r\n* [MagicOnion](https://github.com/neuecc/MagicOnion) - MagicOnion是一个实时网络引擎，如SignalR，Socket.io和RPC-Web API框架。\r\n* [MassTransit](https://github.com/MassTransit/MassTransit) -  .NET分布式应用程序框架。\r\n* [microdot](https://github.com/gigya/microdot) - 一个开源的.NET微服务框架。\r\n* [MoreLINQ](https://github.com/morelinq/MoreLINQ) -  LINQ to Objects的扩展。\r\n* [Nancy](https://github.com/NancyFx/Nancy) - 用于在.NET和Mono上构建基于HTTP的服务的轻量级框架。\r\n* [opencvsharp](https://github.com/shimat/opencvsharp) -  OpenCV的跨平台库。\r\n* [orleans](https://github.com/dotnet/orleans) - Orleans是一个跨平台的，用于构建分布式应用程序框架\r\n* [Prism](https://github.com/PrismLibrary/Prism) - Prism是一个框架，用于在WPF，Windows 10 UWP和Xamarin Forms中构建松耦合，可维护和可测试的XAML应用程序。\r\n* [protoactor-dotnet](https://github.com/AsynkronIT/protoactor-dotnet) -  Golang和C#的快速分布式Actor。\r\n* [resin](https://github.com/kreeben/resin) - 面向文档的搜索引擎，具有列索引，多重集合查询，基于JSON的查询语言和HTTP API。\r\n* [RService.io](https://github.com/Stoom/RService.IO) -  用于ASP.NET Core的轻量级REST服务框架\r\n* [ServiceStack](https://github.com/ServiceStack/ServiceStack) - ServiceStack是一个简单，快速，通用和高效的全功能Web和 Web服务框架。\r\n* [Steeltoe OSS](https://github.com/SteelToeOSS) - 用于常见微服务模式的.NET工具包。\r\n* [Strathweb.TypedRouting.AspNetCore](https://github.com/filipw/Strathweb.TypedRouting.AspNetCore) - 一个在ASP.NET Core MVC项目中启用强类型路由的库。\r\n* [surging](https://github.com/dotnetcore/surging) - Surging是一种微服务引擎，提供了轻量级，高性能的模块化RPC请求管道。服务引擎支持http，TCP，WS，Mqtt，UDP和DNS协议。它使用ZooKeeper和Consul作为注册表，使用哈希算法，随机，轮询，压力最小优先级作为负载平衡算法，内置服务管理以确保可靠的RPC通信。\r\n* [Xer.Cqrs](https://github.com/jeyjeyemem/Xer.Cqrs) - 轻巧易用的CQRS + DDD库。\r\n* [X.PagedList](https://github.com/dncuug/X.PagedList) - 用于轻松分页ASP.NET / ASP.NET Core中任何IEnumerable / IQueryable的库。\r\n','应用框架','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:11','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,1),('92099d30-fa9e-9661-10a1-3a0ff53f8680',0,'- [The Little ASP.NET Core Book](https://recaffeinate.co/book/)  - 一个免费、开源的基于教程的书，旨在提供 ASP.NET Core 的简单介绍。 \r\n- [.NET in Action, Second Edition](https://www.manning.com/books/dotnet-in-action-second-edition)  - 介绍在 Microsoft .NET 平台上实现跨平台专业应用程序的入门书籍。 \r\n- [.NET Maui in Action](https://www.manning.com/books/dot-net-maui-in-action)  - 介绍使用一组常见的 .NET 工具创建移动和桌面应用程序的书籍。 \r\n- [ASP.NET Core in Action, Third Edition](https://www.manning.com/books/asp-net-core-in-action-third-edition)  - 使用 C# 和 ASP.NET Core 构建专业级全栈Web应用程序的书籍。 \r\n- [ASP.NET Core Razor Pages in Action](https://www.manning.com/books/asp-net-core-razor-pages-in-action)  - 详细介绍如何使用 Razor Pages 创建易于测试和扩展的动态网站的综合指南。 \r\n- [ASP.NET Core Security](https://www.manning.com/books/asp-net-core-security)  - 实用的、亲身实践的指南，用于保护使用 ASP.NET 构建的 Web 应用程序。 \r\n- [ASP.NET Core Web API](https://www.manning.com/books/asp-net-core-web-api)  - 关于使用 REST 和 GraphQL 标准设计和实现 API 的书籍。 \r\n- [Blazor in Action](https://www.manning.com/books/blazor-in-action)  - 使用 C# 和 .NET 构建 UI 和客户端应用程序的指南。 \r\n- [Building Web APIs with ASP.NET Core](https://www.manning.com/books/building-web-apis-with-asp-net-core)  - 创建第一个使用 ASP.NET Core 的 Web API 的入门实用指南。 \r\n- [C# in Depth, Fourth Edition](https://www.manning.com/books/c-sharp-in-depth-fourth-edition)  - 深入研究 C# 语言细节的书籍。 \r\n- [CLR via C#, Fourth Edition](https://www.microsoftpressstore.com/store/clr-via-c-sharp-9780735667457)  - 深入挖掘公共语言运行时（CLR）、C# 和 .NET 开发的复杂性的书籍。 \r\n- [Code Like a Pro in C#](https://www.manning.com/books/code-like-a-pro-in-c-sharp)  - 基于现有编程技能构建专业级 C# 编程技能的书籍。 \r\n- [Dependency Injection in .NET](https://www.manning.com/books/dependency-injection-principles-practices-patterns)  - 教您如何使用依赖注入来减少 .NET 应用程序组件之间的硬编码依赖关系的书籍。 \r\n- [Entity Framework Core in Action](https://www.manning.com/books/entity-framework-core-in-action)  - 教您如何使用 Entity Framework Core，包括轻量级数据访问替代方法，如 Dapper。 \r\n- [Functional Programming in C#, Second edition](https://www.manning.com/books/functional-programming-in-c-sharp-second-edition)  - 关于在 C# 中进行函数式编程的实际技巧和实际技术的书籍，不涉及术语和理论。 \r\n- [Microservices in .NET Core, Second edition](https://www.manning.com/books/microservices-in-net-core-second-edition)  - 使用 .NET 技术栈构建微服务系统的全面指南。 \r\n- [Pro .NET 5 Custom Libraries](https://link.springer.com/book/10.1007/978-1-4842-6391-4)  - 包括每种数据类型实现的示例项目。演示了 C# 中的实现。涵盖了每种实现的要点和注意事项。 \r\n- [Pro .NET Benchmarking](https://link.springer.com/book/10.1007/978-1-4842-4941-3)  - 提供深入了解软件基准测试以进行准确性能测量的书籍。帮助您通过识别和定位正确的瓶颈来获得最大的性能影响。包括对最新编译器和处理器的覆盖。 \r\n- [Pro .NET Framework with the Base Class Library](https://link.springer.com/book/10.1007/978-1-4842-4191-2)  - 展示了有价值的提示和示例，强化了管理类型的正确使用，包括如何避免装箱/拆箱以及更好地利用内存资源。 \r\n- [Pro .NET Memory Management](https://link.springer.com/book/10.1007/978-1-4842-4027-4)  - 深入研究 .NET 内存管理，包括详细介绍 .NET 内存工作原理、实现细节、可能的陷阱以及解决方法。 \r\n- [Pro ASP.NET Core 6](https://link.springer.com/book/10.1007/978-1-4842-7957-1)  - 全彩色展示的 ASP.NET Core 6 最全面的覆盖范围。详细解释和大量的可运行代码来学习新功能。提供了一个完全功能的 ASP.NET Core 6 应用程序，可用作项目的模板。 \r\n- [Pro Microservices in .NET 6](https://link.springer.com/book/10.1007/978-1-4842-7833-8)  - 展示了如何快速掌握 .NET 6、Docker 和微服务。教您如何利用微服务设计模式来加强应用程序。提供了用于协调器和 Azure Kubernetes 服务的环境选项。','书籍','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,14),('926e09e0-c6a1-6a55-8c87-3a0fe9b5b44a',0,'当我们在开发 C# 程序时，你可能会遇到一些情况，需要在你的代码中添加一些元数据（metadata），例如作者信息、版本信息、数据类型的映射等等。为了简化这些操作，C# 中提供了一个特性（Attribute）机制，它允许你在代码中添加元数据标记，这些标记可以在运行时被检查和读取。在本文中，我们将探讨 C# 中的特性机制。\r\n## 什么是特性（Attribute）\r\n\r\n特性是一种注释，可以用来给代码添加元数据，这些元数据可以在运行时被访问和使用。C# 中的特性被定义为 `Attribute` 类的派生类，它们可以被应用于类、方法、属性、字段等各种程序元素。\r\n\r\n特性可以通过以下方式使用：\r\n\r\n```csharp\r\n\r\n[AttributeName]\r\n```\r\n\r\n\r\n\r\n在这个例子中，`AttributeName` 是一个特性类型的名称。特性可以带有参数，这些参数可以在特性类的构造函数中定义。\r\n\r\n```csharp\r\n\r\n[AttributeName(Param1 = \"value1\", Param2 = \"value2\")]\r\n```\r\n\r\n\r\n\r\n在这个例子中，`AttributeName` 是一个特性类型的名称，`Param1` 和 `Param2` 是特性类的构造函数的参数。\r\n## C# 中的预定义特性\r\n\r\nC# 中有许多预定义的特性，它们可以用来实现一些特殊的功能。以下是一些常见的预定义特性：\r\n### [Obsolete]\r\n\r\n该特性用于标记过时的代码。当你在使用过时的代码时，编译器会给出警告信息。\r\n\r\n```csharp\r\n\r\n[Obsolete(\"This method is obsolete, use NewMethod instead.\")]\r\npublic void OldMethod()\r\n{\r\n    // do something\r\n}\r\n```\r\n\r\n\r\n\r\n在这个例子中，`Obsolete` 特性用于标记一个过时的方法，当你在调用该方法时，编译器会给出警告信息。\r\n### [Conditional]\r\n\r\n该特性用于标记有条件编译的代码。当你在使用该特性时，只有满足特定条件时，该代码才会被编译进程序中。\r\n\r\n```csharp\r\n\r\n#define DEBUG\r\n\r\npublic class MyClass\r\n{\r\n    [Conditional(\"DEBUG\")]\r\n    public void DebugMethod()\r\n    {\r\n        // do something\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在这个例子中，`Conditional` 特性用于标记一个有条件编译的方法，只有当 `DEBUG` 宏被定义时，该方法才会被编译进程序中。\r\n### [Serializable]\r\n\r\n该特性用于标记可序列化的类。当你在使用该特性时，该类的实例可以被序列化为一个字节流，并可以在不同的应用程序域或进程之间传输。\r\n\r\n```csharp\r\n\r\n[Serializable]\r\npublic class MyClass\r\n{\r\n    // class members\r\n}\r\n```\r\n\r\n\r\n\r\n在这个例子中，`Serializable` 特性用于标记一个可序列化的类。\r\n## 自定义特性\r\n\r\n除了预定义的特性之外，你还可以创建自定义的特性。自定义特性是通过创建一个类来实现的，该类继承自 `System.Attribute` 类，并可以被应用于程序元素中。以下是一个自定义特性的例子：\r\n\r\n```csharp\r\n\r\n[AttributeUsage(AttributeTargets.Class)]\r\npublic class AuthorAttribute : Attribute\r\n{\r\n    private string _name;\r\n\r\n    public AuthorAttribute(string name)\r\n    {\r\n        _name = name;\r\n    }\r\n\r\n    public string Name\r\n    {\r\n        get { return _name; }\r\n    }\r\n}\r\n\r\n[Author(\"John Doe\")]\r\npublic class MyClass\r\n{\r\n    // class members\r\n}\r\n```\r\n\r\n\r\n\r\n在这个例子中，我们创建了一个名为 `AuthorAttribute` 的特性。该特性用于标记一个类的作者信息。在 `AuthorAttribute` 类的构造函数中，我们传入了一个字符串参数，该参数用于保存作者的名称。在 `MyClass` 类上，我们应用了 `Author` 特性，并传入了作者的名称。这样，当我们需要获取 `MyClass` 类的作者信息时，我们可以通过反射读取该特性的名称属性。\r\n## 读取特性\r\n\r\n你可以通过反射来读取特性。以下是一个读取 `Author` 特性的例子：\r\n\r\n```csharp\r\n\r\nType type = typeof(MyClass);\r\nobject[] attributes = type.GetCustomAttributes(typeof(AuthorAttribute), false);\r\n\r\nif (attributes.Length > 0)\r\n{\r\n    AuthorAttribute author = (AuthorAttribute)attributes[0];\r\n    Console.WriteLine(\"Author: \" + author.Name);\r\n}\r\n```\r\n\r\n\r\n\r\n在这个例子中，我们首先使用 `typeof` 运算符获取 `MyClass` 类的类型信息。然后，我们调用 `GetCustomAttributes` 方法来读取 `MyClass` 类上应用的 `Author` 特性。由于 `GetCustomAttributes` 方法返回的是一个数组，因此我们需要判断该数组的长度是否大于 0。如果长度大于 0，我们可以将数组中的第一个元素转换为 `AuthorAttribute` 对象，并读取其名称属性。\r\n## 总结\r\n\r\n特性是一种元数据标记，它可以被应用于程序元素中，并在运行时被访问和使用。C# 中有许多预定义的特性，如 `Obsolete`、`Conditional` 和 `Serializable` 等。你也可以创建自己的特性，以满足特定的需求。你可以通过反射来读取特性，并访问其属性和方法。特性是 C# 程序设计中的重要特性，可以帮助你更好地组织和管理代码。\r\n','C# 特性（Attribute）','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,29),('936bfcb0-560e-5494-80f0-3a0fe9b5b44a',0,'在 C# 中，集合 (Collection) 是一组对象的容器。集合可用于存储和操作数据。C# 中有多种类型的集合可供使用，每种类型都有其独特的功能和优点。\r\n## 常用集合类型\r\n\r\n以下是 C# 中常用的集合类型： \r\n- **`List<T>`**  : 动态数组，可随时添加或删除元素 \r\n- **`Dictionary<TKey, TValue>`**  : 键值对集合，存储键值对并允许使用键来访问值 \r\n- **`Queue<T>`**  : 先进先出 (FIFO) 集合 \r\n- **`Stack<T>`**  : 后进先出 (LIFO) 集合 \r\n- **`HashSet<T>`**  : 不重复元素集合，使用哈希表实现快速查找 \r\n- **`LinkedList<T>`**  : 双向链表，可快速插入和删除元素 \r\n- **`SortedList<TKey, TValue>`**  : 键值对集合，自动排序 \r\n- **`ArrayList`**  : 动态数组，支持任意数据类型\r\n\r\n## 集合基础操作\r\n### List\r\n\r\n```csharp\r\n\r\n// 创建一个List<T>对象\r\nList<int> list = new List<int>();\r\n\r\n// 添加元素到List<T>对象\r\nlist.Add(1);\r\nlist.Add(2);\r\nlist.Add(3);\r\n\r\n// 访问List<T>对象元素\r\nint firstElement = list[0];\r\nint lastElement = list[list.Count - 1];\r\n\r\n// 遍历List<T>对象\r\nforeach(int element in list)\r\n{\r\n    Console.WriteLine(element);\r\n}\r\n\r\n// 在List<T>对象中查找元素\r\nint index = list.IndexOf(2);\r\n\r\n// 从List<T>对象中删除元素\r\nlist.Remove(2);\r\n```\r\n\r\n\r\n### Dictionary\r\n\r\n```csharp\r\n\r\n// 创建一个Dictionary<TKey, TValue>对象\r\nDictionary<string, int> dict = new Dictionary<string, int>();\r\n\r\n// 添加键值对到Dictionary<TKey, TValue>对象\r\ndict.Add(\"apple\", 1);\r\ndict.Add(\"banana\", 2);\r\ndict.Add(\"orange\", 3);\r\n\r\n// 访问Dictionary<TKey, TValue>对象元素\r\nint appleValue = dict[\"apple\"];\r\n\r\n// 遍历Dictionary<TKey, TValue>对象\r\nforeach(KeyValuePair<string, int> pair in dict)\r\n{\r\n    Console.WriteLine(pair.Key + \": \" + pair.Value);\r\n}\r\n\r\n// 在Dictionary<TKey, TValue>对象中查找元素\r\nbool hasKey = dict.ContainsKey(\"apple\");\r\nbool hasValue = dict.ContainsValue(1);\r\n\r\n// 从Dictionary<TKey, TValue>对象中删除元素\r\ndict.Remove(\"apple\");\r\n```\r\n\r\n\r\n### Queue\r\n\r\n```csharp\r\n\r\n// 创建一个Queue<T>对象\r\nQueue<string> queue = new Queue<string>();\r\n\r\n// 添加元素到Queue<T>对象\r\nqueue.Enqueue(\"apple\");\r\nqueue.Enqueue(\"banana\");\r\nqueue.Enqueue(\"orange\");\r\n\r\n// 访问Queue<T>对象元素\r\nstring firstElement = queue.Peek();\r\n\r\n// 遍历Queue<T>对象\r\nforeach(string element in queue)\r\n{\r\n    Console.WriteLine(element);\r\n}\r\n\r\n// 从Queue<T>对象中删除元素\r\nstring dequeuedElement = queue.Dequeue();\r\n```\r\n\r\n\r\n### Stack\r\n\r\n```csharp\r\n\r\n// 创建一个Stack<T>对象\r\nStack<string> stack = new Stack<string>();\r\n\r\n// 添加元素到Stack<T>对象\r\nstack.Push(\"apple\");\r\nstack.Push(\"banana\");\r\nstack.Push(\"orange\");\r\n\r\n// 访问Stack<T>对象元素\r\nstring topElement = stack.Peek();\r\n\r\n// 遍历Stack<T>对象\r\nforeach(string element in stack)\r\n{\r\nConsole.WriteLine(element);\r\n}\r\n\r\n// 从Stack<T>对象中删除元素\r\nstring poppedElement = stack.Pop();\r\n\r\n```csharp\r\n\r\n### HashSet\r\n\r\n```csharp\r\n// 创建一个HashSet<T>对象\r\nHashSet<int> set = new HashSet<int>();\r\n\r\n// 添加元素到HashSet<T>对象\r\nset.Add(1);\r\nset.Add(2);\r\nset.Add(3);\r\n\r\n// 遍历HashSet<T>对象\r\nforeach(int element in set)\r\n{\r\n    Console.WriteLine(element);\r\n}\r\n\r\n// 在HashSet<T>对象中查找元素\r\nbool containsElement = set.Contains(2);\r\n\r\n// 从HashSet<T>对象中删除元素\r\nset.Remove(2);\r\n```\r\n\r\n### LinkedList\r\n\r\n```csharp\r\n\r\n// 创建一个LinkedList<T>对象\r\nLinkedList<int> list = new LinkedList<int>();\r\n\r\n// 添加元素到LinkedList<T>对象\r\nlist.AddFirst(1);\r\nlist.AddLast(3);\r\nlist.AddAfter(list.First, 2);\r\n\r\n// 遍历LinkedList<T>对象\r\nforeach(int element in list)\r\n{\r\n    Console.WriteLine(element);\r\n}\r\n\r\n// 在LinkedList<T>对象中查找元素\r\nLinkedListNode<int> node = list.Find(2);\r\n\r\n// 从LinkedList<T>对象中删除元素\r\nlist.Remove(2);\r\n```\r\n\r\n\r\n### SortedList\r\n\r\n```csharp\r\n\r\n// 创建一个SortedList<TKey, TValue>对象\r\nSortedList<string, int> sortedList = new SortedList<string, int>();\r\n\r\n// 添加键值对到SortedList<TKey, TValue>对象\r\nsortedList.Add(\"orange\", 3);\r\nsortedList.Add(\"apple\", 1);\r\nsortedList.Add(\"banana\", 2);\r\n\r\n// 访问SortedList<TKey, TValue>对象元素\r\nint appleValue = sortedList[\"apple\"];\r\n\r\n// 遍历SortedList<TKey, TValue>对象\r\nforeach(KeyValuePair<string, int> pair in sortedList)\r\n{\r\n    Console.WriteLine(pair.Key + \": \" + pair.Value);\r\n}\r\n\r\n// 从SortedList<TKey, TValue>对象中删除元素\r\nsortedList.Remove(\"apple\");\r\n```\r\n\r\n\r\n### ArrayList\r\n\r\n```csharp\r\n\r\n// 创建一个ArrayList对象\r\nArrayList arrayList = new ArrayList();\r\n\r\n// 添加元素到ArrayList对象\r\narrayList.Add(1);\r\narrayList.Add(\"hello\");\r\narrayList.Add(true);\r\n\r\n// 访问ArrayList对象元素\r\nobject firstElement = arrayList[0];\r\n\r\n// 遍历ArrayList对象\r\nforeach(object element in arrayList)\r\n{\r\n    Console.WriteLine(element);\r\n}\r\n\r\n// 从ArrayList对象中删除元素\r\narrayList.Remove(1);\r\n```\r\n\r\n\r\n## 总结\r\n\r\nC# 提供了多种类型的集合，可以根据不同的需求选择不同的集合类型。使用集合可以轻松地存储和操作数据，提高代码的可读性和可维护性。在使用集合时，需要注意选择适当的集合类型以及使用集合提供的方法和属性。\r\n','C# 集合（Collection）','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,35),('948f6f68-e88b-0e59-a095-3a0fe9b5b449',0,'\r\nC# 是一种强类型语言，因此在编写代码时，需要明确指定数据类型。数据类型指定了变量在内存中所占用的空间大小以及存储的数据类型。\r\n\r\n以下是 C# 支持的常见数据类型：\r\n## 值类型\r\n\r\n值类型变量直接包含其数据，它们存储在堆栈或堆中。\r\n### 整数类型\r\n\r\n整数类型表示整数值，包括正数、负数和零。以下是 C# 支持的整数类型： \r\n- `sbyte`：有符号 8 位整数，范围为 -128 到 127。 \r\n- `byte`：无符号 8 位整数，范围为 0 到 255。 \r\n- `short`：有符号 16 位整数，范围为 -32768 到 32767。 \r\n- `ushort`：无符号 16 位整数，范围为 0 到 65535。 \r\n- `int`：有符号 32 位整数，范围为 -2147483648 到 2147483647。 \r\n- `uint`：无符号 32 位整数，范围为 0 到 4294967295。 \r\n- `long`：有符号 64 位整数，范围为 -9223372036854775808 到 9223372036854775807。 \r\n- `ulong`：无符号 64 位整数，范围为 0 到 18446744073709551615。\r\n### 浮点类型\r\n\r\n浮点类型表示带有小数点的数值。以下是 C# 支持的浮点类型： \r\n- `float`：单精度浮点数，范围为 -3.402823e38 到 3.402823e38，精度为 7 位有效数字。 \r\n- `double`：双精度浮点数，范围为 -1.79769313486232e308 到 1.79769313486232e308，精度为 15-16 位有效数字。 \r\n- `decimal`：高精度小数，范围为 (-7.9 x 10^28 到 7.9 x 10^28) / 10^(0 到 28)，精度为 28 位有效数字。\r\n### 字符类型\r\n\r\n字符类型表示单个字符。以下是 C# 支持的字符类型： \r\n- `char`：表示单个 16 位 Unicode 字符。\r\n### 布尔类型\r\n\r\n布尔类型表示逻辑值。以下是 C# 支持的布尔类型： \r\n- `bool`：表示 true 或 false。\r\n## 引用类型\r\n\r\n引用类型存储指向实际数据的指针或引用。引用类型的大小不是固定的，它们存储在堆中。\r\n### 字符串类型\r\n\r\n字符串类型表示一个字符串值。以下是 C# 支持的字符串类型： \r\n- `string`：表示 Unicode 字符串。\r\n### 数组类型\r\n\r\n数组类型表示一组具有相同数据类型的元素。以下是 C# 支持的数组类型： \r\n\r\n- `T[]`：表示一个具有 T 类型元素的一维数组。 \r\n- `T[,]`：表示一个具有 T 类型元素的二维数组。 \r\n- `T[,,]`：表示一个具有 T 类型元素的三维数组。\r\n- ...\r\n### 对象类型\r\n\r\n对象类型是所有引用类型的基类。以下是 C# 支持的对象类型： \r\n- `object`：表示任意类型的对象，是所有引用类型的基类。 \r\n- `dynamic`：表示在运行时进行类型检查的类型。\r\n## 空类型\r\n\r\n空类型表示一个无意义的值。以下是 C# 支持的空类型： \r\n- `null`：表示一个空引用或空指针。\r\n## 示例\r\n\r\n以下是 C# 中定义变量并初始化的示例：\r\n\r\n```csharp\r\n\r\n// 整数类型\r\nsbyte sbyteVar = 127;\r\nbyte byteVar = 255;\r\nshort shortVar = -32768;\r\nushort ushortVar = 65535;\r\nint intVar = 2147483647;\r\nuint uintVar = 4294967295;\r\nlong longVar = 9223372036854775807;\r\nulong ulongVar = 18446744073709551615;\r\n\r\n// 浮点类型\r\nfloat floatVar = 3.14f;\r\ndouble doubleVar = 3.14;\r\ndecimal decimalVar = 3.14m;\r\n\r\n// 字符类型\r\nchar charVar = ''a'';\r\n\r\n// 布尔类型\r\nbool boolVar = true;\r\n\r\n// 字符串类型\r\nstring stringVar = \"hello world\";\r\n\r\n// 数组类型\r\nint[] intArray = new int[] { 1, 2, 3 };\r\nstring[,] stringArray = new string[,] { { \"a\", \"b\" }, { \"c\", \"d\" } };\r\n\r\n// 对象类型\r\nobject objectVar = new object();\r\ndynamic dynamicVar = \"hello world\";\r\n\r\n// 空类型\r\nstring nullVar = null;\r\n```\r\n\r\n\r\n\r\n以上示例仅为简单示例，C# 数据类型还有很多细节和用法需要深入了解。\r\n\r\n','C# 数据类型','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,5),('96fcf5af-61cf-78b6-8cea-3a0ff53ad54c',0,'\r\n**1、MySQL与MongoDB之间最基本的差别是什么?**\r\n\r\n答：MySQL和MongoDB两者都是免费开源的数据库。MySQL和MongoDB有许多基本差别包括数据的表示(data representation)，查询，关系，事务，schema的设计和定义，标准化(normalization)，速度和性能。\r\n\r\n通过比较MySQL和MongoDB，实际上我们是在比较关系型和非关系型数据库，即数据存储结构不同。详细阅读\r\n\r\n**2、MongoDB成为最好NoSQL数据库的原因是什么?**\r\n\r\n答：以下特点使得MongoDB成为最好的NoSQL数据库：\r\n\r\n- 面向文件的\r\n- 高性能\r\n- 高可用性\r\n- 易扩展性\r\n- 丰富的查询语言\r\n\r\n**3、分析器在MongoDB中的作用是什么?**\r\n\r\n答：MongoDB中包括了一个可以显示数据库中每个操作性能特点的数据库分析器。通过这个分析器你可以找到比预期慢的查询(或写操作);利用这一信息，比如，可以确定是否需要添加索引。\r\n\r\n**4、如果用户移除对象的属性，该属性是否从存储层中删除?**\r\n\r\n答：是的，用户移除属性然后对象会重新保存(re-save())。\r\n\r\n**5、更新操作立刻fsync到磁盘?**\r\n\r\n答：不会，磁盘写操作默认是延迟执行的。写操作可能在两三秒(默认在60秒内)后到达磁盘。例如，如果一秒内数据库收到一千个对一个对象递增的操作，仅刷新磁盘一次。\r\n\r\n**6、什么是master或primary?**\r\n\r\n答：它是当前备份集群(replica set)中负责处理所有写入操作的主要节点/成员。在一个备份集群中，当失效备援(failover)事件发生时，一个另外的成员会变成primary。\r\n\r\n**7、 数据在什么时候才会扩展到多个分片(shard)里?**\r\n\r\n答：MongoDB 分片是基于区域(range)的。所以一个集合(collection)中的所有的对象都被存放到一个块(chunk)中。只有当存在多余一个块的时候，才会有多个分片获取数据的选项。现在，每个默认块的大小是 64Mb，所以你需要至少 64 Mb 空间才可以实施一个迁移。\r\n\r\n**8、分片(sharding)和复制(replication)是怎样工作的?**\r\n\r\n答：每一个分片(shard)是一个分区数据的逻辑集合。分片可能由单一服务器或者集群组成，我们推荐为每一个分片(shard)使用集群。\r\n\r\n**9、如果块移动操作(moveChunk)失败了，我需要手动清除部分转移的文档吗?**\r\n\r\n答：不需要，移动操作是一致(consistent)并且是确定性的(deterministic);一次失败后，移动操作会不断重试;当完成后，数据只会出现在新的分片里(shard)。\r\n\r\n**10、如果一个分片（Shard）停止或很慢的时候，发起一个查询会怎样？**\r\n\r\n答：如果一个分片停止了，除非查询设置了“Partial”选项，否则查询会返回一个错误。如果一个分片响应很慢，MongoDB会等待它的响应。\r\n\r\n**11、如何理解MongoDB中的GridFS机制，MongoDB为何使用GridFS来存储文件？**\r\n\r\n答：GridFS是一种将大型文件存储在MongoDB中的文件规范。使用GridFS可以将大文件分隔成多个小文档存放，这样我们能够有效的保存大文档，而且解决了BSON对象有限制的问题。\r\n\r\n**12、MongoDB支持存储过程吗？如果支持的话，怎么用？**\r\n\r\n答：MongoDB支持存储过程，它是javascript写的，保存在db.system.js表中。\r\n\r\n**13、当更新一个正在被迁移的块（Chunk）上的文档时会发生什么？**\r\n\r\n答：更新操作会立即发生在旧的块（Chunk）上，然后更改才会在所有权转移前复制到新的分片上。','MongoDB面试题','f6462b48-9601-0253-6450-3a0ff538dfa4','00000000-0000-0000-0000-000000000000','2024-01-07 16:33:14','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,4),('990ca36d-19bf-7523-6644-3a0ff53f8680',0,'- [SliccDB](https://github.com/pmikstacki/SliccDB)  - 轻量级的嵌入式（内存中的）图数据库，适用于.NET。 \r\n- [RocksDB](https://github.com/curiosity-ai/rocksdb-sharp)  - 用于Facebook的RocksDB键值存储的C#绑定，同时提供了Windows、macOS和Linux的本地构建版本。 \r\n- [BrightstarDb](https://github.com/BrightstarDB/BrightstarDB)  - BrightstarDB是一个本地的.NET RDF三元存储。 \r\n- [DBreeze](https://github.com/hhblaze/DBreeze)  - DBreeze Database是一个开源的嵌入式键值存储。 \r\n- [Event Store](https://github.com/EventStore/EventStore)  - 具有JavaScript中的复杂事件处理功能的开源功能性数据库。 \r\n- [LiteDB](https://github.com/mbdavid/LiteDB)  - 一个.NET NoSQL文档存储，存储在单个数据文件中 - [https://www.litedb.org](https://www.litedb.org/) \r\n- [RavenDB](https://github.com/ravendb/ravendb)  - 一个支持LINQ的.NET文档数据库。 \r\n- [Marten](https://github.com/JasperFx/marten)  - 用于.NET应用程序的PostgreSQL文档数据库和事件存储。 \r\n- [Realm Xamarin](https://github.com/realm/realm-dotnet)  - 与SQLite和ORM相比更快、更易于使用的替代方案 - [https://realm.io/docs/dotnet/latest/](https://realm.io/docs/dotnet/latest/) \r\n- [Streamstone](https://github.com/yevhen/Streamstone)  - 用于Azure Table Storage的事件存储。 \r\n- [StringDB](https://github.com/SirJosh3917/StringDB)  - StringDB是一个模块化的键/值对存档数据库，旨在占用极小的内存并生成微小的数据库。 \r\n- [Ignite](https://github.com/apache/ignite)  - 分布式内存平台：带有SQL和LINQ支持的文档数据库；分布式计算；分布式服务和事件。 \r\n- [Yessql](https://github.com/sebastienros/yessql)  - 在任何RDBMS上工作的.NET文档数据库。 \r\n- [JsonFlatFileDataStore](https://github.com/ttu/json-flatfile-datastore)  - 带有对类型化和动态数据的支持的简单JSON平面文件数据存储。 \r\n- [Db4o-gpl](https://github.com/iboxdb/db4o-gpl)  - 面向对象的数据库，支持嵌入式和远程连接。 \r\n- [ZoneTree](https://github.com/koculu/ZoneTree)  - 用于.NET的持久、高性能、事务性和ACID兼容的有序键值数据库。\r\n* [NoDb](https://github.com/joeaudette/NoDb) -  文档数据库，个人博客和网站以及小型小册子网站是不使用数据库的不错的选择。','数据库','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,29),('99a43352-a032-acb2-c10f-3a0ff53f8683',0,'* [Strong Namer](https://github.com/dsplaisted/strongnamer) - 自动为尚未具有强名称的引用程序集添加强名称。这将允许您从使用强名称的项目中引用和使用（NuGet包含）没有强名称的程序集。\r\n* [.NET Assembly Strong-Name Signer](https://github.com/brutaldev/StrongNameSigner) - 用于为.NET程序集进行强名称签名的实用工具软件，包括您没有源代码的程序集。','强命名','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,95),('9b7476f2-add2-ae63-a29d-3a0f83abf3fb',0,'## 简介\n使用仓储用于操作数据库数据，封装通用增删改查等方式\n> `ISqlsugarRepository<TEntity>`仓储内置了Sqlsugar Db，具有一定的强耦合，但是使用起来会非常的舒服方便\n\n** 原因:**Queryable对象是微软内置的查询对象，可以使用linq语法，同时也是为了Efcore的查询对象，Sqlsugar 的查询对象为SugarQueryable对象，两者并不兼容，SugarQueryable的功能远远大与Queryable，为此Sqlsugar不会限制自己而兼容Queryable对象\n\n## 使用方式\n方式1：依赖注入`IRepository<TEntity>`接口即可\n\n方式2：依赖注入`IRepository<TEntity,Guid>`接口即可\n\n方式3：依赖注入`ISqlSugarRepository<TEntity>`接口即可\n\n方式4：依赖注入`ISqlSugarRepository<TEntity,Guid>`接口即可\n\n方式5：继承`SqlSugarRepository<TEntity,Guid>`基类，自定义仓储，注入自己的仓储接口，例如写一个`StudentRepository`继承`SqlSugarRepository<TEntity,Guid>`,再实现自己的`IStudentRepository`，后续使用`IStudentRepository`依赖注册进行使用即可\n\n> 推荐简单常用`ISqlSugarRepository<TEntity,Guid>`的注入\n\n`ISqlSugarRepository`内置了非常多的通用数据库操作方法，同时也内置了`ISqlsugarClient`Db对象在其中\n\n内置方法非常多\n- 查询\n- 删除\n- 修改\n- 添加\n- 分页查询\n- Db对象','仓储','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','00000000-0000-0000-0000-000000000000','2023-12-16 15:20:05','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('9bc9e73d-7685-c142-eb21-3a0ff53f8680',0,'- [Runtime](https://github.com/dotnet/runtime)  - Mono和CoreCLR .NET运行时，以及标准库和一些更高级的组件，如`System.Linq`和`System.Text.Json`。','CLR','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,21),('9c15047b-d276-af9c-538b-3a0ff589dddf',0,'**Python--坦克大战防真远古经典传奇版本**\n\n**作者心得**\n\n（大大小小经历了整整10次改动，真正的面向对象，人工智障，生命苦短，我用pygame）\n（v1.0：实现敌方坦克对象，我放坦克对象，创建敌人AI）\n（v2.0：优化AI，实现子弹对象）\n（v3.0：优化AI，实现精灵类碰撞检测）\n（v4.0：优化AI，实现墙体贴图对象，实现地图编辑器）\n（v5.0：优化AI，实现墙体的实体对象，实现废物类的自动删除）\n（v6.0：优化AI，实现墙体摧毁对象，加入更多墙体对象，实现道具对象，实现死亡爆炸对象）\n（v7.0：优化AI，实现出生对象，实现全音乐对象）\n（v8.0：优化AI，实现开始游戏界面，玩家坦克死亡界面，界面初始位置，实现自定义帧数，宏管理）\n（v9.0：真优化AI，敌方坦克人工智能自动学习获胜游戏的神经网络移动射击击杀等等操作当然都没有加入，更新优化地图）\n（v10.0：优化玩家移动，优化地方坦克贴图，缩减代码，优化运算。完善性能，正式收尾项目，开始学习）\n\n**效果截图**\n![image.png](/prod-api/file/8463be2b-90e8-3457-44fc-3a0ff58927d3/true)\n![image.png](/prod-api/file/c9e170c4-2444-0d0b-8db4-3a0ff5894381/true)\n![image.png](/prod-api/file/ff6d2e22-be26-640e-db6d-3a0ff58957c1/true)\n![image.png](/prod-api/file/eccb803b-15b3-90ef-c6c5-3a0ff5896965/true)\n![image.png](/prod-api/file/9b206d32-9cfc-9a92-16ea-3a0ff5897d82/true)\n![image.png](/prod-api/file/c250084b-394a-e90c-6652-3a0ff5898f8d/true)\n![image.png](/prod-api/file/2675ab3d-6234-a7e1-225c-3a0ff589a5c0/true)\n![image.png](/prod-api/file/a70858df-0f77-0077-3d64-3a0ff589b6f0/true)\n\n\n**源代码**\n\n[提取码: ss5j](https://pan.baidu.com/s/17G6fNsHJiUVHcWvhL-xd1A)\n\n**作者的话**\n面相对象，来了老弟！\n说实在的，不习惯这种模式，还是拖控件舒服哈哈哈\n但代码创建的才是主流！\n本次开发，确实下了血本（头发）\n大大小小应该更新了10个版本\n还好我每个阶段都录制了下来，体验我的心酸吧！\n这个应该是我最后一个python项目吧！哈哈哈\n','PythonPygame--坦克大战防真远古经典传奇版本','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 17:59:34','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('9d905a01-c64c-4b87-ca95-3a0ff53f8683',0,'* [C# Style Guide](https://stackoverflow.com/questions/4678178/style-guide-for-c) - StackOverflow上关于风格指南的问答。\r\n* [C# Coding Conventions](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/inside-a-program/coding-conventions) - 官方MSDN C#编码约定。\r\n* [C# Async Guidance](https://github.com/davidfowl/AspNetCoreDiagnosticScenarios/blob/master/AsyncGuidance.md) - 列出了.NET Core中的一些问题异步模式，并解释了如何解决这些问题。','风格指南','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,96),('9e334fbf-00be-29c9-5bd1-3a0fad50016c',0,'\n摸摸摸摸摸摸摸摸摸\n摸摸摸摸摸摸摸摸摸\n摸摸摸摸摸摸摸摸摸','摸鱼测试','67bbbd51-8f39-6bc3-46fe-3a0fa9fe8385','00000000-0000-0000-0000-000000000000','2023-12-24 17:23:42','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL,0),('9e7999d4-8863-f27e-b0dc-3a0fe9b5b44a',0,'泛型是一种强类型的编程机制，它允许在编译时指定类型参数，从而可以在不同的数据类型上重用代码。C# 泛型使得开发人员可以创建具有通用性的方法、类和数据结构，提高了代码的可读性、可维护性和可扩展性。\r\n\r\n## 泛型的优势\r\n1. 提高代码的复用性\r\n2. 编译时类型检查，避免运行时类型转换错误\r\n3. 提高代码的可读性和可维护性\r\n\r\n## 泛型的语法\r\n\r\n在C#中，使用尖括号来声明泛型类型参数。语法如下：\r\n\r\n```csharp\r\n\r\nclass ClassName<T>\r\n{\r\n    //泛型类成员声明\r\n}\r\n\r\ninterface InterfaceName<T>\r\n{\r\n    //泛型接口成员声明\r\n}\r\n\r\ndelegate T MyDelegate<T>(T t);\r\n\r\nvoid GenericMethod<T>(T t)\r\n{\r\n    //泛型方法体\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的语法中，T是类型参数，可以在类、接口、方法和委托中使用。\r\n## 泛型类\r\n\r\n泛型类是一种具有通用性的类，它可以在编译时指定类型参数。例如，下面是一个泛型栈类的实现：\r\n\r\n```csharp\r\n\r\npublic class Stack<T>\r\n{\r\n    private T[] elements;\r\n    private int top;\r\n\r\n    public Stack(int capacity)\r\n    {\r\n        elements = new T[capacity];\r\n        top = -1;\r\n    }\r\n\r\n    public void Push(T item)\r\n    {\r\n        if (top == elements.Length - 1)\r\n        {\r\n            throw new StackOverflowException();\r\n        }\r\n\r\n        elements[++top] = item;\r\n    }\r\n\r\n    public T Pop()\r\n    {\r\n        if (top == -1)\r\n        {\r\n            throw new InvalidOperationException();\r\n        }\r\n\r\n        return elements[top--];\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的代码中，我们声明了一个泛型类`Stack<T>`，它包含了一个数组和两个方法`Push()`和`Pop()`。在构造函数中，我们创建了一个指定容量的数组，并将top初始化为-1。在Push()方法中，我们向数组中添加元素，并将top加1。在Pop()方法中，我们从数组中取出一个元素，并将top减1。\r\n## 泛型方法\r\n\r\n泛型方法是一种具有通用性的方法，它可以在编译时指定类型参数。例如，下面是一个泛型方法的实现：\r\n\r\n```csharp\r\n\r\npublic static T Max<T>(T first, T second) where T : IComparable<T>\r\n{\r\n    if (first.CompareTo(second) > 0)\r\n    {\r\n        return first;\r\n    }\r\n\r\n    return second;\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的代码中，我们声明了一个泛型方法`Max<T>()`，它接受两个参数，并返回一个类型为T的值。在方法体中，我们使用`IComparable<T>`接口的`CompareTo()`方法来比较两个参数的大小，并返回较大的值。\r\n## 泛型接口\r\n\r\n泛型接口是一种具有通用性的接口，它可以在编译时指定类型参数。例如，下面是一个泛型接口的实现：\r\n\r\n```csharp\r\n\r\npublic interface IMyInterface<T>\r\n{\r\n    T GetResult();\r\n}\r\n\r\npublic class MyClass : IMyInterface<int>\r\n{\r\n    public int GetResult()\r\n    {\r\n        return 42;\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的代码中，我们声明了一个泛型接口`IMyInterface<T>`，它包含一个`GetResult()`方法。在实现类`MyClass`中，我们指定类型参数为`int`，并实现了`GetResult()`方法。\r\n## 泛型约束\r\n\r\n泛型约束可以限制泛型类型参数的类型，从而提高代码的安全性和可读性。例如，我们可以使用where关键字来指定泛型类型参数必须实现指定的接口或派生自指定的类。例如：\r\n\r\n```csharp\r\n\r\npublic static void Print<T>(T value) where T : IComparable<T>\r\n{\r\n    Console.WriteLine(value.CompareTo(default(T)) > 0 ? value.ToString() : \"default\");\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的代码中，我们使用泛型约束来限制类型参数T必须实现`IComparable<T>`接口。在方法体中，我们使用`CompareTo()`方法比较value和默认值的大小，并输出相应的结果。\r\n## 总结\r\n\r\nC#泛型为开发人员提供了一种通用性的编程机制，可以提高代码的可读性、可维护性和可扩展性。泛型类、泛型方法和泛型接口等都是基于泛型的核心概念实现的。通过使用泛型约束，我们可以限制泛型类型参数的类型，从而提高代码的安全性和可读性。\r\n','C# 泛型（Generic）','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,36),('9fa895cf-8481-7222-6a4e-3a0ff53f8681',0,'- [LibTessDotNet](https://github.com/speps/LibTessDotNet)  - .NET版本的著名GLU Tessellator，用于三角化多边形。 \r\n- [Oxyplot](https://github.com/oxyplot/)  - OxyPlot是一个跨平台的.NET绘图库。 \r\n- [OpenTK](https://github.com/opentk/opentk)  - Open Toolkit是一个先进的低级C#库，封装了OpenGL、OpenCL和OpenAL。 \r\n- [NGraphics](https://github.com/praeclarum/NGraphics)  - NGraphics是一个用于在.NET上呈现矢量图形的跨平台库。 \r\n- [Aspose.Drawing](https://products.aspose.com/drawing/net)  - 完全托管、跨平台的完整2D图形库，用于绘制文本、几何图形和图像，具有System.Drawing兼容的API。**[$]** \r\n- [ScottPlot](https://swharden.com/scottplot/)  - 一个绘图库，用于交互式显示大数据集。支持线图、条形图、饼图、散点图等。支持WinForms、WPF、Avalonia、控制台。 \r\n- [LiveCharts2](https://github.com/beto-rodriguez/LiveCharts2)  - 简单、灵活、交互式和强大的图表、地图和仪表盘库，适用于.NET。LiveCharts2支持WPF、WinForms、Xamarin、Avalonia、WinUI、UWP。 \r\n- [Helix Toolkit](https://www.helix-toolkit.org/)  - Helix Toolkit是.NET的3D组件集合。 \r\n- [AssimpNet](https://bitbucket.org/Starnick/assimpnet)  - 用于Open Asset Importer（\"Assimp\"）的跨平台.NET Standard封装。该库可用于导入、处理和导出用于在图形/游戏应用程序中渲染的3D模型。支持导入超过40种格式（如OBJ、FBX、GLTF、3DS、Collada）并可以导出其中一些格式（如OBJ、GLTF、3DS、Collada）。Mesh处理功能允许生成或优化用于实时渲染的网格数据。 \r\n- [Silk.NET](https://github.com/Ultz/Silk.NET)  - 用于许多高级API的跨平台、高性能、低级.NET Standard封装，如OpenGL、OpenCL、OpenAL、OpenXR、Assimp、GLFW等。除了封装本机API外，它还具有自己的窗口和输入抽象。这使得使用Silk.NET进行游戏和应用程序开发非常容易，几乎包含了3D应用程序开发者所需的一切。 \r\n- [Veldrid](https://github.com/mellinoe/veldrid)  - 用于.NET的低级、可移植的图形和计算库。 \r\n- [RealTimeGraphX](https://github.com/royben/RealTimeGraphX)  - RealTimeGraphX是一种数据类型不可知、高性能的WPF、UWP绘图库，很快还将支持Xamarin Forms。 \r\n- [VectSharp](https://github.com/arklumpus/VectSharp)  - .NET库，用于创建矢量图形和文本，然后将其导出为PDF、SVG和光栅图像格式。\r\n','绘图','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,49),('a147d3f1-88b4-3f79-1cf4-3a0ff53f8681',0,'\r\n- [CppSharp](https://github.com/mono/CppSharp)  - 用于将C++ API暴露给C#的工具。 \r\n- [Sharpen](https://github.com/mono/sharpen)  - Sharpen是由db4o创建的Eclipse插件，允许您将Java项目转换为C#。 \r\n- [CXXI](https://github.com/mono/cxxi)  - C++互操作框架。 \r\n- [pythonnet](https://github.com/pythonnet/pythonnet)  - Python和.NET互操作框架。 \r\n- [PInvoke Interop Assistant](https://github.com/jaredpar/pinvoke-interop-assistant)  - 将C代码转换为托管P/Invoke签名或反之。 \r\n- [pinvoke](https://github.com/dotnet/pinvoke)  - 包含最新Windows操作系统的P/Invoke代码的库。 \r\n- [LegacyWrapper](https://github.com/CodefoundryDE/LegacyWrapper)  - LegacyWrapper使用包装器进程从相反架构（x86或AMD64）的进程中调用DLL。 \r\n- [Pyrolite](https://github.com/irmen/Pyrolite)  - 该库允许您的Java或.NET程序与Python世界轻松交互。它使用Pyro协议来调用远程对象上的方法。\r\n','互操作性','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,59),('a2329aa0-f153-1609-4577-3a0ff53f8684',0,'* [Supernova.Enum.Generators](https://github.com/EngRajabi/Enum.Source.Generator) - 一个C#源代码生成器，用于从枚举类型创建一个枚举类。使用这个包，你可以非常快速地处理枚举，而不需要使用反射。','源码生成','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,110),('a299511e-d59c-3576-6682-3a0ff53f8685',0,'* [Discover .NET](https://discoverdot.net) - Awesome .NET open source and community resources.\r\n* [NuGet Trends](https://nugettrends.com) - 查看 NuGet 包的采用情况以及在 NuGet 上的热门趋势。\r\n* [Weekly C# Digest](https://csharpdigest.net/) - 每周电子邮件通讯，手动精选来自 .NET 社区的前 5 条链接。\r\n* [ASP.NET Core Developer Roadmap](https://roadmap.sh/aspnet-core) - A complete guide to become a ASP.NET Developer.','资源','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,112),('a329afbc-1532-5a68-f4ac-3a0f83ad3b65',0,'## 简介\n> 授权必须基于鉴权之后，知道了用户的信息，根据用户权限列表进行判断是否有权限进入\n\n框架内部集成授权方式，并非为Asp.netcore授权方式，而是提供一种更简单的方式\n使用起来非常简单\n\n## 使用\n只需要在需要授权的接口上打上特性 `[Permission(\"code\")]`接口\n\ncode为登录时候颁发的token中的权限，如果该用户的token 权限列表中不包含code，将被会拦截，并提示未授权，被拒绝\n\n``` cs\n        [Permission(\"system:user:delete\")]\n        public override async Task DeleteAsync(Guid id)\n        {\n            await base.DeleteAsync(id);\n        }\n```','接口授权','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','00000000-0000-0000-0000-000000000000','2023-12-16 15:21:29','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('a3605c16-0417-fa00-ed4b-3a0ff53f8681',0,'- [MonoGame](https://github.com/MonoGame/MonoGame)  - 一个用于创建强大跨平台游戏的框架。 \r\n- [FNA](https://github.com/FNA-XNA/FNA)  - FNA是XNA4的重新实现，专注于开发桌面上完全准确的XNA4运行时。 \r\n- [CocosSharp](https://github.com/mono/CocosSharp)  - CocosSharp是Cocos2D和Cocos3D API的C#实现，可在MonoGame支持的任何平台上运行。 \r\n- [Duality](https://github.com/AdamsLair/duality)  - Duality是一个2D游戏开发框架，专注于模块化，并带有可视化编辑器。 \r\n- [Stride Game Engine](https://stride3d.net/)  - Stride Game Engine是一个2D/3D跨平台游戏引擎，具备场景编辑器、粒子、基于物理的渲染（PBR）、脚本等功能。 \r\n- [Wave Engine](https://waveengine.net/Engine)  - Wave Engine是一个免费的C#组件化现代游戏引擎，允许创建支持Kinect、Oculus Rift、Vuforia、Cardboard、Leap Motion等多平台的游戏。**[免费][专有]** \r\n- [UrhoSharp](https://github.com/xamarin/urho)  - UrhoSharp是Urho3D游戏引擎的C#实现，可在iOS、Mac、Windows、Android和Linux系统上运行。 \r\n- [Nez](https://github.com/prime31/Nez)  - Nez是一个免费的面向2D的框架，与MonoGame和FNA兼容。 \r\n- [BEPUphysics](https://github.com/bepu/bepuphysics2)  - BEPUphysics是一个纯C#的3D物理库。 \r\n- [Devtodev](https://github.com/devtodev-analytics/winstore-sdk)  - 面向游戏开发者的全周期分析解决方案。 \r\n- [UnrealCLR](https://github.com/nxrighthere/UnrealCLR)  - Unreal Engine的.NET Core集成。 \r\n- [osu!framework](https://github.com/ppy/osu-framework)  - 一个以令人惊叹的游戏为目标的2D应用程序/游戏，用C#编写。\r\n','游戏引擎','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,46),('a3e356cc-557d-f8f3-96a4-3a0ff53f8684',0,'* [Extended WPF Toolkit™](https://github.com/xceedsoftware/wpftoolkit) - 一个丰富的控件、组件和实用工具集，用于创建WPF应用程序。\r\n* [WPF](https://github.com/dotnet/wpf) - WPF是一个用于构建Windows桌面应用程序的.NET Core用户界面框架。','WPF','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,108),('a75dfb56-60dd-0de5-7a55-3a0ff53ad54b',0,'# Elasticsearch面试题\r\n\r\n**1、ES中的倒排索引是什么？**\r\n\r\n答：传统的检索方式是通过文章，逐个遍历找到对应关键词的位置。\r\n倒排索引，是通过分词策略，形成了词和文章的映射关系表，也称倒排表，这种词典 + 映射表即为**倒排索引**。\r\n\r\n其中词典中存储词元，倒排表中存储该词元在哪些文中出现的位置。\r\n有了倒排索引，就能实现 O(1) 时间复杂度的效率检索文章了，极大的提高了检索效率。\r\n\r\n加分项：\r\n倒排索引的底层实现是基于：FST（Finite State Transducer）数据结构。\r\n\r\nLucene 从 4+ 版本后开始大量使用的数据结构是 FST。FST 有两个优点：\r\n1）空间占用小。通过对词典中单词前缀和后缀的重复利用，压缩了存储空间；\r\n2）查询速度快。O(len(str)) 的查询时间复杂度。\r\n\r\n**2、ES是如何实现master选举的？**\r\n\r\n答：\r\n\r\n前置条件：\r\n1）只有是候选主节点（master：true）的节点才能成为主节点。\r\n2）最小主节点数（min_master_nodes）的目的是防止脑裂。\r\n\r\nElasticsearch 的选主是 ZenDiscovery 模块负责的，主要包含 Ping（节点之间通过这个RPC来发现彼此）和 Unicast（单播模块包含一个主机列表以控制哪些节点需要 ping 通）这两部分；\r\n获取主节点的核心入口为 findMaster，选择主节点成功返回对应 Master，否则返回 null。\r\n\r\n选举流程大致描述如下：\r\n第一步：确认候选主节点数达标，elasticsearch.yml 设置的值 discovery.zen.minimum_master_nodes;\r\n第二步：对所有候选主节点根据nodeId字典排序，每次选举每个节点都把自己所知道节点排一次序，然后选出第一个（第0位）节点，暂且认为它是master节点。\r\n第三步：如果对某个节点的投票数达到一定的值（候选主节点数n/2+1）并且该节点自己也选举自己，那这个节点就是master。否则重新选举一直到满足上述条件。\r\n\r\n- 补充：\r\n  - 这里的 id 为 string 类型。\r\n  - master 节点的职责主要包括集群、节点和索引的管理，不负责文档级别的管理；data 节点可以关闭 http 功能。\r\n\r\n**3、如何解决ES集群的脑裂问题**\r\n\r\n答：所谓集群脑裂，是指 Elasticsearch 集群中的节点（比如共 20 个），其中的 10 个选了一个 master，另外 10 个选了另一个 master 的情况。\r\n\r\n当集群 master 候选数量不小于 3 个时，可以通过设置最少投票通过数量（discovery.zen.minimum_master_nodes）超过所有候选节点一半以上来解决脑裂问题；\r\n当候选数量为两个时，只能修改为唯一的一个 master 候选，其他作为 data 节点，避免脑裂问题\r\n\r\n**4、详细描述一下ES索引文档的过程？**\r\n\r\n答：这里的索引文档应该理解为文档写入 ES，创建索引的过程。\r\n\r\n第一步：客户端向集群某节点写入数据，发送请求。（如果没有指定路由/协调节点，请求的节点扮演协调节点的角色。）\r\n​        第二步：协调节点接受到请求后，默认使用文档 ID 参与计算（也支持通过 routing），得到该文档属于哪个分片。随后请求会被转到另外的节点。\r\n\r\n第三步：当分片所在的节点接收到来自协调节点的请求后，会将请求写入到 Memory Buffer，然后定时（默认是每隔 1 秒）写入到F ilesystem Cache，这个从 Momery Buffer 到 Filesystem Cache 的过程就叫做 refresh；\r\n第四步：当然在某些情况下，存在 Memery Buffer 和 Filesystem Cache 的数据可能会丢失，ES 是通过 translog 的机制来保证数据的可靠性的。其实现机制是接收到请求后，同时也会写入到 translog 中，当 Filesystem cache 中的数据写入到磁盘中时，才会清除掉，这个过程叫做 flush；\r\n第五步：在 flush 过程中，内存中的缓冲将被清除，内容被写入一个新段，段的 fsync 将创建一个新的提交点，并将内容刷新到磁盘，旧的 translog 将被删除并开始一个新的 translog。\r\n第六步：flush 触发的时机是定时触发（默认 30 分钟）或者 translog 变得太大（默认为 512 M）时。\r\n\r\n补充：关于 Lucene 的 Segement\r\n\r\n- Lucene 索引是由多个段组成，段本身是一个功能齐全的倒排索引。\r\n- 段是不可变的，允许 Lucene 将新的文档增量地添加到索引中，而不用从头重建索引。\r\n- 对于每一个搜索请求而言，索引中的所有段都会被搜索，并且每个段会消耗 CPU 的时钟周、文件句柄和内存。这意味着段的数量越多，搜索性能会越低。\r\n- 为了解决这个问题，Elasticsearch 会合并小段到一个较大的段，提交新的合并段到磁盘，并删除那些旧的小段。（段合并）\r\n\r\n**5、详细描述一下ES更新和删除文档的过程？**\r\n\r\n答：删除和更新也都是写操作，但是 Elasticsearch 中的文档是不可变的，因此不能被删除或者改动以展示其变更。\r\n\r\n磁盘上的每个段都有一个相应的 .del 文件。当删除请求发送后，文档并没有真的被删除，而是在 .del 文件中被标记为删除。该文档依然能匹配查询，但是会在结果中被过滤掉。当段合并时，在 .del 文件中被标记为删除的文档将不会被写入新段。\r\n\r\n在新的文档被创建时，Elasticsearch 会为该文档指定一个版本号，当执行更新时，旧版本的文档在 .del 文件中被标记为删除，新版本的文档被索引到一个新段。旧版本的文档依然能匹配查询，但是会在结果中被过滤掉。\r\n\r\n**6、详细描述一下ES搜索的过程？**\r\n\r\n答：搜索被执行成一个两阶段过程，即 Query Then Fetch；\r\nQuery阶段：\r\n查询会广播到索引中每一个分片拷贝（主分片或者副本分片）。每个分片在本地执行搜索并构建一个匹配文档的大小为 from + size 的优先队列。PS：在搜索的时候是会查询Filesystem Cache的，但是有部分数据还在Memory Buffer，所以搜索是近实时的。\r\n每个分片返回各自优先队列中 **所有文档的 ID 和排序值** 给协调节点，它合并这些值到自己的优先队列中来产生一个全局排序后的结果列表。\r\nFetch阶段：\r\n协调节点辨别出哪些文档需要被取回并向相关的分片提交多个 GET 请求。每个分片加载并 丰富 文档，如果有需要的话，接着返回文档给协调节点。一旦所有的文档都被取回了，协调节点返回结果给客户端。\r\n\r\n**7、在并发情况下，ES如果保证读写一致？**\r\n\r\n答：可以通过版本号使用乐观并发控制，以确保新版本不会被旧版本覆盖，由应用层来处理具体的冲突；\r\n另外对于写操作，一致性级别支持quorum/one/all，默认为quorum，即只有当大多数分片可用时才允许写操作。但即使大多数可用，也可能存在因为网络等原因导致写入副本失败，这样该副本被认为故障，分片将会在一个不同的节点上重建。\r\n对于读操作，可以设置replication为sync(默认)，这使得操作在主分片和副本分片都完成后才会返回；如果设置replication为async时，也可以通过设置搜索请求参数_preference为primary来查询主分片，确保文档是最新版本。\r\n\r\n**8、 ES对于大数据量（上亿量级）的聚合如何实现？**\r\n\r\n答：Elasticsearch 提供的首个近似聚合是cardinality 度量。它提供一个字段的基数，即该字段的distinct或者unique值的数目。它是基于HLL算法的。HLL 会先对我们的输入作哈希运算，然后根据哈希运算的结果中的 bits 做概率估算从而得到基数。其特点是：可配置的精度，用来控制内存的使用（更精确 ＝ 更多内存）；小的数据集精度是非常高的；我们可以通过配置参数，来设置去重需要的固定内存使用量。无论数千还是数十亿的唯一值，内存使用量只与你配置的精确度相关\r\n\r\n**9、对于GC方面，在使用ES时要注意什么？**\r\n\r\n答：1）倒排词典的索引需要常驻内存，无法GC，需要监控data node上segment memory增长趋势。\r\n2）各类缓存，field cache, filter cache, indexing cache, bulk queue等等，要设置合理的大小，并且要应该根据最坏的情况来看heap是否够用，也就是各类缓存全部占满的时候，还有heap空间可以分配给其他任务吗？避免采用clear cache等“自欺欺人”的方式来释放内存。\r\n3）避免返回大量结果集的搜索与聚合。确实需要大量拉取数据的场景，可以采用scan & scroll api来实现。\r\n4）cluster stats驻留内存并无法水平扩展，超大规模集群可以考虑分拆成多个集群通过tribe node连接。\r\n5）想知道heap够不够，必须结合实际应用场景，并对集群的heap使用情况做持续的监控。\r\n\r\n**10、说说你们公司ES的集群架构，索引数据大小，分片有多少，以及一些调优手段？**\r\n\r\n答：根据实际情况回答即可，如果是我的话会这么回答：\r\n我司有多个ES集群，下面列举其中一个。该集群有20个节点，根据数据类型和日期分库，每个索引根据数据量分片，比如日均1亿+数据的，控制单索引大小在200GB以内。　\r\n下面重点列举一些调优策略，仅是我做过的，不一定全面，如有其它建议或者补充欢迎留言。\r\n部署层面：\r\n1）最好是64GB内存的物理机器，但实际上32GB和16GB机器用的比较多，但绝对不能少于8G，除非数据量特别少，这点需要和客户方面沟通并合理说服对方。\r\n2）多个内核提供的额外并发远胜过稍微快一点点的时钟频率。\r\n3）尽量使用SSD，因为查询和索引性能将会得到显著提升。\r\n4）避免集群跨越大的地理距离，一般一个集群的所有节点位于一个数据中心中。\r\n5）设置堆内存：节点内存/2，不要超过32GB。一般来说设置export ES_HEAP_SIZE=32g环境变量，比直接写-Xmx32g -Xms32g更好一点。\r\n6）关闭缓存swap。内存交换到磁盘对服务器性能来说是致命的。如果内存交换到磁盘上，一个100微秒的操作可能变成10毫秒。 再想想那么多10微秒的操作时延累加起来。不难看出swapping对于性能是多么可怕。\r\n7）增加文件描述符，设置一个很大的值，如65535。Lucene使用了大量的文件，同时，Elasticsearch在节点和HTTP客户端之间进行通信也使用了大量的套接字。所有这一切都需要足够的文件描述符。\r\n8）不要随意修改垃圾回收器（CMS）和各个线程池的大小。\r\n9）通过设置gateway.recover_after_nodes、gateway.expected_nodes、gateway.recover_after_time可以在集群重启的时候避免过多的分片交换，这可能会让数据恢复从数个小时缩短为几秒钟。\r\n索引层面：\r\n1）使用批量请求并调整其大小：每次批量数据 5–15 MB 大是个不错的起始点。\r\n2）段合并：Elasticsearch默认值是20MB/s，对机械磁盘应该是个不错的设置。如果你用的是SSD，可以考虑提高到100-200MB/s。如果你在做批量导入，完全不在意搜索，你可以彻底关掉合并限流。另外还可以增加 index.translog.flush_threshold_size 设置，从默认的512MB到更大一些的值，比如1GB，这可以在一次清空触发的时候在事务日志里积累出更大的段。\r\n3）如果你的搜索结果不需要近实时的准确度，考虑把每个索引的index.refresh_interval 改到30s。\r\n4）如果你在做大批量导入，考虑通过设置index.number_of_replicas: 0 关闭副本。\r\n5）需要大量拉取数据的场景，可以采用scan & scroll api来实现，而不是from/size一个大范围。\r\n存储层面：\r\n1）基于数据+时间滚动创建索引，每天递增数据。控制单个索引的量，一旦单个索引很大，存储等各种风险也随之而来，所以要提前考虑+及早避免。\r\n2）冷热数据分离存储，热数据（比如最近3天或者一周的数据），其余为冷数据。对于冷数据不会再写入新数据，可以考虑定期force_merge加shrink压缩操作，节省存储空间和检索效率。','Elasticsearch面试题','f6462b48-9601-0253-6450-3a0ff538dfa4','00000000-0000-0000-0000-000000000000','2024-01-07 16:33:14','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,3),('a8bb10c8-bcd3-c7c2-9583-3a0ff5804f09',0,'**C语言控制台--贪吃蛇**\n\n**作者心得**\n这应该是我与我的团队第一次真正弄出有意义的程序\n（基本都在上课的时候偷偷弄的，嘿嘿）\n这个代码并不算优秀，为早期的制作的程序\nc语言基本是所有程序员第一次接触的代码，包括我也一样\n早期的东西上课也不会讲，纯粹的自己瞎估摸，花了很长时间才弄出的玩意儿，大大小小更新了至少10几次，制作出花了3天，解决bug，估计花了快一个月，最终功夫不负有心人，用最简单的技术，做出这个玩意儿！\n面相过程c语言控制台贪吃蛇\n\n**需求分析**\n（1）用户的载入界面\n（2）游戏界面以及操作系统\n      ①wasd控制蛇的上下左右移动\n      ②蛋的生成\n③吃到墙或者自己游戏结束\n④按下方向键，不能按下反向的方向键\n⑤蛋不刷到蛇身上\n（3）游戏结束界面\n\n**模块设计**\n（1） Start()   //开始游戏界面\n（2） Wasd()  //进行蛇的方向控制\n（3） Show()  //显示整个游戏的界面\n（4） Eat()   //吃蛋的操作，以及刷单的操作\n（5） End()   //游戏死亡结束界面\n（6） Len()   //蛇身的移动操作\n（7）Printsnake()  //显示初始游戏界面\n（8）Main()    //入口函数，将其他函数整合\n\n**源代码**\n\n```c\n#include<stdio.h>\n#include<string.h>\n#include<windows.h>\n#include<stdlib.h>\n#include<time.h>\n#include<conio.h>\n\nvoid gotoxy(int x,int y)\n{\n\tCOORD c;\n\tc.X=x-1;\n\tc.Y=y-1;\n\tSetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);\n}\n\n\nint color(int c)\n{\nSetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);\nreturn 0;\n}\n    int i,j,x=4,y=4,m=3,n=3,f=0,q,p,ti=4,x3,y3,end=0;\n\tchar name[10];\n\tint x2[30]={4,4,4,4},y2[30]={4,4,4,4};\n\tchar map[20][20]=\n\t{{''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#''}\n\t,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n\t,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n\t,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n\t,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n\t,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n\t,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n\t,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n\t,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n\t,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n\t,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n    ,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n\t,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n\t,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n\t,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n\t,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n\t,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n\t,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n\t,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n\t,{''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#''}\n\t},k=''s'',old=''s'';\n\nvoid printsnake()\n{\ngotoxy(35,1);\ncolor(6);\nprintf(\"/^\\\\/^\\\\\");\n\ngotoxy(34,2);\nprintf(\"|__| 0|\");\n\ngotoxy(33,2);\ncolor(2);\nprintf(\"_\");\n\ngotoxy(25,3);\ncolor(12);\nprintf(\"\\\\/\");\n\ngotoxy(31,3);\ncolor(2);\nprintf(\"/\");\n\ngotoxy(37,3);\ncolor(6);\nprintf(\"\\\\_/\");\n\n\ngotoxy(41,3);\ncolor(10);\nprintf(\"\\\\\");\n\ngotoxy(26,4);\ncolor(12);\nprintf(\"\\\\_____\");\n\ngotoxy(32,4);\nprintf(\"______________/\");\n\ngotoxy(31,4);\ncolor(2);\nprintf(\"|\");\n\ngotoxy(43,4);\ncolor(10);\nprintf(\"\\\\\");\n\ngotoxy(32,5);\ncolor(2);\nprintf(\"\\\\._______\");\n\ngotoxy(44,5);\ncolor(10);\nprintf(\"\\\\\");\n\ngotoxy(39,6);\nprintf(\"|    |                \\\\\");\n\ngotoxy(38,7);\nprintf(\"/    /                  \\\\\");\n\ngotoxy(37,8);\nprintf(\"/    /                  \\\\ \\\\\");\n\ngotoxy(35,9);\nprintf(\"/    /                     \\\\ \\\\\");\n\ngotoxy(34,10);\nprintf(\"/    /                       \\\\  \\\\\");\n\ngotoxy(33,11);\nprintf(\"/    /        _----_           \\\\  \\\\\");\n\ngotoxy(32,12);\nprintf(\"/    /     _-~       ~-_          | |\");\n\ngotoxy(31,13);\nprintf(\"(   （    _-~   _--_    ~-_       _/  |\");\n\ngotoxy(32,14);\nprintf(\"\\\\ ~-___-~   _-~    ~-_     ~-_-~    /\");\n\ngotoxy(33,15);\nprintf(\"~-_       _-~          ~-_     _-~\");\n\ngotoxy(35,16);\nprintf(\"~--_____-~               ~--~\");\n\n\n}\n\tvoid bk()\n\t{\n\t\tprintf(\"GAME OVER\");\n\t//\tk=getchar();\n\t\tend=1;\n\t\n\t}\n\nvoid len()\n{\n\n\t     map[m][n]=''O'';\n\t\t  srand((int)time(NULL));\n\t\t  \t\t  q=rand()%8+1;\n\t\t  p=rand()%18+1;\n\n           \n          x2[0]=x;y2[0]=y;\n\t\t  for(i=28;i>=0;i--)\n\t\t  {\n\t\t\t  x2[i+1]=x2[i];\n\t\t\t  y2[i+1]=y2[i];\n\t\t  }\n}\n\nvoid wasd()\n{\n\n  out:\n\tif(kbhit()!=0)\n\t\tk=getch();\n\n\n\t if(k==''a'')\n\t { \n\n\t\t if(old==''d'')\n\t\t {\n\n\t\t\t k=''d'';\n         goto out;\n\t\t }\n\t\t old=''a'';\n\t\t if(map[x][y-1]==''#''||map[x][y-1]==''*'')\n\t\t\t bk();\n\t\t map[x][y-1]=map[x][y];\n    \n\t    y=y-1;\n\t }\n\n\n\t if(k==''w'')\n\t {\n\t\t if(old==''s'')\n\t\t {\n\t\t\t k=''s'';\n\t\t\t goto out;\n\t\t }\n\t\t old=''w'';\n\t\t if(map[x-1][y]==''*''||map[x-1][y]==''#'')\n\t\t\t\t bk();\n\t\t\t map[x-1][y]=map[x][y];\n\t\t\n\t\t x=x-1;\n\t }\n\n\n\t if(k==''d'')\n\t {\n\t\t if(old==''a'')\n\t\t {\n\t\t\t k=''a'';\n\t\t\t goto out;\n\t\t }\n           \n\t\t old=''d'';\n\t\t  if(map[x][y+1]==''#''||map[x][y+1]==''*'')\n\t\t\t\t\t bk();\n\t\t map[x][y+1]=map[x][y];\n\t\t\t\n\t\t\t y=y+1;\n\t }\n\n\n\t if(k==''s'')\n\t {\n\t\t if(old==''w'')\n\t\t {\n\t\t\t k=''w'';\n\t\t\t goto out;\n\t\t }\n\n\t\t old=''s'';\n\t\t if(map[x+1][y]==''*''||map[x+1][y]==''#'')\n\t\t\t\t\t\t bk();\n\t\t map[x+1][y]=map[x][y];\n\t\n\t\t x=x+1;\n\t }\n     \n map[x2[ti]][y2[ti]]='' '';\n\t\n\tgotoxy(2*y2[ti]+1,x2[ti]+1);\n    \tprintf(\" \");\n}\n\n\nvoid eat()\n{\n    if(map[x][y]==map[m][n]&&map[x][y]!=map[q][p])\n\n\t{\tif(map[x][y]==map[q][p])\n\t{ p++;q++;}\n\n      ++ti;\n\t\t  \n\t\tmap[q][p]=''O'';\n\t            m=q;n=p;\n\n\n\tf=f+1;}\n\n\tif(map[x][y]=map[m][n])\n\t\tmap[x][y]=''*'';\n}\n\n\n    \n\tvoid show()\n\t{\n\n       gotoxy(2*n+1,m+1);\n           //if(map[q][p]==''o'')\n\t      printf(\"■\");\n\t\n\t\t\n        gotoxy(2*y+1,x+1);\n           if(map[x][y]==''*'')\n\t      printf(\"■\");\n\t\n  \n  //printf(\"\\n亲爱的%s\\n你的分数为%d\\n\",name,f);\n\t\n\tSleep(200);\n\n\n\n\t\n\t}\n   \n\n   \n    void start()\n\t{ \n\t\t\n \t\n \n      gotoxy(18,18);\n\t  color(4);\n\t\tprintf(\"欢迎来到贪吃蛇的世界！请输入你的玩家名：\");\n\t\tscanf(\"%s\",&name);\n\t\n       system(\"CLS\");\n\n\n\tgotoxy(1,1);\n\tfor(i=0;i<20;i++)\n\t{\n\t\tprintf(\"\\n\");\n\t\tfor(j=0;j<20;j++)\n\t\t\t/*printf(\"  %c\",map[i][j]);}*/\n\n\t{\n\t\tif (map[i][j]==''#'')\n\t\t{\tgotoxy(2*j+1,i+1);\n\t\tprintf(\"■\");}\n\t\t\n\n\t}\n\t}\n\t}\n\n\n\tint main()\n\t{\n\t\tprintsnake();\n   \n\t  start();\n      \n\t\tfor(;;)\n\t\t{\n\t\t\t\n\t    len();\n\t\t\t\n\t\twasd();\n\t\t\n\t\t\tif(end==1)\n\t\t\tbreak;\n\t\teat();\n\t\t\n\t\tshow();\n\t\t\n     \tgotoxy(30,20);\n\t\tprintf(\"\\n亲爱的%s\\n你的分数为%d\\n\",name,f);\n\t\t//\tk=getchar();\n\t\t}\n    system(\"CLS\"); \n\tgotoxy(35,12);\n\t printf(\"游戏结束\\n                          \");\n\t\treturn 0;\n\t}\n```\n**测试功能**\n![image.png](/prod-api/file/5c255856-653c-ae98-25fe-3a0ff57fa3bf/true)\n![image.png](/prod-api/file/d029043f-3b68-edc2-c6d9-3a0ff57fbf40/true)\n![image.png](/prod-api/file/a968e961-63e6-c46d-fa89-3a0ff57fd5ba/true)\n![image.png](/prod-api/file/6b6956f4-b3e3-9042-9201-3a0ff57ff5a5/true)\n**用户手册**\n（1）玩家打开本系统文件。\n（2）进入本系统后进入主界面点击开始游戏，输入玩家用户名，按下回车。\n（3）玩家使用wasd进行蛇身的移动，如果吃到蛋，将蛇身加长一格，如果撞到墙壁或者撞到蛇身，那么将显示游戏结束。\n（4）游戏目的：吃完所有的蛋，将地图填满，显示游戏胜利。\n\n**作者的话**\n大学期间上课学的东西，真的真的太肤浅了，自己几天掌握之后，重在课外的积累！\n那是的我还没有目标，我没有想到我会走向asp .net之路！\n\n','C语言控制台--贪吃蛇','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 17:49:07','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('ad38c09e-fd83-cd58-3cab-3a0fe9b5b44a',0,'在C#中，属性（Property）是一种特殊的成员，用于封装类中的字段（Field）和计算值，以提供对类的访问。属性允许您在外部代码中像访问字段一样访问类的内部数据，但是使用属性会使代码更加安全和易于维护。\r\n## 声明属性\r\n\r\n在C#中，属性由两个访问器（Accessor）组成，分别为\"get\"和\"set\"。 \"get\"访问器返回属性的值，而\"set\"访问器用于设置属性的值。要声明一个属性，您可以使用以下语法：\r\n\r\n```csharp\r\n\r\n<访问修饰符> <属性类型> <属性名> { get; set; }\r\n```\r\n\r\n\r\n\r\n其中： \r\n- `<访问修饰符>`：可以是public、private、internal等访问修饰符，用于指定属性的可访问性。 \r\n- `<属性类型>`：指定属性的数据类型。 \r\n- `<属性名>`：指定属性的名称。 \r\n- `{ get; set; }`：指定属性的访问器。\r\n\r\n下面是一个示例：\r\n\r\n```csharp\r\n\r\npublic class Person\r\n{\r\n    private string name;\r\n    \r\n    public string Name\r\n    {\r\n        get { return name; }\r\n        set { name = value; }\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的代码中，我们声明了一个名为\"Name\"的属性，它的类型是字符串。该属性有一个\"get\"访问器和一个\"set\"访问器，用于获取和设置私有字段\"name\"的值。\r\n## 自动属性\r\n\r\n在C# 3.0及更高版本中，您可以使用自动属性（Auto-implemented Property）来更方便地声明属性。自动属性是一种特殊类型的属性，它将\"get\"和\"set\"访问器的实现留给编译器自动生成。要声明自动属性，您可以使用以下语法：\r\n\r\n```csharp\r\n\r\n<访问修饰符> <属性类型> <属性名> { get; set; }\r\n```\r\n\r\n\r\n\r\n下面是一个示例：\r\n\r\n```csharp\r\n\r\npublic class Person\r\n{\r\n    public string Name { get; set; }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的代码中，我们声明了一个名为\"Name\"的自动属性，它的类型是字符串。该属性有一个\"get\"访问器和一个\"set\"访问器，它们的实现由编译器自动生成。\r\n## 只读属性\r\n\r\n只读属性（Read-only Property）是一种属性，它只有\"get\"访问器，没有\"set\"访问器。只读属性通常用于表示计算值或从外部访问私有字段的值。要声明只读属性，您可以使用以下语法：\r\n\r\n```csharp\r\n\r\n<访问修饰符> <属性类型> <属性名> { get; }\r\n```\r\n\r\n\r\n\r\n下面是一个示例：\r\n\r\n```csharp\r\n\r\npublic class Circle\r\n{\r\n    private double radius;\r\n    \r\n    public Circle(double radius)\r\n    {\r\n        this.radius = radius;\r\n    }\r\n    \r\n    public double Radius\r\n    {\r\n        get { return radius; }\r\n    }\r\n\r\n    public double Area\r\n    {\r\n        get { return Math.PI * radius * radius; }\r\n    }\r\n}\r\n\r\n```\r\n\r\n在上面的代码中，我们声明了一个名为\"Radius\"的只读属性，它返回私有字段\"radius\"的值。我们还声明了另一个名为\"Area\"的只读属性，它返回圆的面积，这是一个计算值。\r\n\r\n## 只写属性\r\n\r\n只写属性（Write-only Property）是一种属性，它只有\"set\"访问器，没有\"get\"访问器。只写属性通常用于设置私有字段的值，而不需要从外部读取该值。要声明只写属性，您可以使用以下语法：\r\n\r\n```csharp\r\n<访问修饰符> <属性类型> <属性名> { set; }\r\n```\r\n\r\n\r\n\r\n下面是一个示例：\r\n\r\n```csharp\r\n\r\npublic class Account\r\n{\r\n    private decimal balance;\r\n    \r\n    public void Deposit(decimal amount)\r\n    {\r\n        balance += amount;\r\n    }\r\n    \r\n    public void Withdraw(decimal amount)\r\n    {\r\n        if (balance >= amount)\r\n        {\r\n            balance -= amount;\r\n        }\r\n        else\r\n        {\r\n            throw new Exception(\"Insufficient funds\");\r\n        }\r\n    }\r\n    \r\n    public decimal Balance\r\n    {\r\n        set { balance = value; }\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的代码中，我们声明了一个名为\"Balance\"的只写属性，它用于设置私有字段\"balance\"的值。我们还声明了两个方法\"Deposit\"和\"Withdraw\"，用于存款和取款，这些方法可以更改\"balance\"的值。\r\n## 属性访问\r\n\r\n要访问一个属性，您可以使用以下语法：\r\n\r\n```csharp\r\n\r\n<实例>.<属性名> = <值>;\r\n<值> = <实例>.<属性名>;\r\n```\r\n\r\n\r\n\r\n其中： \r\n- `<实例>`：指定类的实例。 \r\n- `<属性名>`：指定属性的名称。 \r\n- `<值>`：指定要设置或获取的值。\r\n\r\n下面是一个示例：\r\n\r\n```csharp\r\n\r\nPerson person = new Person();\r\nperson.Name = \"Tom\";\r\nstring name = person.Name;\r\n```\r\n\r\n\r\n\r\n在上面的代码中，我们创建了一个名为\"person\"的\"Person\"类的实例。然后，我们设置该实例的\"Name\"属性的值为\"Tom\"。最后，我们获取该实例的\"Name\"属性的值，并将其存储在名为\"name\"的字符串变量中。\r\n## 总结\r\n\r\n在C#中，属性是一种特殊的成员，用于封装类中的字段和计算值，以提供对类的访问。属性由\"get\"和\"set\"访问器组成，用于获取和设置属性的值。自动属性是一种特殊类型的属性，它将\"get\"和\"set\"访问器的实现留给编译器自动生成。只读属性和只写属性分别用于表示计算值和设置私有字段的值。要访问一个属性，您可以使用实例和属性名称的组合。\r\n\r\n希望这篇文章对您有所帮助！\r\n','C# 属性（Property）','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,31),('adecf313-6c51-c8bc-91b1-3a0ff5832c25',0,'**C#控制台--贪吃蛇**\n\n**作者心得**\n好家伙，又来一个贪吃蛇！！！\n你到底有几个贪吃蛇！！！\n放心，我还有python，java，js等等的贪吃蛇\n贪吃蛇真的成为一个新手入门的程序\n非常非常的合适！\n你可真别小看这个玩意儿，作为一个非游戏引擎，弄出一个可视化界面，已经贪吃蛇的逻辑，还是要稍加思考的呢！\n由于是控制台项目，这个玩意儿也是面相过程！\n\n**源代码**\n\n```csharp\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing System.Threading;\nusing System.Runtime.InteropServices;\n\nnamespace JYtcs\n{\n    class Game\n    {\n        Random sj = new Random();\n\n\n        int i, j, x = 4, y = 4, m, n, f = 0, q, p, ti = 4, end = 0;\n        string name;\n        int[] x2 = new int[400];\n        int[] y2 = new int[400];\n        char[,] map = new char[20, 20]\n    {{''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#''}\n    ,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n    ,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n    ,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n    ,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n    ,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n    ,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n    ,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n    ,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n    ,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n    ,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n    ,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n    ,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n    ,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n    ,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n    ,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n    ,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n    ,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n    ,{''#'','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '','' '',''#''}\n    ,{''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#'',''#''}\n    };\n        ConsoleKey k = ConsoleKey.S;\n        char old = ''s'';\n\n\n        public void gotoxy(int x, int y) //移动坐标\n        {\n            Console.SetCursorPosition(x, y);\n        }\n\n\n\n        public void ycgb(bool k)//隐藏光标\n        {\n            Console.CursorVisible = k; //隐藏光标\n        }\n\n        void bk()\n        {\n            Console.Write(\"GAME OVER\");\n            //\tk=getchar();\n            end = 1;\n        }\n\n\n        void len()\n        {\n            map[m, n] = ''O'';\n            x2[0] = x; y2[0] = y;\n            for (i = 398; i >= 0; i--)\n            {\n                x2[i + 1] = x2[i];\n                y2[i + 1] = y2[i];\n            }\n        }\n\n\n        void wasd()\n        {\n\n        ui:\n\n            //if (Console.ReadKey() ==65||Console.ReadKey() == 97)\n\n            k = Console.ReadKey().Key;\n\n\n            if (k == ConsoleKey.A)\n            {\n\n                if (old == ''d'')\n                {\n\n                    k = ConsoleKey.D;\n                    goto ui;\n                }\n                old = ''a'';\n                if (map[x, y - 1] == ''#'' || map[x, y - 1] == ''*'')\n                    bk();\n                map[x, y - 1] = map[x, y];\n\n                y = y - 1;\n            }\n\n\n            if (k == ConsoleKey.W)\n            {\n                if (old == ''s'')\n                {\n                    k = ConsoleKey.S;\n                    goto ui;\n                }\n                old = ''w'';\n                if (map[x - 1, y] == ''*'' || map[x - 1, y] == ''#'')\n                    bk();\n                map[x - 1, y] = map[x, y];\n\n                x = x - 1;\n            }\n\n\n            if (k == ConsoleKey.D)\n            {\n                if (old == ''a'')\n                {\n                    k = ConsoleKey.A;\n                    goto ui;\n                }\n\n                old = ''d'';\n                if (map[x, y + 1] == ''#'' || map[x, y + 1] == ''*'')\n                    bk();\n                map[x, y + 1] = map[x, y];\n\n                y = y + 1;\n            }\n\n\n            if (k == ConsoleKey.S)\n            {\n                if (old == ''w'')\n                {\n                    k = ConsoleKey.W;\n                    goto ui;\n                }\n\n                old = ''s'';\n                if (map[x + 1, y] == ''*'' || map[x + 1, y] == ''#'')\n                    bk();\n                map[x + 1, y] = map[x, y];\n\n                x = x + 1;\n            }\n\n            map[x2[ti], y2[ti]] = '' '';\n\n            gotoxy(2 * y2[ti] + 1, x2[ti] + 1);\n            Console.Write(\" \");\n        }\n\n\n        void eat()\n        {\n\n            if (map[x, y] == map[q, p])\n\n            {\n\n                q = sj.Next(1, 20);\n                p = sj.Next(1, 20);\n                ++ti;\n            newdan:\n                for (i = 0; i < ti; i++)\n                {\n\n                    if (x2[i] == q && y2[i] == p)\n                    {\n\n                        q = sj.Next(1, 20);\n                        p = sj.Next(1, 20);\n\n                        goto newdan;\n\n                    }\n                }\n\n\n\n                map[q, p] = ''O'';\n                m = q; n = p;\n\n\n                f = f + 1;\n            }\n\n            if (map[x, y] == map[m, n])\n                map[x, y] = ''*'';\n        }\n\n\n\n        void show()\n        {\n\n            map[x, y] = ''*'';\n\n            gotoxy(2 * n + 1, m + 1);\n\n            Console.WriteLine(\"■\");\n\n\n\n\n            gotoxy(2 * y + 1, x + 1);\n            if (map[x, y] == ''*'')\n                Console.WriteLine(\"■\");\n\n\n            gotoxy(50, 10);\n            Console.WriteLine(\"亲爱的\"+name+\"你的分数为:\"+f);\n\n            Thread.Sleep(200);\n        }\n\n        void start()\n        {\n            q = sj.Next(1, 20);\n            p = sj.Next(1, 20);\n\n            Console.Write(\"\\n欢迎来到贪吃蛇的世界！\\n请输入你的玩家名：\");\n            name = Console.ReadLine();\n\n            Console.Clear();\n\n\n            gotoxy(1, 1);\n            for (i = 0; i < 20; i++)\n            {\n                Console.WriteLine();\n                for (j = 0; j < 20; j++)\n\n\n                {\n                    if (map[i, j] == ''#'')\n                    {\n                        gotoxy(2 * j + 1, i + 1);\n                        Console.Write(\"■\");\n                    }\n                }\n            }\n        }\n\n        static void Main(string[] args)\n        {\n            Game b = new Game();\n            b.start();\n\n            for (; ; )\n            {\n\n                b.len();\n\n                b.wasd();\n\n                if (b.end == 1)\n                    break;\n                b.eat();\n\n\n                b.show();\n\n                if (b.ti == 300)\n                {\n                    Console.Clear();\n                    Console.WriteLine(\"you are winner\");\n                }\n            }\n            Console.Clear();\n            Console.WriteLine(\"游戏结束\");\n\n\n\n\n\n        }\n\n    }\n\n}\n\n```\n**效果截图**\n![image.png](/prod-api/file/c519d142-4831-cb8d-36fa-3a0ff582eb2d/true)\n![image.png](/prod-api/file/bbbdcd04-0427-6981-fd55-3a0ff5831030/true)\n\n**作者的话**\n我明显明显感觉\n用c#制作程序要比其他语言方便的多，怪不得是“全世界最优秀的语言”\n体验极佳！\n','C#控制台--贪吃蛇','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 17:52:15','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('adf9ed6f-0ea7-ddd8-2705-3a0ff53f8683',0,'- [CAP](https://github.com/dotnetcore/CAP)  - 一个带有本地持久消息功能的事件总线，支持RabbitMQ或Kafka。 \r\n- [NServiceBus](https://github.com/Particular/NServiceBus)  - 最受欢迎的.NET服务总线。 \r\n- [Gofer.NET](https://github.com/brthor/Gofer.NET)  - 为.NET Core提供的易于使用的分布式后台任务/作业的C# API。受Python中的Celery启发。 \r\n- [Hangfire](https://github.com/HangfireIO/Hangfire)  - 在ASP.NET应用程序内执行“发射并忘记”、延迟和定期任务的非常简单的方法。 \r\n- [RabbitMQ.NET](https://github.com/rabbitmq/rabbitmq-dotnet-client)  - 用于C#的AMQP客户端库的实现，以及通过WCF公开AMQP服务的绑定。 \r\n- [NetMQ](https://github.com/zeromq/netmq)  - NetMQ是ZeroMQ的100%本机C#端口。 \r\n- [MassTransit](https://github.com/MassTransit/MassTransit)  - MassTransit是用于使用.NET Framework构建松散耦合应用程序的精简服务总线实现。 \r\n- [Rebus](https://github.com/rebus-org/Rebus)  - Rebus是用于.NET的精简服务总线实现，类似于NServiceBus和MassTransit，但更精简。 \r\n- [RestBus](https://github.com/tenor/RestBus)  - 用于RabbitMQ的面向服务的.NET消息库。 \r\n- [RawRabbit](https://github.com/pardahlman/RawRabbit)  - 用于RabbitMQ的现代.NET Core库。 \r\n- [EasyNetQ](https://github.com/EasyNetQ/EasyNetQ)  - 用于RabbitMQ的易于使用的.NET API。 \r\n- [Warewolf ESB](https://github.com/Warewolf-ESB/Warewolf)  - 易于使用的服务总线和微服务平台。在可视IDE中轻松构建应用程序和服务。 \r\n- [Confluent''s .NET Client](https://github.com/confluentinc/confluent-kafka-dotnet)  - 用于Apache Kafka的Confluent的.NET客户端。 \r\n- [Foundatio](https://github.com/FoundatioFx/Foundatio#queues)  - 具有内存、Redis和Azure实现的通用接口。 \r\n- [Kafunk](https://github.com/jet/kafunk)  - 来自Jet的F# Kafka客户端。 \r\n- [Brighter](https://github.com/BrighterCommand/Brighter)  - 命令分发器、处理器和分布式任务队列 [https://www.goparamore.io/。](https://www.goparamore.io/%E3%80%82) \r\n- [Silverback](https://silverback-messaging.net/)  - 用于.NET Core的简单但功能丰富的消息总线（支持Kafka、RabbitMQ和MQTT）。 \r\n- [SlimMessageBus](https://github.com/zarusz/SlimMessageBus)  - 带有流行消息系统的传输（Kafka、Redis、Azure Service Bus等）和内存通信的轻量级消息总线。\r\n- [emitter](https://emitter.io/) - 连接所有设备的免费开源实时消息服务。此发布 - 订阅消息传递API是为了提高速度和安全性而构建的。\r\n- [EventStore](https://github.com/EventStore/EventStore) - 使用JavaScript中的复杂事件处理的开源，功能数据库。\r\n- [MediatR](https://github.com/jbogard/MediatR) -  中介模式库。\r\n  - [MediatR.Extensions.Microsoft.DependencyInjection](https://github.com/jbogard/MediatR.Extensions.Microsoft.DependencyInjection) - MediatR的扩展程序\r\n- [Mediator.Net](https://github.com/mayuanyang/Mediator.Net) -  .Net的简单中介，用于发送支持管道的命令，发布事件和请求响应。\r\n- [MicroBus](https://github.com/Lavinski/Enexure.MicroBus) - MicroBus中介模式库。\r\n- [MQTTnet](https://github.com/chkr1011/MQTTnet) -  MQTTnet是一个用于基于MQTT的通信的高性能.NET库。\r\n- [OpenCQRS](https://github.com/OpenCQRS/OpenCQRS) - 用于DDD，CQRS和事件的.NET核心库，具有Azure Service Bus集成。 Command和Event存储支持的数据库提供程序包括：DocumentDB，MongoDB，SQL Server，-ySQL，PostgreSQL和SQLite。\r\n- [Tossit](https://github.com/turgayozgur/tossit) - 简单易用的库，用于分布式作业/工作人员逻辑。内置RabbitMQ实现处理的分布式消息。\r\n','消息队列','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,83),('ae1d9ce8-4b21-0d7c-1374-3a0ff53f8680',0,'- [ClojureCLR](https://github.com/clojure/clojure-clr)  - Clojure在CLR上的移植，是Clojure项目的一部分。 \r\n- [F#](https://github.com/fsharp/fsharp/)  - F#编译器、核心库和工具 - 一种用于更安全、更快、更好编写代码的函数式编程语言。 \r\n- [Hybridizer](https://www.altimesh.com/hybridizer-essentials/)  - CIL（C#、VB.Net、F#）到CUDA编译器 **[$]** \r\n- [IronScheme](https://github.com/IronScheme/IronScheme)  - R6RS Scheme编译器、运行时和许多标准库。 \r\n- [JSIL](https://github.com/sq/JSIL)  - CIL到JavaScript的编译器 [http://jsil.org/](http://jsil.org/) \r\n- [Mond](https://github.com/Rohansi/Mond)  - 一种动态类型的脚本语言，用C#编写，带有REPL、调试器和简单的嵌入API。 \r\n- [Mono-basic](https://github.com/mono/mono-basic)  - Visual Basic编译器和运行时。 \r\n- [Nemerle](https://github.com/rsdn/nemerle)  - Nemerle是一个高级静态类型编程语言，适用于.NET平台。它提供了功能、面向对象和命令式功能。它具有简单的C#-类似的语法和强大的元编程系统。 \r\n- [Netjs](https://github.com/praeclarum/Netjs)  - .NET到TypeScript和JavaScript的编译器。可用于Portable Class Libraries。甚至可以传递EXE文件。 \r\n- [P](https://github.com/p-org/P)  - P是一种用于异步事件驱动编程的语言。 \r\n- [PeachPie](https://github.com/peachpiecompiler/peachpie)  - PeachPie是一个面向.NET和.NET Core的PHP编译器和运行时，可以使整个PHP应用程序运行在现代、安全且高性能的.NET和.NET Core平台上。 \r\n- [Roslyn](https://github.com/dotnet/roslyn)  - .NET编译器平台（\"Roslyn\"）提供了开源的C#和Visual Basic编译器，带有丰富的代码分析API。它使您能够使用与Visual Studio使用的相同API构建代码分析工具。 \r\n- [Testura.Code](https://github.com/Testura/Testura.Code)  - 围绕Roslyn API的包装器，用于生成、保存和编译C#代码。它提供了生成类、方法、语句和表达式的方法和助手。 \r\n- [VisualFSharp](https://github.com/dotnet/fsharp)  - Visual F#编译器和工具。 \r\n- [Fable](https://github.com/fable-compiler/Fable)  - F#到JavaScript的编译器。 \r\n- [LinqOptimizer](https://github.com/nessos/LinqOptimizer)  - 用于顺序和并行LINQ的自动查询优化器-编译器。 \r\n- [Roslyn-linq-rewrite](https://github.com/antiufo/roslyn-linq-rewrite)  - 首先通过重写使用纯过程式代码的LINQ表达式的语法树来编译C#代码，从而最小化分配和动态调度。 \r\n- [Iron python](https://github.com/IronLanguages/ironpython2)  - 与.NET框架集成的Python 2实现。 \r\n- [Amplifier.NET](https://github.com/tech-quantum/Amplifier.NET)  - 使用C#编写和编译自己的内核函数，Amplifier将负责在您喜欢的硬件上运行它。Amplifier允许.NET开发人员轻松在Intel CPU/GPU、NVIDIA、AMD上运行复杂的、需要大量数学计算的应用程序，而无需编写任何额外的C内核代码。\r\n* [fparsec](https://github.com/stephan-tolksdorf/fparsec) -  F#和C#的解析器组合库。\r\n* [IL2C](https://github.com/kekyo/IL2C) - IL2C-ECMA-335 CIL / MSIL到C语言的翻译器。\r\n* [Mond](https://github.com/Rohansi/Mond) - 用C#编写的动态类型脚本语言，带有REPL，调试器和简单的嵌入API。\r\n* [Pidgin](https://github.com/benjamin-hodgson/Pidgin) - 用于C#的轻量级，快速且灵活的解析库，由Stack Overflow开发。\r\n* [Sprache](https://github.com/sprache/Sprache) -  小型，友好的C＃解析器框架。','编译器','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,25),('afa500ae-1cd6-aa57-43e9-3a0ff53f8683',0,'\r\n* [FsBlog](https://github.com/fsprojects/FsBlog/) - 使用F#进行博客生成的静态站点生成器\r\n* [Pretzel](https://github.com/Code52/pretzel) - 适用于.NET平台的站点生成工具（以及更多功能）\r\n* [Sandra.Snow](https://github.com/Sandra/Sandra.Snow) - 受Jekyll启发的.NET静态站点生成工具\r\n* [Wyam](https://wyam.io/) - 一个易于使用、高度模块化且可配置性极强的静态内容生成器','静态站点生成','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,94),('b0a2c116-d77b-10d8-aa6d-3a0ff53f8681',0,'- [AvalonStudio](https://github.com/VitalElement/AvalonStudio)  - 用C#编写的可扩展跨平台IDE，用于嵌入式C/C++、.NET Core、Avalonia和Typescript。 \r\n- [SharpDevelop](https://github.com/icsharpcode/SharpDevelop)  - 用于.NET编程语言的免费IDE。 \r\n- [MonoDevelop](https://github.com/mono/monodevelop)  - MonoDevelop是一个主要面向Mono/.NET开发人员的跨平台IDE。 \r\n- [Visual Studio Express](https://visualstudio.microsoft.com/vs/express/)  - 用于.NET编程的免费轻量级Visual Studio版本。 \r\n- [Visual Studio Community](https://visualstudio.microsoft.com/vs/community/)  - 一个功能齐全的IDE。 \r\n- [Waf DotNetPad](https://jbe2277.github.io/dotnetpad/)  - 一个简单快速的代码编辑器，用于使用C#或Visual Basic编写有趣的程序。 \r\n- [Visual Studio Code](https://code.visualstudio.com/)  - 来自Microsoft的出色的开源编辑器，基于Electron。 \r\n- [Ionide](http://ionide.io/)  - 用于跨平台F#开发的Atom编辑器和Visual Studio Code包套件。 \r\n- [Rider](https://www.jetbrains.com/rider/)  - 基于IntelliJ平台和ReSharper的跨平台C# IDE。 \r\n- [RoslynPad](https://github.com/aelij/RoslynPad)  - 基于Roslyn和AvalonEdit的简单C#编辑器。 \r\n- [Consulo](https://consulo.io/)  - 带有C#和Java支持的跨平台IDE，是IntelliJ IDEA Community Edition的分支。 \r\n- [vvvv](https://visualprogramming.net/)  - 用于.NET的可视化实时编程环境。**[免费用于开源项目]** \r\n- [CSharp Analyzer by MongoDB](https://github.com/mongodb/mongo-csharp-analyzer)  - 针对MongoDB用户的免费Visual Studio扩展，帮助将您的代码转换为MongoDB查询。\r\n* [Mono](https://github.com/mono/monodevelop) -  MonoDevelop使开发人员能够在Linux，Windows和Mac OS X上快速编写桌面和Web应用程序。\r\n* [Omnisharp](http://www.omnisharp.net/) - 开源项目系列，每个项目都有一个目标：在您选择的编辑器中实现出色的.NET体验。','IDE','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,54),('b11852e4-a2e1-9a30-9b35-3a0ff53f8683',0,'- [AWS SDK](https://github.com/aws/aws-sdk-net)  - AWS SDK for .NET使.NET开发人员能够轻松使用Amazon Web Services \r\n- [Azure PowerShell](https://github.com/Azure/azure-powershell)  - 一组PowerShell cmdlet，供开发人员和管理员开发、部署和管理Microsoft Azure应用程序使用 \r\n- [Countly SDK for Windows](https://github.com/Countly/countly-sdk-windows/)  - 用于Countly分析和营销平台的Windows SDK，适用于产品和营销经理 \r\n- [Octokit.NET](https://github.com/octokit/octokit.net)  - 用于.NET的GitHub API客户端库 \r\n- [Dropbox.NET](https://github.com/dropbox/dropbox-sdk-dotnet)  - Dropbox API的官方.NET SDK \r\n- [Getty Images API SDK](https://github.com/gettyimages/gettyimages-api_dotnet)  - 用于Getty Images和iStock API的SDK \r\n- [Cloudmersive APIs](https://api.cloudmersive.com/csharp-client.asp)  - 用于.NET的API客户端库 **[Proprietary][免费]**\r\n* [azure-event-hubs-dotnet](https://github.com/azure/azure-event-hubs-dotnet) -  Azure事件中心的.NET标准客户端库。\r\n* Blockchain clients\r\n  * [Bittrex.Net](https://github.com/JKorf/Bittrex.Net) - Bittrex web API的库 。\r\n  * [Binance.Net](https://github.com/JKorf/Binance.Net) - Binance Web的API库。\r\n* [CakeMail.RestClient](https://github.com/Jericho/CakeMail.RestClient) -  CakeMail API的客户端。允许您发送交易电子邮件，批量电子邮件，管理列表和联系人等。\r\n* [consuldotnet](https://github.com/PlayFab/consuldotnet/tree/develop) - 面向领事的.NET API。\r\n* [csharp-nats](https://github.com/nats-io/csharp-nats) - 用于NATS消息传递系统的C#.NET客户端。\r\n* [DarkSkyCore](https://github.com/amweiss/dark-sky-core) -  .NET标准库，用于使用Dark Sky API\r\n* [Docker.DotNet](https://github.com/Microsoft/Docker.DotNet) - 用于Docker API的.NET(C#)客户端库。\r\n* [firebase-admin-dotnet](https://github.com/firebase/firebase-admin-dotnet) -  Firebase Admin .NET SDK\r\n* [google-cloud-dotnet](https://github.com/GoogleCloudPlatform/google-cloud-dotnet) - 适用于.NET的Google Cloud Client Libraries。\r\n* [Manatee.Trello](https://github.com/gregsdennis/Manatee.Trello) - 一个完全面向对象的.Net包装器，用于Trello用C#编写的RESTful API。\r\n* [Microphone](https://github.com/rogeralsing/Microphone) - 使用Consul或ETCD集群的Web Api或NancyFx运行自托管REST服务的轻量级框架。\r\n* [PreStorm](https://github.com/jshirota/PreStorm) -  ArcGIS Server的并行REST客户端。\r\n* [SendGrid-csharp](https://github.com/sendgrid/sendgrid-csharp) - 用于使用完整SendGrid API的C#客户端库。\r\n* [statsd-csharp-client](https://github.com/Pereingo/statsd-csharp-client) - 与.NET标准兼容的C#客户端与Etsy的优秀服务器。\r\n* [tweetinvi](https://github.com/linvi/tweetinvi) - 直观的.NET C#库，用于访问Twitter REST和STREAM API。','SDK和API','[REDACTED]','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,89),('b246ef03-7556-f19a-9221-3a0ff53f8680',0,'- [CacheCow](https://github.com/aliostad/CacheCow)  - 一个用于 ASP.NET Web API 的 HTTP 缓存实现，支持在客户端和服务器端进行缓存操作。 \r\n- [Akavache](https://github.com/reactiveui/Akavache)  - 一个异步、持久的键值存储库。 \r\n- [EasyCaching](https://github.com/dotnetcore/EasyCaching)  - 一个包含基本和一些高级缓存用法的库，可以更轻松地处理缓存。 \r\n- [CacheManager](https://github.com/MichaCo/CacheManager)  - 用于缓存的通用接口和抽象层。 \r\n- [FastCache](https://github.com/jitbit/FastCache)  - 用于 .NET 的比 `MemoryCache` 更快的替代方案，速度提高了 10 倍。 \r\n- [Foundatio](https://github.com/FoundatioFx/Foundatio#caching)  - 具有内存、Redis 和混合实现的通用接口。 \r\n- [Cashew](https://github.com/joakimskoog/Cashew)  - 一个用于通过简单而优雅但功能强大的 API 在 `HttpClient` 中轻松缓存响应的 .NET 库。 \r\n- [Cache Tower](https://github.com/TurnerSoftware/CacheTower)  - 用于 .NET 的高效多层缓存系统（内存、Redis、数据库、文件等）。 \r\n- [FusionCache](https://github.com/jodydonetti/ZiggyCreatures.FusionCache)  - 一个易于使用、高性能且稳健的缓存，可选的分布式第二层以及一些高级功能，如容错机制和高级超时管理。 \r\n- [LazyCache](https://github.com/alastairtree/LazyCache)  - 一个简单、开发者友好、内存中线程安全的缓存服务。它利用了 Microsoft.Extensions.Caching 和 Lazy，在高负载场景下提供性能和可靠性。\r\n* [Faster](https://github.com/Microsoft/FASTER/tree/master/cs) - Microsoft的快速key，value存储库。\r\n* [Microsoft Caching](https://github.com/aspnet/Caching) - 用于内存缓存和分布式缓存的库。\r\n* [Stack Exchange Redis](https://github.com/StackExchange/StackExchange.Redis) - 用于.NET语言的高性能通用redis客户端(C#等)。','缓存','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,17),('b28f365b-3036-1f54-2e65-3a0f8381c527',0,'你好，我最最亲爱的.neter或者即将迈入.neter殿堂的小白或者大神，别那么严肃嘛~，你既可以把它当做一个教程，也可以把它当作一个有趣的故事，接下里由我`橙子`给大家分享讲述这段故事吧\n\n## 自述\n\n我，橙子老哥，平凡而普通的一人，小时候的梦想是当一名小说写手，结果现在成为了一个码农。\n\n从初中开始接触Java，至大一才算真正迈入.Net的生态。和很多人一样，在微软的套路下，一路成长，C#、Winform、wpf、webForm、Asp.Net、.NetCore 全部略有接触过。其中也穿插着Java、python、前端、运维、游戏等其他生态。\n\n迈入了.Net圈子之后，我非常喜欢与他人一起讨论并分享技术难点，并且喜欢造一些小玩意儿，造过的小玩意儿项目数不胜数，贪吃蛇、五子棋、俄罗斯方块、打字游戏、闯关游戏等，哈哈哈，早期的项目基本都是以游戏为主，因为本身也是一个`网瘾少年`，记得有很多次大学的软件课程上光明正大的的打着自己开发的游戏，那种感觉，别提多自豪了。\n\n中后期开始走向了Web项目，发现写的小玩意儿很多重复代码，就已经在尝试借鉴网上的一些框架进行解决，也慢慢有属于自己的套路，等到了后期，我认识到了很多大佬，结交了很多的朋友，站在前辈及巨人的肩膀上，我的视野得到了不一样的角度。被各位巨人扶持，我也希望我能像他们一样帮助分享其他人，也下定决心，要开源分享一个好的项目。\n\nYi框架，也因此诞生。\n\n## 历史\n\n- 2019年，Yi框架开源，EfCore（发现Sqlsugr用户真正的体验）\n\n- 2021年，Yi框架大版本优化重构，全部采用Sqlsugar（发现模块混乱，大型项目难以支持）\n\n- 2022年，Yi框架借鉴Abp.VNext,完全全部大部分模块（不错是挺不错，但也由于造了太多轮子，迭代速度太慢）\n\n- 2023年，Yi框架建立Furion分支，支持Rbac、Bbs、Erp、App等模块（建立与用户体验一致的Furion框架上）\n\n- 2024年，Yi框架建立Abp，Yi专门团队创建，生态一起维护（开源社区开始流行文档收费，包括Furion框架）\n\n不忘初心、一切开源，最纯粹的只为.net生态添砖增瓦片~ \n\n至此，我乐此不疲\n\n## 接下来\n\n本文档不会涉及过多的复杂的内容，以初学者的视角代入，更多是一些常用的功能，\n\n不仅仅是DDD的入门者最佳选择之一，更是Abp.vNext的入门者最佳选择之一\n\n即使您只是当演练项目的态度去审视它，我也很高兴的希望，你能从这里学习到不同角度下的理解\n\n这也是它其中的意义\n\n\n','作者的话','aaa00329-7f35-d3fe-d258-3a0f8380b742','00000000-0000-0000-0000-000000000000','2023-12-16 14:34:00','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('b5192078-a714-ac93-a96a-3a0fe745e5b9',0,'测试导入11111111','测试.md','32518510-b9d5-4436-a902-3a0fe686d8ce','00000000-0000-0000-0000-000000000000','2024-01-04 23:30:38','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,0),('b552b065-2cc0-6cb6-bbdf-3a0ff53f8682',0,'- [Essential Diagnostics](https://github.com/sgryphon/essential-diagnostics)  - 扩展System.Diagnostics命名空间的内置功能，以提供灵活的日志记录。 \r\n- [NLog](https://github.com/nlog/NLog/)  - NLog - 高级的.NET和Silverlight日志记录。 \r\n  * [NLog for ASP.NET and ASP.NET Core](https://github.com/NLog/NLog.Web) - 用于ASP.NET和ASP.NET Core 1-3的NLog集成\r\n  * [NLog.Extensions.Logging](https://github.com/NLog/NLog.Extensions.Logging) - 用于.NET标准库和.NET Core应用程序的Microsoft.Extensions.Logging的NLog提供程序\r\n  * [NLog.Windows.Forms](https://github.com/NLog/NLog.Windows.Forms) - 特定于Windows.Forms的日志目标\r\n  * [NLog.MailKit](https://github.com/NLog/NLog.MailKit) - 使用using MailKit库的替代邮件目标\r\n- [Logazmic](https://github.com/ihtfw/Logazmic)  - 用于Windows的开源NLog查看器。 \r\n- [ELMAH](https://elmah.github.io/)  - 官方ELMAH网站。 \r\n- [Elmah MVC](https://github.com/alexbeletsky/elmah-mvc)  - 用于MVC的Elmah。 \r\n- [Logary](https://github.com/logary/logary)  - Logary是一个高性能、多目标的日志、度量、跟踪和健康检查库，适用于Mono和.NET。.NET对DropWizard的回应。支持多个目标，专为微服务构建。 \r\n- [Log4Net](https://logging.apache.org/log4net/)  - Apache log4net库是一个工具，帮助程序员将日志语句输出到各种输出目标。 \r\n- [Rollbar.NET](https://github.com/rollbar/Rollbar.NET)  - 简化了使用Rollbar.com的实时远程错误监控。是任何基于以下.NET版本构建的应用程序的开源Rollbar Notifier SDK：.NET Core 2.0+、.NET Standard 2.0+、.NET Full Framework 4.5.1+、Mono、Xamarin，以及通常的.NET Standard 2.0+ 实现。它简化了基于异常数据、跟踪数据、信息消息和遥测数据构建数据负载，并将负载发送到Rollbar API，以远程监控和分析托管应用程序的行为。 \r\n- [Sejil](https://github.com/alaatm/Sejil)  - 从您的ASP.NET Core应用程序中捕获、查看和筛选日志。它支持结构化日志记录、查询以及保存日志查询。 \r\n- [Sentry](https://github.com/getsentry/sentry-dotnet)  - 用于[Sentry](https://sentry.io/welcome/) 的.NET SDK，开源的错误跟踪工具，帮助开发人员实时监控和修复崩溃。 \r\n- [Serilog](https://github.com/serilog/serilog)  - 用于NoSQL时代的无废纸日志记录库。将传统和结构化的诊断日志记录最佳特点结合到一个易于使用的包中。 \r\n  * [serilog-aspnetcore](https://github.com/serilog/serilog-aspnetcore) - Serilog集成库。\r\n  * [Serilog.Exceptions](https://github.com/RehanSaeed/Serilog.Exceptions) - Serilog异常库。\r\n  * [Serilog.Settings.Configuration](https://github.com/serilog/serilog-settings-configuration) - Serilog设置库。\r\n- [StackExchange.Exceptional](https://github.com/NickCraver/StackExchange.Exceptional)  - 用于Stack Exchange网络的错误处理程序。 \r\n- [Semantic Logging Application Block (SLAB)](https://github.com/MicrosoftArchive/semantic-logging)  - 扩展了System.Diagnostics.Tracing命名空间（EventSource类）的内置功能，以将日志记录到多个目标，包括Azure Tables、数据库、文件（JSON、XML、文本）。通过ETW支持进程内和进程外的日志记录，以及使用Rx进行事件的实时过滤/聚合。 \r\n- [ULogViewer](https://github.com/carina-studio/ULogViewer)  - 支持读取和解析各种类型日志的跨平台（Windows/macOS/Linux）通用日志查看器。您还可以定义自己的配置文件以解析和显示日志。 \r\n- [Foundatio](https://github.com/FoundatioFx/Foundatio#logging)  - 可以在整个应用程序中记录消息的流畅日志记录API。 \r\n- [Exceptionless](https://github.com/exceptionless/Exceptionless.Net)  - Exceptionless .NET客户端。 \r\n- [Loupe](https://onloupe.com/)  - 集中式.NET日志记录和监控。【专有】【免费套餐】 \r\n- [elmah.io](https://elmah.io/)  - 为.NET Web应用程序提供的云日志记录工具，使用ELMAH。在上线之前发现错误。强大的搜索、API、与Slack、GitHub、Visual Studio等的集成。【免费供OSS使用】【收费】 \r\n- [BugSnag](https://docs.bugsnag.com/platforms/dotnet/)  - 记录错误。包含有用的诊断信息，如堆栈跟踪、会话、版本等。有免费套餐。【免费供OSS使用】【收费】 \r\n- [ZeroLog](https://github.com/Abc-Arbitrage/ZeroLog)  - ZeroLog是一个零分配的.NET日志记录库。它提供基本的日志记录功能，用于对垃圾回收不受欢迎的延迟敏感应用程序。\r\n* [common-logging](https://github.com/net-commons/common-logging) -  抽象的日志记录库。\r\n* [dnxcore-logging-logstash](https://github.com/jvandevelde/dnxcore-logging-logstash) - 具有UDP和Redis传输的.NET Core应用程序的Logstash日志记录扩展库。\r\n* [ElmahCore](https://github.com/ElmahCore/ElmahCore) - 错误日志库。\r\n* [Karambolo.Extensions.Logging.File](https://github.com/adams85/filelogger) - 轻量级但功能丰富的文件记录库。\r\n* [log4net](https://github.com/apache/logging-log4net) -  log4net日志记录。\r\n* [NLog](https://github.com/NLog/NLog) - Nlog日志记录。\r\n* [Q42.Logging.ApplicationInsights](https://github.com/Q42/Q42.Logging.ApplicationInsights) - 用于在ASP.NET Core日志中构建的日志附加程序，以将所有日志发送到Application Insights。\r\n* [SEQ](https://getseq.net) - Seq是收集，搜索，分析和警报结构化日志数据服务器。','日志','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,62),('b6d93187-0903-afa4-6371-3a0fe6a70d29',1,'测试导入11111111','测试.md','32518510-b9d5-4436-a902-3a0fe686d8ce','00000000-0000-0000-0000-000000000000','2024-01-04 20:37:08','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','2024-01-04 20:38:10',0),('b867e8ec-8765-33c5-6d6d-3a0ff53f8680',0,'- [NodaTime](https://github.com/nodatime/nodatime)  - Noda Time是.NET的替代日期和时间API。它帮助您更清晰地思考您的数据，并更精确地表达对该数据的操作。详细信息请访问 [https://nodatime.org/](https://nodatime.org/) \r\n- [DateTimeExtensions](https://github.com/joaomatossilva/DateTimeExtensions)  - 以对`System.DateTime`的扩展形式提供常见的日期时间操作，包括在多种文化区域中进行假日和工作日计算。 \r\n- [Exceptionless.DateTimeExtensions](https://github.com/exceptionless/Exceptionless.DateTimeExtensions)  - 包括DateTimeRange、工作日计算以及各种`DateTime`、`DateTimeOffset`和`TimeSpan`的扩展方法。\r\n* [FluentDateTime](https://github.com/FluentDateTime/FluentDateTime) - 允许您编写更清晰的DateTime表达式和操作。部分灵感来自Ruby DateTime Extensions。','日期时间','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,31),('baa9529f-11a9-0214-b398-3a0fe6aa13a6',1,'测试导入11111111','测试.md','32518510-b9d5-4436-a902-3a0fe686d8ce','00000000-0000-0000-0000-000000000000','2024-01-04 20:40:26','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','2024-01-04 20:47:02',0),('bbe3f584-4200-f2a9-928a-3a0ff544081c',0,'![image.png](/prod-api/file/57fdedeb-0ae3-66fb-e581-3a0ff543e65b/true)','Host主机','2da0361c-000d-e0d8-6737-3a0ff5421cdc','00000000-0000-0000-0000-000000000000','2024-01-07 16:43:17','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('bcf4dca0-f0cf-dd10-9c8a-3a0fe75ec506',1,'title: C# 环境\r\narticle: false\r\ndate: 2023-04-15 12:10:08\r\npermalink: /pages/02eb36/\r\n---\r\n\r\n## 简介\r\n\r\n要开始使用 C# 进行开发，需要先搭建好开发环境。本文将介绍如何在 Windows 系统下安装并配置 C# 开发环境。\r\n\r\n## 安装 .NET SDK\r\n\r\n首先需要安装 .NET SDK，它是一个开发工具包，包括了用于开发 C# 应用程序所需的运行时、库和工具。 \r\n\r\n1. 前往 [.NET 官网](https://dotnet.microsoft.com/download/dotnet)  下载最新的 .NET SDK 安装程序。 \r\n2. 双击安装程序，按照提示进行安装。在安装过程中需要注意选择安装路径和安装的版本，可以选择安装多个版本的 .NET SDK。 \r\n3. 安装完成后，打开命令提示符或 PowerShell 窗口，输入以下命令来验证是否安装成功：\r\n\r\n```bash\r\ndotnet --version\r\n```\r\n\r\n如果能够输出正确的版本号，则说明安装成功。\r\n## 安装开发环境\r\n\r\nC# 开发可以使用多种开发环境，包括 Visual Studio、Visual Studio Code、Rider 等等。其中，Visual Studio 是最为常用的 C# 开发环境之一。\r\n### 安装 Visual Studio \r\n1. 前往 [Visual Studio 官网](https://visualstudio.microsoft.com/vs/)  下载 Visual Studio 安装程序。 \r\n2. 双击安装程序，按照提示进行安装。在安装过程中需要注意选择安装的组件，可以根据自己的需要进行选择。\r\n### 安装 Visual Studio Code \r\n1. 前往 [Visual Studio Code 官网](https://code.visualstudio.com/)  下载 Visual Studio Code 安装程序。 \r\n2. 双击安装程序，按照提示进行安装。在安装过程中需要注意选择安装的组件，可以根据自己的需要进行选择。\r\n## 配置开发环境\r\n\r\n无论使用哪种开发环境，都需要配置 C# 扩展和编译器。\r\n### 配置 Visual Studio \r\n1. 打开 Visual Studio，点击 \"文件\" -> \"新建\" -> \"项目\"。 \r\n2. 在弹出的对话框中，选择 \"C#\" -> \"控制台应用程序\"，然后选择项目名称和存储位置，最后点击 \"创建\"。 \r\n3. 在项目中添加新的 C# 文件，然后在其中编写代码。 \r\n4. 点击 \"生成\" -> \"生成解决方案\"，将代码编译成可执行文件。\r\n### 配置 Visual Studio Code \r\n1. 打开 Visual Studio Code，安装 \"C#\" 扩展。 \r\n2. 打开项目文件夹，然后在其中添加新的 C# 文件，然后在其中编写代码。 \r\n3. 打开终端窗口，输入以下命令来编译代码：\r\n\r\n```bash\r\ndotnet build\r\n```\r\n\r\n\r\n\r\n如果编译成功，则会在项目文件夹中生成可执行文件。\r\n## 示例代码\r\n\r\n下面是一个\r\n\r\n- 使用 Visual Studio Code 编写的 \"Hello, World!\" 程序的示例代码：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        Console.WriteLine(\"Hello, World!\");\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在 Visual Studio Code 中保存文件后，可以在终端窗口中输入以下命令来运行程序：\r\n\r\n```bash\r\n\r\ndotnet run\r\n```\r\n\r\n\r\n\r\n程序会在终端窗口中输出 \"Hello, World!\" 字符串。\r\n\r\n至此，你已经成功搭建了 C# 的开发环境，并编写了第一个 C# 程序。','C# 环境','67bbbd51-8f39-6bc3-46fe-3a0fa9fe8385','00000000-0000-0000-0000-000000000000','2024-01-04 23:57:48','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','2024-01-05 00:05:18',0),('be22fa46-f0c0-31f4-b321-3a0fe9b5b449',0,'\r\n\r\n## 应用场景\r\n### 防止误操作\r\n\r\n封装可以防止用户误操作数据，保护数据的完整性。例如，在一个银行账户类中，如果将账户余额设置为 public，用户就可以直接修改其余额，这显然是不合理的。但如果将其余额设置为 private，同时提供一个公开的 `Deposit()` 方法和 `Withdraw()` 方法，用户就只能通过这些方法来修改其余额，从而保证了数据的安全性。\r\n### 简化接口\r\n\r\n封装可以简化接口，使用户更易于使用。例如，在一个汽车类中，如果将引擎、轮胎等组件全部暴露给用户，用户需要了解所有这些组件的细节才能正确地操作汽车。但如果将这些组件封装起来，只提供一个公开的 `Start()` 方法和 `Stop()` 方法，用户就只需要知道如何启动和停止汽车，而不必了解具体的实现细节。\r\n### 提高代码复用性\r\n\r\n封装可以提高代码复用性，使代码更加模块化。例如，在一个图形类中，如果将绘制图形的具体实现和数据结构都封装在类内部，可以使其它代码更易于调用该类的功能，从而提高代码的复用性。\r\n## 技巧\r\n### 使用属性而非公开的成员变量\r\n\r\n尽管 C# 中允许将成员变量定义为 public，但这种做法可能会导致数据被误操作或直接修改，因此不推荐使用。相反，我们应该使用属性来管理成员变量，从而更好地控制其访问权限。\r\n### 使用构造函数初始化对象状态\r\n\r\n封装不仅限于成员变量和方法，还可以包括对象的状态。在类中，我们可以使用构造函数来初始化对象的状态，从而确保对象的一致性和正确性。例如，在一个日期类中，可以在构造函数中初始化对象的年、月、日等状态，以确保日期的合法性。\r\n### 使用接口提高封装性\r\n\r\n接口是一种可以提高封装性的机制。在一个类中，如果定义了多个公开的方法，可能会导致代码过于冗长，难以维护。此时，我们可以将这些方法抽象为接口，将接口定义为类的成员变量，从而使代码更加模块化和易于维护。\r\n\r\n## 概念\r\n\r\n封装是一种将数据和方法包装在一个单元中的机制。C# 中封装主要通过类来实现。在类中，我们可以将成员变量和成员函数定义为 public、private 或 protected，从而对外部用户隐藏内部实现的细节，达到保护数据和提高代码复用的目的。\r\n## 访问修饰符\r\n\r\n在 C# 中，有以下访问修饰符： \r\n- `public`：公开的，可被其他类访问。 \r\n- `private`：私有的，只能在当前类中访问。 \r\n- `protected`：受保护的，只能在当前类及其子类中访问。 \r\n- `internal`：内部的，只能在当前程序集中访问。 \r\n- `protected internal`：既是 protected，又是 internal。\r\n## 封装实例\r\n\r\n下面是一个简单的 C# 类示例，展示了封装的用法：\r\n\r\n```csharp\r\n\r\nclass Person\r\n{\r\n    private string name;  // 私有成员变量\r\n    private int age;\r\n\r\n    public string Name  // 公开的成员属性\r\n    {\r\n        get { return name; }\r\n        set { name = value; }\r\n    }\r\n\r\n    public int Age\r\n    {\r\n        get { return age; }\r\n        set { age = value; }\r\n    }\r\n\r\n    public void ShowInfo()  // 公开的成员方法\r\n    {\r\n        Console.WriteLine(\"Name: {0}, Age: {1}\", name, age);\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在这个类中，我们将 `name` 和 `age` 定义为私有成员变量，这意味着它们只能在类内部访问。但我们提供了公开的 `Name` 和 `Age` 属性，用于获取和设置这两个变量的值。同时，我们还提供了一个公开的 `ShowInfo()` 方法，用于输出该对象的信息。\r\n\r\n下面是如何使用这个类的示例：\r\n\r\n```csharp\r\n\r\nPerson p = new Person();\r\np.Name = \"Tom\";\r\np.Age = 18;\r\np.ShowInfo();  // 输出：Name: Tom, Age: 18\r\n```\r\n\r\n\r\n\r\n在这个示例中，我们创建了一个 `Person` 类的对象 `p`，并通过公开的属性 `Name` 和 `Age` 分别设置了其名称和年龄。最后，我们调用了 `ShowInfo()` 方法，输出该对象的信息。\r\n## 总结\r\n\r\n封装是一种重要的编程机制，它可以保护数据和提高代码复用。在 C# 中，封装主要通过类和访问修饰符来实现。我们可以将成员变量和成员函数定义为 public、private 或 protected，从而对外部用户隐藏内部实现的细节。\r\n','C# 封装','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,12),('be8a48ac-fbad-a19f-0d32-3a0fe9b5b449',0,'\r\n\r\n在C#中，方法是一个用于执行特定任务的代码块。在本文中，我们将学习如何编写C#方法，以及如何在程序中使用它们。\r\n## 基本语法\r\n\r\n下面是一个简单的C#方法的基本语法：\r\n\r\n```csharp\r\n\r\n访问修饰符 返回类型 方法名(参数列表)\r\n{\r\n    // 方法体\r\n}\r\n```\r\n\r\n\r\n- 访问修饰符：指定方法的访问级别，可以是public、private、protected等。\r\n- 返回类型：指定方法返回的数据类型，如果不返回任何值，则返回类型为void。\r\n- 方法名：指定方法的名称，命名规范为大驼峰命名法。\r\n- 参数列表：指定方法的输入参数，可以是零个或多个参数。\r\n## 示例方法\r\n\r\n以下是一个简单的C#示例方法，它将两个整数相加并返回结果：\r\n\r\n```csharp\r\n\r\npublic int Add(int a, int b)\r\n{\r\n    int sum = a + b;\r\n    return sum;\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的代码中，我们定义了一个名为Add的公共方法，它接受两个整数作为输入参数，并将它们相加。方法返回一个整数，即两个输入参数的总和。\r\n## 调用示例方法\r\n\r\n在程序中调用上面定义的Add方法的示例如下：\r\n\r\n```csharp\r\n\r\nint result = Add(2, 3);\r\nConsole.WriteLine(result); // 输出结果为5\r\n```\r\n\r\n\r\n\r\n在上面的代码中，我们调用Add方法，传入两个整数2和3作为参数，并将返回值存储在result变量中。然后，我们使用Console.WriteLine方法将result变量的值输出到控制台窗口中。\r\n## 结论\r\n\r\n在本文中，我们学习了如何编写C#方法，并提供了一个简单的示例方法。我们还演示了如何在程序中调用这些方法。在C#中，方法是一种非常强大的工具，可以帮助我们执行各种任务。\r\n','C# 方法','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,13),('bec05f56-d064-3501-f27b-3a0f83abbc64',0,'## 简介\n在C#强大的语法下，Orm也是极度的优雅\n本框架默认集成Sqlsugar Orm，与YiFramework拥有相同理念\n> 从用户体验出发，用起来爽，使用体验极佳\n\n你可以查略 [Sqlsguar官网](https://www.donet5.com/Home/Doc)学习\n## 如何使用\n默认已经集成SqlSugar模块，可依赖注入`ISqlSugarDbContext`即可，我们称做它为Db，用于操作数据库\n\n> 不推荐直接使用db，大部分的操作数据方式使用仓储完全够用`ISqlSugarRepository<Entity, Guid> repository`或`IRepository<Entity, Guid> repository`\n\n由于Querable对象用起来并没有到达SugarQuerable的爽感，且也不想让每个复杂查询都通过仓储进行扩展，这会导致用户使用感较差\n\n所以经过各类平衡考虑，YiFramework框架与Sqlsugar是有轻量的`耦合性`的，框架提供Sqlsugar抽象层，避免过重的耦合，意味着，你可以在`大部分`地方使用Sqlsugar的操作，这在真正的业务项目来说，使用非常的方便，与Sqlsugar保持有一致的观念\n\n我们已经集成SqlSugarCore模块在Abp.vNext中的\n- Crud\n- 仓储\n- 工作单元\n- 审计日志\n- 逻辑删除\n- 数据过滤\n- 领域事件\n\n意味着，可以平滑的直接使用Abp.vNext的这些功能','SqlSugarORM','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','00000000-0000-0000-0000-000000000000','2023-12-16 15:19:51','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('bf05c466-c9da-ea64-bfb1-3a0ff583ff95',0,'**C#WPF--猜成语**\n\n**作者心得**\n都说学winform的都没有梦想，有梦想就来wpf！\n于是，我来追梦了！\nwpf和winform很像，但是差别还是有的\n这又是一个是面相过程，早期制作的程序\n\n**部分核心源代码**\n（面相对象代码超出你的想象）\n\n```csharp\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Shapes;\n\nnamespace CCY\n{\n    /// <summary>\n    /// 登录界面.xaml 的交互逻辑\n    /// </summary>\n    public partial class 登录界面 : Window\n    {\n        public 登录界面()\n        {\n            InitializeComponent();\n        }\n\n        private void Button_Click(object sender, RoutedEventArgs e)\n        {\n            if (xh.Text == \"201804040100\" && mm.Text == \"000000\")\n            {\n                this.Hide();\n                用户界面 p = new 用户界面();\n                p.Show();\n            }\n            else\n            {\n                mm.Text = \"\";\n                MessageBox.Show(\"你的密码或者学号错误\",\"提示\");\n            }\n        }\n\n        private void Button_Click_1(object sender, RoutedEventArgs e)\n        {\n            this.Close();\n        }\n    }\n}\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Shapes;\n\nnamespace CCY\n{\n    /// <summary>\n    /// 用户界面.xaml 的交互逻辑\n    /// </summary>\n    public partial class 用户界面 : Window\n    {\n        public 用户界面()\n        {\n            InitializeComponent();\n        }\n\n        private void Button_Click(object sender, RoutedEventArgs e)\n        {\n            this.Close();\n            a_1 p = new a_1();\n            p.Show();\n\n        }\n    }\n}\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Shapes;\n\n\nnamespace CCY\n{\n    /// <summary>\n    /// 第一关.xaml 的交互逻辑\n    /// </summary>\n    public partial class a_1: Window\n    {\n        public string y = \"背水一战\";\n        public int f = 0;//定义一个f计数器\n        public void input(Button x)//点击按钮显示文本方法\n        {\n            display.Text = display.Text + x.Content;\n        }\n\n\n        public a_1()\n        {\n            InitializeComponent();\n        }\n\n        private void B1_Click(object sender, RoutedEventArgs e)\n        {\n            if (f < 4)\n            {\n                input(b1);\n                f++;\n            }\n        }\n\n        private void B2_Click(object sender, RoutedEventArgs e)\n        {\n            if (f < 4)\n            {\n                input(b2);\n                f++;\n            }\n        }\n\n        private void B3_Click(object sender, RoutedEventArgs e)\n        {\n            if (f < 4)\n            {\n                input(b3);\n                f++;\n            }\n        }\n\n        private void B4_Click(object sender, RoutedEventArgs e)\n        {\n            if (f < 4)\n            {\n                input(b4);\n                f++;\n            }\n        }\n\n        private void Reset_Click(object sender, RoutedEventArgs e)\n        {\n            display.Text = \"\";\n            f = 0;\n        }\n\n        private void Ok_Click(object sender, RoutedEventArgs e)\n        {\n\n            if (display.Text == y)\n            {\n                ++data.pass_f;\n                this.Close();\n                MessageBox.Show(\"厉害！开启下一关\", \"提示\");\n                a_2 p = new a_2();\n                p.Show();\n              \n            }\n            else\n            {\n                display.Text = \"\";\n                f = 0;\n                MessageBox.Show(\"这是成语？你是用脚在想问题吗？\",\"警告\");\n            }\n        }\n\n        private void Window_Initialized(object sender, EventArgs e)\n        {\n            pass.Content = Convert.ToString(data.pass_f);\n        }\n\n        private void B1_Copy_Click(object sender, RoutedEventArgs e)\n        {\n            if (f < 4)\n            {\n                input(b1_Copy);\n                f++;\n            }\n        }\n\n        private void B2_Copy_Click(object sender, RoutedEventArgs e)\n        {\n            if (f < 4)\n            {\n                input(b2_Copy);\n                f++;\n            }\n        }\n\n        private void B3_Copy_Click(object sender, RoutedEventArgs e)\n        {\n            if (f < 4)\n            {\n                input(b3_Copy);\n                f++;\n            }\n        }\n\n        private void B4_Copy_Click(object sender, RoutedEventArgs e)\n        {\n            if (f < 4)\n            {\n                input(b4_Copy);\n                f++;\n            }\n        }\n    }\n}\n\n```\n\n**效果截图**\n![image.png](/prod-api/file/ff3a1c4e-d866-b873-91ba-3a0ff583984f/true)\n![image.png](/prod-api/file/be0469d0-c1ee-fe2a-f5d1-3a0ff583ad23/true)\n![image.png](/prod-api/file/c9290393-30c1-5759-7992-3a0ff583c03a/true)\n![image.png](/prod-api/file/9d17ce35-1e57-b44a-29f3-3a0ff583d8cf/true)\n![image.png](/prod-api/file/80bf48e9-34db-4625-e4e1-3a0ff583f694/true)\n**作者心得**\n这算我第一次真正通宵弄的玩意儿\n我跪了，现在看来，真的啥也不是啊！\n当时，还给全寝室的人玩一遍，纷纷称赞，至少没有白费！','C#WPF--猜成语','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 17:53:09','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('bf71d5bd-8bea-a195-c8b7-3a0ff53f8680',0,'- [Cassette](https://github.com/andrewdavey/cassette)  - 管理 .NET Web 应用程序的资源（脚本、CSS 和模板）。 \r\n- [NodeAssets](https://github.com/ajorkowski/NodeAssets)  - 用于 .NET 的资源管理器，使用 SignalR 实现实时 CSS 更新，可选择利用 Node.js 编译器。 \r\n- [Bundle Transformer](https://github.com/Taritsyn/BundleTransformer)  - [Microsoft ASP.NET Web Optimization Framework](https://www.nuget.org/packages/Microsoft.AspNet.Web.Optimization)  的模块化扩展。其模块支持 LESS、Sass、CoffeeScript、TypeScript、Mustache、Handlebars、Autoprefixer 以及许多不同的 JS 和 CSS 缩小器。 \r\n- [Bundler](https://github.com/ServiceStack/Bundler)  - 编译和缩小 Less/Sass/Stylus/CSS/JS/CoffeeScript/LiveScript 文件。与 MVC 和 ServiceStack 集成。 \r\n- [SquishIt](https://github.com/jetheredge/SquishIt)  - 让您可以轻松地捆绑一些 CSS 和 JavaScript。\r\n* [BundlerMinifier](https://github.com/madskristensen/BundlerMinifier) -  Visual Studio扩展，让您可以配置JS，CSS和HTML文件的捆绑和缩小。\r\n* [JavaScriptViewEngine](https://github.com/pauldotknopf/JavaScriptViewEngine) - 用于在JavaScript环境中呈现标记的ASP.NET MVC ViewEngine。适用于React和Angular服务器端呈现。\r\n* [Smidge](https://github.com/Shazwazza/Smidge/) - 用于ASP.NET Core的轻量级运行时CSS / JavaScript文件缩小，组合，压缩和管理库。\r\n* [Web Markup Minifier](https://github.com/Taritsyn/WebMarkupMin) - 包含一组标记最小化器的.NET库。该项目的目标是通过减少HTML，XHTML和XML代码的大小来提高Web应用程序的性能。','Assets','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,10),('bfed2ed4-d9ee-0b19-a62f-3a0ff53f8680',0,'\r\n- [Vortice.Windows](https://github.com/amerkoleci/Vortice.Windows)  - 用于DirectX、WIC、Direct2D1、XInput、XAudio和X3DAudio的跨平台.NET标准库。','DirectX','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,34),('c2a4c8d6-9e2c-6f3a-6c2d-3a0ff53f8680',0,'* Microservices & Service Mesh\r\n  * [coolstore-microservices ](https://github.com/vietnam-devs/coolstore-microservices) -  一个基于Kubernetes的多语言微服务应用程序，带有Istio服务网格\r\n  * [distributed-playground](https://github.com/jvandevelde/distributed-playground) - 带有Vagrant，Consul，Docker和ASP.NET Core的分布式服务游乐场。\r\n  * [DNC-DShop](https://github.com/devmentors) - 分布式.NET核心项目和免费课程。 (DDD，CQRS，RabbitMQ，MongoDB，Redis，监控，记录，CI，CD)\r\n  * [dotnetcore-microservices-poc](https://github.com/asc-lab/dotnetcore-microservices-poc) -   使用.NET Core(EF Core，MediatR，Marten，Eureka)在微服务架构中制作的简化保险销售系统，Ocelot，RabbitMQ，Polly，ElasticSearch，Dapper)与博客文章系列。\r\n  * [eShopOnContainers](https://github.com/dotnet/eShopOnContainers) - 基于微服务架构和容器的参考应用程序。\r\n  * [InMemoryCQRSReplication](https://github.com/Aaronontheweb/InMemoryCQRSReplication) - Akka.NET参考架构 - CQRS + Sharding +内存中复制\r\n  * [magazine-website](https://github.com/thangchung/magazine-website) -  应用DDD，CQRS，微服务，异步编程的杂志网站(使用.NET Core，ASP.NET Core，EF Core)。\r\n  * [microservices-in-dotnetcore](https://github.com/horsdal/microservices-in-dotnet-book-second-edition) - 我的微服务书中的代码示例\r\n  * [ReactiveTraderCloud](https://github.com/AdaptiveConsulting/ReactiveTraderCloud) - 实时交易平台演示，展示在整个应用程序堆栈中应用的反应式编程原理。\r\n* Monoliths\r\n  * [AlbumViewerVNext](https://github.com/RickStrahl/AlbumViewerVNext) - West Wind Album Viewer ASP.NET 5示例。\r\n  * [allReady](https://github.com/HTBox/allReady) - 开源解决方案，重点是提高准备活动的意识，效率和影响，因为它们由当地社区的人道主义和灾害响应组织提供。[http://www.htbox.org/projects/allready](http://www.htbox.org/projects/allready)\r\n  * [AspNet5GeoElasticsearch](https://github.com/damienbod/AspNet5GeoElasticsearch) - ASP.NET核心MVC Geo Elasticsearch Swashbuckle Swagger。\r\n  * [aspnet-servicediscovery-patterns](https://github.com/cecilphillip/aspnet-servicediscovery-patterns) - 使用ASP.NET Core实现服务发现模式的示例。\r\n  * [AspNetAuthorizationWorkshop](https://github.com/blowdart/AspNetAuthorizationWorkshop) - 一个研讨会，用于浏览ASP.NET核心授权中的各个新部分。\r\n  * [BikeSharing360 Suite of Apps from Microsoft](https://blogs.msdn.microsoft.com/visualstudio/2016/12/14/connectdemos-2016-bikesharing360-on-github/) - BikeSharing360应用套件\r\n    * [Mobile Apps](https://github.com/Microsoft/BikeSharing360_MobileApps), \r\n    * [Backend Services](https://github.com/Microsoft/BikeSharing360_BackendServices), \r\n    * [Websites](https://github.com/Microsoft/BikeSharing360_Websites), \r\n    * [Single Container Apps](https://github.com/Microsoft/BikeSharing360_SingleContainer), \r\n    * [Multi Container Apps](https://github.com/Microsoft/BikeSharing360_MultiContainer), \r\n    * [Cognitive Services Kiosk App](https://github.com/Microsoft/BikeSharing360_CognitiveServicesKioskApp),\r\n\t* [Azure Bot App](https://github.com/Microsoft/BikeSharing360_BotApps).\r\n  * [Clean Architecture Manga](https://github.com/ivanpaulovich/clean-architecture-manga) - .NET Core的清洁架构原理的示例\r\n  * [cloudscribe](https://github.com/cloudscribe/cloudscribe) - ASP.NET核心多租户Web应用程序基础。\r\n  * [CoreCodeCamp](https://github.com/shawnwildermuth/CoreCodeCamp) - 一个开源小型本地开发活动的开源网站。\r\n  * [DotNetClub](https://github.com/scheshan/DotNetClub) - 用ASP.NET Core编写的小型俱乐部。\r\n  * [eShopOnWeb](https://github.com/dotnet-architecture/eShopOnWeb) - 具有单一部署模型的分层应用程序架构。\r\n  * [Entropy](https://github.com/aspnet/Entropy) - 用于新功能和想法的混乱实验游乐场 - 请在此处查看针对各个功能的小型和简单样本。\r\n  * [EquinoxProject](https://github.com/EduardoPires/EquinoxProject) - 具有DDD，CQRS和事件源的完整ASP.NET Core 2.0应用程序。\r\n  * [GenVue](https://github.com/herbat73/GenVue) - 如何管理多租户应用中的用户身份Microsoft Azure，使用Azure Active Directory进行身份验证。\r\n  * [guidance-identity-management-for-multitenant-apps](https://github.com/Azure-Samples/guidance-identity-management-for-multitenant-apps) - Microsoft Azure中多租户应用程序的身份管理例子。\r\n  * [JustA.ML](https://github.com/mustakimali/JustA.ML) -  一个Web应用程序，允许您在使用ASP.NET Core 2.0编写的设备之间共享文件/ URL /文本。\r\n  * [MegaMine](https://github.com/Nootus/MegaMine) - 开源挖掘解决方案，帮助矿工提取黄金，石英，花岗岩等。此解决方案使用ASP.NET Core和AngularJS利用多个轻量级组件构建以微服务的方式。\r\n  * [MusicStore](https://github.com/dotnet/aspnetcore/tree/master/src/MusicStore) - 使用MVC和Entity Framework的示例MusicStore应用程序。\r\n  * [NLayerAppV3](https://github.com/cesarcastrocuba/nlayerappv3) - 带有.NET Core Preview 2的NLayerAppV3 N层架构。\r\n  * [NorthwindTraders](https://github.com/JasonGT/NorthwindTraders) - Northwind Traders是使用ASP.NET Core和Entity Framework Core构建的示例应用程序。\r\n  * [Orchard Core - Modular and Multi-tenant applications](https://github.com/OrchardCMS/OrchardCore.Samples) - 使用Orchard Core Framework创建模块化和多租户应用程序。\r\n  * [PhotoGallery](https://github.com/chsakell/aspnet5-angular2-typescript) - 使用ASP.NET Core，Angular 2和TypeScript的跨平台单页应用程序\r\n  * [PokeR](https://github.com/halomademeapc/pokeR) - 在ASP.NET Core的SPA托管中使用SignalR和Angular进行实时Scrum。 包括Docker支持。. [Demo](https://planning.halomademeapc.com)\r\n  * [Practical ASP.NET Core](https://github.com/dodyg/practical-aspnetcore) - 每日更新的ASP.NET核心功能和设施的微量示例。\r\n  * [Sample .NET Core CQRS REST API](https://github.com/kgrzybek/sample-dotnet-core-cqrs-api) -  使用Clean Architecture的原始SQL和DDD的.NET Core REST API CQRS实现。\r\n  * [StarWars](https://github.com/JacekKosciesza/StarWars) - 使用GraphQL for .NET，ASP.NET Core，Entity Framework Core的GraphQL“星球大战”示例。','示例','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,7),('c2f71e8a-8c59-5ef7-6fab-3a0ff53f8683',0,'\r\n- [SSH.NET](https://github.com/sshnet/SSH.NET)  - 用于.NET的安全外壳（SSH）库，经过并行优化。提供SSH命令、SFTP/SCP上传和下载以及SOCKS4/SOCKS5/HTTP代理。 \r\n- [FluentFTP](https://github.com/robinrodricks/FluentFTP)  - 用于.NET的FTP和FTPS库，经过速度优化。提供广泛的FTP命令、文件上传/下载和FTP代理。 \r\n- [SharpSnmpLib](https://docs.sharpsnmp.com/)  - 面向.NET/Mono/Xamarin的开源SNMP实现。支持版本1、2c和3。 \r\n- [DNS](https://github.com/kapetan/dns)  - 用于解析和序列化DNS消息的库。包括基本的DNS客户端和服务器。 \r\n- [DnsClient.NET](https://github.com/MichaCo/DnsClient.NET)  - 一个简单但非常强大且高性能的开源库，用于在.NET Framework中进行DNS查找。 \r\n- [Tecan SiLA2 SDK](https://gitlab.com/SiLA2/vendors/sila_tecan)  - 用于开发SiLA2客户端和服务器的库和代码生成器。\r\n','协议','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,80),('c34ff317-d24a-7b0f-5de2-3a0fe952871f',0,'测试导入的问题\r\n','测试.md','32518510-b9d5-4436-a902-3a0fe686d8ce','00000000-0000-0000-0000-000000000000','2024-01-05 09:03:40','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,0),('c3a70803-4940-83a7-dd07-3a0fe9b5b449',0,'在C#中，枚举（Enum）是一种用于定义具有离散值的命名常量的数据类型。枚举可以使代码更加清晰和易于阅读，同时也可以帮助避免常量值的硬编码错误。\r\n## 声明枚举\r\n\r\n要声明枚举，可以使用以下语法：\r\n\r\n```csharp\r\n\r\nenum <name>\r\n{\r\n    <value1>,\r\n    <value2>,\r\n    ...\r\n}\r\n```\r\n\r\n\r\n\r\n`<name>`是枚举类型的名称，`<value1>`,`<value2>`等是枚举值。例如，以下代码定义了一个名为`Colors`的枚举，其中包含三个值：\r\n\r\n```csharp\r\n\r\nenum Colors\r\n{\r\n    Red,\r\n    Green,\r\n    Blue\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的示例中，`Red`,`Green`和`Blue`都是枚举值，它们对应于0，1和2的整数值。如果没有显式地指定枚举值，则第一个枚举值的默认值为0，其余枚举值的默认值将依次递增。\r\n## 使用枚举\r\n\r\n一旦声明了枚举，就可以使用它来定义变量、参数和返回类型。例如，以下代码定义了一个名为`color`的变量，其类型为`Colors`枚举：\r\n\r\n```csharp\r\n\r\nColors color = Colors.Red;\r\n```\r\n\r\n\r\n\r\n在上面的示例中，`color`的初始值为`Colors.Red`，即枚举值`Red`。\r\n\r\n可以使用switch语句来处理枚举值，例如：\r\n\r\n```csharp\r\n\r\nswitch (color)\r\n{\r\n    case Colors.Red:\r\n        Console.WriteLine(\"The color is red.\");\r\n        break;\r\n    case Colors.Green:\r\n        Console.WriteLine(\"The color is green.\");\r\n        break;\r\n    case Colors.Blue:\r\n        Console.WriteLine(\"The color is blue.\");\r\n        break;\r\n    default:\r\n        Console.WriteLine(\"Unknown color.\");\r\n        break;\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的示例中，根据`color`的值，将输出不同的消息。\r\n## 指定枚举值\r\n\r\n在声明枚举时，可以显式地指定枚举值。例如，以下代码定义了一个名为`DaysOfWeek`的枚举，其中包含七个值，每个值分别对应一周中的一天：\r\n\r\n```csharp\r\n\r\nenum DaysOfWeek\r\n{\r\n    Monday = 1,\r\n    Tuesday,\r\n    Wednesday,\r\n    Thursday,\r\n    Friday,\r\n    Saturday,\r\n    Sunday\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的示例中，`Monday`的值为1，而`Tuesday`的值为2，以此类推。\r\n\r\n可以使用枚举值的名称或其整数值来访问枚举值。例如，以下代码将`dayOfWeek`变量的值设置为`DaysOfWeek.Tuesday`：\r\n\r\n```csharp\r\n\r\nDaysOfWeek dayOfWeek = DaysOfWeek.Tuesday;\r\n```\r\n\r\n\r\n## 枚举转换\r\n\r\n可以将枚举类型转换为整数类型，也可以将整数类型转换为枚举类型。例如，以下代码将枚举类型`Colors`的值转换为整数类型：\r\n\r\n```csharp\r\n\r\nint colorValue = (int)Colors.Red;\r\n```\r\n\r\n\r\n\r\n在上面的示例中，`colorValue`的值为0，因为`Colors.Red`的整数值为0。\r\n\r\n可以使用`Enum.Parse`方法将字符串值转换为枚举值。例如，以下代码将字符串值`\"Green\"`转换为`Colors`枚举值：\r\n\r\n```csharp\r\n\r\nColors color = (Colors)Enum.Parse(typeof(Colors), \"Green\");\r\n```\r\n\r\n\r\n## 示例代码\r\n\r\n以下是一个完整的示例，演示了如何声明、使用和转换枚举类型：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nenum Colors\r\n{\r\n    Red,\r\n    Green,\r\n    Blue\r\n}\r\n\r\nenum DaysOfWeek\r\n{\r\n    Monday = 1,\r\n    Tuesday,\r\n    Wednesday,\r\n    Thursday,\r\n    Friday,\r\n    Saturday,\r\n    Sunday\r\n}\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        // Declare a variable of type Colors\r\n        Colors color = Colors.Red;\r\n\r\n        // Display the value of the variable\r\n        Console.WriteLine(\"The color is {0}.\", color);\r\n\r\n        // Declare a variable of type DaysOfWeek\r\n        DaysOfWeek dayOfWeek = DaysOfWeek.Tuesday;\r\n\r\n        // Display the value of the variable\r\n        Console.WriteLine(\"Today is {0}.\", dayOfWeek);\r\n\r\n        // Convert an enum value to an integer\r\n        int colorValue = (int)Colors.Green;\r\n        Console.WriteLine(\"The value of Green is {0}.\", colorValue);\r\n\r\n        // Convert a string to an enum value\r\n        Colors colorFromString = (Colors)Enum.Parse(typeof(Colors), \"Blue\");\r\n        Console.WriteLine(\"The value of Blue is {0}.\", colorFromString);\r\n    }\r\n}\r\n```\r\n\r\n输出：\r\n\r\n```\r\nThe color is Red.\r\nToday is Tuesday.\r\nThe value of Green is 1.\r\nThe value of Blue is Blue.\r\n```\r\n\r\n在上面的示例中，声明了两个枚举类型`Colors`和`DaysOfWeek`。然后，定义了一个变量`color`，其类型为`Colors`枚举，并将其值设置为`Colors.Red`。接下来，定义了一个变量`dayOfWeek`，其类型为`DaysOfWeek`枚举，并将其值设置为`DaysOfWeek.Tuesday`。然后，演示了如何将枚举值转换为整数类型和将字符串值转换为枚举值。\r\n','C# 枚举（Enum）','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,18),('c3a7daa0-18a4-3515-c3b6-3a0fe9b5b449',0,'在 C# 中，类是一种用户定义的引用类型，用于封装数据和行为。类是面向对象编程（OOP）的基础，通过创建对象来访问类的成员。\r\n## 声明类\r\n\r\n要声明一个类，需要使用 `class` 关键字，后面跟着类的名称和一对花括号 `{}`，用于包含类的成员。例如，下面是一个简单的 `Person` 类的声明：\r\n\r\n```csharp\r\n\r\nclass Person\r\n{\r\n    // 类成员在这里声明\r\n}\r\n```\r\n\r\n\r\n## 类的成员\r\n\r\n类的成员包括字段、属性、方法和事件等。下面是一些常见的类成员及其声明方式：\r\n### 字段\r\n\r\n字段是类中用于存储数据的变量。在类中声明字段时，需要指定字段的类型和名称。例如：\r\n\r\n```csharp\r\n\r\nclass Person\r\n{\r\n    private string name;  // 字段的访问修饰符可以是 public、private、protected 等\r\n}\r\n```\r\n\r\n\r\n### 属性\r\n\r\n属性用于访问和设置类中的字段值。属性通常包括一个 `get` 访问器和一个可选的 `set` 访问器。例如：\r\n\r\n```csharp\r\n\r\nclass Person\r\n{\r\n    private string name;\r\n    \r\n    public string Name\r\n    {\r\n        get { return name; }\r\n        set { name = value; }\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n可以通过以下方式访问和设置属性：\r\n\r\n```csharp\r\n\r\nPerson p = new Person();\r\np.Name = \"John\";\r\nstring name = p.Name;\r\n```\r\n\r\n\r\n### 方法\r\n\r\n方法是类中包含的可执行代码块。在类中声明方法时，需要指定方法的返回类型、名称和参数列表。例如：\r\n\r\n```csharp\r\n\r\nclass Person\r\n{\r\n    private string name;\r\n    \r\n    public void SayHello()\r\n    {\r\n        Console.WriteLine($\"Hello, my name is {name}.\");\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n可以通过以下方式调用方法：\r\n\r\n```csharp\r\n\r\nPerson p = new Person();\r\np.Name = \"John\";\r\np.SayHello();\r\n```\r\n\r\n\r\n### 事件\r\n\r\n事件是类中定义的特殊成员，用于在类的内部或外部触发某些操作。事件通常包括一个事件处理程序和一个可选的参数。例如：\r\n\r\n```csharp\r\n\r\nclass Person\r\n{\r\n    public event EventHandler NameChanged;\r\n    \r\n    private string name;\r\n    \r\n    public string Name\r\n    {\r\n        get { return name; }\r\n        set\r\n        {\r\n            if (name != value)\r\n            {\r\n                name = value;\r\n                OnNameChanged();\r\n            }\r\n        }\r\n    }\r\n    \r\n    protected virtual void OnNameChanged()\r\n    {\r\n        NameChanged?.Invoke(this, EventArgs.Empty);\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n可以通过以下方式订阅事件：\r\n\r\n```csharp\r\n\r\nPerson p = new Person();\r\np.NameChanged += OnNameChanged;\r\n```\r\n\r\n\r\n## 类的实例化\r\n\r\n要使用类的成员，需要先创建类的实例。可以使用 `new` 关键字创建类的实例。例如：\r\n\r\n```csharp\r\n\r\nPerson p = new Person();\r\n```\r\n\r\n\r\n\r\n可以使用类的实例来访问和设置类的成员。下面是一个完整的 `Person` 类的示例代码：\r\n\r\n```csharp\r\n\r\nclass Person\r\n{\r\n    private string name;\r\n    private int age;\r\n    \r\n    public string Name\r\n    {\r\n        get { return name; }\r\n        set { name = value; }\r\n    }\r\n    \r\n    public int Age\r\n    {\r\n        get { return age; }\r\n        set { age = value; }\r\n    }\r\n    \r\n    public void SayHello()\r\n    {\r\n        Console.WriteLine($\"Hello, my name is {name} and I am {age} years old.\");\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n可以使用以下代码创建 `Person` 类的实例，设置类的属性并调用类的方法：\r\n\r\n```csharp\r\n\r\nPerson p = new Person();\r\np.Name = \"John\";\r\np.Age = 30;\r\np.SayHello();\r\n```\r\n\r\n\r\n\r\n输出结果为：\r\n\r\n```csharp\r\n\r\nHello, my name is John and I am 30 years old.\r\n```\r\n\r\n\r\n## 总结\r\n\r\n本文介绍了 C# 类的声明、成员和实例化。在实际开发中，类是面向对象编程的基础，掌握类的使用方法对于开发高质量的程序非常重要。\r\n','C# 类（Class）','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,19),('c3af8ffe-ac77-eea3-5813-3a0fe9b5b44a',0,'当你需要在程序中进行不同对象之间的通信时，C# 中的事件是一种非常有用的工具。事件使得对象之间可以触发和响应各种操作，例如用户输入、网络请求等。\r\n## 事件的基本概念\r\n\r\n事件是一个特殊的委托，它用于通知对象某个操作已经发生或即将发生。事件可以被其他对象订阅，以便在事件发生时被通知。当一个事件被触发时，它会调用所有已经订阅它的委托。\r\n\r\nC# 中的事件由以下三个部分组成：\r\n- 事件发布者：该对象定义了事件，当事件发生时，它会通知所有已经订阅该事件的对象。\r\n- 事件参数：事件发生时需要传递的信息，可以是任何类型的对象。如果事件不需要传递参数，则可以使用 EventArgs。\r\n- 事件订阅者：该对象订阅了事件，并在事件发生时执行相应的操作。\r\n## 示例代码\r\n\r\n下面是一个示例代码，演示了如何在 C# 中使用事件。在该示例中，我们定义了一个简单的 Calculator 类，它可以对两个数进行加、减、乘、除操作，并在操作完成时触发一个事件。\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\npublic class Calculator\r\n{\r\n    // 定义一个事件\r\n    public event EventHandler<CalculationEventArgs> CalculationPerformed;\r\n\r\n    public int Add(int x, int y)\r\n    {\r\n        int result = x + y;\r\n        OnCalculationPerformed(new CalculationEventArgs(\"add\", x, y, result));\r\n        return result;\r\n    }\r\n\r\n    public int Subtract(int x, int y)\r\n    {\r\n        int result = x - y;\r\n        OnCalculationPerformed(new CalculationEventArgs(\"subtract\", x, y, result));\r\n        return result;\r\n    }\r\n\r\n    public int Multiply(int x, int y)\r\n    {\r\n        int result = x * y;\r\n        OnCalculationPerformed(new CalculationEventArgs(\"multiply\", x, y, result));\r\n        return result;\r\n    }\r\n\r\n    public int Divide(int x, int y)\r\n    {\r\n        int result = x / y;\r\n        OnCalculationPerformed(new CalculationEventArgs(\"divide\", x, y, result));\r\n        return result;\r\n    }\r\n\r\n    protected virtual void OnCalculationPerformed(CalculationEventArgs e)\r\n    {\r\n        // 调用事件委托\r\n        CalculationPerformed?.Invoke(this, e);\r\n    }\r\n}\r\n\r\npublic class CalculationEventArgs : EventArgs\r\n{\r\n    public string Operation { get; set; }\r\n    public int X { get; set; }\r\n    public int Y { get; set; }\r\n    public int Result { get; set; }\r\n\r\n    public CalculationEventArgs(string operation, int x, int y, int result)\r\n    {\r\n        Operation = operation;\r\n        X = x;\r\n        Y = y;\r\n        Result = result;\r\n    }\r\n}\r\n\r\npublic class Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        Calculator calculator = new Calculator();\r\n\r\n        // 订阅事件\r\n        calculator.CalculationPerformed += OnCalculationPerformed;\r\n\r\n        int x = 10;\r\n        int y = 5;\r\n\r\n        int result = calculator.Add(x, y);\r\n        Console.WriteLine(\"{0} + {1} = {2}\", x, y, result);\r\n\r\n        result = calculator.Subtract(x, y);\r\n        Console.WriteLine(\"{0} - {1} = {2}\", x, y, result);\r\n\r\n        result = calculator.Multiply(x, y);\r\n        Console.WriteLine(\"{0} * {1} = {2}\", x, y, result);\r\n\r\n        result = calculator.Divide(x, y);\r\n        Console.WriteLine(\"{0} / {1} = {2}\", x, y, result);\r\n\r\n        // 取消订阅事件\r\n        calculator.CalculationPerformed -= OnCalculationPerformed;\r\n\r\n        Console.ReadLine();\r\n    }\r\n\r\n    static void OnCalculationPerformed(object sender, CalculationEventArgs e)\r\n    {\r\n        Console.WriteLine(\"{0} {1} {2} = {3}\", e.X, e.Operation, e.Y, e.Result);\r\n    }\r\n}\r\n\r\n```\r\n\r\n在上面的示例代码中，我们定义了一个 Calculator 类，它包含四个计算方法：Add、Subtract、Multiply 和 Divide。每次调用这些方法时，它们都会触发 CalculationPerformed 事件，并传递一个 CalculationEventArgs 对象作为事件参数。在示例中，我们订阅了 CalculationPerformed 事件，并在事件触发时打印出计算结果。最后，我们取消了对事件的订阅。\r\n\r\n总的来说，使用 C# 中的事件可以让你的代码更加模块化和可维护。事件使得不同对象之间的通信变得更加容易，使得你可以更好地处理应用程序中的各种操作和事件。\r\n','C# 事件（Event）','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,34),('c4ca80dd-7253-eca3-6aa7-3a0f83ab2491',0,'## 简介\n默认推荐的构造函数注入，依赖关系会非常明确\n但是，会给程序带来大量的重复依赖注入代码，构造函数会非常的冗余\n所以，在Abp的中，内置了属性注入方式\n> 不是开玩笑，万不得已，最好别用。我也被坑过很多次，带来的弊端也非常明显，难以调试，且依赖关系不清晰，生命周期也是在构造函数之后\n\n## 使用方式\n使用极为简单：\n``` cs\n        public IArticleRepository ArticleRepository { get; set; }\n```\n在具备get与set方法的属性上，打上Autowired特性即可，在该类被注入时候，该属性会在容器中寻找并且赋值\n\n我们的实现方式，是通过AutoFac的模块，你需要在启动的Host中添加autofac的属性注入模块：\n','属性注入','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','00000000-0000-0000-0000-000000000000','2023-12-16 15:19:12','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('ca8f3ce4-88b6-34ec-2525-3a0ff53f8682',0,'\r\n- [AutoMapper](https://github.com/AutoMapper/AutoMapper)  - .NET中基于约定的对象到对象映射工具。[https://automapper.org](https://automapper.org/) \r\n- [TinyMapper](https://github.com/TinyMapper/TinyMapper)  - .NET中的微型快速对象映射工具。 \r\n- [ExpressMapper](https://github.com/fluentsprings/ExpressMapper)  - 一种轻量级、高速的.NET映射器，以自动化和简单的方式将一个类型的对象映射到另一个类型的对象。ExpressMapper完全依赖于表达式树。 \r\n- [AgileMapper](https://github.com/agileobjects/AgileMapper)  - 一个零配置的对象到对象映射工具，支持.NET Standard 1.0 \r\n- [Mapperly](https://github.com/riok/mapperly)  - 用于生成对象映射的.NET源代码生成器。无运行时反射。 \r\n- [Mapster](https://github.com/MapsterMapper/Mapster)  - .NET中的高性能对象映射工具。','对象映射','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,73),('cb579155-09e8-c7e2-07bf-3a1004d8afac',0,'当目录搭建完成，项目可以启动之后\n\n我们可以对这个系统进数据库的设计\n\n数据库的字段与领域层中的实体需要一一对应，所以当数据库设计完成之后（这里的数据库指的是设计，例如er图、详细数据库设计图，而不是去数据库建表），可以开始建立实体了\n\n## 创建Book实体\n启动模板中的领域层分为两个项目:\n\nAcme.BookStore.Domain包含你的实体, 领域服务和其他核心域对象.\nAcme.BookStore.Domain.Shared包含可与客户共享的常量,枚举或其他域相关对象.\n在解决方案的领域层(Acme.BookStore.Domain项目)中定义你的实体.\n\n该应用程序的主要实体是Book. 在Acme.BookStore.Domain项目中创建一个 文件夹(命名空间),并在其中添加名为 BookAggregateRoot 的类,如下所示:\n\n``` cs\nusing Acme.BookStore.Domain.Shared.Enums;\nusing SqlSugar;\nusing Volo.Abp.Data;\nusing Volo.Abp.Domain.Entities.Auditing;\n\nnamespace Acme.BookStore.Domain.Entities\n{\n    [SugarTable(\"Book\")]\n    public class BookAggregateRoot : AuditedAggregateRoot<Guid>\n    {\n        [SugarColumn(IsPrimaryKey = true)]\n        public override Guid Id { get; protected set; }\n        public string Name { get; set; }\n\n        public BookTypeEnum Type { get; set; }\n\n        public DateTime PublishDate { get; set; }\n\n        public float Price { get; set; }\n\n        [SugarColumn(IsIgnore = true)]\n        public override ExtraPropertyDictionary ExtraProperties { get; protected set; }\n    }\n}\n\n```\n\n> 实体是零散的概念，聚合根是实体的聚合，通常这个划分由业务进行决定，将一堆零散的实体进行聚合，例如一个很典型的例子：订单及订单项，这里的订单项需要依赖订单，订单是一个聚合根，而订单项是它的实体\n\n当然，实体与聚合根的划分本质上是为了让领域的划分更加聚合，但是实际开发情况，并不一定那么固定，这个领域的划分由业务决定。\n\n## BookTypeEnum枚举\nBook实体使用了BookTypeEnum枚举. 在Acme.BookStore.Domain.Shared项目中创建文件夹(命名空间),并在其中添加BookTypeEnum:\n\n``` cs\nnamespace Acme.BookStore.Domain.Shared.Enums\n{\n    public enum BookTypeEnum\n    {\n        Undefined,\n        Adventure,\n        Biography,\n        Dystopia,\n        Fantastic,\n        Horror,\n        Science,\n        ScienceFiction,\n        Poetry\n    }\n}\n\n```\n现在你的目录结构：\n![image.png](/prod-api/file/061da87e-80c9-5e82-cac0-3a1004b9766c/true)\n\n## 种子数据\n默认生成的表将不会有任何数据，所以我们可以通过种子数据的基础设施模块，初始化数据表的数据\n\n这个初始化的数据，可以放到`SqlsugarCore`层中,默认也是有这个文件夹的\n``` cs\nusing Acme.BookStore.Domain.Entities;\nusing Acme.BookStore.Domain.Shared.Enums;\nusing Volo.Abp.Data;\nusing Volo.Abp.DependencyInjection;\nusing Volo.Abp.Guids;\nusing Yi.Framework.SqlSugarCore.Abstractions;\n\nnamespace Acme.BookStore.SqlSugarCore.DataSeeds\n{\n    public class BookStoreDataSeed : IDataSeedContributor, ITransientDependency\n    {\n        private ISqlSugarRepository<BookAggregateRoot> _bookRepository;\n        private IGuidGenerator _guidGenerator;\n        public BookStoreDataSeed(ISqlSugarRepository<BookAggregateRoot> repository, IGuidGenerator guidGenerator)\n        {\n            _bookRepository = repository;\n            _guidGenerator = guidGenerator;\n        }\n\n        public async Task SeedAsync(DataSeedContext context)\n        {\n            if (!await _bookRepository.IsAnyAsync(x => true))\n            {\n                await _bookRepository.InsertAsync(\n                    new BookAggregateRoot\n                    {\n                        Name = \"1984\",\n                        Type = BookTypeEnum.Dystopia,\n                        PublishDate = new DateTime(1949, 6, 8),\n                        Price = 19.84f\n                    },\n                    autoSave: true\n                );\n\n                await _bookRepository.InsertAsync(\n                    new BookAggregateRoot\n                    {\n                        Name = \"The Hitchhiker''s Guide to the Galaxy\",\n                        Type = BookTypeEnum.ScienceFiction,\n                        PublishDate = new DateTime(1995, 9, 27),\n                        Price = 42.0f\n                    },\n                    autoSave: true\n                );\n            }\n        }\n\n\n    }\n}\n\n\n```\n目录如下：\n![image.png](/prod-api/file/a857ddb7-6b49-77a3-c932-3a1004c3aab0/true)\n\n## BookDto\n接下来，领域部分的算是已经完成了，我们的表和种子数据先不用管，框架默认使用codefirst自动建表，同时种子数据也会自动执行，所以我们可以先直接编写`应用层`\n\n对外不应该直接暴露实体，而是中转一层，这个就是`对象传输模型dto`\n\nYiCrudAppService 基类需要定义实体的基本DTO. 在 Acme.BookStore.Application.Contracts 项目中创建 Book 文件夹(命名空间), 并在其中添加名为 BookDto 的DTO类:\n``` cs\nusing Acme.BookStore.Domain.Shared.Enums;\nusing Volo.Abp.Application.Dtos;\n\nnamespace Acme.BookStore.Application.Contracts.Dtos.Book\n{\n    public class BookDto : AuditedEntityDto<Guid>\n    {\n        public string Name { get; set; }\n\n        public BookTypeEnum Type { get; set; }\n\n        public DateTime PublishDate { get; set; }\n\n        public float Price { get; set; }\n    }\n}\n\n```\n1. DTO类被用来在 表示层 和 应用层 传递数据.参阅DTO文档.\n2. 为了在用户界面上展示书籍信息,BookDto被用来将书籍数据传递到表示层.\n3. BookDto继承自 AuditedEntityDto<Guid>.与上面定义的 Book 实体一样具有一些审计属性.\n\n## BookCreateUpdateDto\n对于创建和更新的dto可单独管理\n\n``` cs\nusing System.ComponentModel.DataAnnotations;\nusing Acme.BookStore.Domain.Shared.Enums;\n\nnamespace Acme.BookStore.Application.Contracts.Dtos.Book\n{\n\n    public class BookCreateUpdateDto\n        {\n            [Required]\n            [StringLength(128)]\n            public string Name { get; set; }\n\n            [Required]\n            public BookTypeEnum Type { get; set; } = BookTypeEnum.Undefined;\n\n            [Required]\n            [DataType(DataType.Date)]\n            public DateTime PublishDate { get; set; } = DateTime.Now;\n\n            [Required]\n            public float Price { get; set; }\n        }\n  \n}\n\n```\n目录如下：\n![image.png](/prod-api/file/5af9913c-26a2-4d86-23ef-3a1004c92f98/true)\n\n## IBookAppService\n下一步是为应用程序定义接口,在Acme.BookStore.Application.Contracts中,并在其中添加名为IBookAppService的接口:\n\n``` cs\nusing Acme.BookStore.Application.Contracts.Dtos.Book;\nusing Volo.Abp.Application.Dtos;\nusing Yi.Framework.Ddd.Application.Contracts;\n\nnamespace Acme.BookStore.Application.Contracts.IServices\n{\n    public interface IBookAppService :\n      IYiCrudAppService< //Defines CRUD methods\n          BookDto, //Used to show books\n          Guid, //Primary key of the book entity\n          PagedAndSortedResultRequestDto, //Used for paging/sorting\n          BookCreateUpdateDto> //Used to create/update a book\n    {\n\n    }\n}\n\n```\n\n- 框架定义应用程序服务的接口不是必需的. 但是,它被建议作为最佳实践.\n- ICrudAppService定义了常见的CRUD方法:GetAsync,GetListAsync,CreateAsync,UpdateAsync和DeleteAsync. 从这个接口扩展不是必需的,你可以从空的IApplicationService接口继承并手动定义自己的方法(将在下一部分中完成).\n- ICrudAppService有一些变体, 你可以在每个方法中使用单独的DTO(例如使用不同的DTO进行创建和更新)\n\n## BookAppService\n\n是时候实现IBookAppService接口了.在Acme.BookStore.Application项目中,并在其中添加名为 BookAppService 的类:\n``` cs\nusing Acme.BookStore.Application.Contracts.Dtos.Book;\nusing Acme.BookStore.Application.Contracts.IServices;\nusing Acme.BookStore.Domain.Entities;\nusing SqlSugar;\nusing Volo.Abp.Application.Dtos;\nusing Yi.Framework.Ddd.Application;\nusing Yi.Framework.SqlSugarCore.Abstractions;\n\nnamespace Acme.BookStore.Application.Services\n{\n    public class BookAppService :\n           YiCrudAppService<\n               BookAggregateRoot, //The Book entity\n               BookDto, //Used to show books\n               Guid, //Primary key of the book entity\n               PagedAndSortedResultRequestDto, //Used for paging/sorting\n               BookCreateUpdateDto>, //Used to create/update a book\n           IBookAppService //implement the IBookAppService\n    {\n        private ISqlSugarRepository<BookAggregateRoot, Guid> _repository;\n        public BookAppService(ISqlSugarRepository<BookAggregateRoot, Guid> repository)\n            : base(repository)\n        {\n            _repository = repository;\n        }\n\n        public override async Task<PagedResultDto<BookDto>> GetListAsync(PagedAndSortedResultRequestDto input)\n        {\n            {\n                RefAsync<int> total = 0;\n\n                //由于直接查询接口基本上都是有包含查询条件的，默认内置的查询接口将无法满足业务的需求，所以基本上多查询都是有进行重写的\n                var entities = await _repository._DbQueryable\n                              //.WhereIF(!string.IsNullOrEmpty(input.ConfigKey), x => x.ConfigKey.Contains(input.ConfigKey!))\n                              //          .WhereIF(!string.IsNullOrEmpty(input.ConfigName), x => x.ConfigName!.Contains(input.ConfigName!))\n                              //          .WhereIF(input.StartTime is not null && input.EndTime is not null, x => x.CreationTime >= input.StartTime && x.CreationTime <= input.EndTime)\n                              .ToPageListAsync(input.SkipCount, input.MaxResultCount, total);\n                return new PagedResultDto<BookDto>(total, await MapToGetListOutputDtosAsync(entities));\n            }\n        }\n    }\n}\n\n```\n![image.png](/prod-api/file/7df63a8e-aad6-4d18-7d1f-3a1004ce0b4c/true)\n\n- BookAppService继承了CrudAppService<...>.它实现了 ICrudAppService 定义的CRUD方法.\n- BookAppService注入IRepository <Book,Guid>,这是Book实体的默认仓储. ABP自动为每个聚合根(或实体)创建默认仓储. 请参阅仓储文档\n- BookAppService使用IObjectMapper将Book对象转换为BookDto对象, 将CreateUpdateBookDto对象转换为Book对象. 启动模板使用Mapster库作为对象映射提供程序. 我们之前定义了映射, 因此它将按预期工作.\n\n\n\n## 自动生成API Controllers\n在典型的ASP.NET Core应用程序中,你创建API Controller以将应用程序服务公开为HTTP API端点. 这将允许浏览器或第三方客户端通过HTTP调用它们.\n\nABP可以自动按照约定将你的应用程序服务配置为MVC API控制器.\n\n## Swagger UI\n启动模板配置为使用Swashbuckle.AspNetCore运行swagger UI. 运行应用程序并在浏览器中输入https://localhost:XXXX/swagger/(用你自己的端口替换XXXX)作为URL. 使用CTRL+F5运行应用程序 (Acme.BookStore.Web)并使用浏览器访问https://localhost:<port>/swagger/ on your browser. 使用你自己的端口号替换 <port>.\n\n你会看到一些内置的服务端点和Book服务,它们都是REST风格的端点\n\n> 这很酷,因为我们没有编写任何代码来创建API控制器,但是现在我们有了一个可以正常使用的REST API!\n\n## 意框架，启动！\n\n接下来，只需要一键启动，数据库、表结构、种子数据、接口、swagger、rbac模块将自动装载\n\n请在配置文件中检查：codefirst与dataseed模块功能打开\n![image.png](/prod-api/file/a1b28bfb-66ff-8277-aa33-3a1004d11462/true)\n\n如无问题，直接启动\n\n![image.png](/prod-api/file/2f736587-1370-cfa4-d9b6-3a1004d222fd/true)\n\n默认在19001端口开启，当然你也可以在配置文件中进行修改，防止端口冲突\n\n成功启动后，将自动打开swagger文档：\n\n![image.png](/prod-api/file/f6fa7856-479e-d44c-660f-3a1004d298ce/true)\n\n关于其他rbac模块，可在swagger文档右上角切换，已进行自动分组切换\n\n接下来可以测试一下各个接口\n\n![image.png](/prod-api/file/bde36be2-0fb2-a415-af2c-3a1004d85aa0/true)\n\n> 简单而又不失**优雅**~','2.编写业务接口','e89c9593-f337-ada7-d108-3a0f83ae48e6','00000000-0000-0000-0000-000000000000','2024-01-10 17:19:57','59cf7e31-e3e4-544e-1038-3a0f836cc538','59cf7e31-e3e4-544e-1038-3a0f836cc538','2024-01-10 17:46:05',0),('cb9a2685-3acd-061a-f5b9-3a0ff53f8681',0,'* [Demystifier](https://github.com/benaadams/Ben.Demystifier) - 高性能的堆栈跟踪库。\r\n* [Exceptionless](https://github.com/exceptionless/Exceptionless.Net) - 异常客户端库。\r\n* [GlobalExceptionHandlerDotNet](https://github.com/JosephWoodward/GlobalExceptionHandlerDotNet) -  将异常处理为ASP.NET中间件，而不是在每个控制器操作中显式处理它们。\r\n* [Sentry](https://github.com/getsentry/sentry-dotnet) - .NET SDK for Sentry，一种开源错误跟踪，可帮助开发人员实时监控和修复崩溃。','Exception','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,43),('cc8bdbc9-f1ae-9549-0ebe-3a0ff53f8680',0,'- [.NEXT Raft](https://github.com/dotnet/dotNext)  - 用于.NET和ASP.NET Core的Raft实现，允许构建由分布式共识和复制驱动的集群化微服务。 \r\n- [Orleans](https://github.com/dotnet/orleans)  - Orleans是一个框架，提供了一种直接的方法来构建分布式高规模计算应用程序，无需学习和应用复杂的并发或其他扩展模式。它由Microsoft Research创建。 \r\n- [Orleankka](https://github.com/OrleansContrib/Orleankka)  - Orleankka是Microsoft Orleans框架的功能API。它非常适用于需要具有可组合、统一通信接口的情况，例如：CQRS、事件溯源、重新路由、FSM等。还为F#提供了称为Orleankka.FSharp的附加API。 \r\n- [Akka.net](https://github.com/akkadotnet/akka.net)  - Akka.NET是流行的Java/Scala框架Akka的.NET端口。这是一个社区驱动的端口，与原始的Java/Scala版本由Typesafe无关。 \r\n- [Zebus](https://github.com/Abc-Arbitrage/Zebus)  - Zebus是一个轻量级、高度通用的点对点服务总线，考虑了CQRS原则。它允许应用程序以快速且简单的方式相互通信。大部分复杂性都隐藏在库中，您可以专注于编写对您有意义的代码，而不是调试消息传递代码。这对于任何分布式应用程序都是一个非常基础的基础。 \r\n- [FsShelter](https://github.com/Prolucid/FsShelter)  - 用于编写[Apache Storm](https://storm.apache.org/) 组件和拓扑的F#库。提供了用于分布式和容错事件流处理的高级抽象。 \r\n- [Foundatio](https://github.com/FoundatioFx/Foundatio#jobs)  - 用于构建分布式应用程序的可插拔基础块。 \r\n- [MBrace](https://github.com/mbraceproject)  - 云中的集成数据脚本编写。 \r\n- [protoactor-dotnet](https://github.com/AsynkronIT/protoactor-dotnet)  - Proto Actor - 非常快速的Golang和C#分布式演员。','分布式计算','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,35),('ce917270-71f2-29d1-f8ec-3a0fe48288e8',1,'C# 是一种现代的面向对象编程语言，由微软开发并广泛应用于各种应用程序开发中。本文将介绍 C# 的基本语法，包括变量、数据类型、运算符、控制语句等内容。\r\n## 变量\r\n\r\n在 C# 中，变量是一种用于存储值的命名存储位置。在使用变量之前，需要先声明变量的类型和名称。例如，以下代码声明了一个整型变量：\r\n\r\n```csharp\r\n\r\nint age;\r\n```\r\n\r\n\r\n\r\n在此声明中，`int` 表示变量的类型，`age` 表示变量的名称。声明变量后，可以为其赋值：\r\n\r\n```csharp\r\n\r\nage = 18;\r\n```\r\n\r\n\r\n\r\n也可以在声明变量时进行初始化：\r\n\r\n```csharp\r\n\r\nint age = 18;\r\n```\r\n\r\n\r\n## 数据类型\r\n\r\nC# 中的数据类型包括整型、浮点型、布尔型、字符型等。以下是一些常见的数据类型及其范围：\r\n\r\n|数据类型|描述|范围|\r\n|--|--|--|\r\n|int|整型|-2,147,483,648 到 2,147,483,647|\r\n|float|单精度浮点型|约 -3.4 x 10^38 到 3.4 x 10^38|\r\n|double|双精度浮点型|约 -1.7 x 10^308 到 1.7 x 10^308|\r\n|bool|布尔型|true 或 false|\r\n|char|字符型|0 到 65,535|\r\n\r\n在 C# 中，还有一些其他的数据类型，如字符串型、枚举型等，可以根据需要进行选择和使用。\r\n## 运算符\r\n\r\nC# 中的运算符包括算术运算符、关系运算符、逻辑运算符等。以下是一些常见的运算符及其用法：\r\n### 算术运算符\r\n\r\n|运算符|描述|例子|\r\n|--|--|--|\r\n|+|加法|3 + 5 = 8|\r\n|-|减法|7 - 2 = 5|\r\n|*|乘法|4 * 6 = 24|\r\n|/|除法|10 / 2 = 5|\r\n|%|取模|10 % 3 = 1|\r\n\r\n### 关系运算符\r\n\r\n|运算符|描述|例子|\r\n|--|--|--|\r\n|==|等于|3 == 5 返回 false|\r\n|!=|不等于|3 != 5 返回 true|\r\n|>|大于|7 > 2 返回 true|\r\n|<|小于|4 < 6 返回 true|\r\n|>=|大于等于|10 >= 2 返回 true|\r\n|<=|小于等于|4 <= 6 返回 true|\r\n\r\n### 逻辑运算符\r\n\r\n|运算符|描述|例子|\r\n|--|--|--|\r\n|&&| 与运算 | 如果两个操作数都为 true，则结果为 true，否则为 false | true && false 返回 false |\r\n| &#124;&#124; | 或运算 | 如果两个操作数有一个为 true，则结果为 true，否则为 false | true || false 返回 true |\r\n| ! | 非运算 | 如果操作数为 true，则结果为 false，否则为 true | !true 返回 false |\r\n## 控制语句\r\n\r\nC# 中的控制语句包括条件语句、循环语句等。以下是一些常见的控制语句及其用法：\r\n### 条件语句\r\n\r\nC# 中的条件语句包括 `if`、`else`、`else if` 等关键字，用于根据条件执行不同的代码块。例如：\r\n\r\n```csharp\r\n\r\nif (age >= 18)\r\n{\r\n    Console.WriteLine(\"你已经成年了！\");\r\n}\r\nelse\r\n{\r\n    Console.WriteLine(\"你还未成年！\");\r\n}\r\n```\r\n\r\n\r\n\r\n在此代码中，如果 `age` 大于等于 18，则输出“你已经成年了！”；否则输出“你还未成年！”。\r\n### 循环语句\r\n\r\nC# 中的循环语句包括 `while`、`do while`、`for` 等关键字，用于重复执行一段代码块。例如：\r\n\r\n```csharp\r\n\r\nint i = 0;\r\nwhile (i < 10)\r\n{\r\n    Console.WriteLine(i);\r\n    i++;\r\n}\r\n```\r\n\r\n\r\n\r\n在此代码中，变量 `i` 从 0 开始逐渐递增，当 `i` 小于 10 时，循环执行输出 `i` 的值，直到 `i` 等于 10 时循环结束。\r\n## 总结\r\n\r\n本文介绍了 C# 的基本语法，包括变量、数据类型、运算符、控制语句等内容。学习这些基础知识是 C# 编程的第一步，也是成为一名优秀的 C# 开发者的必要条件。希望本文能够帮助读者更好地了解和掌握 C# 编程。\r\n','C# 基本语法','67bbbd51-8f39-6bc3-46fe-3a0fa9fe8385','00000000-0000-0000-0000-000000000000','2024-01-04 10:38:00','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','2024-01-04 23:56:47',0),('cebea0f2-d038-6a73-008d-3a0ff53f8682',0,'\r\n* [EFCorePowerTools](https://github.com/ErikEJ/EFCorePowerTools) - EF工具库 - reverse engineering, migrations and model。\r\n- [Entity Framework 6](https://github.com/dotnet/ef6)  - 一个对象关系映射器，使.NET开发人员能够使用领域特定对象处理关系数据。 \r\n- [Entity Framework Core](https://github.com/dotnet/efcore)  - 一个对象关系映射器，使.NET开发人员能够使用领域特定对象处理关系数据。 \r\n  - [EntityFrameworkCore.DataEncryption](https://github.com/Eastrall/EntityFrameworkCore.DataEncryption) - Microsoft.EntityFrameworkCore的插件，可以使用内置或自定义加密提供程序添加对加密字段的支持。\r\n- [EntityFramework.Exceptions](https://github.com/Giorgi/EntityFramework.Exceptions)  - 在SqlServer、MySql、PostgreSQL或SQLite中，当您的SQL查询违反数据库约束时，使用类型化异常处理Entity Framework Core。 \r\n  - [EFCore.BulkExtensions](https://github.com/borisdj/EFCore.BulkExtensions)  - 用于超快（批量复制）CRUD操作和多个DB（SQL、PG、My、Lite）的Entity Framework Core扩展。 \r\n  - [EntityFramework-Plus](https://github.com/zzzprojects/EntityFramework-Plus) - EF扩展库，包括过滤器，审核，缓存，查询将来，批删除，批更新等。\r\n  - [EntityFramework.Exceptions](https://github.com/Giorgi/EntityFramework.Exceptions) - 当您的SQL查询违反SqlServer，MySql或PostgreSQL中的数据库约束时，请对EntityFrameworkCore使用类型化的异常处理。\r\n  - [EntityFramework.Triggers](https://github.com/NickStrupat/EntityFramework.Triggers) - EF触发器.\r\n  - [EntityFramework.Rx](https://github.com/NickStrupat/EntityFramework.Rx) - EF的Reactive 扩展程序。\r\n  - [Npgsql.EntityFrameworkCore.PostgreSQL](https://github.com/npgsql/Npgsql.EntityFrameworkCore.PostgreSQL) - PostgreSQL的EF驱动程序\r\n  - [EntityFramework.PrimaryKey](https://github.com/NickStrupat/EntityFramework.PrimaryKey) - EF的主键库。\r\n  - [EntityFramework.TypedOriginalValues](https://github.com/NickStrupat/EntityFramework.TypedOriginalValues) - 获取实体属性.\r\n  - [EntityFramework.VersionedProperties](https://github.com/NickStrupat/EntityFramework.VersionedProperties) -  EF找那个属性库。\r\n  - [LINQKit](https://github.com/scottksmith95/LINQKit) - LINQKit是LINQ对SQL和Entity Framework的免费扩展集。\r\n  - [Pomelo.EntityFrameworkCore.MySql](https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql) - mysql的EF驱动程序。\r\n  - [spectre.query](https://github.com/spectresystems/spectre.query) - EF的简单查询库。\r\n- [Dapper](https://github.com/StackExchange/Dapper)  - .NET的一个简单对象映射器，由[StackExchange](https://stackexchange.github.io/) 开发。 \r\n  - [Dapper Extensions](https://github.com/tmsmith/Dapper-Extensions)  - 通过添加对POCO的基本CRUD操作（获取、插入、更新、删除）来增强Dapper的小型库。 \r\n  - [Dapper.FastCRUD](https://github.com/MoonStorm/Dapper.FastCRUD)  - 用于Dapper的最快微型ORM扩展。 \r\n  - [Dapper-FluentMap](https://github.com/henkmollema/Dapper-FluentMap) - Dapper的扩展。\r\n  - [Dommel](https://github.com/henkmollema/Dommel) - Dapper的CRUD操作。\r\n  - [MicroOrm.Dapper.Repositories](https://github.com/phnx47/MicroOrm.Dapper.Repositories) - Dapper的CRUD操作。\r\n- [SqlSugar](https://github.com/donet5/SqlSugar)  - 支持多个RDBMS，包括MySql、SqlServer、Sqlite、Oracle、Postgresql等等的另一个ORM库。 \r\n- [FreeSql](https://chat.openai.com/github.com/dotnetcore/FreeSql)  - 一个方便的.NET ORM，在MySql、SqlServer、PostgreSQL、Oracle、Sqlite、Firebird、达梦、人大金仓、神舟通用、翰高和Access上都有支持。 \r\n* [Chloe](https://github.com/shuxinqin/Chloe) - 用于.NET的轻量级高性能对象/关系映射(ORM)库。\r\n- [NHibernate](https://github.com/nhibernate)  - NHibernate对象关系映射器。 \r\n- [Fluent NHibernate](https://github.com/nhibernate/fluent-nhibernate)  - NHibernate的流畅、无XML、编译安全、自动化、基于约定的映射。 \r\n- [FluentMigrator](https://github.com/fluentmigrator/fluentmigrator)  - .NET的流畅迁移框架。 \r\n- [ServiceStack.OrmLite](https://github.com/ServiceStack/ServiceStack.OrmLite)  - 轻巧、简单且快速的基于约定的POCO ORM **[对开源项目免费]**  **[需要付费]** \r\n- [Massive](https://github.com/FransBouma/Massive)  - 一个小巧、令人愉快的数据访问工具，会永远爱你。 \r\n- [LINQ to DB](https://github.com/linq2db/linq2db)  - 提供POCO对象和数据库之间的简单、轻巧、快速和类型安全的层的最快LINQ数据库访问库。 \r\n- [MicroLite ORM](https://github.com/MicroLite-ORM/MicroLite)  - 用于.NET框架的微型对象关系映射器。它被设计成易于使用、可扩展和可测试的。 \r\n- [PetaPoco](https://github.com/CollaboratingPlatypus/PetaPoco)  - 用于POCO的小型ORM工具。 \r\n- [AsyncPoco](https://github.com/tmenier/AsyncPoco)  - PetaPoco的全异步分支。 \r\n- [NPoco](https://github.com/schotime/NPoco)  - 一个简单的微型ORM，将查询结果映射到POCO对象。基于PetaPoco的Schotime分支。 \r\n- [NReco.Data](https://github.com/nreco/data) - 用于SQL命令生成，CRUD操作和简单POCO映射的轻量级的独立DAL。\r\n- [Limebean](https://github.com/Nick-Lucas/LimeBean)  - 使用SQL片段并且不需要模型类的混合型ORM。 \r\n- [LLBLGen Pro](https://www.llblgen.com/)  - 用于Entity Framework、NHibernate、Linq to SQL和其自己的ORM框架LLBLGen Pro Runtime Framework的实体建模解决方案。 **[需要付费]**  **[免费提供Lite版本]** \r\n- [Insight.Database](https://github.com/jonwagner/Insight.Database)  - Insight.Database是.NET的快速、轻量级、微型ORM。 \r\n- [DbExtensions](https://maxtoroq.github.io/DbExtensions/)  - 数据访问框架，着重于查询构建、粒度和代码美观度。 \r\n- [SmartSql](https://github.com/dotnetcore/SmartSql)  - SmartSql = MyBatis + Cache（内存 | Redis）+ ZooKeeper + R / W拆分 + 动态仓库 .... \r\n- [RepoDb](https://github.com/mikependon/RepoDb)  - 用于.NET的混合ORM库。 \r\n  - [RepoDb.MySql](https://github.com/mikependon/RepoDb/tree/master/RepoDb.MySql) - MySql的ORM库.\r\n  - [RepoDb.SqLite](https://github.com/mikependon/RepoDb/tree/master/RepoDb.SqLite) - SqLite的ORM库.\r\n- [Venflow](https://github.com/TwentyFourMinutes/Venflow)  - 用于PostgreSQL的超快、轻量级ORM。 \r\n- [MongoFramework](https://github.com/TurnerSoftware/MongoFramework)  - MongoDB的\"Entity Framework\"风格接口。\r\n- [NEventStore](https://github.com/NEventStore/NEventStore) - 持久性库，该库的开发特别关注DDD / CQRS应用程序。\r\n- [Querybuilder](https://github.com/sqlkata/querybuilder) -  SqlKata Query Builder是一个用C#编写的功能强大的Sql查询。\r\n- [SqlFu](https://github.com/sapiens/SqlFu) - 快速且通用的Micro-ORM。\r\n- [SQLStreamStore](https://github.com/SQLStreamStore/SQLStreamStore) - 针对基于SQL的.NET实现的Stream Store库。\r\n* [DbUp](https://github.com/DbUp/DbUp) -  可帮助您将更改部署到SQL Server数据库，跟踪已经运行的SQL脚本，并运行使数据库更新所需的更改脚本。\r\n* [Evolve](https://github.com/lecaillon/Evolve) - 使用纯SQL脚本的简单数据库迁移工具。受到Flyway的启发。\r\n* [monitor-table-change-with-sqltabledependency](https://github.com/christiandelbianco/monitor-table-change-with-sqltabledependency) - 获取有关记录表更改的SQL Server通知。\r\n* [roundhouse](https://github.com/chucknorris/roundhouse) - RoundhousE是用于.NET的数据库迁移实用程序，它使用sql文件和基于源代码控制的版本控制。\r\n* [SapphireDb](https://github.com/SapphireDb/SapphireDb) - SapphireDb的服务器实现，这是一个通过实时数据同步轻松开发应用程序的框架，并且是asp.net核心和ef核心的Firebase实时数据库/ firestore的自托管替代方案。\r\n* [SharpRepository](https://github.com/SharpRepository/SharpRepository) -  SharpRepository是一个用C#编写的通用存储库，它包括对各种关系，文档和对象数据库的支持，包括Entity Framework，RavenDB，MongoDb和Db4o。 SharpRepository还包括Xml和InMemory存储库实现。\r\n* [TrackableEntities.Core](https://github.com/TrackableEntities/TrackableEntities.Core) - 使用.NET Core跨服务边界进行更改跟踪。\r\n* [Mongo.Migration](https://github.com/SRoddis/Mongo.Migration) - MongoDB的即时迁移库。','ORM','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,76),('d00264d0-51ea-ba46-d4e6-3a0ff53f8681',0,'\r\n- [GraphQL.NET](https://github.com/graphql-dotnet/graphql-dotnet)  - 在.NET中实现[Facebook的GraphQL](https://github.com/graphql/graphql-spec) \r\n- [HotChocolate](https://github.com/ChilliCream/hotchocolate)  - 兼容所有GraphQL兼容客户端的GraphQL服务器，如Strawberry Shake、Relay、Apollo Client和各种其他客户端和工具。 \r\n- [graphql-net](https://github.com/chkimes/graphql-net)  - 用于.NET的GraphQL到IQueryable的转换。 \r\n- [EntityGraphQL](https://github.com/EntityGraphQL/EntityGraphQL)  - 用于在数据模型之上构建GraphQL API的库，具有易于将多个数据源轻松集成到单个GraphQL模式中的可扩展性（EF不是必需的 - 任何与LinqProvider或内存中对象一起工作的ORM都可以使用）。 \r\n- [ZeroQL](https://github.com/byme8/ZeroQL)  - 高性能的C#友好的GraphQL客户端。它支持类似于Linq的语法。它不需要Reflection.Emit或表达式。因此，运行时提供的性能非常接近原始HTTP调用。\r\n','GraphQL','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,50),('d0c513bc-8b29-0fb6-5769-3a0ff543ba80',0,'![image.png](/prod-api/file/9a1b1c25-9262-9b9b-d951-3a0ff5439166/true)','WebApplication主机','2da0361c-000d-e0d8-6737-3a0ff5421cdc','00000000-0000-0000-0000-000000000000','2024-01-07 16:42:57','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('d0d29116-1ab1-242b-ce70-3a0ff5456dbf',0,'![image.png](/prod-api/file/7f64084d-5993-3aa8-0021-3a0ff5456644/true)','RateLimiter限制速率','2da0361c-000d-e0d8-6737-3a0ff5421cdc','00000000-0000-0000-0000-000000000000','2024-01-07 16:44:48','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('d1218cd9-bfd7-6ab2-b25e-3a0ff53f8683',0,'\r\n- [RegExtract](https://github.com/sblom/RegExtract)  - 清晰简单的符合C#语言规范的基于正则表达式的行解析器，生成强类型结果。','正则表达式','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,87),('d34c3571-48e3-1a56-aa2d-3a0ff5871912',0,'**C#Winform--动态点名系统**\n\n**作者心得**\n\n - 真随机点名\n - 动态点名界面\n - 文件txt直接导入\n - 设置快慢\n - 人数自定义\n -自动读取文件： F:\\\\点名系统.txt\n\n他真的很棒！\n\n**源代码**\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\nusing System.IO;\n\nnamespace DMXT\n{\n    public partial class Form1 : Form\n    {\n        int mm = 0;\n        Button[] b = new Button[100];\n        int x = 0, y = 0;\n        public Form1()\n        {\n            InitializeComponent();\n        }\n        private void Form1_Load(object sender, EventArgs e)\n        {\n\n            button1.BackColor = Color.FromArgb(0x7fdd2378);\n            if (!File.Exists(\"F:\\\\点名系统.txt\") )\n                File.Create(\"F:\\\\点名系统.txt\" ).Close(); \n\n            for (int i = 0; i < 100; i++)\n            {\n                Button button = new Button();\n                button.Size = new Size(80, 40);\n                button.BackColor = Color.White;\n                if (i % 10 == 0 && i != 0)\n                {\n                    x = 0;\n                    y += 40;\n                }\n                else if (i % 10 != 0 && i != 0)\n                {\n                    x += 80;\n                }\n                button.Location = new Point(x, y);\n                b[i] = button;\n                Controls.Add(b[i]);\n            }\n            string[] data = new string[100];\n            data = read(out int m);\n            mm = m;\n            for (int i = 0; i < 100; i++)\n            {\n                b[i].Text = data[i];\n            }\n        }\n\n        private void button1_Click(object sender, EventArgs e)\n        {\n            if (button1.Text == \"开始点名\")\n            {\n                timer1.Enabled = true;\n                button1.Text = \"停止点名\";\n                button1.BackColor = Color.Red;\n            }\n            else\n            {\n                timer1.Enabled = false;\n                button1.Text = \"开始点名\";\n                button1.BackColor = Color.FromArgb(0x7fdd2378);\n            }\n\n        }\n\n \n        Random o = new Random();\n        int oo = 0;\n        int mid = 99;\n        private void timer1_Tick(object sender, EventArgs e)\n        {\n            oo = o.Next(0, mm);\n            b[oo].BackColor = Color.Red;\n            if(oo!=mid)\n            b[mid].BackColor = Color.White;\n            mid = oo;\n        }\n\n        private void btn_dis_Click(object sender, EventArgs e)\n        {\n            timer1.Interval += 50;\n        }\n\n        private void btn_add_Click(object sender, EventArgs e)\n        {   if(timer1.Interval>50)\n            timer1.Interval -= 50;\n        }\n\n        public string[] read(out int j)\n        {\n            j = 0;\n            int i = 0;\n            string[] data = new string[100];\n            StreamReader sr = new StreamReader(\"F:\\\\点名系统.txt\", Encoding.Default);\n            while (sr.EndOfStream != true)\n            {\n                data[i] = sr.ReadLine();\n                i++;\n            }\n            foreach (string k in data)\n            {\n                if (k == null)\n                    goto end;\n                j++;\n            }\n        end:\n             return data ;\n           \n            \n        }\n    }\n}\n\n**效果截图**\n（效果不是重点，我也懒的再去自己编名字导入数据了）\n![image.png](/prod-api/file/8344c867-1d5f-a258-4c95-3a0ff5870a30/true)\n\n**作者的话**\n这是我第一次使用io流来操作文件\n说实在的，c#的io流总感觉有些绕，不如python来的直接\n这个也许真有点什么用','C#Winform--动态点名系统','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 17:56:32','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('d4991547-3fe3-bdec-8ab4-3a0fe9b5b449',0,'\r\n在 C# 中，运算符是用于执行各种操作的符号或符号组合。 C# 中的运算符包括算术运算符，比较运算符，逻辑运算符，位运算符等。\r\n## 算术运算符\r\n\r\n算术运算符用于执行算术操作，如加法，减法，乘法和除法。\r\n\r\n|运算符|描述|示例|\r\n|--|--|--|\r\n|+  |加法           |int result = 1 + 2;|\r\n|-  |减法           |int result = 5 - 3;|\r\n|*  |乘法           |int result = 2 * 3;|\r\n|/  |除法           |int result = 10 / 2;|\r\n|%  |取模（取余数）  |int result = 10 % 3;|\r\n\r\n\r\n## 比较运算符\r\n\r\n比较运算符用于比较两个值是否相等，大于或小于等关系。\r\n\r\n\r\n|运算符|描述|示例|\r\n|--|--|--|\r\n|==\t|相等\t    |bool result = (1 == 1);|\r\n|!=\t|不相等\t    |bool result = (1 != 2);|\r\n|>\t|大于\t    |bool result = (5 > 3);|\r\n|<\t|小于\t    |bool result = (3 < 5);|\r\n|>=\t|大于等于\t|bool result = (5 >= 5);|\r\n|<=\t|小于等于\t|bool result = (3 <= 5);|\r\n\r\n## 逻辑运算符\r\n\r\n逻辑运算符用于组合和操作布尔值（true/false）。\r\n\r\n|运算符|描述|示例|\r\n|--|--|--|\r\n|&&\t|逻辑与\t|bool |result = (true && false);|\r\n|&#124;&#124;\t|逻辑或\t|bool |result = (true || false);|\r\n|!\t|逻辑非\t|bool |result = !true;|\r\n\r\n\r\n## 位运算符\r\n\r\n位运算符用于对二进制位进行操作。\r\n\r\n|运算符|描述|示例|\r\n|--|--|--|\r\n|&\t|按位与\t    |int result = 3 & 5;|\r\n|&#124;\t|按位或\t    |int result = 3 | 5;|\r\n|^\t|按位异或\t|int result = 3 ^ 5;|\r\n|~\t|按位取反\t|int result = ~3;|\r\n|<<\t|左移\t    |int result = 3 << 2;|\r\n|>>\t|右移\t    |int result = 10 >> 1;|\r\n\r\n## 赋值运算符\r\n\r\n赋值运算符用于将一个值赋给变量。\r\n\r\n|运算符\t|描述\t    |示例|\r\n|--|--|--|\r\n|=\t    |赋值\t    |int a = 5;|\r\n|+=\t    |加后赋值\t|a += 3;|\r\n|-=\t    |减后赋值\t|a -= 2;|\r\n|*=\t\t|乘后赋值 | `a *= 4;` |\r\n| /= | 除后赋值 | `a /= 2;` |\r\n| %= | 取模后赋值 | `a %= 3;` |\r\n| <<= | 左移后赋值 | `a <<= 2;` |\r\n| >>= | 右移后赋值 | `a >>= 1;` |\r\n| &= | 按位与后赋值 | `a &= 3;` |\r\n| &#124;= | 按位或后赋值 | `a \\|= 5;` |\r\n| ^= | 按位异或后赋值 | `a ^= 3;` |\r\n\r\n## 其他运算符\r\n\r\n除了上述常见的运算符外，C# 还提供了一些其他的运算符，如条件运算符，类型转换运算符和空值运算符等。\r\n### 条件运算符\r\n\r\n条件运算符（?:）是一种简洁的 if-else 语句的替代方式。\r\n\r\n```csharp\r\n\r\nint a = 5;\r\nint b = 3;\r\nint max = (a > b) ? a : b;\r\n```\r\n\r\n\r\n### 类型转换运算符\r\n\r\n类型转换运算符用于将一个数据类型转换为另一个数据类型。\r\n\r\n```csharp\r\n\r\nint a = 5;\r\ndouble b = (double)a;\r\n```\r\n\r\n\r\n### 空值运算符\r\n\r\n空值运算符（??）用于检查一个值是否为 null，如果是，则返回一个默认值。\r\n\r\n```csharp\r\n\r\nint? a = null;\r\nint b = a ?? 0;\r\n```\r\n\r\n\r\n\r\n上述代码中，如果 a 的值为 null，则 b 将被赋值为 0。\r\n## 运算符优先级\r\n\r\n在 C# 中，运算符的优先级决定了它们在表达式中的执行顺序。优先级较高的运算符先于优先级较低的运算符执行。\r\n\r\n以下是 C# 中运算符优先级的列表，按从高到低的顺序排列：\r\n1. ()\r\n2. ++, --（后缀）\r\n3. ++, --（前缀）\r\n4. !, ~, +, -, (类型), *(指针), &(取地址)\r\n5. *, /, %\r\n6. +, -\r\n7. <<, >>\r\n8. <, <=, >, >=\r\n9. ==, !=\r\n10. &\r\n11. ^\r\n12. |\r\n13. &&\r\n14. ||\r\n15. ?:\r\n16. =, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |=\r\n## 示例代码\r\n\r\n以下是使用 C# 运算符进行计算的一些示例代码：\r\n\r\n```csharp\r\n\r\nint a = 5;\r\nint b = 3;\r\n\r\nint sum = a + b;\r\nint difference = a - b;\r\nint product = a * b;\r\nint quotient = a / b;\r\nint remainder = a % b;\r\n\r\nbool isEqual = (a == b);\r\nbool isGreater = (a > b);\r\nbool isLess = (a < b);\r\n\r\nbool condition1 = true;\r\nbool condition2 = false;\r\nbool result1 = (condition1 && condition2);\r\nbool result2 = (condition1 || condition2);\r\nbool result3 = !condition1;\r\n\r\nint num1 = 3; //二进制表示为 0011\r\nint num2 = 5; //二进制表示为 0101\r\n\r\nint andResult = num1 & num2; //二进制为 0001，即 1\r\nint orResult = num1 | num2; //二进制为 0111，即 7\r\nint xorResult = num1 ^ num2; //二进制为 0110，即 6\r\nint complementResult = ~num1; //二进制为 1100，即 -4\r\nint leftShiftResult = num1 << 2; //二进制为 1100，即 12\r\nint rightShiftResult = num2 >> 1; //二进制为 0010，即 2\r\n\r\nint num3 = 5;\r\nint num4 = 3;\r\n\r\nnum3 += num4; // num3 等于 8\r\nnum3 -= num4; // num3 等于 5\r\nnum3 *= num4; // num3 等于 15\r\nnum3 /= num4; // num3 等于 5\r\nnum3 %= num4; // num3 等于 2\r\nnum3 <<= num4; // num3 等于 40，二进制为 101000\r\nnum3 >>= num4; // num3 等于 5\r\nnum3 &= num4; // num3 等于 1，二进制为 0001\r\nnum3 |= num4; // num3 等于 3，二进制为 0011\r\nnum3 ^= num4; // num3 等于 0，二进制为 0000\r\n\r\nint? nullableNum1 = null;\r\nint nullableNum2 = nullableNum1 ?? 0; // nullableNum2 等于 0\r\n\r\n```mathematica\r\n\r\n以上就是 C# 运算符的简介和示例代码。了解这些运算符的使用和优先级可以帮助您更好地编写 C# 程序。\r\n```\r\n','C# 运算符','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,9),('d5bfec20-6a2a-9f96-2e93-3a0fe9b5b449',0,'当我们编写 C# 程序时，我们可能需要定义许多不同的类、结构体、函数和其他成员，这些成员可能会有相同的名称，因此需要一个有效的方式来区分它们。这就是命名空间的作用。命名空间是一种组织代码的方式，它将相关的代码组合在一起，并确保不同的代码之间不会产生冲突。\r\n## 命名空间的定义\r\n\r\n在 C# 中，命名空间通过关键字 `namespace` 来定义。以下是一个简单的示例：\r\n\r\n```csharp\r\n\r\nnamespace MyNamespace\r\n{\r\n    class MyClass\r\n    {\r\n        // Class members\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的示例中，我们定义了一个名为 `MyNamespace` 的命名空间，并在其中定义了一个名为 `MyClass` 的类。类成员可以在命名空间中访问，但在外部命名空间中需要使用限定名。\r\n## 使用命名空间\r\n\r\n我们可以在程序中使用命名空间来限定类型的名称，以便在代码中使用它们。例如，如果我们想要使用 `MyClass` 类，我们可以这样做：\r\n\r\n```csharp\r\n\r\nMyNamespace.MyClass myObject = new MyNamespace.MyClass();\r\n```\r\n\r\n\r\n\r\n在上面的代码中，我们使用限定名 `MyNamespace.MyClass` 来创建一个新的 `MyClass` 对象。如果我们已经使用了 `using` 语句导入了命名空间，则可以省略限定名，如下所示：\r\n\r\n```csharp\r\n\r\nusing MyNamespace;\r\n\r\nMyClass myObject = new MyClass();\r\n```\r\n\r\n\r\n## 命名空间的嵌套\r\n\r\n命名空间可以嵌套在其他命名空间中，这样可以更好地组织代码。例如：\r\n\r\n```csharp\r\n\r\nnamespace MyNamespace\r\n{\r\n    namespace MySubNamespace\r\n    {\r\n        class MyClass\r\n        {\r\n            // Class members\r\n        }\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的示例中，我们定义了一个名为 `MySubNamespace` 的命名空间，并将其嵌套在 `MyNamespace` 命名空间中。在使用该类时，我们可以这样做：\r\n\r\n```csharp\r\n\r\nMyNamespace.MySubNamespace.MyClass myObject = new MyNamespace.MySubNamespace.MyClass();\r\n```\r\n\r\n\r\n## 命名空间的别名\r\n\r\n有时我们可能需要为一个命名空间定义一个别名，以便在代码中更方便地引用它。我们可以使用 `using` 语句来定义一个命名空间的别名。例如：\r\n\r\n```csharp\r\n\r\nusing MyAlias = MyNamespace.MySubNamespace;\r\n\r\nMyAlias.MyClass myObject = new MyAlias.MyClass();\r\n```\r\n\r\n\r\n\r\n在上面的示例中，我们将 `MySubNamespace` 命名空间定义为 `MyAlias` 的别名。这样，我们就可以使用 `MyAlias` 来代替 `MyNamespace.MySubNamespace`。\r\n## 总结\r\n\r\n命名空间是 C# 中组织代码的重要机制，它可以将相关的代码组织在一起，并确保不同的代码之间不会产生冲\r\n','C# 命名空间（Namespace）','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,24),('d84f57ab-cacc-84b4-96ac-3a0ff53f8684',0,'\r\n* [Lean](https://github.com/QuantConnect/Lean) - Lean Engine是一个开源的、完全托管的C#算法交易引擎，适用于桌面和云端使用。\r\n* [StockSharp](https://github.com/StockSharp/StockSharp) - 交易和算法交易的开源平台（股票市场、外汇、比特币和期权）','交易','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,100),('d8a1c7b1-9504-acbe-f8fa-3a0fe9b5b44a',0,'## 什么是多线程？\r\n\r\n线程是操作系统中的基本调度单位，是程序执行的最小单位。多线程指的是一个程序中同时存在多个线程并发执行。每个线程有自己的代码执行路径和独立的堆栈空间，线程之间可以共享程序的数据段和代码段。\r\n\r\n在 C# 中，可以使用 System.Threading 命名空间中的类来创建和管理线程。\r\n## 如何创建线程？\r\n\r\nC# 中创建线程的方式有两种：\r\n### 1. 使用 Thread 类\r\n\r\nThread 类是 C# 中用于创建和管理线程的基本类。创建线程的步骤如下：\r\n1. 创建 Thread 对象，并将线程执行的方法作为参数传递给 Thread 构造函数。\r\n2. 调用 Thread.Start 方法启动线程。\r\n3. 线程执行完毕后，调用 Thread.Join 方法等待线程退出。\r\n\r\n以下是一个示例代码，该代码创建了一个新的线程，并在线程中执行一个简单的任务：\r\n\r\n```csharp\r\n\r\nusing System;\r\nusing System.Threading;\r\n\r\nclass Program\r\n{\r\n    static void Main()\r\n    {\r\n        // 创建一个新的线程\r\n        Thread newThread = new Thread(WorkerThread);\r\n\r\n        // 启动线程\r\n        newThread.Start();\r\n\r\n        // 等待线程结束\r\n        newThread.Join();\r\n\r\n        Console.WriteLine(\"Main thread exiting.\");\r\n    }\r\n\r\n    static void WorkerThread()\r\n    {\r\n        Console.WriteLine(\"Worker thread started.\");\r\n\r\n        // 模拟一些工作\r\n        Thread.Sleep(1000);\r\n\r\n        Console.WriteLine(\"Worker thread exiting.\");\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n该示例中，程序创建了一个新的线程并启动了它。线程执行的方法是 WorkerThread，该方法在控制台输出一些文本，然后模拟了一些工作（通过调用 Thread.Sleep 方法使线程休眠 1 秒），最后退出线程。\r\n### 2. 使用 Task 类\r\n\r\nTask 类是 .NET Framework 4.0 引入的一种新的线程模型。使用 Task 类创建线程的步骤如下：\r\n1. 使用 Task.Factory.StartNew 方法创建一个 Task 对象，并将线程执行的方法作为参数传递给 StartNew 方法。\r\n2. 可以使用 Task.ContinueWith 方法指定线程执行完毕后需要执行的代码。\r\n\r\n以下是一个示例代码，该代码创建了一个新的线程，并在线程中执行一个简单的任务：\r\n\r\n```csharp\r\n\r\nusing System;\r\nusing System.Threading.Tasks;\r\n\r\nclass Program\r\n{\r\n    static void Main()\r\n    {\r\n        // 创建一个新的 Task 对象\r\n        Task newTask = Task.Factory.StartNew(WorkerTask);\r\n\r\n        // 等待 Task 执行完毕\r\n        newTask.Wait();\r\n\r\n        Console.WriteLine(\"Main thread exiting.\");\r\n    }\r\n\r\n    static void WorkerTask()\r\n    {\r\n        Console.WriteLine(\"Worker task started.\");\r\n\r\n        // 模拟一些工作\r\n\r\n        Task.Delay(1000).Wait();\r\n\r\n        Console.WriteLine(\"Worker task exiting.\");\r\n    }\r\n}\r\n\r\n```csharp\r\n\r\n该示例中，程序创建了一个新的 Task 对象并启动了它。Task 执行的方法是 WorkerTask，该方法在控制台输出一些文本，然后模拟了一些工作（通过调用 Task.Delay 方法使线程休眠 1 秒），最后退出 Task。\r\n\r\n## 线程同步和互斥\r\n\r\n多线程程序中常常需要对共享的资源进行访问控制，以避免多个线程同时访问一个资源而导致的数据不一致等问题。C# 中提供了多种方式来实现线程同步和互斥，其中最常见的方式是使用 lock 关键字。\r\n\r\n使用 lock 关键字可以将一段代码标记为临界区，当多个线程尝试访问该临界区时，只有一个线程能够进入临界区，其他线程需要等待当前线程执行完毕后才能进入临界区。这样就可以保证临界区内的代码在同一时刻只能被一个线程执行，从而避免了多个线程同时访问共享资源的问题。\r\n\r\n以下是一个示例代码，该代码演示了如何使用 lock 关键字实现线程同步和互斥：\r\n\r\n```csharp\r\nusing System;\r\nusing System.Threading;\r\n\r\nclass Program\r\n{\r\n    static int counter = 0;\r\n    static object counterLock = new object();\r\n\r\n    static void Main()\r\n    {\r\n        // 创建 10 个线程并启动它们\r\n        for (int i = 0; i < 10; i++)\r\n        {\r\n            Thread newThread = new Thread(WorkerThread);\r\n            newThread.Start();\r\n        }\r\n\r\n        // 等待所有线程执行完毕\r\n        Thread.Sleep(5000);\r\n\r\n        Console.WriteLine(\"Counter value: \" + counter);\r\n        Console.WriteLine(\"Main thread exiting.\");\r\n    }\r\n\r\n    static void WorkerThread()\r\n    {\r\n        // 在临界区内使用 lock 关键字\r\n        lock (counterLock)\r\n        {\r\n            // 递增计数器的值\r\n            counter++;\r\n        }\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n该示例中，程序创建了 10 个线程并启动了它们，每个线程都会对计数器进行递增操作。为了避免多个线程同时访问计数器而导致的数据不一致问题，程序使用 lock 关键字将递增操作标记为临界区。\r\n## 线程池\r\n\r\n在使用多线程时，频繁地创建和销毁线程会对系统性能产生不良影响。C# 中提供了线程池来解决这个问题。线程池是一个预先创建好的一组线程，程序可以将任务提交给线程池，线程池会自动分配空闲线程来执行任务。当任务执行完毕后，线程不会被销毁，而是返回到线程池中等待下一个任务的到来。\r\n\r\n以下是一个示例代码，该代码演示了如何使用线程池执行任务：\r\n\r\n```csharp\r\n\r\nusing System;\r\nusing System.Threading;\r\n\r\nclass Program\r\n{\r\n    static void Main()\r\n    {\r\n        // 将任务提交给线程池\r\n        ThreadPool.QueueUserWorkItem(WorkerTask, \"Hello, World!\");\r\n\r\n        Console.WriteLine(\"Main thread exiting.\");\r\n    }\r\n\r\n    static void WorkerTask(object state)\r\n    {\r\n        Console.WriteLine(\"Worker task started.\");\r\n\r\n        // 输出任务的参数\r\n        Console.WriteLine(state);\r\n\r\n        // 模拟一些工作\r\n        Thread.Sleep(1000);\r\n\r\n        Console.WriteLine(\"Worker task exiting.\");\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n该示例中，程序将一个任务提交给线程池，并在任务中输出一些文本，然后模拟了一些工作。注意，在使用线程池时，需要使用 ThreadPool.QueueUserWorkItem 方法来将任务提交给线程池。\r\n## 总结\r\n\r\n本文介绍了 C# 中多线程的基本概念和使用方法，包括如何创建线程、如何实现线程同步和互斥、以及如何使用线程池执行任务。在使用多线程时，需要注意线程安全和性能问题，合理地使用线程同步和互斥机制和线程池，可以提高程序的性能和响应能力。\r\n','C# 多线程','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,39),('d9a7efe9-9ffa-8c87-25af-3a0fe7845287',1,'\r\n## 简介\r\n\r\n要开始使用 C# 进行开发，需要先搭建好开发环境。本文将介绍如何在 Windows 系统下安装并配置 C# 开发环境。\r\n\r\n## 安装 .NET SDK\r\n\r\n首先需要安装 .NET SDK，它是一个开发工具包，包括了用于开发 C# 应用程序所需的运行时、库和工具。 \r\n\r\n1. 前往 [.NET 官网](https://dotnet.microsoft.com/download/dotnet)  下载最新的 .NET SDK 安装程序。 \r\n2. 双击安装程序，按照提示进行安装。在安装过程中需要注意选择安装路径和安装的版本，可以选择安装多个版本的 .NET SDK。 \r\n3. 安装完成后，打开命令提示符或 PowerShell 窗口，输入以下命令来验证是否安装成功：\r\n\r\n```bash\r\ndotnet --version\r\n```\r\n\r\n如果能够输出正确的版本号，则说明安装成功。\r\n## 安装开发环境\r\n\r\nC# 开发可以使用多种开发环境，包括 Visual Studio、Visual Studio Code、Rider 等等。其中，Visual Studio 是最为常用的 C# 开发环境之一。\r\n### 安装 Visual Studio \r\n1. 前往 [Visual Studio 官网](https://visualstudio.microsoft.com/vs/)  下载 Visual Studio 安装程序。 \r\n2. 双击安装程序，按照提示进行安装。在安装过程中需要注意选择安装的组件，可以根据自己的需要进行选择。\r\n### 安装 Visual Studio Code \r\n1. 前往 [Visual Studio Code 官网](https://code.visualstudio.com/)  下载 Visual Studio Code 安装程序。 \r\n2. 双击安装程序，按照提示进行安装。在安装过程中需要注意选择安装的组件，可以根据自己的需要进行选择。\r\n## 配置开发环境\r\n\r\n无论使用哪种开发环境，都需要配置 C# 扩展和编译器。\r\n### 配置 Visual Studio \r\n1. 打开 Visual Studio，点击 \"文件\" -> \"新建\" -> \"项目\"。 \r\n2. 在弹出的对话框中，选择 \"C#\" -> \"控制台应用程序\"，然后选择项目名称和存储位置，最后点击 \"创建\"。 \r\n3. 在项目中添加新的 C# 文件，然后在其中编写代码。 \r\n4. 点击 \"生成\" -> \"生成解决方案\"，将代码编译成可执行文件。\r\n### 配置 Visual Studio Code \r\n1. 打开 Visual Studio Code，安装 \"C#\" 扩展。 \r\n2. 打开项目文件夹，然后在其中添加新的 C# 文件，然后在其中编写代码。 \r\n3. 打开终端窗口，输入以下命令来编译代码：\r\n\r\n```bash\r\ndotnet build\r\n```\r\n\r\n\r\n\r\n如果编译成功，则会在项目文件夹中生成可执行文件。\r\n## 示例代码\r\n\r\n下面是一个\r\n\r\n- 使用 Visual Studio Code 编写的 \"Hello, World!\" 程序的示例代码：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        Console.WriteLine(\"Hello, World!\");\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在 Visual Studio Code 中保存文件后，可以在终端窗口中输入以下命令来运行程序：\r\n\r\n```bash\r\n\r\ndotnet run\r\n```\r\n\r\n\r\n\r\n程序会在终端窗口中输出 \"Hello, World!\" 字符串。\r\n\r\n至此，你已经成功搭建了 C# 的开发环境，并编写了第一个 C# 程序。','C# 环境','67bbbd51-8f39-6bc3-46fe-3a0fa9fe8385','00000000-0000-0000-0000-000000000000','2024-01-05 00:38:49','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','2024-01-05 00:39:19',0),('dcc1ad36-6dd1-16d5-192f-3a0fe9b5b449',0,'当你在C#中定义一个类时，可以通过运算符重载来定义该类的对象与其他对象进行运算的行为。运算符重载允许您定义操作符（例如+、-、*、/等）的行为，使您的自定义类更加灵活和易于使用。\r\n## 运算符重载的语法\r\n\r\n运算符重载的语法如下：\r\n\r\n```arduino\r\n\r\npublic static 返回类型 operator 运算符(参数列表) {\r\n    // 运算符重载的代码逻辑\r\n}\r\n```\r\n\r\n\r\n\r\n其中，`public static`表示运算符重载方法是公共静态的；`返回类型`表示运算符重载方法的返回值类型；`operator`关键字用于告诉编译器这是一个运算符重载方法；`运算符`表示要重载的运算符（例如+、-、*、/等）；`参数列表`表示要重载的运算符的参数。\r\n## 运算符重载的限制\r\n\r\n在C#中，运算符重载有以下限制：\r\n- 只能重载现有的运算符。\r\n- 不能创建新的运算符。 \r\n- 不能重载某些运算符，如`.`、`::`、`?:`等。\r\n## 运算符重载的示例\r\n\r\n下面是一个示例，演示了如何在C#中使用运算符重载。\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nnamespace OperatorOverloadingExample {\r\n    class Vector {\r\n        public double X { get; set; }\r\n        public double Y { get; set; }\r\n\r\n        public Vector(double x, double y) {\r\n            X = x;\r\n            Y = y;\r\n        }\r\n\r\n        public static Vector operator +(Vector a, Vector b) {\r\n            return new Vector(a.X + b.X, a.Y + b.Y);\r\n        }\r\n\r\n        public static Vector operator -(Vector a, Vector b) {\r\n            return new Vector(a.X - b.X, a.Y - b.Y);\r\n        }\r\n\r\n        public static Vector operator *(Vector a, double b) {\r\n            return new Vector(a.X * b, a.Y * b);\r\n        }\r\n\r\n        public static Vector operator /(Vector a, double b) {\r\n            return new Vector(a.X / b, a.Y / b);\r\n        }\r\n\r\n        public override string ToString() {\r\n            return string.Format(\"({0}, {1})\", X, Y);\r\n        }\r\n    }\r\n\r\n    class Program {\r\n        static void Main(string[] args) {\r\n            Vector a = new Vector(1, 2);\r\n            Vector b = new Vector(3, 4);\r\n\r\n            Vector c = a + b;\r\n            Console.WriteLine(\"a + b = \" + c);\r\n\r\n            Vector d = a - b;\r\n            Console.WriteLine(\"a - b = \" + d);\r\n\r\n            Vector e = a * 2;\r\n            Console.WriteLine(\"a * 2 = \" + e);\r\n\r\n            Vector f = a / 2;\r\n            Console.WriteLine(\"a / 2 = \" + f);\r\n\r\n            Console.ReadKey();\r\n        }\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的示例中，定义了一个名为`Vector`的类，表示一个二维向量。使用运算符重载定义了`+`、`-`、`*`和`/`运算符的行为，以便Vector对象可以与其他Vector对象和double值进行运算。在`Main`方法中，创建了两个Vector对象并演示了如何使用运算符重载方法进行加、减、乘和除运算。最后，使用`Console.WriteLine`方法将结果输出到控制台。\r\n## 总结\r\n\r\n通过运算符重载，您可以为您的自定义类定义更多的运算符行为，使它们更灵活和易于使用。在定义运算符重载方法时，要遵循一些语法规则和限制，并确保方法的实现与您所期望的行为一致。\r\n','C# 运算符重载','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,22),('dda02e73-082f-3fbb-1885-3a0ff53f8680',0,'- [Nethermind](https://github.com/NethermindEth/nethermind)  - 基于 .NET Core 的完整 Ethereum 客户端。\r\n* [BTCPayServer](https://github.com/btcpayserver/btcpayserver) - BTCPay Server是一个免费的开源加密货币支付处理器，它使您可以直接以比特币和山寨币接收支付，而无需任何费用，交易成本或中间商。\r\n* [Meadow](https://github.com/MeadowSuite/Meadow) - 一个集成的以太坊实施和工具套件，专注于Solidity测试和开发。\r\n* [NBitcoin](https://github.com/MetacoSA/NBitcoin) - 用于.NET框架的综合比特币库。\r\n* [NBlockchain](https://github.com/danielgerlag/NBlockchain) - 用于构建支持区块链的应用程序的.NET标准库\r\n* [NBXplorer](https://github.com/dgarage/NBXplorer) - 比特币和NBitcoin资源管理器客户端。\r\n* [NEO](https://github.com/neo-project/neo) - 为智能经济打造的开放网络，Neo利用区块链技术。\r\n* [Nethereum](https://github.com/Nethereum) - 将以太坊的热爱带到.NET。\r\n* [StratisBitcoinFullNode](https://github.com/stratisproject/StratisBitcoinFullNode) - 简单且经济实惠的端到端解决方案，用于在.Net框架上开发，测试和部署本机C#区块链应用程序。\r\n* [Trezor.Net](https://github.com/MelbourneDeveloper/Trezor.Net) - Trezor加密货币硬件钱包的跨平台C＃库。\r\n* [WalletWasabi](https://github.com/zkSNACKs/WalletWasabi) - 注重隐私的比特币钱包。内置Tor，CoinJoin和硬币控制功能。','区块链','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,13),('de3b6718-50ac-ea86-8f9d-3a0ff53f8684',0,'* [dotliquid](https://github.com/dotliquid/dotliquid) - TobiasLütke的Liquid模板语言的.NET端口。\r\n* [fluid](https://github.com/sebastienros/fluid) - 开源.NET模板引擎，尽可能接近Liquid模板语言。\r\n* [Portable.Xaml](https://github.com/cwensley/Portable.Xaml) - 用于读/写xaml文件的可移植.NET库。\r\n* [Razor](https://github.com/aspnet/Razor) - 用于MVC Web应用程序视图页面的CSHTML文件的分析器和代码生成器。\r\n* [RazorLight](https://github.com/toddams/RazorLight) - 基于Microsoft针对.NET Core的Razor解析引擎的模板引擎。\r\n* [Scriban](https://github.com/lunet-io/scriban) - A fast, powerful, safe and lightweight text templating language and engine for .NET.\r\n* [RazorEngine](https://github.com/Antaris/RazorEngine) - 基于Microsoft的Razor解析引擎的开源模板引擎。\r\n* [RazorLight](https://github.com/toddams/RazorLight) - 基于Microsoft的Razor解析引擎的开源模板引擎，支持.NET Standard 2.0。\r\n* [Nustache](https://github.com/jdiamond/Nustache) - 用于逻辑无关模板的开源库。\r\n* [Stubble](https://github.com/stubbleorg/stubble) -  .NET中的精简{{mustache}}模板。Nustache的继任者。\r\n* [DotLiquid](https://github.com/dotliquid/dotliquid) - Ruby Liquid模板语言的C#端口。\r\n* [Mustache Sharp](https://github.com/jehugaleahsa/mustache-sharp) - 用于.NET的mustache文本模板引擎的扩展。\r\n* [Scriban](https://github.com/lunet-io/scriban) - 用于.NET的快速、强大、安全和轻量级文本模板语言和引擎。\r\n* [Morestachio](https://github.com/JPVenson/morestachio) - 带有可扩展性重点的完整尺寸{{mustache}}类似的模板引擎。\r\n* [Fluid](https://github.com/sebastienros/fluid) - Fluid是一个基于Liquid模板语言的开源.NET模板引擎。\r\n* [SmartFormat](https://github.com/axuno/SmartFormat) - 用C#编写的轻量级文本模板库，可以替代string.Format。\r\n* [Handlebars.Net](https://github.com/Handlebars-Net/Handlebars.Net) - 一个真正的.NET Handlebars引擎。','模板引擎','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,97),('e0e7e180-f160-fecd-bf03-3a0f8387438c',0,'好了，相信当你非常容易的启动了项目之后，并看到了页面效果，也感受到它的简易\n\n废话少说，直接上图：\n![code.png](/prod-api/file/742c6390-5292-d317-c1aa-3a0f83a74ebb/true)\n\n***感觉和传统的不太一样，怎么这么多类库，感觉很难上手***\n\nNONONONONO!\n\n恰恰相反，其实对于使用用户来说我们只关注src中的Yi.Abp即可，如下图：\n项目模板结构：\n\n> 懂Abp.vNext的大佬看到目录就会有一股熟悉的味道\n\nYi框架并没有直接采用Abp.vNext的模板生成，而是从零进行搭建起来的，但其中的分层结构与Abp.vNext是一致的，只是EntityFramework更换成了SqlSugar\n\n总体来看分为以下3个部分：\n- Framework （Yi.Framework框架部分,基础设施）\n- Module（Yi.Framework提供的内置模块部分，例如Rbac、Bbs）\n- Src （真正业务进行开发的部分）\n\n很好，换句话来说，只需要关注Src部分，其他的都以`源代码`的方式，并没有进行打成nuget包，1是为了方便二开，2是为了方便大家学习，3是本来也不复杂\n\n现在，我们来好好见识下为何如此分层吧~\n\n说到分层，不得不提这个经典神图\n\n![fenceng.png](/prod-api/file/a3a0e690-5231-769b-d2d7-3a0f83a7777a/true)\n\n这张图就对应着我们的结构\n\n![jiegou.png](/prod-api/file/b6c524db-a073-e629-27cf-3a0f83a7acb9/true)\n\n这个可能没接触过DDD的不能理解，为什么要这样分层，三层架构不好吗?这样感觉好难，不能理解！且慢，待你看完下面每层的概述，你就不会认为简单，这不比三层架构简单？\n\n首先，Yi框架的分层非常明确，命名属于严格类型，对于初学者，一眼看破\n\n简单分为6个类库\n1. 应用层\n2. 应用抽象层\n3. 领域层\n4. 共享层\n5. 基础设施Sqlsugar层\n6. Web层\n\n我们从下至上讲解：\n## Doman.Shared 共享层\n最底层是Doman.Shared，共享层，这里存放各个常量、枚举、不依赖各个模块的通用类：\n\n![domanShared.png](/prod-api/file/edb443ea-6b13-fdac-8bb3-3a0f83a7db87/true)\n\n> Doman.Shared，共享层 是一层很简单、不包含业务的模块，让它尽可能简单，有没有感觉像三层架构的Common？\n\n## Domain 领域层\n只依赖Doman.Shared的`Domain领域层`\n\n![domain.png](/prod-api/file/17fd1f68-929f-b3f4-3f6c-3a0f83a7fcd1/true)\n\n你可以选择存放大部分业务到领域层中，我们称这种模式叫做：`重领域层模式`\n你也可以选择存放大部分业务到它的上一层，Application 应用层，叫做：`重应用层模式`\n\n在领域层中，你的实体，以及跟实体相关的设施可在这里\n同时你也可以创建领域服务(Managers文件夹中)，管理当前子领域的聚合，例如：\n\n> 在学校模块中，包含了学生、教师、教室，为了更加聚合，可在学校模块中创建领域服务\n\n## Application 应用层\n接下来，是应用层\n\n![application.png](/prod-api/file/5b939832-c3f9-d06a-4916-3a0f83a860c4/true)\n熟悉的Crud、熟悉的Service，这里可以存放简单的通用业务，例如：Crud\n如果是重应用层开发，你完全可以将业务写入到应用层，当一个快乐的三层架构Crud，Boy\n\n另外，关于上次的Job任务调度、事件处理也可以放在这里进行处理\n\n> 简单而优雅~何乐而不为?\n\n## Application.Contracrs 抽象层\nApplication.Contracrs应用抽象模块，是对应用模块的抽象，它的结构也非常的简单\n\n![contracrs.png](/prod-api/file/970fa612-2768-3a84-b20a-3a0f83a878e5/true)\n\n这里有Dtos的概念，不出意外，大部分人已经接触，具体的可以在后续Crud中进行讲解\n\n## SqlSugarCore 数据访问层\n![sqlsugar.png](/prod-api/file/f18f9374-9e04-db90-2457-3a0f83a89264/true)\n\n这一层中，依赖领域层，但是不依赖应用层\n用于使用Sqlsugar相关的操作，比如`自定义仓储`\n但是，其实大部分通用场景，框架内部已经封装，能用到这层的机会都比较少\n对复杂的数据访问封装\n\n> 由于Querable对象用起来并没有到达SugarQuerable的爽感，且也不想让每个复杂查询都通过仓储进行扩展，这会导致用户使用感较差，所以经过各类平衡考虑，YiFramework框架与Sqlsugar是有轻量的`耦合性`的，框架提供Sqlsugar抽象层，避免过重的耦合，意味着，你可以在大部分地方使用Sqlsugar的操作，这在真正的业务项目来说，使用非常的方便，与Sqlsugar保持有一致的观念\n\n## Web 层\n最后一个同样非常简单的一层\nWeb模块，它的目的只是利用Asp.NetCore host Web主机，将应用层的业务通过Webapi形式暴露出去而已\n![webPro.png](/prod-api/file/37b39b84-d5a6-9bc6-35a2-3a0f83a8b34f/true)\n\n可以看的出，结构很简单，甚至除了启动配置目录，连其他一个额外的目录都没有\n\n> 综上所述，我们的业务，我的开发代码，大部分都在`领域层`与`应用层`\n\n光说不练，源代码直接提供rbac、bbs两大模块，结构是一致的，直接看看依葫芦画瓢不就清楚啦~','目录结构','aaa00329-7f35-d3fe-d258-3a0f8380b742','00000000-0000-0000-0000-000000000000','2023-12-16 14:40:00','59cf7e31-e3e4-544e-1038-3a0f836cc538','59cf7e31-e3e4-544e-1038-3a0f836cc538','2023-12-16 15:16:35',0),('e137e76d-43f9-954c-141c-3a0ff53f8684',0,'* [Downloader](https://github.com/bezzad/Downloader) - 针对.NET应用程序的快速可靠的多部分下载器，具有异步进度事件。\r\n* [Fiddler](https://www.telerik.com/fiddler) -  适用于任何浏览器、系统或平台的免费Web调试代理。\r\n* [Open Live Writer](https://github.com/OpenLiveWriter/OpenLiveWriter) - 集成了WordPress、Blogger等的博客写作工具。Open Live Writer让你轻松地写、预览和发布到博客。\r\n* [CodeHub](https://github.com/CodeHubApp/CodeHub) - CodeHub是浏览和管理GitHub存储库的最佳方式，适用于任何iOS设备！\r\n* [ShareX](https://github.com/ShareX/ShareX) -  ShareX是一个免费的开源程序，允许你捕获或记录屏幕的任何区域，并通过按键来分享它。它还允许上传图像、文本或其他类型的文件到80多个支持的目的地。\r\n* [Myrtille](https://github.com/cedrozor/myrtille) - 一个本地HTML4/5远程桌面协议客户端，用于.NET的C#编写的HTTP网关。\r\n* [Opserver](https://github.com/Opserver/Opserver) -  Stack Exchange的监控系统。\r\n* [CatLight](https://catlight.io) - 适用于TFS/Jenkins/Travis/Appveyor的构建状态通知。基于.NET Core和Electron的跨平台桌面应用程序。\r\n* [Mockaco](https://github.com/natenho/Mockaco/) -  具有快速设置功能的API模拟服务器，用于模拟HTTP响应，利用了ASP.NET Core功能，内置了伪造数据生成和由Roslyn脚本引擎提供支持的C#脚本引擎。\r\n* [Netling](https://github.com/hallatore/Netling) - 用于轻松Web测试的负载测试客户端。它在使用很少的CPU或内存的情况下非常快速。\r\n* [Papercut](https://github.com/ChangemakerStudios/Papercut-SMTP) - Papercut是一个开源（基于.NET的）测试电子邮件查看器，可以在本地运行，具有内置的SMTP服务器，用于接收和通知测试电子邮件消息。\r\n* [Visual Studio Uninstaller](https://github.com/Microsoft/VisualStudioUninstaller) - 卸载和清理Visual Studio的所有组件。\r\n* [Fake JSON Server](https://github.com/ttu/dotnet-fake-json-server) - 用于原型设计或作为CRUD后端的伪REST API。无需定义类型，使用动态类型。数据存储到单个JSON文件中。具有身份验证、WebSocket通知、异步长时间运行操作、错误/延迟的随机生成和实验性GraphQL支持。\r\n* [posh-dotnet](https://github.com/bergmeister/posh-dotnet) - `PowerShell` 的tab补全工具，适用于 [dotnet CLI](https://github.com/dotnet/cli)\r\n* [SmartCode](https://github.com/dotnetcore/SmartCode) - SmartCode = IDataSource -> IBuildTask -> IOutput => 构建所有！！！（包括[代码生成器]）\r\n* [NETworkManager](https://github.com/BornToBeRoot/NETworkManager) - 用于管理网络和解决网络问题的强大工具！\r\n* [AnyStatus](https://www.anystat.us) - 用于监控CI/CD管道、服务器、网络、健康和指标的桌面通知应用程序。AnyStatus支持Azure DevOps、Jenkins、TeamCity、AppVeyor等。\r\n* [OctoLinker](https://github.com/OctoLinker/OctoLinker) - 使用OctoLinker浏览器扩展，可以高效地导航 `project.json`, `packages.config`, `*.props`, `*.targets`和C#/F#/VB.NET项目文件。\r\n* [YARP](https://github.com/microsoft/reverse-proxy) - YARP是一个用于在.NET中构建快速代理服务器的反向代理工具包，使用了ASP.NET和.NET的基础设施。\r\n* [JSON Formatter and Validator](https://elmah.io/tools/json-formatter/) - 一个极快的JSON格式化和验证工具，不会与服务器共享JSON。\r\n* [CSharpier](https://github.com/belav/csharpier) - 一种基于Prettier[Prettier](https://github.com/prettier/prettier) 打印过程的C#代码格式化工具。 \r\n* [UnitsNet](https://github.com/angularsen/UnitsNet) - 使与测量单位工作变得更加轻松。\r\n* [Another Redis Desktop Manager](https://github.com/qishibo/AnotherRedisDesktopManager) - 更快、更好、更稳定的Redis桌面管理器[GUI客户端]，兼容Linux、Windows、Mac。而且，在加载大量键时不会崩溃。','工具','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,99),('e1c3ef9d-a30d-ec03-d14c-3a0ff53f8684',0,'* [Topshelf](https://github.com/Topshelf/Topshelf) - Windows服务框架。','Windows服务','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,107),('e2b762c9-fd1a-103d-fb4b-3a0fe9b5b446',0,'\r\n## 简介\r\n\r\n要开始使用 C# 进行开发，需要先搭建好开发环境。本文将介绍如何在 Windows 系统下安装并配置 C# 开发环境。\r\n\r\n## 安装 .NET SDK\r\n\r\n首先需要安装 .NET SDK，它是一个开发工具包，包括了用于开发 C# 应用程序所需的运行时、库和工具。 \r\n\r\n1. 前往 [.NET 官网](https://dotnet.microsoft.com/download/dotnet)  下载最新的 .NET SDK 安装程序。 \r\n2. 双击安装程序，按照提示进行安装。在安装过程中需要注意选择安装路径和安装的版本，可以选择安装多个版本的 .NET SDK。 \r\n3. 安装完成后，打开命令提示符或 PowerShell 窗口，输入以下命令来验证是否安装成功：\r\n\r\n```bash\r\ndotnet --version\r\n```\r\n\r\n如果能够输出正确的版本号，则说明安装成功。\r\n## 安装开发环境\r\n\r\nC# 开发可以使用多种开发环境，包括 Visual Studio、Visual Studio Code、Rider 等等。其中，Visual Studio 是最为常用的 C# 开发环境之一。\r\n### 安装 Visual Studio \r\n1. 前往 [Visual Studio 官网](https://visualstudio.microsoft.com/vs/)  下载 Visual Studio 安装程序。 \r\n2. 双击安装程序，按照提示进行安装。在安装过程中需要注意选择安装的组件，可以根据自己的需要进行选择。\r\n### 安装 Visual Studio Code \r\n1. 前往 [Visual Studio Code 官网](https://code.visualstudio.com/)  下载 Visual Studio Code 安装程序。 \r\n2. 双击安装程序，按照提示进行安装。在安装过程中需要注意选择安装的组件，可以根据自己的需要进行选择。\r\n## 配置开发环境\r\n\r\n无论使用哪种开发环境，都需要配置 C# 扩展和编译器。\r\n### 配置 Visual Studio \r\n1. 打开 Visual Studio，点击 \"文件\" -> \"新建\" -> \"项目\"。 \r\n2. 在弹出的对话框中，选择 \"C#\" -> \"控制台应用程序\"，然后选择项目名称和存储位置，最后点击 \"创建\"。 \r\n3. 在项目中添加新的 C# 文件，然后在其中编写代码。 \r\n4. 点击 \"生成\" -> \"生成解决方案\"，将代码编译成可执行文件。\r\n### 配置 Visual Studio Code \r\n1. 打开 Visual Studio Code，安装 \"C#\" 扩展。 \r\n2. 打开项目文件夹，然后在其中添加新的 C# 文件，然后在其中编写代码。 \r\n3. 打开终端窗口，输入以下命令来编译代码：\r\n\r\n```bash\r\ndotnet build\r\n```\r\n\r\n\r\n\r\n如果编译成功，则会在项目文件夹中生成可执行文件。\r\n## 示例代码\r\n\r\n下面是一个\r\n\r\n- 使用 Visual Studio Code 编写的 \"Hello, World!\" 程序的示例代码：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        Console.WriteLine(\"Hello, World!\");\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在 Visual Studio Code 中保存文件后，可以在终端窗口中输入以下命令来运行程序：\r\n\r\n```bash\r\n\r\ndotnet run\r\n```\r\n\r\n\r\n\r\n程序会在终端窗口中输出 \"Hello, World!\" 字符串。\r\n\r\n至此，你已经成功搭建了 C# 的开发环境，并编写了第一个 C# 程序。','C# 环境','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,2),('e3bce579-c7ca-5070-257f-3a0ff53f8680',0,'* MySQL\r\n  - [MySQL Connector](https://dev.mysql.com/downloads/connector/net/)  - Connector/Net是用于MySQL的完全托管的ADO.NET驱动程序。 \r\n  - [mysql-connector-net](https://github.com/mysql/mysql-connector-net/tree/8.0) - ADO.NET驱动和MySQL的链接库。\r\n  - [MySqlConnector](https://github.com/mysql-net/MySqlConnector) - 异步MySQL连接库。\r\n- [Npgsql](https://github.com/npgsql/Npgsql)  - 用于PostgreSQL的.NET数据提供程序。 \r\n- [RethinkDb.Driver](https://github.com/bchavez/RethinkDb.Driver/)  - 用C#编写的RethinkDB数据库驱动程序，力求实现100%的ReQL API兼容性和完整性。 \r\n- [ServiceStack Redis](https://github.com/ServiceStack/ServiceStack.Redis)  - .NET领先的C# Redis客户端。 \r\n- [StackExchange Redis](https://github.com/StackExchange/StackExchange.Redis)  - 来自StackExchange的通用Redis客户端。 \r\n- [Cassandra](https://github.com/datastax/csharp-driver)  - DataStax用于Apache Cassandra的.NET驱动程序。 \r\n- [Couchbase](https://github.com/couchbase/couchbase-net-client)  - 官方的Couchbase .NET客户端库，基于Enyim memcached客户端。 \r\n- [Firebird.NET](https://sourceforge.net/projects/firebird/)  - 用C#编写的.NET数据提供程序，提供高性能的Firebird API本地实现。 \r\n- [FluentStorage](https://github.com/robinrodricks/FluentStorage)  - 一种多云的.NET云存储抽象层，最初称为Storage.Net。提供了Blob存储（AWS S3、GCP、FTP、SFTP、Azure Blob/File/Event Hub/Data Lake）和消息传递（AWS SQS、Azure Queue/ServiceBus）的通用接口。 \r\n- [Stowage](https://github.com/aloneguid/stowage)  - 无冗余依赖的.NET云存储工具包，支持至少主要的云提供商。\r\n* [cassandra-csharp-driver](https://github.com/datastax/csharp-driver) - 用于Apache Cassandra的DataStax C#驱动程序。\r\n* [confluent-kafka-dotnet](https://github.com/confluentinc/confluent-kafka-dotnet) -  Confluent的Apache Kafka .NET客户端。\r\n* [couchbase-lite-net](https://github.com/couchbase/couchbase-lite-net) - 一个轻量级，面向文档(NoSQL)，可同步的.NET数据库引擎。\r\n- MongoDB\r\n  - [MongoDB](https://github.com/mongodb/mongo-csharp-driver)  - 官方的MongoDB C#驱动程序。 \r\n  * [MongoDB.Driver](https://github.com/mongodb/mongo-csharp-driver) -  MongoDB的.NET驱动程序。\r\n  * [MongoDB.Entities](https://github.com/dj-nitehawk/MongoDB.Entities) - MongoDB的数据访问库，具有精美的API，LINQ支持和内置实体关系管理\r\n* Neo4j\r\n  * [neo4j-dotnet-driver](https://github.com/neo4j/neo4j-dotnet-driver) - Neo4j .NET驱动程序。\r\n  * [Neo4jClient](https://github.com/Readify/Neo4jClient) - Neo4j客户端。\r\n* [ravendb](https://github.com/ayende/ravendb/tree/v4.0) - 支持Linq的.NET文档数据库。\r\n* [progaudi.tarantool](https://github.com/progaudi/progaudi.tarantool) -  Tarantool NoSql数据库的.NET客户端。','数据库驱动','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,30),('e56b90ec-8514-5673-dc92-3a0ff5868e05',0,'**C#Winform--翻翻乐**\n\n**作者心得**\n我记得是某个假期没事与俄罗斯方块一起弄的\n你别说\n还挺好玩的，当是和我爸一起比赛时间，哈哈哈\n\n**源代码**\n\n```csharp\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows.Forms;\nusing System.Threading;\n\nnamespace FFL\n{\n    public partial class Form1 : Form\n    {\n        bool q = true;\n        int o = 0;\n        int l = 0;\n        int f;\n        int h;\n        string n;\n        string m;\n        int r = 1;\n        string[] c = new string[100];\n        Button[] b = new Button[100];\n        int x = 0, y = 0; int p = 1;\n        public Form1()\n        {\n            InitializeComponent();\n        }\n\n        private void Form1_Load(object sender, EventArgs e)\n        {\n            \n\n            for (int i = 0; i < 100; i++)\n            {\n                Button button = new Button();\n                button.Location = new Point(0, 0);\n                button.Size = new Size(40, 40);\n                button.Click += new EventHandler(button1_Click);\n                if (i % 10 == 0 && i != 0)\n                {\n                    x = 0;\n                    y += 40;\n                }\n                else if (i % 10 != 0 && i != 0)\n                {\n\n                    x += 40;\n                }\n                button.Location = new Point(x, y);\n                b[i] = button;\n                Controls.Add(b[i]);\n\n            }\n            end(false);\n            Random o = new Random();\n\n            for (int i = 0; i < 100; i++)\n            {\n                if (i == 50)\n                    p = 1;\n                int g = o.Next(0, 99);\n                CheakNull(g);\n\n            }\n            for (int i = 0; i < 100; i++)\n            {\n                c[i] = b[i].Text;\n                b[i].Text = \"\";\n            }\n            test();\n        }\n\n        public void CheakNull(int g)\n        {\n            if (b[g].Text == \"\")\n            {\n                b[g].Text = Convert.ToString(p);\n                p++;\n            }\n            else if (g != 99)\n            {\n                g += 1;\n                CheakNull(g);\n            }\n            else\n            {\n                g = 0;\n                CheakNull(g);\n            }\n        }\n\n        private void timer1_Tick(object sender, EventArgs e)\n        {\n            if (r == 3)\n            {\n                if (n == m)\n                {\n                    b[f].BackColor = Color.Red;\n                    b[h].BackColor = Color.Red;\n                    b[f].Enabled = false;\n                    b[h].Enabled = false;\n                    l += 2;\n                    label2.Text = Convert.ToString(l);\n                }\n                for (int i = 0; i < 100; i++)\n                {\n                    if (b[h].BackColor != Color.Red && b[f].BackColor != Color.Red)\n                    {\n                        b[i].Text = \"\";\n                        b[f].Enabled = true;\n                        b[f].BackColor = Color.Black;\n                        b[h].Enabled = true;\n                        b[h].BackColor = Color.Black;\n                    }\n                }\n                r = 1;\n            }\n        }\n\n        private void timer2_Tick(object sender, EventArgs e)\n        {\n            o++;\n            label4.Text = Convert.ToString(o);\n        }\n\n        private void button1_Click_1(object sender, EventArgs e)\n        {\n            timer2.Enabled = true;\n            end(true);\n        }\n\n        public void button1_Click(object sender, EventArgs e)\n        {\n            if (r == 1)\n            {\n                int a; int d;\n                Button button = (Button)sender;\n                Point g = new Point();\n                g = button.Location;\n                a = g.X;\n                d = g.Y;\n                int u = (a / 40) + (d / 40) * 10;\n                button.Text = c[u];\n                n = c[u];\n                f = u;\n                button.Enabled = false;\n                button.BackColor = Color.Yellow;\n                timer1.Enabled = true;\n                cheak_all();\n            }\n            if (r == 2)\n            {\n                int a; int d;\n                Button button = (Button)sender;\n                Point g = new Point();\n                g = button.Location;\n                a = g.X;\n                d = g.Y;\n                int u = (a / 40) + (d / 40) * 10;\n                button.Text = c[u];\n                m = c[u];\n                h = u;\n                button.Enabled = false;\n                button.BackColor = Color.Yellow;\n                timer1.Enabled = true;\n\n            }\n            if (r == 1 || r == 2)\n                r++;\n\n        }\n\n        public void end(bool c)\n        {\n            for (int i = 0; i < 100; i++)\n            {\n                b[i].Enabled = c;\n            }\n\n        }\n\n        public void cheak_all()\n        {\n            if (label2.Text == \"100\")\n            {\n                end(false);\n                timer2.Enabled = false;\n                button1.Enabled = false;\n                MessageBox.Show(\"恭喜,总共花费时间：\" + Convert.ToString(o));\n            }\n        }\n\n        private void button2_Click(object sender, EventArgs e)\n        {if (q == true)\n            {\n                textBox1.Visible = true;\n                this.Size = new Size(1031, 434);\n                q = false;\n            }\n            else\n            {\n                textBox1.Visible = false;\n                this.Size = new Size(559, 434);\n                q = true;\n            }\n        }\n\n        private void button3_Click(object sender, EventArgs e)\n        {\n            this.Close();\n        }\n\n        public void test()\n        {\n          \n            int i = 0;\n            foreach (string k in c)\n            {\n                if (i % 10 == 0)\n                    textBox1.Text = textBox1.Text + \"\\r\\n\\r\\n\\r\\n\" + k;\n                else\n                textBox1.Text = textBox1.Text + \"\\t\" + k;\n                i++;\n            }\n\n\n        }\n    }\n\n}\n```\n**效果截图**\n![image.png](/prod-api/file/25642343-1565-8009-3c02-3a0ff586723e/true)\n![image.png](/prod-api/file/7014bf0f-bd6b-8714-fe2f-3a0ff5868608/true)\n**作者的话**\n可以看的出\n技术越来越成熟，即将开始走向面相对象时代！','C#Winform–翻翻乐','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 17:55:57','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('e625deba-758f-7c9d-9fbb-3a0fe1c8ec5f',0,'测试自文章啊啊啊啊啊啊啊啊啊','测试自文章啊啊啊啊啊啊啊啊啊','4a14cce8-795a-8c68-8c2a-3a0fe1c7215a','00000000-0000-0000-0000-000000000000','2024-01-03 21:56:02','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,0),('e8ca32a2-e2df-0abf-5840-3a0ff58c17ea',0,'**作者的话**\n没什么说的，一个一点花里胡哨都没有的五子棋而已\n\n**效果截图**\n![image.png](/prod-api/file/9e4fb6cd-3d2c-17b1-2a39-3a0ff58bcdb0/true)\n![image.png](/prod-api/file/ccb06ecc-eb6d-ac18-fbcd-3a0ff58be1ce/true)\n![image.png](/prod-api/file/19abfab5-cac0-7eeb-0353-3a0ff58bf5ec/true)\n![image.png](/prod-api/file/74ca1252-3add-cc78-c5eb-3a0ff58c0b89/true)\n**下载**\n[提取码：6m93](https://pan.baidu.com/s/1_LAO1dAv3KcoRugpippGjQ)','C#Winform--五子棋','ffdae7fe-db2b-b217-8fec-3a0ff57b9493','00000000-0000-0000-0000-000000000000','2024-01-07 18:02:00','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('e93e28bc-5d0a-6bfb-7d6e-3a0ff53f8683',0,'\r\n- [gRPC](https://github.com/grpc/grpc-dotnet)  - 一个用于.NET Core的RPC库和框架。更多信息请参阅[Microsoft文档](https://docs.microsoft.com/en-us/aspnet/core/grpc) 。 \r\n- [CoreRPC](https://github.com/kekekeks/CoreRPC)  - 可扩展的类似于WCF的RPC库，面向netstandard1.3。兼容.NET、Mono和.NET Core。 \r\n- [BloomRPC](https://github.com/bloomrpc/bloomrpc)  - BloomRPC旨在为探索和查询您的GRPC服务提供最简单和高效的开发者体验。 \r\n- [gRPCurl](https://github.com/fullstorydev/grpcurl)  - gRPCurl是一个命令行工具，允许您与gRPC服务器交互。它基本上就是用于gRPC服务器的curl。 \r\n- [gRPC UI](https://github.com/fullstorydev/grpcui)  - gRPC UI是一个命令行工具，允许您通过浏览器与gRPC服务器交互。它有点像Postman，但用于gRPC API而不是REST。\r\n','RPC','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,84),('e9fdf298-b726-7579-639a-3a0ff53f8684',0,'* [Web Essentials](https://github.com/madskristensen/WebEssentials2019) - Web Essentials通过许多新功能扩展了Visual Studio，这些功能是Web开发人员多年来一直缺少的。\r\n* [VsVIM](https://github.com/VsVim/VsVim) - 在Visual Studio中使用VIM。\r\n* [Nuget Package Manager](https://marketplace.visualstudio.com/items?itemName=NuGetTeam.NuGetPackageManager) - NuGet是Microsoft开发平台（包括.NET）的包管理器。\r\n* [SideWaffle](https://github.com/ligershark/side-waffle) -  Visual Studio 2012/2013/2015的项目模板集合，极大地简化了任何Web开发人员的工作。\r\n* [Resharper](https://www.jetbrains.com/resharper/) - 用于Visual Studio的开发人员生产力工具\r\n* [CodeContracts](https://github.com/Microsoft/CodeContracts) - 用于.NET的CodeContracts工具的源代码。\r\n* [Git Diff Margin](https://github.com/laurentkempe/GitDiffMargin) - 在Visual Studio的边距和滚动条上显示当前编辑文件的实时Git更改。\r\n* [Productivity Power Tools](https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.ProductivityPowerTools) -  一组扩展，用于提高Visual Studio Professional（及以上版本）的开发人员生产力。\r\n* [Tabs Studio](https://tabsstudio.com/) - 具有多个选项卡行、选项卡着色和选项卡分组的Visual Studio选项卡管理器\r\n* [VSColorOutput](https://marketplace.visualstudio.com/items?itemName=MikeWard-AnnArbor.VSColorOutput) - 为构建、查找和调试输出窗口进行颜色高亮显示。可以添加自定义匹配模式和颜色。\r\n* [CodeLineage](https://marketplace.visualstudio.com/items?itemName=HippoCampSoftwareLtd.CodeLineage) - 方便地访问文件版本之间的累积差异视图（支持svn、git、mercurial、perforce）。\r\n* [OzCode](https://marketplace.visualstudio.com/items?itemName=CodeValueLtd.OzCode) - OzCode是一个Visual Studio扩展，通过检测和隔离错误，使调试时间减少，提高了生产率，使错误易于修复。\r\n* [ViEmu](http://www.viemu.com/) - 非常强大的Visual Studio中的Vi/vim模拟器，支持vi/vim的所有基本和许多高级功能。\r\n* [Roslynator](https://github.com/JosefPihrt/Roslynator) - 由Roslyn驱动的500多个C#分析器、重构和修复工具的集合。\r\n* [Unchase.Odata.Connectedservice](https://github.com/unchase/Unchase.Odata.Connectedservice) - 用于生成OData Web服务的C#或VB的API客户端代码的Visual Studio Connected Service。\r\n* [Unchase.OpenAPI.Connectedservice](https://github.com/unchase/Unchase.OpenAPI.Connectedservice) - 用于使用[NSwag](https://github.com/RicoSuter/NSwag)为OpenAPI Web服务生成C#（TypeScript）HttpClient（或C# Controllers）代码的Visual Studio 2017/2019扩展。\r\n* [SonarSource.sonarlint-visualstudio](https://github.com/SonarSource/sonarlint-visualstudio) - SonarLint是一款免费的、开源的Visual Studio 2017、2019和2022扩展，可提供有关C#、VB.NET、C/C++、TypeScript和JavaScript中的新Bug和质量问题的实时反馈。','VisualStudio插件','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,102),('eb450d6d-0e70-9105-807c-3a0ff53f8681',0,'\r\n- [Husky.Net](https://github.com/alirezanet/Husky.Net)  - 使用Husky.Net内部任务运行器轻松管理Git挂钩，您可以使用它来检查提交消息、运行测试、检查代码等等，当您提交或推送时。支持C#脚本、gitflow挂钩、多文件状态（已暂存、上次提交、通配符）。 \r\n- [Bonobo Git Server](https://github.com/jakubgarfield/Bonobo-Git-Server)  - Bonobo Git Server for Windows是一个Web应用程序，您可以安装在IIS上，轻松管理和连接到您的Git存储库。[https://bonobogitserver.com/](https://bonobogitserver.com/) \r\n- [GitExtensions](https://github.com/gitextensions/gitextensions)  - GitExtensions是一个Shell扩展、Visual Studio 2008/2010/2012/2013插件和一个独立的Git存储库工具。[https://gitextensions.github.io/](https://gitextensions.github.io/) \r\n- [GitLink](https://github.com/GitTools/GitLink)  - 允许用户浏览托管在GitHub或BitBucket上的代码 \r\n- [GitVersion](https://github.com/GitTools/GitVersion)  - 根据Git存储库的状态生成语义化版本号 \r\n- [LibGit2Sharp](https://github.com/libgit2/libgit2sharp)  - LibGit2Sharp将libgit2的所有功能和速度，即本地Git实现，引入到.NET和Mono的托管世界中。 \r\n- [GitRead.Net](https://github.com/kingsimmy/GitRead.Net)  - GitRead.Net是一个.NET Standard库，允许您非常轻松地查询您在磁盘上拥有的Git存储库。它允许您枚举提交日志、计算每个文件的行数并列出由提交更改的文件。 \r\n- [NGit](https://github.com/mono/ngit)  - NGit是JGit的C#端口 \r\n- [posh-git](https://github.com/dahlbyk/posh-git)  - 用于Git的PowerShell环境 \r\n- [RepoZ](https://github.com/awaescher/RepoZ)  - 一个Git存储库信息聚合器，具有Windows资源管理器和CLI增强功能 \r\n- [Git Credential Manager for Windows](https://github.com/Microsoft/Git-Credential-Manager-for-Windows)  - 帮助解决凭据问题的工具，由Microsoft制作\r\n','Git工具','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,48),('ebac5c97-3851-fc80-3f01-3a0fe9b5b449',0,'\r\n\r\n当你在编写 C# 代码时，你可能需要将一个数据类型转换成另一个数据类型。这个过程叫做类型转换。\r\n\r\nC# 提供了多种类型转换方式，其中包括显式转换、隐式转换、装箱和拆箱等。\r\n## 显式转换\r\n\r\n显式转换是指从一个数据类型转换为另一个数据类型，需要使用强制类型转换操作符。在 C# 中，强制类型转换操作符使用括号将目标类型括起来，放在要转换的表达式之前。例如：\r\n\r\n```arduino\r\n\r\nint myInt = 10;\r\ndouble myDouble = (double)myInt;\r\n```\r\n\r\n\r\n\r\n在这个例子中，我们将一个整数类型 `myInt` 转换为一个双精度浮点数类型 `myDouble`。强制类型转换操作符 `(double)` 将整数类型转换为双精度浮点数类型。\r\n## 隐式转换\r\n\r\n隐式转换是指将一种数据类型自动转换为另一种数据类型，而不需要使用强制类型转换操作符。隐式转换只能在数据类型之间存在一定的“兼容性”时进行。例如：\r\n\r\n```arduino\r\n\r\nint myInt = 10;\r\ndouble myDouble = myInt;\r\n```\r\n\r\n\r\n\r\n在这个例子中，我们将一个整数类型 `myInt` 隐式转换为一个双精度浮点数类型 `myDouble`。C# 中存在一些数据类型之间的隐式转换规则，例如将整数类型转换为双精度浮点数类型。\r\n## 装箱和拆箱\r\n\r\n装箱是将值类型转换为引用类型的过程，拆箱是将引用类型转换为值类型的过程。装箱和拆箱通常发生在值类型和对象类型之间的转换。例如：\r\n\r\n```csharp\r\n\r\nint myInt = 10;\r\nobject myObj = myInt; // 装箱\r\n\r\nint myNewInt = (int)myObj; // 拆箱\r\n```\r\n\r\n\r\n\r\n在这个例子中，我们将一个整数类型 `myInt` 装箱为一个对象类型 `myObj`，然后再将其拆箱为一个整数类型 `myNewInt`。\r\n## 注意事项\r\n\r\n当进行类型转换时，有些情况可能会发生异常。例如，将一个浮点数类型转换为整数类型时可能会导致精度损失或溢出。因此，在进行类型转换时需要注意以下几点：\r\n- 需要确保转换的数据类型是兼容的，否则会导致编译错误或运行时异常。\r\n- 在进行显式转换时需要使用强制类型转换操作符。\r\n- 需要注意数据类型转换可能会导致精度损失或溢出等问题。\r\n- 在进行装箱和拆箱时需要注意性能问题，因为这些操作会导致额外的开销。\r\n\r\n以上是 C# 中类型转换的一些基本知识点\r\n','C# 类型转换','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,6),('ec090a57-68a1-4100-4fe7-3a0ff53f8680',0,'\r\n- [TeamCity](https://www.jetbrains.com/teamcity/)  - 开箱即用、可扩展且开发者友好的构建服务器 **[$]** \r\n- [MyGet](https://www.myget.org/)  - 持续集成和部署，托管的NuGet、NPM、Bower和VSIX包仓库 **[$]** \r\n- [AppVeyor](https://www.appveyor.com/)  - .NET持续集成和部署作为一项服务 **[$]**  **[免费用于开源项目]**\r\n','持续集成','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,27),('ec13afaa-b05f-4b86-9e13-3a0fe9b5b449',0,'\r\n在C#中，判断语句用于根据条件决定程序执行哪些语句。本文将介绍 C# 中的几种常见的判断语句和它们的使用方法。\r\n## if 语句\r\n\r\nif 语句是 C# 中最常见的判断语句。它的基本语法如下：\r\n\r\n```csharp\r\n\r\nif (condition)\r\n{\r\n    // 当条件成立时执行的代码块\r\n}\r\n```\r\n\r\n\r\n\r\n其中，condition 是一个布尔表达式，它的值为 true 或 false。如果 condition 的值为 true，则执行大括号内的代码块。否则，跳过代码块，继续执行后面的语句。\r\n\r\n下面是一个简单的例子：\r\n\r\n```csharp\r\n\r\nint x = 10;\r\nif (x > 5)\r\n{\r\n    Console.WriteLine(\"x 大于 5\");\r\n}\r\n```\r\n\r\n\r\n\r\n在这个例子中，如果 x 的值大于 5，则输出 x 大于 5。否则，什么也不输出。\r\n## if-else 语句\r\n\r\nif-else 语句是在 if 语句的基础上增加了一个 else 代码块。它的基本语法如下：\r\n\r\n```csharp\r\n\r\nif (condition)\r\n{\r\n    // 当条件成立时执行的代码块\r\n}\r\nelse\r\n{\r\n    // 当条件不成立时执行的代码块\r\n}\r\n```\r\n\r\n\r\n\r\n如果 condition 的值为 true，则执行第一个代码块。否则，执行第二个代码块。\r\n\r\n下面是一个简单的例子：\r\n\r\n```csharp\r\n\r\nint x = 3;\r\nif (x > 5)\r\n{\r\n    Console.WriteLine(\"x 大于 5\");\r\n}\r\nelse\r\n{\r\n    Console.WriteLine(\"x 小于等于 5\");\r\n}\r\n```\r\n\r\n\r\n\r\n在这个例子中，如果 x 的值大于 5，则输出 x 大于 5。否则，输出 x 小于等于 5。\r\n## if-else if 语句\r\n\r\nif-else if 语句是在 if-else 语句的基础上增加了多个 else if 代码块。它的基本语法如下：\r\n\r\n```csharp\r\n\r\nif (condition1)\r\n{\r\n    // 当条件 1 成立时执行的代码块\r\n}\r\nelse if (condition2)\r\n{\r\n    // 当条件 2 成立时执行的代码块\r\n}\r\nelse if (condition3)\r\n{\r\n    // 当条件 3 成立时执行的代码块\r\n}\r\n...\r\nelse\r\n{\r\n    // 当所有条件都不成立时执行的代码块\r\n}\r\n```\r\n\r\n\r\n\r\nif-else if 语句的执行过程是按顺序逐个判断条件，如果某个条件成立，则执行相应的代码块。如果所有条件都不成立，则执行最后一个 else 代码块。\r\n\r\n下面是一个简单的例子：\r\n\r\n```csharp\r\n\r\nint x = 3;\r\nif (x > 5)\r\n{\r\n    Console.WriteLine(\"x 大于 5\");\r\n}\r\nelse if (x > 0)\r\n{\r\n    Console.WriteLine(\"x 大于 0，小于等于 5\");\r\n}\r\nelse\r\n{\r\n    Console.WriteLine(\"x 小于等于 0\");\r\n}\r\n```\r\n在这个例子中，如果 x 的值大于 5，则输出 x 大于 5。否则，判断 x 是否大于 0。如果是，则输出 x 大于 0，小于等于 5。否则，输出 x 小于等于 0。\r\n\r\n## switch 语句\r\n\r\nswitch 语句是根据某个表达式的值来选择执行哪个代码块。它的基本语法如下：\r\n\r\n```csharp\r\n\r\nswitch (expression)\r\n{\r\n    case value1:\r\n        // 当 expression 的值等于 value1 时执行的代码块\r\n        break;\r\n    case value2:\r\n        // 当 expression 的值等于 value2 时执行的代码块\r\n        break;\r\n    ...\r\n    default:\r\n        // 当 expression 的值与任何 case 不匹配时执行的代码块\r\n        break;\r\n}\r\n```\r\n\r\n\r\n\r\nswitch 语句中的 expression 是一个表达式，可以是整数、字符、字符串等类型。case 语句后面的值可以是常量或者常量表达式。如果 expression 的值等于某个 case 语句后面的值，则执行相应的代码块。如果没有匹配的 case 语句，则执行 default 代码块。\r\n\r\n下面是一个简单的例子：\r\n\r\n```csharp\r\n\r\nint x = 2;\r\nswitch (x)\r\n{\r\n    case 1:\r\n        Console.WriteLine(\"x 等于 1\");\r\n        break;\r\n    case 2:\r\n        Console.WriteLine(\"x 等于 2\");\r\n        break;\r\n    default:\r\n        Console.WriteLine(\"x 不等于 1 或 2\");\r\n        break;\r\n}\r\n```\r\n\r\n\r\n\r\n在这个例子中，如果 x 的值等于 1，则输出 x 等于 1。如果 x 的值等于 2，则输出 x 等于 2。否则，输出 x 不等于 1 或 2。\r\n## 示例代码\r\n\r\n下面是一个完整的示例代码，展示了 C# 中判断语句的使用：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nclass Program\r\n{\r\n    static void Main()\r\n    {\r\n        int x = 10;\r\n        if (x > 5)\r\n        {\r\n            Console.WriteLine(\"x 大于 5\");\r\n        }\r\n\r\n        int y = 3;\r\n        if (y > 5)\r\n        {\r\n            Console.WriteLine(\"y 大于 5\");\r\n        }\r\n        else\r\n        {\r\n            Console.WriteLine(\"y 小于等于 5\");\r\n        }\r\n\r\n        int z = -1;\r\n        if (z > 5)\r\n        {\r\n            Console.WriteLine(\"z 大于 5\");\r\n        }\r\n        else if (z > 0)\r\n        {\r\n            Console.WriteLine(\"z 大于 0，小于等于 5\");\r\n        }\r\n        else\r\n        {\r\n            Console.WriteLine(\"z 小于等于 0\");\r\n        }\r\n\r\n        int i = 2;\r\n        switch (i)\r\n        {\r\n            case 1:\r\n                Console.WriteLine(\"i 等于 1\");\r\n                break;\r\n            case 2:\r\n                Console.WriteLine(\"i 等于 2\");\r\n                break;\r\n            default:\r\n                Console.WriteLine(\"i 不等于 1 或 2\");\r\n                break;\r\n        }\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n输出结果为：\r\n\r\n```css\r\n\r\nx 大于 5\r\ny 小于等于 5\r\nz 小于等于 0\r\ni 等于\r\n```\r\n- ## 总结\r\n\r\n本文介绍了 C# 中的几种常见的判断语句，包括 if 语句、if-else 语句、if-else if 语句和 switch 语句。这些语句可以根据条件决定程序执行哪些语句，从而实现程序的逻辑分支。在使用时，需要根据具体情况选择合适的语句，并注意语法的正确性和代码的可读性。\r\n\r\n希望本文对初学者有所帮助。如果您有任何问题或建议，请随时在评论区留言。\r\n','C# 判断','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,10),('ef99f6f8-5ee3-2db2-abc9-3a0ff53f8682',0,'- [Infer.NET](https://dotnet.github.io/infer/)  - 一个用于在图形模型中运行贝叶斯推理的框架。它也可以用于概率编程。 \r\n- [Accord.NET](http://accord-framework.net/)  - 机器学习框架，结合了音频和图像处理库（计算机视觉、计算机听觉、信号处理和统计学）。 \r\n- [Accord.NET Extensions](https://github.com/dajuric/accord-net-extensions)  - 高级图像处理和计算机视觉算法，作为流畅扩展制作。 \r\n- [AForge.NET](http://www.aforgenet.com/)  - 面向计算机视觉和人工智能领域的开发人员和研究人员的框架（图像处理、神经网络、遗传算法、机器学习、机器人技术）。 \r\n- [Catalyst](https://github.com/curiosity-ai/catalyst)  - 受到 spaCy 启发的跨平台自然语言处理（NLP）库，具有预训练模型，支持训练词和文档嵌入，以及灵活的实体识别模型。是 [SciSharp Stack](https://scisharp.github.io/SciSharp/)  的一部分。 \r\n- [Deedle](https://bluemountaincapital.github.io/Deedle/)  - 用于C#和F#的数据框架和（时间）序列库，用于探索性数据处理。 \r\n- [FsLab](https://fslab.org/)  - 用于F#和.NET的数据科学和机器学习库集合。 \r\n- [GeneticSharp](https://github.com/giacomelli/GeneticSharp)  - 跨平台的.NET Core和.NET Framework的遗传算法库。该库有多个GA运算符的实现，如选择、交叉、突变、重新插入和终止。 \r\n- [numl](https://github.com/sethjuarez/numl)  - 旨在包括最流行的监督和无监督学习算法，同时尽量减少创建预测模型所涉及的摩擦。 \r\n- [ML.NET](https://github.com/dotnet/machinelearning)  - 跨平台的开源机器学习框架，使机器学习对.NET开发人员更加可访问。 \r\n- [R Provider](https://bluemountaincapital.github.io/FSharpRProvider/)  - 一种类型提供程序，以类型安全的方式向F#调用者暴露R包和函数。 \r\n- [F# Data](https://github.com/fsprojects/FSharp.Data)  - 用于访问XML、JSON、CSV和HTML文件（基于示例文档）以及访问世界银行数据的F#类型提供程序。 \r\n- [Spreads](https://github.com/Spreads/Spreads/)  - 用于实时和探索性数据流分析的系列和面板。Spreads库经过性能和内存使用的优化。它比其他开源项目快几倍。 \r\n- [SciSharp STACK](https://scisharp.github.io/SciSharp/)  - 由将最流行的Python库移植到C#而创建的.NET的丰富机器学习生态系统。 \r\n- [Synapses](https://github.com/mrdimosthenis/Synapses)  - 一个用F#编写的内存中的神经网络库。 \r\n- [m2cgen](https://github.com/BayesWitnesses/m2cgen)  - 用于将经过训练的经典ML模型转换为本机.NET（C#、F#或Visual Basic）代码的CLI工具，零依赖性。\r\n* [TensorFlowSharp](https://github.com/migueldeicaza/TensorFlowSharp) - 适用于.NET语言的TensorFlow API。\r\n* [WaveFunctionCollapse](https://github.com/mxgmn/WaveFunctionCollapse) - 借助量子力学的思想，从单个例子​​生成itmap和tilemap。\r\n* [SiaNet](https://github.com/SciSharp/SiaNet) - 具有CUDA / OpenCL支持的易于使用的C＃深度学习。','机器学习和数据科学','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,63),('efbee587-6d43-f7c0-9e0d-3a0fe9b5b44a',0,'C# 中，匿名方法是一种不具名的方法，可以被用来传递给委托或者 Lambda 表达式。匿名方法被称为匿名是因为它没有名称，仅被定义在另一个方法或代码块的内部。使用匿名方法可以更加简洁和灵活地编写代码。\r\n## 委托与匿名方法\r\n\r\n委托是一种可以封装方法的类型。当我们需要将一个方法作为参数传递给另一个方法或者存储一个方法时，我们可以使用委托。在 C# 中，委托可以通过声明一个委托类型来定义，然后实例化一个委托对象并将其作为参数传递给方法。\r\n\r\n下面是一个示例，展示了如何使用委托类型定义一个委托，然后实例化一个委托对象并将其作为参数传递给 `DoSomething` 方法。\r\n\r\n```csharp\r\n\r\ndelegate void MyDelegate(string name);\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        MyDelegate myDelegate = new MyDelegate(SayHello);\r\n        DoSomething(myDelegate);\r\n    }\r\n\r\n    static void DoSomething(MyDelegate myDelegate)\r\n    {\r\n        myDelegate(\"John\");\r\n    }\r\n\r\n    static void SayHello(string name)\r\n    {\r\n        Console.WriteLine(\"Hello, \" + name);\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n上面的示例中，我们定义了一个名为 `MyDelegate` 的委托类型，该委托类型接受一个 `string` 类型的参数并返回 `void`。然后我们实例化了一个 `MyDelegate` 类型的委托对象 `myDelegate` 并将其赋值为 `SayHello` 方法。最后，我们将 `myDelegate` 作为参数传递给 `DoSomething` 方法。\r\n\r\n现在，我们可以使用匿名方法来替代 `SayHello` 方法，并将其作为参数传递给 `myDelegate` 委托对象。下面是一个使用匿名方法的示例：\r\n\r\n```csharp\r\n\r\ndelegate void MyDelegate(string name);\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        MyDelegate myDelegate = delegate(string name)\r\n        {\r\n            Console.WriteLine(\"Hello, \" + name);\r\n        };\r\n        DoSomething(myDelegate);\r\n    }\r\n\r\n    static void DoSomething(MyDelegate myDelegate)\r\n    {\r\n        myDelegate(\"John\");\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的示例中，我们使用了 `delegate` 关键字来定义一个匿名方法，该匿名方法接受一个 `string` 类型的参数并返回 `void`。然后我们实例化了一个 `MyDelegate` 类型的委托对象 `myDelegate` 并将其赋值为该匿名方法。最后，我们将 `myDelegate` 作为参数传递给 `DoSomething` 方法。\r\n## Lambda 表达式与匿名方法\r\n\r\nLambda 表达式是一种可以产生委托或表达式树类型的匿名函数。Lambda 表达式通常用于简化代码，因为它们可以在一行代码中定义一个委托并传递给另一个方法。\r\n\r\n下面是一个使用 Lambda 表达式的示例，我们使用 Lambda 表达式替代了前面示例中的匿名方法：\r\n\r\n```csharp\r\n\r\ndelegate void MyDelegate(string name);\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        MyDelegate myDelegate = name => Console.WriteLine(\"Hello, \" + name);\r\n        DoSomething(myDelegate);\r\n    }\r\n\r\n    static void DoSomething(MyDelegate myDelegate)\r\n    {\r\n        myDelegate(\"John\");\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n在上面的示例中，我们使用 `=>` 符号定义了一个 Lambda 表达式，该表达式接受一个 `string` 类型的参数 `name` 并返回 `void`。然后我们实例化了一个 `MyDelegate` 类型的委托对象 `myDelegate` 并将其赋值为该 Lambda 表达式。最后，我们将 `myDelegate` 作为参数传递给 `DoSomething` 方法。\r\n\r\n需要注意的是，Lambda 表达式只能用于产生委托或表达式树类型，而匿名方法可以用于产生任何类型的方法。此外，Lambda 表达式还可以使用 LINQ 查询语句中的延迟求值特性，使代码更加简洁和高效。\r\n## 示例代码\r\n\r\n下面是一个使用匿名方法和 Lambda 表达式的完整示例代码：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\ndelegate void MyDelegate(string name);\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        // 使用匿名方法\r\n        MyDelegate myDelegate1 = delegate(string name)\r\n        {\r\n            Console.WriteLine(\"Hello, \" + name);\r\n        };\r\n        DoSomething(myDelegate1);\r\n\r\n        // 使用 Lambda 表达式\r\n        MyDelegate myDelegate2 = name => Console.WriteLine(\"Hello, \" + name);\r\n        DoSomething(myDelegate2);\r\n    }\r\n\r\n    static void DoSomething(MyDelegate myDelegate)\r\n    {\r\n        myDelegate(\"John\");\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n输出结果：\r\n\r\n```\r\n\r\nHello, John\r\nHello, John\r\n```\r\n\r\n\r\n\r\n在上面的示例中，我们首先使用了匿名方法来定义一个委托对象 `myDelegate1`，然后将其作为参数传递给 `DoSomething` 方法。接下来，我们使用了 Lambda 表达式来定义另一个委托对象 `myDelegate2`，并将其作为参数传递给 `DoSomething` 方法。最终，`DoSomething` 方法都会输出 `Hello, John`。\r\n## 总结\r\n\r\n匿名方法是一种不具名的方法，可以用于传递给委托或者 Lambda 表达式。在 C# 中，匿名方法可以使用 `delegate` 关键字或 Lambda 表达式语法来定义。使用匿名方法可以使代码更加简洁和灵活，但需要注意一些区别和限制。\r\n','C# 匿名方法','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,37),('f01c001d-96d1-9480-d790-3a0ff545b3ec',0,'![image.png](/prod-api/file/ef1e2b0d-b6f0-2020-fac6-3a0ff5459ec6/true)','响应缓存、请求解压缩','2da0361c-000d-e0d8-6737-3a0ff5421cdc','00000000-0000-0000-0000-000000000000','2024-01-07 16:45:06','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('f04de1bb-a2ec-c84b-fe99-3a0ff53f8681',0,'- [i18n](https://github.com/turquoiseowl/i18n)  - 用于ASP.NET MVC的智能国际化。 \r\n- [MessageFormat.NET](https://github.com/jeffijoe/MessageFormat.NET)  - .NET中的ICU MessageFormat实现，允许您编写上下文UI消息（PCL库）。 \r\n- [ResX Resource Manager](https://github.com/dotnet/ResXResourceManager)  - 用于本地化各种基于resx资源的应用程序的最受欢迎的免费工具。\r\n* [Localization](https://github.com/aspnet/Localization) -  ASP.NET Core应用程序的本地化抽象和实现库。\r\n* [NetCoreStack.Localization](https://github.com/NetCoreStack/Localization) - 具带有实体框架和内存缓存中的.NET Core的数据库资源本地化库。\r\n* [Westwind.Globalization](https://github.com/RickStrahl/Westwind.Globalization) -  数据库驱动资源本地化库。\r\n','国际化','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,58),('f11dec44-3c30-9661-caab-3a0ff53f8683',0,'\r\n- [Elasticsearch.NET & NEST](https://github.com/elastic/elasticsearch-net)  - NEST和Elasticsearch.Net的存储库，这是两个官方Elasticsearch .NET客户端。\r\n- [ElasticsearchCRUD](https://github.com/damienbod/ElasticsearchCRUD) -  Elasticsearch .NET API。\r\n- [PlainElastic.Net](https://github.com/Yegoroff/PlainElastic.Net)  - ElasticSearch的纯.NET客户端 \r\n- [SolrNet](https://github.com/SolrNet/SolrNet)  - 用于.NET的Solr客户端 \r\n- [SolrExpress](https://github.com/solr-express/solr-express)  - 用于Solr的简单轻量级查询.NET库，以一种受控、可构建且失败快速的方式实现 \r\n- [Lucene.net](https://lucenenet.apache.org/)  - Lucene.Net是Lucene搜索引擎库的一个C#移植版本，面向.NET运行时用户。\r\n- [Algolia.Search](https://github.com/algolia/algoliasearch-client-csharp) - 官方Algolia .NET客户端的存储库。\r\n- [AutoComplete](https://github.com/omerfarukz/autocomplete) - 持久，简单，强大且可移植的自动完成库。\r\n- [SearchExtensions](https://github.com/ninjanye/SearchExtensions) -  IQueryable接口的高级搜索功能，例如Entity Framework查询。\r\n- [SimMetrics.Net](https://github.com/StefH/SimMetrics.Net) - 相似度量标准库，例如从编辑距离(Levenshtein，Gotoh，Jaro等)到其他指标，(例如Soundex，Chapman)','搜索引擎','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,90),('f1773a3e-ba08-40c5-47a1-3a0ff53f8681',0,'- [Castle Windsor](https://github.com/castleproject/Windsor)  - Castle Windsor是可用于.NET和Silverlight的最佳IoC容器，经过成熟的逆向控制容器。 \r\n- [Unity](https://github.com/unitycontainer/unity)  - 轻量级可扩展的依赖注入容器，支持构造函数、属性和方法调用注入。 \r\n- [Autofac](https://github.com/autofac/Autofac)  - 令人上瘾的.NET IoC容器。 \r\n- [DryIoc](https://github.com/dadhi/DryIoc)  - 简单、快速、功能齐全的IoC容器。 \r\n- [Ninject](https://github.com/ninject/ninject)  - .NET依赖注入器的忍者。 \r\n- [Spring.Net](https://github.com/spring-projects/spring-net)  - Spring.NET是一个开源的应用程序框架，使构建企业级.NET应用程序更加容易。 \r\n- [Lamar](https://jasperfx.github.io/lamar/)  - 一个针对ASP.NET Core和其他.NET服务器端应用程序大量优化的快速IoC容器。 \r\n- [LightInject](https://github.com/seesharper/LightInject)  - 超轻量级的IoC容器。 \r\n- [Simple Injector](https://github.com/simpleinjector/SimpleInjector)  - Simple Injector是一个易于使用的.NET 4+依赖注入（DI）库，支持Silverlight 4+、Windows Phone 8、Windows 8（包括Universal应用程序）和Mono。 \r\n- [Microsoft.Extensions.DependencyInjection](https://github.com/dotnet/runtime/tree/main/src/libraries/Microsoft.Extensions.DependencyInjection)  - .NET应用程序的默认IoC容器。 \r\n- [Scrutor](https://github.com/khellang/Scrutor)  - 用于Microsoft.Extensions.DependencyInjection的程序集扫描扩展。 \r\n- [VS MEF](https://github.com/Microsoft/vs-mef)  - Visual Studio使用的托管可扩展性框架（MEF）实现。 \r\n- [TinyIoC](https://github.com/grumpydev/TinyIoC)  - 一个易于使用的、无麻烦的IoC容器，适用于小项目、库和初学者。 \r\n- [Stashbox](https://github.com/z4kn4fein/stashbox)  - 用于.NET解决方案的轻量级、便携式依赖注入框架。\r\n* [AutoDI](https://github.com/Keboo/AutoDI) - 使用IL编译的超快依赖注入库。\r\n* [Grace](https://github.com/ipjohnson/Grace) -  Grace是一款功能丰富的依赖注入容器，其设计考虑了易用性和性能。\r\n* [Inyector](https://github.com/davidrevoledo/Inyector) -  AspNetCore的依赖注入自动化。','IoC','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,60),('f3455be2-846d-5115-7628-3a0fe9b5b449',0,'在C#中，数组是一种有序的集合，它可以存储同一类型的多个元素。每个元素都可以通过其唯一的索引进行访问。在本文中，我们将介绍C#中数组的基本概念、如何声明和初始化数组、如何访问数组元素以及如何使用数组的一些常用方法。\r\n## 声明和初始化数组\r\n\r\n在C#中，可以使用以下语法声明数组：\r\n\r\n```csharp\r\n\r\ntype[] arrayName;\r\n```\r\n\r\n\r\n\r\n其中，type是数组中元素的数据类型，arrayName是数组的名称。例如，下面是一个声明整数数组的示例：\r\n\r\n```csharp\r\n\r\nint[] numbers;\r\n```\r\n\r\n\r\n\r\n可以使用以下语法初始化数组：\r\n\r\n```csharp\r\n\r\ntype[] arrayName = new type[arraySize];\r\n```\r\n\r\n\r\n\r\n其中，arraySize是数组的大小。例如，下面是一个初始化整数数组的示例：\r\n\r\n```csharp\r\n\r\nint[] numbers = new int[5];\r\n```\r\n\r\n\r\n\r\n上面的代码创建了一个包含5个整数的数组。要访问数组中的元素，可以使用以下语法：\r\n\r\n```csharp\r\n\r\narrayName[index] = value;\r\n```\r\n\r\n\r\n\r\n其中，index是元素的索引，value是要存储在该位置的值。例如，下面的代码演示了如何将值存储在数组中的特定位置：\r\n\r\n```csharp\r\n\r\nnumbers[0] = 1;\r\nnumbers[1] = 2;\r\nnumbers[2] = 3;\r\nnumbers[3] = 4;\r\nnumbers[4] = 5;\r\n```\r\n\r\n\r\n## 访问数组元素\r\n\r\n要访问数组中的元素，可以使用以下语法：\r\n\r\n```csharp\r\n\r\ntype element = arrayName[index];\r\n```\r\n\r\n\r\n\r\n其中，index是元素的索引，element是要访问的元素。例如，下面的代码演示了如何访问数组中的元素：\r\n\r\n```csharp\r\n\r\nint firstNumber = numbers[0];\r\nint secondNumber = numbers[1];\r\n```\r\n\r\n\r\n## 数组的常用方法\r\n\r\n在C#中，数组具有许多有用的方法，可以简化开发过程。以下是一些常用的方法：\r\n- Array.Sort：对数组中的元素进行排序。\r\n- Array.IndexOf：查找特定元素在数组中的索引。\r\n- Array.Copy：将数组中的元素复制到另一个数组中。\r\n- Array.Reverse：颠倒数组中元素的顺序。\r\n\r\n下面是一个示例代码，演示如何使用这些方法：\r\n\r\n```csharp\r\n\r\nint[] numbers = { 3, 2, 1, 5, 4 };\r\n\r\nArray.Sort(numbers); // 对数组进行排序\r\n\r\nint index = Array.IndexOf(numbers, 5); // 查找元素5在数组中的索引\r\n\r\nint[] copy = new int[5];\r\nArray.Copy(numbers, copy, 5); // 将数组复制到另一个数组中\r\n\r\nArray.Reverse(numbers); // 颠倒数组中元素的顺序\r\n```\r\n\r\n\r\n## 结论\r\n\r\n在本文中，我们介绍了C#中数组的基本概念、如何声明和初始化数组、如何访问数组元素以及如何使用数组的一些','C# 数组（Array）','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,15),('f5b84b4b-db19-eadd-7ca6-3a0fe6aa13b1',1,'测试导入22222222222222','测试2.md','32518510-b9d5-4436-a902-3a0fe686d8ce','00000000-0000-0000-0000-000000000000','2024-01-04 20:40:26','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','2024-01-04 20:47:00',0),('f7561e0a-b1c7-113b-cdbf-3a0fe9b5b44a',0,'C# 反射是一种强大的技术，它可以让你在运行时访问和操作 .NET 程序集中的类型和成员。反射提供了一种非常灵活的方式来处理对象和类型，使得你可以在编译时无法访问类型信息的情况下编写代码。\r\n## 反射的优缺点\r\n\r\n反射技术具有以下优点：\r\n- 在运行时访问类型信息，可以动态创建对象、调用方法、访问属性和字段等。\r\n- 可以在不知道类型信息的情况下进行编程。\r\n- 可以通过反射来访问私有成员。\r\n- 可以扩展应用程序，使其更加灵活和可配置。\r\n- 可以使用反射创建插件式应用程序，以便用户可以动态加载和卸载插件。\r\n\r\n反射技术具有以下缺点：\r\n- 性能问题：使用反射基本上是一种解释操作，用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和拓展性要求很高的系统框架上，普通程序不建议使用。\r\n- 使用反射会模糊程序内部逻辑；程序员希望在源代码中看到程序的逻辑，反射却绕过了源代码的技术，因而会带来维护的问题，反射代码比相应的直接代码更复杂。\r\n## 反射的基本用法\r\n### 获取类型信息\r\n\r\n要使用反射，首先需要获取类型信息。可以通过以下方式获取类型信息：\r\n\r\n```csharp\r\n\r\n// 通过类型名称获取类型信息\r\nType type = Type.GetType(\"Namespace.TypeName\");\r\n\r\n// 通过对象获取类型信息\r\nType type = obj.GetType();\r\n\r\n// 通过泛型参数获取类型信息\r\nType type = typeof(MyClass);\r\n```\r\n\r\n\r\n\r\n其中，Type.GetType() 方法会从当前程序集、已加载的程序集以及指定的程序集中查找类型信息。如果找到了类型信息，则返回 Type 对象；否则返回 null。\r\n\r\nobj.GetType() 方法会返回 obj 的运行时类型，即 obj 实例所属的类型。如果 obj 为 null，则会抛出 NullReferenceException 异常。\r\n\r\ntypeof(MyClass) 表示获取 MyClass 类型的 Type 对象。\r\n### 创建对象\r\n\r\n要创建一个对象，可以使用 Activator.CreateInstance() 方法：\r\n\r\n```csharp\r\n\r\n// 通过类型信息创建对象\r\nobject obj = Activator.CreateInstance(type);\r\n\r\n// 通过类型信息创建对象，并传递构造函数参数\r\nobject obj = Activator.CreateInstance(type, arg1, arg2, ...);\r\n```\r\n\r\n\r\n\r\n其中，第二种方式需要传递构造函数的参数。如果类型没有公共的构造函数，则会抛出 MissingMethodException 异常。\r\n### 调用方法\r\n\r\n要调用一个方法，可以使用 MethodInfo.Invoke() 方法：\r\n\r\n```csharp\r\n\r\n// 获取方法信息\r\nMethodInfo method = type.GetMethod(\"MethodName\");\r\n\r\n// 调用方法\r\nobject result = method.Invoke(obj, arg1, arg2, ...);\r\n```\r\n\r\n\r\n\r\n其中，GetMethod() 方法根据方法名称获取方法信息。Invoke() 方法会调用该方法，并返回其返回值。如果方法没有返回值，则返回 null。\r\n### 访问属性和字段\r\n\r\n要访问属性和字段，可以使用 PropertyInfo.GetValue() 和 Field.GetValue() 方法：\r\n\r\n```csharp\r\n\r\n// 获取属性信息\r\nPropertyInfo property = type.GetProperty(\"PropertyName\");\r\n\r\n// 获取字段信息\r\nFieldInfo field = type.GetField(\"FieldName\");\r\n\r\n// 获取属性值\r\nobject value = property.GetValue(obj);\r\n\r\n// 获取字段值\r\nobject value = field.GetValue(obj);\r\n```\r\n\r\n\r\n\r\n其中，GetValue() 方法会返回属性或字段的值。\r\n### 动态加载程序集\r\n\r\n要动态加载程序集，可以使用 Assembly.LoadFile() 方法：\r\n\r\n```csharp\r\n\r\n// 加载程序集\r\nAssembly assembly = Assembly.LoadFile(\"path/to/assembly.dll\");\r\n\r\n// 获取类型信息\r\nType type = assembly.GetType(\"Namespace.TypeName\");\r\n\r\n// 创建对象\r\nobject obj = Activator.CreateInstance(type);\r\n\r\n// 调用方法\r\nMethodInfo method = type.GetMethod(\"MethodName\");\r\nmethod.Invoke(obj, arg1, arg2, ...);\r\n```\r\n\r\n\r\n## 反射的高级用法\r\n### 泛型方法\r\n\r\n如果要调用泛型方法，可以使用 MakeGenericType() 方法创建泛型类型，然后再获取泛型方法信息：\r\n\r\n```csharp\r\n\r\n// 获取泛型方法信息\r\nMethodInfo method = type.GetMethod(\"MethodName\");\r\nMethodInfo genericMethod = method.MakeGenericMethod(typeof(T));\r\n\r\n// 调用泛型方法\r\nobject result = genericMethod.Invoke(obj, arg1, arg2, ...);\r\n```\r\n\r\n\r\n\r\n其中，MakeGenericMethod() 方法会创建泛型类型，传入泛型类型参数后返回泛型方法信息。\r\n### 属性和字段的赋值\r\n\r\n如果要设置属性和字段的值，可以使用 PropertyInfo.SetValue() 和 Field.SetValue() 方法：\r\n\r\n```csharp\r\n\r\n// 设置属性值\r\nPropertyInfo property = type.GetProperty(\"PropertyName\");\r\nproperty.SetValue(obj, value);\r\n\r\n// 设置字段值\r\nFieldInfo field = type.GetField(\"FieldName\");\r\nfield.SetValue(obj, value);\r\n```\r\n\r\n\r\n\r\n其中，SetValue() 方法会设置属性或字段的值。\r\n### 访问私有成员\r\n\r\n如果要访问私有成员，可以通过 BindingFlags.NonPublic 标志获取私有成员信息：\r\n\r\n```csharp\r\n\r\n// 获取私有字段信息\r\nFieldInfo field = type.GetField(\"fieldName\", BindingFlags.NonPublic | BindingFlags.Instance);\r\n\r\n// 获取私有属性信息\r\nPropertyInfo property = type.GetProperty(\"propertyName\", BindingFlags.NonPublic | BindingFlags.Instance);\r\n\r\n// 获取私有方法信息\r\nMethodInfo method = type.GetMethod(\"methodName\", BindingFlags.NonPublic | BindingFlags.Instance);\r\n\r\n// 调用私有方法\r\nmethod.Invoke(obj, arg1, arg2, ...);\r\n```\r\n\r\n\r\n\r\n其中，BindingFlags.NonPublic 标志表示获取私有成员信息，BindingFlags.Instance 标志表示获取实例成员信息。\r\n## 示例代码\r\n\r\n以下是一个示例代码，它演示了如何使用反射来创建对象、调用方法、访问属性和字段：\r\n\r\n```csharp\r\n\r\nusing System;\r\nusing System.Reflection;\r\n\r\nnamespace ReflectionDemo\r\n{\r\n    class Program\r\n    {\r\n        static void Main(string[] args)\r\n        {\r\n            // 获取类型信息\r\n            Type type = Type.GetType(\"ReflectionDemo.Person\");\r\n\r\n            // 创建对象\r\n            object obj = Activator.CreateInstance(type, \"John\", 30);\r\n\r\n            // 调用方法\r\n            MethodInfo method = type.GetMethod(\"SayHello\");\r\n            method.Invoke(obj, null);\r\n\r\n            // 访问属性\r\n            PropertyInfo property = type.GetProperty(\"Name\");\r\n            Console.WriteLine(\"Name: \" + property.GetValue(obj));\r\n\r\n            // 访问字段\r\n            FieldInfo field = type.GetField(\"age\", BindingFlags.NonPublic | BindingFlags.Instance);\r\n            Console.WriteLine(\"Age: \" + field.GetValue(obj));\r\n        }\r\n    }\r\n\r\n    class Person\r\n    {\r\n        private int age;\r\n\r\n        public Person(string name, int age)\r\n        {\r\n            this.Name = name;\r\n            this.age = age;\r\n        }\r\n\r\n        public string Name { get; set; }\r\n\r\n        private void SayHello()\r\n        {\r\n            Console.WriteLine(\"Hello, my name is \" + this.Name);\r\n        }\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n输出：\r\n\r\n```\r\n\r\nHello, my name is John\r\nName: John\r\nAge: 30\r\n```\r\n','C# 反射（Reflection）','bb410108-243a-5b04-d532-3a0fc6b8afcb','00000000-0000-0000-0000-000000000000','2024-01-05 10:52:00',NULL,NULL,NULL,30),('f78d4bdd-b9b7-9fdf-7865-3a0f83aa8e3b',0,'## 简介\n控制器层通常不包含业务的，我们控制器的代码经常是如下：\n``` cs\n[HttpGet]\n[route(\"Info\")]\npulic IActionResult GetInfo()\n{\n\tretrun Ok(_service.GetInfo());\n}\n```\n我们不仅要创建控制器文件，还要写出应用层到控制器的方法，将业务的数据通过控制器暴露出去\n> 控制器只做转发，没有做任何事情,形成了大量的冗余代码\n\n## 如何使用\n> 推荐直接在应用层中直接使用\n\n使用动态Api，需要3个条件\n1. 任何一个类，实现`IRemoteService`接口\n2. 该类需要加入DI容器\n3. 在管道模型中，配置动态Api服务:\n\n> 通常我们直接继承`ApplicationService`即可，因为该类实现了`IRemoteService`\n``` cs\n            //动态Api\n            Configure<AbpAspNetCoreMvcOptions>(options =>\n            {\n                options.ConventionalControllers.Create(typeof(YiAbpApplicationModule).Assembly, options => options.RemoteServiceName = \"default\");\n            });\n```\n\n根据方法名自动映射Http方法及路由\n例如：\n- GetInfo：Get请求\n- UpdateInfo：Put请求\n- RemoveInfo: Del请求\n- CreateInfo: Post请求\n\n\n## 完整例子\n``` cs\nusing Volo.Abp.Application.Services;\n\nnamespace Yi.Abp.Application.Services\n{\n    public class TestService : ApplicationService\n    {\n        /// <summary>\n        /// 你好世界\n        /// </summary>\n        /// <param name=\"name\"></param>\n        /// <returns></returns>\n        public string GetHelloWorld(string? name)\n        {\n            return name ?? \"HelloWord\";\n        }\n    }\n}\n\n```\n\n','动态Api','[REDACTED]','00000000-0000-0000-0000-000000000000','2023-12-16 15:18:33','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('f9809ba4-bfad-9153-6dc3-3a0ff53f8681',0,'\r\n- [Tiny.RestClient](https://github.com/jgiacomini/Tiny.RestClient)  - 最简单的.NET REST客户端。 \r\n- [Http.fs](https://github.com/haf/Http.fs)  - 用于F#的功能性HTTP客户端。 \r\n- [RestSharp](https://github.com/restsharp/RestSharp)  - 用于.NET的简单REST和HTTP API客户端。 \r\n- [Flurl](https://flurl.dev/)  - 流畅、可移植、可测试的REST/HTTP客户端库。 \r\n- [EasyHttp](https://github.com/EasyHttp/EasyHttp)  - 用于C#的HTTP库。 \r\n- [Refit](https://github.com/reactiveui/refit)  - Xamarin和.NET的自动类型安全REST库。 \r\n- [RestEase](https://github.com/canton7/RestEase)  - 易于使用的类型安全REST API客户端库，简单且可定制。受到Refit的启发。 \r\n- [RestLess](https://github.com/letsar/RestLess)  - .Net标准下的自动类型安全且无反射的REST API客户端库。 \r\n- [HttpClientGoodies](https://github.com/jeffijoe/httpclientgoodies.net)  - 用于处理`HttpClient`的实用工具。 \r\n- [WebApiClient](https://github.com/dotnetcore/WebApiClient)  - 基于HttpClient的开源项目。您只需要定义C#接口并修改相关功能，以异步方式调用远程HTTP接口的客户端库。 \r\n- [Apizr](https://github.com/Respawnsive/Apizr)  - 基于Refit的Web API客户端，但具有弹性（重试、连接性、缓存、身份验证、日志、优先级等等）。\r\n','HTTP','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,53),('fa8ea2b3-45ff-f166-6617-3a0fe75e4a6d',1,'title: C# 简介\r\narticle: false\r\ndate: 2023-04-15 11:39:44\r\npermalink: /pages/9d25e7/\r\n---\r\n\r\n## 简介\r\n\r\nC# 是由微软公司开发的一种面向对象、类型安全、高效且简单的编程语言。它最初于 2000 年发布，并随后成为 .NET 框架的一部分，逐渐成为开发 Windows 应用程序和 Web 应用程序的主要选择之一。C# 语言的设计目标是提供一种现代、通用、面向对象的编程语言，使开发人员能够更轻松地构建 Windows 应用程序、Web 应用程序、服务端应用程序等。\r\n## 语言特点\r\n\r\nC# 语言具有以下特点：\r\n\r\n- 简单易学：C# 语法简单，易于理解，同时也有着很多的教程和文档。\r\n- 类型安全：C# 提供了类型检查，能够在编译时发现很多错误。\r\n- 面向对象：C# 是一种面向对象的语言，支持类、接口、继承、封装等面向对象的概念。\r\n- 支持泛型：C# 支持泛型编程，能够实现更加通用的代码。\r\n- 自动内存管理：C# 采用垃圾回收机制，不需要开发人员手动管理内存，减少了内存泄漏等问题的出现。\r\n\r\n## 应用领域\r\n\r\nC# 语言的应用领域非常广泛，主要包括以下方面：\r\n\r\n- Windows 应用程序开发：C# 是 Windows 平台上的主流编程语言，开发 Windows 应用程序非常方便。\r\n- Web 应用程序开发：C# 和 ASP.NET 框架一起使用，可以开发 Web 应用程序和服务端应用程序。\r\n- 游戏开发：C# 和 Unity 一起使用，能够开发各种类型的游戏。\r\n- 移动应用程序开发：C# 和 Xamarin 一起使用，可以开发 Android 和 iOS 平台上的移动应用程序。\r\n\r\n## 开发环境\r\n\r\n如果你想使用 C# 开发应用程序，可以使用 Visual Studio 开发环境。Visual Studio 是一款功能强大、易于使用的 IDE，支持多种编程语言，包括 C#。除此之外，你还可以使用 Visual Studio Code、Rider 等其他的开发环境。\r\n\r\n## 示例代码\r\n\r\n下面是一个使用 C# 编写的 \"Hello, World!\" 程序的示例代码：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        Console.WriteLine(\"Hello, World!\");\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n这个程序会在控制台输出 \"Hello, World!\" 字符串。\r\n','C# 简介','67bbbd51-8f39-6bc3-46fe-3a0fa9fe8385','00000000-0000-0000-0000-000000000000','2024-01-04 23:57:17','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','2024-01-04 23:57:39',0),('fc506d4e-9ec0-e5c2-2462-3a0fe7638b20',1,'\r\n## 简介\r\n\r\nC# 是由微软公司开发的一种面向对象、类型安全、高效且简单的编程语言。它最初于 2000 年发布，并随后成为 .NET 框架的一部分，逐渐成为开发 Windows 应用程序和 Web 应用程序的主要选择之一。C# 语言的设计目标是提供一种现代、通用、面向对象的编程语言，使开发人员能够更轻松地构建 Windows 应用程序、Web 应用程序、服务端应用程序等。\r\n## 语言特点\r\n\r\nC# 语言具有以下特点：\r\n\r\n- 简单易学：C# 语法简单，易于理解，同时也有着很多的教程和文档。\r\n- 类型安全：C# 提供了类型检查，能够在编译时发现很多错误。\r\n- 面向对象：C# 是一种面向对象的语言，支持类、接口、继承、封装等面向对象的概念。\r\n- 支持泛型：C# 支持泛型编程，能够实现更加通用的代码。\r\n- 自动内存管理：C# 采用垃圾回收机制，不需要开发人员手动管理内存，减少了内存泄漏等问题的出现。\r\n\r\n## 应用领域\r\n\r\nC# 语言的应用领域非常广泛，主要包括以下方面：\r\n\r\n- Windows 应用程序开发：C# 是 Windows 平台上的主流编程语言，开发 Windows 应用程序非常方便。\r\n- Web 应用程序开发：C# 和 ASP.NET 框架一起使用，可以开发 Web 应用程序和服务端应用程序。\r\n- 游戏开发：C# 和 Unity 一起使用，能够开发各种类型的游戏。\r\n- 移动应用程序开发：C# 和 Xamarin 一起使用，可以开发 Android 和 iOS 平台上的移动应用程序。\r\n\r\n## 开发环境\r\n\r\n如果你想使用 C# 开发应用程序，可以使用 Visual Studio 开发环境。Visual Studio 是一款功能强大、易于使用的 IDE，支持多种编程语言，包括 C#。除此之外，你还可以使用 Visual Studio Code、Rider 等其他的开发环境。\r\n\r\n## 示例代码\r\n\r\n下面是一个使用 C# 编写的 \"Hello, World!\" 程序的示例代码：\r\n\r\n```csharp\r\n\r\nusing System;\r\n\r\nclass Program\r\n{\r\n    static void Main(string[] args)\r\n    {\r\n        Console.WriteLine(\"Hello, World!\");\r\n    }\r\n}\r\n```\r\n\r\n\r\n\r\n这个程序会在控制台输出 \"Hello, World!\" 字符串。\r\n','C# 简介','67bbbd51-8f39-6bc3-46fe-3a0fa9fe8385','00000000-0000-0000-0000-000000000000','2024-01-05 00:03:01',NULL,'74b32e7e-4586-78ca-fd43-3a0fa9fbd640','2024-01-05 00:05:15',0),('fc907a05-60a4-2a23-d797-3a0fa8f87b83',0,'## 环境大纲\n\n我先把整个流程的大纲罗列以下，后续的章节会介绍每一个环境\n\n操作系统：Linux（centos 7）\n\n以下是之后将集成的环境：\n\n- jenkins环境\n- jdk17环境\n- jenkins权限\n- .net8环境\n- nohup环境\n- docker环境\n- node.js环境\n- 7z环境\n- git环境\n\n## jdk17+Jenkin环境\n\n> 强烈不建议将jenkins安装在docker中，会遇到各种牛马权限等命令问题，像这种运维工具，强烈推荐直接安装到主机中\n\n这个可以通过yum进行安装，官网有对应的教程，跟着教程安装即可\n\n官网教程地址：https://pkg.jenkins.io/redhat-stable/\n\n使用以下命令先安装jdk17后，再安装jenkins\n``` shell\n  sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo\n  sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key\n\n  yum install fontconfig java-17-openjdk\n  yum install jenkins\n```\n安装完成后，使用`systemctl start jenkins`启动即可\n\n首次启动后，将会出现需要管理员密钥，这里跟着提示，去cat命令查看对应的文件，复制即可，后续下载推荐的安装插件，同时创建一个账号\n\n> 这里推荐安装插件极有可能因为网络原因无法进行下载及安装，需要看一下，是什么导致的，如果显示是ssl导致的，可先跳过推荐插件下载，离线安装` skip-certificate-check.hpi `插件，即可加载成功\n\n当安装完成后，如果下载插件慢，可以更换插件源，这个网上资料很多\n\n另外，执行命令的时候，很多时候会显示jenkins无权限\n\n需要给jenkins对应的目录权限，这里为Jenkins的主目录\n``` shell\nchown -R jenkins:jenkins /var/lib/jenkins/\n```\n\n## .Net8环境安装\n\n好吧，如果想在centos中安装.net8也是一个坑，由于centos已经放弃维护了，yum也不支持直接安装了，需要我们手动下载.net sdk进行安装\n\n> 如果centos版本不是很高，还会遇到c++库的一些版本问题\n\n我们可以通过微软官网下载安装教程：\nhttps://dotnet.microsoft.com/zh-cn/download/dotnet/8.0\n\n由于centos7已经不支持了，所以我们只能选择二进制进行手动安装\n\n下载完对应的文件之后，我们需要手动配置环境变量\n\n这里，我是习惯安装到我的/opt/dotnet文件夹下\n``` shell\nmkdir -p /opt/dotnet/dotnet && tar zxf dotnet-sdk-8.0.100-linux-x64.tar.gz -C /opt/dotnet/dotnet\nexport DOTNET_ROOT=/opt/dotnet/dotnet\nexport PATH=$PATH:/opt/dotnet/dotnet\n```\n\n\n## docker环境安装\n这个安装没啥说的，网上资料一大把，就不重复了，安装个docker而已，洒洒水啦~\n\n这里我还是给一下网上的教程\n``` shell\nsudo yum install -y yum-utils device-mapper-persistent-data lvm2\nsudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo\n\nsudo yum install docker-ce\n\n#启动\nsudo systemctl start docker\n\n#设置开机自动启动\nsudo systemctl enable docker\n\nsudo docker version\n```\n\n## node.js环境安装\n\n由于前端的代码需要编译并进行打包，我们还需要node.js的环境\n\n> 版本别下载的太新了，太新了对操作系统的环境是有要求的，通常下载16-18的版本即可\n\n以下是18.13版本的官网下载地址：\nhttps://nodejs.org/dist/v18.13.0/\n\n我们需要通过手动二进制去进行安装\n\n与.net8安装操作几乎是一致的，可以将下载的包解压到/opt/nodejs目录下\n\n然后设置环境变量\n\n``` shell\nexport PATH=$PATH:/opt/nodejs/node-v18.13.0-linux-x64/bin\\\n```\n\n这里可以检测一下的环境变量\n``` shell\nexport PATH\n\n# 可以偷懒，直接强行赋值\nexport PATH=/usr/share/Modules/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/dotnet:/opt/nodejs/node-v18.13.0-linux-x64/bin\n```\n\n我们可以测试输出node和npm命令是否有反应\n\n## 7z.zip环境安装\n因为我们设计到压缩包的传输，所以要压缩包的操作，这里推荐使用7z好用，但是我发现网上下载的操作奇奇怪怪的，我也放一个出来吧\n``` shell\n# 先安装epel-release\\\nyum -y install epel-release\\\n# 在执行安装[7z]的功能\\\nyum -y install p7zip p7zip-plugins\n\n```\n\n可以测试使用7z的命令是否有反应\n\n## git安装\n这个简单，直接\n``` shell\nyum install git\n```\n一步到位\n## 环境准备完成\n\n好了，到此，基本核心的环境你已经准备完成\n\n已经结束了？不，其实真正的坑多的，还是在jenkins这块，为此我单独将jenkins单独拿出篇幅，下章进行教程','环境安装','6b80ed42-50cd-db15-c073-3a0fa8f7fd77','00000000-0000-0000-0000-000000000000','2023-12-23 21:09:37','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0),('fcd8c1db-1d80-7216-e005-3a0ff53ad54c',0,'\r\n**1、那些地方用到了单例模式**\r\n\r\n答：\r\n\r\n1. 网站的计数器，一般也是采用单例模式实现，否则难以同步。\r\n2. 应用程序的日志应用，一般都是单例模式实现，只有一个实例去操作才好，否则内容不好追加显示。\r\n3. 多线程的线程池的设计一般也是采用单例模式，因为线程池要方便对池中的线程进行控制\r\n4. Windows的（任务管理器）就是很典型的单例模式，他不能打开俩个\r\n5. windows的（回收站）也是典型的单例应用。在整个系统运行过程中，回收站只维护一个实例。\r\n\r\n**2、举一个用 .Net5中实现的装饰模式(decorator design pattern)？它是作用于对象层次还是类** **层次？** 答：装饰模式增加强了单个对象的能力。.Net5 IO 到处都使用了装饰模式，典型例子就是 Buffered 系列类如 BufferedStream 它们增强了 Stream 对象， 以实现提升性能的 Buffer 层次的读取和写入。\r\n\r\n**3、适配器模式是什么？什么时候使用？\\****\r\n\r\n答：适配器模式（Adapter Pattern）是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式，它结合了两个独立接口的功能。适配器模式提供对接口的转换。如果你的客户端使用某些接口，但是你有另外一些接口，你就可以写一个适配去来连接这些接口。\r\n\r\n**4、适配器模式与装饰器模式有什么区别？\\****\r\n\r\n答：虽然适配器模式和装饰器模式的结构类似，但是每种模式的出现意图不同。适配器模式被用于桥接两个接口，而装饰模式的目的是在不修改类的情况下给类增加新的功能。\r\n\r\n装饰者模式：动态地将责任附加到对象上，若要扩展功能，装饰者模提供了比继承更有弹性的替代方案。\r\n\r\n通俗的解释：装饰模式就是给一个对象增加一些新的功能，而且是动态的，要求装饰对象和被装饰对象实现同一个接口，装饰对象持有被装饰对象的实例。\r\n\r\n适配器模式：将一个类的接口，转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。\r\n\r\n适配器模式有三种：类的适配器模式、对象的适配器模式、接口的适配器模式。\r\n\r\n通俗的说法：适配器模式将某个类的接口转换成客户端期望的另一个接口表示，目的是消除由于接口不匹配所造成的类的兼容性问题。\r\n\r\n**5、适配器模式和代理模式之间有什么不同？\\****\r\n\r\n答：这个问题与前面的类似，适配器模式和代理模式的区别在于他们的意图不同。由于适配器模式和代理模式都是封装真正执行动作的类，因此结构是一致的，但是适配器模式用于接口之间的转换，而代理模式则是增加一个额外的中间层，以便支持分配、控制或智能访问。\r\n\r\n**6、使用工厂模式最主要的好处是什么？你在哪里使用？**\r\n\r\n答：工厂模式的最大好处是增加了创建对象时的封装层次。如果 你使用工厂来创建对象，之后你可以使用更高级和更高性能的实现来替换原始的产品实现或类，这不需要在调用层做任何修改。可以看我的文章工厂模式得更详细的解释和和了解更多的好处。\r\n\r\n**7、什么时候使用享元模式？**\r\n\r\n答：享元模式通过共享对象来避免创建太多的对象。为了使用享元模式，你需要确保你的对象是不可变的，这样你才能安全的共享。Net5中 String 池、Integer 池以及 Long 池都是很好的使用了享元模式的例子。\r\n\r\n**8、什么是责任链设计模式\\****\r\n\r\n答：责任链模式（Chain of Responsibility Pattern）为请求创建了一个接收者对象的链。这种模式给予请求的类型，对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中，通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求，那么它会把相同的请求传给下一个接收者，依此类推。\r\n\r\n**9、你可以说出几个在.Net5中使用的设计模式吗？**\r\n\r\n答：装饰器设计模式（Decorator design pattern）被用于多个.Net5 IO类中。单例模式（Singleton pattern）用于Runtime，Calendar和其他的一些类中。工厂模式（Factory pattern）被用于各种不可变的类如HttpClient，像HttpClientFactory，观察者模式（Observer pattern）被用于DiagnosticSource和很多的事件监听中。','设计模式面试题','f6462b48-9601-0253-6450-3a0ff538dfa4','00000000-0000-0000-0000-000000000000','2024-01-07 16:33:14','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,10),('fe4eb1ee-b642-bee2-a4e5-3a0ff53f8683',0,'\r\n- [SIPSorcery](https://github.com/sipsorcery/sipsorcery)  - 一个跨平台的C# .NET库，支持SIP、VoIP和WebRTC。','实时通信','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,86),('fe5aa364-eb6e-94ab-9505-3a0ff53f8681',0,'- [Dotnet CLI](https://github.com/dotnet/cli)  - 跨平台的.NET Core命令行工具链实用程序。','环境管理','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,40),('fee3893f-b76c-e7bf-ee76-3a0ff53f8681',0,'\r\n- [HandyControl](https://github.com/HandyOrg/HandyControl)  - 包含一些简单常用的WPF控件 \r\n- [Lara](https://github.com/integrativesoft/lara)  - Lara Web Engine是用C#开发Web用户界面的库 \r\n- [QtSharp](https://github.com/ddobrev/QtSharp)  - Qt的Mono/.NET绑定 \r\n- [Qml.Net](https://github.com/qmlnet/qmlnet)  - 适用于Mono/.NET/.NET Core的跨平台Qml/.NET集成 \r\n- [MahApps.Metro](https://github.com/MahApps/MahApps.Metro)  - 用于创建Metro风格WPF应用程序的工具包 \r\n- [Callisto](https://github.com/timheuer/callisto)  - 用于Windows 8 XAML应用程序的控件工具包，包含一些UI控件，以便根据Windows UI指南更轻松地创建Windows UI风格的应用程序。 \r\n- [ObjectListView](http://objectlistview.sourceforge.net/cs/index.html)  - ObjectListView是C#封装的.NET ListView，它使ListView更易于使用，并教会了它一些新技巧 \r\n- [DockPanelSuite](https://sourceforge.net/projects/dockpanelsuite/)  - 为.NET WinForms提供受Visual Studio启发的停靠库 \r\n- [AvalonEdit](https://github.com/icsharpcode/AvalonEdit)  - 用于SharpDevelop的基于WPF的文本编辑器组件 \r\n- [XWT](https://github.com/mono/xwt)  - 用于使用.NET和Mono创建桌面应用程序的跨平台UI工具包 \r\n- [Gtk#](https://github.com/mono/gtk-sharp)  - Gtk#是Mono/.NET对跨平台Gtk+ GUI工具包的绑定，也是大多数使用Mono构建的GUI应用程序的基础 \r\n- [MaterialDesignInXamlToolkit](http://materialdesigninxaml.net/)  - 用于创建Material Design样式的WPF应用程序的工具包 \r\n- [Eto.Forms](https://github.com/picoe/Eto)  - 跨平台GUI框架，适用于.NET和Mono的桌面和移动应用程序 \r\n- [Dragablz](https://github.com/ButchersBoy/Dragablz)  - 可拖动、可撕裂的WPF选项卡控件（类似于Chrome），支持布局和完全可主题化，包括与MahApps和Material Design兼容的主题。 \r\n- [Fluent.Ribbon](https://github.com/fluentribbon/Fluent.Ribbon)  - Fluent Ribbon控件套件是一个库，实现了用于WPF的类似Office和Windows 8的Ribbon。 \r\n- [Office Ribbon](https://github.com/RibbonWinForms/RibbonWinForms)  - 为WinForms实现的MS Office Ribbon的库。 \r\n- [MaterialSkin](https://github.com/IgnaceMaes/MaterialSkin)  - 为.NET WinForms的主题化，支持C#或VB.Net，符合Google的Material Design原则。 \r\n- [Xamarin.Forms](https://github.com/xamarin/Xamarin.Forms)  - 从单个共享的C#代码库构建iOS、Android和Windows的本机UI。 \r\n- [SciterSharp](https://github.com/ramon-mendes/SciterSharp)  - 使用HTML，以及Sciter引擎的所有功能（包括CSS3、SVG、脚本、AJAX、<video>等），创建.NET跨平台桌面应用程序。Sciter可用于商业用途。 \r\n- [Empty Keys UI](https://www.emptykeys.com/ui_library/)  - 多平台和多引擎基于XAML的用户界面库 **[免费][专有]** \r\n- [UWP Community Toolkit](https://github.com/windows-toolkit/WindowsCommunityToolkit)  - UWP Community Toolkit是一组辅助函数、自定义控件和应用程序服务。它简化并演示了为Windows 10构建UWP应用程序的常见开发人员任务。 \r\n- [ScintillaNET](https://github.com/jacobslusser/ScintillaNET)  - 用于Scintilla文本编辑器组件的Windows Forms控件（Scintilla被Notepad++使用） \r\n- [FastColoredTextBox](https://github.com/PavelTorgashov/FastColoredTextBox)  - 用于.NET的快速着色文本框组件。允许您创建带有语法突出显示的自定义文本编辑器。它适用于小、中、大和非常大的文件。 \r\n- [Avalonia](https://github.com/AvaloniaUI/Avalonia)  - 多平台.NET UI框架（以前称为Perspex）。 \r\n- [Modern UI for WPF - MUI](https://github.com/firstfloorsoftware/mui)  - 一组控件和样式，可将WPF应用程序转换为外观精美的现代UI应用程序。 \r\n- [WinApi](https://github.com/prasannavl/WinApi)  - 用于高性能Win32本地Interop的简单、直接、极薄的CLR库，带有自动化、窗口、DirectX、OpenGL和Skia助手。 \r\n- [Neutronium](https://github.com/NeutroniumCore/Neutronium)  - 使用HTML、CSS、javascript和MVVM绑定构建.NET桌面应用程序，如WPF。 \r\n- [Ooui](https://github.com/praeclarum/Ooui)  - 一个小型的跨平台UI库，将本机UI开发的简单性带到Web上 \r\n- [AdonisUI](https://github.com/benruehl/adonis-ui)  - 面向WPF应用程序的轻量级UI工具包，提供经典但增强的Windows可视化效果。 \r\n- [Windows UI Library](https://github.com/microsoft/microsoft-ui-xaml)  - Windows UI Library（WinUI）为Windows UWP应用程序提供了官方的本机Microsoft UI控件和功能。 \r\n- [Bunifu UI Framework](https://bunifuframework.com/)  - 精心打造的Winforms控件和组件，用于创建令人惊叹的现代应用程序UI。\r\n- [Ookii.Dialogs.Wpf](https://github.com/augustoproiete/ookii-dialogs-wpf)  - 使WPF应用程序能够访问常见的Windows对话框，如任务对话框、凭据对话框、进度对话框、文件夹浏览对话框等 \r\n- [Ookii.Dialogs.WinForms](https://github.com/augustoproiete/ookii-dialogs-winforms)  - 使Windows Forms应用程序能够访问常见的Windows对话框，如任务对话框、凭据对话框、进度对话框、文件夹浏览对话框等 \r\n- [UNO Platform](https://github.com/unoplatform)  - 为C#、XAML从单个代码库创建本机移动、桌面和WebAssembly的唯一平台。开源并提供专业支持。网站：[platform.uno](https://platform.uno/)\r\n','GUI','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,51),('ff864510-dcda-6307-a464-3a0ff53f867f',0,'* [Arch](https://github.com/Arch) -  .NET Core库的集合。\r\n  * [AutoHistory](https://github.com/Arch/AutoHistory) - 自动记录数据更改历史记录的插件。\r\n* [AspNetCore-Angular2-Universal](https://github.com/MarkPieszak/aspnetcore-angular2-universal) - 跨平台 - 用于SEO，Bootstrap，i18n国际化(ngx-translate)，Webpack的服务器端渲染，TypeScript，带Karma的单元测试，WebAPI REST设置，SignalR，Swagger文档等等！\r\n* [ASP.NET Core Starter Kit](https://github.com/kriasoft/aspnet-starter-kit) - 使用Visual Studio Code，C＃，F＃，JavaScript，ASP.NET Core，EF Core，React（ReactJS），Redux，Babel进行跨平台的Web开发。单页应用样板。\r\n* [aspnetcore-spa generator](https://github.com/aspnet/JavaScriptServices) -  Yeoman生成器，用于构建全新的ASP.NET Core单页面应用程序，该应用程序使用Angular 2 / React / React与Redux / Knockout / Aurelia在客户端上。\r\n* [ASP.Net Core Vue Starter](https://github.com/MarkPieszak/aspnetcore-Vue-starter) -  Asp.NETCore 2.0 Vue 2(ES6)SPA入门套件，包含路由，Vuex等等！\r\n* [bitwarden-core](https://github.com/bitwarden/core) - 核心基础设施后端(API，数据库等)[https://bitwarden.com](https://bitwarden.com)。\r\n* [dotNetify](https://github.com/dsuryd/dotNetify) - 构建实时HTML5 / C#.NET Web应用程序的简单，轻量级但功能强大的方法。\r\n* [generator-aspnet](https://github.com/OmniSharp/generator-aspnet) - 用于ASP.NET Core的yo生成器。\r\n* [Nucleus](https://github.com/alirizaadiyahsi/Nucleus) - 在后端使用ASP.NET Core API分层架构和基于JWT的身份验证的Vue启动应用程序模板\r\n* [react-aspnet-boilerplate](https://github.com/pauldotknopf/react-aspnet-boilerplate) - 使用ASP.NET Core 1构建同构React应用程序的起点，利用现有技术。\r\n* [saaskit](https://github.com/saaskit/saaskit) - 用于构建SaaS应用程序的开发人员工具包。\r\n* [serverlessDotNetStarter](https://github.com/pharindoko/serverlessDotNetStarter) - .NET Core入门解决方案-通过无服务器框架进行部署，并且可以在VS Code中进行本地调试。','入门套件','37ce4711-6459-430f-a837-3a0ff53d41c9','00000000-0000-0000-0000-000000000000','2024-01-07 16:38:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,6);
/*!40000 ALTER TABLE `Article` ENABLE KEYS */;

-- 
-- Definition of Auth
-- 

DROP TABLE IF EXISTS `Auth`;
CREATE TABLE IF NOT EXISTS `Auth` (
  `Id` varchar(36) NOT NULL,
  `UserId` varchar(36) NOT NULL,
  `OpenId` varchar(255) NOT NULL,
  `Name` varchar(255) NOT NULL,
  `AuthType` varchar(255) NOT NULL,
  `IsDeleted` tinyint(1) NOT NULL,
  `CreationTime` datetime NOT NULL,
  `ConcurrencyStamp` varchar(255) NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='第三方授权表';

-- 
-- Dumping data for table Auth
-- 

/*!40000 ALTER TABLE `Auth` DISABLE KEYS */;
INSERT INTO `Auth`(`Id`,`UserId`,`OpenId`,`Name`,`AuthType`,`IsDeleted`,`CreationTime`,`ConcurrencyStamp`) VALUES('133d4bc6-844d-3256-0e41-3a100382324f','4b58e3a5-8bff-a839-1530-3a0fdf076f1c','64BDE6B44BF79299F9A20311D8825F69','愿恶魔保佑','QQ',0,'2024-01-10 11:05:52','47f5e282557b47f287f34e75cfb83fd3'),('3bf1bd2d-3501-7736-df13-3a1004f0c503','5d59e9f6-0c2e-9755-4cd8-3a1004eed5fb','8704133','书签','Gitee',0,'2024-01-10 17:46:16','f91d858ff3ca433bad704cf42b5ab04f'),('514a7e9b-8c39-80f7-7d52-3a100638db4b','59cf7e31-e3e4-544e-1038-3a0f836cc538','3049273','橙子','Gitee',0,'2024-01-10 23:44:37','76e6715bc176452f8cef3033b632f468'),('7a887922-a54b-e8f5-05a1-3a1005e54dcc','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','8311700','Xwen','Gitee',0,'2024-01-10 22:13:21','f081a8e08c5d4c838218f78df86e260f'),('865f97ae-4418-5f8d-e204-3a1006371358','59cf7e31-e3e4-544e-1038-3a0f836cc538','E9306CEBD33CD612F8C040B976BA2D16','橙子','QQ',0,'2024-01-10 23:42:40','0e571806225e4f3d8e8dfed7859a6dd2'),('a6c6df0c-06de-f584-a41b-3a101e50a71c','2c2aa2ef-006c-6c61-e7c4-3a101e4fe1d8','99712EC8A8914027DDDA36F98187D770','有时候。。。','QQ',0,'2024-01-15 16:01:30','f2df1c4ce7d1409788c0459cd16e35f3'),('ca5770f9-369c-672a-1dd3-3a1004f0dda7','5d59e9f6-0c2e-9755-4cd8-3a1004eed5fb','F79DFCD4B7F1282E1D551FCBF8E7E5DC','书签','QQ',0,'2024-01-10 17:46:22','171f31a7e1334e268a300a5c5ec76db8');
/*!40000 ALTER TABLE `Auth` ENABLE KEYS */;

-- 
-- Definition of Banner
-- 

DROP TABLE IF EXISTS `Banner`;
CREATE TABLE IF NOT EXISTS `Banner` (
  `Id` varchar(36) NOT NULL,
  `Name` varchar(255) NOT NULL,
  `Logo` varchar(255) DEFAULT NULL,
  `Color` varchar(255) DEFAULT NULL,
  `IsDeleted` tinyint(1) NOT NULL,
  `CreationTime` datetime NOT NULL,
  `CreatorId` varchar(36) DEFAULT NULL,
  `LastModifierId` varchar(36) DEFAULT NULL,
  `LastModificationTime` datetime DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

-- 
-- Dumping data for table Banner
-- 

/*!40000 ALTER TABLE `Banner` DISABLE KEYS */;
INSERT INTO `Banner`(`Id`,`Name`,`Logo`,`Color`,`IsDeleted`,`CreationTime`,`CreatorId`,`LastModifierId`,`LastModificationTime`) VALUES('36a8208f-cc3e-03b4-9c6a-3a0f8051fded','欢迎','https://i.miji.bid/2023/12/15/e6478d5d15a4b941077e336790c414f6.png','',0,'2023-12-15 23:42:58',NULL,NULL,NULL),('5e183433-188c-043b-e69e-3a0f8051fdfd','前端','https://i.miji.bid/2023/12/15/07e9291c9311889a31a2b433d4decca0.jpeg','',0,'2023-12-15 23:42:58',NULL,NULL,NULL);
/*!40000 ALTER TABLE `Banner` ENABLE KEYS */;

-- 
-- Definition of Comment
-- 

DROP TABLE IF EXISTS `Comment`;
CREATE TABLE IF NOT EXISTS `Comment` (
  `Id` varchar(36) NOT NULL,
  `IsDeleted` tinyint(1) NOT NULL,
  `Content` varchar(500) NOT NULL,
  `DiscussId` varchar(36) NOT NULL,
  `ParentId` varchar(36) NOT NULL COMMENT '被回复的CommentId',
  `CreationTime` datetime NOT NULL,
  `RootId` varchar(36) NOT NULL,
  `CreatorId` varchar(36) DEFAULT NULL,
  `LastModifierId` varchar(36) DEFAULT NULL,
  `LastModificationTime` datetime DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='评论表';

-- 
-- Dumping data for table Comment
-- 

/*!40000 ALTER TABLE `Comment` DISABLE KEYS */;
INSERT INTO `Comment`(`Id`,`IsDeleted`,`Content`,`DiscussId`,`ParentId`,`CreationTime`,`RootId`,`CreatorId`,`LastModifierId`,`LastModificationTime`) VALUES('037c1e42-68c4-6899-875f-3a0fdfecb5fc',0,'加油，支持','aaa00329-7f35-d3fe-d258-3a0f8380b742','00000000-0000-0000-0000-000000000000','2024-01-03 13:15:53','00000000-0000-0000-0000-000000000000','806b5e47-a685-2f16-8481-3a0fdfeb44e2',NULL,NULL),('132d84c1-c525-c675-15a5-3a0fb10fa215',0,'赞+1','46850bb5-45c0-015d-53a5-3a0fb10f6a61','54fcc94a-91a0-5ba1-7053-3a0fb10f8b00','2023-12-25 10:51:52','54fcc94a-91a0-5ba1-7053-3a0fb10f8b00','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL),('15998fa3-c41c-0508-8bbf-3a0ff62a9b7b',0,'好像看不到内容','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','00000000-0000-0000-0000-000000000000','2024-01-07 20:55:08','00000000-0000-0000-0000-000000000000','feaafa96-e35a-fe25-6810-3a0ff6291623',NULL,NULL),('177f1dc6-6dbd-22fb-1109-3a0fff94caf0',0,'加一','330d1540-45b0-9a84-880a-3a0fff93c9ad','00000000-0000-0000-0000-000000000000','2024-01-09 16:47:42','00000000-0000-0000-0000-000000000000','be3f42e6-e6ae-25ab-7973-3a0ffe0c6503',NULL,NULL),('17ec2287-4d3c-7118-6386-3a0feac7c250',0,'在右边菜单','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','5072fdc8-6b18-69d4-b052-3a0fdfddc833','2024-01-05 15:51:20','5072fdc8-6b18-69d4-b052-3a0fdfddc833','0a6a0afd-6a31-4729-0c76-3a0fb8d4f73c',NULL,NULL),('18519ca3-edfc-5014-64df-3a0fb5ddc271',0,'就看你的架构是MVC还是前后端分离，前后端分离每次客户端请求，服务端的aspnet_sessionid都会变，无法保留在同一个会话中，所以每次请求后session都是获取不到，前后端分离这种目前我遇到的是不行的，也不建议这样','417df912-05a4-ea75-f281-3a0fb11937eb','00000000-0000-0000-0000-000000000000','2023-12-26 09:15:30','00000000-0000-0000-0000-000000000000','4e24c804-5b3b-2974-9efc-3a0fb5d30810',NULL,NULL),('19abe08c-1a98-6e3f-ab0a-3a0fe032b50e',0,'改成小写也不行    还是同样的错误','37496047-2805-dda9-a94f-3a0fe02c7ffa','52f76d4d-9cc4-f07b-fc42-3a0fe02eaca5','2024-01-03 14:32:20','52f76d4d-9cc4-f07b-fc42-3a0fe02eaca5','69371804-7f8b-2f4d-d9b3-3a0fb0adfcde',NULL,NULL),('1be1eb68-15d5-f392-29eb-3a0fe681a876',0,'111','4a14cce8-795a-8c68-8c2a-3a0fe1c7215a','00000000-0000-0000-0000-000000000000','2024-01-04 19:56:17','00000000-0000-0000-0000-000000000000','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL),('1c6fa7fa-cbc2-128e-abdd-3a0fea56a037',0,'哇哈哈二次回来使用了','e9e69a38-ce1e-06f5-7944-3a0fdc942ef3','00000000-0000-0000-0000-000000000000','2024-01-05 13:47:46','00000000-0000-0000-0000-000000000000','9d5c2790-8bdf-6c73-474c-3a0fea5501e7',NULL,NULL),('1db9609e-215d-1076-fbd2-3a0fae2d4ff2',0,'111','aaa00329-7f35-d3fe-d258-3a0f8380b742','8d3b7240-ce56-f370-c932-3a0fa9fcacaa','2023-12-24 21:25:26','8d3b7240-ce56-f370-c932-3a0fa9fcacaa','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL),('1ddd89f7-686b-9eb8-b44b-3a0fdb0d6bba',0,'社区每天都在更新哦~迭代速度飞快，每天都不一样，具备专业的团队来维护。有些东西是暂时的占位符，那个v8是放徽章系统的','fee1c7d4-999a-390a-d2a8-3a0fda7ed85f','00000000-0000-0000-0000-000000000000','2024-01-02 14:33:30','00000000-0000-0000-0000-000000000000','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL),('1ef893b6-e5f2-c72b-e376-3a0fb5f24ba8',0,'是这样吗？我是前后端分离项目，是不是前端分离项目不能用session啊。但是我看.netcore里面有这个方法，百思不得其解','417df912-05a4-ea75-f281-3a0fb11937eb','18519ca3-edfc-5014-64df-3a0fb5ddc271','2023-12-26 09:37:56','18519ca3-edfc-5014-64df-3a0fb5ddc271','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL),('21b74108-fa3e-c7c4-1fe6-3a0fe197a1f6',0,'安排上了哦已经','3e6d5b45-5095-7eae-cdf8-3a0fdb2bd515','00000000-0000-0000-0000-000000000000','2024-01-03 21:02:11','00000000-0000-0000-0000-000000000000','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL),('24a43b78-9399-5ed7-94f0-3a0fa9fd2bba',0,'123124','aaa00329-7f35-d3fe-d258-3a0f8380b742','00000000-0000-0000-0000-000000000000','2023-12-24 01:54:22','00000000-0000-0000-0000-000000000000','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL),('2c852ea8-511a-0181-fb5b-3a100314ff43',0,'你好，framework里面的是基本不用去改动他的，路由对外是提供修改统一的操作的，在管道模型加载动态api的地方，对AbpAspNetCoreMvcOptions进行配置，修改ConventionalControllers中的RootPath即可','b03f39bb-675f-4d7d-bb37-3a100308eef5','00000000-0000-0000-0000-000000000000','2024-01-10 09:06:35','00000000-0000-0000-0000-000000000000','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL),('2e3d575a-cbb1-298c-ce76-3a100315ed01',0,'如果该操作无法达到你要的要求，也可以通过YiConventionalRouteBuilder中进行修改，在第31行可以看一下','b03f39bb-675f-4d7d-bb37-3a100308eef5','00000000-0000-0000-0000-000000000000','2024-01-10 09:07:36','00000000-0000-0000-0000-000000000000','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL),('35214bec-3755-225d-35e3-3a0fad4ef4e1',0,'支持','aaa00329-7f35-d3fe-d258-3a0f8380b742','00000000-0000-0000-0000-000000000000','2023-12-24 17:22:33','00000000-0000-0000-0000-000000000000','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL),('38c3cd42-5bdd-36f8-598e-3a0fb6540fe3',0,'前端axios请求时，加上withCredentials = true，然后保证不跨域，这两个条件具备看下是否能获取到，我这确实没成功，你可以试试','417df912-05a4-ea75-f281-3a0fb11937eb','1ef893b6-e5f2-c72b-e376-3a0fb5f24ba8','2023-12-26 11:24:43','18519ca3-edfc-5014-64df-3a0fb5ddc271','4e24c804-5b3b-2974-9efc-3a0fb5d30810',NULL,NULL),('38ca121b-eff5-0a11-1aa4-3a0fe48e8d8a',0,'视频教程，一开始是打算有的，看看你们打算先出哪一块内容','e9e69a38-ce1e-06f5-7944-3a0fdc942ef3','4665fe66-6020-419f-4e87-3a0fe45cbe16','2024-01-04 10:51:08','4665fe66-6020-419f-4e87-3a0fe45cbe16','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL),('3a6fb7fb-4b71-47cd-bfe6-3a0fdba18680',0,'你说的有道理，今天晚上安排','3e6d5b45-5095-7eae-cdf8-3a0fdb2bd515','00000000-0000-0000-0000-000000000000','2024-01-02 17:15:16','00000000-0000-0000-0000-000000000000','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL),('3dcca978-499b-cefb-d6ab-3a0fad4f0705',0,'支持+1','aaa00329-7f35-d3fe-d258-3a0f8380b742','35214bec-3755-225d-35e3-3a0fad4ef4e1','2023-12-24 17:22:38','35214bec-3755-225d-35e3-3a0fad4ef4e1','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL),('4665fe66-6020-419f-4e87-3a0fe45cbe16',0,'大佬，有没有计划出视频教程','e9e69a38-ce1e-06f5-7944-3a0fdc942ef3','00000000-0000-0000-0000-000000000000','2024-01-04 09:56:44','00000000-0000-0000-0000-000000000000','44a18a90-6cbe-9460-5d45-3a0fe45b44a9',NULL,NULL),('5072fdc8-6b18-69d4-b052-3a0fdfddc833',0,'东西呢','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','00000000-0000-0000-0000-000000000000','2024-01-03 12:59:34','00000000-0000-0000-0000-000000000000','989124e5-3324-0d4c-6a62-3a0fdfdb82e1',NULL,NULL),('52f76d4d-9cc4-f07b-fc42-3a0fe02eaca5',0,'大小写问题，传name即可。默认js的命名规范，是以小驼峰命名法','37496047-2805-dda9-a94f-3a0fe02c7ffa','00000000-0000-0000-0000-000000000000','2024-01-03 14:27:56','00000000-0000-0000-0000-000000000000','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL),('54fcc94a-91a0-5ba1-7053-3a0fb10f8b00',0,'给我自己点个赞','46850bb5-45c0-015d-53a5-3a0fb10f6a61','00000000-0000-0000-0000-000000000000','2023-12-25 10:51:46','00000000-0000-0000-0000-000000000000','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL),('55c56247-bdaf-d476-da47-3a0fea5813dd',0,'跟着测试一下跟着测试一下跟着测试一下跟着测试一下跟着测试一下跟着测试一下跟着测试一下跟着测试','252ad40f-be77-3bc6-e31f-3a0fb1718e26','00000000-0000-0000-0000-000000000000','2024-01-05 13:49:21','00000000-0000-0000-0000-000000000000','9d5c2790-8bdf-6c73-474c-3a0fea5501e7',NULL,NULL),('5b96a1eb-7c08-8ad0-f195-3a1004f2a049',0,'1','aaa00329-7f35-d3fe-d258-3a0f8380b742','ea869135-6a09-d9c0-1a9d-3a1004f27e4a','2024-01-10 17:48:17','ea869135-6a09-d9c0-1a9d-3a1004f27e4a','5d59e9f6-0c2e-9755-4cd8-3a1004eed5fb',NULL,NULL),('5c4cbd4d-6e78-a9f0-a629-3a0fa9ff0307',0,'你好','67bbbd51-8f39-6bc3-46fe-3a0fa9fe8385','00000000-0000-0000-0000-000000000000','2023-12-24 01:56:22','00000000-0000-0000-0000-000000000000','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL),('5e4f9f62-461f-9ad8-aeb8-3a1005755bba',0,'嗯嗯，解决了，谢谢 \n   options.ConventionalControllers.Create(typeof(YiFrameworkForumApplicationModule).Assembly, options  => {\n       options.RemoteServiceName = \"forum\";\n       options.RootPath = \"forum\";\n   });','b03f39bb-675f-4d7d-bb37-3a100308eef5','00000000-0000-0000-0000-000000000000','2024-01-10 20:11:05','00000000-0000-0000-0000-000000000000','691de7d2-8514-1602-c558-3a1003045d25',NULL,NULL),('6062d330-c35c-d42c-74db-3a0fdac22447',0,'6wyuiop654','aaa00329-7f35-d3fe-d258-3a0f8380b742','3dcca978-499b-cefb-d6ab-3a0fad4f0705','2024-01-02 13:11:17','35214bec-3755-225d-35e3-3a0fad4ef4e1','84f17d54-d35b-5581-e5d3-3a0fdabcaeae',NULL,NULL),('62f5fb0e-dc83-b86d-1520-3a0fea905bf4',0,'大佬 什么时候更新呀','e89c9593-f337-ada7-d108-3a0f83ae48e6','00000000-0000-0000-0000-000000000000','2024-01-05 14:50:50','00000000-0000-0000-0000-000000000000','899ea329-a63f-bba9-0f68-3a0fea8fd365',NULL,NULL),('6cea0a76-cc7a-7680-05d5-3a0fdc896302',0,'你好，已经安排了，可点击联系我们','3e6d5b45-5095-7eae-cdf8-3a0fdb2bd515','00000000-0000-0000-0000-000000000000','2024-01-02 21:28:32','00000000-0000-0000-0000-000000000000','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL),('6d9338f2-2ca3-39d0-f538-3a0fdb0b8d94',0,'哈哈哈哈，都是开源社区了，人均v8不是很正常嘛？','fee1c7d4-999a-390a-d2a8-3a0fda7ed85f','00000000-0000-0000-0000-000000000000','2024-01-02 14:31:28','00000000-0000-0000-0000-000000000000','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL),('7850a53b-8317-0ca0-1ff4-3a0fb119969e',0,'请教各位大佬了，今天刚遇到的问题，小白一个','417df912-05a4-ea75-f281-3a0fb11937eb','00000000-0000-0000-0000-000000000000','2023-12-25 11:02:45','00000000-0000-0000-0000-000000000000','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL),('7fe0758c-3052-7ae9-0a25-3a0fac407440',0,'不错','aaa00329-7f35-d3fe-d258-3a0f8380b742','24a43b78-9399-5ed7-94f0-3a0fa9fd2bba','2023-12-24 12:27:06','24a43b78-9399-5ed7-94f0-3a0fa9fd2bba','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL),('807a831e-53bd-fa08-60e5-3a0fb10fb839',0,'赞+2','46850bb5-45c0-015d-53a5-3a0fb10f6a61','132d84c1-c525-c675-15a5-3a0fb10fa215','2023-12-25 10:51:58','54fcc94a-91a0-5ba1-7053-3a0fb10f8b00','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL),('89fd4d80-880f-951d-693b-3a101e6d9a1b',0,'暂时还没有微服务的部署计划，后续可能也会有的\n不过模块化完美支持微服务，具体细节可以联系我','3987c09e-720c-607b-fce0-3a101d2107f8','00000000-0000-0000-0000-000000000000','2024-01-15 16:33:07','00000000-0000-0000-0000-000000000000','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL),('8d3b7240-ce56-f370-c932-3a0fa9fcacaa',0,'支持','aaa00329-7f35-d3fe-d258-3a0f8380b742','00000000-0000-0000-0000-000000000000','2023-12-24 01:53:49','00000000-0000-0000-0000-000000000000','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL),('9169899f-71b0-e7e2-a55b-3a1004f2abeb',0,'2','aaa00329-7f35-d3fe-d258-3a0f8380b742','5b96a1eb-7c08-8ad0-f195-3a1004f2a049','2024-01-10 17:48:20','ea869135-6a09-d9c0-1a9d-3a1004f27e4a','5d59e9f6-0c2e-9755-4cd8-3a1004eed5fb',NULL,NULL),('95e182f0-d091-6f8d-304a-3a0fdcbe136e',0,'感谢你宝贵的建议，改建议已移交到开发计划中，后续完成，将会通知你','e9e69a38-ce1e-06f5-7944-3a0fdc942ef3','fd052f7a-a03a-b04f-a3ec-3a0fdcbcf174','2024-01-02 22:26:05','fd052f7a-a03a-b04f-a3ec-3a0fdcbcf174','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL),('9a516e11-f4d3-0886-341b-3a0fac3e50b2',0,'支持','aaa00329-7f35-d3fe-d258-3a0f8380b742','24a43b78-9399-5ed7-94f0-3a0fa9fd2bba','2023-12-24 12:24:45','24a43b78-9399-5ed7-94f0-3a0fa9fd2bba','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL),('a33ace52-b3d1-3827-d5c9-3a0fb1afc981',0,'6啥呢','252ad40f-be77-3bc6-e31f-3a0fb1718e26','00000000-0000-0000-0000-000000000000','2023-12-25 13:46:48','00000000-0000-0000-0000-000000000000','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL),('a9a1854f-21f3-5d6d-92d9-3a0fdac23a52',0,'456474747474747','aaa00329-7f35-d3fe-d258-3a0f8380b742','3dcca978-499b-cefb-d6ab-3a0fad4f0705','2024-01-02 13:11:22','35214bec-3755-225d-35e3-3a0fad4ef4e1','84f17d54-d35b-5581-e5d3-3a0fdabcaeae',NULL,NULL),('b07eb564-1732-7af9-07bb-3a0fe03d0bb5',0,'解决了，需要加 [FromBody]    才可以使用   raw  方式传输参数','37496047-2805-dda9-a94f-3a0fe02c7ffa','00000000-0000-0000-0000-000000000000','2024-01-03 14:43:38','00000000-0000-0000-0000-000000000000','69371804-7f8b-2f4d-d9b3-3a0fb0adfcde',NULL,NULL),('b211c649-a8e6-8a79-36e1-3a0fad4f89ce',0,'恭喜恭喜','8593141f-ca6b-dbac-7c57-3a0facd5b208','00000000-0000-0000-0000-000000000000','2023-12-24 17:23:11','00000000-0000-0000-0000-000000000000','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL),('b23f1a22-c1fc-9430-f963-3a10035d1d43',0,'在右边目录里面','8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','15998fa3-c41c-0508-8bbf-3a0ff62a9b7b','2024-01-10 10:25:22','15998fa3-c41c-0508-8bbf-3a0ff62a9b7b','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL),('b626227c-2840-c636-3a6f-3a0ff4a013ea',0,'已经上线了','e9e69a38-ce1e-06f5-7944-3a0fdc942ef3','95e182f0-d091-6f8d-304a-3a0fdcbe136e','2024-01-07 13:44:12','fd052f7a-a03a-b04f-a3ec-3a0fdcbcf174','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL),('b7226e6a-d83e-f64c-9fba-3a0fe0330198',0,'接口参数也改成小写了也不行','37496047-2805-dda9-a94f-3a0fe02c7ffa','52f76d4d-9cc4-f07b-fc42-3a0fe02eaca5','2024-01-03 14:32:40','52f76d4d-9cc4-f07b-fc42-3a0fe02eaca5','69371804-7f8b-2f4d-d9b3-3a0fb0adfcde',NULL,NULL),('b9da9c48-ef19-fdac-57cc-3a1004efc748',0,'一直在更新','e89c9593-f337-ada7-d108-3a0f83ae48e6','62f5fb0e-dc83-b86d-1520-3a0fea905bf4','2024-01-10 17:45:11','62f5fb0e-dc83-b86d-1520-3a0fea905bf4','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL),('bc7baa9a-4472-a972-816a-3a1000b2dbd2',0,'可以的','330d1540-45b0-9a84-880a-3a0fff93c9ad','00000000-0000-0000-0000-000000000000','2024-01-09 22:00:09','00000000-0000-0000-0000-000000000000','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL),('bebf88f1-5378-4697-b9ea-3a1004f2b744',0,'3','aaa00329-7f35-d3fe-d258-3a0f8380b742','5b96a1eb-7c08-8ad0-f195-3a1004f2a049','2024-01-10 17:48:23','ea869135-6a09-d9c0-1a9d-3a1004f27e4a','5d59e9f6-0c2e-9755-4cd8-3a1004eed5fb',NULL,NULL),('c38b1973-d3d7-cd9c-b142-3a0fe0376726',0,'测试了，直接url传参可以','37496047-2805-dda9-a94f-3a0fe02c7ffa','52f76d4d-9cc4-f07b-fc42-3a0fe02eaca5','2024-01-03 14:37:28','52f76d4d-9cc4-f07b-fc42-3a0fe02eaca5','69371804-7f8b-2f4d-d9b3-3a0fb0adfcde',NULL,NULL),('c4e21b5c-d661-503d-efa3-3a100b4d15ae',0,'2024 加油','aaa00329-7f35-d3fe-d258-3a0f8380b742','00000000-0000-0000-0000-000000000000','2024-01-11 23:24:49','00000000-0000-0000-0000-000000000000','eeb2b210-3f18-e3a6-fd89-3a100b40bc07',NULL,NULL),('dd33b707-8c7e-cf69-2268-3a0f9f552105',0,'评论测试','5946e4ac-f276-41ec-4d13-3a0f9f308637','00000000-0000-0000-0000-000000000000','2023-12-22 00:14:37','00000000-0000-0000-0000-000000000000','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL),('e0927ce6-6689-bd22-bb45-3a1009a29e7f',0,'点个赞学习下。','e9e69a38-ce1e-06f5-7944-3a0fdc942ef3','00000000-0000-0000-0000-000000000000','2024-01-11 15:39:00','00000000-0000-0000-0000-000000000000','cfa14797-eb98-cbdf-f4de-3a1009a1c9af',NULL,NULL),('e0cb9db6-5ff9-973e-8693-3a0fac71b7ba',0,'1','5946e4ac-f276-41ec-4d13-3a0f9f308637','00000000-0000-0000-0000-000000000000','2023-12-24 13:20:54','00000000-0000-0000-0000-000000000000','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL),('e53dcc26-bf84-1a59-a36b-3a0fac70930b',0,'非常nice','5946e4ac-f276-41ec-4d13-3a0f9f308637','00000000-0000-0000-0000-000000000000','2023-12-24 13:19:39','00000000-0000-0000-0000-000000000000','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL),('e844927b-434a-383a-e9e9-3a0fac71f4f5',0,'感觉不错哦','5946e4ac-f276-41ec-4d13-3a0f9f308637','dd33b707-8c7e-cf69-2268-3a0f9f552105','2023-12-24 13:21:10','dd33b707-8c7e-cf69-2268-3a0f9f552105','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL),('ea869135-6a09-d9c0-1a9d-3a1004f27e4a',0,'支持','aaa00329-7f35-d3fe-d258-3a0f8380b742','00000000-0000-0000-0000-000000000000','2024-01-10 17:48:09','00000000-0000-0000-0000-000000000000','5d59e9f6-0c2e-9755-4cd8-3a1004eed5fb',NULL,NULL),('efd6cdbf-275b-0ebf-c7c3-3a0fac40cda3',0,'测试评论','5946e4ac-f276-41ec-4d13-3a0f9f308637','dd33b707-8c7e-cf69-2268-3a0f9f552105','2023-12-24 12:27:29','dd33b707-8c7e-cf69-2268-3a0f9f552105','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL),('f2abfa28-c68c-65cb-d417-3a0fe200a5e6',0,'支持','aaa00329-7f35-d3fe-d258-3a0f8380b742','00000000-0000-0000-0000-000000000000','2024-01-03 22:56:54','00000000-0000-0000-0000-000000000000','2d407f53-71c5-b2b6-ccdd-3a0fe1fed2a0',NULL,NULL),('fb12a207-6a2b-dd50-a3b4-3a0fbb96882f',0,'你好~.netcore是支持cookies和sessions的，只是默认情况是关闭的，只需要添加services.AddSession();和app.UseSession();即可，但是现在不流行使用sessions了，一般可以使用jwt+缓存代替中心化\ncookies可直接使用\n直接通过：\n\n            var cookieKeyName = \"C-KeyName\";\n            var cookie = HttpContext.Request.Cookies[cookieKeyName];\n            if (string.IsNullOrWhiteSpace(cookie))\n            {\n                cookie = DateTime.Now.ToString(\"yyyyMMdd-HHmmss\");\n                HttpContext.Response.Cookies.Append(cookieKeyName, cookie);\n            }\nhttp对象获取接口啦~','417df912-05a4-ea75-f281-3a0fb11937eb','38c3cd42-5bdd-36f8-598e-3a0fb6540fe3','2023-12-27 11:55:25','18519ca3-edfc-5014-64df-3a0fb5ddc271','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL),('fd052f7a-a03a-b04f-a3ec-3a0fdcbcf174',0,'牛啊，牛啊，希望能够在首页显示当前在线人数和注册人数，感觉很有意义','e9e69a38-ce1e-06f5-7944-3a0fdc942ef3','00000000-0000-0000-0000-000000000000','2024-01-02 22:24:51','00000000-0000-0000-0000-000000000000','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL);
/*!40000 ALTER TABLE `Comment` ENABLE KEYS */;

-- 
-- Definition of Config
-- 

DROP TABLE IF EXISTS `Config`;
CREATE TABLE IF NOT EXISTS `Config` (
  `Id` varchar(36) NOT NULL,
  `ConfigName` varchar(255) NOT NULL COMMENT '配置名称',
  `ConfigKey` varchar(255) NOT NULL COMMENT '配置键',
  `ConfigValue` varchar(255) NOT NULL COMMENT '配置值',
  `ConfigType` varchar(255) DEFAULT NULL COMMENT '配置类别',
  `OrderNum` int NOT NULL COMMENT '排序字段',
  `Remark` varchar(255) DEFAULT NULL COMMENT '描述',
  `IsDeleted` tinyint(1) NOT NULL,
  `CreationTime` datetime NOT NULL,
  `CreatorId` varchar(36) DEFAULT NULL,
  `LastModifierId` varchar(36) DEFAULT NULL,
  `LastModificationTime` datetime DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='配置表';

-- 
-- Dumping data for table Config
-- 

/*!40000 ALTER TABLE `Config` DISABLE KEYS */;
INSERT INTO `Config`(`Id`,`ConfigName`,`ConfigKey`,`ConfigValue`,`ConfigType`,`OrderNum`,`Remark`,`IsDeleted`,`CreationTime`,`CreatorId`,`LastModifierId`,`LastModificationTime`) VALUES('41aa7450-a8ec-bddd-0e90-3a0f7ac8e8f1','站点底部信息','bbs.site.bottom','你好世界',NULL,0,NULL,0,'2023-12-14 21:55:08',NULL,NULL,NULL),('99b9e443-869b-f80a-0e53-3a0f7ac8e8ee','站点作者','bbs.site.author','橙子',NULL,0,NULL,0,'2023-12-14 21:55:08',NULL,NULL,NULL),('b2e1633f-c522-5012-e082-3a0f7ac8e8f0','站点Icp备案','bbs.site.icp','赣ICP备20008025号',NULL,0,NULL,0,'2023-12-14 21:55:08',NULL,NULL,NULL),('e9b484f8-f1ac-763b-d74e-3a0f7ac8e8e3','站点名称','bbs.site.name','意社区',NULL,0,NULL,0,'2023-12-14 21:55:08',NULL,NULL,NULL);
/*!40000 ALTER TABLE `Config` ENABLE KEYS */;

-- 
-- Definition of Dept
-- 

DROP TABLE IF EXISTS `Dept`;
CREATE TABLE IF NOT EXISTS `Dept` (
  `Id` varchar(36) NOT NULL COMMENT '主键',
  `IsDeleted` tinyint(1) NOT NULL COMMENT '逻辑删除',
  `CreationTime` datetime NOT NULL COMMENT '创建时间',
  `CreatorId` varchar(36) DEFAULT NULL COMMENT '创建者',
  `LastModifierId` varchar(36) DEFAULT NULL COMMENT '最后修改者',
  `LastModificationTime` datetime DEFAULT NULL COMMENT '最后修改时间',
  `OrderNum` int NOT NULL COMMENT '排序',
  `State` tinyint(1) NOT NULL COMMENT '状态',
  `DeptName` varchar(255) NOT NULL COMMENT '部门名称',
  `DeptCode` varchar(255) NOT NULL COMMENT '部门编码',
  `Leader` varchar(255) DEFAULT NULL COMMENT '负责人',
  `ParentId` varchar(36) NOT NULL COMMENT '父级id',
  `Remark` varchar(255) DEFAULT NULL COMMENT '描述',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='部门表';

-- 
-- Dumping data for table Dept
-- 

/*!40000 ALTER TABLE `Dept` DISABLE KEYS */;
INSERT INTO `Dept`(`Id`,`IsDeleted`,`CreationTime`,`CreatorId`,`LastModifierId`,`LastModificationTime`,`OrderNum`,`State`,`DeptName`,`DeptCode`,`Leader`,`ParentId`,`Remark`) VALUES('03639e82-eda6-d936-461e-3a0f7ac8e741',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'市场部门','',NULL,'53d2910b-5df0-e7d6-d199-3a0f7ac8e741',NULL),('21bdf875-6ee0-16e2-4f12-3a0f7ac8e741',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'测试部门','',NULL,'399b6dee-7297-a918-e6d9-3a0f7ac8e741',NULL),('399b6dee-7297-a918-e6d9-3a0f7ac8e741',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'深圳总公司','',NULL,'ff27a730-168f-860a-f230-3a0f7ac8e740',NULL),('48e1641c-76f2-1f2b-0ec3-3a0f7ac8e741',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'财务部门','',NULL,'53d2910b-5df0-e7d6-d199-3a0f7ac8e741',NULL),('53d2910b-5df0-e7d6-d199-3a0f7ac8e741',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'江西总公司','',NULL,'ff27a730-168f-860a-f230-3a0f7ac8e740',NULL),('5dda9441-227c-5767-562e-3a0f7ac8e741',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'研发部门','',NULL,'399b6dee-7297-a918-e6d9-3a0f7ac8e741',NULL),('b9cdf183-c6e7-2ea0-fad9-3a0f7ac8e741',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'财务部门','',NULL,'399b6dee-7297-a918-e6d9-3a0f7ac8e741',NULL),('c340f386-f939-921a-039a-3a0f7ac8e741',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'市场部门','',NULL,'399b6dee-7297-a918-e6d9-3a0f7ac8e741',NULL),('c67af9cf-f15b-20b9-92ba-3a0f7ac8e741',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'运维部门','',NULL,'399b6dee-7297-a918-e6d9-3a0f7ac8e741',NULL),('ff27a730-168f-860a-f230-3a0f7ac8e740',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'橙子科技','Yi','橙子','00000000-0000-0000-0000-000000000000','如名所指');
/*!40000 ALTER TABLE `Dept` ENABLE KEYS */;

-- 
-- Definition of Dictionary
-- 

DROP TABLE IF EXISTS `Dictionary`;
CREATE TABLE IF NOT EXISTS `Dictionary` (
  `Id` varchar(36) NOT NULL COMMENT '主键',
  `IsDeleted` tinyint(1) NOT NULL COMMENT '逻辑删除',
  `OrderNum` int NOT NULL COMMENT '排序',
  `State` tinyint(1) NOT NULL COMMENT '状态',
  `Remark` varchar(255) DEFAULT NULL COMMENT '描述',
  `ListClass` varchar(255) DEFAULT NULL COMMENT 'tag类型',
  `CssClass` varchar(255) DEFAULT NULL COMMENT 'tagClass',
  `DictType` varchar(255) NOT NULL COMMENT '字典类型',
  `DictLabel` varchar(255) DEFAULT NULL COMMENT '字典标签',
  `DictValue` varchar(255) NOT NULL COMMENT '字典值',
  `IsDefault` tinyint(1) NOT NULL COMMENT '是否为该类型的默认值',
  `CreationTime` datetime NOT NULL,
  `CreatorId` varchar(36) DEFAULT NULL,
  `LastModifierId` varchar(36) DEFAULT NULL,
  `LastModificationTime` datetime DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

-- 
-- Dumping data for table Dictionary
-- 

/*!40000 ALTER TABLE `Dictionary` DISABLE KEYS */;
INSERT INTO `Dictionary`(`Id`,`IsDeleted`,`OrderNum`,`State`,`Remark`,`ListClass`,`CssClass`,`DictType`,`DictLabel`,`DictValue`,`IsDefault`,`CreationTime`,`CreatorId`,`LastModifierId`,`LastModificationTime`) VALUES('1f69d8cc-f88f-e705-16ae-3a0f7ac8e7b1',0,100,1,'默认分组',NULL,NULL,'sys_job_group','默认','DEFAULT',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('2236b568-1152-1e22-0169-3a0f7ac8e7b1',0,99,1,'隐藏菜单',NULL,NULL,'sys_show_hide','隐藏','false',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('25694b27-d7f4-ec53-8b8f-3a0f7ac8e7b2',0,99,1,'关闭状态','danger',NULL,'sys_notice_status','关闭','1',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('2f38485e-7b86-c1a2-4e94-3a0f7ac8e7af',0,100,1,'性别男',NULL,NULL,'sys_user_sex','男','0',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('2fae46c7-291b-1ef2-7fcb-3a0f7afc2714',0,95,1,'',NULL,NULL,'bbs_type_lable','产品','5',0,'2023-12-14 22:51:06',NULL,NULL,NULL),('3620d1e4-5927-716f-8396-3a0f7ac8e7b2',0,93,1,'生成代码操作',NULL,NULL,'sys_oper_type','生成代码','8',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('3657bf3d-6115-c3f1-9cd9-3a0f7ac8e7b1',0,100,1,'显示菜单',NULL,NULL,'sys_show_hide','显示','true',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('36fdbeef-7b97-ae4e-f118-3a0f7ac8e7b2',0,97,1,'授权操作',NULL,NULL,'sys_oper_type','授权','4',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('4a2b2ca7-b34b-bd4e-9cf3-3a0f7ac8e7b1',0,99,1,'公告',NULL,NULL,'sys_notice_type','公告','2',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('4e4f2f16-db46-64ac-df6e-3a0f7afc2715',0,92,1,'',NULL,NULL,'bbs_type_lable','.Net','8',0,'2023-12-14 22:51:06',NULL,NULL,NULL),('51f4afec-91e8-8ecf-7f45-3a0f7afc2715',0,89,1,'',NULL,NULL,'bbs_type_lable','Abp.vNext','11',0,'2023-12-14 22:51:06',NULL,NULL,NULL),('58e39d7b-05c1-3dfb-efda-3a0f7ac8e7b1',0,99,1,'停用状态','danger',NULL,'sys_normal_disable','停用','false',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('5da47850-d40a-23b7-04a3-3a0f7ac8e7b2',0,92,1,'清空数据操作','danger',NULL,'sys_oper_type','清空数据','9',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('5e204418-91b7-5d99-50ad-3a0f7ac8e7b1',0,99,1,'系统分组',NULL,NULL,'sys_job_group','系统','SYSTEM',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('61ad920d-fad6-4d40-d8f1-3a0f7afc2714',0,97,1,'',NULL,NULL,'bbs_type_lable','测试','3',0,'2023-12-14 22:51:06',NULL,NULL,NULL),('66f595d4-c244-3126-5909-3a0f7ac8e7b1',0,100,1,'正常状态',NULL,NULL,'sys_job_status','正常','0',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('696a00a2-84a9-52bc-d195-3a0f7afc2715',0,90,1,'',NULL,NULL,'bbs_type_lable','Asp.NetCore','10',0,'2023-12-14 22:51:06',NULL,NULL,NULL),('72251432-c402-f018-5d63-3a0f7ac8e7b2',0,100,1,'正常状态',NULL,NULL,'sys_common_status','成功','false',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('775da1fe-701c-a76b-b5af-3a0f7ac8e7b2',0,94,1,'强退操作',NULL,NULL,'sys_oper_type','强退','7',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('7a87dd92-e861-b369-20ee-3a0f7afc2715',0,91,1,'',NULL,NULL,'bbs_type_lable','.NetCore','9',0,'2023-12-14 22:51:06',NULL,NULL,NULL),('7f39803b-4de1-06bd-f403-3a0f7ac8e7b1',0,99,1,'停用状态','danger',NULL,'sys_job_status','暂停','1',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('806449c8-bb79-4db7-fd46-3a0f7ac8e7b2',0,99,1,'失败状态','danger',NULL,'sys_common_status','失败','true',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('831d6f33-dfae-30eb-e54b-3a0f7ac8e7b2',0,100,1,'正常状态',NULL,NULL,'sys_notice_status','正常','0',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('83791b6d-7535-796f-6485-3a0f7ac8e7b1',0,98,1,'性别未知',NULL,NULL,'sys_user_sex','未知','2',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('83beb7ec-75cf-b024-0093-3a0f7afc2710',0,100,1,'',NULL,NULL,'bbs_type_lable','前端','0',0,'2023-12-14 22:51:06',NULL,NULL,NULL),('a4ff3331-1dfe-171d-8861-3a0f7ac8e7b2',0,98,1,'删除操作','danger',NULL,'sys_oper_type','删除','3',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('a858ce22-6274-d002-8493-3a0f7ac8e7b1',0,99,1,'系统默认否','danger',NULL,'sys_yes_no','否','N',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('b4d14ed4-a001-fa18-45d3-3a0f7afc2714',0,96,1,'',NULL,NULL,'bbs_type_lable','UI','4',0,'2023-12-14 22:51:06',NULL,NULL,NULL),('c16c8efe-a6ce-7c50-250b-3a0f7afc2715',0,94,1,'',NULL,NULL,'bbs_type_lable','项目','6',0,'2023-12-14 22:51:06',NULL,NULL,NULL),('d5004b5c-a20c-f9b6-10a4-3a0f7ac8e7b2',0,96,1,'导出操作',NULL,NULL,'sys_oper_type','导出','5',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('d929428e-5a63-4927-a0b8-3a0f7afc2715',0,93,1,'',NULL,NULL,'bbs_type_lable','C#','7',0,'2023-12-14 22:51:06',NULL,NULL,NULL),('db4afdef-ad05-cf28-35fe-3a0f7ac8e7b1',0,100,1,'系统默认是',NULL,NULL,'sys_yes_no','是','Y',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('dc143ebd-d67e-de70-977d-3a0f7afc2712',0,99,1,'',NULL,NULL,'bbs_type_lable','后端','1',0,'2023-12-14 22:51:06',NULL,NULL,NULL),('debb5529-e025-935a-059a-3a0f7afc2714',0,98,1,'',NULL,NULL,'bbs_type_lable','运维','2',0,'2023-12-14 22:51:06',NULL,NULL,NULL),('e13e18dc-23f0-5e90-af1d-3a0f7ac8e7b2',0,99,1,'修改操作',NULL,NULL,'sys_oper_type','修改','2',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('e26ccfbd-b2da-a93d-c9b9-3a0f7ac8e7b1',0,100,1,'通知',NULL,NULL,'sys_notice_type','通知','1',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('e43f041d-a79c-0842-9eb2-3a0f7ac8e7b1',0,100,1,'正常状态',NULL,NULL,'sys_normal_disable','正常','true',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('eaa079bc-0dd3-c346-c679-3a0f7ac8e7b0',0,99,1,'性别女',NULL,NULL,'sys_user_sex','女','1',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('f4bcdff7-8c2f-a4fd-1898-3a0f7ac8e7b2',0,100,1,'新增操作',NULL,NULL,'sys_oper_type','新增','1',0,'2023-12-14 21:55:07',NULL,NULL,NULL),('fd131846-635a-d494-bc4e-3a0f7ac8e7b2',0,95,1,'导入操作',NULL,NULL,'sys_oper_type','导入','6',0,'2023-12-14 21:55:07',NULL,NULL,NULL);
/*!40000 ALTER TABLE `Dictionary` ENABLE KEYS */;

-- 
-- Definition of DictionaryType
-- 

DROP TABLE IF EXISTS `DictionaryType`;
CREATE TABLE IF NOT EXISTS `DictionaryType` (
  `Id` varchar(36) NOT NULL COMMENT '主键',
  `IsDeleted` tinyint(1) NOT NULL COMMENT '逻辑删除',
  `OrderNum` int NOT NULL COMMENT '排序',
  `State` tinyint(1) DEFAULT NULL COMMENT '状态',
  `DictName` varchar(255) NOT NULL COMMENT '字典名称',
  `DictType` varchar(255) NOT NULL COMMENT '字典类型',
  `Remark` varchar(255) DEFAULT NULL COMMENT '描述',
  `CreationTime` datetime NOT NULL,
  `CreatorId` varchar(36) DEFAULT NULL,
  `LastModifierId` varchar(36) DEFAULT NULL,
  `LastModificationTime` datetime DEFAULT NULL,
  `ConcurrencyStamp` varchar(255) NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

-- 
-- Dumping data for table DictionaryType
-- 

/*!40000 ALTER TABLE `DictionaryType` DISABLE KEYS */;
INSERT INTO `DictionaryType`(`Id`,`IsDeleted`,`OrderNum`,`State`,`DictName`,`DictType`,`Remark`,`CreationTime`,`CreatorId`,`LastModifierId`,`LastModificationTime`,`ConcurrencyStamp`) VALUES('051f89e5-6b4d-9837-1e5a-3a0f7ac8e7cf',0,100,1,'菜单状态','sys_show_hide','菜单状态列表','2023-12-14 21:55:07',NULL,NULL,NULL,''),('423cbcbc-f7b0-2e0d-751c-3a0f7ac8e7d0',0,100,1,'通知状态','sys_notice_status','通知状态列表','2023-12-14 21:55:07',NULL,NULL,NULL,''),('524ba1af-6860-045b-af39-3a0f7ac8e7d0',0,100,1,'通知类型','sys_notice_type','通知类型列表','2023-12-14 21:55:07',NULL,NULL,NULL,''),('7a3da9a6-df47-3c50-8ac0-3a0f7ac8e7d0',0,100,1,'任务分组','sys_job_group','任务分组列表','2023-12-14 21:55:07',NULL,NULL,NULL,''),('7a761856-5219-e15a-df05-3a0f7ac8e7d0',0,100,1,'系统状态','sys_common_status','登录状态列表','2023-12-14 21:55:07',NULL,NULL,NULL,''),('7cda9d35-262a-4c5d-ccab-3a0f7ac8e7d0',0,100,1,'系统开关','sys_normal_disable','系统开关列表','2023-12-14 21:55:07',NULL,NULL,NULL,''),('91ed0db3-fb6a-b056-b94a-3a0f7ac8e7d0',0,100,1,'任务状态','sys_job_status','任务状态列表','2023-12-14 21:55:07',NULL,NULL,NULL,''),('a22ef2f2-b6e9-d05f-08e8-3a0f7afc26ec',0,200,1,'BBS类型标签','bbs_type_lable','BBS类型标签','2023-12-14 22:51:06',NULL,NULL,NULL,''),('a596071d-8749-2327-9d51-3a0f7ac8e7cd',0,100,1,'用户性别','sys_user_sex','用户性别列表','2023-12-14 21:55:07',NULL,NULL,NULL,''),('e484b370-735c-51ff-24ba-3a0f7ac8e7d0',0,100,1,'操作类型','sys_oper_type','操作类型列表','2023-12-14 21:55:07',NULL,NULL,NULL,''),('ee5d9089-029f-2770-8b4c-3a0f7ac8e7d0',0,100,1,'系统是否','sys_yes_no','系统是否列表','2023-12-14 21:55:07',NULL,NULL,NULL,'');
/*!40000 ALTER TABLE `DictionaryType` ENABLE KEYS */;

-- 
-- Definition of Discuss
-- 

DROP TABLE IF EXISTS `Discuss`;
CREATE TABLE IF NOT EXISTS `Discuss` (
  `Id` varchar(36) NOT NULL,
  `Title` varchar(255) DEFAULT NULL,
  `Types` varchar(255) DEFAULT NULL,
  `Introduction` varchar(255) DEFAULT NULL,
  `AgreeNum` int NOT NULL,
  `SeeNum` int NOT NULL,
  `Cover` varchar(255) DEFAULT NULL COMMENT '封面',
  `Content` longtext NOT NULL,
  `Color` varchar(255) DEFAULT NULL,
  `IsDeleted` tinyint(1) NOT NULL,
  `IsTop` tinyint(1) NOT NULL,
  `PermissionType` int NOT NULL,
  `PlateId` varchar(36) NOT NULL,
  `CreationTime` datetime NOT NULL,
  `CreatorId` varchar(36) DEFAULT NULL,
  `LastModifierId` varchar(36) DEFAULT NULL,
  `LastModificationTime` datetime DEFAULT NULL,
  `PermissionUserIds` varchar(4000) DEFAULT NULL COMMENT '当PermissionType为部分用户时候，以下列表中的用户+创建者 代表拥有权限',
  `OrderNum` int NOT NULL,
  `IsDisableCreateComment` tinyint(1) NOT NULL COMMENT '是否禁止评论创建功能',
  PRIMARY KEY (`Id`),
  KEY `index_Title` (`Title`),
  KEY `index_PlateId` (`PlateId`),
  KEY `index_CreationTime` (`CreationTime` DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

-- 
-- Dumping data for table Discuss
-- 

/*!40000 ALTER TABLE `Discuss` DISABLE KEYS */;
INSERT INTO `Discuss`(`Id`,`Title`,`Types`,`Introduction`,`AgreeNum`,`SeeNum`,`Cover`,`Content`,`Color`,`IsDeleted`,`IsTop`,`PermissionType`,`PlateId`,`CreationTime`,`CreatorId`,`LastModifierId`,`LastModificationTime`,`PermissionUserIds`,`OrderNum`,`IsDisableCreateComment`) VALUES('252ad40f-be77-3bc6-e31f-3a0fb1718e26','测试666','','',1,51,'','666666666666',NULL,0,0,0,'aaafacaa-e71e-3445-55a3-3a0f935d1308','2023-12-25 12:38:50','f19ef1b0-5141-17ee-910a-3a0fb16fd942',NULL,'2024-01-13 15:12:41',NULL,0,0),('2da0361c-000d-e0d8-6737-3a0ff5421cdc','知识地图','','',0,46,'','![image.png](/prod-api/file/75c6da24-0c0b-93c2-f45c-3a0ff5420424/true)',NULL,0,0,0,'d940818d-90ec-9dbe-b7af-3a0f935dac0a','2024-01-07 16:41:11','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,'2024-01-16 08:26:06',NULL,0,0),('32518510-b9d5-4436-a902-3a0fe686d8ce','测试发布主题','','测试发布主题',0,73,'','测试发布主题测试发布主题测试发布主题测试发布主题测试发布主题测试发布主题',NULL,0,0,0,'7728706e-2a2b-02ad-4f5c-3a0f935e5c10','2024-01-04 20:01:57','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,'2024-01-09 14:40:35',NULL,0,0),('330d1540-45b0-9a84-880a-3a0fff93c9ad','摸鱼仔','','',1,13,'','20240109开始了解意社区',NULL,0,0,0,'7728706e-2a2b-02ad-4f5c-3a0f935e5c10','2024-01-09 16:46:36','be3f42e6-e6ae-25ab-7973-3a0ffe0c6503',NULL,'2024-01-15 21:17:28',NULL,0,0),('37496047-2805-dda9-a94f-3a0fe02c7ffa','接口参数问题','','',2,61,'','json参数无法获取数据\nform-data可以获取\n![image.png](/prod-api/file/b333c6a7-0163-a46a-cc7f-3a0fe02b7300/true)\n![image.png](/prod-api/file/f7ac3698-2648-4041-da4b-3a0fe02c65ca/true)',NULL,0,0,0,'f5633be2-c33b-94bf-a61e-3a0f9360840b','2024-01-03 14:25:33','69371804-7f8b-2f4d-d9b3-3a0fb0adfcde','59cf7e31-e3e4-544e-1038-3a0f836cc538','2024-01-15 16:49:25',NULL,0,0),('37ce4711-6459-430f-a837-3a0ff53d41c9','.Net生态大全','','你想要的都在这里',0,110,'','超级全面的.net生态导航，你值得拥有',NULL,0,0,0,'d940818d-90ec-9dbe-b7af-3a0f935dac0a','2024-01-07 16:35:53','59cf7e31-e3e4-544e-1038-3a0f836cc538','1a9063ac-559c-d65a-2ce3-3a101d3f31aa','2024-01-15 11:13:00',NULL,0,0),('3987c09e-720c-607b-fce0-3a101d2107f8','有没有微服务部署的计划','','',0,17,'','有没有微服务部署的计划',NULL,0,0,0,'f5633be2-c33b-94bf-a61e-3a0f9360840b','2024-01-15 10:29:52','cecb339a-1806-bbd7-6770-3a101d1d28d0','59cf7e31-e3e4-544e-1038-3a0f836cc538','2024-01-15 16:49:20',NULL,0,0),('3e6d5b45-5095-7eae-cdf8-3a0fdb2bd515','把github 或者gitee的地址贴到文档里呀','','',1,44,'','都不知道搜什么, 我搜ccnetcore找到的',NULL,0,0,0,'f5633be2-c33b-94bf-a61e-3a0f9360840b','2024-01-02 15:06:43','5a42983f-80a0-19ba-1a97-3a0fdb22fe1c','1a9063ac-559c-d65a-2ce3-3a101d3f31aa','2024-01-15 13:12:24',NULL,0,0),('417df912-05a4-ea75-f281-3a0fb11937eb','.netcore 的cookie咋用','','',0,71,'','请问各位大佬，cookie是咋开启啊，我看到了cookie的方法，但是每次都获取不到，是不是有什么操作才行',NULL,0,0,0,'f5633be2-c33b-94bf-a61e-3a0f9360840b','2023-12-25 11:02:20','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','59cf7e31-e3e4-544e-1038-3a0f836cc538','2024-01-15 16:49:33',NULL,0,0),('46850bb5-45c0-015d-53a5-3a0fb10f6a61','新人报道，多多关照','','',2,24,'','新人报道，多多关照\n新人报道，多多关照\n新人报道，多多关照',NULL,0,0,0,'7728706e-2a2b-02ad-4f5c-3a0f935e5c10','2023-12-25 10:51:38','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,'2024-01-15 16:26:49',NULL,0,0),('4a14cce8-795a-8c68-8c2a-3a0fe1c7215a','测试主题啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊','','',0,50,'','测试主题啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊',NULL,1,0,0,'7728706e-2a2b-02ad-4f5c-3a0f935e5c10','2024-01-03 21:54:04','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','2024-01-04 20:00:18',NULL,0,0),('5946e4ac-f276-41ec-4d13-3a0f9f308637','摸鱼摸鱼','摸鱼','测试摸鱼',0,45,'','# 测试摸鱼的权限可以了没有',NULL,0,0,0,'7728706e-2a2b-02ad-4f5c-3a0f935e5c10','2023-12-21 23:34:38','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,'2024-01-09 17:38:10',NULL,0,0),('67bbbd51-8f39-6bc3-46fe-3a0fa9fe8385','俺也摸鱼以下','','',0,31,'','摸鱼摸鱼，一起莫啊\n摸鱼摸鱼，一起莫啊\n摸鱼摸鱼，一起莫啊',NULL,0,0,0,'7728706e-2a2b-02ad-4f5c-3a0f935e5c10','2023-12-24 01:55:50','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','74b32e7e-4586-78ca-fd43-3a0fa9fbd640','2024-01-05 00:38:50',NULL,0,0),('6b80ed42-50cd-db15-c073-3a0fa8f7fd77','04.橙子运维CICD教程','','',6,643,'','## CiCd概述\nCI/CD是持续集成/持续交付（Continuous Integration/Continuous Delivery）的缩写。它是一种软件开发的实践方法，旨在加快软件交付的速度和质量。\n\n说简单一点的实现，就是通过代码的提交或者合并等方式，直接将线上环境进行自动发布部署。\n\n也可以结合gitlab+jenkins+harbor+docker+k8s进行制作镜像管理，但碍于服务器成本、网络等各类因素，gitee+jenkins为成本较低推荐方式。\n\n> 本章也是基于该方式进行教程\n\n\n## 运维不容易，且行且珍惜\n最近收到很多朋友对CiCd非常感兴趣，橙子本人有幸担任过运维岗位，所以对这块功能略知一二\n\n作为开源软件，不光文档开源、代码开源，我们希望分享的更多，让大家学习到更多有用的技术及知识，因此运维方式也同样开源！\n\n本教程是基于Yi框架进行CiCd的实战构建，不一定是和yi框架强绑定，其实也算是一个Jenkins的实战教程\n\n> 说明，目前演示环境及正式环境都已经部署该套Cicd流程，比较简单稳定\n\n从零开始制作一个完整的CiCd,其中对于新人来说，有非常多的坑，由于操作系统版本、网络环境等各类因素，橙子都基本被坑过，同时并不是只搭建一次才总结出来的经验，而是这几年下来总结下来的坑。\n\n橙子老哥的教程，不同于网络视角，绝对干货满满，希望能够帮助到大家，我们也就很开心了~',NULL,0,1,0,'d239673b-d164-2eaa-0cd6-3a0f7ad1cb6d','2023-12-23 21:09:05','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,'2024-01-16 09:17:11',NULL,0,0),('7d4aa766-d97b-a395-7fc7-3a0fae13ca30','水一下','新人报道','纯水贴',1,12,'','学习时常半年的dotneter,多多关照',NULL,0,0,0,'7728706e-2a2b-02ad-4f5c-3a0f935e5c10','2023-12-24 20:57:33','371ed696-bb9c-66fa-4e84-3a0fae1148a9','59cf7e31-e3e4-544e-1038-3a0f836cc538','2024-01-04 23:55:59',NULL,0,0),('8593141f-ca6b-dbac-7c57-3a0facd5b208','xwen到此一游','哈哈哈','测试新账号',0,18,'','##### xwen到此一游哈哈哈',NULL,0,0,0,'7728706e-2a2b-02ad-4f5c-3a0f935e5c10','2023-12-24 15:10:06','a46718ba-f869-6473-142b-3a0facd47b09',NULL,'2024-01-11 13:53:58',NULL,0,0),('8c464ab3-8ba5-2761-a4b0-3a0f83a9f312','02.框架功能模块教程','','',4,1454,'','此主题详细介绍Yi框架+Abp.vNext各个功能模块',NULL,0,1,0,'d239673b-d164-2eaa-0cd6-3a0f7ad1cb6d','2023-12-16 15:17:54','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,'2024-01-16 11:40:01',NULL,0,0),('aaa00329-7f35-d3fe-d258-3a0f8380b742','01.框架快速开始教程','','',17,3072,'','<h1 align=\"center\"><img align=\"left\" height=\"150px\" src=\"https://ccnetcore.com/prod-api/wwwroot/logo.png\"> Yi框架</h1>\n<h4 align=\"center\">一套以用户体验出发的.Net8 Web开源框架</h4>\n<h5 align=\"center\">支持Abp.vNext 版本原生版本、Furion版本，前端后台接入Ruoyi Vue3.0</h5>\n<h2 align=\"center\">集大成者，终究轮子</h2>\n\n[English](README-en.md) | 简体中文\n\n![sdk](https://img.shields.io/badge/sdk-8.0.0-d.svg)![License MIT](https://img.shields.io/badge/license-Apache-blue.svg?style=flat-square)\n\n\n谁说Abp复杂？谁说DDD难？`打破常规，化繁为简`，新人入门，项目二开，最佳方式之一\n\n**中文：意框架**（和他的名字一样“简易”，同时接入Java的Ruoyi Vue3.0前端）\n\n模块化，可根据业务自行引用或抛弃，集大成者，大而全乎，也许你能从中学习到一些独特见解\n\n**英文：YiFramework**\n\nYi框架-一套与SqlSugar一样爽的.Net8开源框架。\n与Sqlsugar理念一致，以用户体验出发。\n适合.Net8学习、Sqlsugar学习 、项目二次开发。\n集大成者，终究轮子\n\n（项目与Sqlsugar同步更新，但这作者老杰哥代码天天爆肝到凌晨两点，我们也尽量会跟上他的脚步。更新频繁，所以可watching持续关注。）\n\n————这不仅仅是一个程序，更是一个艺术品，面向艺术的开发！\n\n> 核心特点：简单好用，框架不以打包形式引用，而是直接以项目附带源码给出，自由度拉满，遵循Mit协议，允许随意修改（请注明来源即可）',NULL,0,1,0,'d239673b-d164-2eaa-0cd6-3a0f7ad1cb6d','2023-12-16 14:32:51','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,'2024-01-16 11:44:19',NULL,0,0),('b03f39bb-675f-4d7d-bb37-3a100308eef5','如何更改路由地址','','',0,31,'','目前访问路由是 /api/app/xxxx，我想将app字样更改为其他。\n请问在哪里更改呢？我看了源码，是在YiConventionalRouteBuilder.cs Build 中将rootPath传进去后构成路由地址，但是我不知道怎么怎么传参',NULL,0,0,0,'f5633be2-c33b-94bf-a61e-3a0f9360840b','2024-01-10 08:53:25','691de7d2-8514-1602-c558-3a1003045d25',NULL,'2024-01-16 10:50:39',NULL,0,0),('bb410108-243a-5b04-d532-3a0fc6b8afcb','C#学习分享','','',0,115,'','C# 是由微软公司开发的一种面向对象、类型安全、高效且简单的编程语言。它最初于 2000 年发布，并随后成为 .NET 框架的一部分，逐渐成为开发 Windows 应用程序和 Web 应用程序的主要选择之一。C# 语言的设计目标是提供一种现代、通用、面向对象的编程语言，使开发人员能够更轻松地构建 Windows 应用程序、Web 应用程序、服务端应用程序等。',NULL,0,0,0,'d940818d-90ec-9dbe-b7af-3a0f935dac0a','2023-12-29 15:48:33','59cf7e31-e3e4-544e-1038-3a0f836cc538','1a9063ac-559c-d65a-2ce3-3a101d3f31aa','2024-01-15 11:16:09',NULL,0,0),('d06ed468-6dbb-ba23-8807-3a0fff2ab3c5','定时任务','','定时任务无法正确执行',0,2,'','![image.png](/prod-api/file/5f589a39-d48a-cfcc-9c88-3a0fff2aa6bd/true)',NULL,1,0,0,'f5633be2-c33b-94bf-a61e-3a0f9360840b','2024-01-09 14:51:49','69371804-7f8b-2f4d-d9b3-3a0fb0adfcde','69371804-7f8b-2f4d-d9b3-3a0fb0adfcde','2024-01-09 17:20:42',NULL,0,0),('e89c9593-f337-ada7-d108-3a0f83ae48e6','03.实战演练开发教程','','',5,1191,'','恭喜恭喜，看到了这里，说明你已经掌握了框架最常用的一些基础设施功能\n\n现在你要做到的，是真正编写一个业务，将这些功能进行组合接口',NULL,0,1,0,'d239673b-d164-2eaa-0cd6-3a0f7ad1cb6d','2023-12-16 15:22:38','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,'2024-01-16 10:30:35',NULL,0,0),('e9e69a38-ce1e-06f5-7944-3a0fdc942ef3','00.版本更新日志','','',7,455,'','## 你所期待的，也便是我们想要的\n没有人知道**意社区**会成为什么，每一条未来都由你来决定~\n\n你可以在本主题下`评论留言`，将您宝贵的问题及更新的建议、方向留下，我们都会一一思考改进，感谢你的对`意社区的贡献`~\n\n> 大家可以一起提意见，一起来改造，意社区的路，由大家来铺\n\n\n另外，你可以为我们进行宣传，宣传词：\n``` cs\n\n各位兄弟们，给大家分享一个.Net8开源力作~\n\n谁说Abp复杂？谁说DDD难？橙子老哥开源生态力作，Yi框架Abp震撼来袭~ \n以用户体验出发，用起来就是爽~\n打破常规，化繁为简，新人入门，项目二开，最佳方式之一\n YiFramework是一个基于.Net8+Abp.vNext+SqlSugar的开源Web项目 \n内置：后台权限管理系统、前台社区论坛文档系统、等其他生态\n开源地址：https://gitee.com/ccnetcore/yi \n官方地址：https://ccnetcore.com/index\n\n望与大家一起为.net贡献一份绵薄之力\n```\n\n> 临表涕临，不知所言\n\n',NULL,0,1,0,'d239673b-d164-2eaa-0cd6-3a0f7ad1cb6d','2024-01-02 21:40:19','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,'2024-01-16 10:18:04',NULL,0,0),('f6462b48-9601-0253-6450-3a0ff538dfa4','面试宝典','','八股文',2,42,'','没事可以看看，到底懂得多少',NULL,0,0,0,'d940818d-90ec-9dbe-b7af-3a0f935dac0a','2024-01-07 16:31:06','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,'2024-01-15 16:03:33',NULL,0,0),('fee1c7d4-999a-390a-d2a8-3a0fda7ed85f','个个都是会员？','','',1,42,'','<p style=''background-image:-webkit-linear-gradient(bottom,red,#fd8403,yellow); \n    -webkit-background-clip:text; \n    -webkit-text-fill-color:transparent; \n''>个个都是V8啊</p>',NULL,0,0,0,'7728706e-2a2b-02ad-4f5c-3a0f935e5c10','2024-01-02 11:57:46','e1926b51-a0fc-7d2e-9cb9-3a0fda78cccc',NULL,'2024-01-15 08:48:27',NULL,0,0),('ffdae7fe-db2b-b217-8fec-3a0ff57b9493','早期的小玩意','','',2,116,'','我的兴趣爱好比较广泛，上至开发运维项目管理，下至体育运动家务做饭，即可以是网瘾少年，也可以是文艺青年，更可能是养老人员~\n\n每个时期，都仿佛有一个不同的我\n\n本篇主题，主要介绍一下早期的自己做的一些小玩意儿，也是刚接触c#那块。\n\njava、js、python、c等都做过对应一些的开发，略知一二，现在主要方向在`世界上最优雅的语言-c#`上\n\n如果是新入门的学生或者程序员，可以看看，现在回头看看，还蛮有意思的\n\n很遗憾，类似这样的小玩意儿，可以说是和多少个凌晨的困意一样数不胜数，其中只是挑选比较早期的一些入门作品，再往后，就没有那种味道了~',NULL,0,0,0,'aaafacaa-e71e-3445-55a3-3a0f935d1308','2024-01-07 17:43:57','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,'2024-01-16 09:13:36',NULL,0,0);
/*!40000 ALTER TABLE `Discuss` ENABLE KEYS */;

-- 
-- Definition of DiscussMyType
-- 

DROP TABLE IF EXISTS `DiscussMyType`;
CREATE TABLE IF NOT EXISTS `DiscussMyType` (
  `Id` varchar(36) NOT NULL,
  `DiscussId` varchar(36) NOT NULL,
  `MyTypeId` varchar(36) NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

-- 
-- Dumping data for table DiscussMyType
-- 

/*!40000 ALTER TABLE `DiscussMyType` DISABLE KEYS */;

/*!40000 ALTER TABLE `DiscussMyType` ENABLE KEYS */;

-- 
-- Definition of DiscussTop
-- 

DROP TABLE IF EXISTS `DiscussTop`;
CREATE TABLE IF NOT EXISTS `DiscussTop` (
  `Id` varchar(36) NOT NULL,
  `OrderNum` int NOT NULL,
  `DiscussId` varchar(36) NOT NULL,
  `LastModificationTime` datetime DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='首页置顶主题';

-- 
-- Dumping data for table DiscussTop
-- 

/*!40000 ALTER TABLE `DiscussTop` DISABLE KEYS */;
INSERT INTO `DiscussTop`(`Id`,`OrderNum`,`DiscussId`,`LastModificationTime`) VALUES('6b80ed42-50cd-db15-c073-3a0fa8f7fd76',97,'6b80ed42-50cd-db15-c073-3a0fa8f7fd77',NULL),('8c464ab3-8ba5-2761-a4b0-3a0f83a9f313',99,'8c464ab3-8ba5-2761-a4b0-3a0f83a9f312',NULL),('aaa00329-7f35-d3fe-d258-3a0f8380b743',100,'aaa00329-7f35-d3fe-d258-3a0f8380b742',NULL),('e89c9593-f337-ada7-d108-3a0f83ae48e3',98,'e89c9593-f337-ada7-d108-3a0f83ae48e6',NULL),('e9e29a38-ce1e-06f5-7944-3a0fdc942ef3',999,'e9e69a38-ce1e-06f5-7944-3a0fdc942ef3',NULL);
/*!40000 ALTER TABLE `DiscussTop` ENABLE KEYS */;

-- 
-- Definition of File
-- 

DROP TABLE IF EXISTS `File`;
CREATE TABLE IF NOT EXISTS `File` (
  `Id` varchar(36) NOT NULL,
  `FileSize` decimal(18,4) NOT NULL COMMENT '文件大小',
  `FileName` varchar(255) NOT NULL COMMENT '文件名',
  `FilePath` varchar(255) NOT NULL COMMENT '文件路径',
  `CreationTime` datetime NOT NULL,
  `CreatorId` varchar(36) DEFAULT NULL,
  `LastModifierId` varchar(36) DEFAULT NULL,
  `LastModificationTime` datetime DEFAULT NULL,
  `ConcurrencyStamp` varchar(255) NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

-- 
-- Dumping data for table File
-- 

/*!40000 ALTER TABLE `File` DISABLE KEYS */;
INSERT INTO `File`(`Id`,`FileSize`,`FileName`,`FilePath`,`CreationTime`,`CreatorId`,`LastModifierId`,`LastModificationTime`,`ConcurrencyStamp`) VALUES('01a826bb-03f8-811e-28ff-3a0ff582415f',296.1338,'image.png','wwwroot/Image/01a826bb-03f8-811e-28ff-3a0ff582415f.png','2024-01-07 17:51:15','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'21044a23d78846df8424dfabc1e84f82'),('042d8937-ac5e-062d-e9ed-3a0fe4c12d11',64.8936,'blob','wwwroot/File/042d8937-ac5e-062d-e9ed-3a0fe4c12d11','2024-01-04 11:46:26','8823e06f-8f1e-0235-8ef8-3a0fae4796ca',NULL,NULL,'35e18938fe90499186618b1716a1d088'),('046964ad-e534-6b3a-20dc-3a0fae407486',14.1045,'blob','wwwroot/File/046964ad-e534-6b3a-20dc-3a0fae407486','2023-12-24 21:46:20','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'31b5e25fa50a4734a00b64b322ec13fc'),('061da87e-80c9-5e82-cac0-3a1004b9766c',30.3203,'image.png','wwwroot/Image/061da87e-80c9-5e82-cac0-3a1004b9766c.png','2024-01-10 16:45:51','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'e3ed51d19fcd4b5eb28184aa042fdf18'),('06a399f0-a43f-3bbf-bc7e-3a0fdba75632',50.5957,'blob','wwwroot/File/06a399f0-a43f-3bbf-bc7e-3a0fdba75632','2024-01-02 17:21:37','69371804-7f8b-2f4d-d9b3-3a0fb0adfcde',NULL,NULL,'1b2a32c6d2d44465a47de401df3b94e9'),('06bfe367-fef5-17d2-f9ac-3a0fae3344ff',30.6553,'blob','wwwroot/File/06bfe367-fef5-17d2-f9ac-3a0fae3344ff','2023-12-24 21:31:56','a46718ba-f869-6473-142b-3a0facd47b09',NULL,NULL,'82d4b45e02e5463b91fe8d1c6e990734'),('0792c52d-d4c6-148b-0426-3a1004685bfc',25.4482,'image.png','wwwroot/Image/0792c52d-d4c6-148b-0426-3a1004685bfc.png','2024-01-10 15:17:16','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'ead748911ae549aa93dfd7eb1ae87970'),('09469f24-044a-a463-969e-3a0ff58eee8b',93.7578,'image.png','wwwroot/Image/09469f24-044a-a463-969e-3a0ff58eee8b.png','2024-01-07 18:05:06','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'dd5fc622d8df4d678978a4441938a972'),('0a92e464-13af-ef93-77b9-3a10032fe20c',35.2773,'image.png','wwwroot/Image/0a92e464-13af-ef93-77b9-3a10032fe20c.png','2024-01-10 09:35:57','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'2cf6a840535745788f818893c55c1f73'),('14a8d455-b388-5220-d590-3a0fc2c92c97',34.4219,'blob','wwwroot/File/14a8d455-b388-5220-d590-3a0fc2c92c97','2023-12-28 21:28:05','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'be42beb8ea2c40d8ba1acff014d3b3d5'),('15ffd2d6-fe6d-7638-adc0-3a100467b186',24.9326,'image.png','wwwroot/Image/15ffd2d6-fe6d-7638-adc0-3a100467b186.png','2024-01-10 15:16:32','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'0a73e0c8115247f196aea91583221c03'),('17fd1f68-929f-b3f4-3f6c-3a0f83a7fcd1',6.2080,'domain.png','wwwroot/Image/17fd1f68-929f-b3f4-3f6c-3a0f83a7fcd1.png','2023-12-16 15:15:45','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'52fe2366f2064dc283fa604ebbb64da6'),('19abfab5-cac0-7eeb-0353-3a0ff58bf5ec',541.6748,'image.png','wwwroot/Image/19abfab5-cac0-7eeb-0353-3a0ff58bf5ec.png','2024-01-07 18:01:51','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'2934abb5e2c64ee0abf09c0306e3ce01'),('1bdc714b-ef69-f2d5-1999-3a0fae2a9bb4',14.0039,'blob','wwwroot/File/1bdc714b-ef69-f2d5-1999-3a0fae2a9bb4','2023-12-24 21:22:28','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'03db5403af5e4d3194b2cca9e6768a63'),('1d3bc2f6-a54d-2a17-133d-3a0fae44bd8e',30.8096,'blob','wwwroot/File/1d3bc2f6-a54d-2a17-133d-3a0fae44bd8e','2023-12-24 21:51:01','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'3551617207bc46949c197f2ad5d7c77c'),('20286d62-a9d1-6ab0-7fc0-3a1003348554',28.5908,'image.png','wwwroot/Image/20286d62-a9d1-6ab0-7fc0-3a1003348554.png','2024-01-10 09:41:01','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'b5896df3b2054cc28d7bf0d78c7af42e'),('203844ba-323a-65ee-c079-3a0ff544a327',2526.5225,'image.png','wwwroot/Image/203844ba-323a-65ee-c079-3a0ff544a327.png','2024-01-07 16:43:57','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'0a7d3b60559841dc9c8c85e2e82cebdc'),('25642343-1565-8009-3c02-3a0ff586723e',22.0273,'image.png','wwwroot/Image/25642343-1565-8009-3c02-3a0ff586723e.png','2024-01-07 17:55:49','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'4700038dd50b48bda9bbb8c0c8f16be4'),('2630b367-35e9-d106-b825-3a1004f1735b',50.5537,'blob','wwwroot/File/2630b367-35e9-d106-b825-3a1004f1735b','2024-01-10 17:47:00','5d59e9f6-0c2e-9755-4cd8-3a1004eed5fb',NULL,NULL,'6e69cd75b40a4672bb66b4171be30a50'),('2675ab3d-6234-a7e1-225c-3a0ff589a5c0',389.6611,'image.png','wwwroot/Image/2675ab3d-6234-a7e1-225c-3a0ff589a5c0.png','2024-01-07 17:59:19','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'5b0e2cf49f5b477aa8e4a548bce0be9a'),('2a0925a2-a2dc-9d47-92f8-3a0fc2c4ee80',30.2471,'blob','wwwroot/File/2a0925a2-a2dc-9d47-92f8-3a0fc2c4ee80','2023-12-28 21:23:26','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'77815b5f8200484c801c8e636b76b505'),('2a8d18c4-4899-433d-3553-3a10032e9645',32.3203,'image.png','wwwroot/Image/2a8d18c4-4899-433d-3553-3a10032e9645.png','2024-01-10 09:34:33','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'16e07afe855a492f80c9256258ecca64'),('2c6bd585-6381-b030-88ac-3a0fae34a910',13.7832,'blob','wwwroot/File/2c6bd585-6381-b030-88ac-3a0fae34a910','2023-12-24 21:33:27','a46718ba-f869-6473-142b-3a0facd47b09',NULL,NULL,'50a16cf8b120487da94e8a6c1bacf45c'),('2c96b0a6-f992-7d43-d30a-3a0fae3dd843',31.4053,'blob','wwwroot/File/2c96b0a6-f992-7d43-d30a-3a0fae3dd843','2023-12-24 21:43:29','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'3e9ff5d2d4344949806cd529728004eb'),('2d531444-b11b-c84b-8a87-3a0ff58a61d1',2988.4395,'image.png','wwwroot/Image/2d531444-b11b-c84b-8a87-3a0ff58a61d1.png','2024-01-07 18:00:07','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'e4b483f9e31147f5b4c7b1d8c45e350b'),('2dfbda7a-c561-0f26-6f12-3a0ff58ad3c4',1888.6133,'image.png','wwwroot/Image/2dfbda7a-c561-0f26-6f12-3a0ff58ad3c4.png','2024-01-07 18:00:37','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'66ec2bb189a349cd87f2d19c647a530e'),('2f736587-1370-cfa4-d9b6-3a1004d222fd',146.2188,'image.png','wwwroot/Image/2f736587-1370-cfa4-d9b6-3a1004d222fd.png','2024-01-10 17:12:48','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'be75e48055174be78029476b98085ec1'),('3291b43a-2e34-27d3-3756-3a0ff58af989',2268.9766,'image.png','wwwroot/Image/3291b43a-2e34-27d3-3756-3a0ff58af989.png','2024-01-07 18:00:46','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'ec2fcf8a47574d11b6294927701a40a2'),('32cccbae-df9d-b1be-dbc7-3a10046c47f6',66.0137,'image.png','wwwroot/Image/32cccbae-df9d-b1be-dbc7-3a10046c47f6.png','2024-01-10 15:21:33','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'8d59e5c4b8a64d2c8ceba3e2d2de9c37'),('347dbcc3-9def-00b3-630f-3a0ff581d707',189.2051,'image.png','wwwroot/Image/347dbcc3-9def-00b3-630f-3a0ff581d707.png','2024-01-07 17:50:48','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'5d7d1ed8d5db43478425ec90b56f054f'),('34acf4b5-a870-6542-f8b5-3a0ff57cb7fa',35.3936,'image.png','wwwroot/Image/34acf4b5-a870-6542-f8b5-3a0ff57cb7fa.png','2024-01-07 17:45:12','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'27131821c2ed4024b1456e001174a269'),('351509f8-d3b0-796d-4d50-3a0fdf39c983',44.8984,'blob','wwwroot/File/351509f8-d3b0-796d-4d50-3a0fdf39c983','2024-01-03 10:00:27','98d7ce6a-37e1-a5b8-a877-3a0fdba5612e',NULL,NULL,'050bcc81bdc84d7781794627703f44cd'),('37b39b84-d5a6-9bc6-35a2-3a0f83a8b34f',16.0381,'webPro.png','wwwroot/Image/37b39b84-d5a6-9bc6-35a2-3a0f83a8b34f.png','2023-12-16 15:16:32','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'fa6f5c4920224ef29f4ed829cf789b46'),('3b9028e9-fdb9-8981-6d29-3a0ff5850b28',373.2568,'image.png','wwwroot/Image/3b9028e9-fdb9-8981-6d29-3a0ff5850b28.png','2024-01-07 17:54:18','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'779ffb53a52e4154b0612f9b84a28b39'),('3c908cc9-25f0-c0d4-c53d-3a0ff580c1c4',12.8682,'image.png','wwwroot/Image/3c908cc9-25f0-c0d4-c53d-3a0ff580c1c4.png','2024-01-07 17:49:37','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'a69531e9bb7d45fcb168915987face87'),('3f5e7027-3e69-eff1-ed6c-3a1004b96686',30.3203,'image.png','wwwroot/Image/3f5e7027-3e69-eff1-ed6c-3a1004b96686.png','2024-01-10 16:45:47','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'025b684c88814b618b48e12bc1704149'),('4314e274-d913-a5d7-709f-3a0ff54524af',1485.7393,'image.png','wwwroot/Image/4314e274-d913-a5d7-709f-3a0ff54524af.png','2024-01-07 16:44:30','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'b02ff8b261bf40ca8267a812dbfab1ec'),('43347ba8-de56-d69c-f3a0-3a0fae35a093',13.8008,'blob','wwwroot/File/43347ba8-de56-d69c-f3a0-3a0fae35a093','2023-12-24 21:34:31','a46718ba-f869-6473-142b-3a0facd47b09',NULL,NULL,'2a6bc20eed5d43c28b24cd31888eabd7'),('43fbc2fb-7ad6-3a2a-7fc7-3a0fae35cf54',34.4219,'blob','wwwroot/File/43fbc2fb-7ad6-3a2a-7fc7-3a0fae35cf54','2023-12-24 21:34:43','a46718ba-f869-6473-142b-3a0facd47b09',NULL,NULL,'ccfe0340ef82474987974b83d9851c95'),('4430293c-eeb9-b53d-f71d-3a0ff580b620',12.8682,'image.png','wwwroot/Image/4430293c-eeb9-b53d-f71d-3a0ff580b620.png','2024-01-07 17:49:34','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'76b2017799eb4b77a4e88e7ec13aa8b4'),('452132ed-d7df-8f85-6acc-3a0ff5851bda',267.7842,'image.png','wwwroot/Image/452132ed-d7df-8f85-6acc-3a0ff5851bda.png','2024-01-07 17:54:22','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'98973a0b2078438e839985228760edb7'),('484b2079-2bf8-f804-7439-3a0f83a6f264',73.3291,'feStart.png','wwwroot/Image/484b2079-2bf8-f804-7439-3a0f83a6f264.png','2023-12-16 15:14:37','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'b3825b1d10874209b6c4178a7c0d9c77'),('4c618d9f-802d-12e7-6d4e-3a0ff542fb7e',583.2344,'image.png','wwwroot/Image/4c618d9f-802d-12e7-6d4e-3a0ff542fb7e.png','2024-01-07 16:42:08','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'69fb74ebb8b94825ac0dc9add6fe930f'),('4d7ae159-4bb5-c8af-dbd7-3a0ff58d53e2',255.8779,'image.png','wwwroot/Image/4d7ae159-4bb5-c8af-dbd7-3a0ff58d53e2.png','2024-01-07 18:03:20','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'0ba2055d8e154eec92068a12685958ed'),('5028c4fc-825d-d804-26af-3a0ff5444fb3',2829.5430,'image.png','wwwroot/Image/5028c4fc-825d-d804-26af-3a0ff5444fb3.png','2024-01-07 16:43:35','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'12fcdb01787c452791d2428461c06e7b'),('55536e5a-ef47-1593-3701-3a100333df31',15.8896,'image.png','wwwroot/Image/55536e5a-ef47-1593-3701-3a100333df31.png','2024-01-10 09:40:19','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'80b6af803f9c4a88854ec7a0ef4ed2fb'),('57fdedeb-0ae3-66fb-e581-3a0ff543e65b',1335.6123,'image.png','wwwroot/Image/57fdedeb-0ae3-66fb-e581-3a0ff543e65b.png','2024-01-07 16:43:08','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'4fd4f62684e244ce9d4cc842895d9a42'),('5af9913c-26a2-4d86-23ef-3a1004c92f98',17.8604,'image.png','wwwroot/Image/5af9913c-26a2-4d86-23ef-3a1004c92f98.png','2024-01-10 17:03:02','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'f852ef74dc8a48fc86fa8b36f5fa71a7'),('5b5636e6-2cea-55f8-7917-3a0ff5846cc2',238.3545,'image.png','wwwroot/Image/5b5636e6-2cea-55f8-7917-3a0ff5846cc2.png','2024-01-07 17:53:37','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'3a0b7d306485417eac0ecb6750e85b9f'),('5b939832-c3f9-d06a-4916-3a0f83a860c4',8.5381,'application.png','wwwroot/Image/5b939832-c3f9-d06a-4916-3a0f83a860c4.png','2023-12-16 15:16:11','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'d5f7720987c24bb7a4a08ef34caac9f3'),('5c255856-653c-ae98-25fe-3a0ff57fa3bf',6.9961,'image.png','wwwroot/Image/5c255856-653c-ae98-25fe-3a0ff57fa3bf.png','2024-01-07 17:48:23','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'16d501ddd4c84ac79b169cc650e17923'),('5f589a39-d48a-cfcc-9c88-3a0fff2aa6bd',67.1309,'image.png','wwwroot/Image/5f589a39-d48a-cfcc-9c88-3a0fff2aa6bd.png','2024-01-09 14:51:46','69371804-7f8b-2f4d-d9b3-3a0fb0adfcde',NULL,NULL,'3d3a1697326e49e1886cc1dc25869aa2'),('6656b179-78d8-8b6c-6506-3a0fb1734298',105.6172,'blob','wwwroot/File/6656b179-78d8-8b6c-6506-3a0fb1734298','2023-12-25 12:40:41','f19ef1b0-5141-17ee-910a-3a0fb16fd942',NULL,NULL,'8de615b07b0f44b6835e506ae5f3ab02'),('68284e28-7430-1949-5631-3a0ff544df96',1147.8057,'image.png','wwwroot/Image/68284e28-7430-1949-5631-3a0ff544df96.png','2024-01-07 16:44:12','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'34af2d84fdf2448d9b3775bd2d0814ad'),('68d6b594-52dd-399f-f296-3a0ff58e14c2',43.9297,'image.png','wwwroot/Image/68d6b594-52dd-399f-f296-3a0ff58e14c2.png','2024-01-07 18:04:10','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'e0f848dfb53a41bfb534860453a531e5'),('698b0517-0b1c-b102-1ffd-3a0fc2c9e028',13.7275,'blob','wwwroot/File/698b0517-0b1c-b102-1ffd-3a0fc2c9e028','2023-12-28 21:28:50','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'075b3d433b43433c9d1fd3b776d3a259'),('6b6956f4-b3e3-9042-9201-3a0ff57ff5a5',3.1016,'image.png','wwwroot/Image/6b6956f4-b3e3-9042-9201-3a0ff57ff5a5.png','2024-01-07 17:48:44','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'76bb531739114f38985b7148f281157e'),('6c5a3269-6613-4411-8b8a-3a101d205093',44.9258,'blob','wwwroot/File/6c5a3269-6613-4411-8b8a-3a101d205093','2024-01-15 10:29:05','0a6a0afd-6a31-4729-0c76-3a0fb8d4f73c',NULL,NULL,'dac93d8337b1404489dd6198b0598c9b'),('7014bf0f-bd6b-8714-fe2f-3a0ff5868608',34.5508,'image.png','wwwroot/Image/7014bf0f-bd6b-8714-fe2f-3a0ff5868608.png','2024-01-07 17:55:55','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'abf047262c49494e915aa58933627f90'),('7402ac23-f71b-ad79-1ddd-3a0fae4467da',14.0518,'blob','wwwroot/File/7402ac23-f71b-ad79-1ddd-3a0fae4467da','2023-12-24 21:50:39','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'8e5d8b4a6dd44704b0922311cd294eb0'),('742c6390-5292-d317-c1aa-3a0f83a74ebb',72.4961,'code.png','wwwroot/Image/742c6390-5292-d317-c1aa-3a0f83a74ebb.png','2023-12-16 15:15:00','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'7e82147113f84e29abff60cb88d313d7'),('74316a26-3f13-4c5c-7b53-3a0ff5848221',68.8213,'image.png','wwwroot/Image/74316a26-3f13-4c5c-7b53-3a0ff5848221.png','2024-01-07 17:53:42','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'785cf67496fc4724af7c82f93cbf4da3'),('746b978f-f5a7-f00e-cf28-3a0ff57ea2be',27.9307,'image.png','wwwroot/Image/746b978f-f5a7-f00e-cf28-3a0ff57ea2be.png','2024-01-07 17:47:18','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'f2628af777d34a4692a9c0f0ac351417'),('74ca1252-3add-cc78-c5eb-3a0ff58c0b89',528.8701,'image.png','wwwroot/Image/74ca1252-3add-cc78-c5eb-3a0ff58c0b89.png','2024-01-07 18:01:56','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'f80640bee7b44938b5d39ea4bf6f23c6'),('759fe1ed-3ada-5857-8375-3a0fdc447b1d',35.8281,'blob','wwwroot/File/759fe1ed-3ada-5857-8375-3a0fdc447b1d','2024-01-02 20:13:16','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'fc14cf6b14fe44f18504a84b3883e405'),('75c6da24-0c0b-93c2-f45c-3a0ff5420424',1514.5322,'image.png','wwwroot/Image/75c6da24-0c0b-93c2-f45c-3a0ff5420424.png','2024-01-07 16:41:05','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'4eb5bcb4f91d4663807378142377aa4e'),('75ce61e9-875a-043d-6e60-3a0ff58b4069',3114.4424,'image.png','wwwroot/Image/75ce61e9-875a-043d-6e60-3a0ff58b4069.png','2024-01-07 18:01:04','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'eb88ce06da1d4840b3a490e072d6637f'),('7826bb93-7109-247f-b6b8-3a0ff58aa4a9',3108.2275,'image.png','wwwroot/Image/7826bb93-7109-247f-b6b8-3a0ff58aa4a9.png','2024-01-07 18:00:24','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'5877233c47044f62a2ef699ad9c5bef4'),('78630f5a-e28e-e61f-da5a-3a0ff58207e2',434.1699,'image.png','wwwroot/Image/78630f5a-e28e-e61f-da5a-3a0ff58207e2.png','2024-01-07 17:51:00','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'0c7f0088ce4c46cb92b37a4f43d92ddb'),('7a0fd471-767e-a5ed-eead-3a10046a90dd',26.7803,'image.png','wwwroot/Image/7a0fd471-767e-a5ed-eead-3a10046a90dd.png','2024-01-10 15:19:41','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'fe70726996a044aa966b7a163e49835c'),('7df63a8e-aad6-4d18-7d1f-3a1004ce0b4c',36.0137,'image.png','wwwroot/Image/7df63a8e-aad6-4d18-7d1f-3a1004ce0b4c.png','2024-01-10 17:08:20','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'b35c0aca2a3a408c8b358b6f8b16757d'),('7e4026dc-38b6-b918-d823-3a0ff5826452',193.6484,'image.png','wwwroot/Image/7e4026dc-38b6-b918-d823-3a0ff5826452.png','2024-01-07 17:51:24','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'243780c9a1514f8cbbf8b7a8023ee2b9'),('7f1ff061-24b1-54b2-8adc-3a0fae415526',30.9717,'blob','wwwroot/File/7f1ff061-24b1-54b2-8adc-3a0fae415526','2023-12-24 21:47:18','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'797c5fb648854b54bbe909aa6b4e396d'),('7f52e9a7-6b6d-cc80-64f6-3a10031e9214',15.2559,'image.png','wwwroot/Image/7f52e9a7-6b6d-cc80-64f6-3a10031e9214.png','2024-01-10 09:17:03','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'b3bb7bea7d864539b2ec1aa7f83fe5f6'),('7f64084d-5993-3aa8-0021-3a0ff5456644',2190.2920,'image.png','wwwroot/Image/7f64084d-5993-3aa8-0021-3a0ff5456644.png','2024-01-07 16:44:47','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'45adab11a5f64324adbc05088a825a0e'),('80bf48e9-34db-4625-e4e1-3a0ff583f694',17.0605,'image.png','wwwroot/Image/80bf48e9-34db-4625-e4e1-3a0ff583f694.png','2024-01-07 17:53:07','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'9d797ce4754c468aaec8a90d609034d2'),('8244f012-bd52-da0a-508b-3a0ff5879277',21.5332,'image.png','wwwroot/Image/8244f012-bd52-da0a-508b-3a0ff5879277.png','2024-01-07 17:57:03','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'1271975c15654fdbab5504cd03013215'),('8344c867-1d5f-a258-4c95-3a0ff5870a30',23.2148,'image.png','wwwroot/Image/8344c867-1d5f-a258-4c95-3a0ff5870a30.png','2024-01-07 17:56:28','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'60d4709e58894f3287a4f6405a13b51e'),('8463be2b-90e8-3457-44fc-3a0ff58927d3',316.8389,'image.png','wwwroot/Image/8463be2b-90e8-3457-44fc-3a0ff58927d3.png','2024-01-07 17:58:47','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'77df679b9a584475abf0f36bbc0f4749'),('8519a759-3562-6a6f-b07e-3a0fae120f41',54.3457,'blob','wwwroot/File/8519a759-3562-6a6f-b07e-3a0fae120f41','2023-12-24 20:55:40','371ed696-bb9c-66fa-4e84-3a0fae1148a9',NULL,NULL,'feeb73eb837245b5bae7295b5d07300a'),('858c073a-1500-e367-7d98-3a0f83a6ab73',68.4326,'swagger.png','wwwroot/Image/858c073a-1500-e367-7d98-3a0f83a6ab73.png','2023-12-16 15:14:19','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'8f55f46930364235a95adb0b35b6fafe'),('8706d762-3a18-8bec-c192-3a0fdc77c946',48.2354,'blob','wwwroot/File/8706d762-3a18-8bec-c192-3a0fdc77c946','2024-01-02 21:09:18','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'afb3dffec63d4081bf42347a05814014'),('8866a71d-1265-0b34-1ccb-3a0ff58218fc',311.2783,'image.png','wwwroot/Image/8866a71d-1265-0b34-1ccb-3a0ff58218fc.png','2024-01-07 17:51:04','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'395fd0e0f26a4e349abe282ba9c9f1c7'),('88b08d13-18bf-e2dc-8b3b-3a0fae3804a0',13.7275,'blob','wwwroot/File/88b08d13-18bf-e2dc-8b3b-3a0fae3804a0','2023-12-24 21:37:07','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'93d48e2b01f249dbb4f871b25f30adc2'),('8a8ac2d8-905f-d20a-64be-3a0fb3ce1a56',30.7393,'blob','wwwroot/File/8a8ac2d8-905f-d20a-64be-3a0fb3ce1a56','2023-12-25 23:39:09','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'019d9a5fe8fc4a22972db249b77effd7'),('8dc29ca0-5e14-4dac-9b0a-3a0fdf5d7248',42.3750,'blob','wwwroot/File/8dc29ca0-5e14-4dac-9b0a-3a0fdf5d7248','2024-01-03 10:39:24','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'8f5bc8ffabb04b8aae9354030a8e9377'),('8ffeb714-3f33-2266-7ca0-3a0fb3cdddc1',14.4580,'blob','wwwroot/File/8ffeb714-3f33-2266-7ca0-3a0fb3cdddc1','2023-12-25 23:38:54','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'80a590d31e8840728a64552f7d47a01f'),('9278ff6b-67c1-3a0d-2095-3a0f83a6a0f5',68.4326,'swagger.png','wwwroot/Image/9278ff6b-67c1-3a0d-2095-3a0f83a6a0f5.png','2023-12-16 15:14:16','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'f0065576c9b34c739821e8fc59b15aee'),('940f9e49-6a82-2e1a-ad2d-3a0fdc8b7449',34.0605,'blob','wwwroot/File/940f9e49-6a82-2e1a-ad2d-3a0fdc8b7449','2024-01-02 21:30:47','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'054e590b182d4240b510c19040a0e0e0'),('948143d3-aef4-232b-f293-3a0fae3b45de',13.7275,'blob','wwwroot/File/948143d3-aef4-232b-f293-3a0fae3b45de','2023-12-24 21:40:41','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'7fa6fb12d8c2469cb592b89759745d8c'),('970fa612-2768-3a84-b20a-3a0f83a878e5',9.2988,'contracrs.png','wwwroot/Image/970fa612-2768-3a84-b20a-3a0f83a878e5.png','2023-12-16 15:16:17','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'a4dc1b1291774547a124973aaece4595'),('98af4882-b6e8-749c-69a4-3a0fae3bf780',34.4219,'blob','wwwroot/File/98af4882-b6e8-749c-69a4-3a0fae3bf780','2023-12-24 21:41:26','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'ff205cedbafd4aa69def6d751b9ee655'),('9a1b1c25-9262-9b9b-d951-3a0ff5439166',1998.2158,'image.png','wwwroot/Image/9a1b1c25-9262-9b9b-d951-3a0ff5439166.png','2024-01-07 16:42:47','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'9badade255eb4632be6af24e98865f6b'),('9b206d32-9cfc-9a92-16ea-3a0ff5897d82',443.5508,'image.png','wwwroot/Image/9b206d32-9cfc-9a92-16ea-3a0ff5897d82.png','2024-01-07 17:59:09','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'800bb0ed09974ca1910e7adb3f77bb77'),('9b3282c2-304f-6f2d-b431-3a0ff5880480',25.3398,'image.png','wwwroot/Image/9b3282c2-304f-6f2d-b431-3a0ff5880480.png','2024-01-07 17:57:32','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'68104c7fbb574626bb885ca6a6761062'),('9d17ce35-1e57-b44a-29f3-3a0ff583d8cf',92.1611,'image.png','wwwroot/Image/9d17ce35-1e57-b44a-29f3-3a0ff583d8cf.png','2024-01-07 17:52:59','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'d1f966f1237348fe8936baaccd6d8c09'),('9e4fb6cd-3d2c-17b1-2a39-3a0ff58bcdb0',561.4326,'image.png','wwwroot/Image/9e4fb6cd-3d2c-17b1-2a39-3a0ff58bcdb0.png','2024-01-07 18:01:41','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'2db522e9d2274200bac9920dba953689'),('a0e332dc-5e18-63a8-d6a6-3a0fae3aa397',34.4219,'blob','wwwroot/File/a0e332dc-5e18-63a8-d6a6-3a0fae3aa397','2023-12-24 21:39:59','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'c778ed0e64054552bbf01c4d0e50066f'),('a1b28bfb-66ff-8277-aa33-3a1004d11462',70.4199,'image.png','wwwroot/Image/a1b28bfb-66ff-8277-aa33-3a1004d11462.png','2024-01-10 17:11:39','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'b78b68ce111c496592c3741c4fcba84c'),('a25a8f97-fb72-e014-7506-3a0fb1970967',41.5996,'blob','wwwroot/File/a25a8f97-fb72-e014-7506-3a0fb1970967','2023-12-25 13:19:46','4685a3e5-b7a5-33b8-b67d-3a0fb195641a',NULL,NULL,'2e550fb82feb47218744303d8c64c0f8'),('a25e4271-8563-aceb-9dfc-3a0ff58d2f8c',292.7578,'image.png','wwwroot/Image/a25e4271-8563-aceb-9dfc-3a0ff58d2f8c.png','2024-01-07 18:03:11','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'3ebc25b960694976bca3116bab88dc20'),('a3a0e690-5231-769b-d2d7-3a0f83a7777a',33.5996,'fenceng.png','wwwroot/Image/a3a0e690-5231-769b-d2d7-3a0f83a7777a.png','2023-12-16 15:15:11','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'742b9d7ae1a144e0a9b6f996220f08b4'),('a70858df-0f77-0077-3d64-3a0ff589b6f0',384.4941,'image.png','wwwroot/Image/a70858df-0f77-0077-3d64-3a0ff589b6f0.png','2024-01-07 17:59:24','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'75a4d48ae6c349c195c8b4374629e077'),('a857ddb7-6b49-77a3-c932-3a1004c3aab0',14.5938,'image.png','wwwroot/Image/a857ddb7-6b49-77a3-c932-3a1004c3aab0.png','2024-01-10 16:57:00','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'2225964e401746a693b39811f557df09'),('a968e961-63e6-c46d-fa89-3a0ff57fd5ba',3.1016,'image.png','wwwroot/Image/a968e961-63e6-c46d-fa89-3a0ff57fd5ba.png','2024-01-07 17:48:36','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'f1f472bf16364dfd9a32993fc06a072a'),('aa00f562-378a-5dbc-67d6-3a0f83a71042',146.4072,'start.png','wwwroot/Image/aa00f562-378a-5dbc-67d6-3a0f83a71042.png','2023-12-16 15:14:44','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'cf606a158cdd40e986c8e7b8267c9a63'),('ac0cfcbc-d396-d018-e1e4-3a0f83a65dcd',16.4004,'web.png','wwwroot/Image/ac0cfcbc-d396-d018-e1e4-3a0f83a65dcd.png','2023-12-16 15:13:59','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'2679d8c20f3f4bb7aa92bd452881d8ba'),('ac26be33-0eba-5cbc-8319-3a0fae3ccd52',13.7275,'blob','wwwroot/File/ac26be33-0eba-5cbc-8319-3a0fae3ccd52','2023-12-24 21:42:21','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'aed21afbb83645129f9d4a2167a55e92'),('ae2370b5-e190-706c-6470-3a0ff5428232',174.6777,'image.png','wwwroot/Image/ae2370b5-e190-706c-6470-3a0ff5428232.png','2024-01-07 16:41:37','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'25316b6ddc3d46029362af3aabfc7830'),('ae44ba9b-e5e8-097d-e5eb-3a0fe1645bde',28.6934,'blob','wwwroot/File/ae44ba9b-e5e8-097d-e5eb-3a0fe1645bde','2024-01-03 20:06:11','897c7f89-eceb-831c-b0f9-3a0fe161ff1f',NULL,NULL,'d2d9e294bce04a419bd25b684e52caca'),('affe43ed-5e61-3b90-3416-3a1004f133e9',48.4473,'blob','wwwroot/File/affe43ed-5e61-3b90-3416-3a1004f133e9','2024-01-10 17:46:44','5d59e9f6-0c2e-9755-4cd8-3a1004eed5fb',NULL,NULL,'40505817a2b64433afcaed69e7eab0c1'),('b333c6a7-0163-a46a-cc7f-3a0fe02b7300',30.0576,'image.png','wwwroot/Image/b333c6a7-0163-a46a-cc7f-3a0fe02b7300.png','2024-01-03 14:24:24','69371804-7f8b-2f4d-d9b3-3a0fb0adfcde',NULL,NULL,'a28e0ba5e3a243db8acf5c1620d23b67'),('b3425a7c-9ac3-32fa-8b6f-3a0fae36bd65',13.7275,'blob','wwwroot/File/b3425a7c-9ac3-32fa-8b6f-3a0fae36bd65','2023-12-24 21:35:43','a46718ba-f869-6473-142b-3a0facd47b09',NULL,NULL,'c06a4ed59b164de4bccdc87ed1272f7c'),('b6c524db-a073-e629-27cf-3a0f83a7acb9',20.0518,'jiegou.png','wwwroot/Image/b6c524db-a073-e629-27cf-3a0f83a7acb9.png','2023-12-16 15:15:24','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'62914c5fc8b84e55a8a74e749c4e9c83'),('b713dbcd-3708-8bcf-915e-3a0ff57cfc1e',2.7012,'image.png','wwwroot/Image/b713dbcd-3708-8bcf-915e-3a0ff57cfc1e.png','2024-01-07 17:45:29','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'a922e36ab0fb47f18a0150c37692d220'),('b7842ce4-d5e3-df27-119a-3a0ff585e190',11.3945,'image.png','wwwroot/Image/b7842ce4-d5e3-df27-119a-3a0ff585e190.png','2024-01-07 17:55:12','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'1827489eb8084352acf18d4326f23865'),('b937c165-9937-a1d5-b692-3a0f839b5101',72.4961,'code.png','wwwroot/Image\\b937c165-9937-a1d5-b692-3a0f839b5101.png','2023-12-16 15:01:59','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'59236f72fb024970a85e660aaf882d6f'),('bb5318e2-4154-8192-7bbd-3a0ff57ce5a5',14.0928,'image.png','wwwroot/Image/bb5318e2-4154-8192-7bbd-3a0ff57ce5a5.png','2024-01-07 17:45:24','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'40b9e30e5b644051a768a9ffcb56a9aa'),('bbbdcd04-0427-6981-fd55-3a0ff5831030',17.9014,'image.png','wwwroot/Image/bbbdcd04-0427-6981-fd55-3a0ff5831030.png','2024-01-07 17:52:08','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'dff248abc74047fbb2692f3806ad9b17'),('bc67376d-44fb-ebf8-12b9-3a0ff582539e',328.8486,'image.png','wwwroot/Image/bc67376d-44fb-ebf8-12b9-3a0ff582539e.png','2024-01-07 17:51:19','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'2999932cb3ff41239924e1581cf43216'),('bde36be2-0fb2-a415-af2c-3a1004d85aa0',98.6748,'image.png','wwwroot/Image/bde36be2-0fb2-a415-af2c-3a1004d85aa0.png','2024-01-10 17:19:36','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'293243b6ae5a43e5b40fd5b6bc2d4e12'),('be0469d0-c1ee-fe2a-f5d1-3a0ff583ad23',420.7432,'image.png','wwwroot/Image/be0469d0-c1ee-fe2a-f5d1-3a0ff583ad23.png','2024-01-07 17:52:48','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'d26a5f225a0d491eba2797f30a9de6bb'),('c006dbd9-4f18-4407-2fd4-3a0ff581f4ed',55.1406,'image.png','wwwroot/Image/c006dbd9-4f18-4407-2fd4-3a0ff581f4ed.png','2024-01-07 17:50:55','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'442c3b0a4ce849c4b9c35fba3781f2e2'),('c09d5d91-892b-abd8-98a7-3a0fc2d762c9',13.7998,'blob','wwwroot/File/c09d5d91-892b-abd8-98a7-3a0fc2d762c9','2023-12-28 21:43:36','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'8eebb7c7d8c94f47abddd70683e7d187'),('c1b8956f-b420-852d-8c9b-3a0ff580db04',68.6455,'image.png','wwwroot/Image/c1b8956f-b420-852d-8c9b-3a0ff580db04.png','2024-01-07 17:49:43','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'8130ba28b0e74c149681591a91bfec00'),('c250084b-394a-e90c-6652-3a0ff5898f8d',204.1299,'image.png','wwwroot/Image/c250084b-394a-e90c-6652-3a0ff5898f8d.png','2024-01-07 17:59:14','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'20585ecd963f45888b81434d69985c6a'),('c364dd77-0905-22bc-c179-3a1004655d1b',11.2314,'image.png','wwwroot/Image/c364dd77-0905-22bc-c179-3a1004655d1b.png','2024-01-10 15:14:00','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'cf06c968837c4d398a0745f0e9458bcb'),('c369df5a-b111-6b0e-0859-3a0ff58d1db9',273.3428,'image.png','wwwroot/Image/c369df5a-b111-6b0e-0859-3a0ff58d1db9.png','2024-01-07 18:03:07','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'783126456fa04a778d930df671f42f27'),('c5007661-c34c-d8e1-da05-3a0ff57c98d4',11.9307,'image.png','wwwroot/Image/c5007661-c34c-d8e1-da05-3a0ff57c98d4.png','2024-01-07 17:45:04','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'68a31a1858e1407c9d8693068e814500'),('c519d142-4831-cb8d-36fa-3a0ff582eb2d',15.9365,'image.png','wwwroot/Image/c519d142-4831-cb8d-36fa-3a0ff582eb2d.png','2024-01-07 17:51:58','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'fd709db41d824eb5883559bd460879c5'),('c8f02a0c-bc14-e017-3eed-3a0fc2aa2552',29.3857,'blob','wwwroot/File/c8f02a0c-bc14-e017-3eed-3a0fc2aa2552','2023-12-28 20:54:11','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'c6d97bb469ca4396be4c6c48201e2b41'),('c9290393-30c1-5759-7992-3a0ff583c03a',52.2471,'image.png','wwwroot/Image/c9290393-30c1-5759-7992-3a0ff583c03a.png','2024-01-07 17:52:53','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'574b1689afa9444385723c2e6b774c14'),('c9e170c4-2444-0d0b-8db4-3a0ff5894381',283.9053,'image.png','wwwroot/Image/c9e170c4-2444-0d0b-8db4-3a0ff5894381.png','2024-01-07 17:58:54','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'93e454f3c88e4d4fb449aa4dedfa8c63'),('ccb06ecc-eb6d-ac18-fbcd-3a0ff58be1ce',566.2168,'image.png','wwwroot/Image/ccb06ecc-eb6d-ac18-fbcd-3a0ff58be1ce.png','2024-01-07 18:01:46','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'87acaf182c5e4d53baa8939393bf4d37'),('cd4bf8a2-b9e4-fd04-65ea-3a0f83998695',72.4961,'code.png','wwwroot/Image\\cd4bf8a2-b9e4-fd04-65ea-3a0f83998695.png','2023-12-16 15:00:04','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'ddf8f3dbbd644d778dd8e7f34555e972'),('ce7795a1-20b0-b3d9-088b-3a0ff58d5ef7',63.2432,'image.png','wwwroot/Image/ce7795a1-20b0-b3d9-088b-3a0ff58d5ef7.png','2024-01-07 18:03:23','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'a767f8f985464084afcb5e6a88013c7c'),('cf85afd6-a509-fea9-b88a-3a0ff5877418',21.2148,'image.png','wwwroot/Image/cf85afd6-a509-fea9-b88a-3a0ff5877418.png','2024-01-07 17:56:55','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'577d849ecdaf42ed869285c404935e78'),('d029043f-3b68-edc2-c6d9-3a0ff57fbf40',8.1309,'image.png','wwwroot/Image/d029043f-3b68-edc2-c6d9-3a0ff57fbf40.png','2024-01-07 17:48:30','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'4a60bba0be29478e91594286bee3a9c0'),('d08054c7-7f9d-c950-13b5-3a0fdf4d5545',29.1084,'blob','wwwroot/File/d08054c7-7f9d-c950-13b5-3a0fdf4d5545','2024-01-03 10:21:48','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'7403bd0f7b3f44948a0e8fe415b438f1'),('d1fad9e0-cefe-2509-0206-3a0ff5383977',9.8604,'logo.png','wwwroot/Image/d1fad9e0-cefe-2509-0206-3a0ff5383977.png','2024-01-07 16:30:23',NULL,NULL,NULL,'a8c489dcc1e14f43a78da830b243963b'),('d9396292-50ce-60ad-c235-3a0fb10bfc75',26.3945,'blob','wwwroot/File/d9396292-50ce-60ad-c235-3a0fb10bfc75','2023-12-25 10:47:53','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,NULL,'6ff1be573a2f41988612465958c2d6ef'),('d9480ed6-2b7e-5226-18c2-3a0ff58d64f6',63.2432,'image.png','wwwroot/Image/d9480ed6-2b7e-5226-18c2-3a0ff58d64f6.png','2024-01-07 18:03:25','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'1dff0bc3a04f49528397f1a8729da373'),('dbe3f45f-9ca4-3cec-b049-3a0fdc8a638e',51.5449,'blob','wwwroot/File/dbe3f45f-9ca4-3cec-b049-3a0fdc8a638e','2024-01-02 21:29:37','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'0dffeb6a5df84266b2b03908e344fafd'),('e15f1cf3-e48c-71db-050d-3a0ff57ec0fe',29.1826,'image.png','wwwroot/Image/e15f1cf3-e48c-71db-050d-3a0ff57ec0fe.png','2024-01-07 17:47:25','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'4b4487a10375469587c353832234d85e'),('e3fb8dce-be93-a318-a034-3a0ff57cd15d',12.4678,'image.png','wwwroot/Image/e3fb8dce-be93-a318-a034-3a0ff57cd15d.png','2024-01-07 17:45:18','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'a2c6c1635537496e97c14799073375f0'),('e5e33d91-c2fc-f470-2d59-3a0fc2c50861',11.3184,'blob','wwwroot/File/e5e33d91-c2fc-f470-2d59-3a0fc2c50861','2023-12-28 21:23:33','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'05c05ff355734f459bc6209f3713a083'),('ea857d23-a420-2ba1-91da-3a0fc2a9840f',31.3047,'blob','wwwroot/File/ea857d23-a420-2ba1-91da-3a0fc2a9840f','2023-12-28 20:53:30','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'169e01580bae4e79852e884086bb7d06'),('eab11be5-710f-2416-c5be-3a0fae37a592',30.1396,'blob','wwwroot/File/eab11be5-710f-2416-c5be-3a0fae37a592','2023-12-24 21:36:43','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'94156a1008054fcab814639a55bb83c9'),('ec39aed0-3fbd-a0e3-1776-3a0fae2abae9',14.0215,'blob','wwwroot/File/ec39aed0-3fbd-a0e3-1776-3a0fae2abae9','2023-12-24 21:22:36','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'8f575dc99f8a4f6fb7591eb914a6a3d2'),('eccb803b-15b3-90ef-c6c5-3a0ff5896965',453.4932,'image.png','wwwroot/Image/eccb803b-15b3-90ef-c6c5-3a0ff5896965.png','2024-01-07 17:59:04','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'87e1acc361e54c81b8b8987577241afa'),('edb443ea-6b13-fdac-8bb3-3a0f83a7db87',8.8643,'domanShared.png','wwwroot/Image/edb443ea-6b13-fdac-8bb3-3a0f83a7db87.png','2023-12-16 15:15:36','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'1ad99b1e3a0c421fbcc5fb0066537dba'),('edd9e87a-fb3b-ff5e-a9e8-3a0fc30451b0',46.2070,'blob','wwwroot/File/edd9e87a-fb3b-ff5e-a9e8-3a0fc30451b0','2023-12-28 22:32:41','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,NULL,'77ae51422f804e279cd8e4734075df2f'),('ef1e2b0d-b6f0-2020-fac6-3a0ff5459ec6',1234.1025,'image.png','wwwroot/Image/ef1e2b0d-b6f0-2020-fac6-3a0ff5459ec6.png','2024-01-07 16:45:01','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'c8de3d6613d643d89ba23977fb687cf9'),('ef6bded0-1627-22e4-6dd6-3a0fff2a91eb',67.1309,'image.png','wwwroot/Image/ef6bded0-1627-22e4-6dd6-3a0fff2a91eb.png','2024-01-09 14:51:40','69371804-7f8b-2f4d-d9b3-3a0fb0adfcde',NULL,NULL,'b02d981e41904e22bf5379b2b13b1511'),('f18f9374-9e04-db90-2457-3a0f83a89264',11.4424,'sqlsugar.png','wwwroot/Image/f18f9374-9e04-db90-2457-3a0f83a89264.png','2023-12-16 15:16:23','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'057c767ec9474693b266f83066f35316'),('f6fa7856-479e-d44c-660f-3a1004d298ce',115.3047,'image.png','wwwroot/Image/f6fa7856-479e-d44c-660f-3a1004d298ce.png','2024-01-10 17:13:18','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'6138e54b720b4f90b281b261db111a40'),('f7ac3698-2648-4041-da4b-3a0fe02c65ca',33.1797,'image.png','wwwroot/Image/f7ac3698-2648-4041-da4b-3a0fe02c65ca.png','2024-01-03 14:25:26','69371804-7f8b-2f4d-d9b3-3a0fb0adfcde',NULL,NULL,'4054f6e981564a258ad1fae82ab044e3'),('f869c094-f4f5-a221-5810-3a0fdba42dd9',9.2041,'blob','wwwroot/File/f869c094-f4f5-a221-5810-3a0fdba42dd9','2024-01-02 17:18:10','69371804-7f8b-2f4d-d9b3-3a0fb0adfcde',NULL,NULL,'36d34569471b474083c9ad3da531db01'),('f915b6ce-30d9-7158-d59c-3a0fe02b6208',30.0576,'image.png','wwwroot/Image/f915b6ce-30d9-7158-d59c-3a0fe02b6208.png','2024-01-03 14:24:20','69371804-7f8b-2f4d-d9b3-3a0fb0adfcde',NULL,NULL,'c931bb0cee1a4b79aae2cffbf02cb2d4'),('fc75164b-430a-0642-53f2-3a1004f1a84f',52.0166,'blob','wwwroot/File/fc75164b-430a-0642-53f2-3a1004f1a84f','2024-01-10 17:47:14','5d59e9f6-0c2e-9755-4cd8-3a1004eed5fb',NULL,NULL,'bb8b9f8985cf4c519baa2d6d06617dbc'),('ff3a1c4e-d866-b873-91ba-3a0ff583984f',189.3467,'image.png','wwwroot/Image/ff3a1c4e-d866-b873-91ba-3a0ff583984f.png','2024-01-07 17:52:43','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'2f6375a16e4c4a2ea635d3eb999fd174'),('ff6d2e22-be26-640e-db6d-3a0ff58957c1',398.6934,'image.png','wwwroot/Image/ff6d2e22-be26-640e-db6d-3a0ff58957c1.png','2024-01-07 17:58:59','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,'f203b7621dc94b6d9e7311a809968f0b'),('fffa507c-dcc7-296b-d096-3a100333d908',60.1846,'blob','wwwroot/File/fffa507c-dcc7-296b-d096-3a100333d908','2024-01-10 09:40:17','ab7018b2-ad7d-835f-2d19-3a1003313e5a',NULL,NULL,'f247bc0665404c9788e698807b4e9b53');
/*!40000 ALTER TABLE `File` ENABLE KEYS */;

-- 
-- Definition of Level
-- 

DROP TABLE IF EXISTS `Level`;
CREATE TABLE IF NOT EXISTS `Level` (
  `Id` varchar(36) NOT NULL,
  `CurrentLevel` int NOT NULL COMMENT '当前等级',
  `MinExperience` decimal(18,4) NOT NULL COMMENT '最小所需经验值',
  `Name` varchar(255) NOT NULL COMMENT '等级名称',
  `Nick` varchar(255) DEFAULT NULL COMMENT '等级称号',
  `Logo` varchar(255) DEFAULT NULL COMMENT '等候logo',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='等级表';

-- 
-- Dumping data for table Level
-- 

/*!40000 ALTER TABLE `Level` DISABLE KEYS */;
INSERT INTO `Level`(`Id`,`CurrentLevel`,`MinExperience`,`Name`,`Nick`,`Logo`) VALUES('1c3b0fc2-3d2b-13d6-0594-3a100b01d3cc',9,2500.0000,'巨佬',NULL,NULL),('374b18c3-fec9-491e-e401-3a100b01d3cc',8,2000.0000,'大佬',NULL,NULL),('3ae73016-5e55-d91d-50dd-3a100b01d3cc',3,100.0000,'大白',NULL,NULL),('696713d8-3409-78d5-2674-3a100b01d3cc',7,1500.0000,'老手',NULL,NULL),('79499676-c2ed-ba37-96ff-3a100b01d3cc',10,3000.0000,'大神',NULL,NULL),('7a39ef1e-68df-d604-9c70-3a100b01d3cc',6,1000.0000,'高手',NULL,NULL),('9f774d43-6732-a9fe-6c7c-3a100b01d3cc',5,600.0000,'熟练',NULL,NULL),('b77b0219-bffd-d7aa-5ddf-3a100b01d3cc',4,300.0000,'精英',NULL,NULL),('d6ef0fdf-70a8-0a53-d2d9-3a100b01d3ca',2,30.0000,'中白',NULL,NULL),('e4330a62-1dcb-120b-54e4-3a100b01d3be',1,10.0000,'小白',NULL,NULL);
/*!40000 ALTER TABLE `Level` ENABLE KEYS */;

-- 
-- Definition of BbsUserExtraInfo
-- 

DROP TABLE IF EXISTS `BbsUserExtraInfo`;
CREATE TABLE IF NOT EXISTS `BbsUserExtraInfo` (
  `Id` varchar(36) NOT NULL,
  `UserId` varchar(36) NOT NULL COMMENT '用户id',
  `Level` int NOT NULL COMMENT '用户等级',
  `UserLimit` int NOT NULL COMMENT '用户限制',
  `Money` decimal(18,4) NOT NULL COMMENT '钱钱',
  `Experience` bigint NOT NULL COMMENT '经验',
  PRIMARY KEY (`Id`),
  KEY `index_UserId` (`UserId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='评论表';

-- 
-- Dumping data for table BbsUserExtraInfo
-- 

/*!40000 ALTER TABLE `BbsUserExtraInfo` DISABLE KEYS */;
INSERT INTO `BbsUserExtraInfo`(`Id`,`UserId`,`Level`,`UserLimit`,`Money`,`Experience`) VALUES('00079f77-5d6d-50a1-f7a1-3a0facd47b25','a46718ba-f869-6473-142b-3a0facd47b09',1,0,0.0000,0),('015bf05e-155e-cba8-43f8-3a0fb31b63d6','c6b88149-3867-37f6-fa78-3a0fb31b63ba',1,0,0.0000,0),('01b9cd53-d4e7-e458-329c-3a1004eed612','5d59e9f6-0c2e-9755-4cd8-3a1004eed5fb',1,0,0.0000,0),('088f18e9-a3f5-c3e2-2b26-3a0fb0adfce4','69371804-7f8b-2f4d-d9b3-3a0fb0adfcde',1,0,0.0000,0),('13673848-b9df-c8ba-92e3-3a0fe45b44c2','44a18a90-6cbe-9460-5d45-3a0fe45b44a9',1,0,0.0000,0),('195507d1-dd3c-d927-fd27-3a101062202d','e6ac2c57-7536-5d83-b7fd-3a1010622015',1,0,0.0000,0),('19b1dc8a-aad3-ac42-0abc-3a0fdba2a379','fc162ae6-d3aa-b039-ed4d-3a0fdba2a372',1,0,0.0000,0),('1e98815f-13d1-40da-2f7f-3a0fc5ae3c60','5d8a9d7d-57ce-8077-6537-3a0fc5ae3c57',1,0,0.0000,0),('231fd334-4b94-524e-99c1-3a0fda7fef17','623fc788-7d86-8916-61d2-3a0fda7fef0f',1,0,0.0000,0),('26f36e1c-481d-dea8-1983-3a0fa2adbcfb','b8c53065-efe3-72f7-84de-3a0f836cc544',1,0,0.0000,0),('28cdc1c8-cacf-b94d-72f8-3a0fdba56135','98d7ce6a-37e1-a5b8-a877-3a0fdba5612e',1,0,0.0000,0),('2d2b1f44-64f5-3a9c-fffa-3a0fa9fbd658','74b32e7e-4586-78ca-fd43-3a0fa9fbd640',1,0,0.0000,0),('2ebdb53c-df3f-86aa-7562-3a100b40bc47','eeb2b210-3f18-e3a6-fd89-3a100b40bc07',1,0,0.0000,0),('3013ba04-df6c-ce16-54b3-3a0fdfdb8321','989124e5-3324-0d4c-6a62-3a0fdfdb82e1',1,0,0.0000,0),('302aa04d-2d99-a86b-0038-3a0fb12ff0de','c7464266-f42a-9f0d-4985-3a0fb12ff0d6',1,0,0.0000,0),('33632a3d-2551-c5c2-2e12-3a1018e25bb9','0014829f-bb75-369f-4047-3a1018e25aba',1,0,0.0000,0),('341a3f40-10ee-e5d0-ae37-3a0fa2adbcfa','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',1,0,0.0000,0),('3536f094-f307-cb4c-b1cd-3a100b5f6957','ffe4c769-eb3a-e834-4574-3a100b5f6921',1,0,0.0000,0),('36f5b594-b084-ec07-6f6a-3a0fb122cf4a','f6fa2606-356f-7314-c874-3a0fb122cf43',1,0,0.0000,0),('3e5a9fd8-61f6-fe10-1f48-3a0fae174885','15146013-b586-30f2-f81f-3a0fae17487e',1,0,0.0000,0),('40949e22-e5a5-fbda-6c9e-3a0fffb281fb','5ab9405a-907a-71a0-ae98-3a0fffb281e3',1,0,0.0000,0),('46544331-1a66-aa50-609d-3a0fae1148b0','371ed696-bb9c-66fa-4e84-3a0fae1148a9',1,0,0.0000,0),('4a5c770c-24c4-8948-1392-3a0fdf84ac53','a1929e2a-23ca-457b-9b6b-3a0fdf84ac23',1,0,0.0000,0),('4b78d3f9-c3e1-e612-afaa-3a0fd9fdc0b5','029eb7c0-22ba-5671-b1f5-3a0fd9fdc0ad',1,0,0.0000,0),('4be521a2-df37-92ce-b826-3a0fc2597f2c','11555e08-9e27-3ea6-14d3-3a0fc2597f24',1,0,0.0000,0),('4dacff7e-352a-8adf-6e03-3a0fdae21f0a','6f4f1a9c-87df-30bd-a54e-3a0fdae21e36',1,0,0.0000,0),('4f054804-77e3-26b2-d280-3a0fe048c89e','20b15203-f437-54ff-6488-3a0fe048c887',1,0,0.0000,0),('5327a976-677b-a1e3-cf90-3a0fea550204','9d5c2790-8bdf-6c73-474c-3a0fea5501e7',1,0,0.0000,0),('597dd17f-02a0-8c12-f954-3a0ffa77dce5','ba759caa-709e-741d-7c93-3a0ffa77dcc9',1,0,0.0000,0),('59cf7e31-e3e4-544e-1038-3a0f836cc536','59cf7e31-e3e4-544e-1038-3a0f836cc538',8,0,42.1100,0),('59ec8324-79dd-1982-94a2-3a0fe440aad0','b0ff5cc0-a580-26a3-42db-3a0fe440aab2',1,0,0.0000,0),('5a6f58fa-cef8-862b-b335-3a0ff4bbef10','ae04a0b3-3e0a-99bf-bcb0-3a0ff4bbeee4',1,0,0.0000,0),('63cec25c-8f4d-bc94-ee73-3a0fe5d96197','6a4a2126-0028-248c-ab2e-3a0fe5d9617f',1,0,0.0000,0),('6711e1d6-684c-9f82-8385-3a1003313ed5','ab7018b2-ad7d-835f-2d19-3a1003313e5a',1,0,0.0000,0),('67f7ee63-4b30-fb3b-ab42-3a0ffb312a39','bac9bbf1-5119-3469-88d5-3a0ffb3129f2',1,0,0.0000,0),('6abe7960-8de9-5e4c-75af-3a0fc6a850a1','99b5b971-d68d-c827-6041-3a0fc6a85099',1,0,0.0000,0),('6bbaba37-07c8-d9a6-0fb8-3a0fe4c9205a','47ba50b4-2369-9bc8-6c93-3a0fe4c92034',1,0,0.0000,0),('7159f783-a3d2-17ce-6936-3a0fe161ff3d','897c7f89-eceb-831c-b0f9-3a0fe161ff1f',1,0,0.0000,0),('715c5dda-8eba-edcf-db0b-3a1009b255e2','55f49636-805f-a9f1-f276-3a1009b255c9',1,0,0.0000,0),('75d5bd75-f947-4f86-060f-3a0ffe9d48af','f863333c-1d79-0ca7-8b7d-3a0ffe9d4894',1,0,0.0000,0),('77251e35-aa96-fb40-3ed3-3a0fdb22fe24','5a42983f-80a0-19ba-1a97-3a0fdb22fe1c',1,0,0.0000,0),('7aba6549-489d-a477-ebb5-3a0ffa90fea7','32c11814-dd8f-0849-e1fd-3a0ffa90fe8e',1,0,0.0000,0),('7ac7b48e-c6df-a527-6777-3a0fb097f795','85c976e4-8b08-01c9-7c1a-3a0fb097f78e',1,0,0.0000,0),('7de0a336-56b2-55e0-a2db-3a0fdb9a007a','aa5752b2-0894-a13c-ff50-3a0fdb9a0073',1,0,0.0000,0),('80ab12b1-eac1-a170-7601-3a101e4fe209','2c2aa2ef-006c-6c61-e7c4-3a101e4fe1d8',1,0,8.4000,0),('89f0797f-99a6-ab6e-e0b3-3a0fac36469a','86e53d3a-7819-352d-ade8-3a0fac354bdc',1,0,0.0000,0),('8e9bf8b0-fb2e-28f0-3e12-3a0fae1099f8','3de3e074-8ebc-9280-0d16-3a0fae1099ef',1,0,0.0000,0),('93d2146d-cd54-17b1-3bf7-3a100e647752','0266be8b-25f2-5fb1-0217-3a100e64773c',1,0,0.0000,0),('98c25445-4060-a7e4-d69f-3a0ff629164f','feaafa96-e35a-fe25-6810-3a0ff6291623',1,0,0.0000,0),('993ffa01-ff16-0c76-94af-3a0fb5c65962','9eb608cf-4790-a6e7-e6a9-3a0fb5c65943',1,0,0.0000,0),('9d32c447-c59e-1290-b557-3a0fbb81809c','042c0a8e-dfc6-7bdb-3d1d-3a0fbb818095',1,0,0.0000,0),('9f04e048-d38d-815b-7366-3a0fe1fed2b7','2d407f53-71c5-b2b6-ccdd-3a0fe1fed2a0',1,0,0.0000,0),('a39f1799-65d5-318c-0f63-3a100358913f','33564c61-c9f5-b663-758a-3a1003589125',1,0,0.0000,0),('a4be05f6-5a23-1ca4-6025-3a0fdaedfe75','8b12cc70-9c9b-c1a7-1f0f-3a0fdaedfe6d',1,0,0.0000,0),('a8b3754f-ef4a-eb5c-b851-3a1009a1c9c8','cfa14797-eb98-cbdf-f4de-3a1009a1c9af',1,0,0.0000,0),('ac129562-384b-bb45-0dad-3a100fe21403','af508a24-3e0f-2514-bb8a-3a100fe213e9',1,0,0.0000,0),('ac90a481-ffb1-e172-1de2-3a0fac317dff','cc6ad63b-07be-76af-0bb0-3a0fac30ac03',1,0,0.0000,0),('ada62130-cfa1-a920-f831-3a0fb5d30819','4e24c804-5b3b-2974-9efc-3a0fb5d30810',1,0,0.0000,0),('af4e4b76-6df3-0084-1423-3a0fae4796d1','8823e06f-8f1e-0235-8ef8-3a0fae4796ca',1,0,9.0400,0),('b23a4993-9c2e-dbd7-ed62-3a0fc564496d','313abacd-9a19-5dbd-d665-3a0fc564495a',1,0,0.0000,0),('b4f3cd09-5c7f-a950-00f4-3a0fbff305c0','bfe59787-f6eb-cd49-0212-3a0fbff305b7',1,0,0.0000,0),('b5389fbf-3b3b-3b61-b683-3a0fbc5746fe','fc6f7549-d86d-5a04-c8e8-3a0fbc5746e2',1,0,0.0000,0),('b5e40876-24f2-9c59-72bd-3a0fea8fd37c','899ea329-a63f-bba9-0f68-3a0fea8fd365',1,0,0.0000,0),('b78685c6-bb11-c1d7-9140-3a0fead0965d','9ce9ce71-c3ef-0bd0-1e1a-3a0fead09645',1,0,0.0000,0),('c05561e3-b77a-c7fa-7fe6-3a101d1d28eb','cecb339a-1806-bbd7-6770-3a101d1d28d0',1,0,0.0000,0),('c13354cc-9f99-a56d-1d4d-3a0ffa667e7f','438fecf2-7c2b-665e-3cd6-3a0ffa667e62',1,0,0.0000,0),('c75bb1f5-f6f9-7ec4-b035-3a0fa2adbcfb','9e64fc6f-3e2a-4005-18f6-3a0f836cc547',1,0,0.0000,0),('c89a4920-8ba1-d706-56bb-3a0fb5ffafd0','c0d80a61-f2d6-e13e-f7a8-3a0fb5ffafa3',1,0,0.0000,0),('c9180c5b-10f9-faa1-ad4c-3a0fdf076f46','4b58e3a5-8bff-a839-1530-3a0fdf076f1c',1,0,0.0000,0),('c9fe1608-ff23-cdc9-6105-3a0fb09fecbd','69b15fa0-7a66-3287-f532-3a0fb09fecb6',1,0,0.0000,0),('ca029488-3321-d589-5cbc-3a0fb1956422','4685a3e5-b7a5-33b8-b67d-3a0fb195641a',1,0,0.0000,0),('cb65b9f7-8589-0b3c-1597-3a0fdb103eb6','c64cf308-4060-e211-5068-3a0fdb103eaf',1,0,0.0000,0),('cb671e24-5b89-61bb-4099-3a10088619b9','e8426f52-6ed0-e15b-e8b5-3a1008861941',1,0,0.0000,0),('cc0ec9d0-3eee-65c5-d572-3a1003045d53','691de7d2-8514-1602-c558-3a1003045d25',1,0,0.0000,0),('cda1b878-d445-9631-9fe0-3a0fb16fd949','f19ef1b0-5141-17ee-910a-3a0fb16fd942',1,0,0.0000,0),('d1b2df10-7f3f-cc29-cf52-3a0fc05768bf','d7315ea7-0a69-d5bf-f843-3a0fc05768b7',1,0,0.0000,0),('d55f86dd-5e7c-1205-14ec-3a0fda78ccd3','e1926b51-a0fc-7d2e-9cb9-3a0fda78cccc',1,0,0.0000,0),('da66e511-3cfb-534e-7d6a-3a0fdb8c7ca5','60c66f70-ca1e-8d07-2ac4-3a0fdb8c7c9f',1,0,0.0000,0),('dad1af88-38bb-c5b5-8e0e-3a10086ad021','452be1e5-2a08-98a8-006c-3a10086ad006',1,0,0.0000,0),('db4f0f1b-c05a-eb40-e8eb-3a0fb63a89c0','81213b20-f29f-1646-58de-3a0fb63a89aa',1,0,0.0000,0),('dcfd4b8f-7562-fe00-f681-3a0fdfeb44fc','806b5e47-a685-2f16-8481-3a0fdfeb44e2',1,0,0.0000,0),('dd2f7929-e04b-f420-c621-3a1008092e74','10db8047-fee0-a0d8-4938-3a1008092e3f',1,0,0.0000,0),('ddfc59b4-7548-774b-8590-3a0fae1eff53','7b8e5231-af13-1a1e-0a0e-3a0fae1eff4c',1,0,0.0000,0),('e3cb327f-08ac-6882-0b09-3a100e5c9f86','b51f1a30-5702-c900-4356-3a100e5c9f6d',1,0,0.0000,0),('e4678d2f-bd15-e121-88c7-3a0fdabcaeb5','84f17d54-d35b-5581-e5d3-3a0fdabcaeae',1,0,0.0000,0),('e4be6df8-904e-e27f-4bd6-3a0ffe0c6525','be3f42e6-e6ae-25ab-7973-3a0ffe0c6503',1,0,0.0000,0),('ea8403ec-9344-e34f-60de-3a0fe9e20ccb','20515993-7547-d171-ea80-3a0fe9e20c99',1,0,0.0000,0),('efa1b3dc-3699-b977-0082-3a0fdafe79fc','35bee444-e18c-8ee4-f413-3a0fdafe79f5',1,0,0.0000,0),('f1ace623-3928-0aa8-fa6d-3a0fe0096c2d','f327906e-63f3-bb57-6dd6-3a0fe0096c16',1,0,0.0000,0),('f3f0bd81-cdd5-719e-0ee6-3a0ffa60ea2c','419231a8-9bfa-ddfc-85a8-3a0ffa60e875',1,0,0.0000,0),('f72c9d0f-f9e4-73aa-e792-3a101d3f31c2','1a9063ac-559c-d65a-2ce3-3a101d3f31aa',1,0,0.0000,0),('f8395a30-68e5-aa85-2c5d-3a0fb89339d8','01d7ec4a-d7f3-54ad-cf87-3a0fb89339ce',1,0,0.0000,0),('f92f029f-7187-a568-703d-3a0fb8d4f744','0a6a0afd-6a31-4729-0c76-3a0fb8d4f73c',1,0,10.4000,0);
/*!40000 ALTER TABLE `BbsUserExtraInfo` ENABLE KEYS */;

-- 
-- Definition of LoginLog
-- 

DROP TABLE IF EXISTS `LoginLog`;
CREATE TABLE IF NOT EXISTS `LoginLog` (
  `Id` varchar(36) NOT NULL,
  `CreationTime` datetime NOT NULL,
  `LoginUser` varchar(255) DEFAULT NULL COMMENT '登录用户',
  `LoginLocation` varchar(255) DEFAULT NULL COMMENT '登录地点',
  `LoginIp` varchar(255) DEFAULT NULL COMMENT '登录Ip',
  `Browser` varchar(255) DEFAULT NULL COMMENT '浏览器',
  `Os` varchar(255) DEFAULT NULL COMMENT '操作系统',
  `LogMsg` varchar(255) DEFAULT NULL COMMENT '登录信息',
  `CreatorId` varchar(36) DEFAULT NULL,
  PRIMARY KEY (`Id`),
  KEY `index_LoginUser` (`LoginUser`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

-- 
-- Dumping data for table LoginLog
-- 

/*!40000 ALTER TABLE `LoginLog` DISABLE KEYS */;
INSERT INTO `LoginLog`(`Id`,`CreationTime`,`LoginUser`,`LoginLocation`,`LoginIp`,`Browser`,`Os`,`LogMsg`,`CreatorId`) VALUES('00188a17-cd74-851a-5dca-3a0fe4412181','2024-01-04 09:26:34','wangw123456','四川省-成都市','60.255.157.128','Other','Windows 10','wangw123456登录系统',NULL),('0091b7f4-d1f5-f723-983c-3a0fc057dc09','2023-12-28 10:05:04','ming','广东省-中山市','119.142.70.148','Other','Windows 10','ming登录系统',NULL),('029d0ec5-f60b-bbf7-3386-3a0fdf84d8fc','2024-01-03 11:22:26','xiaonibaba','上海-上海市','112.65.98.84','Other','Windows 10','xiaonibaba登录系统',NULL),('03801973-f4c2-47b2-9d33-3a0fef1e3f84','2024-01-06 12:04:17','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('05c59b91-5282-e276-23e5-3a0ffb60b53a','2024-01-08 21:12:20','xwen','本地-本机','127.0.0.1','Other','Windows 10','xwen登录系统',NULL),('05d0d704-3e26-3234-8bc4-3a101acd2f00','2024-01-14 23:39:02','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('064d115b-56ab-5b6c-bf59-3a0fa3f01f53','2023-12-22 21:42:23','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('06b8bc6b-8242-c45e-a04b-3a0fd555a2f5','2024-01-01 11:54:40','cc','广东省-深圳市','113.102.166.252','Other','Windows 10','cc登录系统',NULL),('07b60dce-c225-14a9-c695-3a1005fdbcda','2024-01-10 22:40:03','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509'),('088ad595-d8bf-16c3-c6f5-3a0feed7fb31','2024-01-06 10:47:32','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('08b7d7e2-306e-b62e-623c-3a0fb5c6c14f','2023-12-26 08:50:22','Jax','山东省-青岛市','119.167.76.162','Other','Windows 10','Jax登录系统',NULL),('08be5859-d887-a88c-de37-3a0fef96e3ce','2024-01-06 14:16:04','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('0964158e-d3a7-2b0b-b337-3a0ffb5eea29','2024-01-08 21:10:22','xwen','本地-本机','127.0.0.1','Other','Windows 10','xwen登录系统',NULL),('0a1a382e-3574-f705-7cf2-3a0ffc0584c4','2024-01-09 00:12:21','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('0a9d623b-6a36-792f-8d6c-3a1013a02cb1','2024-01-13 14:12:32','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('0cda71f8-f745-d506-387f-3a101aea8c98','2024-01-15 00:11:07','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('0e3b233f-de49-62eb-689d-3a0fbc57c019','2023-12-27 15:26:28','hatsuko','0-0','203.221.210.22','Other','Windows 10','hatsuko登录系统',NULL),('0e3d330d-64c8-6226-33aa-3a0feeefc11f','2024-01-06 11:13:30','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('0e62cd45-925d-f5db-b070-3a0ffbeef060','2024-01-08 23:47:41','cc','广东省-深圳市','113.102.165.130','Other','Windows 10','cc登录系统',NULL),('0f21bbb3-9b1e-a36c-531f-3a0ffb31f7a6','2024-01-08 20:21:16','lauralxj','河南省-开封市','223.104.106.234','Mac','Mac OS X 10.14.6','lauralxj登录系统',NULL),('100537a1-d34b-8ecb-7b73-3a0fdc3033f4','2024-01-02 19:51:07','core','广东省-深圳市','183.11.37.129','Other','Windows 10','core登录系统',NULL),('1154920b-73b2-b6c9-b05e-3a0fa440c2ef','2023-12-22 23:10:28','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('118310b2-4b18-901c-9f8f-3a0fef9af8f2','2024-01-06 14:20:31','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('1191d9ea-8d2e-4132-2ce6-3a1006070c71','2024-01-10 22:50:13','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('1265ac64-1e29-c1e9-0109-3a101af18bd3','2024-01-15 00:18:45','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('12bac7ae-9518-5e46-0f24-3a0fef938661','2024-01-06 14:12:23','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('1348f45f-0fd6-e57b-e133-3a0fdcbd1c87','2024-01-02 22:25:02','cc','广东省-深圳市','183.11.37.129','Other','Windows 10','cc登录系统',NULL),('13a58062-c11e-c5bf-d0eb-3a0fe7832356','2024-01-05 00:37:32','core','本地-本机','127.0.0.1','Other','Windows 10','core登录系统',NULL),('13b9c8c6-cb6b-c05d-37a9-3a101a951ba9','2024-01-14 22:37:47','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('13d554d6-f009-e620-f649-3a101a928e4e','2024-01-14 22:35:00','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('14f61a1f-63de-b0a5-aad7-3a0ffe0cb458','2024-01-09 09:39:26','weixiao','广东省-广州市','14.145.151.161','Other','Windows 10','weixiao登录系统',NULL),('150ceab4-b7e8-9fa3-590b-3a0fef9608a8','2024-01-06 14:15:08','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('155c50c4-3edd-acc9-baf6-3a0fbff39e61','2023-12-28 08:15:34','lightnehum','北京-北京市','123.113.99.169','Other','Windows 10','lightnehum登录系统',NULL),('1651f9f9-495a-8916-6354-3a0fef338521','2024-01-06 12:27:31','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('172df7e5-f0ab-e6ae-1323-3a0fe4d2b8a8','2024-01-04 12:05:36','jiancaixing','本地-本机','127.0.0.1','Other','Windows 10','jiancaixing登录系统',NULL),('17bc7a50-3a0a-d83b-3555-3a0ffb6dc3d0','2024-01-08 21:26:35','xwen','本地-本机','127.0.0.1','Other','Windows 10','xwen登录系统',NULL),('17fc881d-1ad5-7ed1-0e43-3a1009db93ae','2024-01-11 16:41:13','youngcao9188','上海-上海市','223.166.35.3','Other','Windows 10','youngcao9188登录系统',NULL),('198cfe79-3041-bb7f-53b5-3a100fe27370','2024-01-12 20:46:27','tczy183','重庆-重庆市','183.64.78.226','Other','Windows 10','tczy183登录系统',NULL),('1aa0734f-7537-2962-620c-3a0fe9fcff19','2024-01-05 12:09:52','pavel','山东省-济南市','119.163.78.251','Other','Windows 10','pavel登录系统',NULL),('1b36ab2e-1ebb-90b4-d1e9-3a0fb10899fe','2023-12-25 10:44:11','cctest','广东省-深圳市','116.24.189.148','Other','Windows 10','cctest登录系统',NULL),('1c6c682c-01a2-ab7a-6e60-3a100938b70d','2024-01-11 13:43:20','刘本法','湖北省-武汉市','183.94.57.148','Other','Windows 10','刘本法登录系统',NULL),('1ea59817-509f-bbf1-bbf0-3a1008c8b601','2024-01-11 11:40:59','andy','山东省-滨州市','219.146.215.226','Other','Windows 10','andy登录系统',NULL),('1f476bf2-8a24-600e-9bd6-3a0f99c85600','2023-12-20 22:22:44','cc','广东省-深圳市','113.102.166.22','Other','Windows 10','cc登录系统',NULL),('1ffa1e51-1ea7-5b82-ba70-3a101aedd21e','2024-01-15 00:14:41','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('20c918c6-c5cd-15d9-c283-3a0fb128bfd4','2023-12-25 11:19:18','youngcao9188','上海-上海市','223.166.35.3','Other','Windows 10','youngcao9188登录系统',NULL),('20ea8754-ced9-1337-1633-3a101ac017e9','2024-01-14 23:24:44','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('21050795-4037-0842-69ba-3a10143e2c00','2024-01-13 17:05:07','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('21303b0a-e7a3-6159-822a-3a0fef30c5d1','2024-01-06 12:24:31','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('2190120c-e4c1-aaba-2f1e-3a101d799f29','2024-01-15 12:06:38','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('21a4a206-5993-9ab4-5a49-3a0fef88af8b','2024-01-06 14:00:33','core','广东省-深圳市','113.102.164.30','Other','Windows 10','core登录系统',NULL),('21da249a-321b-a39c-7fcb-3a10061b1dd0','2024-01-10 23:12:08','cc','广东省-深圳市','113.102.167.115','Other','Windows 10','cc登录系统',NULL),('23024233-e81b-ea4c-5500-3a1005bbf20d','2024-01-10 21:28:11','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('23ba6b5b-a8cf-e8e6-b2bb-3a0fa438e24e','2023-12-22 23:01:52','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('2595e1c8-96f0-4481-cd6f-3a0fe4c08670','2024-01-04 11:45:43','youngcao9188','上海-上海市','223.166.35.3','Other','Windows 10','youngcao9188登录系统',NULL),('25dae401-3d34-81de-d6bb-3a0ffb52cbf4','2024-01-08 20:57:08','cc','广东省-东莞市','223.104.68.216','Other','Windows 10','cc登录系统',NULL),('25fd482f-cc62-33b0-ad95-3a101d88832c','2024-01-15 12:22:53','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('2603395f-b6e9-4de6-e329-3a0fe41e4c1d','2024-01-04 08:48:31','cc','广东省-深圳市','113.116.218.250','Other','Windows 10','cc登录系统',NULL),('2665aeee-a3fa-5615-aabe-3a0fefa1e0df','2024-01-06 14:28:04','Xwen','广东省-深圳市','113.116.218.163','Other','Windows 10','Xwen登录系统',NULL),('26ee8f18-f32a-f0ef-87b0-3a101d381bb8','2024-01-15 10:55:04','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('277f6fd2-7d5c-acc9-041a-3a0fef2cdd18','2024-01-06 12:20:15','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('2799d7c5-f11f-67da-409b-3a0fc2a4c2fe','2023-12-28 20:48:18','whj','广东省-深圳市','183.17.64.152','Other','Windows 10','whj登录系统',NULL),('29cb355e-100b-16d4-0ee2-3a0fdb9a47d4','2024-01-02 17:07:22','tyjctl','山西省-太原市','183.184.216.9','Other','Windows 10','tyjctl登录系统',NULL),('2aec7ebb-1717-5f05-1bee-3a0fb86ec508','2023-12-26 21:13:08','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('2af8367c-2d18-1793-fa78-3a0ffbff3d06','2024-01-09 00:05:29','xwen','本地-本机','127.0.0.1','Other','Windows 10','xwen登录系统',NULL),('2bd0cdd4-50d4-48fe-7861-3a0fea6279a4','2024-01-05 14:00:43','whj','广东省-深圳市','113.116.218.250','Other','Windows 10','whj登录系统',NULL),('2c5daa23-eed7-886b-f347-3a10086b140f','2024-01-11 09:58:43','zjwy','山东省-临沂市','112.228.139.101','Other','Windows 10','zjwy登录系统',NULL),('2d24900c-83d9-3d10-0dc0-3a0fa442047b','2023-12-22 23:11:50','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('2f16c3ae-9ff3-5ec5-6817-3a0ff4bc1d64','2024-01-07 14:14:49','xyf','江苏省-常州市','121.231.111.73','Other','Windows 10','xyf登录系统',NULL),('2f8a21b6-1d15-0c16-2ab6-3a101af22267','2024-01-15 00:19:24','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('30686832-d490-b56f-1906-3a0fb33f8f82','2023-12-25 21:03:28','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('31742781-a8c7-d703-4004-3a0fef9a14af','2024-01-06 14:19:33','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('318b5655-b27e-760d-059c-3a10097a96e2','2024-01-11 14:55:17','fktet','广东省-惠州市','116.6.194.90','Other','Windows 10','fktet登录系统',NULL),('31f807da-d307-309a-4da4-3a10010f4bc7','2024-01-09 23:41:07','whj','广东省-东莞市','223.104.68.233','Other','Windows 10','whj登录系统',NULL),('32c39caa-d304-b492-e5e4-3a0fdabd3495','2024-01-02 13:05:53','第九天','吉林省-长春市','36.48.109.24','Other','Windows 10','第九天登录系统',NULL),('333d1ae4-f2ee-add9-890b-3a1005d6fe0f','2024-01-10 21:57:44','cc','广东省-深圳市','113.102.167.115','Other','Windows 10','cc登录系统',NULL),('3440dbdf-9a43-515c-b7ce-3a101adcfca3','2024-01-14 23:56:18','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('344e8c31-738e-9349-734e-3a0ffbf73dcd','2024-01-08 23:56:45','whj','广东省-东莞市','223.104.68.216','Other','Windows 10','whj登录系统',NULL),('34566e02-24f7-cd38-3c64-3a0ff9e9641c','2024-01-08 14:22:23','whj','广东省-深圳市','113.116.216.120','Other','Windows 10','whj登录系统',NULL),('34c48bc2-3a28-5faf-38a1-3a0fe196c813','2024-01-03 21:01:16','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('34c6589a-1f54-8b98-3ed3-3a0fdf824b41','2024-01-03 11:19:39','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('358f9808-cbc7-af21-b21e-3a0fb73c549d','2023-12-26 15:38:25','cctest','广东省-深圳市','116.24.189.54','Other','Windows 10','cctest登录系统',NULL),('35b435b1-3b96-0eb1-0cce-3a100612a45f','2024-01-10 23:02:53','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('35ef5c77-1831-df31-b8d9-3a101e109775','2024-01-15 14:51:32','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('360e92ad-2c30-ecde-c569-3a0fb6143a0d','2023-12-26 10:14:59','cctest','广东省-深圳市','116.24.189.148','Other','Windows 10','cctest登录系统',NULL),('36944eb4-9013-8ab2-591a-3a101d3f648b','2024-01-15 11:03:02','wangzhuhui','浙江省-宁波市','61.153.149.52','Other','Windows 10','wangzhuhui登录系统',NULL),('36f54266-2bfd-1326-2e03-3a0fc6aca7c2','2023-12-29 15:35:24','cc','广东省-深圳市','116.25.133.191','Other','Windows 10','cc登录系统',NULL),('37ff1fc7-d25a-ad45-d2e8-3a1008da9cbe','2024-01-11 12:00:32','zzwwg','河南省-郑州市','171.15.159.178','Other','Windows 10','zzwwg登录系统',NULL),('381f2f97-314f-8c93-5420-3a0fea902858','2024-01-05 14:50:37','420979501','重庆-重庆市','14.106.229.205','Other','Windows 10','420979501登录系统',NULL),('38bc5b0e-95de-2857-3334-3a101add86b0','2024-01-14 23:56:53','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('3911873b-6ba5-3fb4-ffc2-3a101e5043c5','2024-01-15 16:01:04','someTime','湖北省-武汉市','58.48.186.124','Other','Windows 10','someTime登录系统',NULL),('392eda68-7b3d-0af9-1268-3a0fef2b8c5d','2024-01-06 12:18:49','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('39b64a4a-a1c6-3179-ecd4-3a100624f4e5','2024-01-10 23:22:53','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('3a77d083-cc3f-4251-47a0-3a0fef2b27be','2024-01-06 12:18:23','Xwen','本地-本机','127.0.0.1','Other','Windows 10','Xwen登录系统',NULL),('3ac00e8d-4a24-8f17-d46a-3a101d7a5131','2024-01-15 12:07:23','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('3ad1d8cf-ea16-b3e7-fa64-3a0fdb0c24b3','2024-01-02 14:32:07','cc','广东省-深圳市','113.116.218.249','Other','Windows 10','cc登录系统',NULL),('3ad25151-e7a2-3e5f-81e5-3a10144de9d6','2024-01-13 17:22:18','cc','广东省-深圳市','113.116.150.115','Other','Windows 10','cc登录系统',NULL),('3b4e517f-e203-e43f-5582-3a0fe0c8dcd7','2024-01-03 17:16:21','shenjingwa','北京-北京市','61.51.66.11','Other','Windows 10','shenjingwa登录系统',NULL),('3c981d95-9c8b-95e4-55f3-3a100b5fb859','2024-01-11 23:45:10','jianweie','湖南省-怀化市','223.149.12.205','Other','Windows 10','jianweie登录系统',NULL),('3d3f3fc9-d8df-becd-03e3-3a0fae15a6bb','2023-12-24 20:59:35','whj','广东省-深圳市','119.123.139.17','Other','Windows 10','whj登录系统',NULL),('3dc4fbba-37ca-a171-538d-3a0fe469f0c5','2024-01-04 10:11:09','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('3e552795-f6d1-2e4b-c678-3a101a9342e2','2024-01-14 22:35:46','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('3e9c60d0-324a-fe25-0ff5-3a101ae5d016','2024-01-15 00:05:56','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('3f1f32a9-209d-91b5-1699-3a1000bf34b6','2024-01-09 22:13:39','cc','广东省-深圳市','113.102.165.130','Other','Windows 10','cc登录系统',NULL),('3f61be8a-bbc0-1ab4-4bd1-3a0fef40d012','2024-01-06 12:42:03','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('3f8afe92-cf8c-4118-7f02-3a0fe47bbd09','2024-01-04 10:30:35','core','本地-本机','127.0.0.1','Other','Windows 10','core登录系统',NULL),('3ff5716c-4e55-d1e5-5123-3a0fe41f4e5a','2024-01-04 08:49:37','core','广东省-深圳市','113.116.218.250','Other','Windows 10','core登录系统',NULL),('40268e49-bd2c-8273-ed33-3a0fae1f96ab','2023-12-24 21:10:26','2535688890','河南省-郑州市','223.88.44.73','Other','Linux','2535688890登录系统',NULL),('408df3b0-c6e4-9243-ab18-3a1005bb9ec5','2024-01-10 21:27:50','xwen','广东省-东莞市','223.104.77.146','Other','Windows 10','xwen登录系统',NULL),('4108bfc6-2af3-74d1-721d-3a0ff629bc75','2024-01-07 20:54:11','zhangdaozi','广西-桂林市','116.1.3.252','Other','Windows 10','zhangdaozi登录系统',NULL),('4166b866-c318-6d63-f9bc-3a101af0be36','2024-01-15 00:17:53','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('41fd0049-5a87-1bb9-87f6-3a0fae377773','2023-12-24 21:36:31','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('41fe9a4a-fbc4-07b9-de85-3a0ffbfa0867','2024-01-08 23:59:48','xwen','本地-本机','127.0.0.1','Other','Windows 10','xwen登录系统',NULL),('4256d965-aedb-3e1c-3d26-3a1008097e41','2024-01-11 08:12:08','1044617901','江苏省-苏州市','58.210.86.106','Other','Windows 10','1044617901登录系统',NULL),('42c5ee80-83dc-508a-9ca9-3a101af5e014','2024-01-15 00:23:29','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('42c87877-00a7-afb5-d4da-3a0fdc88dce1','2024-01-02 21:27:57','cc','广东省-深圳市','183.11.37.129','Other','Windows 10','cc登录系统',NULL),('42d1cc25-3709-955d-adc7-3a0fd9fecaf9','2024-01-02 09:37:54','远行','福建省-泉州市','120.37.177.106','Other','Windows 10','远行登录系统',NULL),('4331abf7-6f98-7d62-00a1-3a0fdc1cb6f9','2024-01-02 19:29:50','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('4382e257-4bdd-2b42-c16f-3a0fe9e27d6e','2024-01-05 11:40:55','angw','0-0','43.156.240.178','Other','Windows 10','angw登录系统',NULL),('44593280-25f5-ac75-1bf0-3a0fc64c0d5f','2023-12-29 13:49:53','core','广东省-深圳市','116.25.133.191','Other','Windows 10','core登录系统',NULL),('44bde93f-9ed4-5b78-3b25-3a101e88fd2b','2024-01-15 17:03:02','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('47bed57e-ca22-5aec-143b-3a101aa09487','2024-01-14 22:50:19','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('49f4c886-059d-e3ba-6d92-3a0fdaee4f1f','2024-01-02 13:59:31','Alan','广东省-深圳市','27.38.196.105','Other','Windows 10','Alan登录系统',NULL),('4a5c2637-7ef3-4d77-1df6-3a10061ba004','2024-01-10 23:12:41','cc','广东省-深圳市','113.102.167.115','Other','Windows 10','cc登录系统',NULL),('4a76acaa-993a-6660-2dfc-3a1005d640b9','2024-01-10 21:56:55','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('4b0205c5-09ed-b4da-cbaf-3a0fefa0d0d3','2024-01-06 14:26:54','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('4b3f9ff6-39fd-d101-3be2-3a0fa418f4e4','2023-12-22 22:26:59','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('4c5f9a5e-6f89-84df-e7e4-3a0fef39f43b','2024-01-06 12:34:33','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('4d104823-fb77-4a7e-7c3e-3a0fd9db924a','2024-01-02 08:59:26','core','广东省-深圳市','113.116.218.250','Other','Windows 10','core登录系统',NULL),('4d73cffd-5097-3353-4a0e-3a1002f1e729','2024-01-10 08:28:16','fktet','广东省-惠州市','116.6.194.90','Other','Windows 10','fktet登录系统',NULL),('4e0d8fd9-9de9-89da-f53a-3a100381ca4c','2024-01-10 11:05:25','YuanEMoBaoYou','江苏省-常州市','58.216.225.5','Other','Windows 10','YuanEMoBaoYou登录系统',NULL),('4f7b3bfd-bcb4-5606-ca51-3a101a963c49','2024-01-14 22:39:01','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('4fbda960-47ca-623c-a06b-3a101ad558d0','2024-01-14 23:47:57','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('4ffe1f7c-cda7-be0c-5c6f-3a0fae480888','2023-12-24 21:54:37','youngcao9188','上海-上海市','114.93.41.115','Generic Smartphone','Android 14','youngcao9188登录系统',NULL),('50319454-519b-568f-184d-3a101a88c6d8','2024-01-14 22:24:19','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('508c688d-f9a4-2bc1-bbf5-3a101aed0728','2024-01-15 00:13:49','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('50a44deb-33f1-efb1-a220-3a101df9e3c0','2024-01-15 14:26:44','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('50aad41d-e4de-5147-34d1-3a0fdba5e260','2024-01-02 17:20:02','从小就不会','河南省-郑州市','171.8.80.133','Other','Windows 10','从小就不会登录系统',NULL),('5132165b-a4af-4fda-e385-3a0ffb5e746e','2024-01-08 21:09:52','xwen','本地-本机','127.0.0.1','Other','Windows 10','xwen登录系统',NULL),('5135df2c-efb8-fcc2-c955-3a0fdfdc7d22','2024-01-03 12:58:10','XINGKONG','广东省-广州市','112.96.227.254','Other','Windows 10','XINGKONG登录系统',NULL),('53c572f4-6df3-7f2e-4563-3a101d28cfcd','2024-01-15 10:38:22','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('53dd2c31-98ef-a034-0fac-3a10010e7832','2024-01-09 23:40:13','whj','广东省-东莞市','223.104.68.233','Other','Windows 10','whj登录系统',NULL),('54b9732f-6d17-3bb0-3bd1-3a0fb8d549db','2023-12-26 23:05:06','fktet','广东省-惠州市','223.74.132.241','Other','Windows 10','fktet登录系统',NULL),('55e3d4cd-34d0-4137-4585-3a101df59391','2024-01-15 14:22:01','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('569b4881-efaf-caab-c1d6-3a101af3fdab','2024-01-15 00:21:26','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('56a8b9ce-00f0-9e4e-b1c2-3a0fe9e6e66e','2024-01-05 11:45:44','shenjingwa','北京-北京市','61.51.66.11','Other','Windows 10','shenjingwa登录系统',NULL),('578ffb74-b27b-f9f7-e12e-3a101062a72e','2024-01-12 23:06:29','logans','山西省-太原市','110.176.32.12','Other','Windows 10','logans登录系统',NULL),('586ba39f-b7d6-48dc-dab5-3a0fe9bdafe4','2024-01-05 11:00:43','从小就不会','河南省-郑州市','171.8.104.47','Other','Windows 10','从小就不会登录系统',NULL),('59150aa4-0bdd-f43c-e7eb-3a0fdf07a36d','2024-01-03 09:05:40','yuanemobaoyou','江苏省-常州市','58.216.225.5','Other','Windows 10','yuanemobaoyou登录系统',NULL),('5982f7b5-f7b4-8d65-df83-3a0fb6b817d3','2023-12-26 13:13:58','youngcao9188','上海-上海市','223.166.35.3','Other','Windows 10','youngcao9188登录系统',NULL),('59988183-89e8-a2e7-d7cf-3a1005fc7dfb','2024-01-10 22:38:41','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509'),('5ae4f777-01d8-5781-4ce8-3a0fe4c9982d','2024-01-04 11:55:37','Celles','安徽省-滁州市','223.244.252.247','Other','Windows 10','Celles登录系统',NULL),('5b0c4e21-4978-2f2b-561d-3a0fc54f3ce4','2023-12-29 09:13:45','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('5bc54e9c-8e67-21a8-657c-3a0fc54e5da0','2023-12-29 09:12:48','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('5bd3e88a-8379-90a9-65de-3a0fef3ad455','2024-01-06 12:35:31','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('5c83f08e-e4a2-cfbc-4d5c-3a0fa40a535a','2023-12-22 22:11:01','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('5cf82728-6011-68d6-c0b5-3a0ff5707b9e','2024-01-07 17:31:50','cc','广东省-东莞市','223.104.77.182','Other','Windows 10','cc登录系统',NULL),('5dcf5fa6-c457-3b1d-207e-3a0fef2508d3','2024-01-06 12:11:42','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('5e39a916-6c93-4bea-6464-3a0fdc74785b','2024-01-02 21:05:41','whj','广东省-东莞市','223.104.68.228','Other','Windows 10','whj登录系统',NULL),('5e44f55b-5421-5c75-a9e8-3a1005be529f','2024-01-10 21:30:47','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('5f14141f-5ebc-c088-19f1-3a0fe00a84cc','2024-01-03 13:48:26','xgluxv','纽约-纽约','23.95.215.92','Other','Windows 10','xgluxv登录系统',NULL),('5f1f7469-f185-4cfc-63fe-3a0fef361709','2024-01-06 12:30:20','Xwen','本地-本机','127.0.0.1','Other','Windows 10','Xwen登录系统',NULL),('5fbcf852-618e-f43f-11dd-3a10061a0ecd','2024-01-10 23:10:59','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('6072e684-b5a7-fecc-2065-3a101af05adf','2024-01-15 00:17:27','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('60cd15e5-40a1-211b-16a9-3a0fd9d10334','2024-01-02 08:47:54','ygq1343261694','广东省-深圳市','121.35.241.109','Other','Windows 10','ygq1343261694登录系统',NULL),('61ada2d6-012e-9ca3-aec9-3a0fb298ba37','2023-12-25 18:01:14','cc','广东省-深圳市','116.24.189.54','Other','Windows 10','cc登录系统',NULL),('63680ab2-db04-1e46-2c5c-3a0fa87e1fe2','2023-12-23 18:55:58','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('637e2626-d114-3637-18c3-3a1013cc37f8','2024-01-13 15:00:39','fktet','广东省-惠州市','116.6.194.90','Other','Windows 10','fktet登录系统',NULL),('6559b055-74be-7e44-bce1-3a0fb9017972','2023-12-26 23:53:22','cc','广东省-深圳市','183.11.39.117','Other','Windows 10','cc登录系统',NULL),('661e7b1d-6a2b-f163-b09b-3a0fe4d38645','2024-01-04 12:06:28','jiancaixing','本地-本机','127.0.0.1','Other','Windows 10','jiancaixing登录系统',NULL),('668db619-7e3e-6981-4119-3a0fa442829e','2023-12-22 23:12:23','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('66c80d5f-f1fa-f49f-c1fa-3a0fe75db13a','2024-01-04 23:56:38','core','广东省-深圳市','113.102.164.153','Other','Windows 10','core登录系统',NULL),('674fa76b-79d7-a213-fac4-3a101aad5560','2024-01-14 23:04:15','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('68f5857a-afbd-e124-7960-3a0fe5d9d81e','2024-01-04 16:53:00','tpc','广东省-东莞市','14.218.38.245','Other','Windows 10','tpc登录系统',NULL),('6a2608fd-e311-38f1-c478-3a0fa43ee155','2023-12-22 23:08:25','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('6a739359-5c5d-b2f9-d914-3a100d693730','2024-01-12 09:14:47','ygq1343261694','广东省-深圳市','121.35.241.109','Other','Windows 10','ygq1343261694登录系统',NULL),('6a797f28-920c-5390-ff42-3a0ffb631dfd','2024-01-08 21:14:57','xwen','本地-本机','127.0.0.1','Other','Windows 10','xwen登录系统',NULL),('6aca28cc-049d-cd38-4c7b-3a0fda793c99','2024-01-02 11:51:39','江城恋','上海-上海市','222.72.170.198','Other','Windows 10','江城恋登录系统',NULL),('6b5f28f0-b8a2-72ed-73ec-3a0fda5b6048','2024-01-02 11:19:02','cc','广东省-深圳市','113.116.218.249','Other','Windows 10','cc登录系统',NULL),('6b849bf2-0d9f-cdfd-8a71-3a1003638c38','2024-01-10 10:32:23','shanye','山东省-东营市','222.174.109.14','Other','Windows 10','shanye登录系统',NULL),('6c63e7e0-dba1-9c4b-a496-3a0ffb6591b9','2024-01-08 21:17:38','xwen','本地-本机','127.0.0.1','Other','Windows 10','xwen登录系统',NULL),('6ca8a574-fac3-21cd-b0f1-3a0fef277652','2024-01-06 12:14:21','Xwen','本地-本机','127.0.0.1','Other','Windows 10','Xwen登录系统',NULL),('6e106d7c-81f7-4275-1a0b-3a101d4a4be8','2024-01-15 11:14:56','cc','广东省-深圳市','116.24.189.235','Other','Windows 10','cc登录系统',NULL),('6e7fe24b-4c93-311b-88d5-3a0fbb97b720','2023-12-27 11:56:43','core','广东省-深圳市','116.24.189.147','Other','Windows 10','core登录系统',NULL),('6e829a7d-aec3-9c9b-2149-3a0fc2c18b83','2023-12-28 21:19:45','lightnehum','北京-北京市','125.33.216.151','Other','Windows 10','lightnehum登录系统',NULL),('6e883fb1-8ca1-30bd-6bc0-3a0fb0a0fdb8','2023-12-25 08:51:01','Faded','广东省-深圳市','121.35.181.19','Other','Windows 10','Faded登录系统',NULL),('6fcdd8ec-3abc-56c3-4522-3a100e653e13','2024-01-12 13:50:04','laodadezhu','北京-北京市','221.216.242.174','Other','Windows 10','laodadezhu登录系统',NULL),('70284322-4475-31d5-f784-3a0ffbff8d4b','2024-01-09 00:05:50','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('71f75eef-7dbd-600a-c7be-3a0fb63ad13c','2023-12-26 10:57:08','刘本法','湖北省-武汉市','183.94.57.148','Other','Windows 10','刘本法登录系统',NULL),('7243dd5b-380b-837b-5ff5-3a101aeb2c8e','2024-01-15 00:11:48','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('730f29c6-ae4f-959c-2aec-3a0fef9c6fae','2024-01-06 14:22:07','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('7393c0c1-d184-1d03-718f-3a0fdcbb1672','2024-01-02 22:22:49','core','广东省-深圳市','183.11.37.129','Other','Windows 10','core登录系统',NULL),('73d7aa98-8505-2b8c-d468-3a101ae874f3','2024-01-15 00:08:50','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('745e4b42-6607-e041-71a8-3a1006192a35','2024-01-10 23:10:00','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('75145ae8-94d3-8999-ba88-3a0fef2eb9ac','2024-01-06 12:22:17','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('7550a910-0a86-4155-aff5-3a0ffe9e2163','2024-01-09 12:18:17','jimsonxjm','广东省-广州市','119.34.195.18','Other','Windows 10','jimsonxjm登录系统',NULL),('75d5295e-b30e-5715-9fa9-3a0ffb8e0c9a','2024-01-08 22:01:51','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('766a0245-0a46-4b04-80dd-3a0fd9dafa1f','2024-01-02 08:58:47','cc','广东省-深圳市','113.116.218.250','Other','Windows 10','cc登录系统',NULL),('76fea592-033f-854b-6eb7-3a0fb5f0c480','2023-12-26 09:36:15','cctest','广东省-深圳市','116.24.189.148','Other','Windows 10','cctest登录系统',NULL),('77038424-9096-604f-d93d-3a0fa886c4a7','2023-12-23 19:05:25','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('774e8624-289a-9376-d0ec-3a0ffb68eb91','2024-01-08 21:21:18','xwen','本地-本机','127.0.0.1','Other','Windows 10','xwen登录系统',NULL),('783df06a-09d7-61e2-10da-3a10060681cc','2024-01-10 22:49:37','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('789ffa9c-2913-3b52-36e8-3a0fef7562a2','2024-01-06 13:39:28','cc','广东省-深圳市','113.102.164.30','Other','Windows 10','cc登录系统',NULL),('78d440f0-cc5c-18a6-d4da-3a0ff8c8be8b','2024-01-08 09:07:06','江城恋','上海-上海市','222.72.170.198','Other','Windows 10','江城恋登录系统',NULL),('79ea72b3-df9b-b0ea-72bd-3a0fef973e14','2024-01-06 14:16:27','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('7a3243cf-21b1-e20a-47fb-3a101ae648a6','2024-01-15 00:06:27','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('7a47f7bc-19ee-d5fa-1c17-3a0fb6073528','2023-12-26 10:00:46','cc','广东省-深圳市','116.24.189.148','Other','Windows 10','cc登录系统',NULL),('7a5113e3-4871-ab52-5b71-3a0fa43d89bf','2023-12-22 23:06:57','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('7b139eec-e7c8-b621-7812-3a10060af169','2024-01-10 22:54:28','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('7b97379c-188c-bff0-81f7-3a0fdc5cd43d','2024-01-02 20:39:52','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('7d322ee5-ba49-59a5-3cde-3a100359036b','2024-01-10 10:20:53','andy','山东省-滨州市','219.146.215.226','Other','Windows 10','andy登录系统',NULL),('7db1266f-dfff-cdcc-5617-3a100574af0a','2024-01-10 20:10:21','SmallHan','广东省-深圳市','163.125.213.56','Other','Windows 10','SmallHan登录系统',NULL),('7df6eb5d-1933-ec67-8e13-3a0fc259eeb7','2023-12-28 19:26:34','温柔多几分','广东省-东莞市','61.142.24.222','Other','Windows 10','温柔多几分登录系统',NULL),('7e4d6041-d285-ae56-99f5-3a101aea1a79','2024-01-15 00:10:38','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('7ff66850-9d50-87bf-5c68-3a0fb893ccfd','2023-12-26 21:53:34','13834600861','山西省-太原市','183.200.25.253','Other','Windows 10','13834600861登录系统',NULL),('8058da91-15c8-68df-263d-3a0fdcb118ce','2024-01-02 22:11:54','cc','广东省-深圳市','183.11.37.129','Other','Windows 10','cc登录系统',NULL),('80aea170-0e4f-39bc-0179-3a0fbde7545b','2023-12-27 22:42:55','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('80c87d37-7b0e-896a-b342-3a0fae17e759','2023-12-24 21:02:03','Rocky','广西-南宁市','223.104.90.160','iPhone','iOS 15.4.1','Rocky登录系统',NULL),('814331d4-bdff-3afb-544b-3a0fe6a0248d','2024-01-04 20:29:35','cc','广东省-深圳市','113.102.164.153','Other','Windows 10','cc登录系统',NULL),('8187b90b-ebc5-3253-cd56-3a0fdae268d7','2024-01-02 13:46:32','afafa','江苏省-无锡市','222.191.239.99','Other','Windows 10','afafa登录系统',NULL),('81905fed-f5e6-4f76-11c4-3a0fc2a558c3','2023-12-28 20:48:57','whj','广东省-深圳市','183.17.64.152','Other','Windows 10','whj登录系统',NULL),('81e33b47-f675-8374-fdd8-3a0fdb8b6941','2024-01-02 16:51:07','木南','江苏省-苏州市','121.224.20.125','Other','Windows 10','木南登录系统',NULL),('83e28a20-586c-0068-c477-3a0fe4246fb3','2024-01-04 08:55:14','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('8401b37d-8b17-fcd7-de25-3a0fb60a67bc','2023-12-26 10:04:16','cc','广东省-深圳市','116.24.189.148','Other','Windows 10','cc登录系统',NULL),('841b4881-9fc3-70e2-908d-3a0fc5a74e57','2023-12-29 10:49:57','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('84315a76-deee-ffaf-dbbd-3a0ffb6267ac','2024-01-08 21:14:11','xwen','本地-本机','127.0.0.1','Other','Windows 10','xwen登录系统',NULL),('84876d5c-59d3-0de4-84e3-3a0fa479fa14','2023-12-23 00:12:58','cc','广东省-深圳市','183.11.38.200','Other','Windows 10','cc登录系统',NULL),('851ac21a-11fc-a711-b6f4-3a0fefa0873b','2024-01-06 14:26:35','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('879f8120-effd-937f-0bb8-3a0fb195bc7f','2023-12-25 13:18:21','chips520','江苏省-无锡市','180.113.155.169','Other','Windows 10','chips520登录系统',NULL),('882e04aa-0785-5473-900f-3a0fef35c36b','2024-01-06 12:29:59','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('88331a8d-f9f0-02c0-a6e5-3a101abc01de','2024-01-14 23:20:17','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('89394cbe-4af5-3364-65ee-3a1005fd34ec','2024-01-10 22:39:28','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('8963f69a-ef02-5360-cc48-3a0fc6a8ce71','2023-12-29 15:31:12','iknow','浙江省-宁波市','125.114.187.206','Other','Windows 10','iknow登录系统',NULL),('89ff74b0-9fb2-4fc4-ef12-3a0fae1188f4','2023-12-24 20:55:05','木南','江苏省-苏州市','223.64.97.195','Other','Windows 10','木南登录系统',NULL),('8acbe104-4c44-d1b9-6064-3a10062257f5','2024-01-10 23:20:02','admin','江苏省-南京市','43.255.75.76','Other','Windows 10','admin登录系统',NULL),('8be7e9e8-7035-efb9-07c0-3a0fbb81fa46','2023-12-27 11:32:58','dalin','陕西省-西安市','123.139.56.34','Other','Windows 10','dalin登录系统',NULL),('8c7713ef-ab41-f344-29dc-3a10033243db','2024-01-10 09:38:34','CxToost','山东省-青岛市','123.234.189.134','Other','Windows 10','CxToost登录系统',NULL),('8c9b30ed-30ca-1bc4-190a-3a101d2860c1','2024-01-15 10:37:53','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('8d8a98fd-188a-2622-ad34-3a0ff4a1e420','2024-01-07 13:46:11','shanye','山东省-东营市','222.174.109.14','Other','Windows 10','shanye登录系统',NULL),('8d9748f1-05cc-b8c5-d211-3a100849d50b','2024-01-11 09:22:24','cc','广东省-深圳市','113.116.216.121','Other','Windows 10','cc登录系统',NULL),('8dbd83fa-3503-d570-ef3f-3a101aed742b','2024-01-15 00:14:17','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('8dde38db-1d6a-65e5-38db-3a0fb1af63e8','2023-12-25 13:46:22','cctest','广东省-深圳市','116.24.189.148','Other','Windows 10','cctest登录系统',NULL),('8ec19f18-d52c-819a-8561-3a1000658236','2024-01-09 20:35:40','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('8f826a07-6ae9-163b-5476-3a100620c337','2024-01-10 23:18:18','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('8ff76e87-2940-b81e-b283-3a0fb3692382','2023-12-25 21:48:52','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('906604fe-3684-8089-9b75-3a0fd61eb61d','2024-01-01 15:34:17','cc','广东省-广州市','119.143.201.82','Other','Windows 10','cc登录系统',NULL),('90f35b81-ab79-ae06-6965-3a1009a22818','2024-01-11 15:38:30','hyFly','北京-北京市','60.247.77.117','Other','Windows 10','hyFly登录系统',NULL),('91366976-7aae-4332-4959-3a100607447b','2024-01-10 22:50:27','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('9201f0b3-df96-8ec5-8ba5-3a0fae0d0b00','2023-12-24 20:50:11','whj','广东省-深圳市','119.123.139.17','Other','Windows 10','whj登录系统',NULL),('9249d968-a42e-9b8f-b008-3a0fc1f8ec5c','2023-12-28 17:40:37','老暮','湖北省-武汉市','58.19.73.72','Other','Windows 10','老暮登录系统',NULL),('92ce71a9-fc36-6d28-8980-3a0fc5529f8a','2023-12-29 09:17:27','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('9340c321-ddef-a5b9-28f1-3a0f94d828df','2023-12-19 23:21:55','cc','广东省-深圳市','113.102.166.22','Other','Windows 10','cc登录系统',NULL),('936d6b03-674e-62c6-211e-3a0ffa91b9a7','2024-01-08 17:26:15','zhoubai','湖北省-黄冈市','111.183.63.84','Other','Linux','zhoubai登录系统',NULL),('93e1808a-0681-f869-9045-3a0ff6a10392','2024-01-07 23:04:28','cc','广东省-深圳市','113.102.164.30','Other','Windows 10','cc登录系统',NULL),('9405a861-0745-d0df-2f64-3a101ac057b8','2024-01-14 23:25:01','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('9487cd2c-95a3-9ff8-8302-3a0fef76bf3d','2024-01-06 13:40:57','cc','广东省-深圳市','113.102.164.30','Other','Windows 10','cc登录系统',NULL),('9522a679-b7e9-6dd4-a436-3a0fef37c7de','2024-01-06 12:32:11','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('95a00a24-da5f-1c2c-21b2-3a1005e50752','2024-01-10 22:13:03','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('9722cda7-e8c5-7a46-5126-3a1005bced78','2024-01-10 21:29:15','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('9964deb5-a7bb-aa3c-39cf-3a0fb86fbf9e','2023-12-26 21:14:12','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('9a15d657-110c-7eb8-e390-3a100327fc15','2024-01-10 09:27:20','youngcao9188','上海-上海市','223.166.35.3','Other','Windows 10','youngcao9188登录系统',NULL),('9a3e8eab-971b-879f-68fe-3a101e4e127d','2024-01-15 15:58:41','youngcao9188','上海-上海市','223.166.35.3','Other','Windows 10','youngcao9188登录系统',NULL),('9acc21c8-ebfa-308c-13fb-3a0ffb6a6577','2024-01-08 21:22:54','xwen','本地-本机','127.0.0.1','Other','Windows 10','xwen登录系统',NULL),('9b824824-ed91-9449-a6ec-3a101af6ba4a','2024-01-15 00:24:25','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('9b9dd549-8495-e0ec-caa1-3a0fff248df8','2024-01-09 14:45:06','远行','福建省-泉州市','120.37.177.106','Other','Windows 10','远行登录系统',NULL),('9bdd696c-31f8-615b-8b03-3a100f24cb3f','2024-01-12 17:19:17','cc','广东省-深圳市','113.116.150.115','Other','Windows 10','cc登录系统',NULL),('9c36c0ac-f11c-44a2-8ac9-3a0ffc0e60d0','2024-01-09 00:22:01','xwen','广东省-东莞市','223.104.68.216','Other','Windows 10','xwen登录系统',NULL),('9c6cdf26-744a-3c77-6648-3a0fa4423e74','2023-12-22 23:12:05','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('9cac0f4e-b37f-3d18-1b8b-3a0fa698a6ba','2023-12-23 10:05:42','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('9d3b3fe9-d997-a80f-c322-3a101ad48333','2024-01-14 23:47:03','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('9d73229d-53f3-72fb-e3f3-3a0fd53e37f4','2024-01-01 11:29:05','cc','广东省-深圳市','113.102.166.252','Other','Windows 10','cc登录系统',NULL),('9e6b0651-4ca1-3ae1-5b8b-3a1018e29571','2024-01-14 14:43:10','chujianxin','北京-北京市','111.201.150.146','Other','Windows 10','chujianxin登录系统',NULL),('9ee8443d-5170-63e3-ad99-3a0ff592c097','2024-01-07 18:09:16','core','广东省-东莞市','223.104.77.182','Other','Windows 10','core登录系统',NULL),('9f67cb5f-8366-50ce-534c-3a0fe1ff3858','2024-01-03 22:55:20','kaikai','山东省-青岛市','112.9.34.218','Other','Windows 10','kaikai登录系统',NULL),('a123705a-0cc7-3cc8-68f8-3a0fbff54aa3','2023-12-28 08:17:24','lightnehum','北京-北京市','123.113.99.169','Other','Windows 10','lightnehum登录系统',NULL),('a1ac39ac-6a69-2c40-2025-3a0fea815424','2024-01-05 14:34:25','youngcao9188','上海-上海市','223.166.35.3','Other','Windows 10','youngcao9188登录系统',NULL),('a219182a-f156-0ce1-dc61-3a101addc2ca','2024-01-14 23:57:09','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('a28f0ede-e751-1477-e261-3a1005bda39b','2024-01-10 21:30:02','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('a2f54cc4-f333-784e-92d0-3a0fe526e7e5','2024-01-04 13:37:33','bigface','陕西省-西安市','1.83.105.73','Other','Windows 10','bigface登录系统',NULL),('a300923a-8664-c366-8678-3a101aaa3109','2024-01-14 23:00:49','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('a306ff78-4ab1-2752-0a17-3a101ac4cbd2','2024-01-14 23:29:53','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('a39bf2f8-f504-309c-1b25-3a0fa8a0b7e7','2023-12-23 19:33:46','cc','广东省-深圳市','113.102.165.140','Other','Windows 10','cc登录系统',NULL),('a437fbd6-5328-106d-d4ed-3a0fead13e4a','2024-01-05 16:01:42','chenrong','广东省-东莞市','113.99.130.229','Other','Windows 10','chenrong登录系统',NULL),('a4551194-0f96-56dc-eecb-3a0f9d15b12a','2023-12-21 13:46:05','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('a53a4763-b8b4-7789-79fe-3a0fef3e2ab3','2024-01-06 12:39:09','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('a546eca4-4647-036c-3cee-3a0fef9ff6ea','2024-01-06 14:25:59','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('a676f582-094c-39c6-1d6a-3a0f7ad0c723','2023-12-14 22:03:43','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('a6e67db4-5113-82e1-b082-3a1008696b6e','2024-01-11 09:56:54','admin','湖南省-长沙市','175.10.111.66','Other','Windows 10','admin登录系统',NULL),('a711afaf-3ed7-74a4-a6ad-3a100359470b','2024-01-10 10:21:10','youngcao9188','上海-上海市','223.166.35.3','Other','Windows 10','youngcao9188登录系统',NULL),('a7663f50-3cfc-c7b1-632b-3a0fe432c1bf','2024-01-04 09:10:52','whj','广东省-深圳市','113.116.218.250','Other','Windows 10','whj登录系统',NULL),('a864ba21-ac18-677e-e0a0-3a101aa2bc77','2024-01-14 22:52:40','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('a8a5a037-0a05-f07f-d360-3a0fc5653942','2023-12-29 09:37:46','jiaxiaodong','内蒙古-呼和浩特市','1.182.11.183','Other','Windows 10','jiaxiaodong登录系统',NULL),('a9adc630-de17-0df4-695c-3a0fda81a480','2024-01-02 12:00:50','Ydon','广东省-湛江市','113.101.114.16','Other','Windows 10','Ydon登录系统',NULL),('a9dfa289-7993-5958-b608-3a0fe6d27319','2024-01-04 21:24:32','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('a9e89a9c-0049-94fe-f9e9-3a101d4af5dd','2024-01-15 11:15:40','cc','广东省-深圳市','116.24.189.235','Other','Windows 10','cc登录系统',NULL),('aa70a362-0c0e-d4a6-75b1-3a0ffb6b581b','2024-01-08 21:23:57','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('aadf58fb-e8cf-11d2-8327-3a101ad2a61a','2024-01-14 23:45:00','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('aaee2891-d744-45c4-0cc0-3a0fad4ea423','2023-12-24 17:22:13','cctest','广东省-深圳市','113.102.165.140','Other','Windows 10','cctest登录系统',NULL),('abbc9144-2fc9-7720-6779-3a0fe9abd460','2024-01-05 10:41:13','fktet','广东省-惠州市','116.6.194.90','Other','Windows 10','fktet登录系统',NULL),('ac15c9c0-8ce2-ad93-68ec-3a0ffc05cf82','2024-01-09 00:12:40','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('ac260e93-c02c-7c41-0251-3a0fae884d00','2023-12-24 23:04:49','cc','广东省-深圳市','113.102.165.140','Other','Windows 10','cc登录系统',NULL),('ac375449-8dc4-c0d4-6710-3a0fe4d3dbc8','2024-01-04 12:06:50','jiancaixing','本地-本机','127.0.0.1','Other','Windows 10','jiancaixing登录系统',NULL),('ac3b2888-9332-786f-6ad2-3a0fe1624810','2024-01-03 20:03:55','zbnzbn','江苏省-镇江市','222.186.126.27','Other','Windows 10','zbnzbn登录系统',NULL),('ae0c36b3-cfdc-cb7d-042d-3a0fac3bcc97','2023-12-24 12:22:01','cctest','广东省-深圳市','113.102.165.140','Other','Windows 10','cctest登录系统',NULL),('ae3fe563-4514-f8bb-4d75-3a0ffa66b286','2024-01-08 16:39:15','litterstar','本地-本机','127.0.0.1','Other','Windows 10','litterstar登录系统',NULL),('ae9d8629-cbc5-a58f-e144-3a101af3474f','2024-01-15 00:20:39','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('ae9e0022-711b-33e5-ddbd-3a0face1bc21','2023-12-24 15:23:15','xwen','本地-本机','127.0.0.1','Other','Windows 10','xwen登录系统',NULL),('af34ee34-de7c-6158-f114-3a0fae2a0563','2023-12-24 21:21:50','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('af6d3e74-3ebe-d469-95c8-3a101d7a0d83','2024-01-15 12:07:06','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('afa78ed6-15bb-e6e2-7987-3a0fb31b9b10','2023-12-25 20:24:11','liuyz','四川省-眉山市','171.211.225.223','Other','Windows 10','liuyz登录系统',NULL),('afef783d-fcf9-9ddd-b40b-3a0ff499cc24','2024-01-07 13:37:20','cc','广东省-深圳市','113.102.164.30','Other','Windows 10','cc登录系统',NULL),('b042ae9a-6d73-6990-0b2c-3a0fb170e2a1','2023-12-25 12:38:06','acechengui','广东省-深圳市','113.88.237.109','iPhone','iOS 17.1.2','acechengui登录系统',NULL),('b046c861-adfb-9fbc-3885-3a100304bf17','2024-01-10 08:48:50','SmallHan','广东省-深圳市','116.6.24.151','Other','Windows 10','SmallHan登录系统',NULL),('b15969fa-3541-fc9a-1493-3a0fe03f0515','2024-01-03 14:45:47','cc','0-0','38.59.249.231','Other','Windows 10','cc登录系统',NULL),('b1e2683e-c9a6-d110-64ad-3a0fa9fc449d','2023-12-24 01:53:23','cctest','广东省-深圳市','113.102.165.140','Other','Windows 10','cctest登录系统',NULL),('b1ee0b47-8eab-a7a5-8394-3a0fae868f6d','2023-12-24 23:02:55','cc','广东省-深圳市','113.102.165.140','Other','Windows 10','cc登录系统',NULL),('b2130b35-ff54-7723-d48e-3a0fa32e21fe','2023-12-22 18:10:30','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('b235ebaa-795d-e61b-9e47-3a0fdb8f6cf1','2024-01-02 16:55:30','shenjingwa','北京-北京市','61.51.66.11','Other','Windows 10','shenjingwa登录系统',NULL),('b2f0d1b8-bda0-ce77-d0d7-3a101ab9d2f9','2024-01-14 23:17:54','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('b4147d0f-ea0c-9489-796f-3a0fe70e36d2','2024-01-04 22:29:49','cc','广东省-深圳市','113.102.164.153','Other','Windows 10','cc登录系统',NULL),('b4af8f39-4642-7ccb-4fba-3a0fc5ae817d','2023-12-29 10:57:48','zzwwg','河南省-郑州市','1.192.17.62','Other','Windows 10','zzwwg登录系统',NULL),('b54b9847-eda3-1d39-973c-3a0fe48e02f9','2024-01-04 10:50:33','cc','广东省-深圳市','113.116.218.250','Other','Windows 10','cc登录系统',NULL),('b653ad1c-950e-e5db-517f-3a0facd4b8c2','2023-12-24 15:09:03','xwen','本地-本机','127.0.0.1','Other','Windows 10','xwen登录系统',NULL),('b80e9103-c505-196f-f6e7-3a0fef85a6c5','2024-01-06 13:57:14','Xwen','广东省-深圳市','113.116.218.163','Other','Windows 10','Xwen登录系统',NULL),('b840f96d-8269-afb4-76d3-3a0fae330735','2023-12-24 21:31:40','xwen','广东省-深圳市','119.123.139.17','Other','Windows 10','xwen登录系统',NULL),('b8427be0-b758-8fe8-43f4-3a101aebda85','2024-01-15 00:12:32','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('b8606a78-db30-4b30-de0b-3a0fd53e9b99','2024-01-01 11:29:31','cc','广东省-深圳市','113.102.166.252','Other','Windows 10','cc登录系统',NULL),('b8acf0bf-0fe3-0106-1ca9-3a0fe049313c','2024-01-03 14:56:54','yi649815059','重庆-重庆市','123.145.96.219','Other','Windows 10','yi649815059登录系统',NULL),('b90fb735-df37-d752-1b25-3a10088898f7','2024-01-11 10:30:58','liu','广东省-深圳市','113.116.216.121','Other','Windows 10','liu登录系统',NULL),('b92b122f-ab7c-27a4-48ad-3a10061b44a9','2024-01-10 23:12:18','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('b94f97ac-a926-f439-abe6-3a0fef749447','2024-01-06 13:38:35','fktet','广东省-惠州市','116.6.194.90','Other','Windows 10','fktet登录系统',NULL),('b9b2d629-d968-e825-11d5-3a0ffa66ebe4','2024-01-08 16:39:30','hang','广东省-广州市','112.96.224.99','Other','Windows 10','hang登录系统',NULL),('ba38d28e-444e-f656-0ef5-3a0ff8f86d1c','2024-01-08 09:59:11','youngcao9188','上海-上海市','223.166.35.3','Other','Windows 10','youngcao9188登录系统',NULL),('bc45ab07-b14e-c75f-0ce2-3a10062a925b','2024-01-10 23:29:01','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('bc8ea795-ee0c-44ee-1cf1-3a0fcbb3a6e0','2023-12-30 15:01:09','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('bd205b07-dc39-a73d-b820-3a0ff6a56496','2024-01-07 23:09:15','从小就不会','河南省-郑州市','123.149.33.74','Other','Windows 10','从小就不会登录系统',NULL),('bdd76229-b82d-9321-00ef-3a101ac81d7e','2024-01-14 23:33:30','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('be92b432-3a5c-7498-3577-3a0fef31e04c','2024-01-06 12:25:44','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('bec1ff37-be8a-7114-2bf1-3a0fb0ae2256','2023-12-25 09:05:23','shenjingwa','北京-北京市','61.51.66.11','Other','Windows 10','shenjingwa登录系统',NULL),('bfe9990c-9217-c9bc-c136-3a0fef32914e','2024-01-06 12:26:29','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('bff1e8fb-23d1-45a8-777b-3a101adb1bff','2024-01-14 23:54:15','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('c065cda5-703d-426d-184d-3a0fc2b486f8','2023-12-28 21:05:31','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('c1c08878-f429-1b87-3f58-3a1013b38b17','2024-01-13 14:33:41','cc','广东省-深圳市','113.116.150.115','Other','Windows 10','cc登录系统',NULL),('c1fbe945-ddc0-9892-1a19-3a10063757fc','2024-01-10 23:42:58','cc','广东省-深圳市','113.102.167.115','Other','Windows 10','cc登录系统',NULL),('c215c0f8-4b9d-613a-5239-3a0fef91a6a0','2024-01-06 14:10:20','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('c21e3877-8122-e58a-c909-3a0fe436beeb','2024-01-04 09:15:14','从小就不会','河南省-郑州市','171.8.104.47','Other','Windows 10','从小就不会登录系统',NULL),('c24d27e1-8138-59f4-2d01-3a10037f39bb','2024-01-10 11:02:37','从小就不会','河南省-郑州市','171.8.104.47','Other','Windows 10','从小就不会登录系统',NULL),('c2561958-c07a-be80-e3ec-3a0fb13030b7','2023-12-25 11:27:26','wwl','广东省-深圳市','120.197.78.178','Other','Windows 10','wwl登录系统',NULL),('c2d281a8-b9a6-c821-8a7d-3a0fb5d3c5c3','2023-12-26 09:04:35','bigface','陕西省-西安市','1.83.104.222','Other','Windows 10','bigface登录系统',NULL),('c3064eaf-4ecb-ac39-1ab0-3a101af27816','2024-01-15 00:19:46','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('c30aa641-12da-03d9-a782-3a0fef340a2c','2024-01-06 12:28:06','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('c3a9e709-1392-9b89-c48c-3a0fb0aa6feb','2023-12-25 09:01:20','czz1998','浙江省-杭州市','36.27.31.11','Other','Windows 10','czz1998登录系统',NULL),('c41770cc-1b71-1c0e-5325-3a0fdba2f4fd','2024-01-02 17:16:50','mosto','广东省-深圳市','14.153.108.108','Other','Windows 10','mosto登录系统',NULL),('c43468e8-3dea-f04a-a5eb-3a0fefa25e78','2024-01-06 14:28:36','Xwen','广东省-深圳市','113.116.218.163','Other','Windows 10','Xwen登录系统',NULL),('c47b2bfc-a277-930b-664e-3a0fbb97f61c','2023-12-27 11:56:59','cc','广东省-深圳市','116.24.189.147','Other','Windows 10','cc登录系统',NULL),('c4b201f0-079e-c396-1e1f-3a0fc551e3e6','2023-12-29 09:16:39','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('c4c99621-0934-27e7-fb4d-3a0fb600056d','2023-12-26 09:52:55','myz','广西-防城港市','117.140.225.4','Other','Windows 7','myz登录系统',NULL),('c5be525f-96c7-227d-9300-3a101ac93337','2024-01-14 23:34:41','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('c6213940-767f-51cc-cd3e-3a0fef98d70e','2024-01-06 14:18:12','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('c87f89bb-185a-ef58-0b21-3a0fef9bfbcc','2024-01-06 14:21:38','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('c89f89f8-bb3c-519b-4a65-3a0fe730b8ce','2024-01-04 23:07:30','whj','广东省-东莞市','223.104.68.68','Other','Windows 10','whj登录系统',NULL),('c8dfecf5-1f6f-5508-fdbf-3a10088728ad','2024-01-11 10:29:23','liu','广东省-广州市','59.41.129.18','Other','Windows 10','liu登录系统',NULL),('c918f59f-8375-28ef-4bb2-3a0ff62d033f','2024-01-07 20:57:46','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('ca5989d5-c253-d242-3a49-3a0fad085370','2023-12-24 16:05:24','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('ca601c36-a62f-8a13-f02b-3a0ff8db4831','2024-01-08 09:27:21','cc','广东省-深圳市','113.116.216.121','Other','Windows 10','cc登录系统',NULL),('caa94a94-a205-5221-416a-3a101ad33495','2024-01-14 23:45:37','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('cafa82b3-fb25-5f82-339c-3a0f99bb5faf','2023-12-20 22:08:34','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('cb003fcc-3118-bf43-c4db-3a10144bade6','2024-01-13 17:19:52','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('cb77c122-22d1-03d5-9eb6-3a0fdb0f2cc2','2024-01-02 14:35:25','cc','广东省-深圳市','113.116.218.249','Other','Windows 10','cc登录系统',NULL),('ccddd046-0fb2-a0cd-caa3-3a0fff270e83','2024-01-09 14:47:50','shenjingwa','北京-北京市','61.51.66.11','Other','Windows 10','shenjingwa登录系统',NULL),('cee34ea0-86f3-ae44-3583-3a0fbb910f76','2023-12-27 11:49:27','cc','广东省-深圳市','116.24.189.147','Other','Windows 10','cc登录系统',NULL),('cf5a3698-6461-fba7-5ab2-3a0fef95bc8b','2024-01-06 14:14:48','Xwen','本地-本机','127.0.0.1','Other','Windows 10','Xwen登录系统',NULL),('cf7006b2-a2f2-380b-080b-3a101a56bed6','2024-01-14 21:29:40','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('d0352d16-8ada-b3c2-d1d5-3a0fe1c2c9fa','2024-01-03 21:49:20','whj','广东省-东莞市','223.104.68.15','Other','Windows 10','whj登录系统',NULL),('d16a67e2-8c73-4592-6847-3a0fdc31168f','2024-01-02 19:52:05','cc','广东省-深圳市','183.11.37.129','Other','Windows 10','cc登录系统',NULL),('d18ffa50-8ca6-0cb7-9d8e-3a0fb12354ac','2023-12-25 11:13:23','老暮','湖北省-武汉市','183.94.28.117','Other','Windows 10','老暮登录系统',NULL),('d198c565-47fe-d379-8f22-3a0fef8251cc','2024-01-06 13:53:36','whj','广东省-深圳市','113.116.218.163','Other','Windows 10','whj登录系统',NULL),('d2de015f-c0f8-3867-1ae5-3a0fdb8cbe05','2024-01-02 16:52:34','never','江西省-南昌市','106.7.168.77','Other','Windows 10','never登录系统',NULL),('d3a138e6-b3f1-7c91-9393-3a0fa87a95fd','2023-12-23 18:52:07','whj','广东省-深圳市','119.123.139.17','Other','Windows 10','whj登录系统',NULL),('d3df719b-7a6e-c24d-22cb-3a0ffb6be8cf','2024-01-08 21:24:34','xwen','本地-本机','127.0.0.1','Other','Windows 10','xwen登录系统',NULL),('d40132e4-05d3-ddb9-ac23-3a1006299a97','2024-01-10 23:27:58','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('d4a401a8-5378-8d2a-fc06-3a0fa43c36f1','2023-12-22 23:05:30','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('d4ddf968-93d9-76c8-df89-3a10061c0402','2024-01-10 23:13:07','cc','广东省-深圳市','113.102.167.115','Other','Windows 10','cc登录系统',NULL),('d5467c65-17bc-c418-4981-3a0fa4075389','2023-12-22 22:07:44','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('d62e91d8-8c82-0989-6446-3a1006190b3e','2024-01-10 23:09:52','cc','广东省-深圳市','113.102.167.115','Other','Windows 10','cc登录系统',NULL),('d65867c0-394c-bb60-db8b-3a0fe45b7f48','2024-01-04 09:55:22','jiancaixing','0-0','36.143.109.199','Other','Windows 10','jiancaixing登录系统',NULL),('d65f823b-d641-600d-64ea-3a100638a6be','2024-01-10 23:44:24','cc','广东省-深圳市','113.102.167.115','Other','Windows 10','cc登录系统',NULL),('d6fea6ed-92a5-6edb-b6c3-3a0fb607ad77','2023-12-26 10:01:17','cctest','广东省-深圳市','116.24.189.148','Other','Windows 10','cctest登录系统',NULL),('d72c3dc0-a388-4da7-8f84-3a0fdc1b0ccd','2024-01-02 19:28:01','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('d7357072-6a3a-e464-5b0f-3a101aa64f75','2024-01-14 22:56:35','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('d78d533c-a61e-1acb-7e8d-3a0ffb67cf18','2024-01-08 21:20:05','xwen','本地-本机','127.0.0.1','Other','Windows 10','xwen登录系统',NULL),('d801bb77-5931-b971-f117-3a0fffb2fae5','2024-01-09 17:20:40','gaijun2008','吉林省-长春市','119.53.30.84','Other','Windows 10','gaijun2008登录系统',NULL),('d87213e2-38ea-dcee-91dc-3a0ffa78297a','2024-01-08 16:58:19','admin','江苏省-南京市','180.111.41.87','Other','Windows 10','admin登录系统',NULL),('d8d5580a-526e-0689-179b-3a0fb618f071','2023-12-26 10:20:08','cctest','广东省-深圳市','116.24.189.148','Other','Windows 10','cctest登录系统',NULL),('d8e24806-0cfe-b111-4611-3a0fb632be84','2023-12-26 10:48:19','shenjingwa','北京-北京市','61.51.66.11','Other','Windows 10','shenjingwa登录系统',NULL),('d96b5825-0aa9-49e1-ff7d-3a10087cc19c','2024-01-11 10:18:02','cc','广东省-深圳市','113.116.216.121','Other','Windows 10','cc登录系统',NULL),('da23501f-9fa9-cc9f-8eb1-3a0fa883e31b','2023-12-23 19:02:16','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('db50469c-d732-dc6c-c462-3a101eb7f089','2024-01-15 17:54:19','老暮','湖北省-武汉市','58.19.85.23','Other','Windows 10','老暮登录系统',NULL),('dda03627-d1db-cb2e-761d-3a101ad7100a','2024-01-14 23:49:50','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('ddc1447a-fd8e-f66a-8ba7-3a0f8db9c897','2023-12-18 14:11:23','cc','广东省-深圳市','113.102.129.134','Other','Windows 10','cc登录系统',NULL),('ddd297f9-3187-e859-74c7-3a0fe4801ad4','2024-01-04 10:35:21','core','本地-本机','127.0.0.1','Other','Windows 10','core登录系统',NULL),('de6083cf-5472-39bd-3b90-3a0fc6b82948','2023-12-29 15:47:58','cc','广东省-深圳市','116.25.133.191','Other','Windows 10','cc登录系统',NULL),('de8d8116-64d2-8278-d60b-3a10158bb7be','2024-01-13 23:09:26','cc','广东省-深圳市','113.102.167.191','Other','Windows 10','cc登录系统',NULL),('dfc374b6-335e-474d-a284-3a101ad64dde','2024-01-14 23:49:00','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('e081b495-30a2-7925-a7c2-3a10061aea33','2024-01-10 23:11:55','cc','广东省-深圳市','113.102.167.115','Other','Windows 10','cc登录系统',NULL),('e0fe9221-56bf-2b3b-ae4b-3a0ffb5dd178','2024-01-08 21:09:10','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('e1d8d393-c576-f719-a03e-3a0facdff270','2023-12-24 15:21:18','cc','广东省-汕头市','113.84.129.18','23013RK75C','Android 13','cc登录系统',NULL),('e1e1bf75-fb9c-cff4-373c-3a0fc2a60134','2023-12-28 20:49:40','whj','广东省-深圳市','183.17.64.152','Other','Windows 10','whj登录系统',NULL),('e2393c82-326a-61f9-2bf1-3a0fea55388e','2024-01-05 13:46:14','yitianlige','四川省-成都市','61.157.27.67','Other','Windows 10','yitianlige登录系统',NULL),('e433cbc2-6d26-c616-fae9-3a10061bcec9','2024-01-10 23:12:53','cc','广东省-深圳市','113.102.167.115','Other','Windows 10','cc登录系统',NULL),('e481ad22-0335-45ee-c4e2-3a1006005fd9','2024-01-10 22:42:56','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('e53493c2-9ce9-9093-feba-3a0fef385865','2024-01-06 12:32:48','Xwen','本地-本机','127.0.0.1','Other','Windows 10','Xwen登录系统',NULL),('e6580850-d0a6-e718-daa5-3a0fa886971a','2023-12-23 19:05:13','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('e6c0f046-d3d3-ea7d-542c-3a10061c367a','2024-01-10 23:13:20','cc','广东省-深圳市','113.102.167.115','Other','Windows 10','cc登录系统',NULL),('e70a2f1a-ad6c-c81a-5cd0-3a0feb0b165c','2024-01-05 17:04:53','ygq1343261694','广东省-深圳市','121.35.241.109','Other','Windows 10','ygq1343261694登录系统',NULL),('e78f80b9-6361-f231-c4d9-3a0fb0bbc180','2023-12-25 09:20:15','cc','广东省-深圳市','116.24.189.148','Other','Windows 10','cc登录系统',NULL),('e7f84d77-3233-aae1-f23f-3a100311cbd9','2024-01-10 09:03:06','cc','广东省-深圳市','113.116.216.121','Other','Windows 10','cc登录系统',NULL),('e83a202f-473d-0872-cfca-3a100b41233f','2024-01-11 23:11:46','slowye','广东省-惠州市','119.132.161.247','Other','Windows 10','slowye登录系统',NULL),('e97c8148-9443-fab3-9303-3a10033f6a7b','2024-01-10 09:52:55','bigface','陕西省-西安市','1.83.106.135','Other','Windows 10','bigface登录系统',NULL),('ea34ce06-32b3-43cf-d8ee-3a1005e0da1b','2024-01-10 22:08:30','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('ea96117f-5bd8-1253-2f23-3a101ad85454','2024-01-14 23:51:13','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('eb0319b1-6aac-611c-5abc-3a0fae0dfc6d','2023-12-24 20:51:13','cc','广东省-深圳市','119.123.139.17','Other','Windows 10','cc登录系统',NULL),('ec257592-1239-8c84-265b-3a0fdafeae08','2024-01-02 14:17:24','pavel','山东省-济南市','119.163.78.251','Other','Windows 10','pavel登录系统',NULL),('ec6ddf08-e49b-c229-9c05-3a0fdb10b0e4','2024-01-02 14:37:05','chailinhu','北京-北京市','117.133.166.202','Other','Windows 10','chailinhu登录系统',NULL),('ecd96f88-7a0e-0469-a3f1-3a0fae10f27c','2023-12-24 20:54:27','czz1998','浙江省-杭州市','112.10.225.86','Other','Windows 10','czz1998登录系统',NULL),('ed6289c3-5961-1224-2e7a-3a0ffc0a3c24','2024-01-09 00:17:30','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('ed87ef3b-0a4f-82b1-e2ee-3a0ffbf0a2b6','2024-01-08 23:49:32','cc','广东省-深圳市','113.102.165.130','Other','Windows 10','cc登录系统',NULL),('eda73c76-441a-2af4-1ad6-3a0fdc66aea1','2024-01-02 20:50:37','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('edd03c5a-67fb-3f47-d388-3a101ac4ffa4','2024-01-14 23:30:06','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('ee1b6926-7dc7-8ad4-a4ee-3a101af1df1e','2024-01-15 00:19:07','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('ee2de68e-8772-efdd-9251-3a1000b2a83f','2024-01-09 21:59:56','cc','广东省-深圳市','113.102.165.130','Other','Windows 10','cc登录系统',NULL),('ee2defdc-94da-0642-2f74-3a0fa41c7e0c','2023-12-22 22:30:51','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('f04fc71c-23f1-bf68-eb07-3a0fad0bb94a','2023-12-24 16:09:07','xwen','本地-本机','127.0.0.1','Other','Windows 10','xwen登录系统',NULL),('f0c795a4-fae1-1228-01bb-3a101d3323b7','2024-01-15 10:49:38','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('f1ae4814-6df6-0cdd-9014-3a0fc5c7a3b0','2023-12-29 11:25:16','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('f1e55e58-8fbf-1e92-bbba-3a101cc3b1c4','2024-01-15 08:47:55','cc','广东省-深圳市','116.24.189.235','Other','Windows 10','cc登录系统',NULL),('f2447655-fd2e-f2f1-df09-3a0ffb55ed0b','2024-01-08 21:00:33','cc','广东省-深圳市','113.102.165.130','Other','Windows 10','cc登录系统',NULL),('f2b4a9dd-81b6-2662-ca4c-3a0fb09863cd','2023-12-25 08:41:37','ygq1343261694','广东省-深圳市','121.35.241.109','Other','Windows 10','ygq1343261694登录系统',NULL),('f3109184-6dd7-9c18-0e86-3a101ad97514','2024-01-14 23:52:27','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('f3a3fcd4-e6c7-59bf-a594-3a101d2a5b02','2024-01-15 10:40:03','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('f3d0b8a9-8f8b-7b41-1a36-3a0ffc09f217','2024-01-09 00:17:11','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('f4ba347e-6bdb-1865-f3e4-3a0fef940966','2024-01-06 14:12:57','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('f5166f5f-f23e-7fe0-aadc-3a10062b50a0','2024-01-10 23:29:50','whj','广东省-东莞市','223.104.77.146','Other','Windows 10','whj登录系统',NULL),('f53f4c00-d97d-1fcf-6bf3-3a10132464cd','2024-01-13 11:57:20','刘本法','湖北省-武汉市','183.94.57.148','Other','Windows 10','刘本法登录系统',NULL),('f61f38d6-5e75-c6f3-129b-3a0ffb64e1b8','2024-01-08 21:16:53','xwen','本地-本机','127.0.0.1','Other','Windows 10','xwen登录系统',NULL),('f7b4afb5-0826-59d1-3ce0-3a0ff886e8ba','2024-01-08 07:55:11','Faded','广东省-东莞市','223.104.68.2','Other','Linux','Faded登录系统',NULL),('f825f580-b44f-6380-e214-3a101af489c0','2024-01-15 00:22:01','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('f91a96f1-be59-2c59-5881-3a0fa87d0392','2023-12-23 18:54:46','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统',NULL),('f986b5a2-56f4-e0ed-686d-3a101af73427','2024-01-15 00:24:56','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('f9d756d7-2c12-cf53-d1de-3a0fc54c9be9','2023-12-29 09:10:53','core','广东省-深圳市','116.25.133.191','Other','Windows 10','core登录系统',NULL),('fa5d5236-b247-16cb-a356-3a0fef283ed8','2024-01-06 12:15:13','whj','本地-本机','127.0.0.1','Other','Windows 10','whj登录系统','a46718ba-f869-6473-142b-3a0facd47b09'),('fa81d6b9-e8c9-b2eb-5742-3a100e5ce116','2024-01-12 13:40:56','zhaodc','辽宁省-铁岭市','182.204.63.92','Other','Windows 10','zhaodc登录系统',NULL),('faaeabf8-4e5a-042f-4362-3a0fa42591c3','2023-12-22 22:40:46','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('fba9b6c1-6f02-66f9-7f6b-3a100636cfe3','2024-01-10 23:42:23','cc','广东省-深圳市','113.102.167.115','Other','Windows 10','cc登录系统',NULL),('fbbd1ec6-13d7-391a-9681-3a0fe768c089','2024-01-05 00:08:42','cc','广东省-深圳市','113.102.164.153','Other','Windows 10','cc登录系统',NULL),('fbdf760c-20fb-e9da-968e-3a101ce2d4ac','2024-01-15 09:21:55','fktet','广东省-惠州市','116.6.194.90','Other','Windows 10','fktet登录系统',NULL),('fbff5837-91f6-6b61-9637-3a1004ef277e','2024-01-10 17:44:30','bookmark','云南省-昆明市','112.112.167.233','Other','Windows 10','bookmark登录系统',NULL),('fc1bde1b-bfed-077d-be11-3a0fa3f59bb5','2023-12-22 21:48:23','cc','本地-本机','127.0.0.1','Other','Windows 10','cc登录系统',NULL),('fca68493-4f90-537e-9e3f-3a101d1d8edd','2024-01-15 10:26:04','ansen','湖南省-长沙市','175.6.23.162','Other','Windows 10','ansen登录系统',NULL),('fdbe5c04-a0bf-9388-7e26-3a1009b27717','2024-01-11 15:56:19','hnicypb','广东省-东莞市','59.39.196.20','Other','Windows 10','hnicypb登录系统',NULL),('fdd18c1c-1272-605d-aaaf-3a0fdb232fe3','2024-01-02 14:57:17','hyposhan','江苏省-连云港市','112.4.228.148','Other','Windows 10','hyposhan登录系统',NULL),('fdfb585f-45f9-5a02-92ec-3a0fea04002b','2024-01-05 12:17:31','core','广东省-深圳市','113.116.218.250','Other','Windows 10','core登录系统',NULL),('fef051b6-be96-fe6f-e1d8-3a10061857a1','2024-01-10 23:09:06','cc','广东省-深圳市','113.102.167.115','Other','Windows 10','cc登录系统',NULL),('ffd589e6-6759-ba9b-991f-3a0fdfebecb3','2024-01-03 13:15:01','shanye','山东省-东营市','222.174.109.14','Other','Windows 10','shanye登录系统',NULL);
/*!40000 ALTER TABLE `LoginLog` ENABLE KEYS */;

-- 
-- Definition of Menu
-- 

DROP TABLE IF EXISTS `Menu`;
CREATE TABLE IF NOT EXISTS `Menu` (
  `Id` varchar(36) NOT NULL COMMENT '主键',
  `IsDeleted` tinyint(1) NOT NULL COMMENT '逻辑删除',
  `CreationTime` datetime NOT NULL COMMENT '创建时间',
  `CreatorId` varchar(36) DEFAULT NULL COMMENT '创建者',
  `LastModifierId` varchar(36) DEFAULT NULL COMMENT '最后修改者',
  `LastModificationTime` datetime DEFAULT NULL COMMENT '最后修改时间',
  `OrderNum` int NOT NULL COMMENT '排序',
  `State` tinyint(1) NOT NULL COMMENT '状态',
  `MenuName` varchar(255) NOT NULL COMMENT '菜单名',
  `MenuType` int NOT NULL,
  `PermissionCode` varchar(255) DEFAULT NULL,
  `ParentId` varchar(36) NOT NULL,
  `MenuIcon` varchar(255) DEFAULT NULL COMMENT '菜单图标',
  `Router` varchar(255) DEFAULT NULL COMMENT '菜单组件路由',
  `IsLink` tinyint(1) NOT NULL COMMENT '是否为外部链接',
  `IsCache` tinyint(1) NOT NULL COMMENT '是否缓存',
  `IsShow` tinyint(1) NOT NULL COMMENT '是否显示',
  `Remark` varchar(255) DEFAULT NULL COMMENT '描述',
  `Component` varchar(255) DEFAULT NULL COMMENT '组件路径',
  `Query` varchar(255) DEFAULT NULL COMMENT '路由参数',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='菜单表';

-- 
-- Dumping data for table Menu
-- 

/*!40000 ALTER TABLE `Menu` DISABLE KEYS */;
INSERT INTO `Menu`(`Id`,`IsDeleted`,`CreationTime`,`CreatorId`,`LastModifierId`,`LastModificationTime`,`OrderNum`,`State`,`MenuName`,`MenuType`,`PermissionCode`,`ParentId`,`MenuIcon`,`Router`,`IsLink`,`IsCache`,`IsShow`,`Remark`,`Component`,`Query`) VALUES('041d6ea8-356f-fff4-204b-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'物料查询',2,'erp:material:query','9d099607-edc3-00a7-f37e-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('08f831c2-1e89-bdbb-7f69-3a0f7ac8e8c9',0,'2023-12-14 21:55:08',NULL,'59cf7e31-e3e4-544e-1038-3a0f836cc538','2023-12-21 23:06:51',99,1,'文章管理',1,'bbs:article:list','a7f15626-69a6-a741-41aa-3a0f7ac8e8c9','documentation','article',0,1,1,NULL,'bbs/article/index',NULL),('13794e90-4a4e-7b16-5ca4-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'供应商修改',2,'erp:supplier:edit','aef449a7-54ed-8548-31e8-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('1aa65afb-ef7c-5d55-09fd-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'采购订单新增',2,'erp:purchase:add','bf33345e-a027-3025-206c-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('1ec85baf-89ec-a297-96da-3a0fa3065d39',0,'2023-12-22 17:27:04','59cf7e31-e3e4-544e-1038-3a0f836cc538','59cf7e31-e3e4-544e-1038-3a0f836cc538','2023-12-22 17:27:28',0,1,'修改主题',2,'bbs:discuss:update','4a616ad2-c2cc-8f55-8322-3a0f9f1694ed',NULL,NULL,0,0,1,NULL,NULL,NULL),('1f6b10e5-ce76-767f-1807-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'单位查询',2,'erp:unit:query','86b62feb-c169-ace4-293b-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('1f71af66-e5f0-e6e6-2833-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'菜单新增',2,'system:menu:add','b9cdd7a9-51fa-459f-e5ad-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('2545c3c5-88a4-ada9-6794-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,94,1,'参数设置',1,'system:config:list','9ba1a0e9-7467-c9a1-dc84-3a0f7ac8e7fb','edit','config',0,1,1,NULL,'system/config/index',NULL),('28be3b8e-1455-e309-062b-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'物料删除',2,'erp:material:remove','9d099607-edc3-00a7-f37e-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('368c3dbb-5187-2600-2cac-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'操作查询',2,'monitor:operlog:query','4f47853f-f8dd-5bcb-5c92-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('37ce2f8b-2006-554b-ef07-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'采购订单查询',2,'erp:purchase:query','bf33345e-a027-3025-206c-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('3b37e743-453e-7817-8217-3a0f7ac8e7fb',0,'2023-12-14 21:55:07',NULL,NULL,NULL,91,1,'WebFirst',0,NULL,'00000000-0000-0000-0000-000000000000','build','/webfirst',0,0,1,NULL,NULL,NULL),('3b912977-2303-3b66-63c2-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'采购订单修改',2,'erp:purchase:edit','bf33345e-a027-3025-206c-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('3bff4dfb-46c5-e35f-ce63-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'岗位查询',2,'system:post:query','d8248769-c815-d060-7bf4-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('3df955e2-d86f-ddfc-53fa-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'菜单查询',2,'system:menu:query','b9cdd7a9-51fa-459f-e5ad-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('3e045519-a597-d8c6-2316-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,97,1,'部门管理',1,'system:dept:list','9ba1a0e9-7467-c9a1-dc84-3a0f7ac8e7fb','tree','dept',0,1,1,NULL,'system/dept/index',NULL),('411f0aed-e06d-4b52-1f85-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,99,1,'字段管理',1,'webfirst:field:list','3b37e743-453e-7817-8217-3a0f7ac8e7fb','number','field',0,1,1,NULL,'webfirst/field/index',NULL),('4488d8f5-fc5c-c701-81b2-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'角色新增',2,'system:role:add','ddd6b645-cc84-432b-cbc4-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('4a616ad2-c2cc-8f55-8322-3a0f9f1694ed',0,'2023-12-21 23:06:18','59cf7e31-e3e4-544e-1038-3a0f836cc538','59cf7e31-e3e4-544e-1038-3a0f836cc538','2023-12-21 23:06:39',98,1,'主题管理',1,'bbs:discuss:list','a7f15626-69a6-a741-41aa-3a0f7ac8e8c9','clipboard','discuss',0,0,1,NULL,'bbs/disucss/index',NULL),('4dbb076c-7935-7bb2-3b3e-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,98,1,'系统工具',0,NULL,'00000000-0000-0000-0000-000000000000','tool','/tool',0,0,1,NULL,NULL,NULL),('4f47853f-f8dd-5bcb-5c92-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'操作日志',1,'monitor:operlog:list','cdf9927c-c695-bbaa-9428-3a0f7ac8e7fc','form','operlog',0,1,1,NULL,'monitor/operlog/index',NULL),('4f854829-ab9f-f993-35e2-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'岗位修改',2,'system:post:edit','d8248769-c815-d060-7bf4-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('4fe228fe-0c44-42e6-1dda-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'仓库修改',2,'erp:warehouse:edit','583304a3-35e3-581f-51fb-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('53b2aea0-4634-c793-6264-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'接口文档',1,NULL,'4dbb076c-7935-7bb2-3b3e-3a0f7ac8e7fc','list','http://localhost:19001/swagger',1,0,1,NULL,NULL,NULL),('540d147a-82f2-fb71-ef25-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'字典新增',2,'system:dict:add','b363a300-f61e-66bb-65d8-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('583304a3-35e3-581f-51fb-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'仓库定义',1,'erp:warehouse:list','a211c881-d6fa-ff74-9151-3a0f7ac8e7fc','education','warehouse',0,1,1,NULL,'erp/warehouse/index',NULL),('5934668a-a18c-337b-7231-3a0f7ac8e7fb',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'数据表管理',1,'webfirst:table:list','3b37e743-453e-7817-8217-3a0f7ac8e7fb','online','table',0,1,1,NULL,'webfirst/table/index',NULL),('5d0426ec-6951-e38d-f8b0-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'角色删除',2,'system:role:remove','ddd6b645-cc84-432b-cbc4-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('5e989545-87a0-6d3e-2a92-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'参数新增',2,'system:config:add','2545c3c5-88a4-ada9-6794-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('6015b583-fb1c-f9bc-a481-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'单位删除',2,'erp:unit:remove','86b62feb-c169-ace4-293b-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('63cf8f85-9a9c-d083-8aa7-3a0f9f178639',0,'2023-12-21 23:07:19','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0,1,'添加主题',2,'bbs:discuss:add','4a616ad2-c2cc-8f55-8322-3a0f9f1694ed',NULL,NULL,0,0,1,NULL,NULL,NULL),('65f1bab5-80de-efee-cdaa-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'角色查询',2,'system:role:query','ddd6b645-cc84-432b-cbc4-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('6d74c708-b757-044f-b406-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,97,1,'定时任务',1,'monitor:job:list','aa349313-f6f7-2bf5-5c5b-3a0f7ac8e7fc','job','job',0,1,1,NULL,'monitor/job/index',NULL),('6d91b3fb-dd41-5f81-2dea-3a0fa306ae11',0,'2023-12-22 17:27:24','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0,1,'删除主题',2,'bbs:discuss:del','4a616ad2-c2cc-8f55-8322-3a0f9f1694ed',NULL,NULL,0,0,1,NULL,NULL,NULL),('72619e1c-4351-2a8f-6406-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'部门查询',2,'system:dept:query','3e045519-a597-d8c6-2316-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('74326e52-3902-c552-ead3-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'采购订单删除',2,'erp:purchase:remove','bf33345e-a027-3025-206c-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('7791afcc-761c-6cf7-79ab-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'字典删除',2,'system:dict:remove','b363a300-f61e-66bb-65d8-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('7cf5684d-3e9c-f7fd-c9e0-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,99,1,'缓存列表',1,'monitor:cache:list','aa349313-f6f7-2bf5-5c5b-3a0f7ac8e7fc','redis-list','cacheList',0,1,1,NULL,'monitor/cache/list',NULL),('84130a41-6d53-04ff-c156-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'供应商删除',2,'erp:supplier:remove','aef449a7-54ed-8548-31e8-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('86005339-bf7c-5340-cee1-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'菜单修改',2,'system:menu:edit','b9cdd7a9-51fa-459f-e5ad-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('86a4a749-7cac-c810-e72c-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'部门新增',2,'system:dept:add','3e045519-a597-d8c6-2316-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('86ab7197-ae23-0ac2-0640-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'登录查询',2,'monitor:logininfor:query','9d19dba3-dd8b-4b3b-42a1-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('86b62feb-c169-ace4-293b-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'单位定义',1,'erp:unit:list','a211c881-d6fa-ff74-9151-3a0f7ac8e7fc','education','unit',0,1,1,NULL,'erp/unit/index',NULL),('894ae2d8-3e64-6631-ff23-3a0fa3098a91',0,'2023-12-22 17:30:32','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0,1,'评论更新',2,'bbs:comment:update','aa64193e-8a80-8974-3e34-3a0fa30851e8',NULL,NULL,0,0,1,NULL,NULL,NULL),('8a23efeb-c868-ae27-afe7-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'仓库新增',2,'erp:warehouse:add','583304a3-35e3-581f-51fb-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('8e75093e-6acb-6807-a129-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'部门修改',2,'system:dept:edit','3e045519-a597-d8c6-2316-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('94981e3b-bc81-9390-87ab-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'物料新增',2,'erp:material:add','9d099607-edc3-00a7-f37e-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('94cf95d7-5b82-aa53-6e73-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,90,1,'Yi框架',0,NULL,'00000000-0000-0000-0000-000000000000','guide','https://gitee.com/ccnetcore/yi',1,0,1,NULL,NULL,NULL),('9673d298-5271-e5ba-f6a0-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'用户删除',2,'system:user:remove','a297a53d-e952-84c1-36ba-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('98cbddfe-c1ea-6f3d-6c7c-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'参数查询',2,'system:config:query','2545c3c5-88a4-ada9-6794-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('9ba1a0e9-7467-c9a1-dc84-3a0f7ac8e7fb',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'系统管理',0,NULL,'00000000-0000-0000-0000-000000000000','system','/system',0,0,1,NULL,NULL,NULL),('9c34ff73-b9f1-0b31-8075-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'岗位新增',2,'system:post:add','d8248769-c815-d060-7bf4-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('9d099607-edc3-00a7-f37e-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'物料定义',1,'erp:material:list','a211c881-d6fa-ff74-9151-3a0f7ac8e7fc','education','material',0,1,1,NULL,'erp/material/index',NULL),('9d19dba3-dd8b-4b3b-42a1-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'登录日志',1,'monitor:logininfor:list','cdf9927c-c695-bbaa-9428-3a0f7ac8e7fc','logininfor','logininfor',0,1,1,NULL,'monitor/logininfor/index',NULL),('9ffb8d18-5c74-024e-c210-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,98,1,'服务监控',1,'monitor:server:list','aa349313-f6f7-2bf5-5c5b-3a0f7ac8e7fc','server','server',0,1,1,NULL,'monitor/server/index',NULL),('a211c881-d6fa-ff74-9151-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,96,1,'ERP',0,NULL,'00000000-0000-0000-0000-000000000000','international','/erp',0,0,1,NULL,NULL,NULL),('a2791310-59af-0762-36be-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'仓库删除',2,'erp:warehouse:remove','583304a3-35e3-581f-51fb-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('a297a53d-e952-84c1-36ba-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'用户管理',1,'system:user:list','9ba1a0e9-7467-c9a1-dc84-3a0f7ac8e7fb','user','user',0,1,1,NULL,'system/user/index',NULL),('a7f15626-69a6-a741-41aa-3a0f7ac8e8c9',0,'2023-12-14 21:55:08',NULL,'59cf7e31-e3e4-544e-1038-3a0f836cc538','2023-12-21 23:06:56',91,1,'BBS',0,NULL,'00000000-0000-0000-0000-000000000000','monitor','/bbs',0,0,1,NULL,NULL,NULL),('aa349313-f6f7-2bf5-5c5b-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,99,1,'系统监控',0,NULL,'00000000-0000-0000-0000-000000000000','monitor','/monitor',0,0,1,NULL,NULL,NULL),('aa64193e-8a80-8974-3e34-3a0fa30851e8',0,'2023-12-22 17:29:12','59cf7e31-e3e4-544e-1038-3a0f836cc538','59cf7e31-e3e4-544e-1038-3a0f836cc538','2023-12-22 17:32:02',97,1,'评论管理',1,'bbs:comment:list','a7f15626-69a6-a741-41aa-3a0f7ac8e8c9','druid','comment',0,0,0,NULL,NULL,NULL),('abbb33f4-ed8a-4d40-f491-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'单位新增',2,'erp:unit:add','86b62feb-c169-ace4-293b-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('aef449a7-54ed-8548-31e8-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'供应商定义',1,'erp:supplier:list','a211c881-d6fa-ff74-9151-3a0f7ac8e7fc','education','supplier',0,1,1,NULL,'erp/supplier/index',NULL),('b115dcfc-a01d-61d2-59d0-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'供应商查询',2,'erp:supplier:query','aef449a7-54ed-8548-31e8-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('b2c44d1e-5bfb-29d2-3545-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'用户查询',2,'system:user:query','a297a53d-e952-84c1-36ba-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('b363a300-f61e-66bb-65d8-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,95,1,'字典管理',1,'system:dict:list','9ba1a0e9-7467-c9a1-dc84-3a0f7ac8e7fb','dict','dict',0,1,1,NULL,'system/dict/index',NULL),('b65bebee-0440-a507-5ece-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'字典修改',2,'system:dict:edit','b363a300-f61e-66bb-65d8-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('b67a9595-1878-77a3-1442-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,98,1,'模板管理',1,'webfirst:template:list','3b37e743-453e-7817-8217-3a0f7ac8e7fb','documentation','template',0,1,1,NULL,'webfirst/template/index',NULL),('b731b724-dcd7-9077-b907-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'岗位删除',2,'system:post:remove','d8248769-c815-d060-7bf4-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('b9cdd7a9-51fa-459f-e5ad-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,98,1,'菜单管理',1,'system:menu:list','9ba1a0e9-7467-c9a1-dc84-3a0f7ac8e7fb','tree-table','menu',0,1,1,NULL,'system/menu/index',NULL),('bac766a1-e592-fa8d-c202-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'供应商新增',2,'erp:supplier:add','aef449a7-54ed-8548-31e8-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('bf33345e-a027-3025-206c-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'采购订单',1,'erp:purchase:list','a211c881-d6fa-ff74-9151-3a0f7ac8e7fc','education','purchase',0,1,1,NULL,'erp/purchase/index',NULL),('c06f659f-2a4c-4d61-9d55-3a0fa3094342',0,'2023-12-22 17:30:14','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0,1,'评论删除',2,'bbs:comment:del','aa64193e-8a80-8974-3e34-3a0fa30851e8',NULL,NULL,0,0,1,NULL,NULL,NULL),('c32e8f36-b003-8095-2167-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'部门删除',2,'system:dept:remove','3e045519-a597-d8c6-2316-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('c43b3a94-3394-e195-58e9-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'用户新增',2,'system:user:add','a297a53d-e952-84c1-36ba-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('c9e8e12d-898f-2a19-785a-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'物料修改',2,'erp:material:edit','9d099607-edc3-00a7-f37e-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('cdf9927c-c695-bbaa-9428-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,93,1,'日志管理',0,NULL,'9ba1a0e9-7467-c9a1-dc84-3a0f7ac8e7fb','log','log',0,0,1,NULL,NULL,NULL),('d8248769-c815-d060-7bf4-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,96,1,'岗位管理',1,'system:post:list','9ba1a0e9-7467-c9a1-dc84-3a0f7ac8e7fb','post','post',0,1,1,NULL,'system/post/index',NULL),('d90136ea-34d9-4711-2e85-3a0fa308e4ad',0,'2023-12-22 17:29:49','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0,1,'评论添加',2,'bbs:comment:add','aa64193e-8a80-8974-3e34-3a0fa30851e8',NULL,NULL,0,0,1,NULL,NULL,NULL),('da327576-0500-bc28-1424-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'字典查询',2,'system:dict:query','b363a300-f61e-66bb-65d8-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('dbc8fbce-31b5-504e-ffd1-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'操作删除',2,'monitor:operlog:remove','4f47853f-f8dd-5bcb-5c92-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('ddd6b645-cc84-432b-cbc4-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,99,1,'角色管理',1,'system:role:list','9ba1a0e9-7467-c9a1-dc84-3a0f7ac8e7fb','peoples','role',0,1,1,NULL,'system/role/index',NULL),('e136191a-f649-f9e5-5f8a-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'单位修改',2,'erp:unit:edit','86b62feb-c169-ace4-293b-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('e68b2cd9-da04-e7b8-e971-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'登录删除',2,'monitor:logininfor:remove','9d19dba3-dd8b-4b3b-42a1-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('e6a8871d-ac81-9789-7c88-3a0fa309d1b3',0,'2023-12-22 17:30:50','59cf7e31-e3e4-544e-1038-3a0f836cc538','59cf7e31-e3e4-544e-1038-3a0f836cc538','2023-12-22 17:31:24',0,1,'文章添加',2,'bbs:article:add','08f831c2-1e89-bdbb-7f69-3a0f7ac8e8c9',NULL,NULL,0,0,1,NULL,NULL,NULL),('eaf73380-7621-201b-0fbb-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'参数修改',2,'system:config:edit','2545c3c5-88a4-ada9-6794-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('ec131a11-3878-6a76-3840-3a0fa30abd7e',0,'2023-12-22 17:31:51','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0,1,'文章删除',2,'bbs:article:del','08f831c2-1e89-bdbb-7f69-3a0f7ac8e8c9',NULL,NULL,0,0,1,NULL,NULL,NULL),('ecca1a19-4973-59ce-0419-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'角色修改',2,'system:role:edit','ddd6b645-cc84-432b-cbc4-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('eeea77ca-ec15-79dd-2543-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'参数删除',2,'system:config:remove','2545c3c5-88a4-ada9-6794-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('f1b6984e-5155-65fe-cc63-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'仓库查询',2,'erp:warehouse:query','583304a3-35e3-581f-51fb-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('f1ef1bfb-74a6-db0f-4fdc-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'用户修改',2,'system:user:edit','a297a53d-e952-84c1-36ba-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL),('f5de617f-f18e-42f2-e899-3a0fa30a304f',0,'2023-12-22 17:31:14','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0,1,'文章修改',2,'bbs:article:update','08f831c2-1e89-bdbb-7f69-3a0f7ac8e8c9',NULL,NULL,0,0,1,NULL,NULL,NULL),('f9243d7f-e4d6-d230-a5c3-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'在线用户',1,'monitor:online:list','aa349313-f6f7-2bf5-5c5b-3a0f7ac8e7fc','online','online',0,1,1,NULL,'monitor/online/index',NULL),('f95f6ee2-f5f7-2cbb-ca60-3a0f7ac8e8c9',0,'2023-12-14 21:55:08',NULL,'59cf7e31-e3e4-544e-1038-3a0f836cc538','2023-12-21 23:06:54',100,1,'板块管理',1,'bbs:plate:list','a7f15626-69a6-a741-41aa-3a0f7ac8e8c9','component','plate',0,1,1,NULL,'bbs/plate/index',NULL),('fc6552b6-355c-cfe0-1c3a-3a0f7ac8e7fc',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'菜单删除',2,'system:menu:remove','b9cdd7a9-51fa-459f-e5ad-3a0f7ac8e7fc',NULL,NULL,0,0,1,NULL,NULL,NULL);
/*!40000 ALTER TABLE `Menu` ENABLE KEYS */;

-- 
-- Definition of MyType
-- 

DROP TABLE IF EXISTS `MyType`;
CREATE TABLE IF NOT EXISTS `MyType` (
  `Id` varchar(36) NOT NULL,
  `IsDeleted` tinyint(1) NOT NULL,
  `Name` varchar(255) NOT NULL,
  `Color` varchar(255) DEFAULT NULL,
  `BackgroundColor` varchar(255) DEFAULT NULL,
  `UserId` varchar(36) NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

-- 
-- Dumping data for table MyType
-- 

/*!40000 ALTER TABLE `MyType` DISABLE KEYS */;

/*!40000 ALTER TABLE `MyType` ENABLE KEYS */;

-- 
-- Definition of OperationLog
-- 

DROP TABLE IF EXISTS `OperationLog`;
CREATE TABLE IF NOT EXISTS `OperationLog` (
  `Id` varchar(36) NOT NULL,
  `Title` varchar(255) DEFAULT NULL COMMENT '操作模块',
  `OperType` int NOT NULL COMMENT '操作类型',
  `RequestMethod` varchar(255) DEFAULT NULL COMMENT '请求方法',
  `OperUser` varchar(255) DEFAULT NULL COMMENT '操作人员',
  `OperIp` varchar(255) DEFAULT NULL COMMENT '操作Ip',
  `OperLocation` varchar(255) DEFAULT NULL COMMENT '操作地点',
  `Method` varchar(255) DEFAULT NULL COMMENT '操作方法',
  `RequestParam` varchar(255) DEFAULT NULL COMMENT '请求参数',
  `RequestResult` longtext COMMENT '请求结果',
  `CreationTime` datetime NOT NULL,
  `CreatorId` varchar(36) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='操作日志表';

-- 
-- Dumping data for table OperationLog
-- 

/*!40000 ALTER TABLE `OperationLog` DISABLE KEYS */;
INSERT INTO `OperationLog`(`Id`,`Title`,`OperType`,`RequestMethod`,`OperUser`,`OperIp`,`OperLocation`,`Method`,`RequestParam`,`RequestResult`,`CreationTime`,`CreatorId`) VALUES('009d3204-55c8-1828-281a-3a0f9dc29fac','添加用户',1,'POST','cc','127.0.0.1','0 内网IP','/api/app/user',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"hhhhh\",\"Icon\":null,\"Nick\":\"hhh\",\"Email\":null,\"Ip\":null,\"Address\":null,\"Phone\":null,\"Introduction\":null,\"Remark\":null,\"Sex\":2,\"State\":true,\"CreationTime\":\"2023-12-21T16:54:58.1695294+08:00\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"ea80d1d9-6740-76fd-6152-3a0f9dc29f79\"}','2023-12-21 16:54:58','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('0b2b6efd-d05c-0583-933f-3a0f9c667f92','添加用户',1,'POST','cc','127.0.0.1','0 内网IP','/api/app/user',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"jjjj\",\"Icon\":null,\"Nick\":\"jjj\",\"Email\":null,\"Ip\":null,\"Address\":null,\"Phone\":null,\"Introduction\":null,\"Remark\":null,\"Sex\":2,\"State\":true,\"CreationTime\":\"2023-12-21T10:34:43.3666448+08:00\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"59c0b847-35ec-cab5-925f-3a0f9c667f29\"}','2023-12-21 10:34:43','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('15906f21-7b68-75e3-3be5-3a0fb10987e6','更新个人信息',2,'PUT','cctest','116.24.189.148','广东省 深圳市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"cctest\",\"Icon\":null,\"Nick\":\"大白\",\"Email\":\"FYZY@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":15949688315,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-24T01:52:54\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"74b32e7e-4586-78ca-fd43-3a0fa9fbd640\"}','2023-12-25 10:45:12','74b32e7e-4586-78ca-fd43-3a0fa9fbd640'),('1c107af4-ca91-78c7-0fb7-3a10086bb066','更新个人信息',2,'PUT','zjwy','112.228.139.101','山东省 临沂市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"zjwy\",\"Icon\":null,\"Nick\":\"萌新\",\"Email\":\"2684129256@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":15562985000,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2024-01-11T09:58:26\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"452be1e5-2a08-98a8-006c-3a10086ad006\"}','2024-01-11 09:59:23','452be1e5-2a08-98a8-006c-3a10086ad006'),('1c4f8a6a-83c3-1f6f-f635-3a0fdba84f74','更新个人信息',2,'PUT','shenjingwa','61.51.66.11','北京 北京市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"shenjingwa\",\"Icon\":\"06a399f0-a43f-3bbf-bc7e-3a0fdba75632\",\"Nick\":\"神经蛙\",\"Email\":\"1641153395@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":15027783263,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-25T09:05:13\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"69371804-7f8b-2f4d-d9b3-3a0fb0adfcde\"}','2024-01-02 17:22:41','69371804-7f8b-2f4d-d9b3-3a0fb0adfcde'),('1dc788ee-151b-3991-c1d0-3a1004f0ad73','更新个人信息',2,'PUT','bookmark','112.112.167.233','云南省 昆明市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"bookmark\",\"Icon\":null,\"Nick\":\"书签\",\"Email\":\"bookmark311@163.com\",\"Ip\":null,\"Address\":null,\"Phone\":17628502314,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2024-01-10T17:44:09\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"5d59e9f6-0c2e-9755-4cd8-3a1004eed5fb\"}','2024-01-10 17:46:10','5d59e9f6-0c2e-9755-4cd8-3a1004eed5fb'),('29f43df9-56c9-8cef-f87d-3a0fbff3f9b9','更新个人信息',2,'PUT','lightnehum','123.113.99.169','北京 北京市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"lightnehum\",\"Icon\":null,\"Nick\":\"车神NE\",\"Email\":\"707300278@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":18500102662,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-28T08:14:55\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"bfe59787-f6eb-cd49-0212-3a0fbff305b7\"}','2023-12-28 08:15:58','bfe59787-f6eb-cd49-0212-3a0fbff305b7'),('3f480eaf-214e-0452-592e-3a0f99988e4f','添加用户',1,'POST','cc','127.0.0.1','0 内网IP','/api/app/user',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"whj\",\"Icon\":null,\"Nick\":\"whj\",\"Email\":null,\"Ip\":null,\"Address\":null,\"Phone\":null,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-20T21:30:32.2238152+08:00\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"4aab0630-774e-a78e-b80c-3a0f99988da5\"}','2023-12-20 21:30:32','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('443a9f2f-3d19-53d3-717e-3a0fb1091c55','更新个人信息',2,'PUT','cctest','116.24.189.148','广东省 深圳市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"cctest\",\"Icon\":null,\"Nick\":\"FYZY\",\"Email\":\"FYZY@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":15949688315,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-24T01:52:54\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"74b32e7e-4586-78ca-fd43-3a0fa9fbd640\"}','2023-12-25 10:44:45','74b32e7e-4586-78ca-fd43-3a0fa9fbd640'),('480cfb72-db59-d44b-dc3f-3a0face11fd6','更新个人信息',2,'PUT','xwen','127.0.0.1','0 内网IP','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"xwen\",\"Icon\":null,\"Nick\":\"XwenHaHa\",\"Email\":\"929716663@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":17875960565,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-24T15:08:47\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"a46718ba-f869-6473-142b-3a0facd47b09\"}','2023-12-24 15:22:35','a46718ba-f869-6473-142b-3a0facd47b09'),('48bbe0a1-20f9-cec0-4a35-3a0fe9e32b6f','更新个人信息',2,'PUT','angw','43.156.240.178','0 0','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"angw\",\"Icon\":null,\"Nick\":\"吾昂王\",\"Email\":\"lwangjianchaol@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":15122652617,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2024-01-05T11:40:26\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"20515993-7547-d171-ea80-3a0fe9e20c99\"}','2024-01-05 11:41:40','20515993-7547-d171-ea80-3a0fe9e20c99'),('49d116e1-7945-295b-1318-3a0fb098ebb3','更新个人信息',2,'PUT','ygq1343261694','121.35.241.109','广东省 深圳市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"ygq1343261694\",\"Icon\":null,\"Nick\":\"云海观澜\",\"Email\":\"ygq1343261694@gmail.com\",\"Ip\":null,\"Address\":null,\"Phone\":18702549536,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-25T08:41:10\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"85c976e4-8b08-01c9-7c1a-3a0fb097f78e\"}','2023-12-25 08:42:12','85c976e4-8b08-01c9-7c1a-3a0fb097f78e'),('4ec86ea1-e2e4-37e9-05e3-3a0fae12cd39','更新个人信息',2,'PUT','czz1998','112.10.225.86','浙江省 杭州市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"czz1998\",\"Icon\":null,\"Nick\":\"czz1998\",\"Email\":\"3304224265@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":13197951695,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-24T20:54:04\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"3de3e074-8ebc-9280-0d16-3a0fae1099ef\"}','2023-12-24 20:56:28','3de3e074-8ebc-9280-0d16-3a0fae1099ef'),('52c55428-d156-f460-1f42-3a101e508daa','更新个人信息',2,'PUT','someTime','58.48.186.124','湖北省 武汉市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"someTime\",\"Icon\":null,\"Nick\":\"有时候...\",\"Email\":\"493051198@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":15671229761,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2024-01-15T16:00:39\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"2c2aa2ef-006c-6c61-e7c4-3a101e4fe1d8\"}','2024-01-15 16:01:23','2c2aa2ef-006c-6c61-e7c4-3a101e4fe1d8'),('56418f97-9748-55d7-b16f-3a0fe162b698','更新个人信息',2,'PUT','zbnzbn','222.186.126.27','江苏省 镇江市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"zbnzbn\",\"Icon\":null,\"Nick\":\"饕餮\",\"Email\":\"bing.zhu@toplens.com.cn\",\"Ip\":null,\"Address\":null,\"Phone\":18605119671,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2024-01-03T20:03:36\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"897c7f89-eceb-831c-b0f9-3a0fe161ff1f\"}','2024-01-03 20:04:23','897c7f89-eceb-831c-b0f9-3a0fe161ff1f'),('57efcb90-c036-53cd-dacd-3a0fdf4d5d18','更新个人信息',2,'PUT','cc','113.116.218.249','广东省 深圳市','/api/app/user/profile',NULL,'{\"Name\":\"大橙子\",\"Age\":20,\"UserName\":\"cc\",\"Icon\":\"d08054c7-7f9d-c950-13b5-3a0fdf4d5545\",\"Nick\":\"橙子\",\"Email\":\"454313500@qq.com\",\"Ip\":null,\"Address\":\"深圳\",\"Phone\":13800000000,\"Introduction\":\"还有谁？\",\"Remark\":\"描述是什么呢？\",\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-16T14:11:04\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"59cf7e31-e3e4-544e-1038-3a0f836cc538\"}','2024-01-03 10:21:50','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('59d5691f-945f-a1db-27b7-3a0fb10c05e6','更新个人信息',2,'PUT','cctest','116.24.189.148','广东省 深圳市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"cctest\",\"Icon\":\"d9396292-50ce-60ad-c235-3a0fb10bfc75\",\"Nick\":\"大白\",\"Email\":\"FYZY@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":15949688315,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-24T01:52:54\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"74b32e7e-4586-78ca-fd43-3a0fa9fbd640\"}','2023-12-25 10:47:56','74b32e7e-4586-78ca-fd43-3a0fa9fbd640'),('5ce7c68a-3651-dd50-9653-3a0f9dc275e5','添加用户',1,'POST','cc','127.0.0.1','0 内网IP','/api/app/user',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"dddd\",\"Icon\":null,\"Nick\":\"ddd\",\"Email\":null,\"Ip\":null,\"Address\":null,\"Phone\":null,\"Introduction\":null,\"Remark\":null,\"Sex\":2,\"State\":true,\"CreationTime\":\"2023-12-21T16:54:47.3721473+08:00\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"03cd54ba-836b-9778-2421-3a0f9dc27550\"}','2023-12-21 16:54:48','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('66fe0ca9-fd55-87ee-4aa1-3a0f9f140f59','更新用户',2,'PUT','cc','183.11.38.200','广东省 深圳市','/api/app/user/627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"whj\",\"Icon\":null,\"Nick\":\"whj\",\"Email\":null,\"Ip\":null,\"Address\":null,\"Phone\":null,\"Introduction\":null,\"Remark\":null,\"Sex\":2,\"State\":true,\"CreationTime\":\"2023-12-21T16:55:32\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"627714f3-0ed1-1ec5-fdf5-3a0f9dc32509\"}','2023-12-21 23:03:32','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('6dad7af9-1c35-a415-cc5d-3a0fae89aa8d','更新用户',2,'PUT','cc','113.102.165.140','广东省 深圳市','/api/app/user/74b32e7e-4586-78ca-fd43-3a0fa9fbd640',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"cctest\",\"Icon\":null,\"Nick\":\"萌新大佬\",\"Email\":null,\"Ip\":null,\"Address\":null,\"Phone\":15949688315,\"Introduction\":null,\"Remark\":null,\"Sex\":2,\"State\":true,\"CreationTime\":\"2023-12-24T01:52:54\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"74b32e7e-4586-78ca-fd43-3a0fa9fbd640\"}','2023-12-24 23:06:18','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('6eae012b-e1b0-9977-18b0-3a0fea558dde','更新个人信息',2,'PUT','yitianlige','61.157.27.67','四川省 成都市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"yitianlige\",\"Icon\":null,\"Nick\":\"萌新\",\"Email\":\"yitianlige@126.com\",\"Ip\":null,\"Address\":null,\"Phone\":18908237343,\"Introduction\":null,\"Remark\":null,\"Sex\":2,\"State\":true,\"CreationTime\":\"2024-01-05T13:46:00\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"9d5c2790-8bdf-6c73-474c-3a0fea5501e7\"}','2024-01-05 13:46:36','9d5c2790-8bdf-6c73-474c-3a0fea5501e7'),('6f9243ac-1025-b3c0-9fce-3a0f9dc2cbb7','添加用户',1,'POST','cc','127.0.0.1','0 内网IP','/api/app/user',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"kkkkk\",\"Icon\":null,\"Nick\":\"kkkk\",\"Email\":null,\"Ip\":null,\"Address\":null,\"Phone\":null,\"Introduction\":null,\"Remark\":null,\"Sex\":2,\"State\":true,\"CreationTime\":\"2023-12-21T16:55:09.4578603+08:00\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"07889d8b-892e-5287-6f50-3a0f9dc2cb91\"}','2023-12-21 16:55:09','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('780eb629-2927-7b86-3008-3a0fad0dca84','更新个人信息',2,'PUT','xwen','127.0.0.1','0 内网IP','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"xwen\",\"Icon\":null,\"Nick\":\"Xwen\",\"Email\":\"929716663@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":17875960565,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-24T15:08:47\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"a46718ba-f869-6473-142b-3a0facd47b09\"}','2023-12-24 16:11:23','a46718ba-f869-6473-142b-3a0facd47b09'),('7ebacd64-181b-cf19-30b5-3a10033435da','更新个人信息',2,'PUT','CxToost','123.234.189.134','山东省 青岛市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"CxToost\",\"Icon\":\"fffa507c-dcc7-296b-d096-3a100333d908\",\"Nick\":\"阿巴阿巴阿巴\",\"Email\":\"2380023328@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":17568930535,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2024-01-10T09:37:27\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"ab7018b2-ad7d-835f-2d19-3a1003313e5a\"}','2024-01-10 09:40:41','ab7018b2-ad7d-835f-2d19-3a1003313e5a'),('8fd0cf0f-0a8f-86bf-0e2d-3a0f9c8e81aa','添加用户',1,'POST','cc','127.0.0.1','0 内网IP','/api/app/user',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"bbbbcvc\",\"Icon\":null,\"Nick\":\"vvc\",\"Email\":null,\"Ip\":null,\"Address\":null,\"Phone\":null,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-21T11:18:25.331998+08:00\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"01d46bc4-3977-594c-2b60-3a0f9c8e8136\"}','2023-12-21 11:18:25','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('925c0908-0641-15ec-a412-3a0fe16464e1','更新个人信息',2,'PUT','zbnzbn','222.186.126.27','江苏省 镇江市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"zbnzbn\",\"Icon\":\"ae44ba9b-e5e8-097d-e5eb-3a0fe1645bde\",\"Nick\":\"饕餮\",\"Email\":\"bing.zhu@toplens.com.cn\",\"Ip\":null,\"Address\":null,\"Phone\":18605119671,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2024-01-03T20:03:36\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"897c7f89-eceb-831c-b0f9-3a0fe161ff1f\"}','2024-01-03 20:06:13','897c7f89-eceb-831c-b0f9-3a0fe161ff1f'),('9780511f-5089-8ab3-ee5b-3a0fae2058bc','更新个人信息',2,'PUT','2535688890','223.88.44.73','河南省 郑州市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"2535688890\",\"Icon\":null,\"Nick\":\"高级CV工程师\",\"Email\":\"2535688890@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":17181572279,\"Introduction\":null,\"Remark\":null,\"Sex\":2,\"State\":true,\"CreationTime\":\"2023-12-24T21:09:47\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"7b8e5231-af13-1a1e-0a0e-3a0fae1eff4c\"}','2023-12-24 21:11:16','7b8e5231-af13-1a1e-0a0e-3a0fae1eff4c'),('98d22830-7a90-40b5-5d50-3a0fdaeeb438','更新个人信息',2,'PUT','Alan','27.38.196.105','广东省 深圳市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"Alan\",\"Icon\":null,\"Nick\":\"萌新\",\"Email\":\"619915854@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":13535466843,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2024-01-02T13:59:11\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"8b12cc70-9c9b-c1a7-1f0f-3a0fdaedfe6d\"}','2024-01-02 13:59:57','8b12cc70-9c9b-c1a7-1f0f-3a0fdaedfe6d'),('99e68e46-de32-a3ce-044b-3a0ff888b3b6','更新个人信息',2,'PUT','Faded','223.104.68.2','广东省 东莞市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"Faded\",\"Icon\":null,\"Nick\":\"林\",\"Email\":\"1468465205@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":15727628861,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-25T08:49:51\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"69b15fa0-7a66-3287-f532-3a0fb09fecb6\"}','2024-01-08 07:57:09','69b15fa0-7a66-3287-f532-3a0fb09fecb6'),('9cdf3484-5468-b585-9695-3a0fdc322e0c','更新个人信息',2,'PUT','core','183.11.37.129','广东省 深圳市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"core\",\"Icon\":\"d9396292-50ce-60ad-c235-3a0fb10bfc75\",\"Nick\":\"大白\",\"Email\":\"FYZY@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":15949688315,\"Introduction\":null,\"Remark\":null,\"Sex\":1,\"State\":true,\"CreationTime\":\"2023-12-24T01:52:54\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"74b32e7e-4586-78ca-fd43-3a0fa9fbd640\"}','2024-01-02 19:53:17','74b32e7e-4586-78ca-fd43-3a0fa9fbd640'),('a325fb0b-a8b0-0f58-a7fa-3a0fdc32359f','更新个人信息',2,'PUT','core','183.11.37.129','广东省 深圳市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"core\",\"Icon\":\"d9396292-50ce-60ad-c235-3a0fb10bfc75\",\"Nick\":\"大白\",\"Email\":\"FYZY@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":15949688315,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-24T01:52:54\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"74b32e7e-4586-78ca-fd43-3a0fa9fbd640\"}','2024-01-02 19:53:18','74b32e7e-4586-78ca-fd43-3a0fa9fbd640'),('a70dd381-860f-2305-b862-3a0fb1728c33','更新个人信息',2,'PUT','acechengui','113.116.47.246','广东省 深圳市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"acechengui\",\"Icon\":null,\"Nick\":\"辰鬼\",\"Email\":\"623169670@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":17375590410,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-25T12:36:58\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"f19ef1b0-5141-17ee-910a-3a0fb16fd942\"}','2023-12-25 12:39:55','f19ef1b0-5141-17ee-910a-3a0fb16fd942'),('aa18b690-b4d0-d60e-c510-3a0fdb90a459','更新个人信息',2,'PUT','shenjingwa','61.51.66.11','北京 北京市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"shenjingwa\",\"Icon\":null,\"Nick\":\"神经蛙\",\"Email\":\"1641153395@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":15027783263,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-25T09:05:13\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"69371804-7f8b-2f4d-d9b3-3a0fb0adfcde\"}','2024-01-02 16:56:50','69371804-7f8b-2f4d-d9b3-3a0fb0adfcde'),('adf35f38-6529-7009-cab2-3a100886199f','添加用户',1,'POST','cc','113.116.216.121','广东省 深圳市','/api/app/user',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"liu\",\"Icon\":null,\"Nick\":\"liu\",\"Email\":null,\"Ip\":null,\"Address\":null,\"Phone\":19968185191,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2024-01-11T10:28:13.7572135+08:00\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"e8426f52-6ed0-e15b-e8b5-3a1008861941\"}','2024-01-11 10:28:14','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('af00124a-d2b6-6b2c-2458-3a10093919ce','更新个人信息',2,'PUT','刘本法','183.94.57.148','湖北省 武汉市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"刘本法\",\"Icon\":null,\"Nick\":\"刘本发\",\"Email\":\"13164607128@163.com\",\"Ip\":null,\"Address\":null,\"Phone\":18207190600,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-26T10:56:50\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"81213b20-f29f-1646-58de-3a0fb63a89aa\"}','2024-01-11 13:43:45','81213b20-f29f-1646-58de-3a0fb63a89aa'),('b2455076-87f2-2176-614e-3a0fae339090','更新个人信息',2,'PUT','xwen','119.123.139.17','广东省 深圳市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"xwen\",\"Icon\":\"06bfe367-fef5-17d2-f9ac-3a0fae3344ff\",\"Nick\":\"Xwen\",\"Email\":\"929716663@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":17875960565,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-24T15:08:47\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"a46718ba-f869-6473-142b-3a0facd47b09\"}','2023-12-24 21:32:15','a46718ba-f869-6473-142b-3a0facd47b09'),('b3c1be29-db0d-a3e1-ff5c-3a0f9dc32533','添加用户',1,'POST','cc','127.0.0.1','0 内网IP','/api/app/user',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"whj\",\"Icon\":null,\"Nick\":\"whj\",\"Email\":null,\"Ip\":null,\"Address\":null,\"Phone\":null,\"Introduction\":null,\"Remark\":null,\"Sex\":2,\"State\":true,\"CreationTime\":\"2023-12-21T16:55:32.3609913+08:00\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"627714f3-0ed1-1ec5-fdf5-3a0f9dc32509\"}','2023-12-21 16:55:32','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('bbbcc225-4023-5642-687c-3a0fae11bd76','更新个人信息',2,'PUT','czz1998','112.10.225.86','浙江省 杭州市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"czz1998\",\"Icon\":null,\"Nick\":\"czz1998\",\"Email\":\"3304224265@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":13197951695,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-24T20:54:04\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"3de3e074-8ebc-9280-0d16-3a0fae1099ef\"}','2023-12-24 20:55:19','3de3e074-8ebc-9280-0d16-3a0fae1099ef'),('c445b515-330a-0b00-9fae-3a0fdb25573f','更新个人信息',2,'PUT','hyposhan','112.4.228.148','江苏省 连云港市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"hyposhan\",\"Icon\":null,\"Nick\":\"仙\",\"Email\":\"hyposhan@live.com\",\"Ip\":null,\"Address\":null,\"Phone\":18036622501,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2024-01-02T14:57:04\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"5a42983f-80a0-19ba-1a97-3a0fdb22fe1c\"}','2024-01-02 14:59:38','5a42983f-80a0-19ba-1a97-3a0fdb22fe1c'),('c8389567-1c0e-83d5-e079-3a0ffa7859c1','更新个人信息',2,'PUT','admin','180.111.41.87','江苏省 南京市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"admin\",\"Icon\":null,\"Nick\":\"admin\",\"Email\":\"786744873@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":13057686866,\"Introduction\":null,\"Remark\":null,\"Sex\":2,\"State\":true,\"CreationTime\":\"2024-01-08T16:58:00\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"ba759caa-709e-741d-7c93-3a0ffa77dcc9\"}','2024-01-08 16:58:32','ba759caa-709e-741d-7c93-3a0ffa77dcc9'),('ce6387d6-64ea-1d7b-01f6-3a1003348b3b','更新个人信息',2,'PUT','CxToost','123.234.189.134','山东省 青岛市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"CxToost\",\"Icon\":\"fffa507c-dcc7-296b-d096-3a100333d908\",\"Nick\":\"阿巴阿巴阿巴\",\"Email\":\"123@456.com\",\"Ip\":null,\"Address\":null,\"Phone\":17568930535,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2024-01-10T09:37:27\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"ab7018b2-ad7d-835f-2d19-3a1003313e5a\"}','2024-01-10 09:41:03','ab7018b2-ad7d-835f-2d19-3a1003313e5a'),('d071b82a-45ea-3b55-537f-3a0fad13335b','更新个人信息',2,'PUT','xwen','127.0.0.1','0 内网IP','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"xwen\",\"Icon\":null,\"Nick\":\"Xwen\",\"Email\":\"929716663@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":17875960565,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-24T15:08:47\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"a46718ba-f869-6473-142b-3a0facd47b09\"}','2023-12-24 16:17:17','a46718ba-f869-6473-142b-3a0facd47b09'),('d3237222-bed7-1117-e456-3a0f9c71e40d','添加用户',1,'POST','cc','127.0.0.1','0 内网IP','/api/app/user',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"mmmm\",\"Icon\":null,\"Nick\":\"mmm\",\"Email\":null,\"Ip\":null,\"Address\":null,\"Phone\":null,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-21T10:47:09.9737272+08:00\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"40db7c6e-2859-8290-70eb-3a0f9c71e398\"}','2023-12-21 10:47:10','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('d5c9a342-2bd3-10ce-5fac-3a0fea558f07','更新个人信息',2,'PUT','yitianlige','61.157.27.67','四川省 成都市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"yitianlige\",\"Icon\":null,\"Nick\":\"萌新\",\"Email\":\"yitianlige@126.com\",\"Ip\":null,\"Address\":null,\"Phone\":18908237343,\"Introduction\":null,\"Remark\":null,\"Sex\":2,\"State\":true,\"CreationTime\":\"2024-01-05T13:46:00\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"9d5c2790-8bdf-6c73-474c-3a0fea5501e7\"}','2024-01-05 13:46:36','9d5c2790-8bdf-6c73-474c-3a0fea5501e7'),('d9328944-8ebb-103f-5ba3-3a0fad120c1b','更新个人信息',2,'PUT','xwen','127.0.0.1','0 内网IP','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"xwen\",\"Icon\":null,\"Nick\":\"Xwen\",\"Email\":\"929716663@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":17875960565,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-24T15:08:47\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"a46718ba-f869-6473-142b-3a0facd47b09\"}','2023-12-24 16:16:02','a46718ba-f869-6473-142b-3a0facd47b09'),('d9fb4511-4ce1-03c8-6f4d-3a0f9c62f57e','添加用户',1,'POST','cc','127.0.0.1','0 内网IP','/api/app/user',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"ppp\",\"Icon\":null,\"Nick\":\"ppp\",\"Email\":null,\"Ip\":null,\"Address\":null,\"Phone\":null,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-21T10:30:51.3552092+08:00\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"406ac118-b11a-f454-d08c-3a0f9c62f4df\"}','2023-12-21 10:30:52','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('dea1b753-32de-e108-3ad7-3a0fad0db552','更新个人信息',2,'PUT','xwen','127.0.0.1','0 内网IP','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"xwen\",\"Icon\":null,\"Nick\":\"Xwen\",\"Email\":\"929716663@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":17875960565,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-24T15:08:47\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"a46718ba-f869-6473-142b-3a0facd47b09\"}','2023-12-24 16:11:17','a46718ba-f869-6473-142b-3a0facd47b09'),('df6c39af-fa2a-abb0-c108-3a0fae197142','更新个人信息',2,'PUT','Rocky','223.104.90.160','广西 南宁市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"Rocky\",\"Icon\":null,\"Nick\":\"队长\",\"Email\":\"313451399@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":15778313303,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-24T21:01:22\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"15146013-b586-30f2-f81f-3a0fae17487e\"}','2023-12-24 21:03:43','15146013-b586-30f2-f81f-3a0fae17487e'),('dffd4280-17c9-d1d0-98a4-3a0f9c9c25cd','添加用户',1,'POST','cc','127.0.0.1','0 内网IP','/api/app/user',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"cccc\",\"Icon\":null,\"Nick\":\"ccccc\",\"Email\":null,\"Ip\":null,\"Address\":null,\"Phone\":null,\"Introduction\":null,\"Remark\":null,\"Sex\":2,\"State\":true,\"CreationTime\":\"2023-12-21T11:33:11.3240615+08:00\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"9c8da103-ab47-7d0a-8ec2-3a0f9c9c0620\"}','2023-12-21 11:33:19','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('e08a4457-f1dc-8198-7744-3a0f9c803244','添加用户',1,'POST','cc','127.0.0.1','0 内网IP','/api/app/user',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"nnnnn\",\"Icon\":null,\"Nick\":\"nnnn\",\"Email\":null,\"Ip\":null,\"Address\":null,\"Phone\":null,\"Introduction\":null,\"Remark\":null,\"Sex\":2,\"State\":true,\"CreationTime\":\"2023-12-21T11:02:47.4568697+08:00\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"f259c47b-2112-99ea-69e9-3a0f9c8031a4\"}','2023-12-21 11:02:48','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('e622268f-900e-c65d-2d7f-3a0fad150928','更新个人信息',2,'PUT','xwen','127.0.0.1','0 内网IP','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"xwen\",\"Icon\":null,\"Nick\":\"Xwen\",\"Email\":\"929716663@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":17875960565,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-24T15:08:47\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"a46718ba-f869-6473-142b-3a0facd47b09\"}','2023-12-24 16:19:17','a46718ba-f869-6473-142b-3a0facd47b09'),('ece046d4-16ca-243d-367f-3a0fc6a9ee41','更新个人信息',2,'PUT','iknow','125.114.187.206','浙江省 宁波市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"iknow\",\"Icon\":null,\"Nick\":\"天师寄凡\",\"Email\":\"493986228@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":15272096365,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-29T15:30:40\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"99b5b971-d68d-c827-6041-3a0fc6a85099\"}','2023-12-29 15:32:26','99b5b971-d68d-c827-6041-3a0fc6a85099'),('f2748fae-8c24-e179-539f-3a0fae3382ef','更新个人信息',2,'PUT','xwen','119.123.139.17','广东省 深圳市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"xwen\",\"Icon\":\"06bfe367-fef5-17d2-f9ac-3a0fae3344ff\",\"Nick\":\"Xwen1\",\"Email\":\"929716663@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":17875960565,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-24T15:08:47\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"a46718ba-f869-6473-142b-3a0facd47b09\"}','2023-12-24 21:32:12','a46718ba-f869-6473-142b-3a0facd47b09'),('f3c12a21-6b04-37f8-0a17-3a0fae116d7d','更新个人信息',2,'PUT','czz1998','112.10.225.86','浙江省 杭州市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"czz1998\",\"Icon\":null,\"Nick\":\"萌新\",\"Email\":\"3304224265@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":13197951695,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-24T20:54:04\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"3de3e074-8ebc-9280-0d16-3a0fae1099ef\"}','2023-12-24 20:54:58','3de3e074-8ebc-9280-0d16-3a0fae1099ef'),('f40c5c3c-ead3-f9e2-45e4-3a0f99bffcfb','更新用户',2,'PUT','cc','113.102.166.22','广东省 深圳市','/api/app/user/09e0f2a9-7d86-ff0a-786a-3a0f99b96ba6',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"pp\",\"Icon\":null,\"Nick\":\"萌新\",\"Email\":null,\"Ip\":null,\"Address\":null,\"Phone\":15949688315,\"Introduction\":null,\"Remark\":null,\"Sex\":2,\"State\":true,\"CreationTime\":\"2023-12-20T22:06:26\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"09e0f2a9-7d86-ff0a-786a-3a0f99b96ba6\"}','2023-12-20 22:13:37','59cf7e31-e3e4-544e-1038-3a0f836cc538'),('f452a1ff-9d74-94f4-e387-3a0fb1727045','更新个人信息',2,'PUT','acechengui','113.116.47.246','广东省 深圳市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"acechengui\",\"Icon\":null,\"Nick\":\"辰鬼\",\"Email\":\"623169670@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":17375590410,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-25T12:36:58\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"f19ef1b0-5141-17ee-910a-3a0fb16fd942\"}','2023-12-25 12:39:48','f19ef1b0-5141-17ee-910a-3a0fb16fd942'),('f7f0ed9b-13a5-195e-4f59-3a0fe4c17c5e','更新个人信息',2,'PUT','youngcao9188','223.166.35.3','上海 上海市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"youngcao9188\",\"Icon\":\"042d8937-ac5e-062d-e9ed-3a0fe4c12d11\",\"Nick\":\"Young\",\"Email\":\"269955494@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":17621066618,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-24T21:54:08\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"8823e06f-8f1e-0235-8ef8-3a0fae4796ca\"}','2024-01-04 11:46:46','8823e06f-8f1e-0235-8ef8-3a0fae4796ca'),('faf169d9-e972-6dd9-aa4c-3a0f834dcb2a','更新用户状态',2,'PUT','cc','183.11.68.51','广东省 深圳市','/api/app/user/727bc4e3-5e7f-1b5f-f3fa-3a0f7ac8e8aa/false',NULL,'{\"Name\":\"游客\",\"Age\":18,\"UserName\":\"guest\",\"Icon\":null,\"Nick\":\"测试\",\"Email\":\"454313500@qq.com\",\"Ip\":null,\"Address\":\"深圳\",\"Phone\":15900000000,\"Introduction\":\"临时游客\",\"Remark\":\"懒得创账号\",\"Sex\":1,\"State\":false,\"CreationTime\":\"2023-12-14T21:55:08\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"727bc4e3-5e7f-1b5f-f3fa-3a0f7ac8e8aa\"}','2023-12-16 13:37:14','92e15fd1-452a-415a-3590-3a0f7ac8e8a5'),('fdc0b4ac-cd95-840c-2909-3a0fae123f8d','更新个人信息',2,'PUT','木南','223.64.97.195','江苏省 苏州市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"木南\",\"Icon\":\"8519a759-3562-6a6f-b07e-3a0fae120f41\",\"Nick\":\"萌新\",\"Email\":\"1185586015@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":15050906608,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2023-12-24T20:54:49\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"371ed696-bb9c-66fa-4e84-3a0fae1148a9\"}','2023-12-24 20:55:52','371ed696-bb9c-66fa-4e84-3a0fae1148a9'),('fff4cbb8-627f-381f-4561-3a1003821236','更新个人信息',2,'PUT','YuanEMoBaoYou','58.216.225.5','江苏省 常州市','/api/app/user/profile',NULL,'{\"Name\":null,\"Age\":null,\"UserName\":\"YuanEMoBaoYou\",\"Icon\":null,\"Nick\":\"萌新\",\"Email\":\"1218257592@qq.com\",\"Ip\":null,\"Address\":null,\"Phone\":15061981150,\"Introduction\":null,\"Remark\":null,\"Sex\":0,\"State\":true,\"CreationTime\":\"2024-01-03T09:05:27\",\"DeptId\":null,\"Dept\":null,\"Posts\":null,\"Roles\":null,\"Id\":\"4b58e3a5-8bff-a839-1530-3a0fdf076f1c\"}','2024-01-10 11:05:44','4b58e3a5-8bff-a839-1530-3a0fdf076f1c');
/*!40000 ALTER TABLE `OperationLog` ENABLE KEYS */;

-- 
-- Definition of Plate
-- 

DROP TABLE IF EXISTS `Plate`;
CREATE TABLE IF NOT EXISTS `Plate` (
  `Id` varchar(36) NOT NULL,
  `Code` varchar(255) NOT NULL,
  `Name` varchar(255) NOT NULL,
  `Logo` varchar(255) DEFAULT NULL,
  `Introduction` varchar(255) DEFAULT NULL,
  `IsDeleted` tinyint(1) NOT NULL,
  `CreationTime` datetime NOT NULL,
  `CreatorId` varchar(36) DEFAULT NULL,
  `LastModifierId` varchar(36) DEFAULT NULL,
  `LastModificationTime` datetime DEFAULT NULL,
  `OrderNum` int NOT NULL,
  `IsDisableCreateDiscuss` tinyint(1) NOT NULL COMMENT '是否禁用创建主题，禁用后，只有管理员或者权限者能够发送',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

-- 
-- Dumping data for table Plate
-- 

/*!40000 ALTER TABLE `Plate` DISABLE KEYS */;
INSERT INTO `Plate`(`Id`,`Code`,`Name`,`Logo`,`Introduction`,`IsDeleted`,`CreationTime`,`CreatorId`,`LastModifierId`,`LastModificationTime`,`OrderNum`,`IsDisableCreateDiscuss`) VALUES('24cc0526-86e7-aabf-e091-3a0f83c3e604','message','申诉留言区',NULL,'问题反馈、账号申述',0,'2023-12-16 15:46:14','59cf7e31-e3e4-544e-1038-3a0f836cc538','59cf7e31-e3e4-544e-1038-3a0f836cc538','2023-12-26 10:06:55',60,0),('7728706e-2a2b-02ad-4f5c-3a0f935e5c10','yu','摸鱼闲聊区',NULL,'成为捕鱼达人',0,'2023-12-19 16:29:15','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,97,0),('aaafacaa-e71e-3445-55a3-3a0f935d1308','opencode','模块分享区',NULL,'分享属于你自己的模块',0,'2023-12-19 16:27:51','59cf7e31-e3e4-544e-1038-3a0f836cc538','59cf7e31-e3e4-544e-1038-3a0f836cc538','2024-01-07 17:38:02',99,0),('d239673b-d164-2eaa-0cd6-3a0f7ad1cb6d','yi','Yi框架教程区',NULL,'详细到爆炸的框架教程',0,'2023-12-14 22:04:50','92e15fd1-452a-415a-3590-3a0f7ac8e8a5','59cf7e31-e3e4-544e-1038-3a0f836cc538','2023-12-19 16:26:55',100,1),('d940818d-90ec-9dbe-b7af-3a0f935dac0a','xuexi','学习分享区',NULL,'共同学习，共同进步',0,'2023-12-19 16:28:30','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,98,0),('f5633be2-c33b-94bf-a61e-3a0f9360840b','dayi','问题答疑区',NULL,'你的问题，我们来解答',0,'2023-12-19 16:31:36','59cf7e31-e3e4-544e-1038-3a0f836cc538','59cf7e31-e3e4-544e-1038-3a0f836cc538','2023-12-22 17:25:45',90,0);
/*!40000 ALTER TABLE `Plate` ENABLE KEYS */;

-- 
-- Definition of Post
-- 

DROP TABLE IF EXISTS `Post`;
CREATE TABLE IF NOT EXISTS `Post` (
  `Id` varchar(36) NOT NULL COMMENT '主键',
  `IsDeleted` tinyint(1) NOT NULL COMMENT '逻辑删除',
  `CreationTime` datetime NOT NULL COMMENT '创建时间',
  `CreatorId` varchar(36) DEFAULT NULL COMMENT '创建者',
  `LastModifierId` varchar(36) DEFAULT NULL COMMENT '最后修改者',
  `LastModificationTime` datetime DEFAULT NULL COMMENT '最后修改时间',
  `OrderNum` int NOT NULL COMMENT '排序',
  `State` tinyint(1) NOT NULL COMMENT '状态',
  `PostCode` varchar(255) NOT NULL COMMENT '岗位编码',
  `PostName` varchar(255) NOT NULL COMMENT '岗位名称',
  `Remark` varchar(255) DEFAULT NULL COMMENT '描述',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='岗位表';

-- 
-- Dumping data for table Post
-- 

/*!40000 ALTER TABLE `Post` DISABLE KEYS */;
INSERT INTO `Post`(`Id`,`IsDeleted`,`CreationTime`,`CreatorId`,`LastModifierId`,`LastModificationTime`,`OrderNum`,`State`,`PostCode`,`PostName`,`Remark`) VALUES('1e0e4458-90b2-908f-603b-3a0f7ac8e853',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'ceo','董事长',NULL),('2e6e14c8-22d9-f331-3434-3a0f7ac8e855',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'user','普通员工',NULL),('f4f0913e-758d-a629-6bd2-3a0f7ac8e854',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'se','项目经理',NULL),('fcffa67c-9c86-23d1-04ce-3a0f7ac8e855',0,'2023-12-14 21:55:07',NULL,NULL,NULL,100,1,'hr','人力资源',NULL);
/*!40000 ALTER TABLE `Post` ENABLE KEYS */;

-- 
-- Definition of Role
-- 

DROP TABLE IF EXISTS `Role`;
CREATE TABLE IF NOT EXISTS `Role` (
  `Id` varchar(36) NOT NULL COMMENT '主键',
  `IsDeleted` tinyint(1) NOT NULL COMMENT '逻辑删除',
  `CreationTime` datetime NOT NULL COMMENT '创建时间',
  `CreatorId` varchar(36) DEFAULT NULL COMMENT '创建者',
  `LastModifierId` varchar(36) DEFAULT NULL COMMENT '最后修改者',
  `LastModificationTime` datetime DEFAULT NULL COMMENT '最后修改时间',
  `OrderNum` int NOT NULL COMMENT '排序',
  `RoleName` varchar(255) NOT NULL COMMENT '角色名',
  `RoleCode` varchar(255) NOT NULL COMMENT '角色编码',
  `Remark` varchar(255) DEFAULT NULL COMMENT '描述',
  `DataScope` int NOT NULL COMMENT '角色数据范围',
  `State` tinyint(1) NOT NULL COMMENT '状态',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='角色表';

-- 
-- Dumping data for table Role
-- 

/*!40000 ALTER TABLE `Role` DISABLE KEYS */;
INSERT INTO `Role`(`Id`,`IsDeleted`,`CreationTime`,`CreatorId`,`LastModifierId`,`LastModificationTime`,`OrderNum`,`RoleName`,`RoleCode`,`Remark`,`DataScope`,`State`) VALUES('09030db8-56b1-ceb7-5a14-3a0f7ac8e879',0,'2023-12-14 21:55:08',NULL,NULL,NULL,1,'普通用户','common','正常用户',0,1),('9a565adf-1e0d-3427-cfd0-3a0f7ac8e878',0,'2023-12-14 21:55:08',NULL,NULL,NULL,1,'测试角色','test','测试用的角色',0,1),('aad458e5-112c-4054-5841-3a0f7ac8e879',0,'2023-12-14 21:55:08',NULL,'59cf7e31-e3e4-544e-1038-3a0f836cc538','2023-12-22 17:34:38',1,'默认用户','default','可简单浏览',0,1),('fa01e5ba-b400-99a2-7a9a-3a0f7ac8e877',0,'2023-12-14 21:55:08',NULL,NULL,NULL,999,'管理员','admin','管理员',0,1);
/*!40000 ALTER TABLE `Role` ENABLE KEYS */;

-- 
-- Definition of RoleDept
-- 

DROP TABLE IF EXISTS `RoleDept`;
CREATE TABLE IF NOT EXISTS `RoleDept` (
  `Id` varchar(36) NOT NULL COMMENT '主键',
  `RoleId` varchar(36) NOT NULL COMMENT '角色id',
  `DeptId` varchar(36) NOT NULL COMMENT '部门id',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='角色部门关系表';

-- 
-- Dumping data for table RoleDept
-- 

/*!40000 ALTER TABLE `RoleDept` DISABLE KEYS */;

/*!40000 ALTER TABLE `RoleDept` ENABLE KEYS */;

-- 
-- Definition of RoleMenu
-- 

DROP TABLE IF EXISTS `RoleMenu`;
CREATE TABLE IF NOT EXISTS `RoleMenu` (
  `Id` varchar(36) NOT NULL COMMENT '主键',
  `RoleId` varchar(36) NOT NULL,
  `MenuId` varchar(36) NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='角色菜单关系表';

-- 
-- Dumping data for table RoleMenu
-- 

/*!40000 ALTER TABLE `RoleMenu` DISABLE KEYS */;
INSERT INTO `RoleMenu`(`Id`,`RoleId`,`MenuId`) VALUES('051f10dc-d5fa-1599-ba1a-3a0fa30d4c16','aad458e5-112c-4054-5841-3a0f7ac8e879','4a616ad2-c2cc-8f55-8322-3a0f9f1694ed'),('07153916-b395-fb51-cdb9-3a0fa30d4c16','aad458e5-112c-4054-5841-3a0f7ac8e879','c06f659f-2a4c-4d61-9d55-3a0fa3094342'),('1be31f87-4616-3da9-57c2-3a0fa30d4c16','aad458e5-112c-4054-5841-3a0f7ac8e879','1ec85baf-89ec-a297-96da-3a0fa3065d39'),('2e016559-6abd-6892-6726-3a0fa30d4c15','aad458e5-112c-4054-5841-3a0f7ac8e879','a7f15626-69a6-a741-41aa-3a0f7ac8e8c9'),('363d8819-5ffb-88f3-223f-3a0fa30d4c16','aad458e5-112c-4054-5841-3a0f7ac8e879','aa64193e-8a80-8974-3e34-3a0fa30851e8'),('66eb6925-194e-a144-ed48-3a0fa30d4c16','aad458e5-112c-4054-5841-3a0f7ac8e879','f95f6ee2-f5f7-2cbb-ca60-3a0f7ac8e8c9'),('7b36b478-6e40-0aec-33b8-3a0fa30d4c16','aad458e5-112c-4054-5841-3a0f7ac8e879','ec131a11-3878-6a76-3840-3a0fa30abd7e'),('83219904-490d-d626-4038-3a0fa30d4c16','aad458e5-112c-4054-5841-3a0f7ac8e879','894ae2d8-3e64-6631-ff23-3a0fa3098a91'),('966be6f2-a856-be3d-3d92-3a0fa30d4c16','aad458e5-112c-4054-5841-3a0f7ac8e879','d90136ea-34d9-4711-2e85-3a0fa308e4ad'),('cb3a0d11-ddfe-691b-cb73-3a0fa30d4c16','aad458e5-112c-4054-5841-3a0f7ac8e879','e6a8871d-ac81-9789-7c88-3a0fa309d1b3'),('cccf490e-436c-7431-a563-3a0fa30d4c16','aad458e5-112c-4054-5841-3a0f7ac8e879','f5de617f-f18e-42f2-e899-3a0fa30a304f'),('ce7a82b7-91b2-d84d-d21e-3a0fa30d4c16','aad458e5-112c-4054-5841-3a0f7ac8e879','63cf8f85-9a9c-d083-8aa7-3a0f9f178639'),('dba762f3-f26b-ba52-6b69-3a0fa30d4c16','aad458e5-112c-4054-5841-3a0f7ac8e879','6d91b3fb-dd41-5f81-2dea-3a0fa306ae11'),('f96706ed-b24a-c989-1c44-3a0fa30d4c16','aad458e5-112c-4054-5841-3a0f7ac8e879','08f831c2-1e89-bdbb-7f69-3a0f7ac8e8c9');
/*!40000 ALTER TABLE `RoleMenu` ENABLE KEYS */;

-- 
-- Definition of Setting
-- 

DROP TABLE IF EXISTS `Setting`;
CREATE TABLE IF NOT EXISTS `Setting` (
  `Id` varchar(36) NOT NULL,
  `CommentPage` int NOT NULL,
  `DiscussPage` int NOT NULL,
  `CommentExperience` int NOT NULL,
  `DiscussExperience` int NOT NULL,
  `Title` varchar(255) NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

-- 
-- Dumping data for table Setting
-- 

/*!40000 ALTER TABLE `Setting` DISABLE KEYS */;

/*!40000 ALTER TABLE `Setting` ENABLE KEYS */;

-- 
-- Definition of SignIn
-- 

DROP TABLE IF EXISTS `SignIn`;
CREATE TABLE IF NOT EXISTS `SignIn` (
  `Id` varchar(36) NOT NULL,
  `CreationTime` datetime NOT NULL COMMENT '签到时间',
  `CreatorId` varchar(36) DEFAULT NULL,
  `ContinuousNumber` int NOT NULL COMMENT '连续签到次数',
  PRIMARY KEY (`Id`),
  KEY `index_CreatorId` (`CreatorId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='签到表';

-- 
-- Dumping data for table SignIn
-- 

/*!40000 ALTER TABLE `SignIn` DISABLE KEYS */;
INSERT INTO `SignIn`(`Id`,`CreationTime`,`CreatorId`,`ContinuousNumber`) VALUES('03bba950-82f1-238c-8bed-3a101d13beed','2024-01-15 10:15:21','0a6a0afd-6a31-4729-0c76-3a0fb8d4f73c',1),('162ddba6-8c02-2fa7-3eb6-3a100b0242bd','2024-01-11 22:03:05','59cf7e31-e3e4-544e-1038-3a0f836cc538',1),('1ad547a6-5efd-b1eb-be8c-3a10144bbfe4','2024-01-13 17:19:56','59cf7e31-e3e4-544e-1038-3a0f836cc538',1),('1dd6b415-250b-5571-1b6a-3a101cc3ba99','2024-01-15 08:47:57','59cf7e31-e3e4-544e-1038-3a0f836cc538',1),('248b1e3e-4557-c80a-7750-3a1021fcba69','2024-01-16 09:08:19','59cf7e31-e3e4-544e-1038-3a0f836cc538',1),('aacbf007-02b5-223a-856a-3a1017fbb695','2024-01-14 10:31:00','59cf7e31-e3e4-544e-1038-3a0f836cc538',1),('cc2b8cd1-d0fa-c0e4-3f54-3a101e57563f','2024-01-15 16:08:48','2c2aa2ef-006c-6c61-e7c4-3a101e4fe1d8',1),('d236c930-fb5e-36e5-a95e-3a101e4f1a0e','2024-01-15 15:59:48','8823e06f-8f1e-0235-8ef8-3a0fae4796ca',1);
/*!40000 ALTER TABLE `SignIn` ENABLE KEYS */;

-- 
-- Definition of User
-- 

DROP TABLE IF EXISTS `User`;
CREATE TABLE IF NOT EXISTS `User` (
  `Id` varchar(36) NOT NULL COMMENT '主键',
  `IsDeleted` tinyint(1) NOT NULL COMMENT '逻辑删除',
  `Name` varchar(255) DEFAULT NULL COMMENT '姓名',
  `Age` int DEFAULT NULL COMMENT '年龄',
  `UserName` varchar(255) NOT NULL COMMENT '用户名',
  `Password` varchar(255) NOT NULL COMMENT '密码',
  `Salt` varchar(255) NOT NULL COMMENT '加密盐值',
  `Icon` varchar(255) DEFAULT NULL COMMENT '头像',
  `Nick` varchar(255) DEFAULT NULL COMMENT '昵称',
  `Email` varchar(255) DEFAULT NULL COMMENT '邮箱',
  `Ip` varchar(255) DEFAULT NULL COMMENT 'Ip',
  `Address` varchar(255) DEFAULT NULL COMMENT '地址',
  `Phone` bigint DEFAULT NULL COMMENT '电话',
  `Introduction` varchar(255) DEFAULT NULL COMMENT '简介',
  `Remark` varchar(255) DEFAULT NULL COMMENT '备注',
  `Sex` int NOT NULL COMMENT '性别',
  `DeptId` varchar(36) DEFAULT NULL COMMENT '部门id',
  `CreationTime` datetime NOT NULL COMMENT '创建时间',
  `CreatorId` varchar(36) DEFAULT NULL COMMENT '创建者',
  `LastModifierId` varchar(36) DEFAULT NULL COMMENT '最后修改者',
  `LastModificationTime` datetime DEFAULT NULL COMMENT '最后修改时间',
  `OrderNum` int NOT NULL COMMENT '排序',
  `State` tinyint(1) NOT NULL COMMENT '状态',
  PRIMARY KEY (`Id`),
  KEY `index_UserName` (`UserName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='用户表';

-- 
-- Dumping data for table User
-- 

/*!40000 ALTER TABLE `User` DISABLE KEYS */;
INSERT INTO `User`(`Id`,`IsDeleted`,`Name`,`Age`,`UserName`,`Password`,`Salt`,`Icon`,`Nick`,`Email`,`Ip`,`Address`,`Phone`,`Introduction`,`Remark`,`Sex`,`DeptId`,`CreationTime`,`CreatorId`,`LastModifierId`,`LastModificationTime`,`OrderNum`,`State`) VALUES('0014829f-bb75-369f-4047-3a1018e25aba',0,NULL,NULL,'chujianxin','yB8XoH4J_xp8Re4IUjgTGxhWknTxYLAW415E7vCaqAp6Dj0qT8TT5dkytPDItxoK3UmFWo7MtXLbFN2uTgUrmg','0d6RU3kYx1jFIYwEhRA1Vw==',NULL,'萌新',NULL,NULL,NULL,18910274390,NULL,NULL,2,NULL,'2024-01-14 14:42:55',NULL,NULL,NULL,0,1),('01d7ec4a-d7f3-54ad-cf87-3a0fb89339ce',0,NULL,NULL,'13834600861','ZQfqB438-6I7QvP6a346-5R3-7u1iY2yycF1KdysSeNCR73NBwGKlDxe9u5WxjtE3uLY60VIwzqrsmxA6h-QQQ','UrCIkX+die285xsu5GVUKA==',NULL,'萌新',NULL,NULL,NULL,13834600861,NULL,NULL,2,NULL,'2023-12-26 21:52:57',NULL,NULL,NULL,0,1),('0266be8b-25f2-5fb1-0217-3a100e64773c',0,NULL,NULL,'laodadezhu','AuffGYwr90oKcb65m8yRJCKchoqAr4iN-aWnY-Py04-VALcGQz51H3WyfR6MOiUSAV35yVtKHWkK91Qyn0dgug','mtLaDA80DI6/gBBk6HA68Q==',NULL,'萌新',NULL,NULL,NULL,18518908066,NULL,NULL,2,NULL,'2024-01-12 13:49:13',NULL,NULL,NULL,0,1),('029eb7c0-22ba-5671-b1f5-3a0fd9fdc0ad',0,NULL,NULL,'远行','yQ1FUpTyiFIZtgg9tFaDNfk5GMZDEXY5Uo-ABo4A7c4ERuVF8n7YB7MANwEkWJ-OWD387z2FSa6jwQOdDOqi8w','1Om3YoLB/PTQp8Rbd/zk/w==',NULL,'萌新',NULL,NULL,NULL,13599291007,NULL,NULL,2,NULL,'2024-01-02 09:36:46',NULL,NULL,NULL,0,1),('042c0a8e-dfc6-7bdb-3d1d-3a0fbb818095',0,NULL,NULL,'dalin','SziLdJhfMjdUWn46FiY4ChRmC6Js5JWNfgKn6KTFFZAj5XAATVIPdOOIEXuqfcoPSQoX2GQc9aMgdIkX757yKw','LqE9L3faqEu0plqI/tUDaQ==',NULL,'萌新',NULL,NULL,NULL,15191469301,NULL,NULL,2,NULL,'2023-12-27 11:32:27',NULL,NULL,NULL,0,1),('0a6a0afd-6a31-4729-0c76-3a0fb8d4f73c',0,NULL,NULL,'fktet','jCEwBVG0_-B-CRGi-g0VH7C0e6qbf0eePDzmPovjV6tXtGV4afYRzAsCG1dQbl2Id6vhbu5ADSVKAHeLCo6_wg','sbLJwMRsd53rpYx7Y4FPCg==','6c5a3269-6613-4411-8b8a-3a101d205093','萌新',NULL,NULL,NULL,18690278815,NULL,NULL,2,NULL,'2023-12-26 23:04:45',NULL,'0a6a0afd-6a31-4729-0c76-3a0fb8d4f73c','2024-01-15 10:29:05',0,1),('10db8047-fee0-a0d8-4938-3a1008092e3f',0,NULL,NULL,'1044617901','rJIgir2d2IzF1XHMmtkq4fu3KTwjU503k_XfGftpr8mUxaKmYC0GccQRvAFMJJ53A8y4UflG8VyT7WCTusln-g','6LC6vjyvbo1iUHdR0D2d+g==',NULL,'萌新',NULL,NULL,NULL,15995668149,NULL,NULL,2,NULL,'2024-01-11 08:11:47',NULL,NULL,NULL,0,1),('11555e08-9e27-3ea6-14d3-3a0fc2597f24',0,NULL,NULL,'温柔多几分','2zju2JLO5cM3KYh90WnxRm88B1rv4cD0b62rSmd7_gAlI9shqGmNll2xeiX_VnQhR1SlwON-Y841Ym8nNXPqQw','b/7+VefYBPcmTZ0FKa/GeQ==',NULL,'萌新',NULL,NULL,NULL,18566235188,NULL,NULL,2,NULL,'2023-12-28 19:26:06',NULL,NULL,NULL,0,1),('15146013-b586-30f2-f81f-3a0fae17487e',0,NULL,NULL,'Rocky','1mBR81jsk04xN9Q_tHBdTDzaHjnDYMJ82bkWkZXymGIINxucTbmlB9EsJ3WJ0or2-xERE6W1jYecG2VoZr7wPg','Qev+dn0pv33cOzJbn/WtJg==',NULL,'队长','313451399@qq.com',NULL,NULL,15778313303,NULL,NULL,0,NULL,'2023-12-24 21:01:22',NULL,'15146013-b586-30f2-f81f-3a0fae17487e','2023-12-24 21:03:43',0,1),('1a9063ac-559c-d65a-2ce3-3a101d3f31aa',0,NULL,NULL,'wangzhuhui','LU-Vz-IaGffOT0LSWKEMeHjYFyF52KZvGPNMbY4FlbIWLRRaxre1_0Dv1UqrArsualfSrapfe4ZI87EMrSS2tw','OOktpcGnJY0rFA6mKhUzlg==',NULL,'萌新',NULL,NULL,NULL,17276488867,NULL,NULL,2,NULL,'2024-01-15 11:02:48',NULL,NULL,NULL,0,1),('20515993-7547-d171-ea80-3a0fe9e20c99',0,NULL,NULL,'angw','pNfVG6_ekqAGf-yZ_nZS-LCfJbhHBpUaGwGpYoIn3iUQanDoSpuVW2Eq70c7_kqpqLqVhP4g5MrYRf4NCBys0A','c4B7pWh7hGS7RDBV5WjkQA==',NULL,'吾昂王','lwangjianchaol@qq.com',NULL,NULL,15122652617,NULL,NULL,0,NULL,'2024-01-05 11:40:26',NULL,'20515993-7547-d171-ea80-3a0fe9e20c99','2024-01-05 11:41:40',0,1),('20b15203-f437-54ff-6488-3a0fe048c887',0,NULL,NULL,'yi649815059','0_p222gX9QZQf5xNu6-rJZvJ6HaADT3fhehKGEfs3MPWj6hieXUfmV4KNXdfKmnZfucEV2fWm0WwHOyM7pUscg','QHI0h4xyzU9allX2drSPeA==',NULL,'萌新',NULL,NULL,NULL,17602377789,NULL,NULL,2,NULL,'2024-01-03 14:56:27',NULL,NULL,NULL,0,1),('2c2aa2ef-006c-6c61-e7c4-3a101e4fe1d8',0,NULL,NULL,'someTime','paQUSfFjU7IAg2oUsf4-77mtSXRg4uK-iQ-vjP-oKeHoTdmmRGXEt8FuTvMOte5ofz4yo7sKa-lP9cosqTOMrA','jyprKf30Z4g7ApLbV/nazg==',NULL,'有时候...','493051198@qq.com',NULL,NULL,15671229761,NULL,NULL,0,NULL,'2024-01-15 16:00:39',NULL,'2c2aa2ef-006c-6c61-e7c4-3a101e4fe1d8','2024-01-15 16:01:23',0,1),('2d407f53-71c5-b2b6-ccdd-3a0fe1fed2a0',0,NULL,NULL,'kaikai','nQVIgRbNPOWcRf6fx8LZeno7tok1NVLJBP2yo8mrWdinCHA7mIvAOQ-hLaQhvvqL5C8JTZ8ON_u1XzHVRj2-3g','nPv8yL4UJcqIiKuz9ozkrA==',NULL,'萌新',NULL,NULL,NULL,18753238260,NULL,NULL,2,NULL,'2024-01-03 22:54:54',NULL,NULL,NULL,0,1),('313abacd-9a19-5dbd-d665-3a0fc564495a',0,NULL,NULL,'jiaxiaodong','vsCln79cuOixcjxRECi2yzcnGz677F2OSJ_DehZgvgZiefHNEeYzXiXIDoArJjDr_4TQMZ7KLFjk8y1imqWwUQ','D0kdjzrvE6dDee43YdbCzg==',NULL,'萌新',NULL,NULL,NULL,17704716655,NULL,NULL,2,NULL,'2023-12-29 09:36:44',NULL,NULL,NULL,0,1),('32c11814-dd8f-0849-e1fd-3a0ffa90fe8e',0,NULL,NULL,'zhoubai','vG0hAk7-XBWDoZNHhu9Kl0ilHZ3wUNAK5yn8OfzoMYdP7IbO9czjVJMYBHQkeFwjSMaBd9EqaNr0iWWVco1JVw','+z39ZSFPoVCKPKXCnIqqtw==',NULL,'萌新',NULL,NULL,NULL,13227535753,NULL,NULL,2,NULL,'2024-01-08 17:25:27',NULL,NULL,NULL,0,1),('33564c61-c9f5-b663-758a-3a1003589125',0,NULL,NULL,'andy','DuzVdCJkw5ou75LFzEVjp95fnlbZFldheTjcj7y_QFrs4N4niItI0wWVMojTOor41V_98on8rkCqUTYX_tVONg','Q5VvR8Tjmq4v4pMNjHH0sA==',NULL,'萌新',NULL,NULL,NULL,18663096658,NULL,NULL,2,NULL,'2024-01-10 10:20:24',NULL,NULL,NULL,0,1),('35bee444-e18c-8ee4-f413-3a0fdafe79f5',0,NULL,NULL,'pavel','TAywIJ42mfXd6IA_aoZqDEB1BjYaER_PJywZF46rhPeIN8WI5BI3qZ4RB8UXtpn71hTjdrK5H8G-lhFuxKV0dQ','pG1BtUXnzaGNtqppYhOqOg==',NULL,'萌新',NULL,NULL,NULL,15508611382,NULL,NULL,2,NULL,'2024-01-02 14:17:11',NULL,NULL,NULL,0,1),('371ed696-bb9c-66fa-4e84-3a0fae1148a9',0,NULL,NULL,'木南','GQCtT2jgD5z9pDMkTHtHsvGTbywlTqdpws_GUcAFipNlXaK6DSQ8cCne4JS77B5kDvGdNCYaVFx6uHfhJndrgQ','TKopyFwsZ7F+kYUScoFzsg==','8519a759-3562-6a6f-b07e-3a0fae120f41','萌新','1185586015@qq.com',NULL,NULL,15050906608,NULL,NULL,0,NULL,'2023-12-24 20:54:49',NULL,'371ed696-bb9c-66fa-4e84-3a0fae1148a9','2023-12-24 20:55:52',0,1),('3de3e074-8ebc-9280-0d16-3a0fae1099ef',0,NULL,NULL,'czz1998','Vli6RJGLbq0aVw5oY5wR1ton85krhlVv535fQB2wAbAlLKu_MquHjzgwYvYo1sCXpi6kCsZxzPGW2iF2XodR3Q','dL1jfpTjEu7F4uNTTyYGtw==',NULL,'czz1998','3304224265@qq.com',NULL,NULL,13197951695,NULL,NULL,0,NULL,'2023-12-24 20:54:04',NULL,'3de3e074-8ebc-9280-0d16-3a0fae1099ef','2023-12-24 20:56:28',0,1),('419231a8-9bfa-ddfc-85a8-3a0ffa60e875',0,NULL,NULL,'hang','OEWxlFKLeY9pVW_g46u-ile_ctojEtne4MIZ931q9Fmqp7jhOSriuQ1qdEi-LHRTBiwo_9x0XFD1VsWDPyv1Ng','2vhaBvMIqBUriWNEUeTfig==',NULL,'萌新',NULL,NULL,NULL,15526219107,NULL,NULL,2,NULL,'2024-01-08 16:32:55',NULL,NULL,NULL,0,1),('438fecf2-7c2b-665e-3cd6-3a0ffa667e62',0,NULL,NULL,'litterstar','9vk4fu6yYtJj7GqnxbLNVoQR-skMj_U-cbaYiTl-PSAMxekTiRqUeCqIVPX-ilYPkzMFdBpBkDGH4US40_lAvw','OMG4UxvUZNHbaF30srq1fQ==',NULL,'萌新',NULL,NULL,NULL,17746644495,NULL,NULL,2,NULL,'2024-01-08 16:39:01',NULL,NULL,NULL,0,1),('44a18a90-6cbe-9460-5d45-3a0fe45b44a9',0,NULL,NULL,'jiancaixing','rXKysi9hR1P7qwsZdiFKdwHCFKSrW9OHJd8jBdHFWVONSOLtcZaaT47XMX77v863LIszwGipCADg9yz09YU5Qw','us6umzBeRoRiDK9Cha9dow==',NULL,'萌新',NULL,NULL,NULL,13240995988,NULL,NULL,2,NULL,'2024-01-04 09:55:07',NULL,NULL,NULL,0,1),('452be1e5-2a08-98a8-006c-3a10086ad006',0,NULL,NULL,'zjwy','MnOuldcGceownxktUeKQeTPa3xZUNPNZIoxzAT-6PhCMlHy2qkQJ17jqDek_-cbemgOz4TnCcsNY5G5RS3K1Rw','JEwuZzsylmy6gKPNwsE8aA==',NULL,'萌新','2684129256@qq.com',NULL,NULL,15562985000,NULL,NULL,0,NULL,'2024-01-11 09:58:26',NULL,'452be1e5-2a08-98a8-006c-3a10086ad006','2024-01-11 09:59:23',0,1),('4685a3e5-b7a5-33b8-b67d-3a0fb195641a',0,NULL,NULL,'chips520','WjPn1bjh7BQUgKwh6P5r3dfvPE-ec9S3SLOQPNpZR5iWb1Npv6-UWnUMWs5fCEc5MMSAGUUVaJMh-BG2STy_AA','Qd1noKWDXVnz2dKMxNzx5A==','a25a8f97-fb72-e014-7506-3a0fb1970967','萌新',NULL,NULL,NULL,13812088765,NULL,NULL,2,NULL,'2023-12-25 13:17:58',NULL,'4685a3e5-b7a5-33b8-b67d-3a0fb195641a','2023-12-25 13:19:46',0,1),('47ba50b4-2369-9bc8-6c93-3a0fe4c92034',0,NULL,NULL,'Celles','8rH4HXLyawVTX9yjspacJ-ulHLcliOYjdaINo68qBlxoL9fxeLjaf63WNt3P18z-4bLow1dS4O5IaaFR8wCTHA','rmmsY0rNz9+5DFxiUr5WMA==',NULL,'萌新',NULL,NULL,NULL,17631774916,NULL,NULL,2,NULL,'2024-01-04 11:55:07',NULL,NULL,NULL,0,1),('4b58e3a5-8bff-a839-1530-3a0fdf076f1c',0,NULL,NULL,'YuanEMoBaoYou','HR-uDYtM_h3ynTiL_XHYV-qa385b7syOFDnCdM9EG7W5J5Od5zClqYa23SdalD_hMo7VdfsCg95T7ZROLbYE7Q','huTgN9u3lZ8Nko13cuBjBQ==',NULL,'萌新','1218257592@qq.com',NULL,NULL,15061981150,NULL,NULL,0,NULL,'2024-01-03 09:05:27',NULL,'4b58e3a5-8bff-a839-1530-3a0fdf076f1c','2024-01-10 11:05:44',0,1),('4e24c804-5b3b-2974-9efc-3a0fb5d30810',0,NULL,NULL,'bigface','0ptBxO0Y2rTHVIi8iGJ3AwCyRuoERKjm2fmAyB2K9aRvRmHjAnMgotRjDYGN0ELoYK93B3imFuBJBrOMtoa42A','pwzL8RYU27Keotnav191jA==',NULL,'萌新',NULL,NULL,NULL,15213804009,NULL,NULL,2,NULL,'2023-12-26 09:03:47',NULL,NULL,NULL,0,1),('55f49636-805f-a9f1-f276-3a1009b255c9',0,NULL,NULL,'hnicypb','GHklpfjWK5CxdblQqWEuxBren8KTAT4DYZ0iodQQZTkGzAykJ24bOSVkhIi9pl53ub8rzfWXtlxbkVhynsTCLw','piHroerLnu6NRM9cSJ+l7g==',NULL,'萌新',NULL,NULL,NULL,13590424210,NULL,NULL,2,NULL,'2024-01-11 15:56:10',NULL,NULL,NULL,0,1),('59cf7e31-e3e4-544e-1038-3a0f836cc538',0,'大橙子',20,'cc','ap59IXMTQyKWpKqCF0helEek9-m_p2eoh7VYw-x-A6v0hCni1LB37Qt1u7DNySmkw6xtbQG83WuU9CRmioqxNA','x0xoCowlXoD1gYyYL4vYWQ==','8dc29ca0-5e14-4dac-9b0a-3a0fdf5d7248','橙子','454313500@qq.com',NULL,'深圳',13800000000,'还有谁？','描述是什么呢？',0,NULL,'2023-12-16 14:11:04',NULL,'59cf7e31-e3e4-544e-1038-3a0f836cc538','2024-01-03 10:39:24',999,1),('5a42983f-80a0-19ba-1a97-3a0fdb22fe1c',0,NULL,NULL,'hyposhan','D5o8H_Ba4JXeHgtjH4RFD1WuV_DRPMUdEf61PNRrGbWQEm6toYTX2b-Xfp4Q4MsqLjrsZptvF8RPvASYyP77Yg','0NsLbttEMiptQeYQSflQiw==',NULL,'仙','hyposhan@live.com',NULL,NULL,18036622501,NULL,NULL,0,NULL,'2024-01-02 14:57:04',NULL,'5a42983f-80a0-19ba-1a97-3a0fdb22fe1c','2024-01-02 14:59:38',0,1),('5ab9405a-907a-71a0-ae98-3a0fffb281e3',0,NULL,NULL,'gaijun2008','xt54fRmEn_lxD5RaK-e9qy2EQoOZuMkrAT_bLnX-3qIYADiJwL0hO3acAKBa3Bm5J5tTfzgRt2RI3y9JARTbUw','feCoG1JkuiocaBhftVv12Q==',NULL,'萌新',NULL,NULL,NULL,18686663896,NULL,NULL,2,NULL,'2024-01-09 17:20:09',NULL,NULL,NULL,0,1),('5d59e9f6-0c2e-9755-4cd8-3a1004eed5fb',0,NULL,NULL,'bookmark','xy9KtAetkAsKLiskJKxJArFtv_mefx7v51aB-OXbb58egXj0MVkSlhx2X8a8GNKEf2yl36fkGQjm_mSBMXty2g','NPSdj965iOPEh8MPlKy8Dw==','fc75164b-430a-0642-53f2-3a1004f1a84f','书签','bookmark311@163.com',NULL,NULL,17628502314,NULL,NULL,0,NULL,'2024-01-10 17:44:09',NULL,'5d59e9f6-0c2e-9755-4cd8-3a1004eed5fb','2024-01-10 17:47:14',0,1),('5d8a9d7d-57ce-8077-6537-3a0fc5ae3c57',0,NULL,NULL,'zzwwg','ajZEEH7I-PAEuW8c7kgwMIC_Rm4cE-MSGwtq6x0nC3D_4Oi7E7OOhssBQWVF6Az8IfD0csuE2Kt0SYnntcu_3g','/swil4Y0CEK2b808D10hcQ==',NULL,'萌新',NULL,NULL,NULL,13592548230,NULL,NULL,2,NULL,'2023-12-29 10:57:31',NULL,NULL,NULL,0,1),('60c66f70-ca1e-8d07-2ac4-3a0fdb8c7c9f',0,NULL,NULL,'never','1_4yXWLfKbg27yy1xxADcGz_w5VOXeHFvPCAlUN28n6gz8ZJfMPBumgbctMXnbN-5eibsfeGedE7l7wkOOACcQ','Sbo1WxjIQ4cC76uCA/LHEA==',NULL,'萌新',NULL,NULL,NULL,13197919907,NULL,NULL,2,NULL,'2024-01-02 16:52:18',NULL,NULL,NULL,0,1),('623fc788-7d86-8916-61d2-3a0fda7fef0f',0,NULL,NULL,'Ydon','Llx4uRxX5KEOGNkBjI_x3sVnZPQsNNxYfFgXWRI_VupN4ozhPR80qII2W_Zvs1QUPmxMalNWqr6zs4rzp_JUJw','2tGeohtAKYdNtnZ0mvjK/w==',NULL,'萌新',NULL,NULL,NULL,13536383997,NULL,NULL,2,NULL,'2024-01-02 11:58:58',NULL,NULL,NULL,0,1),('627714f3-0ed1-1ec5-fdf5-3a0f9dc32509',0,NULL,NULL,'whj','CuWFum168dFSPtkRb3B_4pnJaahV2cJ4hQaZ15hWO0kz-v692eB8ipT-hWhyFc6IDtoEkrAvVFsbPaIPZEaxxA','4ZAhHw6B628K70CoYqqs8A==','8706d762-3a18-8bec-c192-3a0fdc77c946','whj',NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,'2023-12-21 16:55:32','59cf7e31-e3e4-544e-1038-3a0f836cc538','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509','2024-01-02 21:09:18',0,1),('691de7d2-8514-1602-c558-3a1003045d25',0,NULL,NULL,'SmallHan','I5JZxSkpGHXjXqieqMWJQlkuZP9iecKU8uVTvrBCXPcTCzmWWGegymLQ-YV0YiTNygrMnAVHEoOPn6MD65MXjw','wi44dPWZQNj6SGDbeGEF5w==',NULL,'萌新',NULL,NULL,NULL,13168084732,NULL,NULL,2,NULL,'2024-01-10 08:48:25',NULL,NULL,NULL,0,1),('69371804-7f8b-2f4d-d9b3-3a0fb0adfcde',0,NULL,NULL,'shenjingwa','1YZqq6QP365dqWLPQbzkVETq165VYn0hIyzRCNWgThLcniwjf8hXYx_4azwyTzzfRTTQtPTL9cCP33inpWukGA','AH59wOfwBklpWVs6/TrKyQ==','06a399f0-a43f-3bbf-bc7e-3a0fdba75632','神经蛙','1641153395@qq.com',NULL,NULL,15027783263,NULL,NULL,0,NULL,'2023-12-25 09:05:13',NULL,'69371804-7f8b-2f4d-d9b3-3a0fb0adfcde','2024-01-02 17:22:41',0,1),('69b15fa0-7a66-3287-f532-3a0fb09fecb6',0,NULL,NULL,'Faded','KkfM43xlVeEvUmQ_CnuKyPpypFIha6hMfIAEHYUNK-FkhXwaFRW7xqoaq7nL9JHHq2oF79SaT4iLHETUvraeJw','7e94ANVmY1Hb5a466mIWzg==',NULL,'林','1468465205@qq.com',NULL,NULL,15727628861,NULL,NULL,0,NULL,'2023-12-25 08:49:51',NULL,'69b15fa0-7a66-3287-f532-3a0fb09fecb6','2024-01-08 07:57:09',0,1),('6a4a2126-0028-248c-ab2e-3a0fe5d9617f',0,NULL,NULL,'tpc','k1g8rMHyMFmztLmj1-0Z4fovtDB9B94M_HzygVWKn9lj36MwgizLvjkoHJVB6szp737bCwFzpllP1drKEWsFFw','5TT1P84RPEdk97zZyJVFlQ==',NULL,'萌新',NULL,NULL,NULL,17674113417,NULL,NULL,2,NULL,'2024-01-04 16:52:29',NULL,NULL,NULL,0,1),('6f4f1a9c-87df-30bd-a54e-3a0fdae21e36',0,NULL,NULL,'afafa','Nbj10wboWZk5LqNwQRTohFraa_HRkwOpoXlrfnIR82I4Isqzum9ygF-so3C3XdTZaxxgKQ9svnh5ZVRXZGhPEQ','DwLlSBYSPD4zmS/8l5M9rQ==',NULL,'萌新',NULL,NULL,NULL,15801320336,NULL,NULL,2,NULL,'2024-01-02 13:46:12',NULL,NULL,NULL,0,1),('74b32e7e-4586-78ca-fd43-3a0fa9fbd640',0,NULL,NULL,'core','RQJ2PzBflFfz7Y-E-Lh4NF-R3__leUsYxUxjrY1K_xZUKEf0aU0kMKKszRs8-EuDaJS5H6fKB0RZVSPbAChnhg','PGYlgACRPDR7Iv01tLltmg==','d9396292-50ce-60ad-c235-3a0fb10bfc75','大白','FYZY@qq.com',NULL,NULL,15949688315,NULL,NULL,0,NULL,'2023-12-24 01:52:54',NULL,'74b32e7e-4586-78ca-fd43-3a0fa9fbd640','2024-01-02 19:53:18',0,1),('7b8e5231-af13-1a1e-0a0e-3a0fae1eff4c',0,NULL,NULL,'2535688890','DyWLgZVvcW80l7HcFfRqcfIJcSjtrL7bkYLRSWnGaXvel1vSQKhvPZh5TzTyVYY7x__O7B_6bVz3aFO9P1K9rw','tphTuu9KehkKH5O6DSZYYA==',NULL,'高级CV工程师','2535688890@qq.com',NULL,NULL,17181572279,NULL,NULL,2,NULL,'2023-12-24 21:09:47',NULL,'7b8e5231-af13-1a1e-0a0e-3a0fae1eff4c','2023-12-24 21:11:16',0,1),('806b5e47-a685-2f16-8481-3a0fdfeb44e2',0,NULL,NULL,'shanye','i9Gi12g4HkOHL9eDCexr8VOO2kbAhdLQ_L0tAzmhnpBCnA2foTlKTMEWJNVpMs2n1_dZifFG1xkvnGuXDanFoQ','zjULcYvB6qezJ3VNvihfXw==',NULL,'萌新',NULL,NULL,NULL,15954648030,NULL,NULL,2,NULL,'2024-01-03 13:14:18',NULL,NULL,NULL,0,1),('81213b20-f29f-1646-58de-3a0fb63a89aa',0,NULL,NULL,'刘本法','4-Sx1jVuuJxOVwzBibnd_R_43fmEBA3bpSgrNKx96JJ1Cdw7icKc0vmEdRwJhk3t7dxblwPHo_E-iSgI2LnHrA','KOKVtZUvASI1JjSOPS6RIA==',NULL,'刘本发','13164607128@163.com',NULL,NULL,18207190600,NULL,NULL,0,NULL,'2023-12-26 10:56:50',NULL,'81213b20-f29f-1646-58de-3a0fb63a89aa','2024-01-11 13:43:45',0,1),('84f17d54-d35b-5581-e5d3-3a0fdabcaeae',0,NULL,NULL,'第九天','Uo1DehSThI1C174iEDPNTcW_WYvg-qktHHjwc4PoNjghA01BrZ54LIdPDJqScn1d_Rcp9jov32vXtC9s0FdLOw','kZnAt/dZf7Ks8umAc8cq5g==',NULL,'萌新',NULL,NULL,NULL,18943124588,NULL,NULL,2,NULL,'2024-01-02 13:05:19',NULL,NULL,NULL,0,1),('85c976e4-8b08-01c9-7c1a-3a0fb097f78e',0,NULL,NULL,'ygq1343261694','Brg5-A4qWJt1L7ARzzwMa6PYUpihsv34bwFYT4jv9vxRbFguD-1XRk6rAvo1bdcikiUTkleO19bx8QAuMTViHQ','5ZpGlpPlR3Fr9qna3RIZdg==',NULL,'云海观澜','ygq1343261694@gmail.com',NULL,NULL,18702549536,NULL,NULL,0,NULL,'2023-12-25 08:41:10',NULL,'85c976e4-8b08-01c9-7c1a-3a0fb097f78e','2023-12-25 08:42:12',0,1),('8823e06f-8f1e-0235-8ef8-3a0fae4796ca',0,NULL,NULL,'youngcao9188','122KQKntYa_1VXXgV9ZAyXHAuqCqaxEiQpJb5CVMgOKIlXP9mDyYLlORN2tO5px7lCV3LTzpTuhbeKtbE81NVQ','AmYPPslYlfT+9PLCbwN8Tw==','042d8937-ac5e-062d-e9ed-3a0fe4c12d11','Young','269955494@qq.com',NULL,NULL,17621066618,NULL,NULL,0,NULL,'2023-12-24 21:54:08',NULL,'8823e06f-8f1e-0235-8ef8-3a0fae4796ca','2024-01-04 11:46:46',0,1),('897c7f89-eceb-831c-b0f9-3a0fe161ff1f',0,NULL,NULL,'zbnzbn','5CltYF7DHRx5GfUIgT4TsY7-aCHqa0N_N9ew6_BfFDOEmgU_XIt-HPJxI894Xixy-18lkLO68NUDS5eFbXAPLg','KXW2ibwZbIoQCkhtwfd7jw==','ae44ba9b-e5e8-097d-e5eb-3a0fe1645bde','饕餮','bing.zhu@toplens.com.cn',NULL,NULL,18605119671,NULL,NULL,0,NULL,'2024-01-03 20:03:36',NULL,'897c7f89-eceb-831c-b0f9-3a0fe161ff1f','2024-01-03 20:06:13',0,1),('899ea329-a63f-bba9-0f68-3a0fea8fd365',0,NULL,NULL,'420979501','5U5BiiomwWvg6hwrr2qjsAQhxZ5ae4_o8tl0x4UAvLmk5UMeP0ec4tTNOJUAmsCD_YGby3dK8yqUqaqDtvA1Ug','AALyKnw14sLRuC7D9jHIvg==',NULL,'萌新',NULL,NULL,NULL,18512139978,NULL,NULL,2,NULL,'2024-01-05 14:50:15',NULL,NULL,NULL,0,1),('8b12cc70-9c9b-c1a7-1f0f-3a0fdaedfe6d',0,NULL,NULL,'Alan','MgzAMaWlNnjb7_Kl7z2TDylzebMv_qQkYInQFQ1Cm18NbXiGXq-Lu8fUOJFBKcXrBQe0t6mFC4WSx_6lJK9bJQ','OX3BT/lmV9F0LK0K0qrhpA==',NULL,'萌新','619915854@qq.com',NULL,NULL,13535466843,NULL,NULL,0,NULL,'2024-01-02 13:59:11',NULL,'8b12cc70-9c9b-c1a7-1f0f-3a0fdaedfe6d','2024-01-02 13:59:57',0,1),('989124e5-3324-0d4c-6a62-3a0fdfdb82e1',0,NULL,NULL,'XINGKONG','r4tS8rWcr3B9T5yGMpJSyim2zwmEae9XwgRviF2aHiqCVnewosl_wcrp-219bYhTiRNDhXBM1RW7ywEjhtwthQ','ntBbeajM882oOKP8cnA37g==',NULL,'萌新',NULL,NULL,NULL,18131712763,NULL,NULL,2,NULL,'2024-01-03 12:57:05',NULL,NULL,NULL,0,1),('98d7ce6a-37e1-a5b8-a877-3a0fdba5612e',0,NULL,NULL,'从小就不会','W4M85T8Gvq0NPhcEow5OC5T4WBTClwFswTKtxIxv7dghhC1V0Pba5mp7h0_1AHdxNMiOmxtFgSNenG0HdVKfVQ','z+VqkX/1baGUJ9k0r+cahg==','351509f8-d3b0-796d-4d50-3a0fdf39c983','萌新',NULL,NULL,NULL,13384007721,NULL,NULL,2,NULL,'2024-01-02 17:19:29',NULL,'98d7ce6a-37e1-a5b8-a877-3a0fdba5612e','2024-01-03 10:00:27',0,1),('99b5b971-d68d-c827-6041-3a0fc6a85099',0,NULL,NULL,'iknow','Q_3C0HhjF9wXHTGY24Hu-tQHioH0C4TVZwTCYMb9ht0hXmxNZip5FXAsfZJQZ_YNZrLQfHaZGdDGbYOHDtBVqg','aS3DAdOJzpaMCSQBs9AfWg==',NULL,'天师寄凡','493986228@qq.com',NULL,NULL,15272096365,NULL,NULL,0,NULL,'2023-12-29 15:30:40',NULL,'99b5b971-d68d-c827-6041-3a0fc6a85099','2023-12-29 15:32:26',0,1),('9ce9ce71-c3ef-0bd0-1e1a-3a0fead09645',0,NULL,NULL,'chenrong','vYjcajAYSbGT_N6oYH5MRiSCwUxC0sn3uJZwXBZvkXOM6fwLh0I3ApM9xw41ZATMM6mMn1-GiFgGMGgfjHdmQA','vYzt0t0yruyUnodN8GYMvA==',NULL,'萌新',NULL,NULL,NULL,15019147398,NULL,NULL,2,NULL,'2024-01-05 16:00:59',NULL,NULL,NULL,0,1),('9d5c2790-8bdf-6c73-474c-3a0fea5501e7',0,NULL,NULL,'yitianlige','tA20c0PLOMnbYMd5pLFS1iuucfYzEndaGHuY3sSUR7Lx2-NepE6ek3_pVG7iA6FEsENn9r_RpDF-gilRK3mIkg','kTBE6Kx7Tn1Om/SNfiE3PQ==',NULL,'萌新','yitianlige@126.com',NULL,NULL,18908237343,NULL,NULL,2,NULL,'2024-01-05 13:46:00',NULL,'9d5c2790-8bdf-6c73-474c-3a0fea5501e7','2024-01-05 13:46:36',0,1),('9e64fc6f-3e2a-4005-18f6-3a0f836cc547',0,'游客',18,'guest','C9k4omWwewejioiEJsiKQdrFebrL6chswiDcE1WCbOf3cYXMtDo1uH4MlVeDOWnNsLEXF0k2dEJcCJ7n4AF7ug','e7WxTtTuR2yeKG6/2zgYAw==',NULL,'测试','454313500@qq.com',NULL,'深圳',15900000000,'临时游客','懒得创账号',1,NULL,'2023-12-16 14:11:04',NULL,NULL,NULL,1,1),('9eb608cf-4790-a6e7-e6a9-3a0fb5c65943',0,NULL,NULL,'Jax','PDfwNWGWXGOdFLl6w7Dsk9zrDmKELQB-uJb8D7cdgQ5yZjfJTDn9jEwOvrx-MzF7T4ztVWvedQV8uDAyVfuSQQ','2FRE7VqF7vBdJvTzokdmZA==',NULL,'萌新',NULL,NULL,NULL,13210144918,NULL,NULL,2,NULL,'2023-12-26 08:49:56',NULL,NULL,NULL,0,1),('a1929e2a-23ca-457b-9b6b-3a0fdf84ac23',0,NULL,NULL,'xiaonibaba','VVWDR_mWCWtHEZK3QvK2JWB1hqV-rIXbGVc7PEZCPiEo_fnOc-c-NJeP2VBCcbI_NqutqTYX4uvEgyuTDwpF_A','pgbya620aKLkj9lOUnpWeQ==',NULL,'萌新',NULL,NULL,NULL,18817389588,NULL,NULL,2,NULL,'2024-01-03 11:22:14',NULL,NULL,NULL,0,1),('a46718ba-f869-6473-142b-3a0facd47b09',0,NULL,NULL,'xwen','6X_RwgPm-NckZRnO-IxTpvOKDadGRLNDN98T21PMWiUA1NFWS6tuWAlGr_meTAxjexoYGMJMVXfUoDwl0_Gayg','7dq8LU/lUycfTXT6DILtsw==','b3425a7c-9ac3-32fa-8b6f-3a0fae36bd65','Xwen','929716663@qq.com',NULL,NULL,17875960565,NULL,NULL,0,NULL,'2023-12-24 15:08:47',NULL,'a46718ba-f869-6473-142b-3a0facd47b09','2023-12-24 21:35:44',0,1),('aa5752b2-0894-a13c-ff50-3a0fdb9a0073',0,NULL,NULL,'tyjctl','KjtAAiS_vCdE8d7wiGKiAbquQDA4kmgT34L_bXQi1nwv95Dqu4WhvOjgFczlq8YqErtwIRtRfcamrSrMSs14bA','DBkQpfDG+w2919T62WySpg==',NULL,'萌新',NULL,NULL,NULL,18235141055,NULL,NULL,2,NULL,'2024-01-02 17:07:03',NULL,NULL,NULL,0,1),('ab7018b2-ad7d-835f-2d19-3a1003313e5a',0,NULL,NULL,'CxToost','48fgQ6BGkxfGJ3KPgJAi3GQUfWrglXelntJo8fMzvZ6nm6n6X37obv7Asr_USAZLEZ3dmrGy0gyUpCHM4ZARow','QIkqAEELbQWlkpa5w5Cd0w==','fffa507c-dcc7-296b-d096-3a100333d908','阿巴阿巴阿巴','123@456.com',NULL,NULL,17568930535,NULL,NULL,0,NULL,'2024-01-10 09:37:27',NULL,'ab7018b2-ad7d-835f-2d19-3a1003313e5a','2024-01-10 09:41:03',0,1),('ae04a0b3-3e0a-99bf-bcb0-3a0ff4bbeee4',0,NULL,NULL,'xyf','7xdzEaahHCRdFjDmbVLKWsu6TwTLlWo-K0vbO-BK6WaA0dVNeaWJKSAD75iL6QgeHvXdMsGJ_regyj1wLQxBHQ','5WLhSkyEMYFnKnQwPB+UVQ==',NULL,'萌新',NULL,NULL,NULL,13606144685,NULL,NULL,2,NULL,'2024-01-07 14:14:38',NULL,NULL,NULL,0,1),('af508a24-3e0f-2514-bb8a-3a100fe213e9',0,NULL,NULL,'tczy183','rh6rA0Qq5idiHdoUSZiLmE8PurSixOZgD_szFzjuJ8gmg0yO3Lys0kAVZAnsk-kBG69Wjt9qQJW7e8X6zD3AUg','el/4i/MShpAfCGK8nFffmQ==',NULL,'萌新',NULL,NULL,NULL,18305562879,NULL,NULL,2,NULL,'2024-01-12 20:46:02',NULL,NULL,NULL,0,1),('b0ff5cc0-a580-26a3-42db-3a0fe440aab2',0,NULL,NULL,'wangw123456','NXnue0-QeFRl8lR87pNLTVYFN6dBuFwuejy8FzUhkVQUoC5FmAiuXYYyn0JI03GCh4nw9YExMhV8ecdFBE6d9w','6o8hbqG2C4gBdOpsvJd8yQ==',NULL,'萌新',NULL,NULL,NULL,13550383891,NULL,NULL,2,NULL,'2024-01-04 09:26:04',NULL,NULL,NULL,0,1),('b51f1a30-5702-c900-4356-3a100e5c9f6d',0,NULL,NULL,'zhaodc','-zO3TxbsHE50uEJ2XdKXEvlXw_SweCSuLnSbUQUJADRXBOFAG0EC8lNxW0zuM47MFEEX65M3632s-x5Zcnwz2w','2NAte0QSqBrEKZsb/roSUw==',NULL,'萌新',NULL,NULL,NULL,18641346010,NULL,NULL,2,NULL,'2024-01-12 13:40:39',NULL,NULL,NULL,0,1),('ba759caa-709e-741d-7c93-3a0ffa77dcc9',0,NULL,NULL,'admin','AQ0KXbEyuBkvSLMJO9jYUy5uVUKJbtZ8GglZpBK4NibEYPvH4fayprqXOOVaFt_1rGb55Z5IzpPMHSlGHjojLg','dO4ElDvj54IVHgeIw1dFNQ==',NULL,'admin','786744873@qq.com',NULL,NULL,13057686866,NULL,NULL,2,NULL,'2024-01-08 16:58:00',NULL,'ba759caa-709e-741d-7c93-3a0ffa77dcc9','2024-01-08 16:58:32',0,1),('bac9bbf1-5119-3469-88d5-3a0ffb3129f2',0,NULL,NULL,'lauralxj','u_vNgKit8mXgzkznkYtDPn68rYG5DbroTc7u55jlSzXsQlRoTUYWDnBdKFYUonAKZpUE3YB8SCQptZz8liTyWQ','uQt5X/JN/D6KZ+CijeTINg==',NULL,'萌新',NULL,NULL,NULL,18736058629,NULL,NULL,2,NULL,'2024-01-08 20:20:24',NULL,NULL,NULL,0,1),('be3f42e6-e6ae-25ab-7973-3a0ffe0c6503',0,NULL,NULL,'weixiao','RAofOCvf7dKwkWbQuerl3n4-xHdfiw4w5qSpO9t-OSedJ3A_1gFxZKU2iap8usA2f9cDQAFNAUkhhbO_HEl3KA','KZjUrI8cO5yqvleTFbxqjA==',NULL,'萌新',NULL,NULL,NULL,17673501863,NULL,NULL,2,NULL,'2024-01-09 09:39:06',NULL,NULL,NULL,0,1),('bfe59787-f6eb-cd49-0212-3a0fbff305b7',0,NULL,NULL,'lightnehum','w4zSB8MLYGbMDPLYS0gWLE8Qv7J0wWLEGVYR6JFNEyAOqWvWvMPbjbQlEbX23NFI1dsszWmKTVTK9Y7EemzQGQ','gcuslh+L7AJSizlMcvn2lw==',NULL,'车神NE','707300278@qq.com',NULL,NULL,18500102662,NULL,NULL,0,NULL,'2023-12-28 08:14:55',NULL,'bfe59787-f6eb-cd49-0212-3a0fbff305b7','2023-12-28 08:15:58',0,1),('c0d80a61-f2d6-e13e-f7a8-3a0fb5ffafa3',0,NULL,NULL,'myz','j2VOSAKUO1yy9NVCn5lxsQbKwgu-6DFtXKAqjEVpVU31NnUQhirNwYTnFLRRyROug2dXzwpRHPT9m7XVaLcOag','H3W4UCImhRPkoGW8m073dQ==',NULL,'萌新',NULL,NULL,NULL,18677246839,NULL,NULL,2,NULL,'2023-12-26 09:52:33',NULL,NULL,NULL,0,1),('c64cf308-4060-e211-5068-3a0fdb103eaf',0,NULL,NULL,'chailinhu','8AkhLrlwJpWnQmdyrdkssqNhTS3_KzCL7Vt5rFgwiOQJbN2bWqVby4N_lywM3X-skhyOqx9Q6RwmLEq5Xpol3A','MZ1InPUEMcAa7tc2olNDLg==',NULL,'萌新',NULL,NULL,NULL,18701297186,NULL,NULL,2,NULL,'2024-01-02 14:36:35',NULL,NULL,NULL,0,1),('c6b88149-3867-37f6-fa78-3a0fb31b63ba',0,NULL,NULL,'liuyz','1kYpQ7PEE7gllghJctlmYCBlBS5iuAPagk9ewOUsO11-vk6cbBnu9U8JvFoBxHqvBFtuiezgB3-3QC3WsV31Vw','n0YhFU3WXD0jMS4WPQc+DQ==',NULL,'萌新',NULL,NULL,NULL,15982126252,NULL,NULL,2,NULL,'2023-12-25 20:23:57',NULL,NULL,NULL,0,1),('c7464266-f42a-9f0d-4985-3a0fb12ff0d6',0,NULL,NULL,'wwl','suXTXsnz3hMFDMnyRsZM3BF_wVNaNhjzaBRpHkFdU_0qrNMGEpX5jlIYWirmjRDFxiaTQ7k7gtm4Koj6nm6x2Q','b0zndOncWNRIwJqEqzGjRA==',NULL,'萌新',NULL,NULL,NULL,18475548787,NULL,NULL,2,NULL,'2023-12-25 11:27:10',NULL,NULL,NULL,0,1),('cecb339a-1806-bbd7-6770-3a101d1d28d0',0,NULL,NULL,'ansen','vqfWwq8sDo_h4tRscFtFlzB4UAx4hliWeNqboiE81J7aYTqwd_2vSu3G0sMmMqFeqsPP7zKL6HA-cm2bbi7f-g','3a0QTacg9P96lM15QBFt1Q==',NULL,'萌新',NULL,NULL,NULL,18521095290,NULL,NULL,2,NULL,'2024-01-15 10:25:38',NULL,NULL,NULL,0,1),('cfa14797-eb98-cbdf-f4de-3a1009a1c9af',0,NULL,NULL,'hyFly','DlomxhB2k6_MaKYQfCTZIy6QasR6XrSeCIc0C7BnCWrUix8oIV2VZDe27bV_P8EEUxbfyXJoCH48mm0fJDXZqA','rc74yWQZiTmaB5QEDzqHyw==',NULL,'萌新',NULL,NULL,NULL,18210033759,NULL,NULL,2,NULL,'2024-01-11 15:38:06',NULL,NULL,NULL,0,1),('d7315ea7-0a69-d5bf-f843-3a0fc05768b7',0,NULL,NULL,'ming','92gfdzlkIYXcJEuVrg9OK-kndv7NAhmlIIX5mBsNHWDCdHJA0GmNXS6dX3WEjORo_4XGIX5q44GgGR-xAlEbtg','Mdg3TogOYrD47CTTtlfwgA==',NULL,'萌新',NULL,NULL,NULL,15019906366,NULL,NULL,2,NULL,'2023-12-28 10:04:34',NULL,NULL,NULL,0,1),('e1926b51-a0fc-7d2e-9cb9-3a0fda78cccc',0,NULL,NULL,'江城恋','m6NGI5l3YHJ-_T5q2cECbu98NiL_LtrKI0q-J5ocIGt8UAFgiv9jrHoNoXe_rNtjhbabwwMb_rDUjPOa6zT_Lg','PbbG14I2fwxerDPxsHtaAg==',NULL,'萌新',NULL,NULL,NULL,15927535583,NULL,NULL,2,NULL,'2024-01-02 11:51:10',NULL,NULL,NULL,0,1),('e6ac2c57-7536-5d83-b7fd-3a1010622015',0,NULL,NULL,'logans','e4Tb9NrP9I2X-dDjv4ARuHGlzGkSLqoVUuegpb71D3ppuEMzVwZSrqY6e-qP5M07PNOQJTtKoihcv2_0tiKTBA','BSsLmr/DQKbGxvChpx5XIw==',NULL,'萌新',NULL,NULL,NULL,18169983380,NULL,NULL,2,NULL,'2024-01-12 23:05:54',NULL,NULL,NULL,0,1),('e8426f52-6ed0-e15b-e8b5-3a1008861941',0,NULL,NULL,'liu','nR53JIsCVwZJL7fpCLcHHZju1AwjN5sNmNu7levS-qcVtW01KdSGZTZSiBmiEfuYTVwWI72aGBfd7uKRpyQsvQ','M2K6PpxyDIPzNJaQ7pIyLA==',NULL,'liu',NULL,NULL,NULL,19968185191,NULL,NULL,0,NULL,'2024-01-11 10:28:14','59cf7e31-e3e4-544e-1038-3a0f836cc538',NULL,NULL,0,1),('eeb2b210-3f18-e3a6-fd89-3a100b40bc07',0,NULL,NULL,'slowye','V7WeXqo2c1wMlZ9cuqFvRdp-zWzRh4tLG17UWUI3rplTMYGbGsc1EW3pA8P5r33z2hfU3zex68uGZyjeCrd9vg','q5gHby5QhyYqDAQSuY9bbg==',NULL,'萌新',NULL,NULL,NULL,18933540061,NULL,NULL,2,NULL,'2024-01-11 23:11:20',NULL,NULL,NULL,0,1),('f19ef1b0-5141-17ee-910a-3a0fb16fd942',0,NULL,NULL,'acechengui','3r8YGro2x3vcY54Tvc8ImkRxIAZIyFpmv45icJ-QtcepfsDStycuo9k2icRRxUL2BwmFaeMqj18D1DJzMQT9zQ','Z6mRYLKzcJ+erazD8pQ5WQ==','6656b179-78d8-8b6c-6506-3a0fb1734298','辰鬼','623169670@qq.com',NULL,NULL,17375590410,NULL,NULL,0,NULL,'2023-12-25 12:36:58',NULL,'f19ef1b0-5141-17ee-910a-3a0fb16fd942','2023-12-25 12:40:41',0,1),('f327906e-63f3-bb57-6dd6-3a0fe0096c16',0,NULL,NULL,'xgluxv','p8sPB3By0JtIdn4z6lcn3pDqrguqKVyXOYzSB7AplCUI-caVedAA0dsFTp0f4sFl01efib-2Gy7k-7eOXh7Wxw','lArD4pKe6aThQZgXLjLvLw==',NULL,'萌新',NULL,NULL,NULL,18858306457,NULL,NULL,2,NULL,'2024-01-03 13:47:14',NULL,NULL,NULL,0,1),('f6fa2606-356f-7314-c874-3a0fb122cf43',0,NULL,NULL,'老暮','4BVImKFu1K1NqZpdIQw8ZGGAEesUYqvwhikOW00KPtrQTGBTNceiAVangCZR0gJxFlN02pZGm7O-Q7Fyiw9svQ','aWyNIgsbaLWplNb+IYyt6w==',NULL,'萌新',NULL,NULL,NULL,13612863290,NULL,NULL,2,NULL,'2023-12-25 11:12:49',NULL,NULL,NULL,0,1),('f863333c-1d79-0ca7-8b7d-3a0ffe9d4894',0,NULL,NULL,'jimsonxjm','sUgGvBtbxDjMiqzs0OliXoATBdYQZyql5cBuxlsyFM9V3Cuwq-4FDPTozc4BqHnM2zgmZaXihEUPe5Kg5swX9Q','Yh0CHfTXhzjRBtGlSLkGKw==',NULL,'萌新',NULL,NULL,NULL,13922749637,NULL,NULL,2,NULL,'2024-01-09 12:17:21',NULL,NULL,NULL,0,1),('fc162ae6-d3aa-b039-ed4d-3a0fdba2a372',0,NULL,NULL,'mosto','yz0OUqmH-pEc-AeWHHV7UaNg3zqoME6ghBUR1fem1sQLKLd_1Zr1jjHndLnlsZ9_AroHLQy9JQUAOwJr_05pPQ','87qY2j5X+nM21WKpyjDp8A==',NULL,'萌新',NULL,NULL,NULL,15622253771,NULL,NULL,2,NULL,'2024-01-02 17:16:29',NULL,NULL,NULL,0,1),('fc6f7549-d86d-5a04-c8e8-3a0fbc5746e2',0,NULL,NULL,'hatsuko','9trpRjaFrbY-UfFPOy58Y2MFtAo9sODQzYtRu7rhsM_FX9g5HbW4YO1px747OU_PSb8UilLUeez4IgC6QNR6SA','TFKWBslxkXEsqeH50HQaag==',NULL,'萌新',NULL,NULL,NULL,13761617302,NULL,NULL,2,NULL,'2023-12-27 15:25:57',NULL,NULL,NULL,0,1),('feaafa96-e35a-fe25-6810-3a0ff6291623',0,NULL,NULL,'zhangdaozi','x22mHeu7dnuzJ4BhUHmMb56UGvPbjyfektTUzcSM1d-wL4yNieAqPvL-3_KiZYjlLc6dRcfroCGtWFqF6vRqbg','QEUo4cn7ead1MqdZFZu/vA==',NULL,'萌新',NULL,NULL,NULL,18978368466,NULL,NULL,2,NULL,'2024-01-07 20:53:28',NULL,NULL,NULL,0,1),('ffe4c769-eb3a-e834-4574-3a100b5f6921',0,NULL,NULL,'jianweie','lhKw8hRFk8fB9tqZUDpoWmbtFJIapC-lHkxcW7LQ6TnMLcraBh5DKcdcJ3e1KcjjmNDqr7SHOckQ1nxOIPaXUw','BJ3yf+VsoLXbsRihcn4+wA==',NULL,'萌新',NULL,NULL,NULL,19145919666,NULL,NULL,2,NULL,'2024-01-11 23:44:50',NULL,NULL,NULL,0,1);
/*!40000 ALTER TABLE `User` ENABLE KEYS */;

-- 
-- Definition of UserPost
-- 

DROP TABLE IF EXISTS `UserPost`;
CREATE TABLE IF NOT EXISTS `UserPost` (
  `Id` varchar(36) NOT NULL COMMENT '主键',
  `UserId` varchar(36) NOT NULL COMMENT '用户id',
  `PostId` varchar(36) NOT NULL COMMENT '岗位id',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='用户岗位表';

-- 
-- Dumping data for table UserPost
-- 

/*!40000 ALTER TABLE `UserPost` DISABLE KEYS */;
INSERT INTO `UserPost`(`Id`,`UserId`,`PostId`) VALUES('21bec8d6-eaee-be8e-60d3-3a0f9db6d502','f2158428-4ebb-26f1-61a4-3a0f9db6d4ca','1e0e4458-90b2-908f-603b-3a0f7ac8e853'),('4c3bd07f-07ba-8d3c-e304-3a0f9c8031fc','f259c47b-2112-99ea-69e9-3a0f9c8031a4','2e6e14c8-22d9-f331-3434-3a0f7ac8e855'),('580b92d9-6eab-5757-28d6-3a0f99988dfa','4aab0630-774e-a78e-b80c-3a0f99988da5','1e0e4458-90b2-908f-603b-3a0f7ac8e853'),('7ae7a42f-4f81-3cd9-c1a8-3a0f9c8031fc','f259c47b-2112-99ea-69e9-3a0f9c8031a4','1e0e4458-90b2-908f-603b-3a0f7ac8e853'),('99a63fe6-2174-42dd-ac5e-3a0f9c71e3de','40db7c6e-2859-8290-70eb-3a0f9c71e398','2e6e14c8-22d9-f331-3434-3a0f7ac8e855'),('e9b32882-8f30-3786-ecf1-3a0f9c9c2591','9c8da103-ab47-7d0a-8ec2-3a0f9c9c0620','1e0e4458-90b2-908f-603b-3a0f7ac8e853');
/*!40000 ALTER TABLE `UserPost` ENABLE KEYS */;

-- 
-- Definition of UserRole
-- 

DROP TABLE IF EXISTS `UserRole`;
CREATE TABLE IF NOT EXISTS `UserRole` (
  `Id` varchar(36) NOT NULL COMMENT '主键',
  `RoleId` varchar(36) NOT NULL COMMENT '角色id',
  `UserId` varchar(36) NOT NULL COMMENT '用户id',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='用户角色关系表';

-- 
-- Dumping data for table UserRole
-- 

/*!40000 ALTER TABLE `UserRole` DISABLE KEYS */;
INSERT INTO `UserRole`(`Id`,`RoleId`,`UserId`) VALUES('032dcddc-408a-e596-bdf6-3a0fdaedfe72','aad458e5-112c-4054-5841-3a0f7ac8e879','8b12cc70-9c9b-c1a7-1f0f-3a0fdaedfe6d'),('09488a72-ee0f-4ca6-07d2-3a0fdba56132','aad458e5-112c-4054-5841-3a0f7ac8e879','98d7ce6a-37e1-a5b8-a877-3a0fdba5612e'),('0a13bc10-7b6f-2040-cef5-3a0fea8fd374','aad458e5-112c-4054-5841-3a0f7ac8e879','899ea329-a63f-bba9-0f68-3a0fea8fd365'),('0ac98fb0-f640-8aba-093d-3a0fb63a89bb','aad458e5-112c-4054-5841-3a0f7ac8e879','81213b20-f29f-1646-58de-3a0fb63a89aa'),('0dff721c-cf2d-c6f1-6b76-3a0f9db795b3','09030db8-56b1-ceb7-5a14-3a0f7ac8e879','dd09faa7-cff4-0a10-2d67-3a0f9db7959e'),('0f4ae326-38cc-da81-de80-3a0fdf076f3a','aad458e5-112c-4054-5841-3a0f7ac8e879','4b58e3a5-8bff-a839-1530-3a0fdf076f1c'),('0fafdb6d-cf33-994c-7475-3a0fb0adfce2','aad458e5-112c-4054-5841-3a0f7ac8e879','69371804-7f8b-2f4d-d9b3-3a0fb0adfcde'),('0fb5f3aa-107c-300d-9418-3a1010622023','aad458e5-112c-4054-5841-3a0f7ac8e879','e6ac2c57-7536-5d83-b7fd-3a1010622015'),('1025025c-f5b5-3c2a-9b2d-3a0f9c667f58','09030db8-56b1-ceb7-5a14-3a0f7ac8e879','59c0b847-35ec-cab5-925f-3a0f9c667f29'),('138c7565-6d17-cb47-a6ee-3a0fe45b44b8','aad458e5-112c-4054-5841-3a0f7ac8e879','44a18a90-6cbe-9460-5d45-3a0fe45b44a9'),('1a8207a2-33c4-2191-1bcb-3a0fbff305bd','aad458e5-112c-4054-5841-3a0f7ac8e879','bfe59787-f6eb-cd49-0212-3a0fbff305b7'),('1d797ed0-d917-a023-414e-3a0fae174884','aad458e5-112c-4054-5841-3a0f7ac8e879','15146013-b586-30f2-f81f-3a0fae17487e'),('1e624b42-272f-b688-ad25-3a0f9c71e3c7','09030db8-56b1-ceb7-5a14-3a0f7ac8e879','40db7c6e-2859-8290-70eb-3a0f9c71e398'),('1e98a473-ab16-553c-684a-3a1003589136','aad458e5-112c-4054-5841-3a0f7ac8e879','33564c61-c9f5-b663-758a-3a1003589125'),('2216b55d-176a-ebef-f685-3a0fac30ac5f','aad458e5-112c-4054-5841-3a0f7ac8e879','cc6ad63b-07be-76af-0bb0-3a0fac30ac03'),('24511f0c-b489-b23a-b603-3a0fb89339d5','aad458e5-112c-4054-5841-3a0f7ac8e879','01d7ec4a-d7f3-54ad-cf87-3a0fb89339ce'),('29718726-569b-ac52-f280-3a0fae1148ae','aad458e5-112c-4054-5841-3a0f7ac8e879','371ed696-bb9c-66fa-4e84-3a0fae1148a9'),('29defd1a-9087-e216-cee2-3a0fbb818099','aad458e5-112c-4054-5841-3a0f7ac8e879','042c0a8e-dfc6-7bdb-3d1d-3a0fbb818095'),('2d54775e-c31c-8a9a-805d-3a0fdba2a377','aad458e5-112c-4054-5841-3a0f7ac8e879','fc162ae6-d3aa-b039-ed4d-3a0fdba2a372'),('3687e493-3342-488a-0ceb-3a0f9dc2cba4','9a565adf-1e0d-3427-cfd0-3a0f7ac8e878','07889d8b-892e-5287-6f50-3a0f9dc2cb91'),('375d8ae9-c13a-96ce-7b5b-3a100b5f6931','aad458e5-112c-4054-5841-3a0f7ac8e879','ffe4c769-eb3a-e834-4574-3a100b5f6921'),('3db8554b-48a7-442d-9157-3a0ffa60e958','aad458e5-112c-4054-5841-3a0f7ac8e879','419231a8-9bfa-ddfc-85a8-3a0ffa60e875'),('3e5be02b-f741-fa83-84d5-3a0f9c8e8169','09030db8-56b1-ceb7-5a14-3a0f7ac8e879','01d46bc4-3977-594c-2b60-3a0f9c8e8136'),('412a302c-1f4a-e39d-05d2-3a0f9db773a3','9a565adf-1e0d-3427-cfd0-3a0f7ac8e878','69a72e55-b4b7-d0fa-8d02-3a0f9db7738e'),('423fea8d-f318-e0bf-16fe-3a0f9dc27593','9a565adf-1e0d-3427-cfd0-3a0f7ac8e878','03cd54ba-836b-9778-2421-3a0f9dc27550'),('490d0af6-2614-756f-fee2-3a0fdae21f08','aad458e5-112c-4054-5841-3a0f7ac8e879','6f4f1a9c-87df-30bd-a54e-3a0fdae21e36'),('4cadda11-ae76-7fda-552e-3a0ffe0c651a','aad458e5-112c-4054-5841-3a0f7ac8e879','be3f42e6-e6ae-25ab-7973-3a0ffe0c6503'),('4ea4dda7-9222-a88c-c013-3a0f9c62f52e','09030db8-56b1-ceb7-5a14-3a0f7ac8e879','406ac118-b11a-f454-d08c-3a0f9c62f4df'),('571fbe97-0d82-2baf-692f-3a0f9dc2cba4','09030db8-56b1-ceb7-5a14-3a0f7ac8e879','07889d8b-892e-5287-6f50-3a0f9dc2cb91'),('58ec0322-b3a5-acc5-8d12-3a0fe0096c23','aad458e5-112c-4054-5841-3a0f7ac8e879','f327906e-63f3-bb57-6dd6-3a0fe0096c16'),('5d10f3ac-ff48-9344-1f36-3a0fdb9a0077','aad458e5-112c-4054-5841-3a0f7ac8e879','aa5752b2-0894-a13c-ff50-3a0fdb9a0073'),('5eddfac8-a611-a89c-21f7-3a0fead09654','aad458e5-112c-4054-5841-3a0f7ac8e879','9ce9ce71-c3ef-0bd0-1e1a-3a0fead09645'),('629d4595-c436-9dd3-d6ed-3a0fdf84ac45','aad458e5-112c-4054-5841-3a0f7ac8e879','a1929e2a-23ca-457b-9b6b-3a0fdf84ac23'),('62d90766-dde0-30f8-a57d-3a0fda7fef14','aad458e5-112c-4054-5841-3a0f7ac8e879','623fc788-7d86-8916-61d2-3a0fda7fef0f'),('63b88b3c-8591-74b0-3320-3a0fe5d9618e','aad458e5-112c-4054-5841-3a0f7ac8e879','6a4a2126-0028-248c-ab2e-3a0fe5d9617f'),('653da0a5-aac5-5d69-e1ed-3a1018e25ade','aad458e5-112c-4054-5841-3a0f7ac8e879','0014829f-bb75-369f-4047-3a1018e25aba'),('67aca052-a2f1-d50a-630d-3a101e4fe1f9','aad458e5-112c-4054-5841-3a0f7ac8e879','2c2aa2ef-006c-6c61-e7c4-3a101e4fe1d8'),('68328fdf-47ff-7fe0-c77d-3a0ff4bbef03','aad458e5-112c-4054-5841-3a0f7ac8e879','ae04a0b3-3e0a-99bf-bcb0-3a0ff4bbeee4'),('6aa8d226-188e-67a7-e819-3a1009a1c9be','aad458e5-112c-4054-5841-3a0f7ac8e879','cfa14797-eb98-cbdf-f4de-3a1009a1c9af'),('6b53ddec-ab2b-b9bc-f7e6-3a0fc6a8509e','aad458e5-112c-4054-5841-3a0f7ac8e879','99b5b971-d68d-c827-6041-3a0fc6a85099'),('6e0b3942-1f16-6575-397a-3a0fdb8c7ca3','aad458e5-112c-4054-5841-3a0f7ac8e879','60c66f70-ca1e-8d07-2ac4-3a0fdb8c7c9f'),('6f8adb8b-13c9-b4cf-e99e-3a0ffe9d48a5','aad458e5-112c-4054-5841-3a0f7ac8e879','f863333c-1d79-0ca7-8b7d-3a0ffe9d4894'),('6ff878d7-52dc-7dd2-4e97-3a0ffa90fe9c','aad458e5-112c-4054-5841-3a0f7ac8e879','32c11814-dd8f-0849-e1fd-3a0ffa90fe8e'),('70ca9501-4dbe-890a-a8bc-3a0fc5644968','aad458e5-112c-4054-5841-3a0f7ac8e879','313abacd-9a19-5dbd-d665-3a0fc564495a'),('755352b8-bc58-f112-80d8-3a0f9dc29f97','09030db8-56b1-ceb7-5a14-3a0f7ac8e879','ea80d1d9-6740-76fd-6152-3a0f9dc29f79'),('77e333c6-2e90-0a33-302f-3a0fe9e20cbd','aad458e5-112c-4054-5841-3a0f7ac8e879','20515993-7547-d171-ea80-3a0fe9e20c99'),('79ee7510-0651-2f3d-4ac5-3a0f9c9c0664','09030db8-56b1-ceb7-5a14-3a0f7ac8e879','9c8da103-ab47-7d0a-8ec2-3a0f9c9c0620'),('7e31956e-7d34-3ab3-bff3-3a0f9dc27592','09030db8-56b1-ceb7-5a14-3a0f7ac8e879','03cd54ba-836b-9778-2421-3a0f9dc27550'),('81b9c32b-ac15-0d6e-05f7-3a0fb31b63d0','aad458e5-112c-4054-5841-3a0f7ac8e879','c6b88149-3867-37f6-fa78-3a0fb31b63ba'),('85eb2e2d-7fd2-d755-da30-3a0fc5ae3c5d','aad458e5-112c-4054-5841-3a0f7ac8e879','5d8a9d7d-57ce-8077-6537-3a0fc5ae3c57'),('8890da2e-8a7e-a586-2381-3a0f9db6d4eb','09030db8-56b1-ceb7-5a14-3a0f7ac8e879','f2158428-4ebb-26f1-61a4-3a0f9db6d4ca'),('88b0d407-dfa9-6807-ac52-3a0fe440aac1','aad458e5-112c-4054-5841-3a0f7ac8e879','b0ff5cc0-a580-26a3-42db-3a0fe440aab2'),('8a9b6a6d-f352-fffc-09b8-3a0f99bffcdf','aad458e5-112c-4054-5841-3a0f7ac8e879','09e0f2a9-7d86-ff0a-786a-3a0f99b96ba6'),('8cbe5815-04e4-6273-3c72-3a100b40bc39','aad458e5-112c-4054-5841-3a0f7ac8e879','eeb2b210-3f18-e3a6-fd89-3a100b40bc07'),('8d0f865b-778d-0325-cba4-3a0f99bffce3','9a565adf-1e0d-3427-cfd0-3a0f7ac8e878','09e0f2a9-7d86-ff0a-786a-3a0f99b96ba6'),('8fa5668e-de54-cac3-5217-3a0fdfdb8313','aad458e5-112c-4054-5841-3a0f7ac8e879','989124e5-3324-0d4c-6a62-3a0fdfdb82e1'),('8fbad31b-856b-7ecf-ebfa-3a0fbc5746f8','aad458e5-112c-4054-5841-3a0f7ac8e879','fc6f7549-d86d-5a04-c8e8-3a0fbc5746e2'),('928aeafe-d04c-d094-a656-3a0fb5d30816','aad458e5-112c-4054-5841-3a0f7ac8e879','4e24c804-5b3b-2974-9efc-3a0fb5d30810'),('9403f0a7-004a-abec-394c-3a0fe048c895','aad458e5-112c-4054-5841-3a0f7ac8e879','20b15203-f437-54ff-6488-3a0fe048c887'),('98f11560-6471-0261-e104-3a0fb16fd947','aad458e5-112c-4054-5841-3a0f7ac8e879','f19ef1b0-5141-17ee-910a-3a0fb16fd942'),('9c447dfd-4ef1-1a0a-e256-3a0fc05768bc','aad458e5-112c-4054-5841-3a0f7ac8e879','d7315ea7-0a69-d5bf-f843-3a0fc05768b7'),('9d316a99-c785-fa6d-3b64-3a100e5c9f7c','aad458e5-112c-4054-5841-3a0f7ac8e879','b51f1a30-5702-c900-4356-3a100e5c9f6d'),('9e0d22c4-ba71-76f3-58ba-3a1008092e67','aad458e5-112c-4054-5841-3a0f7ac8e879','10db8047-fee0-a0d8-4938-3a1008092e3f'),('9e99963e-854c-6559-8dd8-3a100e64774a','aad458e5-112c-4054-5841-3a0f7ac8e879','0266be8b-25f2-5fb1-0217-3a100e64773c'),('a0e5fe18-95c9-3600-a3e2-3a101d3f31b9','aad458e5-112c-4054-5841-3a0f7ac8e879','1a9063ac-559c-d65a-2ce3-3a101d3f31aa'),('a676c329-227e-8500-a309-3a0fb12ff0db','aad458e5-112c-4054-5841-3a0f7ac8e879','c7464266-f42a-9f0d-4985-3a0fb12ff0d6'),('a712b5ba-80a9-33e7-1355-3a1009b255d9','aad458e5-112c-4054-5841-3a0f7ac8e879','55f49636-805f-a9f1-f276-3a1009b255c9'),('a7d61676-dbc4-8aa5-3616-3a0fb097f793','aad458e5-112c-4054-5841-3a0f7ac8e879','85c976e4-8b08-01c9-7c1a-3a0fb097f78e'),('a8099fce-c09f-ef8b-b48e-3a100fe213fa','aad458e5-112c-4054-5841-3a0f7ac8e879','af508a24-3e0f-2514-bb8a-3a100fe213e9'),('a875af63-b960-f0f3-b71d-3a0fda78ccd0','aad458e5-112c-4054-5841-3a0f7ac8e879','e1926b51-a0fc-7d2e-9cb9-3a0fda78cccc'),('a8ab0864-f9e2-5bea-dc20-3a0fdb22fe21','aad458e5-112c-4054-5841-3a0f7ac8e879','5a42983f-80a0-19ba-1a97-3a0fdb22fe1c'),('ab5b6bcd-b295-8778-7ac4-3a0fe1fed2ae','aad458e5-112c-4054-5841-3a0f7ac8e879','2d407f53-71c5-b2b6-ccdd-3a0fe1fed2a0'),('b17ca36a-a609-13cf-3fe2-3a0fac354bf9','aad458e5-112c-4054-5841-3a0f7ac8e879','86e53d3a-7819-352d-ade8-3a0fac354bdc'),('b23c6bf7-55bc-4285-5c6c-3a1008861984','aad458e5-112c-4054-5841-3a0f7ac8e879','e8426f52-6ed0-e15b-e8b5-3a1008861941'),('b318709a-8cba-6c31-5c24-3a0f9dc2cba4','aad458e5-112c-4054-5841-3a0f7ac8e879','07889d8b-892e-5287-6f50-3a0f9dc2cb91'),('b3b29e72-0cbc-8736-b51d-3a0ffb312a28','aad458e5-112c-4054-5841-3a0f7ac8e879','bac9bbf1-5119-3469-88d5-3a0ffb3129f2'),('b55ae58b-40c9-c8ca-35d6-3a0ff6291643','aad458e5-112c-4054-5841-3a0f7ac8e879','feaafa96-e35a-fe25-6810-3a0ff6291623'),('b6648704-332f-ab21-0876-3a0facd47b1f','aad458e5-112c-4054-5841-3a0f7ac8e879','a46718ba-f869-6473-142b-3a0facd47b09'),('b8727514-edd7-304f-9b72-3a0f9db795b3','9a565adf-1e0d-3427-cfd0-3a0f7ac8e878','dd09faa7-cff4-0a10-2d67-3a0f9db7959e'),('bac022f7-869f-fb14-c8fa-3a1003045d45','aad458e5-112c-4054-5841-3a0f7ac8e879','691de7d2-8514-1602-c558-3a1003045d25'),('be757c7a-7de8-d013-abaa-3a0f9c8031e5','09030db8-56b1-ceb7-5a14-3a0f7ac8e879','f259c47b-2112-99ea-69e9-3a0f9c8031a4'),('c3716205-04cf-5e33-b10d-3a0fe161ff2f','aad458e5-112c-4054-5841-3a0f7ac8e879','897c7f89-eceb-831c-b0f9-3a0fe161ff1f'),('c3f393d9-4764-7210-5768-3a0fea5501fb','aad458e5-112c-4054-5841-3a0f7ac8e879','9d5c2790-8bdf-6c73-474c-3a0fea5501e7'),('c563f650-9c13-9e57-5dda-3a0fb122cf48','aad458e5-112c-4054-5841-3a0f7ac8e879','f6fa2606-356f-7314-c874-3a0fb122cf43'),('c981cd2f-e023-8c71-b67f-3a0f99988de0','09030db8-56b1-ceb7-5a14-3a0f7ac8e879','4aab0630-774e-a78e-b80c-3a0f99988da5'),('d1a6625a-a888-c63c-490a-3a0f9dc29f97','9a565adf-1e0d-3427-cfd0-3a0f7ac8e878','ea80d1d9-6740-76fd-6152-3a0f9dc29f79'),('d200ad76-36fe-e0ce-fa2e-3a0fdabcaeb2','aad458e5-112c-4054-5841-3a0f7ac8e879','84f17d54-d35b-5581-e5d3-3a0fdabcaeae'),('d2ec3fac-e558-4e27-b5d8-3a0fae1eff51','aad458e5-112c-4054-5841-3a0f7ac8e879','7b8e5231-af13-1a1e-0a0e-3a0fae1eff4c'),('d4c4df45-b599-8ae9-fec4-3a0fc2597f29','aad458e5-112c-4054-5841-3a0f7ac8e879','11555e08-9e27-3ea6-14d3-3a0fc2597f24'),('d7a74375-1dd3-ec42-947b-3a1003313ebe','aad458e5-112c-4054-5841-3a0f7ac8e879','ab7018b2-ad7d-835f-2d19-3a1003313e5a'),('d83661f4-2be4-6acd-2296-3a0fffb281f2','aad458e5-112c-4054-5841-3a0f7ac8e879','5ab9405a-907a-71a0-ae98-3a0fffb281e3'),('d8840f17-7846-9618-f8d2-3a0fb5c6595b','aad458e5-112c-4054-5841-3a0f7ac8e879','9eb608cf-4790-a6e7-e6a9-3a0fb5c65943'),('d963d08d-e71b-2101-1f38-3a0fb8d4f741','aad458e5-112c-4054-5841-3a0f7ac8e879','0a6a0afd-6a31-4729-0c76-3a0fb8d4f73c'),('dcb184c7-cc7b-ea2d-4c0f-3a0fdb103eb4','aad458e5-112c-4054-5841-3a0f7ac8e879','c64cf308-4060-e211-5068-3a0fdb103eaf'),('de1d37a2-a73a-1d07-8f79-3a0f9f140f4c','aad458e5-112c-4054-5841-3a0f7ac8e879','627714f3-0ed1-1ec5-fdf5-3a0f9dc32509'),('df399d83-31a2-9bf3-d895-3a0ffa667e75','aad458e5-112c-4054-5841-3a0f7ac8e879','438fecf2-7c2b-665e-3cd6-3a0ffa667e62'),('e10d075e-fe75-f21c-ad2e-3a1004eed60a','aad458e5-112c-4054-5841-3a0f7ac8e879','5d59e9f6-0c2e-9755-4cd8-3a1004eed5fb'),('e54cf8c2-271f-a88e-1733-3a10086ad018','aad458e5-112c-4054-5841-3a0f7ac8e879','452be1e5-2a08-98a8-006c-3a10086ad006'),('e6426927-4bad-9852-a4eb-3a0fb09fecba','aad458e5-112c-4054-5841-3a0f7ac8e879','69b15fa0-7a66-3287-f532-3a0fb09fecb6'),('ec3fc78d-78d2-ee92-7ff2-3a0fdafe79fa','aad458e5-112c-4054-5841-3a0f7ac8e879','35bee444-e18c-8ee4-f413-3a0fdafe79f5'),('ed715e9f-89d2-342a-7c15-3a0fe4c92050','aad458e5-112c-4054-5841-3a0f7ac8e879','47ba50b4-2369-9bc8-6c93-3a0fe4c92034'),('ed82d9cc-849c-356c-e767-3a0fd9fdc0b2','aad458e5-112c-4054-5841-3a0f7ac8e879','029eb7c0-22ba-5671-b1f5-3a0fd9fdc0ad'),('ef551d9c-14ce-30d5-625a-3a0fae89aa88','aad458e5-112c-4054-5841-3a0f7ac8e879','74b32e7e-4586-78ca-fd43-3a0fa9fbd640'),('efbe6341-484c-a7a1-b224-3a0fb5ffafc9','aad458e5-112c-4054-5841-3a0f7ac8e879','c0d80a61-f2d6-e13e-f7a8-3a0fb5ffafa3'),('efc17725-baba-72e6-939e-3a0fdfeb44f2','aad458e5-112c-4054-5841-3a0f7ac8e879','806b5e47-a685-2f16-8481-3a0fdfeb44e2'),('f417cbe4-dac9-3ccd-fcae-3a0fae1099f5','aad458e5-112c-4054-5841-3a0f7ac8e879','3de3e074-8ebc-9280-0d16-3a0fae1099ef'),('f43a38ed-ae1a-7805-cdb5-3a0f9db773a3','09030db8-56b1-ceb7-5a14-3a0f7ac8e879','69a72e55-b4b7-d0fa-8d02-3a0f9db7738e'),('f5269959-0bb5-1942-e0e9-3a0ffa77dcdb','aad458e5-112c-4054-5841-3a0f7ac8e879','ba759caa-709e-741d-7c93-3a0ffa77dcc9'),('f80db493-19a7-2cf3-1d41-3a0f9c8e816a','9a565adf-1e0d-3427-cfd0-3a0f7ac8e878','01d46bc4-3977-594c-2b60-3a0f9c8e8136'),('f9014905-1cda-78b8-8c9a-3a101d1d28e1','aad458e5-112c-4054-5841-3a0f7ac8e879','cecb339a-1806-bbd7-6770-3a101d1d28d0'),('fe50e2b7-a99e-df9b-e6a0-3a0fae4796ce','aad458e5-112c-4054-5841-3a0f7ac8e879','8823e06f-8f1e-0235-8ef8-3a0fae4796ca'),('ffd3a0ab-c4f0-b6fa-5a70-3a0fb195641f','aad458e5-112c-4054-5841-3a0f7ac8e879','4685a3e5-b7a5-33b8-b67d-3a0fb195641a');
/*!40000 ALTER TABLE `UserRole` ENABLE KEYS */;


/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;


-- Dump completed on 2024-01-16 12:00:01
-- Total time: 0:0:0:1:679 (d:h:m:s:ms)
