diff --git "a/\344\275\231\346\242\246\345\251\267/20240708-JSON Web Token.md" "b/\344\275\231\346\242\246\345\251\267/20240708-JSON Web Token.md" new file mode 100644 index 0000000000000000000000000000000000000000..93a9c08d3865c2c5394126957d7504c3dcdb5f76 --- /dev/null +++ "b/\344\275\231\346\242\246\345\251\267/20240708-JSON Web Token.md" @@ -0,0 +1,76 @@ +## JWT概述 + +**定义:** JSON Web Token (JWT) 是一种开放的标准(RFC 7519),用于在各方之间安全地传输信息作为JSON对象。 +**安全性:** JWT信息通过数字签名进行验证,确保信息的完整性和可信度。 +**签名算法:** JWT可以使用秘密(如HMAC算法)或公钥/私钥对(如RSA或ECDSA)进行签名。 + + +## JWT的组成部分 + +**Header:** 包含令牌的类型(JWT)和使用的签名算法(如HS256或RSA)。 + +```json +{ + "alg": "HS256", + "typ": "JWT" +} +``` + +**Payload:** 包含声明(claims),关于实体的声明和附加数据,分为注册声明、公共声明和私有声明。 +- Registered claims:预定义的声明,如 iss(签发者),exp(过期时间),sub(主题),aud(受众),等。 +- Public claims:可以自由定义的声明,但为了避免冲突,应该使用 URI 作为名称空间。 +- Private claims:自定义声明,用于在同意使用它们的各方之间交换信息。 + +```json +{ + "sub": "1234567890", + "name": "John Doe", + "admin": true +} +``` + +**Signature:** 通过对编码后的Header和Payload进行签名,确保 JWT 没有被篡改。要创建签名,你需要有编码的头部、编码的负载、一个密钥、以及指定的算法。签名的创建过程如下: + +```scss +HMACSHA256( + base64UrlEncode(header) + "." + + base64UrlEncode(payload), + secret) +``` + +## JWT的使用场景 + +**授权:** JWT最常见的使用场景,用户登录后,每个后续请求都包含JWT,以访问允许的资源。 +**信息交换:** JWT是安全传输信息的好方法,可以验证发送者的身份和内容未被篡改。 + + +## JWT的优势 + +**紧凑性:** JWT比基于XML的标准(如SAML)更紧凑,更适合在HTML和HTTP环境中传递。 +**安全性:** JWT支持使用公钥/私钥对进行签名,提供更高的安全性。 +**跨平台:** JWT易于在多个平台上处理,特别是在移动端。 + + +## JWT与其他标准的比较 + +1. **与SWT(简单Web令牌)比较:** JWT支持使用公钥/私钥对签名,而SWT仅支持HMAC算法。 +2. **与SAML(安全断言标记语言令牌)比较:** JWT在大小和易用性上优于SAML,尤其是在JSON解析器普遍存在的现代编程语言中。 + + +## JWT的实践 + +**生成JWT:** 可以使用jwt.io Debugger来解码、验证和生成JWT。 +**安全性建议:** 不应将JWT存储在浏览器存储中,因为它们可能不安全;应避免在HTTP头中嵌入过多信息以防超出大小限制。 + + +## JWT的授权流程 + +客户端向授权服务器请求授权。 +授权服务器返回访问令牌(JWT)给客户端。 +客户端使用JWT访问受保护的资源。 + + +## JWT的使用建议 + +不要在JWT中存放敏感信息,因为它们虽然不能被篡改,但可以被任何人读取。 +注意JWT的大小限制,避免在HTTP头中发送过大的JWT。 \ No newline at end of file diff --git "a/\344\275\231\346\242\246\345\251\267/20240709-ASP.NET Core\347\232\204\344\274\230\347\202\271.md" "b/\344\275\231\346\242\246\345\251\267/20240709-ASP.NET Core\347\232\204\344\274\230\347\202\271.md" new file mode 100644 index 0000000000000000000000000000000000000000..473e06c2e1c38c28bede44f7e6a63d268d7df849 --- /dev/null +++ "b/\344\275\231\346\242\246\345\251\267/20240709-ASP.NET Core\347\232\204\344\274\230\347\202\271.md" @@ -0,0 +1,19 @@ +1. **跨平台性**:ASP.NET Core 可以在 Windows、macOS 和 Linux 上运行,这使得开发者能够在不同的操作系统上开发和部署应用程序。 + +2. **高性能**:ASP.NET Core 具有出色的性能优化能力,能够处理大量并发请求。它的性能在多次基准测试中表现优异。 + +3. **模块化和灵活性**:ASP.NET Core 的设计是模块化的,允许开发者根据需要选择和配置需要的功能模块。这种灵活性使得应用程序可以更高效地运行,并且更容易维护。 + +4. **依赖注入**:ASP.NET Core 内置了依赖注入支持,这使得应用程序的测试性和可维护性得到了极大提升。依赖注入帮助开发者以松耦合的方式管理对象依赖。 + +5. **统一的编程模型**:ASP.NET Core 提供了一个统一的编程模型来处理Web请求和响应,无论是MVC(Model-View-Controller)模式,还是Web API,都可以使用相同的编程模型和框架。 + +6. **丰富的开发工具**:ASP.NET Core 与Visual Studio、Visual Studio Code 和 JetBrains Rider 等开发工具有良好的集成,提供了强大的调试、代码分析和自动化工具,提升了开发效率。 + +7. **开源和社区支持**:ASP.NET Core 是一个开源项目,有一个活跃的开发者社区。开发者可以访问源代码,报告问题,贡献代码,并从社区中获得支持和帮助。 + +8. **现代化技术栈**:ASP.NET Core 支持最新的Web标准和技术,如Razor Pages、Blazor、SignalR等,帮助开发者构建现代化、交互式的Web应用程序。 + +9. **云优化**:ASP.NET Core 设计时充分考虑了云环境的部署和运行,具有良好的可伸缩性和可管理性,特别适合在Azure等云平台上部署。 + +10. **兼容性**:ASP.NET Core 可以与各种前端框架和库(如React、Angular、Vue等)无缝集成,支持构建单页应用(SPA)和前后端分离的应用架构。 \ No newline at end of file diff --git "a/\344\275\231\346\242\246\345\251\267/20240710-ASP.NET Core\344\270\216ASP.NET\347\232\204\345\214\272\345\210\253.md" "b/\344\275\231\346\242\246\345\251\267/20240710-ASP.NET Core\344\270\216ASP.NET\347\232\204\345\214\272\345\210\253.md" new file mode 100644 index 0000000000000000000000000000000000000000..4a972551e7c728d872df232207af8eb77d2b181a --- /dev/null +++ "b/\344\275\231\346\242\246\345\251\267/20240710-ASP.NET Core\344\270\216ASP.NET\347\232\204\345\214\272\345\210\253.md" @@ -0,0 +1,38 @@ +### 1. **平台兼容性** +- **ASP.NET**:传统的 ASP.NET 主要在 Windows 平台上运行,依赖于 .NET Framework。 +- **ASP.NET Core**:是一个跨平台框架,可以在 Windows、macOS 和 Linux 上运行,依赖于 .NET Core 或 .NET 5 及更高版本。 + +### 2. **性能和优化** +- **ASP.NET**:性能相对较好,但由于框架的重量级特性,性能可能不如 ASP.NET Core。 +- **ASP.NET Core**:具有更高的性能优化,能够处理大量并发请求,特别是在微服务架构和云原生应用中表现优异。 + +### 3. **模块化和灵活性** +- **ASP.NET**:包含许多内置的组件和库,但这些组件往往是耦合在一起的,灵活性较低。 +- **ASP.NET Core**:设计为高度模块化,开发者可以选择并配置所需的组件和中间件,增加了灵活性和可定制性。 + +### 4. **依赖注入** +- **ASP.NET**:不包含内置的依赖注入机制,需要使用第三方库来实现。 +- **ASP.NET Core**:内置了依赖注入框架,提供了开箱即用的依赖注入支持,使得应用程序的可测试性和可维护性更强。 + +### 5. **项目结构** +- **ASP.NET**:项目结构比较固定,Web Forms、MVC、Web API 是分开的项目类型。 +- **ASP.NET Core**:项目结构更加灵活,MVC 和 Web API 合并到一个项目中,可以在同一个项目中处理不同类型的请求。 + +### 6. **配置和部署** +- **ASP.NET**:配置主要通过 Web.config 文件进行,部署时依赖 IIS。 +- **ASP.NET Core**:配置通过 appsettings.json 文件进行,支持多种配置源,并且可以使用多种托管方式,如 Kestrel、IIS、Nginx 等。 + +### 7. **开发工具和框架支持** +- **ASP.NET**:主要使用 Visual Studio 进行开发,框架更新较慢。 +- **ASP.NET Core**:支持 Visual Studio、Visual Studio Code 和 JetBrains Rider 等多种开发工具,框架更新迅速,社区活跃。 + +### 8. **现代化技术支持** +- **ASP.NET**:支持 Web Forms、MVC 和 Web API,但对现代化前端框架的支持相对较弱。 +- **ASP.NET Core**:支持 Razor Pages、Blazor 等现代化技术,更好地与现代前端框架(如 Angular、React、Vue)集成。 + +### 9. **开源和社区** +- **ASP.NET**:部分开源,社区支持较好,但开发节奏相对较慢。 +- **ASP.NET Core**:完全开源,有一个活跃的开源社区,开发节奏较快,接受来自社区的贡献。 + +### 总结 +ASP.NET Core 代表了微软对 Web 开发框架的现代化和跨平台演进,具有更高的性能、灵活性和可扩展性,适用于构建现代化、云优化的 Web 应用程序。而传统的 ASP.NET 则更多地适用于在 Windows 平台上的应用开发和部署。 \ No newline at end of file diff --git "a/\344\275\231\346\242\246\345\251\267/20240711-\347\250\213\345\272\217\345\221\230\345\217\252\346\230\257ORM\345\220\227\357\274\237.md" "b/\344\275\231\346\242\246\345\251\267/20240711-\347\250\213\345\272\217\345\221\230\345\217\252\346\230\257ORM\345\220\227\357\274\237.md" new file mode 100644 index 0000000000000000000000000000000000000000..8bd12192afc389daba7bb61de8a7f4d54ddab27b --- /dev/null +++ "b/\344\275\231\346\242\246\345\251\267/20240711-\347\250\213\345\272\217\345\221\230\345\217\252\346\230\257ORM\345\220\227\357\274\237.md" @@ -0,0 +1,44 @@ +程序员的工作远不止于使用 ORM(对象关系映射)。ORM 是程序开发中的一个工具和技术,用于简化数据库操作,但程序员的职责和工作范围包括了许多其他方面。以下是程序员在软件开发中的主要职责和工作内容: + +### 1. **需求分析和设计** +- **需求收集**:与客户或业务部门沟通,了解系统需求和功能要求。 +- **系统设计**:设计系统架构、模块和接口,确定技术选型。 + +### 2. **编码和实现** +- **编写代码**:根据设计文档编写代码,实现系统功能。 +- **使用框架和库**:利用各种框架和库,提高开发效率和代码质量。 +- **ORM 使用**:虽然 ORM 是重要的工具,但它仅仅是数据访问层的一部分。 + +### 3. **测试和调试** +- **单元测试**:编写单元测试来验证各个功能模块的正确性。 +- **集成测试**:进行系统集成测试,确保各模块之间正确协作。 +- **调试**:查找和修复代码中的错误和性能问题。 + +### 4. **持续集成和交付** +- **版本控制**:使用 Git 等版本控制工具管理代码。 +- **构建和部署**:设置自动化构建和部署流程,确保代码快速、安全地发布到生产环境。 +- **CI/CD 管道**:配置和维护持续集成/持续交付(CI/CD)管道。 + +### 5. **文档编写** +- **技术文档**:编写系统设计文档、API 文档和用户手册等。 +- **代码注释**:为代码添加注释,帮助其他开发人员理解代码逻辑。 + +### 6. **维护和支持** +- **系统维护**:定期更新和维护系统,修复漏洞和性能问题。 +- **技术支持**:为用户和其他开发人员提供技术支持和问题解决。 + +### 7. **学习和提升** +- **技术学习**:不断学习新技术、新框架和新工具,保持技术水平的提升。 +- **知识分享**:参与技术社区、编写技术博客、参加技术会议等,分享和获取技术经验。 + +### 8. **团队协作** +- **项目管理**:参与项目计划和管理,确保项目按时交付。 +- **代码评审**:参与代码评审,确保代码质量和一致性。 +- **跨部门沟通**:与产品经理、设计师、测试人员等合作,确保产品功能和用户体验达到预期。 + +### 9. **创新和优化** +- **技术创新**:探索和引入新的技术和方法,提升系统性能和用户体验。 +- **代码优化**:不断优化代码结构和性能,降低系统的复杂度和维护成本。 + +### 总结 +虽然 ORM 是程序开发中的重要工具,但它只是程序员工作的一小部分。程序员需要具备多方面的技能和知识,涵盖需求分析、系统设计、编码、测试、部署、维护等多个方面,才能成功地开发和维护复杂的软件系统。 \ No newline at end of file diff --git "a/\344\275\231\346\242\246\345\251\267/20240712-\347\250\213\345\272\217\345\217\252\346\234\211\345\242\236\345\210\240\346\224\271\346\237\245\345\220\227\357\274\237.md" "b/\344\275\231\346\242\246\345\251\267/20240712-\347\250\213\345\272\217\345\217\252\346\234\211\345\242\236\345\210\240\346\224\271\346\237\245\345\220\227\357\274\237.md" new file mode 100644 index 0000000000000000000000000000000000000000..a97a487aa343b781c2eaa3a207bc9e73023c9078 --- /dev/null +++ "b/\344\275\231\346\242\246\345\251\267/20240712-\347\250\213\345\272\217\345\217\252\346\234\211\345\242\236\345\210\240\346\224\271\346\237\245\345\220\227\357\274\237.md" @@ -0,0 +1,52 @@ +程序的功能远不止于增删改查(CRUD)。虽然 CRUD 操作是应用程序中与数据库交互的基础部分,但实际开发中,程序需要处理更多复杂的业务逻辑、用户交互和系统集成。以下是程序在实际应用中的一些广泛功能: + +### 1. **业务逻辑处理** +- **复杂的业务规则**:实现企业中的各种业务规则和流程,如订单处理、库存管理、财务结算等。 +- **数据验证**:在数据写入数据库之前进行各种验证,确保数据的准确性和一致性。 + +### 2. **用户界面** +- **前端开发**:构建用户界面,使用户能够方便地与系统交互。这包括网页、移动应用和桌面应用。 +- **用户体验(UX)设计**:提高系统的可用性和用户满意度,通过良好的用户体验设计和人机交互(HCI)实践。 + +### 3. **安全性** +- **身份验证和授权**:确保只有授权用户能够访问系统,并限制用户只能执行被允许的操作。 +- **数据加密**:保护敏感数据,确保在传输和存储过程中数据的安全。 + +### 4. **性能优化** +- **缓存机制**:使用缓存来减少数据库访问次数,提高系统响应速度。 +- **负载均衡**:分散系统负载,提高系统的可用性和可扩展性。 + +### 5. **系统集成** +- **API 开发和消费**:开发和使用 API 进行系统之间的集成,使得不同系统能够互相通信和协作。 +- **消息队列**:通过消息队列进行异步处理,提高系统的响应能力和可扩展性。 + +### 6. **数据处理** +- **批处理任务**:定时执行批量数据处理任务,如数据迁移、数据清洗和报表生成。 +- **数据分析**:进行数据挖掘和分析,帮助企业进行决策支持。 + +### 7. **日志和监控** +- **日志记录**:记录系统运行时的重要信息,用于调试、审计和故障排除。 +- **系统监控**:监控系统的运行状态,及时发现和处理系统故障。 + +### 8. **用户通知** +- **通知系统**:通过邮件、短信、推送通知等方式向用户发送消息,提醒用户重要事件或操作结果。 +- **实时通信**:实现实时聊天、在线协作等功能,增强用户互动体验。 + +### 9. **国际化和本地化** +- **多语言支持**:使应用程序能够支持多种语言,满足不同地区用户的需求。 +- **本地化适配**:根据用户所在地区调整日期、时间、货币等格式。 + +### 10. **数据备份和恢复** +- **数据备份**:定期备份重要数据,防止数据丢失。 +- **灾难恢复**:在系统出现故障时,能够快速恢复数据和系统运行。 + +### 11. **机器学习和人工智能** +- **数据预测**:使用机器学习算法进行数据预测和分析,如销售预测、客户分类等。 +- **智能推荐**:基于用户行为数据进行智能推荐,提高用户满意度和系统使用率。 + +### 12. **增强的用户交互** +- **动态表单和报告**:根据用户输入实时更新表单和报告,提供即时反馈。 +- **图形和可视化**:通过图表和数据可视化工具,帮助用户理解和分析数据。 + +### 总结 +虽然增删改查是应用程序开发的重要组成部分,但程序的功能远远超出了这些基本操作。程序需要处理复杂的业务逻辑、提供优质的用户体验、确保系统安全、优化性能、实现系统集成和处理大量数据等。这些功能共同构成了一个完整的、功能强大的应用程序。 \ No newline at end of file