<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Mr_Yao]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/y5492853</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; y5492853]]></copyright><item><title><![CDATA[分布式事务框架Seata]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/129160625</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/129160625</guid><author>y5492853</author><pubDate>Wed, 22 Feb 2023 13:16:36 +0800</pubDate><description><![CDATA[Seata 一款开源的分布式事务解决方案，致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式，为用户打造一站式的分布式解决方案。]]></description><category></category></item><item><title><![CDATA[分布式事务解决方案]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/129120142</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/129120142</guid><author>y5492853</author><pubDate>Mon, 20 Feb 2023 10:48:57 +0800</pubDate><description><![CDATA[​
在《分布式事务理论基础》中介绍了分布式事务的理论基础，下面基于不同的一致性模型介绍分布式事务的常见解决方案。]]></description><category></category></item><item><title><![CDATA[分布式事务解决方案]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/129054564</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/129054564</guid><author>y5492853</author><pubDate>Thu, 16 Feb 2023 09:22:35 +0800</pubDate><description><![CDATA[​
在《分布式事务理论基础》中介绍了分布式事务的理论基础，下面基于不同的一致性模型介绍分布式事务的常见解决方案。

]]></description><category></category></item><item><title><![CDATA[分布式事务理论基础]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/129049203</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/129049203</guid><author>y5492853</author><pubDate>Wed, 15 Feb 2023 19:31:15 +0800</pubDate><description><![CDATA[事务是数据库执行过程中的一个逻辑单位，由一个有限的数据库操作序列构成。 事务有四个特性，习惯上被称为 ACID 特性：]]></description><category></category></item><item><title><![CDATA[Java8中的Stream流]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/127996990</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/127996990</guid><author>y5492853</author><pubDate>Wed, 23 Nov 2022 13:13:14 +0800</pubDate><description><![CDATA[A sequence of elements supporting sequential and parallel aggregate operations]]></description><category></category></item><item><title><![CDATA[Java类加载器]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/127740192</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/127740192</guid><author>y5492853</author><pubDate>Mon, 07 Nov 2022 21:45:36 +0800</pubDate><description><![CDATA[我们写的每一个Java文件，首先通过编译器编译成class文件，然后经过类加载器加载到jdk运行时内存中生成一个class类]]></description><category></category></item><item><title><![CDATA[Java类加载器]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/127740111</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/127740111</guid><author>y5492853</author><pubDate>Mon, 07 Nov 2022 21:41:49 +0800</pubDate><description><![CDATA[类加载器
我们写的每一个Java文件，首先通过编译器编译成class文件，然后经过类加载器加载到jdk运行时内存中生成一个class类，才会被程序使用。而类加载器就是加载字节码(.class)文件的类--java.lang.ClassLoader。
类加载器的分类
Java默认设置了三个类加载器。

BootstrapClassloaderExtClassloaderAppClassloader
BootstrapClassloader 叫做启用类加载器，用于加载JRE核心类库，使用C++实现。加载路径%J]]></description><category></category></item><item><title><![CDATA[Java工具 Jstack 的使用]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/124456091</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/124456091</guid><author>y5492853</author><pubDate>Wed, 27 Apr 2022 21:45:00 +0800</pubDate><description><![CDATA[jstack - Prints Java thread stack traces for a Java process, core file, or remote debug server.

Jstack 主要的作用是生成当前进程中所有线程的信息，也就是当前时刻 JVM 的线程快照，通过线程的信息我们可以定位到程序中出现长时间停顿、CPU 占用率过高等问题。
线程快照中的信息是当前 java 虚拟机内每一条线程正在执行的方法的堆栈集合，有了堆栈信息我们就可以分析出我们的程序问题出现在那，比如线程间死锁..]]></description><category></category></item><item><title><![CDATA[ThreadLocal 内存泄露问题]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/123984840</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/123984840</guid><author>y5492853</author><pubDate>Wed, 06 Apr 2022 14:10:22 +0800</pubDate><description><![CDATA[内存泄漏（Memory Leak）是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放，造成系统内存的浪费，导致程序运行速度减慢甚至系统崩溃等严重后果。 ——百度百科

上述的意思用在java中就是存在已经没有任何引用的对象，但是GC又不能把对象所在的内存回收掉，所以就造成了内存泄漏。
ThreadLocal主要解决的是对象不能被多个线程同时访问的问题。根据ThreadLocal的源码看看它是怎么实现的。
ThreadLocal设置数据的set()方法
  public void set(T va.]]></description><category></category></item><item><title><![CDATA[Spring Boot 打包成Jar包运行的原理]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/123758851</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/123758851</guid><author>y5492853</author><pubDate>Sat, 26 Mar 2022 21:00:00 +0800</pubDate><description><![CDATA[相比于传统的Java打包方式，使用SpringBoot打包插件打包成jar包后，可以直接使用java -jar 运行SpringBoot项目，本篇就来分析一下运行的原理。
SpringBoot打包插件
&lt;plugin&gt;
    &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
    &lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;
&lt;/plugin&gt]]></description><category></category></item><item><title><![CDATA[设计一个支持热加载的Java应用启动器]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/122196677</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/122196677</guid><author>y5492853</author><pubDate>Wed, 29 Dec 2021 22:00:00 +0800</pubDate><description><![CDATA[热加载是指在不重启服务的情况下使更改的代码生效。注意和热部署的区别，热加载主要是在开发环境下使用。
首先要知道Java程序是怎么运行起来的，Java类加载分为其7个阶段。

其中加载阶段是用户可以自定义，而验证阶段、准备阶段、解析阶段、初始化阶段都是用 JVM 来处理的。
整个类加载是在Java 中一个叫做类加载器上进行的，如果我们能程序更改后，让程序所在的进程能够实时的获取到编译后的Class类字节码信息，然后重新加载的话，那么就可以实现热加载功能。
Java 类加载器
类加载器，顾名思义就是加载Java]]></description><category></category></item><item><title><![CDATA[聊一聊Tomcat 系统架构设计]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/122090326</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/122090326</guid><author>y5492853</author><pubDate>Wed, 22 Dec 2021 21:15:00 +0800</pubDate><description><![CDATA[总体架构
Tomcat 是一个应用服务器，那么要开发一个应用服务器，首先捋一捋它的需求，要实现那些功能。
1、 首先可以和客户端建立连接，并且能够处理客户端的连接
2、 其次还要解析处理我们写的 Servlet
3、 最后能够根据客户端的请求找到相应的 Servlet。
在 Tomcat 中将这些需求分为了两大功能

处理 Socket 连接，并将网络字节流转换成 Request 对象和 Response 对象
解析、加载和管理 Servlet，处理请求并返回响应数据

Tomcat 将这两大功能，设计成了]]></description><category></category></item><item><title><![CDATA[Java泛型中的类型擦除以及Type接口]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/121339608</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/121339608</guid><author>y5492853</author><pubDate>Mon, 15 Nov 2021 18:31:25 +0800</pubDate><description><![CDATA[Java 泛型（generics）是 JDK1.5 中引入的一个新特性，其本质是参数化类型，解决不确定具体对象类型的问题;其所操作的数据类型被指定为一个参数（type parameter）这种参数类型可以用在类、接口和方法的创建中，分别称为泛型类、泛型接口、泛型方法。

但是在 Java 中并不是真正的泛型，实际上是“伪泛型”
类型擦除（type Erasure）
为了与之前的版本兼容，JDK1.5 中通过类型擦除来增加的泛型功能。Java 泛型只是在编译器层次上，在编译后生成的字节码中是不包含泛型中类型.]]></description><category></category></item><item><title><![CDATA[Java函数式编程]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/120938444</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/120938444</guid><author>y5492853</author><pubDate>Sun, 24 Oct 2021 18:56:56 +0800</pubDate><description><![CDATA[简介
什么是函数式编程
函数式编程是一种编程范式，即一切都是数学函数。在Java面向对象编程中，程序是一系列相互作用（方法）的对象，而在函数式编程中，程序会是一个无状态的函数组合序列。
函数是“第一等公民”
“第一等公民”指的是函数和其他数据类型一样，处于平等的地位。可以赋值给变量、可以作为另一个函数的参数或者作为一个函数的返回值。比如
// 将两数相加的逻辑赋值给变量sum
var sum = (a,b)-&gt;a+b;

// 将函数作为另一个函数的参数
operation(sum)

Java函数试]]></description><category></category></item><item><title><![CDATA[聊一聊HashMap]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/120561097</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/120561097</guid><author>y5492853</author><pubDate>Thu, 30 Sep 2021 09:52:03 +0800</pubDate><description><![CDATA[HashMap 在 Java 中是一个使用高频的数据结构，JDK1.8 以后 HashMap 进行了一次翻天覆地的改变，本文基于 JDK1.8 分析一下 HashMap
存储结构转换
在 JDK1.8 以前 HashMap 采用的是数组+链表的结构，JDK1.8 以后又引入了红黑树的结构，会在链接和红黑树之间转换，结合源码分析一下 HashMap 对数组+链表和数组+红黑树的转换
首先看一下数据的存储结构
 transient HashMap.Node&lt;K, V&gt;[] table;

HashM]]></description><category></category></item><item><title><![CDATA[TCP三次握手和四次挥手]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/120523795</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/120523795</guid><author>y5492853</author><pubDate>Tue, 28 Sep 2021 15:00:00 +0800</pubDate><description><![CDATA[定义：TCP（Transmission Control Protocol:传输控制协议）是一种面向连接的、可靠的、基于字节流的传输层通信协议.

TCP在发送数据前，会在通信双方之间建立一条连接。通过这条连接，客户端和服务端可以保存一份对方的信息，如ip地址、端口号等。通信双方的数据传输就是在这条连接上进行的。这条连接的建立和断开的过程就是所谓的三次握手和四次挥手
TCP报文头部数据
在了解三次握手和四次挥手之前，先来了解一下TCP报文的头部数据结构

上图中有几个字段是在三次握手和四次挥手需要的

Se.]]></description><category></category></item><item><title><![CDATA[mybatis中mapper生成代理的过程]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/120411867</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/120411867</guid><author>y5492853</author><pubDate>Wed, 22 Sep 2021 12:04:02 +0800</pubDate><description><![CDATA[目录

mybatis中mapper代理的生成过程
与Spring集成时mapper代理的生成过程
与SpringBoot集成时mapper代理的生成过程

mybatis中mapper代理的生成过程
构建代理类工厂
从入口点开始一步一步看，首先SqlSessionFactoryBuilder类中build()方法加载配置文件
  public SqlSessionFactory build(InputStream inputStream, String environment, Properties pr]]></description><category></category></item><item><title><![CDATA[JDK动态代理]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/112160564</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/112160564</guid><author>y5492853</author><pubDate>Sun, 03 Jan 2021 22:33:04 +0800</pubDate><description><![CDATA[JDK动态代理使用的非常广泛，Spring AOP中、MyBatis的mapper中都用到了JDK动态代理。
JDK动态代理的使用
1、创建代理类接口及代理类。
2、创建一个实现了InvocationHandler接口的类，实现该接口中的invoke方法。
3、通过Proxy的newProxyInstance(ClassLoaderloader, Class[] interfaces, InvocationHandler h)方法创建一个代理对象。
来个例子：
创建一个Hello的接口
public int]]></description><category></category></item><item><title><![CDATA[JAVA SPI机制]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/105301915</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/105301915</guid><author>y5492853</author><pubDate>Fri, 03 Apr 2020 21:51:53 +0800</pubDate><description><![CDATA[少侠你现在是否还这样连接数据库
try {
    Class.forName("com.mysql.jdbc.Driver");
    Connection connection = DriverManager.getConnection("URL","root","password");
} catch (Exception e) {
    e.printStackTrace();
}

...]]></description><category></category></item><item><title><![CDATA[Mysql优化工具explain]]></title><link>https://blog.youkuaiyun.com/y5492853/article/details/105059721</link><guid>https://blog.youkuaiyun.com/y5492853/article/details/105059721</guid><author>y5492853</author><pubDate>Mon, 23 Mar 2020 22:26:38 +0800</pubDate><description><![CDATA[explain的使用很简单，只要在select语句的前面加上explain的关键字就好了，来看个例子
先创建两个表，注意两个表的索引
CREATE TABLE `user` (
  `id` varchar(32) NOT NULL,
  `name` varchar(32) DEFAULT NULL,
  `role` varchar(32) DEFAULT NULL,
  PRIMARY KE...]]></description><category></category></item></channel></rss>