<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[EnjoyFight的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/EnjoyFight</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; EnjoyFight]]></copyright><item><title><![CDATA[zookeeper两大核心概念以及节点操作]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/127945773</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/127945773</guid><author>EnjoyFight</author><pubDate>Sun, 20 Nov 2022 13:37:46 +0800</pubDate><description><![CDATA[通常情况 下，单个物理节点很容易达到性能，计算或者容量的瓶颈，所以这个时候就需要多个物理节点来共同完成某项任务，一个分布式系统的本质是分布在不同网络或计算机上的程序组件，彼此通过信息传递来协同工作的系统，而Zookeeper正是一个分布式应用协调框架，在分布式系统架构中有广泛的应用场景扩展点：集群和分布式的区别：分布式不一定就是不同的组件，同一个组件也可以，关键在于是否通过交换信息的方式进行协作。比如说Zookeeper的节点都是对等的，但它自己就构成一个分布式系统。]]></description><category></category></item><item><title><![CDATA[Redis的缓存与数据库双写不一致问题]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/127940406</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/127940406</guid><author>EnjoyFight</author><pubDate>Sat, 19 Nov 2022 20:47:04 +0800</pubDate><description><![CDATA[①假设我们有10次写，若是更新缓存的话需要更新10次缓存，10次数据库，我们优化为只需要删除一次缓存，更新10次数据库，当有一个读请求过来只是没有命中，去数据库读取一下，这样对性能的影响也不是很大；②这是 一个。]]></description><category></category></item><item><title><![CDATA[Redis缓存穿透、缓存雪崩和缓存击穿]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/127938139</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/127938139</guid><author>EnjoyFight</author><pubDate>Sat, 19 Nov 2022 17:11:56 +0800</pubDate><description><![CDATA[Redis 缓存的使用，极大的提升了应用程序的性能和效率，特别是数据查询方面。但同时，它也带了一些问题。数据一致性的问题，从严格意义上讲，这个问题无解。如果对数据的一致性要求很高，那么不能使用缓存。另外一些典型的问题就是，缓存穿透、缓存雪崩、缓存击穿。]]></description><category></category></item><item><title><![CDATA[redisson的知识点]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/127879186</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/127879186</guid><author>EnjoyFight</author><pubDate>Wed, 16 Nov 2022 13:29:29 +0800</pubDate><description><![CDATA[Redisson是一个在Redis的基础上实现的Java驻内存数据网格（In-Memory Data Grid）。它不仅提供了一系列的分布式的Java常用对象，还提供了许多分布式服务。Redisson提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离，从而让使用者能够将精力更集中地放在处理业务逻辑上。Redisson和jedis以及lettuce一样都是redis客户端，只不过Redisson功能更强大。]]></description><category></category></item><item><title><![CDATA[Redis缓存高可用集群]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/127850683</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/127850683</guid><author>EnjoyFight</author><pubDate>Tue, 15 Nov 2022 16:36:13 +0800</pubDate><description><![CDATA[奇数个master节点可以在满足选举该条件的基础上节省一个节点，比如三个master节点和四个master节点的集群相比，大家如果都挂了一个master节点都能选举新master节点，如果都挂了两个master节点都没法选举新master节点了，所以。，如果master节点异常，则会做主从切换，将某一台slave作为master，哨兵的配置略微复杂，并且性能和高可用性等各方面表现一般，特别是在主从切换的瞬间存在访问瞬断的情况，而且。真实世界的机房网络往往并不是风平浪静的，它们经常会发生各种各样的小问题。]]></description><category></category></item><item><title><![CDATA[Jedis简单实例、Jedis管道操作以及Lua脚本]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/127808971</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/127808971</guid><author>EnjoyFight</author><pubDate>Fri, 11 Nov 2022 17:49:00 +0800</pubDate><description><![CDATA[其中 “return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}” 是被求值的Lua脚本，数字2指定了键名参数的数量， key1和key2是键名参数，分别使用 KEYS[1] 和 KEYS[2] 访问，而最后的 first 和 second 则是附加参数，可以通过 ARGV[1] 和 ARGV[2] 访问它们。：redis自带的事务功能很鸡肋，而redis的lua脚本几乎实现了常规的事务功能，官方推荐如果要使用redis的事务功能可以用redis lua替代。]]></description><category></category></item><item><title><![CDATA[Redis的主从架构以及哨兵高可用架构]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/127802587</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/127802587</guid><author>EnjoyFight</author><pubDate>Fri, 11 Nov 2022 15:47:04 +0800</pubDate><description><![CDATA[​ 当我们使用主从复制时，从库宕机依然可以将请求发送给主库或者其他从库，但是 Master 宕机，只能响应读操作，写请求无法再执行。所以主从复制架构面临一个严峻问题，主库挂了，无法执行「写操作」，无法自动选择一个 Slave 切换为 Master，也就是无法故障自动切换。​ 哨兵是Redis的高可用性解决方案：由一个或多个Sentinel实例组成的Sentinel系统，可以监视任意多个主服务器，以及这些主服务器属下的所有从服务器，并在被监视的主服务器进入下线状态时，]]></description><category></category></item><item><title><![CDATA[Redis持久化]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/127752430</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/127752430</guid><author>EnjoyFight</author><pubDate>Tue, 08 Nov 2022 19:38:28 +0800</pubDate><description><![CDATA[如果开启了混合持久化，AOF在重写时，不再是单纯将内存数据转换为RESP命令写入AOF文件，而是将重写这一刻之前的内存做RDB快照处理，并且将RDB快照内容和增量的AOF修改内存数据的命令存在一起，都写入新的AOF文件，新的文件一开始不叫appendonly.aof，等到重写完新的AOF文件才会进行改名，覆盖原有的AOF文件，完成新旧两个AOF文件的替换。AOF重写是当我们给aof文件写了很多命令的时候，发现有一部分命令其实很冗余，占用的内存空间比较大，可以使用另外一些少部分命令去代替它，]]></description><category></category></item><item><title><![CDATA[Redis核心数据结构应用场景与高性能原理刨析]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/127734051</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/127734051</guid><author>EnjoyFight</author><pubDate>Mon, 07 Nov 2022 23:44:42 +0800</pubDate><description><![CDATA[但是scan并非完美无瑕， 如果在scan的过程中如果有键的变化（增加、 删除、 修改） ，那 么遍历效果可能会碰到如下问题： 新增的键可能没有遍历到， 遍历出了重复的键等情况， 也就是说 scan并不能保证完整的遍历出来所有的键， 这些是我们在开发时需要考虑的。我们平时说的Redis单线程其实是是指从其它端发送给Redis的IO操作都是由一个线程来完成的，外部访问Redis时，Redis会将这些命令排好序，然后一个一个执行。其实严格意义上来说，Redis不是单线程的，比如Redis的。]]></description><category></category></item><item><title><![CDATA[Collections之HashMap知识点]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/127517598</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/127517598</guid><author>EnjoyFight</author><pubDate>Tue, 25 Oct 2022 19:10:28 +0800</pubDate><description><![CDATA[2、hashmap初始容量值的修改

先给出结论，我们在上面初始化了一个Hashmap的初始容量为11，但是它的初始化容量不是11，而是16，具体分析如下：
由上述的源码可知，当Java发现我们传入的toSize不是2的n次幂时，hashmap会自动帮我们将初始值转化为大于初始值toSize并且最接近toSize的2的n次幂。
hashmap初始化容量为什么要是2的n次幂呢？
假如数组length=16，hashcode经过运算后的结果应该是0~15；同时我们都知道，位运算会比四则运算快很多，所以我们选择位]]></description><category></category></item><item><title><![CDATA[Mysql的Explain详解]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/127466025</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/127466025</guid><author>EnjoyFight</author><pubDate>Sat, 22 Oct 2022 19:40:06 +0800</pubDate><description><![CDATA[使用EXPLAIN关键字可以模拟优化器执行SQL语句，分析你的查询语句或是结构的性能瓶颈。在 select 语句之前增加 explain 关键字，MySQL 会在查询上设置一个标记，执行查询会返回执行计划的信息，而不是 执行这条SQL。就比如下面这个：explain 的语句后面也可以跟一个 show warnings;]]></description><category></category></item><item><title><![CDATA[MySQL索引与存储引擎]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/127462388</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/127462388</guid><author>EnjoyFight</author><pubDate>Sat, 22 Oct 2022 17:02:47 +0800</pubDate><description><![CDATA[在使用这种数据结构时，就相当于是将数据简单排了个序，可以减少查找数据的次数。（3）]]></description><category></category></item><item><title><![CDATA[synchronized详解]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/127457876</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/127457876</guid><author>EnjoyFight</author><pubDate>Sat, 22 Oct 2022 13:15:29 +0800</pubDate><description><![CDATA[也就是当一个对象只有一个线程进行访问时，它的锁就是偏向锁。]]></description><category></category></item><item><title><![CDATA[CPU缓存一致性协议MESI]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/127416577</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/127416577</guid><author>EnjoyFight</author><pubDate>Wed, 19 Oct 2022 22:41:04 +0800</pubDate><description><![CDATA[现在的计算机一般都是多CPU多核的，所以就会出现多个CPU或者多个核在同一时间访问同一个变量的情况，缓存一致性协议就是来解决当多个核同时对一个变量进行操作的时候，保证数据一致性的问题。CPU缓存系统中是以缓存行（cache line）为单位存储的。目前主流的CPU Cache 的 Cache Line 大小都是64Bytes。在多线程情况下，如果需要修改“共享同一个缓存行的变 量”，就会无意中影响彼此的性能，这就是伪共享（False Sharing）。]]></description><category></category></item><item><title><![CDATA[volatile详解]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/127413880</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/127413880</guid><author>EnjoyFight</author><pubDate>Wed, 19 Oct 2022 20:22:09 +0800</pubDate><description><![CDATA[操作并不具备原子性，该操作是先读取值，然后写回一个新值，相当于原来的值加上1，分两步完成，如果第二个线程在第一个线程读取旧值和写回新值期间读取i的域值，那么第二个线程就会与第一个线程一起看到同一个值，并执行相同值的加1操作，这也就造成了线程安全失败，因此对于increase方法必须使用synchronized修饰，以便保证线程安全，需要注意的是一旦使用synchronized修饰方法后，由于。上面的这些规则呢，主要就是防止在多线程的环境下，指令重排给我们带来的不一定的结果，自己理解着记忆吧。]]></description><category></category></item><item><title><![CDATA[JMM&并发编程的三大问题]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/127398697</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/127398697</guid><author>EnjoyFight</author><pubDate>Wed, 19 Oct 2022 18:56:35 +0800</pubDate><description><![CDATA[并发编程之JMM&并发编程的三大问题]]></description><category></category></item><item><title><![CDATA[操作系统底层的整体认识]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/127395635</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/127395635</guid><author>EnjoyFight</author><pubDate>Tue, 18 Oct 2022 21:59:47 +0800</pubDate><description><![CDATA[通过操作系统的底层整体认识，更好地了解JAVA的并发编程]]></description><category></category></item><item><title><![CDATA[Mybatis出现的一些问题]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/123723430</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/123723430</guid><author>EnjoyFight</author><pubDate>Thu, 24 Mar 2022 22:33:20 +0800</pubDate><description><![CDATA[一、某些功能用不了
我当时用的时候查询功能可以使用，但是增加功能却用不了
最后的解决方案
        &lt;dependency&gt;
            &lt;groupId&gt;mysql&lt;/groupId&gt;
            &lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt;
            &lt;version&gt;8.0.15&lt;/version&gt;
        &lt;/de]]></description><category></category></item><item><title><![CDATA[十大排序算法笔记(C语言)（二）归并排序、堆排序、计数排序、桶排序、基数排序]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/120973975</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/120973975</guid><author>EnjoyFight</author><pubDate>Sun, 31 Oct 2021 20:11:06 +0800</pubDate><description><![CDATA[排序算法
最好情况
最坏情况
平均时间复杂度
空间复杂度
稳定性




归并排序
O(n*logn)
O(n*logn)
O(n*logn)
O(n)
稳定


堆排序
O(n*logn)
O(n*logn)
O(n*logn)
O(1)
不稳定


计数排序
O(n+k)
O(n+k)
O(n+k)
O(k)
稳定


桶排序
O(n^2)
O(n+k)
O(n+k)
O(n+k)
稳定


基数排序
O(n*k)
O(n*k)
O(n*k)
O(n+k)
稳定



文章目录一、归并排序1.1...]]></description><category></category></item><item><title><![CDATA[十大排序算法笔记（C语言）（一）选择排序、冒泡排序、插入排序、希尔排序、快速排序]]></title><link>https://blog.youkuaiyun.com/EnjoyFight/article/details/120922060</link><guid>https://blog.youkuaiyun.com/EnjoyFight/article/details/120922060</guid><author>EnjoyFight</author><pubDate>Mon, 25 Oct 2021 20:38:38 +0800</pubDate><description><![CDATA[排序算法
最好情况
最坏情况
平均时间负责度
空间复杂度
稳定性




选择排序
O(n^2)
O(n^2)
O(n^2)
O(1)
不稳定


冒泡排序
O(n)
O(n^2)
O(n^2)
O(1)
稳定


插入排序
O(n)
O(n^2)
O(n^2)
O(1)
稳定


希尔排序
O(n*logn^2)
O(n*logn^2)
O(n*logn)
O(1)
不稳定


快速排序
O(n*logn)
O(n^2)
O(n*logn)
O(logn)
不稳定



文章目录一、选择排序1、选...]]></description><category></category></item></channel></rss>