<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[不要总是等明天再开始]]></title><description><![CDATA[每天进步一点点就够了]]></description><link>https://blog.youkuaiyun.com/qq_34528297</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_34528297]]></copyright><item><title><![CDATA[并发编程——彻底掌握CountDownLatch，CyclicBarrier和Semaphore]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/108210574</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/108210574</guid><author>qq_34528297</author><pubDate>Mon, 24 Aug 2020 22:56:18 +0800</pubDate><description><![CDATA[这里写目录标题一级目录二级目录三级目录CountDownLatchCyclicBarrier 作用代码实例演示实现原理解析Semaphore代码示例演示
一级目录
二级目录
三级目录
CountDownLatch
见前一篇:并发编程——一文看尽CountDownLatch原理
CyclicBarrier 作用
CountDownLatch是某个线程A执行的过程中，等待其他的一个或多个线程全部执行完毕，线程A再继续执行当前的流程，起到一个同步等待的作用。
CyclicBarrier(循环壁垒)同样起到一个同步]]></description><category></category></item><item><title><![CDATA[并发编程——一文看尽CountDownLatch原理]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/108177728</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/108177728</guid><author>qq_34528297</author><pubDate>Sun, 23 Aug 2020 00:16:05 +0800</pubDate><description><![CDATA[这里写目录标题一级目录二级目录三级目录CountDownLatch实际例子源码解析
一级目录
二级目录
三级目录
CountDownLatch
CountDownLatch是一个同步辅助类，允许一个线程等待其他线程执行完毕再继续执行。比如现在有一个线程0在执行任务A，执行任务过程中需要等待其他线程1、线程2等先完成任务B任务C的执行，那么线程0会暂停任务A的执行，线程0阻塞，等到线程1线程2执行完毕时线程0才会继续执行。
CountDownLatch使用AQS实现线程同步，初始化时要设置一个count，表示]]></description><category></category></item><item><title><![CDATA[MySQL——主从模式原理解析到基本配置]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/108016872</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/108016872</guid><author>qq_34528297</author><pubDate>Sat, 15 Aug 2020 01:08:04 +0800</pubDate><description><![CDATA[1. 什么是MySQL主从模式
先看一张图：

其实原理和服务的主从模式一致，一个master配多个slave。
MySQL主从模式的好处主要有：

数据备份，提高数据安全性
读写分离，master负责业务的写请求，slaver负责业务中的读请求。提高系统吞吐量
架构拓展，单机的I/O能力 网络资源 CPU都是有限的，通过主从可以让从库来分担读请求。

2. MySQL主从模式的原理

binlog: binary log 它是主库记录所有更新操作（增删改）日志的二进制日志文件，是主从模式的基础。
MySQ]]></description><category></category></item><item><title><![CDATA[MySQL引擎——从B树到InnoDB、MyISAM全面分析]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/108016521</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/108016521</guid><author>qq_34528297</author><pubDate>Sat, 15 Aug 2020 00:27:29 +0800</pubDate><description><![CDATA[这里写目录标题1. 树1.1B树1.2 B-树1.3  B+树1.4 B*树1.5 小结2. 操作系统相关知识3. MyISAM和InnoDB4. 索引5. 索引优化
了解MySQL的存储引擎才能知道MySQL的存储原理、索引原理，知其然需知其所以然。
1. 树
深入学习之前先了解一下B树 B-树 B+树 B*树。
1.1B树
B树其实就是二叉搜索树，每个非叶子结点最多只有两个子节点。右子节点比父节点大，左子节点比父节点小。

搜索原理：从根节点开始，如果比根节点大则进入右子节点查询，如果比根节点小则进入左]]></description><category></category></item><item><title><![CDATA[Redis（六）——限流算法：滑动时间窗口限流和漏斗限流]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/107987048</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/107987048</guid><author>qq_34528297</author><pubDate>Thu, 13 Aug 2020 18:27:50 +0800</pubDate><description><![CDATA[本文主要总结自《redis深度历险》
限流的意义
限流一般是指在一个时间窗口内对某些操作请求的数量进行限制，比如一个论坛限制用户每秒钟只能发一个帖子，每秒钟只能回复5个帖子。限流可以保证系统的稳定，限制恶意请求，防止因为流量暴增导致系统瘫痪宕机。常用的限流算法有：滑动窗口、漏斗以及令牌桶。
滑动窗口算法rolling Window
以限制用户行为为例子，比如一秒内进行某个操作50次，这种行为应该进行限制。
滑动窗口就是记录一个滑动的时间窗口内的操作次数，操作次数超过阈值则进行限流。
网上找的图：

在red]]></description><category></category></item><item><title><![CDATA[SpringCloud（四）——从什么是服务网关到SpringCloud Gateway]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/107979385</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/107979385</guid><author>qq_34528297</author><pubDate>Thu, 13 Aug 2020 14:43:46 +0800</pubDate><description><![CDATA[这里写目录标题SpringCloud服务网关——SpringCloud Gateway服务网关简介简介什么是服务网关？网关的作用？Zuul和GatewaySpringCloud Gateway 服务网关服务网关执行步骤SpringCloud Gateway实例演示eureka注册中心producer 服务提供者SpringCloud Gateway 服务网关启动服务测试
SpringCloud服务网关——SpringCloud Gateway

服务网关简介简介
什么是服务网关？
简单理解服务网关就是一个网]]></description><category></category></item><item><title><![CDATA[SpringCloud（三）——OpenFeign、Ribbon、Hystrix原理分析及实例演示]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/107896658</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/107896658</guid><author>qq_34528297</author><pubDate>Sun, 09 Aug 2020 17:19:41 +0800</pubDate><description><![CDATA[这里写目录标题一级目录二级目录三级目录1. Ribbon负载均衡Ribbon 负载均衡原理分析负载均衡使用小结2. RESTful SpringCloud OpenFeign 声明式RESTful客户端OpenFeign原理小结3. Hystrix 熔断器熔断器的意义Hystrix 原理断路器服务降级和隔离4. 综合实例演示小结
一级目录
二级目录
三级目录
1. Ribbon负载均衡
当系统访问量剧增时，通常会通过增加服务器数量横向扩展，多个服务器需要均衡，避免某台服务器承担过多的访问请求，而某些服务器处]]></description><category></category></item><item><title><![CDATA[SpringCloud（二）——Eureka 注册发现原理]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/107796423</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/107796423</guid><author>qq_34528297</author><pubDate>Tue, 04 Aug 2020 19:36:54 +0800</pubDate><description><![CDATA[Eureka服务发现原理


eureka:多个eureka server组成一个高可用的eureka集群，集群内的eureka节点之间通过同步复制的方式更新注册信息，保持服务注册信息的一致性。
Application Service: 是一个服务的提供者，为其他服务提供特定的业务服务；它也是一个eureka client，会将自己注册到eureka server中，同时获取注册表缓存在本地。
Application Client:服务调用者，会去调用application service提供的服务，通过h]]></description><category></category></item><item><title><![CDATA[SpringCloud（一）——微服务基础及简单微服务项目搭建]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/107761536</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/107761536</guid><author>qq_34528297</author><pubDate>Mon, 03 Aug 2020 13:25:22 +0800</pubDate><description><![CDATA[单体应用开发
传统的web应用开发是将所有的功能模块都打包到一个包中一起部署运行，单体应用集成简洁部署简单，但是随着项目复杂的的增加，单体应用会变得越来越大越来越臃肿，每次进行小功能的更新都需要更新整个包重新部署。
什么是微服务？
微服务没有一个标准的定义，它是一种架构思想，核心思想是将一个单体应用切分成多个粒度更小的服务，每个服务单独部署，都运行在自己的进程中，服务之间可以互相调用（dubbo使用RPC调用，SpringCloud使用基于http api）。
微服务是一套更为复杂的架构模式，常用的微服务组]]></description><category></category></item><item><title><![CDATA[Redis（五）——RedisCluster 真正的redis集群原理解析]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/107751484</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/107751484</guid><author>qq_34528297</author><pubDate>Sun, 02 Aug 2020 21:22:37 +0800</pubDate><description><![CDATA[无论是主从模式还是sentinel哨兵模式，所有客户端请求最终还是由一台redis服务器负担，虽然redis拥有极高的吞吐量，但是单个服务器的性能还是有限的，当数据量请求量超过单台redis服务器负载时，就需要一个真正的redis集群：RedisCluster

RedisCluster 是redis作者自己提供的redis集群化方案，它是一个去中心化的集群。RedisCluster将所有数据划分到16384个slots(槽)中，每个redis节点负责一部分的slots,并且每个redis节点读存储全部的槽]]></description><category></category></item><item><title><![CDATA[数据库分区分库分表其实就这么简单]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/107739855</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/107739855</guid><author>qq_34528297</author><pubDate>Sun, 02 Aug 2020 03:08:01 +0800</pubDate><description><![CDATA[背景：随着业务发展，数据量越来越大，MySQL中单表数据量达到1000w时性能就变得非常差。分库分表技术应运而生。
这些技术看似很高深，其实不难，其核心就是对数据库数据进行划分，将数据放到不同的表、不同数据库中。具体如何划分则需要根据实际业务操作。

讲一讲分区表
分区表是由多个相关的底层表实现，这些底层表也是由句柄对象表示，所以我们也可以直接访问各个分区，存储引擎管理分区的各个底层表和管理普通表一样（所有的底层表都必须使用相同的存储引擎），分区表的索引只是在各个底层表上各自加上一个相同的索引，从存储引擎的]]></description><category></category></item><item><title><![CDATA[MySQL事务隔离]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/107739852</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/107739852</guid><author>qq_34528297</author><pubDate>Sun, 02 Aug 2020 02:50:29 +0800</pubDate><description><![CDATA[一. 事务的基本要素

原子性。一个事务开始后的所有操作，要么全部做完要么全部不做。如果执行过程出现错误则回滚到最初状态
一致性：事务开始前和开始后，数据库的完整性约束没有被破坏。
隔离性：同一时间只允许一个事务请求同个事务，不同事务之间彼此没有任何干扰。
持久性：事务完成后，事务对数据库的所有更新将被保存到数据库
二. 事务的并发问题
脏读：事务A读取了事务B更新的数据，然后事务B进行了回滚。此时事务A读取的数据是脏数据
不可重复读：事务A多次读取同一条数据，事务B在事务A多次读取的过程中对数据进行了更新]]></description><category></category></item><item><title><![CDATA[Redis（三）——redis持久化]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/107739844</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/107739844</guid><author>qq_34528297</author><pubDate>Sun, 02 Aug 2020 02:41:42 +0800</pubDate><description><![CDATA[redis是支持数据持久化的，虽然在生产中经常被当做缓存服务器使用。

redis持久化机制分为两种：第一种是快照第二种是AOF日志。

快照：快照是一次全量的备份，快照是内存数据的二进制序列化形式，在内存上非常紧凑
AOF日志：连续增量备份。AOF日志里面记录的是内存数据修改的指令记录文本

快照原理
前面redis基础篇中提到，redis是单线程的，这个线程需要同时处理客户端的请求和内存数据结构的逻辑读写，显然难以在保持高性能的前提下完成这些工作。
所以redis使用操作系统的多进程COW（copy o]]></description><category></category></item><item><title><![CDATA[Redis（二）——redis分布式锁]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/107735798</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/107735798</guid><author>qq_34528297</author><pubDate>Sat, 01 Aug 2020 19:53:15 +0800</pubDate><description><![CDATA[redis除了用作缓存，还经常被用来作为分布式锁。
redis分布式锁：redis是单线程的，所有客户端的请求都会以串行的方式执行，redis的操作是原子性的，能够保证数据的一致性。
锁超时问题
假如服务A和B均请求某个锁，此时服务A获得获得锁。A还没来得及释放锁就出现突发情况宕机了，如果没有一种超时机制，那么锁无法释放，服务B则永远无法获得该锁。
此时可以在加锁的时候加上一个超时时间，当持有锁超过该时间限制，自动释放该锁。像上面的情况，服务A宕机了锁没有得到释放，等到超时时间自动释放该锁。
这里有出现一个]]></description><category></category></item><item><title><![CDATA[Redis（一）——redis基础]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/107735747</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/107735747</guid><author>qq_34528297</author><pubDate>Sat, 01 Aug 2020 19:51:25 +0800</pubDate><description><![CDATA[简单介绍：用C语言开发的开源的key-value数据库，redis的数据存在内存中，读写速度快，广泛用于缓存，还可以做分布式锁、消息队列。支持数据持久化、事务、多种集群方案（哨兵、集群）。
优点：

读写很快，每秒钟可以达到10w的读取速度
支持丰富的数据类型。字符串 string、列表list、字典hash，集合set、有序列表zset
操作具有原子性：redis所有操作都是原子操作，确保数据一致性
多实用应用场景工具：可以用于缓存、消息队列、分布式锁等场景


五种基本数据结构
字符串String
re]]></description><category></category></item><item><title><![CDATA[Redis（四）——redis主从复制、哨兵模式sentinel]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/107735665</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/107735665</guid><author>qq_34528297</author><pubDate>Sat, 01 Aug 2020 19:46:21 +0800</pubDate><description><![CDATA[时代在进步，生产环境中单机部署的情况已经越来越少了，redis同样如此。redis集群技术也越来越成熟，在生产中redis集群部署已经是一个常见的技术。
											&lt;br&gt;本文主要总结自《redis深度离线》


主从同步
所有集群模式都离不开一个基础：同步机制。节点之间的数据同步是集群基础，主从同步则是这一切的基础。
redis主从同步的意义：有一些企业虽然没有使用redis集群，但是至少做了主从同步。当一个redis master节点挂了的时候，如果要要重启这个redis节点，需]]></description><category></category></item><item><title><![CDATA[MySQL引擎——从B树到InnoDB、MyISAM全面分析]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/107724952</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/107724952</guid><author>qq_34528297</author><pubDate>Sat, 01 Aug 2020 01:51:11 +0800</pubDate><description><![CDATA[深入学习之前先了解一下B树 B-树 B+树 B*树。

B树： B树其实就是二叉搜索树，每个非叶子结点最多只有两个子节点。

右子节点比父节点大，左子节点比父节点小。

搜索原理：从根节点开始，如果比根节点大则进入右子节点查询，如果比根节点小则进入左子节点查询。循环操作直至找到对应数据。







二叉搜索树是不平衡的算法：树的高度太高时，相当于线性的，降低树的高度可以







B-树： 为了减少树的高度提高查询的效率，B-树是一种多路搜索树，不是二叉树。





所有的非叶子结点最多...]]></description><category></category></item><item><title><![CDATA[Java——线程池ThreadPoolExecutor 其实很简单]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/107724927</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/107724927</guid><author>qq_34528297</author><pubDate>Sat, 01 Aug 2020 01:35:29 +0800</pubDate><description><![CDATA[线程池 ThreadPoolExecutor
线程池概述：利用池化技术提高线程的利用率，减少创建和销毁的开销

降低资源的消耗，通过利用已经创建的线程，降低线程创建和销魂造成的消耗
提高响应速度，当任务到达时，可以从线程池中获取已有的线程，节省线程创建的时间
提高线程的可管理性，线程不能无限创建，使用线程池可以进行统一的分配，调优和监控
 使用Executor来启动线程比使用start方法好，除了更方便管理，效率更好（节省开销）外，还有一个关键优点：有助于避免this逃逸问题
注：this逃逸是指在构造函数]]></description><category></category></item><item><title><![CDATA[AQS——从源码窥探AQS到底是什么]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/107724917</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/107724917</guid><author>qq_34528297</author><pubDate>Sat, 01 Aug 2020 01:32:29 +0800</pubDate><description><![CDATA[AQS 是什么？
AQS 是一个用来构建锁和同步器的框架，使用 AQS 能简单且高效地构造出应用广泛的大量的同步器，比如我们提到的 ReentrantLock，Semaphore，其他的诸如 ReentrantReadWriteLock，SynchronousQueue，FutureTask(jdk1.7) 等等皆是基于 AQS 的。当然，我们自己也能利用 AQS 非常轻松容易地构造出符合我们自己需求的同步器。
AQS原理
核心思想：某个线程尝试获得共享资源，当它获得共享资源时，对共享资源进行加锁，若未获得]]></description><category></category></item><item><title><![CDATA[Java中涉及到的各种锁——自旋锁、阻塞锁、可重入锁等等]]></title><link>https://blog.youkuaiyun.com/qq_34528297/article/details/107724906</link><guid>https://blog.youkuaiyun.com/qq_34528297/article/details/107724906</guid><author>qq_34528297</author><pubDate>Sat, 01 Aug 2020 01:20:22 +0800</pubDate><description><![CDATA[锁的作用
锁是作为共享数据保证数据一致性的工具，在并发情况使用。在Java平台中有多种锁的实现比如Synchronize和ReentrantLock。
按照锁的类型可以分为以下几种：

自旋锁
阻塞锁
可重入锁 / 不可重入锁
独享锁 / 共享锁
偏向锁 / 轻量锁 / 重量锁

从宏观上分类又可以分为：乐观锁和悲观锁

自旋锁
自旋锁原理非常简单，如果持有锁的线程能在很短时间内释放锁资源，那么那些等待竞争锁的线程就不需要做内核态和用户态之间的切换进入阻塞挂起状态，它们只需要等一等（自旋），等持有锁的线程释]]></description><category></category></item></channel></rss>