<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[苍白的咏叹调的博客]]></title><description><![CDATA[程序小白学习之路]]></description><link>https://blog.youkuaiyun.com/kuishao1314aa</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; kuishao1314aa]]></copyright><item><title><![CDATA[idea常用插件]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/119947938</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/119947938</guid><author>kuishao1314aa</author><pubDate>Fri, 24 Sep 2021 21:52:29 +0800</pubDate><description><![CDATA[1.lombok：可以使用注解自动生成实体类各属性的Getter、Setter、构造器、无参构造器、tostring方法，需要添加Maven依赖

2.Maven Helper：可以在pom.xml中Dependency Analyzer里面发现有冲突的依赖项

3.Free Mybatis plugin：可以在mapper.java中通过方法名自动跳转到对应的mapper.xml中的sql语句

4.Leetcode Editor：LeetCode插件，可以在idea中刷题，登录需要先复制网页登陆成功的c]]></description><category></category></item><item><title><![CDATA[Redis Lua脚本实现原子性操作]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/120367618</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/120367618</guid><author>kuishao1314aa</author><pubDate>Fri, 24 Sep 2021 21:51:49 +0800</pubDate><description><![CDATA[目录



一、简介

二、内容说明

三、Java中使用Jedis操作

一、简介

redis操作时单线程的，平常如果想要redis原子性操作的话，可以使用incrBy()和decrBy()方法进行原子性的加减，但是对于事务性的逻辑操作，没有办法实现原子性，Redis 使用单个 Lua 解释器去运行所有脚本，当某个脚本正在运行的时候，不会有其他脚本或 Redis 命令被执行，因此，lua脚本需要运行的使用比较快，不会妨碍其它lua脚本执行



二、内容说明


			redis命令
			
			
	]]></description><category></category></item><item><title><![CDATA[MYSQL数据类型]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/116498604</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/116498604</guid><author>kuishao1314aa</author><pubDate>Fri, 07 May 2021 23:02:03 +0800</pubDate><description><![CDATA[一、数值数据类型

1.常用数值数据类型

数据类型有 tinyint ，smallint ，mediumint ， int ，bigint

1 bytes = 8 bit , 在计算机中，数值一律用补码表示和存储的，正数的补码与原码相同，负数的补码为“其反码+1”，**补码的第一位为符号位**。第一位为符号位的话，最大为2的7次方 -1，十进制数为127， 在计算机中用01111111表示，负数用-128表示-0，补码为10000000，为-2的7次方

因此1 bytes的大小有符号为-128到127]]></description><category></category></item><item><title><![CDATA[EasyExcel实现文件读取、导出、上传、下载操作]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/115678654</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/115678654</guid><author>kuishao1314aa</author><pubDate>Sat, 24 Apr 2021 13:07:11 +0800</pubDate><description><![CDATA[一、EasyExcel简介

​   Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存，poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题，但POI还是有一些缺陷，比如07版Excel解压缩以及解压后存储都是在内存中完成的，内存消耗依然很大。easyexcel重写了poi对07版Excel的解析，能够原本一个3M的excel用POI sax依然需要100M左右内存降低到几M，并且再大的excel不会出现内存溢出，03版...]]></description><category></category></item><item><title><![CDATA[Spring中策略模式实现方法]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/115678749</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/115678749</guid><author>kuishao1314aa</author><pubDate>Sat, 24 Apr 2021 13:05:15 +0800</pubDate><description><![CDATA[一、定义

在策略模式（Strategy Pattern）中，一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中，我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。由于spring中我们需要注册对象，不能通过直接通过 **new** 来创建策略实现类，需要使用工厂模式来获取bean对象

二、实现方法

1.策略模式接口

public interface StrangeService {

.]]></description><category></category></item><item><title><![CDATA[ThreadLocal原理]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/115678777</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/115678777</guid><author>kuishao1314aa</author><pubDate>Sat, 24 Apr 2021 13:02:28 +0800</pubDate><description><![CDATA[### 一、定义

当需要为每一个线程设置一个私有的变量，进行线程隔离时，java提供的ThreadLocal可以帮助我们实现，ThreadLocal有一个内部ThreadLocalMap，存储每个ThreadLocal对象和它的值，value为该线程独有的数据，可以为多种类型

ThreadLocal、ThreadLocalMap、Thread三者之间的关系

1、ThreadLocal是一个本地线程副本变量工具类，主要用于将私有线程和该线程存放的副本对象做一个映射，各个线程之间的变量互不干扰，线程之间数]]></description><category></category></item><item><title><![CDATA[http方式调用接口服务方法]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/114084481</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/114084481</guid><author>kuishao1314aa</author><pubDate>Tue, 02 Mar 2021 22:58:49 +0800</pubDate><description><![CDATA[一、使用步骤

调用其他服务方法时，除了dubbo、rmq等方式外，还可以采取http方式调取对方服务的url，获取响应数据，可以采用HttpClient或CloseableHttpClient等接口实现http调用请求

使用HttpClient发送请求的一般步骤 ，如下所示：

（1）进行http连接配置，包括请求超时时间、读取响应时间、重试次数，最大请求数等配置

（2）根据请求方式和参数创建对应的http对象。有HttpPost、HttpGet创建请求方式方法，对于HttpPost对象而言，可调用s]]></description><category></category></item><item><title><![CDATA[分布式事务之TCC]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/113997881</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/113997881</guid><author>kuishao1314aa</author><pubDate>Tue, 02 Mar 2021 22:55:39 +0800</pubDate><description><![CDATA[### 一、定义

分布式事务：分布式事务指事务的操作位于不同的节点上，需要保证事务的 AICD 特性，一个系统涉及到多个业务系统，出错时需要全部回滚，一般采取两阶段提交（2PC）、补偿事务（TCC）、MQ事务消息

还可以使用补单操作，来完成任务的



图1-1 电商系统订单服务涉及到库存、积分、仓储服务的数据库，出现问题时，无法直接对它们进行回滚



二、TCC补偿分布式事务

1.TCC作用机制

TCC 其实就是采用的补偿机制，其核心思想是：针对每个操作，都要注册一个与其对应的确认和补偿（撤..]]></description><category></category></item><item><title><![CDATA[Filter过滤器]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/113605656</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/113605656</guid><author>kuishao1314aa</author><pubDate>Tue, 02 Mar 2021 22:51:36 +0800</pubDate><description><![CDATA[一、定义

Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序，主要的用途是设置字符集、控制权限、控制转向、做一些业务逻辑判断等。

工作原理：只要你在web.xml文件配置好要拦截的客户端请求，它都会帮你拦截到请求，此时你就可以对请求或响应(Request、Response)统一设置编码，简化操作，。过滤器在链中的顺序与它在web.xml中配置的顺序有关；同时还可进行逻辑判断，如用户是否已经登陆、有没有权限访问该页面等等工作。它是随你的web应用启动而启]]></description><category></category></item><item><title><![CDATA[Java和Spring中线程池创建方法]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/112979723</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/112979723</guid><author>kuishao1314aa</author><pubDate>Fri, 22 Jan 2021 21:11:00 +0800</pubDate><description><![CDATA[一、线程池定义

1.JDK中线程池类图



Executor：父接口，所有线程池都实现了这个接口，里面有一个excute()方法用于执行线程

ExecutorService：线程池接口，继承自Executor接口，供了生命周期管理的方法，返回 Future 对象，可以返回执行完的结果

ThreadPoolExecutor：线程池的具体实现类，一般使用ThreadPoolExecutor创建线程池



2.创建线程池的工具类

Executors：线程池的工具类，用于创建线程池，返回Executo.]]></description><category></category></item><item><title><![CDATA[MyBatis之PageHelper分页操作]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/112531523</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/112531523</guid><author>kuishao1314aa</author><pubDate>Mon, 18 Jan 2021 23:00:34 +0800</pubDate><description><![CDATA[一、定义

PageHelper用在mybatis插件里面，可以自动的为最近的sql语句进行分页查询，提供分页的页码size和每页数量num，在查询过程中hi自动的拼接limit关键字，不用再改写sql语句了

在PageHelper.startPage()； 在启动查询 List 数据的查询之前时，会对最近的一个查询进行起作用，但是对于间隔的查询返回 List的数据，将不会有任何影响

springboot中Maven依赖


&lt;!--pagehelper--&gt;
 &lt;dependency]]></description><category></category></item><item><title><![CDATA[git常用命令操作]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/111686502</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/111686502</guid><author>kuishao1314aa</author><pubDate>Sat, 09 Jan 2021 17:52:58 +0800</pubDate><description><![CDATA[一、Git提交代码过程

安装好Git，连接远程仓库地址，拉取代码到本地分支master，根据本地分支master创建分支b，修改完毕后，可以commit到本地分支b，之后可以提交到远程仓库地址，若没有远程仓库，会自动生成远程仓库b，再进行推送。如要合并当前分支b代码到主分支master，先切换到主分支master，通过git merge b操作，将分支b合并到主分支master。合并主分支到b也同理。若要进行版本回退，可以用reset –hard即可。删除本地和远程分支点击相应分支名，选择delete即可]]></description><category></category></item><item><title><![CDATA[spring中容器启动过程中初始化资源使用方法]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/112365274</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/112365274</guid><author>kuishao1314aa</author><pubDate>Sat, 09 Jan 2021 17:51:45 +0800</pubDate><description><![CDATA[#### 一、定义

在业务场景中，有时需要我们在容器启动过程中加载资源，完成数据的初始化或者配置，需要在调用前加载进spring容器过程中去，有以下一些方法来实现

1.定义静态常量，随着类的生命周期加载而提前加载。一般使用较多，这里不做说明

2.实现InitializingBean接口；重写afterPropertiesSet()方法

3.实现CommandLineRunner接口（Spring Boot中使用）；容器启动之后，加载实现类的逻辑资源，已达到完成资源初始化的任务

4.@PostCon]]></description><category></category></item><item><title><![CDATA[zk宕机掉与客户端连接过程记录]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/110391933</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/110391933</guid><author>kuishao1314aa</author><pubDate>Sun, 06 Dec 2020 23:03:48 +0800</pubDate><description><![CDATA[Zk 主节点leader宕机，客户端与服务器变化过程

1.zk集群的节点数及配置，应用节点数及配置

1）节点数5个

10.101.194.160、10.101.195.101、10.101.195.99、101.195.102、10.101.195.98。

2）zk节点搭建介绍（搭建方法网上找攻略）

leader为10.101.195.102（第四台），follower为10.101.194.160（第一台）、10.101.195.101（第二台）、10.101.195.99（第三台）、10.10]]></description><category></category></item><item><title><![CDATA[Zookeeper集群搭建方法]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/110238832</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/110238832</guid><author>kuishao1314aa</author><pubDate>Sun, 06 Dec 2020 23:03:33 +0800</pubDate><description><![CDATA[一、设备环境

5台Centos7.3 64bit 虚拟机、xsehll 7连接工具

zookeeper：3.4.7版本

下载地址：https://archive.apache.org/dist/zookeeper/zookeeper-3.4.7/zookeeper-3.4.7.tar.gz

二、搭建集群

1.选择任意一台虚拟机节点

通过xshell连接，下载zookeeper并解压

下载：wget https://archive.apache.org/dist/zookeeper/zookee]]></description><category></category></item><item><title><![CDATA[拦截器HandlerInterceptorAdapter使用方法]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/109777304</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/109777304</guid><author>kuishao1314aa</author><pubDate>Sun, 06 Dec 2020 23:03:16 +0800</pubDate><description><![CDATA[一、Interceptor定义：

拦截器是在面向切面编程中应用的，就是在你的service或者一个方法前调用一个方法，或者在方法后调用一个方法。是基于JAVA的反射机制

1.拦截器（Interceptor）执行顺序：

1. 请求到达 DispatcherServlet
2. DispatcherServlet 发送至 Interceptor ，执行 preHandle
3. 请求达到 Controller
4. 请求结束后，postHandle 执行

2.拦截器（Interceptor）和过滤器（.]]></description><category></category></item><item><title><![CDATA[InitializingBean接口使用方法]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/109777574</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/109777574</guid><author>kuishao1314aa</author><pubDate>Sun, 06 Dec 2020 23:02:51 +0800</pubDate><description><![CDATA[1.定义

InitializingBean接口为bean提供了初始化方法的方式，它只包括afterPropertiesSet方法，凡是继承该接口的类，在初始化bean的时候都会执行该方法。



2.使用方法

1）编写一个类引用InitializingBean接口，重写其中的afterPropertiesSet方法，在其中写自己的方法


@Component
public class TestComponent implements InitializingBean {
    private sta]]></description><category></category></item><item><title><![CDATA[SpringBoot+Junt+Mock测试方法]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/110239019</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/110239019</guid><author>kuishao1314aa</author><pubDate>Sun, 06 Dec 2020 23:02:37 +0800</pubDate><description><![CDATA[一、Mock测试定义

Mock 测试就是在测试过程中，对于某些不容易构造（如 HttpServletRequest 必须在Servlet 容器中才能构造出来）或者不容易获取比较复杂的对象（如 JDBC 中的ResultSet 对象），用一个虚拟的对象（Mock 对象）来创建以便测试的测试方法。Mock 最大的功能是帮你把单元测试的耦合分解开，如果你的代码对另一个类或者接口有依赖，它能够帮你模拟这些依赖，并帮你验证所调用的依赖的行为

使用场景：

当一个方法中调用第三方服务(第三方接口、数据库操作等)不可]]></description><category></category></item><item><title><![CDATA[MySQL乐观锁、共享锁、排他锁、行锁、表锁区别和使用方法]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/109219168</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/109219168</guid><author>kuishao1314aa</author><pubDate>Thu, 29 Oct 2020 22:55:59 +0800</pubDate><description><![CDATA[数据库锁分类

锁模式分类
			乐观锁、悲观锁
		范围锁
			行锁、表锁
		算法锁
			临间锁、间隙锁、记录锁
		属性锁
			共享锁(读锁)、排他锁(写锁)
		状态锁
			意向共享锁、意向排他锁
		

一、乐观锁和悲观锁

1.乐观锁介绍

乐观锁（ Optimistic Locking ） 相对悲观锁而言，乐观锁假设认为数据一般情况下不会造成冲突，所以在数据进行提交更新的时候，才会正式对数据的冲突与否进行检测，如果发现冲突了，则让返回用户错误的信息，让用户决定如何去做。那么我们如何实.]]></description><category></category></item><item><title><![CDATA[Spring 通过Java Config方式连接数据库]]></title><link>https://blog.youkuaiyun.com/kuishao1314aa/article/details/109245685</link><guid>https://blog.youkuaiyun.com/kuishao1314aa/article/details/109245685</guid><author>kuishao1314aa</author><pubDate>Thu, 29 Oct 2020 22:55:21 +0800</pubDate><description><![CDATA[1.dao层结构图



2.配置文件配置数据源


#dao层mybatis配置
spring.datasource.url=jdbc:mysql://localhost:3306/demo?autoReconnect=true&amp;amp;useUnicode=true&amp;amp;characterEncoding=UTF-8&amp;amp;useAffectedRows=true
spring.datasource.username=root
spring.datasource.passw]]></description><category></category></item></channel></rss>