<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[syilt的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/syilt</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; syilt]]></copyright><item><title><![CDATA[Redis5.0数据淘汰策略]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/107801330</link><guid>https://blog.youkuaiyun.com/syilt/article/details/107801330</guid><author>syilt</author><pubDate>Tue, 04 Aug 2020 22:02:50 +0800</pubDate><description><![CDATA[redis5.0为我们提供了八个不同的内存置换策略。很早之前提供了6种。



（1）volatile-lru：从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。

（2）volatile-ttl：从已设置过期时间的数据集中挑选将要过期的数据淘汰。

（3）volatile-random：从已设置过期时间的数据集中任意选择数据淘汰。

（4）volatile-lfu：从已设置过期时间的数据集挑选使用频率最低的数据淘汰。

（5）allkeys-lru：从数据集中挑选最近最少使用的数据淘汰

（6）al.]]></description><category></category></item><item><title><![CDATA[Redis 持久化机制]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/107734438</link><guid>https://blog.youkuaiyun.com/syilt/article/details/107734438</guid><author>syilt</author><pubDate>Sat, 01 Aug 2020 17:56:44 +0800</pubDate><description><![CDATA[Redis是一种高级key-value数据库。数据可以持久化，而且支持的数据类型很丰富。有字符串，链表，集 合和有序集合。支持在服务器端计算集合的并，交和补集(difference)等，还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务器。

Redis为了保证效率，数据缓存在内存中，Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件，以保证数据的持久化。

Redis是一个支持持久化的内存数据库，可以将内存中的数据同步到磁盘保证持久化。

Redis的持久化策略：2种]]></description><category></category></item><item><title><![CDATA[Zookeeper分布式锁]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/107734213</link><guid>https://blog.youkuaiyun.com/syilt/article/details/107734213</guid><author>syilt</author><pubDate>Sat, 01 Aug 2020 17:45:05 +0800</pubDate><description><![CDATA[1.获取锁

首先，在Zookeeper当中创建一个持久节点ParentLock。当第一个客户端想要获得锁时，需要在ParentLock这个节点下面创建一个临时顺序节点Lock1。





之后，Client1查找ParentLock下面所有的临时顺序节点并排序，判断自己所创建的节点Lock1是不是顺序最靠前的一个。如果是第一个节点，则成功获得锁。





这时候，如果再有一个客户端Client2前来获取锁，则在ParentLock下载再创建一个临时顺序节点Lock2。







Cl...]]></description><category></category></item><item><title><![CDATA[mysql:Explain执行计划]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/107723574</link><guid>https://blog.youkuaiyun.com/syilt/article/details/107723574</guid><author>syilt</author><pubDate>Sat, 01 Aug 2020 00:09:09 +0800</pubDate><description><![CDATA[Explain有什么用

当Explain与SQL语句一起使用时，MySQL会显示来自优化器关于SQL执行的信息。也就是说，MySQL解释了它将如何处理该语句，包括如何连接表以及什么顺序连接表等。


	表的加载顺序
	
	
	sql的查询类型
	
	
	可能用到哪些索引，哪些索引又被实际使用
	
	
	表与表之间的引用关系
	
	
	一个表中有多少行被优化器查询 .....
	


Explain有哪些信息

Explain执行计划包含字段信息如下：分别是id、select_type、tab...]]></description><category></category></item><item><title><![CDATA[mysql:MVCC的实现原理]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/107647007</link><guid>https://blog.youkuaiyun.com/syilt/article/details/107647007</guid><author>syilt</author><pubDate>Tue, 28 Jul 2020 22:28:08 +0800</pubDate><description><![CDATA[MVCC，中文叫多版本并发控制，它是通过读取历史版本的数据，来降低并发事务冲突，从而提高并发性能的一种机制。它的实现依赖于隐式字段、undo日志、快照读&amp;当前读、Read View，因此，我们先来了解这几个知识点。

隐式字段

对于InnoDB存储引擎，每一行记录都有两个隐藏列DB_TRX_ID、DB_ROLL_PTR，如果表中没有主键和非NULL唯一键时，则还会有第三个隐藏的主键列DB_ROW_ID。

DB_TRX_ID，记录每一行最近一次修改（修改/更新）它的事务ID，大小为6字节；
	DB]]></description><category></category></item><item><title><![CDATA[JMM 内存间交互操作]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/107550734</link><guid>https://blog.youkuaiyun.com/syilt/article/details/107550734</guid><author>syilt</author><pubDate>Thu, 23 Jul 2020 23:37:45 +0800</pubDate><description><![CDATA[Java内存模型规定了所有的变量都存储在主存中，每个线程都有自己的工作内存，工作内存中保存了该线程要用到的主存中变量的副本，线程对变量的操作都是在工作内存中完成，不能直接操作主存，线程之间也无法直接访问其他线程的工作内存，线程间变量值的传递需要通过主存来完成，这就涉及到了主存与工作内存间的交互操作。

Java内存模型中定义了8种操作来完成，虚拟机保证了每种操作都是原子的。

lock（锁定）：作用于主存的变量，把一个变量标识为一条线程独占状态。
	unlock（解锁）：作用于主存变量，把一个处于锁定状态的]]></description><category></category></item><item><title><![CDATA[JVM:System.gc]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/107550240</link><guid>https://blog.youkuaiyun.com/syilt/article/details/107550240</guid><author>syilt</author><pubDate>Thu, 23 Jul 2020 23:05:45 +0800</pubDate><description><![CDATA[当我们调用System.gc()的时候，其实并不会马上进行垃圾回收，甚至不一定会执行垃圾回收，查看系统源码可以看到


     /**
     * Indicates to the VM that it would be a good time to run the
     * garbage collector. Note that this is a hint only. There is no guarantee
     * that the garbage collector will ac]]></description><category></category></item><item><title><![CDATA[JVM:对象什么时候会进入老年代]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/107525985</link><guid>https://blog.youkuaiyun.com/syilt/article/details/107525985</guid><author>syilt</author><pubDate>Wed, 22 Jul 2020 23:24:55 +0800</pubDate><description><![CDATA[JVM堆中有新生代、老年代两块区域，因为使用分代回收策略新生代还会划分为Eden和两个Survivor区，JVM堆大概是这样子：



程序运行过程中新产生的对象都会分配在Eden区，随着时间的推移Eden区也是会满的，那么这个时候就会进行Minor GC进行清理，清理过程有的对象被清除，有的对象会继续存活下去。那Java对象啥时候会进入老年代呢？

根据对象年龄

JVM会给对象增加一个年龄（age）的计数器，对象每“熬过”一次GC，年龄就要+1，待对象到达设置的阈值（默认为15岁）就会被移移动到老年代.]]></description><category></category></item><item><title><![CDATA[JVM: G1和CMS的区别]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/107525396</link><guid>https://blog.youkuaiyun.com/syilt/article/details/107525396</guid><author>syilt</author><pubDate>Wed, 22 Jul 2020 22:55:24 +0800</pubDate><description><![CDATA[CMS：以获取最短回收停顿时间为目标的收集器，基于并发“标记清理”实现

过程：

1、初始标记：独占PUC，需要STW(Stop the world)，仅标记GCroots能直接关联的对象，速度很快。

2、并发标记：可以和用户线程并行执行，无需STW，标记所有可达对象

3、重新标记：独占CPU(STW)，为了修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录。
这个阶段的停顿时间一般会比初始标记阶段稍长一些，但远比并发标记的时间要短。

4、并发清理：可以和用户线程并行执行，]]></description><category></category></item><item><title><![CDATA[线程池的三种队列区别：SynchronousQueue、LinkedBlockingQueue 和ArrayBlockingQueue]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/106739222</link><guid>https://blog.youkuaiyun.com/syilt/article/details/106739222</guid><author>syilt</author><pubDate>Sat, 13 Jun 2020 22:24:08 +0800</pubDate><description><![CDATA[1.SynchronousQueue


SynchronousQueue没有容量，是无缓冲等待队列，是一个不存储元素的阻塞队列，会直接将任务交给消费者，必须等队列中的添加元素被消费后才能继续添加新的元素。

拥有公平（FIFO）和非公平(LIFO)策略，非公平侧罗会导致一些数据永远无法被消费的情况？

使用SynchronousQueue阻塞队列一般要求maximumPoolSizes为无界(Integer.MAX_VALUE)，避免线程拒绝执行操作。

2.LinkedBlockingQueue

..]]></description><category></category></item><item><title><![CDATA[JAVA中的五种线程池，四种拒绝策略，三种阻塞队列]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/106739156</link><guid>https://blog.youkuaiyun.com/syilt/article/details/106739156</guid><author>syilt</author><pubDate>Sat, 13 Jun 2020 22:19:14 +0800</pubDate><description><![CDATA[三种阻塞队列：
BlockingQueue&lt;Runnable&gt; workQueue = null;
workQueue = new ArrayBlockingQueue&lt;&gt;(5);//基于数组的先进先出队列，有界
workQueue = new LinkedBlockingQueue&lt;&gt;();//基于链表的先进先出队列，无界
workQueue = new SynchronousQueue&lt;&gt;();//无缓冲的等待队列，无界
四...]]></description><category></category></item><item><title><![CDATA[HashSet实现原理]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/106580077</link><guid>https://blog.youkuaiyun.com/syilt/article/details/106580077</guid><author>syilt</author><pubDate>Fri, 05 Jun 2020 23:15:06 +0800</pubDate><description><![CDATA[1.是基于HashMap实现的，默认构造函数是构建一个初始容量为16，负载因子为0.75 的HashMap。封装了一个 HashMap 对象来存储所有的集合元素，所有放入 HashSet 中的集合元素实际上由 HashMap 的 key 来保存，而 HashMap 的 value 则存储了一个 PRESENT，它是一个静态的 Object 对象。

2.当我们试图把某个类的对象当成 HashMap的 key，或试图将这个类的对象放入 HashSet 中保存时，重写该类的equals(Object obj)方]]></description><category></category></item><item><title><![CDATA[Enumeration接口和Iterator接口的区别]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/106579885</link><guid>https://blog.youkuaiyun.com/syilt/article/details/106579885</guid><author>syilt</author><pubDate>Fri, 05 Jun 2020 23:03:28 +0800</pubDate><description><![CDATA[Enumeration速度是Iterator的2倍，同时占用更少的内存。但是，Iterator远远比Enumeration安全，因为其他线程不能够修改正在被iterator遍历的集合里面的对象。同时，Iterator允许调用者删除底层集合里面的元素，Enumeration不行。

函数接口不同：

Enumeration只有2个函数接口。通过Enumeration，我们只能读取集合的数据，而不能对数据进行修改。
Iterator只有3个函数接口。Iterator除了能读取集合的数据之外，也能数据进...]]></description><category></category></item><item><title><![CDATA[JAVA锁有哪些种类，以及区别]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/106482544</link><guid>https://blog.youkuaiyun.com/syilt/article/details/106482544</guid><author>syilt</author><pubDate>Mon, 01 Jun 2020 21:45:06 +0800</pubDate><description><![CDATA[JAVA会涉及各种各样锁如公平锁，乐观锁等等，这篇文章介绍各种锁的分类。介绍的内容如下：

公平锁/非公平锁
	可重入锁
	独享锁/共享锁
	互斥锁/读写锁
	乐观锁/悲观锁
	分段锁
	偏向锁/轻量级锁/重量级锁
	自旋锁
公平锁/非公平锁

公平锁是指多个线程按照申请锁的顺序来获取锁。
非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序，有可能后申请的线程比先申请的线程优先获取锁。有可能，会造成优先级反转或者饥饿现象。
对于JavaReentrantLock而言，通过构造函数指定该锁是否是公平锁，.]]></description><category></category></item><item><title><![CDATA[Java注解的理解]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/106482148</link><guid>https://blog.youkuaiyun.com/syilt/article/details/106482148</guid><author>syilt</author><pubDate>Mon, 01 Jun 2020 21:33:10 +0800</pubDate><description><![CDATA[java注解：

注解，也叫元数据。可以声明在包、类、字段、方法、局部变量、方法参数等前面，来对这些元素进行说明，注释等。

元注解：

java提供了四个元注解，所谓元注解就是负责注解其他注解。

1.@Target ：规定注解所修饰的对象范围。

ElementType.CONSTRUCTIR; 构造器声明
ElementType.FIELD; 成员变量，对象，属性（包括enum实例）
ElementType.LOCAL_VARIABLE; 局部变量声明
ElementType.METHOD ; 方法声]]></description><category></category></item><item><title><![CDATA[Spring boot集成@Retryable实现重连机制]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/105385185</link><guid>https://blog.youkuaiyun.com/syilt/article/details/105385185</guid><author>syilt</author><pubDate>Wed, 08 Apr 2020 12:49:30 +0800</pubDate><description><![CDATA[1.pom引入相关依赖：


		&lt;dependency&gt;
			&lt;groupId&gt;org.springframework.retry&lt;/groupId&gt;
			&lt;artifactId&gt;spring-retry&lt;/artifactId&gt;
		&lt;/dependency&gt;

2.在启动类加入：@EnableRetry注解


3....]]></description><category></category></item><item><title><![CDATA[在Spring boot中使用@Async注解]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/104741876</link><guid>https://blog.youkuaiyun.com/syilt/article/details/104741876</guid><author>syilt</author><pubDate>Sun, 08 Mar 2020 22:06:14 +0800</pubDate><description><![CDATA[@Async顾名思义就是异步调用的意思，使用线程

在Spring boot中使用方便。

1.在启动类加入@EnableAsync注解



/**
 * springboot启动器
 * @author zsy
 */
@EnableAsync
@MapperScan(basePackages = "com.ismartgo.*.mapper")
@SpringBootApplication...]]></description><category></category></item><item><title><![CDATA[Spring Cloud Feign的继承特性]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/102470638</link><guid>https://blog.youkuaiyun.com/syilt/article/details/102470638</guid><author>syilt</author><pubDate>Wed, 09 Oct 2019 21:55:11 +0800</pubDate><description><![CDATA[SpringCloudFeign提供了继承特性，可以进一步减少编码量，并提高可读性。

创建api工程：

命名为hello-service-api

pom.xml文件


&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xs...]]></description><category></category></item><item><title><![CDATA[Spring cloud初识Feign]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/102413893</link><guid>https://blog.youkuaiyun.com/syilt/article/details/102413893</guid><author>syilt</author><pubDate>Tue, 08 Oct 2019 21:56:22 +0800</pubDate><description><![CDATA[fegin整合了hystrix和ribbon。在ribbon中我们通过使用RestTemplate来实现对远程服务的调用，但是在代码的编写上并不美观，Spring Cloud给出了另一套方案，也即是本篇中提到的Feign，Spring Cloud Feign 是基于Netflix Feign 实现的。

下面通过搭建一个通过feign调用服务的例子：

服务提供方：

pom.xml:


&lt...]]></description><category></category></item><item><title><![CDATA[SpringBoot根据响应状态跳转到自定义页面]]></title><link>https://blog.youkuaiyun.com/syilt/article/details/100556552</link><guid>https://blog.youkuaiyun.com/syilt/article/details/100556552</guid><author>syilt</author><pubDate>Thu, 05 Sep 2019 13:58:29 +0800</pubDate><description><![CDATA[在启动类注册相关bean


 @Bean
 public EmbeddedServletContainerCustomizer containerCustomizer() {

   return new EmbeddedServletContainerCustomizer() {
     @Override
     public void ...]]></description><category></category></item></channel></rss>