<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_20161461的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_20161461</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_20161461]]></copyright><item><title><![CDATA[TCP 三次握手和四次挥手]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/125188169</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/125188169</guid><author>qq_20161461</author><pubDate>Wed, 08 Jun 2022 17:53:18 +0800</pubDate><description><![CDATA[我们先来看看 TCP 头的格式，标注颜色的表示与本文关联比较大的字段，其他字段不做详细阐述。序列号：在建立连接时由计算机生成的随机数作为其初始值，通过 SYN 包传给接收端主机，每发送一次数据，就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。确认应答号：指下一次「期望」收到的数据的序列号，发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决不丢包的问题。控制位：1、ACK：该位为 1 时，「确认应答」的字段变为有效，TCP 规定除了最初建立连接时的 2、2、SYN ]]></description><category></category></item><item><title><![CDATA[SnowFlake雪花算法]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/125174212</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/125174212</guid><author>qq_20161461</author><pubDate>Tue, 07 Jun 2022 22:10:09 +0800</pubDate><description><![CDATA[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，来表示同一机器同一时间截（毫秒)内]]></description><category></category></item><item><title><![CDATA[从spring容器中动态添加或移除bean]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/125034315</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/125034315</guid><author>qq_20161461</author><pubDate>Sun, 29 May 2022 18:24:57 +0800</pubDate><description><![CDATA[public class DemoUtil {

    @Autowired
    private ApplicationContext applicationContext;


//添加bean
    public void addBean(String beanName, Class&lt;?&gt; beanClass) {
        BeanDefinitionRegistry beanDefinitionRegistry = (BeanDefinitionRegistry) appl]]></description><category></category></item><item><title><![CDATA[BeanFactory 和FactoryBean的区别]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/125033055</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/125033055</guid><author>qq_20161461</author><pubDate>Sun, 29 May 2022 17:50:47 +0800</pubDate><description><![CDATA[一、BeanFactory 和FactoryBean的区别
BeanFactory： 是 IOC 容器，并且提供方法支持外部程序对这些 bean 的访问，在程序启动时 根据传入的参数产生各种类型的 bean，并添加到 IOC容器（实现 BeanFactory 接口的类) 的 singletonObject 属性中。
1、负责生产和管理bean的一个工厂。
2、事IOC容器的核心接口，它的职责包括：实例化、定位、配置应用程序中的对象及建立这些对象的依赖。
3、多种实现：如 DefaultListableBea]]></description><category></category></item><item><title><![CDATA[springboot编写redis的lua脚本]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/123353867</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/123353867</guid><author>qq_20161461</author><pubDate>Tue, 08 Mar 2022 14:57:43 +0800</pubDate><description><![CDATA[配置redis
@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate&lt;String,String&gt; redisTemplate(RedisConnectionFactory factory){
        return new StringRedisTemplate(factory);
    }

    @Bean
    public DefaultRedisScript loadRe]]></description><category></category></item><item><title><![CDATA[数据库的事务隔离级别与传播行为]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/123316881</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/123316881</guid><author>qq_20161461</author><pubDate>Sun, 06 Mar 2022 21:02:52 +0800</pubDate><description><![CDATA[一、事务的特性（ACID）

原子性（Atomicity）：原子性是指一个事务中的操作，要么全部成功，要么全部失败，如果失败，就回滚到事务开始前的状态。
一致性（Consistency）：一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态，也就是说一个事务执行之前和执行之后都必须处于一致性状态。那转账举栗子，A账户和B账户之间相互转账，无论如何操作，A、B账户的总金额都必须是不变的。
隔离性（Isolation）：隔离性是当多个用户 并发的 访问数据库时，如果操作同一张表，数据库则为每一个用户]]></description><category></category></item><item><title><![CDATA[mysql锁的分类]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/123312858</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/123312858</guid><author>qq_20161461</author><pubDate>Sun, 06 Mar 2022 17:51:07 +0800</pubDate><description><![CDATA[共享锁（S Lock）
共享锁又称为读锁，简称S锁，顾名思义，共享锁就是多个事务对于同一数据可以共享一把锁，都能访问到最新数据。
1、多个事务的查询语句可以共用一把共享锁；
2、如果只有一个事务拿到了共享锁，则该事务可以对数据进行 UPDATE DETELE 等操作；
3、如果有多个事务拿到了共享锁，则所有事务都不能对数据进行 UPDATE DETELE 等操作。

加锁方式：select…lock in share mode

排它锁（X Lock）
排他锁又称为写锁，简称X锁，顾名思义，排它锁不能与其它]]></description><category></category></item><item><title><![CDATA[mysql 间隙锁]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/123312214</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/123312214</guid><author>qq_20161461</author><pubDate>Sun, 06 Mar 2022 16:40:41 +0800</pubDate><description><![CDATA[一、什么是间隙锁？
间隙锁（Gap Lock）：锁加在不存在的空闲空间，可以是两个索引记录之间，也可能是第一个索引记录之前或最后一个索引之后的空间。

当我们用范围条件而不是相等条件索引数据，并请求共享或排他锁时，InnoDB会给符合条件的已有数据记录的索引项枷锁；对于键值在条件范围内但并不存在的记录，叫做“间隙（GAP）”。
InnoDB也会对这个“间隙”枷锁，这种锁机制就是所谓的间隙锁（Next-Key锁）。

注意：可重复读级别下才会有间隙锁！

二、解决的问题
解决了mysql RR（可重复读）级别]]></description><category></category></item><item><title><![CDATA[springCloud Feign的实现原理]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/123293129</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/123293129</guid><author>qq_20161461</author><pubDate>Sat, 05 Mar 2022 13:20:15 +0800</pubDate><description><![CDATA[一、Feign介绍
Feign是一个http请求调用的轻量级框架，可以以Java接口注解的方式调用Http请求。
Spring Cloud Feign是基于Netflix feign实现，整合了Spring Cloud Ribbon和Spring Cloud Hystrix 实现负载均衡和断路器，除了提供这两者的强大功能外，还提供了一种声明式的Web服务客户端定义的方式。
Spring Cloud Feign帮助我们定义和实现依赖服务接口的定义。在Spring Cloud feign的实现下，只需要创建一个]]></description><category></category></item><item><title><![CDATA[开发自己的SpringBoot Starter]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/122274848</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/122274848</guid><author>qq_20161461</author><pubDate>Sun, 02 Jan 2022 12:00:30 +0800</pubDate><description><![CDATA[一、什么是SpringBoot Starter
在 SpringBoot 项目中，使用最多的无非就是各种各样的 Starter 了。那何为 Starter 呢？你可以理解为一个可拔插式的插件（组件）。或者理解为场景启动器。
通过 Starter，能够简化以前繁杂的配置，无需过多的配置和依赖，它会帮你合并依赖，并且将其统一集成到一个 Starter 中，我们只需在 Maven  中引入 Starter 依赖即可。SpringBoot 会自动扫描需要加载的信息并启动相应的默认配置。如果你想使用 redis，你只]]></description><category></category></item><item><title><![CDATA[springBoot自动装配的原理]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/122274068</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/122274068</guid><author>qq_20161461</author><pubDate>Sun, 02 Jan 2022 11:11:46 +0800</pubDate><description><![CDATA[一、springBoot的优势
回顾下原来搭建一个springmvc的web项目（xml配置的）我们是不是要在pom中导入各种依赖，然后各个依赖有可能还会存在版本冲突需要各种排除。然后还需要编写web.xml、springmvc.xml配置文件等。为了简化这复杂的配置、以及各个版本的冲突依赖关系，springBoot就应运而生。
(1)简化配置，不需要编写太多的xml配置文件；
(2)基于Spring构建，使开发者快速入门，门槛很低；
(3)SpringBoot可以创建独立运行的应用而不需要依赖于容器；
(]]></description><category></category></item><item><title><![CDATA[MyBatis缓存机制]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/122027758</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/122027758</guid><author>qq_20161461</author><pubDate>Sun, 19 Dec 2021 18:47:41 +0800</pubDate><description><![CDATA[一级缓存
在应用运行过程中，我们有可能在一次数据库会话中，执行多次查询条件完全相同的SQL，MyBatis提供了一级缓存的方案优化这部分场景，如果是相同的SQL语句，会优先命中一级缓存，避免直接对数据库进行查询，提高性能
每个SqlSession中持有了Executor，每个Executor中有一个LocalCache。当用户发起查询时，MyBatis根据当前执行的语句生成MappedStatement，在Local Cache进行查询，如果缓存命中的话，直接返回结果给用户，如果缓存没有命中的话，查询数据库]]></description><category></category></item><item><title><![CDATA[Spring 如何解决循环依赖的问题]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/122022998</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/122022998</guid><author>qq_20161461</author><pubDate>Sun, 19 Dec 2021 14:12:18 +0800</pubDate><description><![CDATA[一、什么是循环依赖
 是两个或两个以上对象互相引用，即A依赖B，B依赖C，C又依赖A

例如：
@service
public class A {  
    private B b;
    
    @Autowired
    public void setB(B b) {  
        this.b= b;  
    }  
}  


@service
public class B {  
    private A a;
    
	@Autowired
    public void ]]></description><category></category></item><item><title><![CDATA[BeanFactory和FactoryBean的区别]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/121915503</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/121915503</guid><author>qq_20161461</author><pubDate>Mon, 13 Dec 2021 22:06:39 +0800</pubDate><description><![CDATA[一、BeanFactory和FactoryBean的区别
BeanFactory是个Factory，也就是IOC容器或对象工厂，FactoryBean是个Bean。在Spring中，所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。但对FactoryBean而言，这个Bean不是简单的Bean，而是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似
1、 BeanFactory

BeanFactory定义了IOC容器的最基本形式，并提供了IO]]></description><category></category></item><item><title><![CDATA[mysql 死锁问题 Lock wait timeout exceeded； try restarting transaction]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/121856711</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/121856711</guid><author>qq_20161461</author><pubDate>Fri, 10 Dec 2021 15:20:15 +0800</pubDate><description><![CDATA[Lock wait timeout exceeded; try restarting transaction

mysql出现死锁并获取锁超时后，会出现上面的错误。
解决步骤：
我们可以通过到information_schema 中来进行查找被锁的语句。

information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名，数据库的表，表栏的数据类型与访问权限等。再简单点，这台MySQL服务器上，到底有哪些数据库、各个数据库有哪些表，每张表的字段类型是什么，各个数据库要什么权.]]></description><category></category></item><item><title><![CDATA[查询连续3天登录的用户]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/121598681</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/121598681</guid><author>qq_20161461</author><pubDate>Sun, 28 Nov 2021 22:18:33 +0800</pubDate><description><![CDATA[一、创建表
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]]></description><category></category></item><item><title><![CDATA[jvm内存模型教程]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/120652974</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/120652974</guid><author>qq_20161461</author><pubDate>Fri, 08 Oct 2021 16:17:01 +0800</pubDate><description><![CDATA[一、java各个版本jvm内存模型区别

1.7及之前版本，如上图其中，虚拟机栈，本地方法栈以及程序计数器为线程隔离。方法区和堆是所有线程共享的数据区域。
1.8版本主要的区别是移除了方法区，方法区用于存储已被虚拟机加载的类信息、常量、静态变量、动态生成的类等数据。实际上在Java虚拟机的规范中方法区是堆中的一个逻辑部分，但是它却拥有一个叫做非堆(Non-Heap)的别名。
对于方法区的实现，不同虚拟机中策略也不同。以我们常用的HotSpot虚拟机为例，其设计团队使用永久带来实现方法区，并把GC的分代收集扩]]></description><category></category></item><item><title><![CDATA[seata分布式事务TCC模式]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/120404708</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/120404708</guid><author>qq_20161461</author><pubDate>Tue, 21 Sep 2021 20:06:03 +0800</pubDate><description><![CDATA[一、Seata TCC 模式
一个分布式的全局事务，整体是 两阶段提交 的模型。全局事务是由若干分支事务组成的，分支事务要满足 两阶段提交 的模型要求，即需要每个分支事务都具备自己的：
一阶段 prepare 行为
二阶段 commit 或 rollback 行为

根据两阶段行为模式的不同，我们将分支事务划分为 Automatic (Branch) Transaction Mode 和 TCC (Branch) Transaction Mode.
AT 模式（参考链接 TBD）基于 支持本地 ACID 事]]></description><category></category></item><item><title><![CDATA[seata分布式事务原理]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/120388215</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/120388215</guid><author>qq_20161461</author><pubDate>Mon, 20 Sep 2021 10:28:39 +0800</pubDate><description><![CDATA[一、seata是什么
Seata 是一款开源的分布式事务解决方案，致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式，为用户打造一站式的分布式解决方案。
Seata主要有两种分布式事务实现方案，AT及TCC
1、AT模式主要关注多 DB 访问的数据一致性，当然也包括多服务下的多 DB 数据访问一致性		       问题
2、TCC模式主要关注业务拆分，在按照业务横向扩展资源时，解决微服务间调用的一致性问题

术语：
TC (Transacti]]></description><category></category></item><item><title><![CDATA[springCloud集成seata分布式事务]]></title><link>https://blog.youkuaiyun.com/qq_20161461/article/details/120385560</link><guid>https://blog.youkuaiyun.com/qq_20161461/article/details/120385560</guid><author>qq_20161461</author><pubDate>Sun, 19 Sep 2021 23:05:37 +0800</pubDate><description><![CDATA[一、seata服务端安装
我们这里是基于nacos进行搭建的，关于nacos请参考
springcloud集成nacos注册中心
springcloud集成nacos配置中心
官网地址

本文是基于seata版本1.4.2搭建的

1、安装包下载
服务端安装包下载地址
服务端、客户端、配置中心的脚本下载地址

2、修改registry.conf配置文件 。 seata支持以下类型的配置

file,nacos,eureka,redis,zk,consul,etcd3,sofa

file类型是在不需要注册中]]></description><category></category></item></channel></rss>