<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Talk is cheap，show me the code.]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/javaer_lee</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; javaer_lee]]></copyright><item><title><![CDATA[sofa-seata]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/106306035</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/106306035</guid><author>javaer_lee</author><pubDate>Sun, 24 May 2020 23:20:24 +0800</pubDate><description><![CDATA[sofa seata

May 23, 2020

最近工作好不容易有点空闲时间，工作上又碰到了分布式事务的问题，正好最近又在看sofa rpc，于是很自然的过渡到了sofa的seata，一个star很多的分布式事务框架。

原理官网讲的很清楚了：

Seata AT 模式

前提

基于支持本地 ACID 事务的关系型数据库。
	Java 应用，通过 JDBC 访问数据库。
整体机制

两阶段提交协议的演变：

一阶段：业务数据和回滚日志记录在同一个本地事务中提交，释放本地锁和连接资源。
	二阶段：
	提]]></description><category></category></item><item><title><![CDATA[为什么加了锁还是出现库存扣超的情况]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/103238676</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/103238676</guid><author>javaer_lee</author><pubDate>Mon, 25 Nov 2019 16:01:04 +0800</pubDate><description><![CDATA[最近碰到一个需求，库存扣减，要保证在高并发情况下不出问题。

第一想到的就是redis分布式锁，为了保证原子操作，加锁和解锁都使用lua脚本，但是在压力测试的时候发现，TPS只有个位数，而且成功率不好控制，我是自己控制尝试获取锁的次数，因此造成了大量的线程阻塞。

后面找了一些资料，改为redisson，TPS能达到100以上，成功率在90%以上，以为就此完结，后来自己做测试的时候发现数据总是有误...]]></description><category></category></item><item><title><![CDATA[1024]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/102715123</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/102715123</guid><author>javaer_lee</author><pubDate>Thu, 24 Oct 2019 08:51:02 +0800</pubDate><description><![CDATA[听说今天发帖能有1024勋章？
]]></description><category></category></item><item><title><![CDATA[MHA概念]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/89227422</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/89227422</guid><author>javaer_lee</author><pubDate>Fri, 12 Apr 2019 10:39:04 +0800</pubDate><description><![CDATA[MHA简介

MHA（Master High Availability）目前在MySQL高可用方面是一个相对成熟的解决方案，它由日本DeNA公司的youshimaton（现就职于Facebook公司）开发，是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中，MHA能做到在0~30秒之内自动完成数据库的故障切换操作，并且在进行故障切换的过程中，MHA能...]]></description><category></category></item><item><title><![CDATA[mysql半同步复制原理]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/89227346</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/89227346</guid><author>javaer_lee</author><pubDate>Fri, 12 Apr 2019 10:37:02 +0800</pubDate><description><![CDATA[复制架构衍生史

在谈这个特性之前，我们先来看看MySQL的复制架构衍生史。

在2000年，MySQL 3.23.15版本引入了Replication。Replication作为一种准实时同步方式，得到广泛应用。这个时候的Replicaton的实现涉及到两个线程，一个在Master，一个在Slave。Slave的I/O和SQL功能是作为一个线程，从Master获取到event后直接apply，没...]]></description><category></category></item><item><title><![CDATA[ArrayList打印出来为什么会有空格]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/89142747</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/89142747</guid><author>javaer_lee</author><pubDate>Tue, 09 Apr 2019 12:34:36 +0800</pubDate><description><![CDATA[问题描述


			
List&lt;String&gt; list=new ArrayList&lt;String&gt;();
list.add("张三");
list.add("李四");
list.add("王五");
System.out.println(list.toString());

			
		结果输出：[张三, 李四, 王五]
结果中我们不难发现，从第二个数据开始，每个...]]></description><category></category></item><item><title><![CDATA[http head头]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/89101094</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/89101094</guid><author>javaer_lee</author><pubDate>Mon, 08 Apr 2019 18:37:01 +0800</pubDate><description><![CDATA[1、HTTP请求方式

如下表：


			GET
			
			
			向Web服务器请求一个文件
			
		
			POST
			
			
			向Web服务器发送数据让Web服务器进行处理
			
		
			PUT
			
			
			向Web服务器发送数据并存储在Web服务器内部
			
		
			HEAD
			
			
			检查一个对象是否存在
			
		
			D...]]></description><category></category></item><item><title><![CDATA[redis的5种数据结构讲解及使用场景]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/89098843</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/89098843</guid><author>javaer_lee</author><pubDate>Mon, 08 Apr 2019 17:45:44 +0800</pubDate><description><![CDATA[redis提供了5种数据结构，理解每种数据结构的特点对于redis开发运维非常重要。

一、字符串

字符串类型是redis最基础的数据结构，首先键是字符串类型，而且其他几种结构都是在字符串类型基础上构建的，所以字符串类型能为其他四种数据结构的学习尊定基础。
	字符串类型实际上可以是：简单的字符串、复杂的字符串（xml、json）、数字（整数、浮点数）、二进制（图片、音频、视频），但最大不能...]]></description><category></category></item><item><title><![CDATA[Java序列化的几种方式]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/89098754</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/89098754</guid><author>javaer_lee</author><pubDate>Mon, 08 Apr 2019 17:44:05 +0800</pubDate><description><![CDATA[序列化和反序列化
序列化：可以将对象转化成一个字节序列，便于存储。
反序列化：将序列化的字节序列还原
优点：可以实现对象的”持久性”， 所谓持久性就是指对象的生命周期不取决于程序。

原生序列化方式

序列化方式一： 实现Serializable接口(隐式序列化)

通过实现Serializable接口，这种是隐式序列化(不需要手动)，这种是最简单的序列化方式，会自动序列化所有非static...]]></description><category></category></item><item><title><![CDATA[如何实现靠谱的分布式锁]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/89045317</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/89045317</guid><author>javaer_lee</author><pubDate>Fri, 05 Apr 2019 17:16:23 +0800</pubDate><description><![CDATA[分布式锁，是用来控制分布式系统中互斥访问共享资源的一种手段，从而避免并行导致的结果不可控。基本的实现原理和单进程锁是一致的，通过一个共享标识来确定唯一性，对共享标识进行修改时能够保证原子性和和对锁服务调用方的可见性。由于分布式环境需要考虑各种异常因素，为实现一个靠谱的分布式锁服务引入了一定的复杂度。
分布式锁服务一般需要能够保证：

同一时刻只能有一个线程持有锁；
	锁能够可重入；
	不会发...]]></description><category></category></item><item><title><![CDATA[websocket]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/89016543</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/89016543</guid><author>javaer_lee</author><pubDate>Thu, 04 Apr 2019 11:09:48 +0800</pubDate><description><![CDATA[现在，很多网站为了实现推送技术，所用的技术都是 Ajax 轮询。轮询是在特定的的时间间隔（如每1秒），由浏览器对服务器发出HTTP请求，然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点，即浏览器需要不断的向服务器发出请求，然而HTTP请求可能包含较长的头部，其中真正有效的数据可能只是很小的一部分，显然这样会浪费很多的带宽等资源。

HTML5 定义的 WebSock...]]></description><category></category></item><item><title><![CDATA[一秒钟搞懂webservice]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/89001985</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/89001985</guid><author>javaer_lee</author><pubDate>Wed, 03 Apr 2019 18:23:51 +0800</pubDate><description><![CDATA[虽然现在都是http的api，但是有些老项目依然用的是webservice，如果碰到了也需要用webservice来调用。所以像这种可能会用到的知识，花一秒钟搞懂概念就行，用到的时候再说。




webservice（SOAP）与HTTP接口的区别

什么是web service？

soap请求是HTTP POST的一个专用版本，遵循一种特殊的xml消息格式Content-type设置...]]></description><category></category></item><item><title><![CDATA[实现生产者与消费者问题的几种方式]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/88866137</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/88866137</guid><author>javaer_lee</author><pubDate>Thu, 28 Mar 2019 12:04:32 +0800</pubDate><description><![CDATA[生产者与消费者问题是多线程同步的一个经典问题。生产者和消费者同时使用一块缓冲区，生产者生产商品放入缓冲区，消费者从缓冲区中取出商品。我们需要保证的是，当缓冲区满时，生产者不可生产商品；当缓冲区为空时，消费者不可取出商品。
下面介绍java中几种解决同步问题的方式


	wait()与notify()方法
	
	
	Lock与Condition机制
	
	
	BlockingQueue阻塞队列
	
...]]></description><category></category></item><item><title><![CDATA[Java单例模式的五种写法]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/88738993</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/88738993</guid><author>javaer_lee</author><pubDate>Fri, 22 Mar 2019 13:41:00 +0800</pubDate><description><![CDATA[在设计模式中单例模式看上去是最简单的一种模式，但是考虑安全性和性能的话，它并不简单。

第一种（懒汉，线程安全）：


			
public class Singleton {  
    private static Singleton instance;  
    private Singleton (){}
    public static synchronized Singlet...]]></description><category></category></item><item><title><![CDATA[Apache Shiro]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/88625349</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/88625349</guid><author>javaer_lee</author><pubDate>Sun, 17 Mar 2019 20:01:35 +0800</pubDate><description><![CDATA[Apache Shiro是一个强大且易用的Java安全框架，执行身份验证、授权、密码和会话管理。

shiro基本模块



Subject：主体，可以看到主体可以是任何可以与应用交互的 “用户”；
	SecurityManager：相当于 SpringMVC 中的 DispatcherServlet 或者 Struts2 中的 FilterDispatcher；是 Shiro 的心脏；所有...]]></description><category></category></item><item><title><![CDATA[spring security+oauth2的SSO方案]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/88625307</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/88625307</guid><author>javaer_lee</author><pubDate>Sun, 17 Mar 2019 19:59:43 +0800</pubDate><description><![CDATA[springboot项目加入spring security其实是很简单的事情，主要就是config方法的重写。

客户端


			
@EnableOAuth2Sso
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected vo...]]></description><category></category></item><item><title><![CDATA[王者人机模式有Bug]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/88547152</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/88547152</guid><author>javaer_lee</author><pubDate>Thu, 14 Mar 2019 10:25:50 +0800</pubDate><description><![CDATA[用米莱迪站在对面水晶与高地塔之间的安全区机器人是看不见的，然后用米莱迪的技能慢慢的把对方的水晶推掉，其他人守塔就行，要赶紧，估计版本更新这个bug也就修复了，那时候再要过人机20级可就难喽~





NEXT
...]]></description><category></category></item><item><title><![CDATA[我们都一样]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/88547074</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/88547074</guid><author>javaer_lee</author><pubDate>Thu, 14 Mar 2019 10:23:14 +0800</pubDate><description><![CDATA[{% blockquote %}
我做了一个梦，很梦幻的梦，醒来之后才发现，这只是世界跟我开的一个玩笑，更加可笑的是他跟很多人都开了同一个玩笑。
{% endblockquote %}

故事FM
我是故事FM的一名听众，从第一集听到现在，一集不落，从里面筛选了跟我经历类似的四个故事，记录一下，时刻警醒自己对美好生活的珍惜。





...]]></description><category></category></item><item><title><![CDATA[域名解析]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/88379980</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/88379980</guid><author>javaer_lee</author><pubDate>Sun, 10 Mar 2019 16:21:40 +0800</pubDate><description><![CDATA[记录类型

A记录： 将域名指向一个IPv4地址（例如：8.8.8.8）
	CNAME：将域名指向另一个域名（例如www.qcloud.com）
	MX：将域名指向邮件服务器地址
	TXT：可任意填写，长度限制255，通常做SPF记录（反垃圾邮件）
	NS：域名服务器记录，将子域名指定其他DNS服务器解析
	AAAA：将域名指向一个iPv6地址（例如：ff06:0:0:0:0:0:0:c3）
	S...]]></description><category></category></item><item><title><![CDATA[MyBatis数据库操作空指针异常]]></title><link>https://blog.youkuaiyun.com/javaer_lee/article/details/88378838</link><guid>https://blog.youkuaiyun.com/javaer_lee/article/details/88378838</guid><author>javaer_lee</author><pubDate>Sun, 10 Mar 2019 15:15:39 +0800</pubDate><description><![CDATA[有时候，你认为出问题的地方并不是你想的地方。




明明数据库都设置了id自增，xml也做了相关的配置


			
useGeneratedKeys=&quot;true&quot; keyProperty=&quot;id&quot;

@Resource
private static AccountMapper accountMapper;

			
		但数据insert依然报空指针异常，控制台很明显可以看出id为nul...]]></description><category></category></item></channel></rss>