<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Jacians' Blog]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/JacianLiu</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; JacianLiu]]></copyright><item><title><![CDATA[MySQL锁总结]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117967809</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117967809</guid><author>JacianLiu</author><pubDate>Wed, 16 Jun 2021 21:42:47 +0800</pubDate><description><![CDATA[MySQL锁总结锁分类以操作粒度区分以操作类型区分举例意向锁、共享锁和排它锁之间的兼容关系以操作性能区分InnoDB的行锁行锁的实现原理行锁的不同实现锁的兼容性锁规则MySQL使用间隙锁的目的加锁主键加锁唯一键加锁非唯一键加锁无索引加锁锁模拟锁举例等值查询间隙锁非唯一键等值锁主键索引范围锁非唯一索引范围锁非唯一索引等值锁for Update死锁模拟死锁模拟1站在巨人的肩膀上
锁分类

当多个事务或进程访问同一个资源时，为了保证数据的一致性就会用到锁机制，在MySQL中锁有多种不同的分类。

以操作粒度区分
]]></description><category></category></item><item><title><![CDATA[Zookeeper源码环境搭建]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117674595</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117674595</guid><author>JacianLiu</author><pubDate>Thu, 31 Dec 2020 15:07:00 +0800</pubDate><description><![CDATA[下载源码本文以 Zookeeper 3.5.4 为例，源码下载地址：https://github.com/apache/zookeeper/tree/release-3.5.4
源码编译在命令行使用 ant 编译的时候出现了一些问题，在网上没有找到解决方案，所以使用 idea 进行编译，希望有知道原因的大佬指点迷津，下图为执行 ant eclipse 后的报错信息


下边是具体操作步骤

首先使...]]></description><category></category></item><item><title><![CDATA[Zookeeper一致性协议——ZAB]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117674590</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117674590</guid><author>JacianLiu</author><pubDate>Wed, 30 Dec 2020 17:07:00 +0800</pubDate><description><![CDATA[ZAB协议简介Zookeeper通过ZAB保证分布式事务的最终一致性。
ZAB全称Zookeeper Atomic Broadcast(ZAB，Zookeeper原子消息广播协议)

ZAB是一种专门为Zookeeper设计的一种支持 崩溃恢复 的 原子广播协议 ，是Zookeeper保证数据一致性的核心算法。ZAB借鉴了Paxos算法，但它不是通用的一致性算法，是特别为Zookeeper设计的。...]]></description><category></category></item><item><title><![CDATA[Zookeeper简介]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117674589</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117674589</guid><author>JacianLiu</author><pubDate>Tue, 29 Dec 2020 23:59:00 +0800</pubDate><description><![CDATA[Zookeeper是⼀个开源的分布式协调服务，其设计⽬标是将那些复杂的且容易出错的分布式⼀致性服务封装起来，构成⼀个⾼效可靠的原语集，并以⼀些简单的接⼝提供给⽤户使⽤。
zookeeper是⼀个典型的分布式数据⼀致性的解决⽅案，分布式应⽤程序可以基于它实现诸如数据订阅/发布、负载均衡、命名服务、集群管理、分布式锁和分布式队列等功能。
zookeeper基本概念集群角色 Zookeeper  中引入...]]></description><category></category></item><item><title><![CDATA[一文详解Spring循环依赖]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117674600</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117674600</guid><author>JacianLiu</author><pubDate>Wed, 16 Dec 2020 23:45:37 +0800</pubDate><description><![CDATA[什么是循环依赖？大家都知道spring的核心是一个实现了AOP的IOC容器，那么IOC容器对于bean的初始化，会遇到以下情况：当BeanA初始化时，它依赖的对象BeanB也需要执行初始化，如果BeanB里也依赖了BeanA,则又会开始执行BeanA的初始化，那么这样会无限循环，导致初始化异常如下所示。



Spring已经很好的解决了这个问题，这个解决方法就是三级缓存。
什么是三级缓存？我们以...]]></description><category></category></item><item><title><![CDATA[IOC容器加载流程]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117674596</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117674596</guid><author>JacianLiu</author><pubDate>Wed, 16 Dec 2020 23:32:03 +0800</pubDate><description><![CDATA[Spring容器的AbstractApplicationContext#refresh()【容器刷新】源码解析；本文只记录大体步骤， 细节部分自行阅读源码；
AbstractApplicationContext#refresh()是IOC容器加载的主要流程，源代码如下


@Override  public void refresh() throws BeansException, Illegal...]]></description><category></category></item><item><title><![CDATA[Spring Bean 生命周期]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117674598</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117674598</guid><author>JacianLiu</author><pubDate>Thu, 19 Nov 2020 12:38:47 +0800</pubDate><description><![CDATA[实例化Bean
设置Bean属性值
判断是否实现BeanNameAware，如果实现调用其setBeanName方法
判断是否实现BeanFactoryAware，如果实现调用其setBeanFactory方法
判断是否实现ApplicationContextAware，如果实现调用其setApplicationContext方法
调用BeanPostProcessor的预初始化方法
判断是否标...]]></description><category></category></item><item><title><![CDATA[MySQL体系架构]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117674591</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117674591</guid><author>JacianLiu</author><pubDate>Sun, 20 Sep 2020 16:09:10 +0800</pubDate><description><![CDATA[Client Connectors(客户端连接层)负责处理客户端的连接请求。几乎支持所有的连接类型。


MySQL Server(服务层)Connection Pool(连接池)：负责处理存储数据库与客户端创建的连接，一个线程负责管理一个连接。它包含了用户认证、连接线程池、连接限制、内存与缓存管理。
Services&amp;utilities(系统管理和控制工具)：管理服务&amp;工具集，...]]></description><category></category></item><item><title><![CDATA[Spring Framework 5.0.x 模块组成、体系结构、整体架构]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117674601</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117674601</guid><author>JacianLiu</author><pubDate>Thu, 03 Sep 2020 14:21:41 +0800</pubDate><description><![CDATA[核心容器(Core Containe)核心容器提供了Spring框架的基本功能，是其它模块建立的基础，有 spring-core、spring-beans、spring-context、spring-context-support和spring-expression(Expression Language、SpEL)组成。spring-beans和spring-core是spring框架的核心模...]]></description><category></category></item><item><title><![CDATA[什么是 IoC？什么是 DI？它们之间是什么关系？]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117674605</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117674605</guid><author>JacianLiu</author><pubDate>Tue, 19 May 2020 16:43:58 +0800</pubDate><description><![CDATA[什么是控制反转(IOC)Ioc—Inversion of Control，即“控制反转”，它是一种设计思想，并不是什么技术；在 Java 中，IOC 意味着将我们设计好的对象交给容器控制，而不是传统的需要时在内部构造直接控制；


谁控制谁？控制了什么？
 谁控制了谁： IoC 控制了对象；
 控制了什么： 主要控制了外部资源的获取，不仅限于对象，包括文件等资源；

什么为正转？什么为反转？
正转...]]></description><category></category></item><item><title><![CDATA[为什么StringBuilder是线程不安全的？StringBuffer是线程安全的？]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117674623</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117674623</guid><author>JacianLiu</author><pubDate>Thu, 19 Sep 2019 18:11:56 +0800</pubDate><description><![CDATA[面试中经常问到的一个问题：StringBuilder和StringBuffer的区别是什么？我们非常自信的说出：StringBuilder是线程不安全的，StirngBuffer是线程安全的面试官：StringBuilder不安全的点在哪儿？这时候估计就哑巴了。。。

分析StringBuffer和StringBuilder的实现内部是和String内部一样的，都是通过 char[]数组的方式；不...]]></description><category></category></item><item><title><![CDATA[Java实践-远程调用Shell脚本并获取输出信息]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117674608</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117674608</guid><author>JacianLiu</author><pubDate>Mon, 09 Sep 2019 18:10:42 +0800</pubDate><description><![CDATA[1、添加依赖&lt;dependency&gt;    &lt;groupId&gt;ch.ethz.ganymed&lt;/groupId&gt;    &lt;artifactId&gt;ganymed-ssh2&lt;/artifactId&gt;    &lt;version&gt;262&lt;/version&gt;&lt;/dependency&gt;&lt;dependency&g...]]></description><category></category></item><item><title><![CDATA[浅谈关于SQL优化的思路]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117674604</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117674604</guid><author>JacianLiu</author><pubDate>Thu, 05 Sep 2019 23:53:52 +0800</pubDate><description><![CDATA[零、为什么要优化
系统的吞吐量瓶颈往往出现在数据库的访问速度上
随着应用程序的运行，数据库的中的数据会越来越多，处理时间会相应变慢
数据是存放在磁盘上的，读写速度无法和内存相比



一、观察MySQL优化≠SQL语句优化，理解这一点非常重要，虽然大部分时候我们都在调优SQL语句。
然而，MySQL的优化却是始于观察，而且有时候观察几分钟，几小时就能得出结论的，可能要观察一天以上。
这么做的目的很...]]></description><category></category></item><item><title><![CDATA[Docker搭建Zookeeper&Kafka集群]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117674606</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117674606</guid><author>JacianLiu</author><pubDate>Tue, 27 Aug 2019 13:29:04 +0800</pubDate><description><![CDATA[前排提示：最新的docker-compole.yml请去github获取，README有相应的操作步骤。Github地址：https://github.com/JacianLiu/docker-compose

最近在学习Kafka，准备测试集群状态的时候感觉无论是开三台虚拟机或者在一台虚拟机开辟三个不同的端口号都太麻烦了(嗯。。主要是懒)。



环境准备一台可以上网且有CentOS7虚拟机的电...]]></description><category></category></item><item><title><![CDATA[链表]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117674603</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117674603</guid><author>JacianLiu</author><pubDate>Sun, 25 Aug 2019 13:50:30 +0800</pubDate><description><![CDATA[开篇问题问题：如何用链表来实现 LRU 缓存淘汰策略呢？
## 链表的作用

链表一个经典的应用场景就是LRU缓存淘汰算法；
缓存是一种提高数据读取性能的技术，在开发中有着非常广泛的应用，由于缓存的大小有限，当缓存被占满时，哪些数据应该被清理，哪些数据应该被保留？这就需要淘汰策略来决定，常见的淘汰策略有三种：先进先出策略FIFO(First In, First Out)、最少使用策略LFU(Lea...]]></description><category></category></item><item><title><![CDATA[记录一次由于线程使用不当引发的血案]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117674617</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117674617</guid><author>JacianLiu</author><pubDate>Tue, 20 Aug 2019 21:53:47 +0800</pubDate><description><![CDATA[背景最近给第三方做了一个接口，接口的作用是接收数据对数据进行验证之后通过kafka推送到模型进行数据处理，最终通过kafka接收模型的数据，开始只做了一个异步的接口，由于对方业务原因需要一个同步的接口传输数据，但是每当运行一段时间之后程序就会进入假死状态，接口无法正常调用；


同步接口同步接口的实现是使用阻塞Map，当对方发送请求时，对数据进行验证，然后推送到模型，等待结果返回之后将处理好的数据...]]></description><category></category></item><item><title><![CDATA[数组]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117674614</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117674614</guid><author>JacianLiu</author><pubDate>Tue, 20 Aug 2019 09:33:49 +0800</pubDate><description><![CDATA[问题：为什么数组下标是从0开始，而不是从1开始；
### 什么是数组？

数组是一种线性表数据结构，它用一组连续的内存空间来存储一组相同类型的数据。


线性表结构：数据排成一条线一样的结构，每个线性表上最多只有前和后两个方向，除数组外，链表、队列、栈也是线性结构。

非线性结构：比如：二叉树、图、堆等，在非线性结构中，数据之间并不是简单的前后关系。

连续的内存空间和相同类型的数据：正式因为这两...]]></description><category></category></item><item><title><![CDATA[基于Hexo&GitHub从零搭建个人博客]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117674612</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117674612</guid><author>JacianLiu</author><pubDate>Mon, 19 Aug 2019 15:57:27 +0800</pubDate><description><![CDATA[现在越来越多的人喜欢利用Github搭建静态网站，原因不外乎简单省钱。本人也利用hexo+github搭建了本博客，用于分享一些心得。在此过程中，折腾博客的各种配置以及功能占具了我一部分时间，在此详细记录下我是如何利用hexo+github搭建静态博客以及一些配置相关问题，以免过后遗忘，且当备份之用。




准备工作
下载&amp;安装node.js，默认会安装npm：https://nodej...]]></description><category></category></item><item><title><![CDATA[基于Netty-SocketIO的主动推送服务]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117674619</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117674619</guid><author>JacianLiu</author><pubDate>Sat, 13 Jul 2019 22:59:00 +0800</pubDate><description><![CDATA[背景前端时间，公司开发了一款主动服务的机器人的程序，讲产生的消息通过服务端主动推送到客户端(H5、IOS、Android)，支持用户的个性化开关设置，用户可自由选择接受的消息类型；同时支持用户主动提问；在此记录下整个部署以及实现的大致思路；

同时感谢我的Leader给予的帮助。



部署Nginx配置
为了保持长连接有效，配置HTTP版本1.1；
配置Upgrade和Connection响应头...]]></description><category></category></item><item><title><![CDATA[Joda Time使用小结]]></title><link>https://blog.youkuaiyun.com/JacianLiu/article/details/117674611</link><guid>https://blog.youkuaiyun.com/JacianLiu/article/details/117674611</guid><author>JacianLiu</author><pubDate>Thu, 13 Jun 2019 17:39:06 +0800</pubDate><description><![CDATA[一、Joda Time基础操作

1、 构造指定时间// 明确给出年月日时分秒,同时还可以指定毫秒DateTime dateTime = new DateTime(2017,9,14,20,30,0);  // 使用时间戳构造Datetime dateTime = new DateTime(1505371053358L);// 使用字符串构造，使用字符串构造需要自己定义patternString ...]]></description><category></category></item></channel></rss>