自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 收藏
  • 关注

原创 TCP 三次握手和四次挥手

我们先来看看 TCP 头的格式,标注颜色的表示与本文关联比较大的字段,其他字段不做详细阐述。序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。确认应答号:指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决不丢包的问题。控制位:1、ACK:该位为 1 时,「确认应答」的字段变为有效,TCP 规定除了最初建立连接时的 2、2、SYN

2022-06-08 17:53:18 622 2

原创 SnowFlake雪花算法

SnowFlake算法生成id的结果是一个64bit大小的整数1、1bit不用,因为二进制中最高位是符号位,1表示负数,0表示正数。生成的id一般都是用整数,所以最高位固定为0。2、41bit时间戳,毫秒级。可以表示的数值范围是 (2^41-1),转换成单位年则是69年。3、10bit工作机器ID,用来表示工作机器的ID,包括5位datacenterId和5位workerId。4、12bit序列号,用来记录同毫秒内产生的不同id,12位可以表示的最大整数为4095,来表示同一机器同一时间截(毫秒)内

2022-06-07 22:10:09 384

原创 从spring容器中动态添加或移除bean

public class DemoUtil { @Autowired private ApplicationContext applicationContext;//添加bean public void addBean(String beanName, Class<?> beanClass) { BeanDefinitionRegistry beanDefinitionRegistry = (BeanDefinitionRegistry) appl

2022-05-29 18:24:57 2119

原创 BeanFactory 和FactoryBean的区别

一、BeanFactory 和FactoryBean的区别BeanFactory: 是 IOC 容器,并且提供方法支持外部程序对这些 bean 的访问,在程序启动时 根据传入的参数产生各种类型的 bean,并添加到 IOC容器(实现 BeanFactory 接口的类) 的 singletonObject 属性中。1、负责生产和管理bean的一个工厂。2、事IOC容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象的依赖。3、多种实现:如 DefaultListableBea

2022-05-29 17:50:47 3029

原创 springboot编写redis的lua脚本

配置redis@Configurationpublic class RedisConfig { @Bean public RedisTemplate<String,String> redisTemplate(RedisConnectionFactory factory){ return new StringRedisTemplate(factory); } @Bean public DefaultRedisScript loadRe

2022-03-08 14:57:43 1478 1

原创 数据库的事务隔离级别与传播行为

一、事务的特性(ACID)原子性(Atomicity):原子性是指一个事务中的操作,要么全部成功,要么全部失败,如果失败,就回滚到事务开始前的状态。一致性(Consistency):一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。那转账举栗子,A账户和B账户之间相互转账,无论如何操作,A、B账户的总金额都必须是不变的。隔离性(Isolation):隔离性是当多个用户 并发的 访问数据库时,如果操作同一张表,数据库则为每一个用户

2022-03-06 21:02:52 1301

原创 mysql锁的分类

共享锁(S Lock)共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到最新数据。1、多个事务的查询语句可以共用一把共享锁;2、如果只有一个事务拿到了共享锁,则该事务可以对数据进行 UPDATE DETELE 等操作;3、如果有多个事务拿到了共享锁,则所有事务都不能对数据进行 UPDATE DETELE 等操作。加锁方式:select…lock in share mode排它锁(X Lock)排他锁又称为写锁,简称X锁,顾名思义,排它锁不能与其它

2022-03-06 17:51:07 923

原创 mysql 间隙锁

一、什么是间隙锁?间隙锁(Gap Lock):锁加在不存在的空闲空间,可以是两个索引记录之间,也可能是第一个索引记录之前或最后一个索引之后的空间。当我们用范围条件而不是相等条件索引数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项枷锁;对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”。InnoDB也会对这个“间隙”枷锁,这种锁机制就是所谓的间隙锁(Next-Key锁)。注意:可重复读级别下才会有间隙锁!二、解决的问题解决了mysql RR(可重复读)级别

2022-03-06 16:40:41 10291 11

原创 springCloud Feign的实现原理

一、Feign介绍Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求。Spring Cloud Feign是基于Netflix feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix 实现负载均衡和断路器,除了提供这两者的强大功能外,还提供了一种声明式的Web服务客户端定义的方式。Spring Cloud Feign帮助我们定义和实现依赖服务接口的定义。在Spring Cloud feign的实现下,只需要创建一个

2022-03-05 13:20:15 3724

原创 开发自己的SpringBoot Starter

一、什么是SpringBoot Starter在 SpringBoot 项目中,使用最多的无非就是各种各样的 Starter 了。那何为 Starter 呢?你可以理解为一个可拔插式的插件(组件)。或者理解为场景启动器。通过 Starter,能够简化以前繁杂的配置,无需过多的配置和依赖,它会帮你合并依赖,并且将其统一集成到一个 Starter 中,我们只需在 Maven 中引入 Starter 依赖即可。SpringBoot 会自动扫描需要加载的信息并启动相应的默认配置。如果你想使用 redis,你只

2022-01-02 12:00:30 1392

原创 springBoot自动装配的原理

一、springBoot的优势回顾下原来搭建一个springmvc的web项目(xml配置的)我们是不是要在pom中导入各种依赖,然后各个依赖有可能还会存在版本冲突需要各种排除。然后还需要编写web.xml、springmvc.xml配置文件等。为了简化这复杂的配置、以及各个版本的冲突依赖关系,springBoot就应运而生。(1)简化配置,不需要编写太多的xml配置文件;(2)基于Spring构建,使开发者快速入门,门槛很低;(3)SpringBoot可以创建独立运行的应用而不需要依赖于容器;(

2022-01-02 11:11:46 231

原创 MyBatis缓存机制

一级缓存在应用运行过程中,我们有可能在一次数据库会话中,执行多次查询条件完全相同的SQL,MyBatis提供了一级缓存的方案优化这部分场景,如果是相同的SQL语句,会优先命中一级缓存,避免直接对数据库进行查询,提高性能每个SqlSession中持有了Executor,每个Executor中有一个LocalCache。当用户发起查询时,MyBatis根据当前执行的语句生成MappedStatement,在Local Cache进行查询,如果缓存命中的话,直接返回结果给用户,如果缓存没有命中的话,查询数据库

2021-12-19 18:47:41 98

原创 Spring 如何解决循环依赖的问题

一、什么是循环依赖 是两个或两个以上对象互相引用,即A依赖B,B依赖C,C又依赖A例如:@servicepublic class A { private B b; @Autowired public void setB(B b) { this.b= b; } } @servicepublic class B { private A a; @Autowired public void

2021-12-19 14:12:18 1375

原创 BeanFactory和FactoryBean的区别

一、BeanFactory和FactoryBean的区别BeanFactory是个Factory,也就是IOC容器或对象工厂,FactoryBean是个Bean。在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。但对FactoryBean而言,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似1、 BeanFactoryBeanFactory定义了IOC容器的最基本形式,并提供了IO

2021-12-13 22:06:39 1419

原创 mysql 死锁问题 Lock wait timeout exceeded; try restarting transaction

Lock wait timeout exceeded; try restarting transactionmysql出现死锁并获取锁超时后,会出现上面的错误。解决步骤:我们可以通过到information_schema 中来进行查找被锁的语句。information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。再简单点,这台MySQL服务器上,到底有哪些数据库、各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权.

2021-12-10 15:20:15 2472

原创 查询连续3天登录的用户

一、创建表CREATE TABLE `log` ( `user_id` int(11) NOT NULL, `create_time` datetime(0) NULL DEFAULT NULL) ENGINE = InnoDB CHARACTER SET = gb2312 COLLATE = gb2312_chinese_ci ROW_FORMAT = Compact;INSERT INTO `log` VALUES (101, '2021-11-10 20:12:42');INSE

2021-11-28 22:18:33 3390

原创 jvm内存模型教程

一、java各个版本jvm内存模型区别1.7及之前版本,如上图其中,虚拟机栈,本地方法栈以及程序计数器为线程隔离。方法区和堆是所有线程共享的数据区域。1.8版本主要的区别是移除了方法区,方法区用于存储已被虚拟机加载的类信息、常量、静态变量、动态生成的类等数据。实际上在Java虚拟机的规范中方法区是堆中的一个逻辑部分,但是它却拥有一个叫做非堆(Non-Heap)的别名。对于方法区的实现,不同虚拟机中策略也不同。以我们常用的HotSpot虚拟机为例,其设计团队使用永久带来实现方法区,并把GC的分代收集扩

2021-10-08 16:17:01 139

原创 seata分布式事务TCC模式

一、Seata TCC 模式一个分布式的全局事务,整体是 两阶段提交 的模型。全局事务是由若干分支事务组成的,分支事务要满足 两阶段提交 的模型要求,即需要每个分支事务都具备自己的:一阶段 prepare 行为二阶段 commit 或 rollback 行为根据两阶段行为模式的不同,我们将分支事务划分为 Automatic (Branch) Transaction Mode 和 TCC (Branch) Transaction Mode.AT 模式(参考链接 TBD)基于 支持本地 ACID 事

2021-09-21 20:06:03 1971 1

原创 seata分布式事务原理

一、seata是什么Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。Seata主要有两种分布式事务实现方案,AT及TCC1、AT模式主要关注多 DB 访问的数据一致性,当然也包括多服务下的多 DB 数据访问一致性 问题2、TCC模式主要关注业务拆分,在按照业务横向扩展资源时,解决微服务间调用的一致性问题术语:TC (Transacti

2021-09-20 10:28:39 6403

原创 springCloud集成seata分布式事务

一、seata服务端安装我们这里是基于nacos进行搭建的,关于nacos请参考springcloud集成nacos注册中心springcloud集成nacos配置中心官网地址本文是基于seata版本1.4.2搭建的1、安装包下载服务端安装包下载地址服务端、客户端、配置中心的脚本下载地址2、修改registry.conf配置文件 。 seata支持以下类型的配置file,nacos,eureka,redis,zk,consul,etcd3,sofafile类型是在不需要注册中

2021-09-19 23:05:37 318

原创 使用cxf发布webservice接口,以及调用webservice接口

一、cxf发布webservice接口添加maven依赖<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-core</artifactId> <version>3.4.3</version> </dependency> <de

2021-04-28 16:53:17 9286 1

原创 事务失效、AOP切入等同类调用方法问题解决

一、切面问题:在开发中会遇到,当在Service中定义了一个方法并且切入之后,从Controller里面调用该方法可以实现切入,但是当在同一个Service中实现另一方法并调用改方法时却无法切入例如同一个类中方法A,调用它的方法B,这时B方法是无法切入的。事务问题:同一个类中方法A没有事务,调用它的方法B,B有事务。这是事务失效。其实原因很简单,Spring在扫描Bean的时候会自动为标注了@Transactional注解的类生成一个代理类(proxy),当有注解的方法被调用的时候,实际上是代

2021-04-26 10:33:35 340

原创 sping事务生效与失效问题分析

一般我们使用@Transactional注解设置事务@Transactional修饰在方法上事务生效 @Transactional public void saveUser(User user) { userRespository.save(user); }方法一有事务,调用自己类或其他类的无事务方法,事务生效 @Transactional public void saveUser(User user) { test(user);

2021-04-26 10:14:57 167

原创 java单列模式深入分析

首先我们要先了解下单例的四大原则:1.构造私有。2.以静态方法或者枚举返回实例。3.确保实例只有一个,尤其是多线程环境。4.确保反序列换时不会重新构建对象。我们常用的单例模式有:饿汉模式、懒汉模式、双重锁懒汉模式、静态内部类模式、枚举模式,我们来逐一分析下这些模式的区别。单例模式在单线程下一般分为懒汉模式,和饿汉模式,总体来说,懒汉模式的优点可以突出的显现;但是当变成多线程时,饿汉模式可以很好的避免安全隐患,而懒汉模式则不可以。1.饿汉模式:public class .

2021-02-26 18:42:29 142

原创 Git将多个commit合并成一个commit

1、查看提交历史,git log这里使用到一个命令:git rebase -i,我们合并21和22提交记录,那么git rebase -i 后面跟的参数应该是想要合并的最前面commit id的上一个,就是7690fbee9fb9df0a6d4226e81523acc5d421a3da这个git rebase -i 7690fbee9fb9df0a6d4226e81523acc5d421a3da这是弹出编辑框这里除了第一个外,其他的pick改成s,意思就是把第二条往下的记录全部合并到第一条

2021-02-24 11:47:54 2614

原创 java经典sql笔试题

一、 数据准备-- 学生表create table student( id varchar(50) not null comment '学号', name varchar(50) not null comment '姓名', birthday date not null comment '生日', sex varchar(20) not null comment '性别', primary key (id));-- 课程表create table cour

2021-01-15 11:49:22 1143

原创 MySQL与Oracle的区别

1.本质区别MySQL是轻量型数据库,并且免费,没有服务恢复数据。Oracle是重量型数据库,收费,Oracle公司对Oracle数据库有任何服务。2、存储上的区别与Oracle相比,MySQL没有表空间,角色管理,快照,同义词和包以及自动存储管理。3、事务MySQL默认是自动提交,而Oracle默认不自动提交,需要用户手动提交,需要在写commit;指令或者点击commit按钮。MySQL在innodb存储引擎的行级锁的情况下才可支持事务,而Oracle则完全支持事务。4、事务隔离级别M

2021-01-12 16:16:48 540

原创 rocketMQ事务消息工作原理与实例

一、概述Apache RocketMQ在4.3.0版中已经支持分布式事务消息,这里RocketMQ采用了2PC的思想来实现了提交事务消息,同时增加一个补偿逻辑来处理二阶段超时或者失败的消息二、事务消息交互流程RocketMQ事务消息流程概要上图说明了事务消息的大致方案,其中分为两个流程:正常事务消息的发送及提交、事务消息的补偿流程。1.事务消息发送及提交:(1) 发送消息(half消息)。(2) 服务端响应消息写入结果。(3) 根据发送结果执行本地事务(如果写入失败,此时half消息对业务

2021-01-08 15:40:37 1032

原创 rocketMQ同步、异步、顺序、延迟、批量消息实例

代码示例使用RocketMQ发送三种类型的消息:同步消息、异步消息和单向消息。其中前两种消息是可靠的,因为会有发送是否成功的应答。加入依赖<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.3.0</version></depende

2021-01-08 15:17:35 1343

原创 rocketMQ原理讲解

一、概念和特性基本概念1 、消息模型(Message Model)RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器,每个 Broker 可以存储多个Topic的消息,每个Topic的消息也可以分片存储于不同的 Broker。Message Queue 用于存储消息的物理地址,每个Topic中的消息地址存储于多个 Message

2021-01-08 14:49:15 12767

原创 rocketMQ环境搭建

一、Linxu环境下部署官网地址:http://rocketmq.apache.org/docs/quick-start/前提条件:64bit JDK 1.8+下载编译好的安装包:https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.8.0/rocketmq-all-4.8.0-bin-release.zipStart Name Server#前面nohup代表后台启动nohup sh bin/mqnamesrv &#查看启动日志

2021-01-07 10:38:08 497

原创 itextpdf获取关键字所在坐标位置以及添加印章、水印等

一、简介iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。maven依赖导入<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId>

2021-01-02 14:55:37 4746 1

原创 使用jackson把java对象转成xml格式

一、maven依赖引入<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.12.0</version> </dependency>

2020-12-25 11:35:40 4962 2

原创 rabbitmq基本原理总结

一、消息传递系统架构二、基本概念rabbitmq是AMQP协议的一个开源实现,AMQP即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有 RabbitMQ等。1、Message(消息)消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一

2020-12-10 15:20:29 1128

原创 基于springcloud使用nacos作为dubbo的注册中心

一、nacos部署参考文章nacos注册中心搭建二、使用nacos作为dubbo注册中心1、创建dubbo-service-api工程pom文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sche

2020-12-07 16:43:52 534 1

原创 nacos集群环境搭建

一、集群模式部署集群部署架构图因此开源的时候推荐用户把所有服务列表放到一个vip下面,然后挂到一个域名下面http://ip1:port/openAPI 直连ip模式,机器挂则需要修改ip才可以使用。http://VIP:port/openAPI 挂载VIP模式,直连vip即可,下面挂server真实ip,可读性不好。http://nacos.com:port/openAPI 域名 + VIP模式,可读性好,而且换ip方便,推荐模式3个或3个以上Nacos节点才能构成集群(1)安装3个以上N

2020-12-04 18:44:33 393 1

原创 springcloud集成nacos配置中心

一、添加依赖<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>${latest.version}</version></dependency>创建bootstrap.yml配置文件,

2020-12-04 17:41:14 636

原创 springcloud集成nacos注册中心

一、Nacos简介Nacos是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。官方介绍是这样的:Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务 发现、服务配置管理、服务及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构的服务基础设施。官网地址;https://nacos.io/二、Nacos特性1、服务发现和服务健康监测N

2020-12-04 12:03:08 711 1

原创 mybatis源码分析3

一、sql执行流程根据sql语句使用xml进行维护或者在注解上配置,sql语句执行的入口分为两种:  第一种,调用org.apache.ibatis.session.SqlSession的crud方法比如selectList/selectOne传递完整的语句id直接执行;  第二种,先调用SqlSession的getMapper()方法得到mapper接口的一个实现,然后调用具体的方法。除非早期,现在实际开发中,我们一般采用这种方式。我们看下第一种方式执行selectOne方法public &lt

2020-11-30 19:52:32 86

原创 mybatis源码分析2

一、mapper加载与初始化前面说过mybatis mapper文件的加载主要有两大类,通过package加载和明确指定的方式。一般来说,对于简单语句来说,使用注解代码会更加清晰,然而Java注解对于复杂语句比如同时包含了构造器、鉴别器、resultMap来说就会非常混乱,应该限制使用,此时应该使用XML文件我们先来回顾一下通过注解配置的典型mapper接口:@Select("select *from User where id=#{id} and userName like #{name}")pu

2020-11-30 19:09:40 161

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除