diff --git "a/\345\220\264\350\257\227\350\214\265/20240703-24.\345\256\211\350\243\205postgresql.md" "b/\345\220\264\350\257\227\350\214\265/20240703-24.\345\256\211\350\243\205postgresql.md" index e31965f8f36b6caaeeb30b78e56c102606dc737a..c5157e1eae5fc99ffb995c7ed295c0349cff7487 100644 --- "a/\345\220\264\350\257\227\350\214\265/20240703-24.\345\256\211\350\243\205postgresql.md" +++ "b/\345\220\264\350\257\227\350\214\265/20240703-24.\345\256\211\350\243\205postgresql.md" @@ -1,6 +1,6 @@ ## 安装postgresql -安装postgresql +### 安装postgresql ``` apt install postgresql -y @@ -20,4 +20,38 @@ systemctl status postgresql // localhost改成“*”也是允许所有地址连接的意思 ② 修改postgresql.conf里的:把listen_addresses = 'localhost'的注释也就是前面的“*”去掉,接着把localhost改成“*” -``` \ No newline at end of file +``` + +### 设置数据库的用户名和密码 + +``` +// 默认超级管理员postgres + su postgres + + // 切换用户,无密码登录 + psql + + // 设置密码 + \password + + // 退出 + \q + + // 切换到root用户 + su + + // 列出当前所有的数据库 + \l +``` + + +### 查询数据库与表 + + // 切换到当前用户使用的数据库 + \c 数据库名称 + + // 查看当前数据库中的所有表 + \dt + + // 查询表 + select*from "表的名称"; \ No newline at end of file diff --git "a/\345\220\264\350\257\227\350\214\265/20240708-27.\346\237\245\346\235\200\347\227\205\346\257\222\344\270\216DDD\344\270\200\344\272\233\346\246\202\345\277\265.md" "b/\345\220\264\350\257\227\350\214\265/20240708-27.\346\237\245\346\235\200\347\227\205\346\257\222\344\270\216DDD\344\270\200\344\272\233\346\246\202\345\277\265.md" new file mode 100644 index 0000000000000000000000000000000000000000..d4f9aab2a65dca2d0f8119ab763138a9ac5348b6 --- /dev/null +++ "b/\345\220\264\350\257\227\350\214\265/20240708-27.\346\237\245\346\235\200\347\227\205\346\257\222\344\270\216DDD\344\270\200\344\272\233\346\246\202\345\277\265.md" @@ -0,0 +1,51 @@ +## 查杀病毒 + +``` +1.查找病毒文件 +find / -name 病毒文件 + +2.杀死进程命令 +kill -9 病毒进程PId + +3.查找周期任务进行清除 +crontab -e + +4.移除病毒文件 +rm -rf 病毒文件 +``` + +## DDD中一些概念 + +``` +域 +子域 +聚合 +聚合根 +领域模型 +值对象 +领域事件 +大脑风暴 +事件风暴 +``` + +领域模型:一些不涉及其他对象(不是指其他类型,是指对象实例)的业务操作,放在领域模型 + +### 通用仓储接口 + +通用的仓储接口,其实现放在基础设施层,单独的一层ORM工具层 + +### 领域模型仓储接口 + +领域独有的一些业务,可以写成领域模型接口,其实现放在Domain + +### 领域服务接口 + +涉及到多个领域对象的业务和操作,放在领域服务;但是持久化也放在领域服务层 + +### 应用服务接口 + +应用服务其实就是对领域模型业务和领域服务业务进行编排的一个层,比较薄 + +### API服务接口(高层,因为贴近用户) + +接收参数,最多做一些数据验证工作 \ No newline at end of file diff --git "a/\345\220\264\350\257\227\350\214\265/20240709-28.\351\233\252\350\212\261\347\256\227\346\263\225\344\270\216\345\260\206\350\247\222\350\211\262\345\210\206\351\205\215\347\273\231\347\224\250\346\210\267.md" "b/\345\220\264\350\257\227\350\214\265/20240709-28.\351\233\252\350\212\261\347\256\227\346\263\225\344\270\216\345\260\206\350\247\222\350\211\262\345\210\206\351\205\215\347\273\231\347\224\250\346\210\267.md" new file mode 100644 index 0000000000000000000000000000000000000000..a330e6ad212ce0a86e1ee53579f1034feb2be49e --- /dev/null +++ "b/\345\220\264\350\257\227\350\214\265/20240709-28.\351\233\252\350\212\261\347\256\227\346\263\225\344\270\216\345\260\206\350\247\222\350\211\262\345\210\206\351\205\215\347\273\231\347\224\250\346\210\267.md" @@ -0,0 +1,71 @@ +## 雪花算法 + +### 雪花算法生成规则 + +``` +最高1位固定值0,因为生成的id是正整数,如果是1就是负数了 + +接下来41位存储毫秒级时间戳,2^41/(1000606024365)=69,大概可以使用69年 + +再接下10位存储机器码,包括5位datacenterId和5位workerId,最多可以部署2^10=1024台机器 + +最后12位存储序列号,同一毫秒时间戳时,通过这个递增的序列号来区分。即对于同一台机器而言,同一毫秒时间戳下,可以生成2^12=4096个不重复id +``` + +### 雪花算法优点 + +``` +高并发分布式环境下生成不重复id,每秒可生成百万个不重复id + +基于时间戳,以及同一时间戳下序列号自增,基本保证id有序递增 + +不依赖第三方库或者中间件 + +算法简单,在内存中进行,效率高 +``` + +### 雪花算法缺点 + +``` +依赖服务器时间,服务器时钟回拨时可能会生成重复id。算法中可通过记录最后一个生成id时的时间戳来解决,每次生成id之前比较当前服务器时钟是否被回拨,避免生成重复id +``` + +## 将角色分配给用户 + +控制器: + +``` +[HttpPost("/api/assign")] +public async Task AssignRoleToUser([FromBody]AssignRoleToUserDto assignRoleToUserDto) +{ + var res=await _appUserAppService.AllocateRoleToUser(assignRoleToUserDto.AppUserId,assignRoleToUserDto.AppRoleId); + return res; +} +``` + +AppUserDomainService.cs: + +``` +// 给用户分配角色 +public async Task AssignRole(Guid appUserId, Guid appRoleId) +{ + // 1.需要对id对应的实例存在不存在做验证 + // 2.如果都存在,需要对id对应的领域对象做进一步验证,如状态验证和业务验证 + var user = await _appUserRepository.GetByIdAsync(appUserId); + var role = await _appRoleRepository.GetByIdAsync(appRoleId); + // id对应的用户和角色都存在的情况下 + if (user != null && role != null) + { + // 业务要求:用户没有被删除,也没有被禁用 + // 业务要求:角色没有被删除,也没有被禁用 + if (user.IsDeleted != true && user.IsActived == true && role.IsDeleted != true && role.IsActived == true) + { + var userRole = new AppUserRole { AppUserId = appUserId, AppRoleId = appRoleId }; + var res=await _appUserRoleRepository.CreateAsync(userRole); + return res; + } + return null; + } + return null; +} +``` \ No newline at end of file diff --git "a/\345\220\264\350\257\227\350\214\265/20240710-29.ABP.md" "b/\345\220\264\350\257\227\350\214\265/20240710-29.ABP.md" new file mode 100644 index 0000000000000000000000000000000000000000..43b077fc3746a7d1347c24d3dfd80014e1633da0 --- /dev/null +++ "b/\345\220\264\350\257\227\350\214\265/20240710-29.ABP.md" @@ -0,0 +1,33 @@ +## ABP + +### ABP——基于领域驱动设计的分层模型 + +ABP是“ASP.NET Boilerplate Project(ASP.NET样板项目)”的简称 + +ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WEB应用程序框架和项目模板。ABP是基于最新的ASP.NET CORE,ASP.NET MVC和Web API技术的应用程序框架。并使用流行的框架和库,它提供了便于使用的授权,依赖注入,验证,异常处理,本地化,日志记录,缓存等常用功能 + +### ABP架构 + +ABP实现了多层架构(领域层,应用层,基础设施层和表示层),以及领域驱动设计(实体,存储库,领域服务,应用程序服务,DTO等)。还实现和提供了良好的基础设施来实现最佳实践,如依赖注入 + +### ABP的特点 + +``` +模块化——ABP模块化系统,以模块的形式体现 + +多租户 + +认证和授权 + +后台作业 + +AUTO API + +事件总监 + +对象映射 + +数据过滤 + +AOP +``` \ No newline at end of file diff --git "a/\345\220\264\350\257\227\350\214\265/20240711-30.\345\215\225\345\205\203\346\265\213\350\257\225\344\270\216\351\233\206\346\210\220\346\265\213\350\257\225.md" "b/\345\220\264\350\257\227\350\214\265/20240711-30.\345\215\225\345\205\203\346\265\213\350\257\225\344\270\216\351\233\206\346\210\220\346\265\213\350\257\225.md" new file mode 100644 index 0000000000000000000000000000000000000000..c91ee840bcceb84d2347a93086d13c2cf457c9d1 --- /dev/null +++ "b/\345\220\264\350\257\227\350\214\265/20240711-30.\345\215\225\345\205\203\346\265\213\350\257\225\344\270\216\351\233\206\346\210\220\346\265\213\350\257\225.md" @@ -0,0 +1,31 @@ +## 单元测试 + +单元测试也称为模块测试,它针对软件中的最小单元(如函数、方法、类、模块等)进行测试,以验证其是否符合预期的行为和结果。单元测试通常由开发人员编写,目的是在开发过程中尽早发现和修复错误,从而提高软件质量和减少后期维护成本。一般采用白盒法,多个模块一起进行 + +单元测试的主要特点包括以下几个方面: + +针对代码的最小单元进行测试,通常采用白盒测试 + +测试人员为开发人员或测试人员 + +测试工具包括自动化测试工具和手动测试工具 + +测试目标是验证最小单元的正确性、可靠性和稳定性 + +测试结果通常以测试用例的成功率和错误报告等形式进行反馈 + +## 集成测试 + +集成测试也称为组装测试,是指在把各个模块连接起来的时候,测试跨越模块接口的数据是否会丢失、各个子功能组合起来是否能够达到预期要求的父功能、一个模块的功能是否会对另一个模块的功能产生不利影响、全局数据结构是否有问题、单个模块的误差积累起来是否会放大达到不可接受的程度等。集成测试有两种方法,一种是分别测试各个模块,再把这些模块组合起来进行整体测试,即非增量式集成。另一种是把下一个要测试的模块组合到已测试好的模块中,测试完成后再将下一个需要测试的模块组合起来进行测试,逐步把所有模块组合在一起并完成测试,即增量式集成 + +集成测试的主要特点包括以下几个方面: + +针对模块的组合进行测试,通常采用黑盒测试 + +测试人员为开发人员或测试人员 + +测试工具包括自动化测试工具和手动测试工具 + +测试目标是验证模块组合的正确性、可靠性和稳定性 + +测试结果通常以系统崩溃、错误报告等形式进行反馈 \ No newline at end of file diff --git "a/\345\220\264\350\257\227\350\214\265/20240712-31.Ant-design-vue.md" "b/\345\220\264\350\257\227\350\214\265/20240712-31.Ant-design-vue.md" new file mode 100644 index 0000000000000000000000000000000000000000..041b62e6c96df5d2148f6df4091b3035c01de8e4 --- /dev/null +++ "b/\345\220\264\350\257\227\350\214\265/20240712-31.Ant-design-vue.md" @@ -0,0 +1,87 @@ +## Ant-design-vue + +Ant-design-vue是由Ant Design 团队和Vue.js社区共同开发的。它结合了Ant Design的设计理念和Vue.js的技术栈优势,旨在为Vue.js开发者提供一套完整、易用、高质量的UI组件库。通过Ant-design-vue,开发者可以更加高效、快速地构建出符合企业级应用需求的前端界面 + +### Ant-design-vue项目特点 + +丰富的组件库:Ant-design-vue 提供了大量的 UI 组件,包括按钮、表单、导航、布局、数据展示等等。这些组件都经过精心设计和优化,能够满足企业级应用的各种需求 + +高质量的设计:Ant-design-vue 继承了 Ant Design 的设计理念,注重细节和用户体验。组件的样式和交互都经过精心打磨,能够给用户带来流畅、自然的使用体验 + +易于使用:Ant-design-vue 的组件都遵循 Vue.js 的开发规范,易于学习和使用。同时,项目也提供了详细的文档和示例代码,方便开发者快速上手 + +良好的兼容性:Ant-design-vue 支持 Vue.js 的多个版本,并且能够在各种浏览器和设备上正常运行。这使得开发者可以更加灵活地选择适合自己的技术栈和开发环境 + +活跃的社区支持:Ant-design-vue 拥有一个活跃的社区,开发者可以在社区中交流经验、分享技术、解决问题。同时,项目也积极听取社区反馈,不断优化和改进产品 + +### Ant-design-vue的组件 + +Ant-design-vue提供了丰富的 UI 组件,这些组件旨在帮助开发者构建企业级应用的前端界面。以下是一些 Ant-design-vue 的主要组件类别和示例组件: + +#### 基础组件 + +``` +Button:按钮,用于触发操作或跳转 + +Icon:图标,用于表示各种状态或操作 + +Typography:排版组件,用于展示文本内容 +``` + +#### 布局组件 + +``` +Flex:弹性布局组件,用于实现灵活的布局方式 + +Grid:栅格布局组件,用于创建基于网格的布局系统 +``` + +#### 导航组件 + +``` +Anchor:锚点组件,用于快速定位页面内容 + +Breadcrumb:面包屑组件,用于显示当前页面的路径导航 + +Menu:导航菜单组件,用于构建网站的导航结构 + +PageHeader:页头组件,用于展示页面的标题、描述等信息 +``` + +#### 数据录入组件 + +``` +AutoComplete:自动完成组件,用于提供输入建议 + +Checkbox:复选框组件,用于多选操作 + +DatePicker:日期选择器组件,用于选择日期或日期范围 + +Form:表单组件,用于构建用户输入表单 + +Input:输入框组件,用于用户输入(注意:在提供的搜索结果中,没有直接列出Input组件,但它是常见的基础组件,通常会包含在组件库中) +``` + +#### 数据展示组件 + +``` +Alert:警告提示组件,用于展示警告或错误信息 + +Avatar:头像组件,用于展示用户或实体的头像 + +Badge:徽章组件,用于展示数字或状态标签 + +Card:卡片组件,用于展示一组相关信息 + +Table:表格组件,用于展示大量数据的表格形式(注意:在提供的搜索结果中,没有直接列出Table组件,但它是常见的数据展示组件,通常会包含在组件库中) +``` + +#### 其他组件 + +``` +Anchor:锚点链接组件,与Anchor导航配合使用 + +Dropdown:下拉菜单组件,用于展示可展开的菜单项 + +Tooltip:文字提示组件,用于在鼠标悬停时显示提示信息(注意:在提供的搜索结果中,没有直接列出Tooltip组件,但它是常见的交互组件,通常会包含在组件库中) +``` \ No newline at end of file