diff --git "a/\350\256\270\345\205\260\350\216\271/0701\345\210\233\345\273\272\347\261\273\345\272\223.md" "b/\350\256\270\345\205\260\350\216\271/0701\345\210\233\345\273\272\347\261\273\345\272\223.md" index 6b13ebf517b3d2b341b6a02e8bb896a5ac0a5f58..278348adb53a0ec724b1c3e0d4b4ec1426b2be39 100644 --- "a/\350\256\270\345\205\260\350\216\271/0701\345\210\233\345\273\272\347\261\273\345\272\223.md" +++ "b/\350\256\270\345\205\260\350\216\271/0701\345\210\233\345\273\272\347\261\273\345\272\223.md" @@ -15,3 +15,15 @@ dotnet add ..\现在的库\ reference ..\要引入的库\ ``` ![alt text](<屏幕截图 2024-07-03 175522.png>) + + +## 生成迁移文件 + 1. 创建迁移文件 +```cmd + dotnet ef migrations add 迁移文件名 --project ..\项目名称.库名\ --startup-project ..\项目名称.Api\ + +``` + 2. 迁移 +```cmd + dotnet ef database update --project ..\项目名称.库名\ --startup-project ..\项目名称.Api\ +``` \ No newline at end of file diff --git "a/\350\256\270\345\205\260\350\216\271/0708Token.md" "b/\350\256\270\345\205\260\350\216\271/0708Token.md" new file mode 100644 index 0000000000000000000000000000000000000000..56852aa876ebadefb235816d283f0c4c043561fe --- /dev/null +++ "b/\350\256\270\345\205\260\350\216\271/0708Token.md" @@ -0,0 +1,56 @@ +#### 1\. 定义 + +Token 在计算机科学中通常指的是一个不可分割的、最小的数据单元。在不同的上下文中,Token 可以有不同的含义和用途。 + +#### 2\. 编程中的 Token + +在编程语言中,Token 是指源代码中的基本元素,如关键字、标识符、操作符、分隔符等。编译器或解释器在处理源代码时,首先会将代码分解成一系列的 Token。 + +**示例:** + + # 源代码 + x = 10 + 5 + + # 分解后的 Token + ['x', '=', '10', '+', '5'] + + +#### 3\. 网络安全中的 Token + +在网络安全领域,Token 通常指的是一种用于身份验证和授权的凭证。例如,Web 应用中的会话 Token 或 API 访问 Token。 + +**示例:** + +* **会话 Token**:用户登录后,服务器生成一个会话 Token,客户端保存该 Token 并在后续请求中使用,以证明身份。 +* **API Token**:用于访问 API 的凭证,通常由服务器生成并分发给客户端。 + +#### 4\. 区块链中的 Token + +在区块链技术中,Token 通常指的是一种数字资产,可以在区块链网络上进行交易和转移。Token 可以代表各种资产,如货币、股票、积分等。 + +**示例:** + +* **加密货币 Token**:如比特币 (BTC)、以太坊 (ETH) 等。 +* **代币 (Token)**:如 ERC-20 Token 在以太坊网络上发行的代币。 + +#### 5\. Token 的应用场景 + +* **身份验证**:用于验证用户身份,如 OAuth Token。 +* **授权**:用于授权用户访问特定资源,如 API Token。 +* **支付**:用于数字货币交易,如加密货币 Token。 +* **资产表示**:用于表示和转移各种资产,如区块链代币。 + +#### 6\. Token 的生成和管理 + +* **生成**:通常由服务器或区块链网络生成。 +* **管理**:需要安全存储和传输,防止泄露和滥用。 + +#### 7\. 安全性考虑 + +* **加密**:Token 应使用加密技术保护,防止被窃取。 +* **有效期**:Token 应有有效期限制,过期后需要重新生成。 +* **撤销机制**:应有机制撤销已泄露或不再需要的 Token。 + +#### 8\. 总结 + +Token 是一个广泛应用于计算机科学和网络安全领域的概念,具有多种形式和用途。了解 Token 的定义、生成、管理和安全性考虑对于开发和维护安全可靠的系统至关重要。 \ No newline at end of file diff --git "a/\350\256\270\345\205\260\350\216\271/0709\351\233\252\350\212\261\347\256\227\346\263\225.md" "b/\350\256\270\345\205\260\350\216\271/0709\351\233\252\350\212\261\347\256\227\346\263\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..42c6c33e3abeebe248d2d5e3da8e8884c48c6ef4 --- /dev/null +++ "b/\350\256\270\345\205\260\350\216\271/0709\351\233\252\350\212\261\347\256\227\346\263\225.md" @@ -0,0 +1,80 @@ +### 雪花算法 (Snowflake ID) 笔记 + +#### 1\. 定义 + +雪花算法(Snowflake ID)是由Twitter开发的一种分布式唯一ID生成算法。它生成一个64位的唯一ID,适用于分布式系统中需要生成全局唯一ID的场景。 + +#### 2\. 结构 + +雪花算法生成的ID是一个64位的整数,通常以二进制表示,结构如下: + + 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000 + + +* **1位**:符号位,固定为0,表示正数。 +* **41位**:时间戳,记录生成ID的时间,通常是相对于某个固定时间点(如系统启动时间)的毫秒数。 +* **10位**:机器ID,用于标识不同的机器或节点,可以进一步分为5位数据中心ID和5位机器ID。 +* **12位**:序列号,同一毫秒内生成的多个ID的序列号,用于区分同一毫秒内生成的不同ID。 + +#### 3\. 特点 + +* **唯一性**:由于时间戳、机器ID和序列号的组合,保证了生成的ID在全局范围内的唯一性。 +* **有序性**:生成的ID是按时间有序的,便于在数据库中进行范围查询。 +* **高性能**:生成ID的过程简单高效,适合高并发的分布式系统。 + +#### 4\. 生成过程 + +1. **获取当前时间戳**:获取当前时间相对于某个固定时间点的毫秒数。 +2. **检查时间戳**:如果当前时间戳小于上次生成ID的时间戳,说明系统时钟回拨,需要特殊处理。 +3. **生成序列号**:如果同一毫秒内生成了多个ID,序列号递增。 +4. **组合ID**:将时间戳、机器ID和序列号组合成一个64位的ID。 + +#### 5\. 代码示例 + +以下是一个简单的雪花算法实现示例(Python): +```cs + +``` + class SnowflakeID: + def __init__(self, datacenter_id, worker_id, sequence=0): + self.datacenter_id = datacenter_id + self.worker_id = worker_id + self.sequence = sequence + self.last_timestamp = -1 + + def _get_timestamp(self): + return int(time.time() * 1000) + + def _wait_next_millis(self, last_timestamp): + timestamp = self._get_timestamp() + while timestamp <= last_timestamp: + timestamp = self._get_timestamp() + return timestamp + + def next_id(self): + timestamp = self._get_timestamp() + if timestamp < self.last_timestamp: + raise Exception("Clock moved backwards. Refusing to generate id for %d milliseconds" % (self.last_timestamp - timestamp)) + if timestamp == self.last_timestamp: + self.sequence = (self.sequence + 1) & 4095 + if self.sequence == 0: + timestamp = self._wait_next_millis(self.last_timestamp) + else: + self.sequence = 0 + self.last_timestamp = timestamp + return ((timestamp - 1288834974657) << 22) | (self.datacenter_id << 17) | (self.worker_id << 12) | self.sequence + + # 使用示例 + snowflake = SnowflakeID(datacenter_id=1, worker_id=1) + print(snowflake.next_id()) + + +#### 6\. 注意事项 + +* **时钟同步**:分布式系统中各节点的时钟需要同步,避免时钟回拨导致ID重复。 +* **机器ID分配**:机器ID需要在系统中唯一分配,避免冲突。 +* **序列号溢出**:同一毫秒内生成的ID数量不能超过4096个,否则序列号会溢出。 + +#### 7\. 总结 + +雪花算法是一种高效、有序且唯一的分布式ID生成算法,适用于高并发的分布式系统。了解其结构、生成过程和注意事项对于正确使用和实现雪花算法至关重要。 \ No newline at end of file diff --git "a/\350\256\270\345\205\260\350\216\271/0710ABP.md" "b/\350\256\270\345\205\260\350\216\271/0710ABP.md" new file mode 100644 index 0000000000000000000000000000000000000000..46d7686fad60258df10f86ea88359b59ddc4ae4b --- /dev/null +++ "b/\350\256\270\345\205\260\350\216\271/0710ABP.md" @@ -0,0 +1,33 @@ +在Web API的语境中,ABP(Abp - ASP.NET Boilerplate)是一个开源的、模块化的、可扩展的、跨平台的框架,主要用于构建企业级应用程序。它基于ASP.NET Core,旨在提供一个快速开发企业级应用的基础设施。 + +以下是ABP的一些关键特点: + +### 特点 + +1. **模块化**:ABP采用模块化设计,允许开发者根据需要添加或自定义模块,从而构建灵活的应用程序。 +2. **可扩展性**:框架提供了多种扩展点,使得开发者可以根据自己的需求进行扩展。 +3. **跨平台**:ABP支持多种平台,包括ASP.NET Core、.NET Core、.NET Framework等。 +4. **企业级特性**:包括身份验证、授权、日志、缓存、多租户、工作单元等企业级特性。 +5. **多语言支持**:ABP支持多种编程语言,包括C#和VB.NET。 +6. **社区支持**:拥有一个活跃的社区,提供文档、教程和问题解答。 + +### 主要组件 + +* **身份认证与授权**:ABP提供了强大的身份认证和授权系统,支持多种身份认证方式,如OAuth2、JWT等。 +* **领域驱动设计(DDD)**:ABP支持领域驱动设计,帮助开发者构建符合业务逻辑的代码结构。 +* **数据访问**:提供ORM(对象关系映射)和数据访问层,简化数据库操作。 +* **缓存**:内置缓存支持,可以缓存数据以提高性能。 +* **多租户**:支持多租户架构,允许一个应用程序服务于多个租户。 + +### 应用场景 + +ABP适用于以下场景: + +* 企业级Web应用程序开发 +* 需要高度可扩展性和模块化的应用程序 +* 需要集成多种企业级特性的应用程序 +* 使用DDD进行应用程序开发的团队 + +### 总结 + +ABP是一个功能强大的框架,它简化了企业级应用程序的开发过程,提供了许多开箱即用的功能,同时保持了足够的灵活性和可扩展性。对于需要快速构建复杂企业级应用的团队来说,ABP是一个不错的选择。 \ No newline at end of file diff --git "a/\350\256\270\345\205\260\350\216\271/0711\346\265\213\350\257\225.md" "b/\350\256\270\345\205\260\350\216\271/0711\346\265\213\350\257\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..7c3262ade4b0c2808469af32bc64b043ce1e0cbc --- /dev/null +++ "b/\350\256\270\345\205\260\350\216\271/0711\346\265\213\350\257\225.md" @@ -0,0 +1,49 @@ +WeBAPI(Web Application Programming Interface)通常指的是通过Web技术(如HTTP)进行API调用的方式。这种API设计允许客户端(如网页应用、移动应用或服务)通过HTTP请求与服务器进行交互,从而获取和操作数据。进行WeBAPI测试时,主要关注以下几个方面: + +### 1\. **功能测试** + +* **API端点的可用性**:确保所有API端点都能正常响应HTTP请求。 +* **返回数据的正确性**:验证API返回的数据格式、内容是否符合预期。 +* **错误处理**:测试API在遇到错误情况时的响应,如404(未找到)、401(未授权)、500(内部服务器错误)等。 + +### 2\. **性能测试** + +* **响应时间**:测量API的响应时间,确保在高负载下也能保持良好的性能。 +* **并发测试**:模拟多个客户端同时请求API的情况,测试系统的并发处理能力。 + +### 3\. **安全性测试** + +* **认证和授权**:确保API请求需要有效的身份验证和授权机制。 +* **数据加密**:检查API是否对敏感数据进行加密传输。 +* **输入验证**:测试API对输入参数的验证机制,防止SQL注入、XSS攻击等。 + +### 4\. **兼容性测试** + +* **HTTP版本兼容性**:测试API在不同HTTP版本(如HTTP/1.1、HTTP/2)下的兼容性。 +* **浏览器兼容性**:确保API在各种主流浏览器(如Chrome、Firefox、Safari、Edge)中都能正常工作。 + +### 5\. **API文档测试** + +* **API文档的准确性**:确保API文档与实际API行为一致。 +* **文档的完整性**:API文档应该包含所有必要的信息,如请求方法、URL、参数、返回值等。 + +### 6\. **自动化测试** + +* **测试用例的自动化**:使用自动化测试工具(如Postman、Selenium、JMeter等)编写和执行测试用例。 +* **持续集成/持续部署(CI/CD)**:将API测试集成到CI/CD流程中,确保每次代码提交后都能自动运行测试。 + +### 7\. **监控与日志** + +* **API监控**:使用日志和监控工具(如ELK Stack、Prometheus、Grafana等)来监控API的性能和异常。 +* **错误追踪**:确保有机制可以追踪和记录API错误,便于快速定位和解决问题。 + +### 实施步骤 + +1. **设计测试计划**:明确测试目标、范围、方法和预期结果。 +2. **编写测试用例**:根据API文档和功能描述编写详细的测试用例。 +3. **执行测试**:使用自动化工具执行测试用例,记录测试结果。 +4. **分析结果**:分析测试结果,识别并修复问题。 +5. **性能优化**:根据性能测试结果进行优化,提高API响应速度和稳定性。 +6. **持续改进**:根据反馈和新需求持续更新和改进测试策略。 + +进行WeBAPI测试时,重要的是要确保API的稳定性和可靠性,同时也要考虑用户体验和安全性。通过全面的测试策略,可以确保API质量,满足用户需求。 \ No newline at end of file diff --git "a/\350\256\270\345\205\260\350\216\271/0712AntDv.md" "b/\350\256\270\345\205\260\350\216\271/0712AntDv.md" new file mode 100644 index 0000000000000000000000000000000000000000..3664c495b70d18a139744c99a36870bbe840356a --- /dev/null +++ "b/\350\256\270\345\205\260\350\216\271/0712AntDv.md" @@ -0,0 +1,65 @@ +Ant Design Vue(简称Antdv)是基于Ant Design的Vue UI组件库,它提供了一套企业级的UI设计语言和React组件库,旨在提高中后台产品的研发效率和用户体验。Antdv则是这个设计语言在Vue框架上的实现。以下是对Antdv的详细介绍: + +### 特点 + +* **一致性**:遵循Ant Design的设计语言,具有一致的设计风格和用户体验。 +* **丰富组件**:提供了一系列丰富的Vue组件,涵盖按钮、表单、表格、菜单、通知等。 +* **国际化**:支持多语言,便于开发多语言应用。 +* **可定制性**:支持主题定制,可以调整组件的样式以适应不同的设计需求。 +* **响应式设计**:组件支持响应式布局,适应不同屏幕大小和设备。 + +### 安装 + +安装Antdv通常使用npm或yarn: + + # 使用npm安装 + npm install ant-design-vue --save + + # 使用yarn安装 + yarn add ant-design-vue + + +### 使用 + +在Vue项目中使用Antdv组件,首先需要引入样式: + + import Antd from 'ant-design-vue'; + import 'ant-design-vue/dist/antd.css'; // 或者 less + + Vue.use(Antd); + + +然后就可以在组件中直接使用Antdv提供的组件了: + + + + +### 常用组件 + +以下是一些常用的Antdv组件: + +* **Button(按钮)**:基础的按钮组件。 +* **Input(输入框)**:基础的输入框组件。 +* **Form(表单)**:用于创建表单,支持数据验证。 +* **Table(表格)**:用于显示和操作数据。 +* **Menu(菜单)**:用于网站的导航。 +* **Modal(模态框)**:用于显示模态对话框。 +* **Message(消息提示)**:用于显示全局提示信息。 +* **Notification(通知)**:用于显示通知提醒。 + +### 社区和资源 + +Antdv拥有一个活跃的社区,开发者可以在以下渠道获取帮助和资源: + +* **GitHub**:Antdv的官方GitHub仓库,可以查看源代码、提交问题和PR。 +* **Ant Design Vue官网**:提供组件文档、设计资源和社区交流。 +* **社区论坛**:开发者可以在这里提问、分享经验和交流想法。 + +### 注意事项 + +* **版本兼容性**:Antdv会根据Vue的不同版本发布对应的版本,开发者在选择版本时需要注意与项目使用的Vue版本兼容。 +* **性能考虑**:在大型项目中,要关注组件的引入和使用对性能的影响,避免不必要的性能损耗。 + +Antdv作为Vue社区中流行的UI库之一,提供了强大的功能和灵活性,是中后台项目快速开发的有力工具。 \ No newline at end of file diff --git "a/\350\256\270\345\205\260\350\216\271/image-1.png" "b/\350\256\270\345\205\260\350\216\271/image-1.png" deleted file mode 100644 index fdf527437d75977c74f075e7705d2499054d99f8..0000000000000000000000000000000000000000 Binary files "a/\350\256\270\345\205\260\350\216\271/image-1.png" and /dev/null differ