abp各模块
Application应用层:应用层提供一些应用服务(Application Services)方法供展现层调用。一个应用服务方法接收一个DTO(数据传输对象)作为输入参数,使用这个输入参数执行特定的领域层操作,并根据需要可返回另一个DTO。
Core领域核心层,领域层就是业务层,是一个项目的核心,所有业务规则都应该在领域层实现。这个项目里面,除了定义所需的领域实体类外,其实可以定义我们自己的自定义的仓储对象(类似DAL/IDAL),以及定义自己的业务逻辑层(类似BLL/IBLL),以及基于AutoMapper映射规则等内容。
EntityFrameworkCore 实体框架核心层,这个项目不需要修改太多内容,只需要在DbContext里面加入对应领域对象的仓储对象即可。
Migrator数据迁移层,这个是一个辅助创建的控制台程序项目,如果基于DB First,我们可以利用它来创建我们项目的初始化数据库。
Web.Core Web核心层,基于Web或者Web API的核心层,提供了对身份登陆验证的基础处理,没有其他内容。
Web.Core.Host We ...
在分布式架构中,为什么不能使用自增ID或者UUID做主键,雪花算法优缺点?
在分布式架构中,为什么不能使用自增ID或者UUID做主键,雪花算法优缺点?自增ID
如果基于主键分片,因为是自增,压力会集中在某个分片上
在分布式系统中,每个节点都有自己的id,数据库合并或者迁移的时候会造成ID冲突
UUID
由32个十六进制数字和4个连字符组成,不容易阅读,还浪费空间
全局唯一
由于是随机生成的,mysql底层是由B+树实现的,那么可能会有大量的数据移动,并且要改变指针的值,可能会导致索引分裂和磁盘碎片,影响查询性能
雪花算法
由63bit组成,分别是41bit时间戳,10bit机器编号,12bit序列号
基于unix时间戳,网上递增,理论上可以使用69年,通常时间戳可以采用当前时间减去服务器的启用时间
发生服务器时钟回拨,就可能导致产生相同的id
加和不加@RequestBody的区别
加和不加@RequestBody的区别
1.使用@RequestBody接收参数的格式为json字符串格式{“xxx”:xxx}2.不使用@RequestBody接收参数的格式为表单格式:{xxx:xxx}
前后端传递日期字段
前端日期字符串向后端传递后端用date类型字段接收时
1.接收对象用@RequestBody并搭配@DateTimeFormat和@JsonForma
2.接收对象用@RequestBody搭配@JsonForma将日期字符串转成日期格式
3.接收对象不用用@RequestBody修饰,请求体form-data类型(json类型不可以)是可以通过@DateTimeFormat
将日期字符串转成日期格式
手写bitmap
Bitmap简介
Bit-map就是用一个bit位来标记某个元素对应的Value(若元素存在bit位置为1,不存在则置为0)。可创建一个整型数组(如byte数组,int数组,long数组)来表示。可以使用redis的api来实现对bitmap的运用
代码实现bitmapBitmapUtil1234567891011121314151617181920212223242526272829303132333435package com.cc.bitmap;public class BitmapUtil { private static int capacity; private static int maxValue; private static byte[] byteBits; public BitmapUtil(int maxValue) { this.maxValue = maxValue; this.capacity = maxValue / 8 + 1; byteBits = new byt ...