From ac24bd746ff1c99ddbdb8149972ea3ee93e33c5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=99=E8=BE=89?= <3215664575@qq.com> Date: Sun, 14 Jul 2024 20:54:17 +0800 Subject: [PATCH] yh --- "\344\275\231\350\276\211/20240708.md" | 35 +++++++++ "\344\275\231\350\276\211/20240709.md" | 25 +++++++ "\344\275\231\350\276\211/20240710.md" | 49 +++++++++++++ "\344\275\231\350\276\211/20240711.md" | 11 +++ "\344\275\231\350\276\211/20240712.md" | 98 ++++++++++++++++++++++++++ 5 files changed, 218 insertions(+) create mode 100644 "\344\275\231\350\276\211/20240708.md" create mode 100644 "\344\275\231\350\276\211/20240709.md" create mode 100644 "\344\275\231\350\276\211/20240710.md" create mode 100644 "\344\275\231\350\276\211/20240711.md" create mode 100644 "\344\275\231\350\276\211/20240712.md" diff --git "a/\344\275\231\350\276\211/20240708.md" "b/\344\275\231\350\276\211/20240708.md" new file mode 100644 index 0000000..3196553 --- /dev/null +++ "b/\344\275\231\350\276\211/20240708.md" @@ -0,0 +1,35 @@ +基础概念: + +认证:验证用户身份的过程,常见的方式有用户名密码登录、邮箱发送登录链接、手机号接收验证码等。 +授权:用户授予第三方应用访问其资源的权限,实现授权的方式包括cookie、session、token、OAuth等。 +凭证:用于标记访问者身份的媒介,实现认证和授权的前提。 +Cookie: + +存储在客户端,由服务器发送到用户浏览器并保存在本地的一小块数据。 +不可跨站,每个cookie都绑定在特定的域名下。 +有效期、作用域、属性等可以控制Cookie的行为。 +Session: + +用于跟踪用户在多个页面请求期间的状态,存储在服务器端。 +与唯一的会话标识符(通常是会话ID)相关联。 +与Cookie相比,更安全、支持存储任意数据类型,但需要占用服务器资源。 +Token: + +用于访问接口(API)时所需要的资源凭证,包括Access Token和Refresh Token。 +Access Token用于认证用户身份,Refresh Token用于刷新Access Token。 +JWT: + +JSON Web Token,用于跨域认证解决方案,包含Header头部信息、Payload负载和Signature签名。 +通过签名保证数据的完整性,不需要查询数据库即可验证用户信息。 +四者的区别: + +Cookie是存储在客户端的数据,Session和Token存储在服务器端。 +Session和Token用于跟踪用户的状态和认证,而Cookie可以用于认证和其他用途。 +JWT是一种特定的Token,使用了JSON Web Token的规范。 +四者的优缺点: + +Cookie:简单易用,但容易被窃取和篡改。 +Session:安全性高,但需要占用服务器资源。 +Token:无状态化,减少了对数据库的查询,但需要额外的安全措施。 +JWT:无需查询数据库,减少了服务器负担,但需要注意保护密钥安全。 +希望以上总结对您有所帮助。 \ No newline at end of file diff --git "a/\344\275\231\350\276\211/20240709.md" "b/\344\275\231\350\276\211/20240709.md" new file mode 100644 index 0000000..8aac272 --- /dev/null +++ "b/\344\275\231\350\276\211/20240709.md" @@ -0,0 +1,25 @@ +# 生成ID的几种方法 + +## 1. UUID +- 优点:具有极高的性能,不依赖于外部存储 +- 缺点:生成的ID长度较长,需要使用字符串类型进行存储;无序性可能导致数据位置频繁变动,影响性能 + +## 2. 数据库自增ID方式 +- 优点:简单易用 +- 缺点:每次获取ID都需要进行数据库IO操作,性能较低;具有可预测性,可能导致信息泄露风险;一旦分配的ID被删除,无法再次使用,可能导致ID空间浪费;不利于数据迁移和合并 + +## 3. 雪花算法 +- 优点:以时间戳、机器标识和递增序列为基础生成ID,性能很高;适用于分布式系统,生成的ID不依赖于中心化的存储或管理 +- 缺点:强烈依赖于机器时钟,需要考虑时钟回拨问题 + +# 雪花算法的定义 +- 41位时间戳:能表示的时间跨度为大约69年 +- 10位机器ID:可以唯一标识最多1024台机器 +- 2位自增序列号:用于在同一毫秒内生成多个ID + +![雪花算法结构](https://gitee.com/huangxuefang0929/xiu_img/raw/master/%E9%9B%AA%E8%8A%B1%E7%AE%97%E6%B3%95%E7%BB%93%E6%9E%84-2024-7-923:07:35.webp) + +## 代码实现 +具体见:[雪花算法详解](https://blog.csdn.net/prjh_/article/details/134654579) + +这样的笔记是否符合您的要求呢? \ No newline at end of file diff --git "a/\344\275\231\350\276\211/20240710.md" "b/\344\275\231\350\276\211/20240710.md" new file mode 100644 index 0000000..b26fac5 --- /dev/null +++ "b/\344\275\231\350\276\211/20240710.md" @@ -0,0 +1,49 @@ +# ABP(ASP .NET Boilerplate Project)概述 + +ABP是基于领域驱动设计(DDD)的经典分层架构思想的项目框架。它包含了领域驱动设计中的多个概念,并提供了一套完整的技术栈,用于构建现代化的Web应用程序。 + +## 领域驱动设计概念 +ABP基于领域驱动设计思想,包含以下概念: +- 领域 +- 子域 +- 聚合 +- 聚合根 +- 领域模型 +- 值对象 +- 通用仓储接口 +- 领域模型仓储接口 +- 领域服务接口 +- 应用服务接口 +- API服务接口 +- 领域事件 +- 大脑风暴 +- 事件风暴 + +## 具体层分析 +ABP的架构包含以下具体层次: +1. 通用仓储接口:提供通用的仓储接口,其实现放在基础设施层或独立的ORM工具层。 +2. 领域模型仓储接口:定义领域独有的业务,其实现放在领域层。 +3. 领域服务接口:处理涉及多个领域实体的业务和操作,放在领域服务层。 +4. 应用服务接口:对领域模型业务和领域服务业务进行编排的薄层。 +5. API服务接口:接受参数,进行数据验证等操作。 +6. 单元测试层:提供应用层对象的模拟测试,使用Entity Framework的内存数据库进行测试。 + +## 采用的技术 +### 服务端 +- ASP.NET MVC5、Web API2、C# +- DDD领域驱动设计 +- Castle Windsor(依赖注入容器) +- Entity Framework6/Entity Framework Core/NHibernate、数据迁移 +- Log4Net(日志记录) +- AutoMapper(实现DTO类与实体类的双向自动转换) + +### 客户端 +- Bootstrap +- Less +- Angular +- Vue +- jQuery +- Modernizr +- 其他JS库 + +以上是关于ABP项目的概述和采用的技术。 \ No newline at end of file diff --git "a/\344\275\231\350\276\211/20240711.md" "b/\344\275\231\350\276\211/20240711.md" new file mode 100644 index 0000000..7b89df7 --- /dev/null +++ "b/\344\275\231\350\276\211/20240711.md" @@ -0,0 +1,11 @@ +集成测试是用于验证应用程序组件是否正常工作的测试类型,包括应用程序支持的基础结构,如数据库和文件系统等。在集成测试中,需要确保各个组件之间的协作和交互正常,以确保整个应用程序的功能和性能都符合预期。集成测试需要安装Microsoft.AspNetCore.Mvc.Testing包。 + +总结: + +- 测试是软件生命周期中一个重要阶段,有助于发现并改正系统中存在的缺陷,提高软件可靠性。 + +- 测试根据不同维度可分为白盒、黑盒、灰盒、手工、自动化以及单元、集成、系统等不同类型。 + +- 单元测试是针对软件中最小可测试单元进行检查和验证的过程,并遵循Arrange-Act-Assert模式,在代码更改时帮助保持稳定和正确性。 + +以上内容汇总了关于测试类型与单元测试层的重要概念与步骤。 \ No newline at end of file diff --git "a/\344\275\231\350\276\211/20240712.md" "b/\344\275\231\350\276\211/20240712.md" new file mode 100644 index 0000000..0370649 --- /dev/null +++ "b/\344\275\231\350\276\211/20240712.md" @@ -0,0 +1,98 @@ +根据你提供的信息,我可以为你总结一下关于引入 ant-design-vue 的步骤和按需加载的方法。 + +### 一、引入 ant-design-vue +#### 1. 新建项目 +首先,你需要创建一个新的项目。 + +#### 2. 使用组件 +接下来,在你的项目中使用 ant-design-vue 组件。 + +##### 安装 ant-design-vue +在命令行中运行以下命令来安装 ant-design-vue: +```bash +npm i --save ant-design-vue@4.x +``` + +##### 注册组件 +接下来,你需要在代码中注册组件。根据需求选择全局完整注册、全局部分注册或局部组件注册。 + +###### 全局完整注册 +如果你想要全局引入所有的 ant-design-vue 组件,可以使用以下代码进行全局完整注册: +```javascript +import { createApp } from 'vue'; +import App from './App'; +// 引入全部样式文件(包括 reset.css) +import Antd from 'ant-design-vue'; +import 'ant-design-vue/dist/reset.css'; + +let app = createApp(App); + +app.use(Antd).mount('#app'); +``` +这样就会将所有的组件都注册到应用程序中,并且还会引入相应的样式文件。 + +###### 全局部分注册 +如果你只想要引入部分组件,可以使用以下代码进行全局部分注册: +```javascript +import { createApp } from 'vue'; +import { Button, message } from 'ant-design-vue'; +import App from './App'; + +let app = createApp(App); + +/* 这里会自动注册 Button 下的子组件, 例如 Button.Group */ +app.use(Button).mount('#app'); + +/* 在配置对象上挂载 $message 属性 */ +app.config.globalProperties.$message = message; +``` +这样就只会将指定的组件(如 `Button`)以及其子组件都进行了全局注册,并且还可以通过 `$message` 属性访问 `message` 组件。 + +###### 局部组件 +如果你希望在特定页面或组件中使用 ant-desgin-vue 组件,则需要进行局部组件注冊。 +- 对象式写法: +```html+vue + + + +``` + +- 组合式写法(setup script): + +```html+vue + + + + + + + ``` + + +### 二、按需加载 + +ant-desgin_vue 默认支持基于 ES modules 的 tree shaking,所以当按需加载时无序做额外配置。只需要直接导入所需要用到得具体Vue单文件即可. + + +以上是关于如何引入和按需加载 ant-desgin_vue 的步骤和方法。希望对您有所帮助! \ No newline at end of file -- Gitee