- 博客(32)
- 收藏
- 关注
原创 DDD学习
聚合是由业务和逻辑紧密关联的实体和值对象组合而成的,聚合是数据修改和持久化的基本单元,每一个聚合对应一个仓储,实现数据的持久化。聚合根的主要目的是为了避免由于复杂数据模型缺少统一的业务规则控制,而导致聚合、实体之间数据不一致的问题。领域事件:就是业务处理,解耦。其次它作为聚合的管理者,在聚合内部负责协调实体的值对象按照固定的业务规则协同完成共同的业务逻辑。跨多个实体的业务逻辑通过领域服务来实现,跨多个聚合的业务逻辑通过应用服务来实现。聚合根:就是关联对象,数据库外键的主键,实体的主要类,如用户权限的用户。
2024-08-18 00:27:18
44
原创 kafka调优参数
producer 表示使用producer的压缩方式,否则按broker的来。retries :表示笑死发送失败后的重试次数。
2024-08-15 00:29:55
145
原创 git 代码污染拯救
git checkout -b 新建分支名 提交记录hashid(可在提交记录查看其hashid)git clone xxxx.git。然后检出指定提交记录到本地替换本地代码。
2024-03-22 00:03:28
246
原创 分布式事务相关
Confirm阶段主要是对业务系统做确认提交,Try阶段执行成功并开始执行Confirm阶段时,默认Confirm阶段是不会出错的,即:只要Try成功,Confirm一定成功,Cancel阶段主要是业务执行错误,需要回滚的状态下执行的业务取消,预留资源释放。然后二阶段如果是提交只需将一阶段保存的快照数据和行锁删掉完成数据清理即可,回滚则回滚一阶段已执行sql,还原业务数据,回滚方式是用快照1还原业务数据,但在还原之前需要检验脏写。TCC方案分不同的阶段锁住资源,减小了锁的粒度,在性能上表现的更好。
2023-07-31 21:44:26
68
原创 码出高效笔记
原码、反码、补码、移码概念原码就是未经更改的码,使用最高位表示符号位,正数为0,负数为1,剩下的事表示该树的绝对值。故8位字节表示的数字范围为 127(2^7-1) ~ -128(-2^7+1)。例子:数字 127 表示为 0111 1111,数字-127表示为 11111111反码反码就是在原码的基础上,符号位不变,各位取反例子:数字 127 表示为 0000 0000 ,数字 -127 表示为 1000 0000。补码补码就是在原码的基础上,符号位不变,各位取反,末位加一。例子:数
2022-01-24 20:42:28
307
原创 redis设计与实现 笔记
字符串redis的字符串使用SDS(redis自己实现的字符串)实现,C字符串strcat(拼接字符串)前不会检测字符串长度是否足够而发生溢出问题。SDS在执行sdscat(字符串拼接)前会检测空间是否足够而实现分配好空间。C字符串计算长度需遍历字节长度,SDS可以直接访问len属性获取长度。SDS用free属性记录当前字符串数组未使用的字节数。修改SDS时,当需要扩容时会增加SDS修改后的字节数组大小(原长度1,改成成5,扩容成12,(1+5)*2),不需扩容则不需要;当需要缩容时,不会直接
2021-12-27 22:22:35
1997
原创 docker
dockerdocker镜像(image):只读的模板。可以用来创建docker容器,一个镜像可以创建多个容器。容器(container):docker利用容器独立运行一个或一组应用。容器是用镜像创建的运行实例。它可以被启动开始停止删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是有一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间)和运行在其中的应用程序。容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。仓库(re
2021-11-25 23:58:47
1393
原创 面试题汇总
spring的构造注入和set注入的区别set注入:先实例化对象,再注入。先调对象的构造函数。spring先实例化对象,然后才实例化所有依赖对象。set注入表达了两个对象的较弱依赖关系:聚合关系。构造注入:先实例化对象需依赖对象,再实例化对象。spring保证一个对象所有依赖对象先实例化后,才实例化这个对象(没有他们就没有我原则)。构造注入表达了2个对象间强的聚合关系:组合关系。spring无法解决构造注入产生的循环依赖。解决方案:使用@Lazy(对构造入参加此注解),基本思路是:对于强依赖的对象,
2021-11-25 01:11:15
593
原创 快速计算十进制数二进制
int N = 50; while (N > 0){ System.out.print(N%2); N = N / 2; }将N%2压入栈中,然后从栈pop数据输出,就是N的二进制数。
2021-10-13 22:01:05
120
原创 算法第四版 笔记
对象是能够承载数据类型的值的实体。所以对象都有三大只要特征:状态、标识和行为。对象的状态即数据类型中的值。对象的标识能够将一个对象区别于另一个对象。可以认为对象的标识就是它在内存中的位置。对象的行为就是数据类型的操作。数据类型的实现的唯一职责就是维护一个对象的身份。引用时访问对象的一种方式。每当用例调用new(),系统就会:为新的对象分配内存空间、调用构造函数初始化对象中的值、返回一个该对象的一个引用。变量关联是指向对象的引用而非数据类的的值本身。原始数据类型指向值本身。...
2021-07-15 11:55:44
190
原创 java NIO 笔记
一IO概念输入输出就是把数据移进或移除缓冲区。进程执行IO操作,归结起来,就是向操作系统发出请求,让它把缓冲区里的数据排干(写),或者把缓冲区填满。进程使用read()系统调用,要求其缓冲区被填满。内核随即向磁盘控制硬件发出命令,要求其从磁盘读取数据。磁盘控制器把数据直接写入内核内存缓冲区,这一步通过DMA(Direct Memory Access,直接存储器访问)完成,无需主CPU协助。一旦磁盘控制器把缓冲区装满,内核即把数据从内核空间的临时缓冲区拷贝到进程执行read()调用时指定的缓冲区。如图
2021-04-21 22:45:26
115
原创 计算机网络 B站计算机网络微课堂笔记
网络层网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输。解决主要问题: 网络层向运输层提供怎样的服务(“可靠传输”还是“不可靠传输”) 网络层寻址问题 路由选择问题因特网是目前世界上用户数量最多的互联网,它使用TCP/IP协议栈 应用层:HTTP、FTP、SMTP 运输层:TCP、UDP 网际层:IP、ARP(地址解析协议)、ICMP(网际控制报文协议)、IGMP(网际组管理协议) 网络接口层:各种网络接口由于TCP/IP协议栈的网络层使用网际协议IP
2021-04-19 22:53:08
506
原创 shell2
网络ping检查网络的共通性,ping使用忽略网控制消息协议(Internet Control Message Protocol,ICMP)中的echo分组。当向某主机发送echo分组时,如果分组能够送达且该主机处于活动状态,那么它就会返回一条响应。-c 指定所发送echo分组数量,写在后面 ping www.baidu.com -c 2ping命令如果顺利执行,会返回退出状态0,否则返回非0.通过$?获得返回值。Traceroute当应用程序通过互联网请求服务时,服务的可能位于远端,两者之间通
2021-03-29 11:37:06
228
1
原创 shell
shell脚本通常以 #!/bin/bash 开头 (/bin/bash是bash解释器命令路径)终端输出每个命令或是命令序列是通过分号或换行符来分隔的。如:echo aa;echo bb;字符注释以#为起始,一直延续到行尾。如:# 这是注释echo是用于终端打印的基本命令。echo hello shell;echo 'hello shell';echo "hello shell";对于需要转义的字符(如:!),那就不要将其放入双引号,或者可以在其之前加上一个特殊的转义字符
2021-03-17 17:03:39
293
原创 mysql命令
desc 表名 :查看表结构。use 数据库名 :切换数据库。truncate table 表名 :清空数据表,不记录sql日志,不可以恢复数据。drop database 数据库名 :删除数据库,也删除数据库所有表。drop index 索引名 :删除索引。drop table 表名 :删除表。......
2021-03-04 17:11:28
1226
2
原创 java测试发送文件接口
public static void main(String[] args) {String file = “d:/1.doxc”;String url = “请求地址”;String repJson = null;CloseableHttpClient httpClient = null;CloseableHttpResponse response = null;try {httpClient = HttpClients.createDefault();HttpPost httpPost
2020-10-10 11:25:30
170
原创 rabbitMQ 学习笔记
RabbitMQ消息队列默认账号密码:guestcmd启动进入安装目录的sbin目录启动rabbitmq_management管理界面:.\rabbitmq-plugins enable rabbitmq_management。管理界面rabbitmq_management管理界面启动访问路径:localhost:15672已声明的队列不能在进行持久化修改。一个队列只能有一个事务模式。channel.basicPublish(交换机名,路由名或队列名,props,body);发送消息到交换器或队
2020-07-18 21:25:28
634
原创 mysql 摘自高性能mysql第三版
MySQLMySQL通过SHOW VARIABLES语句查看系统变量及其值。可以通过select version();查看mysql版本。通过SET SESSION TRANSACTION ISOLATION LEVEL 事务隔离级别;改变当前会话隔离级别。临时表:只在当前连接可见,当关闭连接时,MySQL会自动删除表并释放所有空间。建索引:ALTER TABLE TABLE_NAME ADD PRIMARY KEY(COLUMN)。主键索引ALTER TABLE TABLE_NAME ADD
2020-07-18 21:21:39
245
原创 jvm 摘自深入理解java虚拟机
Java虚拟机一 java内存区域和内存溢出异常运行时数据区域栈帧是方法运行期的基础数据结构。程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理线程恢复等基础功能都需要依赖这个计数器来完成。Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个时刻,一个处理器(对于多核处理器来说是一个内核)只会执行一条线程中的指令。因此,
2020-07-18 21:09:23
152
原创 mongodb
MongoDBlinux下mongod开启服务,mongo进入命令页面简介为了快速开发互联web应用而设计的数据库系统。设计目标是极简、灵活、作为web应用栈的一部分。数据模型是面向文档的,所谓文档是一种类似于json的结构,简单理解mongodb这个数据库中存的是各种各样的json(bson)。数据库(database):一个仓库,在仓库中可以存放集合。集合(collection):类似数组,在集合中存放文档。文档(document):文档数据库中的最小单位,我们存储和操作的内容都是文档。命
2020-07-18 00:23:26
68
原创 分布式事务
补偿机制两个服务:addUser和addScore先调用addUser,成功返回true,直接提交事务。addUser调用成功返回true后,开始调用addScore,如果执行成功,直接提交事务,执行失败,则调用delUser,将新添加的用户删除。补偿机制就是说,当先前事务已提交,后续事务出现异常时,调用补偿的方法,将先前更改的数据删除。补偿机制的不足:1、不同的事务要写不同的补偿机制,不具备通用性。2、补偿的事务失败没有考虑进来。3、如果业务复杂,if/else嵌套很多层。两阶段提交两个服务
2020-07-18 00:17:33
59
原创 rabbitmq
RabbitMQ消息队列默认账号密码:guestcmd启动进入安装目录的sbin目录启动rabbitmq_management管理界面:.\rabbitmq-plugins enable rabbitmq_management。管理界面rabbitmq_management管理界面启动访问路径:localhost:15672已声明的队列不能在进行持久化修改。一个队列只能有一个事务模式。channel.basicPublish(交换机名,路由名或队列名,props,body);发送消息到交换器或队
2020-07-17 10:46:03
332
原创 springcloud
SPRINGCLOUD分布式微服务架构是一种架构模式,它提倡将单一应用程序划分成一组服务,服务之间互相协调、互相配合、为用户提供最终价值。每个服务运行在其独立的服务中,服务于服务之间采用轻量级的通信机制互相协作(通常是基于HTTP协议的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、根据对其进行构建。分布式架构:服务注册与发现、服务调用、服务
2020-07-17 10:45:29
207
原创 redis
NoSQL简介概念:非关系型数据库:数据与数据之间没有关联关系·NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题分类键值(key-value)存储数据库主要会使用到哈希表,这个表中有一个特定的键和一个指针指向特定的值。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值查询或更新的时候,key/value就显得效率低下列存储数据库这部分数据库通常是用来应对分布式的海量数据。键任然存在,但是它们的特点是指向了多个列。
2020-07-17 10:44:54
68
原创 多线程相关
多线程线程与进程进程可以实现多个任务的并发实行,但在程序中不开辟进程,弊端:资源不共享线程是做多任务并发的一种工具 一种手段线程是一个进程中任务执行的具体单元,一个任务执行的最小单元进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的单位,线程则是进程的一个执行路径,一个进程至少含有一个线程,进程中的多个线程共享进程的资源。进程包含线程,一个进程中可以有多个线程,至少一个线程,一个进程中没有一条线程,这个程序会被迫停止线程与进程的区别:线程资源共享,进程资源不共享线程生命周期
2020-07-17 10:43:04
152
1
原创 jvm学习
Java虚拟机一 java内存区域和内存溢出异常运行时数据区域栈帧是方法运行期的基础数据结构。程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理线程恢复等基础功能都需要依赖这个计数器来完成。Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个时刻,一个处理器(对于多核处理器来说是一个内核)只会执行一条线程中的指令。因此,为
2020-07-17 10:42:10
132
1
原创 递归写法
public static int computeAge(int n){if(n==1) return 10return computeAge(n-1)+2;}
2020-02-25 20:09:53
193
原创 springmvc上传文件
代码public String fileaa(String name,List file,HttpServletRequest req){//判断是否上传了文件if(!file.isEmpty()&&file.size()>0){//循环上传的文件for (MultipartFile item : file) {//获取上传文件原名称String startNa...
2019-04-26 21:07:06
82
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人