<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_41008202的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_41008202</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_41008202]]></copyright><item><title><![CDATA[RPC重试机制和控制方案]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/129346191</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/129346191</guid><author>qq_41008202</author><pubDate>Sun, 05 Mar 2023 15:53:54 +0800</pubDate><description><![CDATA[菜鸟出道]]></description><category></category></item><item><title><![CDATA[ModuleNotFoundError: No module named ‘_ctypes‘ ERROR: Command errored out with exit status 1: python]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/108039794</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/108039794</guid><author>qq_41008202</author><pubDate>Sun, 16 Aug 2020 18:11:48 +0800</pubDate><description><![CDATA[问题描述
Ubuntu系统下通过pip安装包时，出现ModuleNotFoundError: No module named ‘_ctypes’ ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output错误。
问题分析
这是因为缺少了外部函数库(libffi)的开发链接库软件包，所以在安装pip的时候就报了"ModuleNotFoundError]]></description><category></category></item><item><title><![CDATA[Java动态追踪技术探究]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/106524216</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/106524216</guid><author>qq_41008202</author><pubDate>Wed, 03 Jun 2020 15:02:20 +0800</pubDate><description><![CDATA[引子
在遥远的希艾斯星球爪哇国塞沃城中，两名年轻的程序员正在为一件事情苦恼，程序出问题了，一时看不出问题出在哪里，于是有了以下对话：
“Debug一下吧。”
“线上机器，没开Debug端口。”
“看日志，看看请求值和返回值分别是什么？”
“那段代码没打印日志。”
“改代码，加日志，重新发布一次。”
“怀疑是线程池的问题，重启会破坏现场。”
长达几十秒的沉默之后：“据说，排查问题的最高境界，就是只通过Review代码来发现问题。”
比几十秒长几十倍的沉默之后：“我轮询了那段代码一十七遍之后，终于得出一个结论。]]></description><category></category></item><item><title><![CDATA[代理模式-静态代理和动态代理的那些事]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/106497412</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/106497412</guid><author>qq_41008202</author><pubDate>Tue, 02 Jun 2020 22:44:14 +0800</pubDate><description><![CDATA[代理模式
代理模式用于为其他对象提供一种代理以控制对这个对象的访问，代理模式中分为代理对象和委托对象(被代理对象),就如同经纪人和艺人的关系，广告商想要某位艺人代言，不直接与艺人联系，而是通过与经纪人取得联系来获得艺人的代言。代理模式中的一个重要特征就是代理对象和委托对象必须实现同一接口，万物互联，这就好比现实中经纪人和艺人往往属于同一家公司。代理对象不提供直接服务，而是调用委托对象的服务，除了调用对象的服务，代理对象会进行一些预处理消息、消息过滤、服务事后处理等扩展服务，就好比经纪人肯定不是遇到广告商的业]]></description><category></category></item><item><title><![CDATA[当线程池中的一个线程出现异常，那它该何去何从]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/106401691</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/106401691</guid><author>qq_41008202</author><pubDate>Thu, 28 May 2020 12:12:17 +0800</pubDate><description><![CDATA[1、execute()方法是不会有返回值的，当任务的执行方式是execute时,可以看到堆栈异常的输出，因为该方法内部将异常抛出。而当执行方式是submit时,堆栈异常没有输出，它不抛出异常而是将异常进行了保存，丢到了Future对象中，返回Future对象。调用Future.get()方法时，可以捕获到异常，可以让我们更容易的处理异常。(题外话— execute只能接受Runnable类型的任务，submit不管是Runnable还是Callable类型的任务都可以接受）
2、线程池中某个线程出现异常，它]]></description><category></category></item><item><title><![CDATA[当try、catch、finally中有return时，程序该如何执行？]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/106387604</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/106387604</guid><author>qq_41008202</author><pubDate>Thu, 28 May 2020 09:56:25 +0800</pubDate><description><![CDATA[try、catch中有return，而finally中没有return
1、首先说明下，无论try、catch中是否有return，无论是否产生异常，finally代码是一定会执行的，代码验证如下:
 public int  handleTest1(){
          int b=0;
        try{
            System.out.println("try");
            int a=10/0;
            System.out.println("t]]></description><category></category></item><item><title><![CDATA[高并发网站架构演进之路]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/106252260</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/106252260</guid><author>qq_41008202</author><pubDate>Thu, 21 May 2020 11:30:43 +0800</pubDate><description><![CDATA[概述
本文以淘宝作为例子，介绍从一百个到千万级并发情况下服务端的架构的演进过程，同时列举出每个演进阶段会遇到的相关技术，让大家对架构的演进有一个整体的认知，文章最后汇总了一些架构设计的原则。

特别说明：本文以淘宝为例仅仅是为了便于说明演进过程可能遇到的问题，并非是淘宝真正的技术演进路径

基本概念
在介绍架构之前，为了避免部分读者对架构设计中的一些概念不了解，下面对几个最基础的概念进行介绍：
(1)分布式
系统中的多个模块在不同服务器上部署，即可称为分布式系统，如Tomcat和数据库分别部署在不同的服务器]]></description><category></category></item><item><title><![CDATA[分布式限流算法以及实战]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/106216863</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/106216863</guid><author>qq_41008202</author><pubDate>Tue, 19 May 2020 16:37:54 +0800</pubDate><description><![CDATA[限流的作用
由于API接口无法控制调用方的行为，因此当遇到瞬时请求量激增时，会导致接口占用过多服务器资源，使得其他请求响应速度降低或是超时，更有甚者可能导致服务器宕机。 限流(Rate limiting)指对应用服务的请求进行限制，例如某一接口的请求限制为100个每秒,对超过限制的请求则进行快速失败或丢弃。
限流可以应对：
(1）热点业务带来的突发请求；
(2)  调用方bug导致的突发请求；
(3)  恶意攻击请求。
因此，对于公开的接口最好采取限流措施。
分布式限流的优势

当应用为单点应用时，只要应用]]></description><category></category></item><item><title><![CDATA[三种方式实现分布式锁]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/105792684</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/105792684</guid><author>qq_41008202</author><pubDate>Thu, 14 May 2020 21:03:38 +0800</pubDate><description><![CDATA[Redis实现分布式锁
Zookeeper实现分布式锁
数据库锁实现分布式锁

]]></description><category></category></item><item><title><![CDATA[Zookeeper原理以及要点知识]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/106091575</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/106091575</guid><author>qq_41008202</author><pubDate>Thu, 14 May 2020 11:33:44 +0800</pubDate><description><![CDATA[Zookeeper
Zookeeper简述
Zookeeper是一个分布式服务框架，是Apache Hadoop 的一个子项目，它提供的是分布式协调服务。用来解决分布式应用中经常遇到的一些数据管理问题，比如统一命名服务、协调锁资源、状态同步服务、集群管理、分布式应用配置项的管理等。而Zookeeper实现这些功能的支撑其实是它类似于文件系统的数据模型和监听机制。

监听机制
客户端可以通过在它关心的目录节点上注册监听事件监听器(Watcher)，当目录节点发生相应的事件（数据改变、节点被删除、子目录节点增加]]></description><category></category></item><item><title><![CDATA[CentOS8服务器安装Mysql并设置远程连接]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/106004502</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/106004502</guid><author>qq_41008202</author><pubDate>Sat, 09 May 2020 09:03:17 +0800</pubDate><description><![CDATA[过程
安装
1、通过以下命令，使用最新的包管理器安装MySQL（安装过程中一直yes/y即可）
sudo dnf install @mysql

2、设置MySQL自动启动
sudo systemctl enable --now mysqld

3、检查MySQL是否在运行
sudo systemctl status mysqld

结果:

(如图显示active，则表明MySQL已经安装成功且正在运行，接下来进行安全性、远程连接等配置)
安全性配置
4、运行mysql_secure_installati]]></description><category></category></item><item><title><![CDATA[单调栈以及应用(含leetCode第42题接雨水代码)]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/105895994</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/105895994</guid><author>qq_41008202</author><pubDate>Sat, 02 May 2020 22:09:34 +0800</pubDate><description><![CDATA[单调栈
定义
单调栈的定义：元素值满足单调性的栈结构。与单调队列相比，其只在一端进行进出。递增栈是栈顶到栈底依次递增。
插入过程中，保持栈内一直是单调性，将不满足的元素pop出栈，直接丢弃。如下图，分别插入6,10,3,7,4,12的时候，单调递增栈和单调递减栈的情况分别是样子的：

应用场景
解决的是以某个值为最小(最大)值的最大区间，递增栈能表示入栈元素左边第一个比它大的元素，递减栈能表示入栈...]]></description><category></category></item><item><title><![CDATA[跳跃表原理以及实现（含ConcurrentSkipListMap和zset底层实现原理分析）]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/105734240</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/105734240</guid><author>qq_41008202</author><pubDate>Fri, 01 May 2020 21:14:58 +0800</pubDate><description><![CDATA[前言
我们常用来加快查找速度的两类数据结构分别是哈希表和平衡树，哈希表查找时间复杂度是O(1)，而各类平衡树(包括红黑树)的查找时间复杂度是O(logn)。哈希表虽然查找速度快，但它不是有序的，无法进行范围查询；平衡树虽然也很香，但它每一次的插入和删除都可能导致全局调整，耗时多。而本篇博文介绍的跳跃表查找的效率与平衡树差不多，时间复杂度都是O(logn)，但插入或者删除值时，只是局部调整，过程简单...]]></description><category></category></item><item><title><![CDATA[盘点论文免费下载的国内外网站]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/105835892</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/105835892</guid><author>qq_41008202</author><pubDate>Wed, 29 Apr 2020 13:30:06 +0800</pubDate><description><![CDATA[前言

查找、下载论文，我们一般会想到知网或者百度学术，但在这些地方下载论文都需要积分，因此这里推荐几个免费下载或者免费提供积分的网站

国内
上海研发公共服务平台(推荐)

链接:   http://www.sstir.cn


网站有知网和万方等知名论文库的搜索引擎。并且提供了 1400 元的论文下载基金，登录即可领取。我本人使用的就是这个，用起来还不错。
贵州数字图书馆

链接： http:...]]></description><category></category></item><item><title><![CDATA[Redis事务(Redis事务与普通关系型数据库事务的区别）]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/105756681</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/105756681</guid><author>qq_41008202</author><pubDate>Sun, 26 Apr 2020 13:25:23 +0800</pubDate><description><![CDATA[前言
Redis作为非关系型数据库中的一种，因为其基于内存、单线程、支持持久化、拥有着高速的读写速度而又支持多种数据类型、支持原生集群等特点而被广泛使用。这篇博文主要讨论下Redis事务与关系型数据库（比如MySQL)事务之间的区别。
Redis事务
Redis事务与MySQL事务一样，一次事务可以执行多条命令，在事务执行时命令按顺序执行。由MULTI命令标志着事务的开始，EXEC命令标志着开始执...]]></description><category></category></item><item><title><![CDATA[全面解析Java常用容器(从底层结构解析HashMap、ConcurrentHashMap、ArrayList、Vector、LinkedList等常用容器之间的区别和特点)]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/105621526</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/105621526</guid><author>qq_41008202</author><pubDate>Wed, 22 Apr 2020 18:54:42 +0800</pubDate><description><![CDATA[前言
本篇博文主要是通过解析HashMap、ConcurrentHashMap、TreeMap、Hashtable、LinkedHashMap、HashSet、TreeSet 、ArrayList、Vector、LinkedList、BitSet、Pair等常用容器的底层结构来分析各种容器的特点、用途以及它们之间的联系和区别
总览
Java容器库可以分为两大类，一类是继承自Collection接口...]]></description><category></category></item><item><title><![CDATA[MySQL大表优化方案(当数据库表数据量过大造成CRUD操作性能很差时该如何优化)]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/105578620</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/105578620</guid><author>qq_41008202</author><pubDate>Fri, 17 Apr 2020 16:42:29 +0800</pubDate><description><![CDATA[前言
当MySQL单表记录数过大时，增删改查性能都会急剧下降。可以通过单表优化、限定数据的范围、表分区、读写分离等方法进行优化。这篇文章主要内容是转载的博主manong，原文传送门 ，然后自己进行了一些修改。单表优化这块方法不是太全可以翻阅我的其它相关博文-----《MySQL高性能优化规范(这应该是我见过写的最好的优化规范建议了)》和《解析SQL语句执行速度慢的原因(SQL性能优化)》
单表优化...]]></description><category></category></item><item><title><![CDATA[InnoDB的MVCC实现原理(InnoDB如何实现MVCC以及MVCC的工作机制)]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/105559613</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/105559613</guid><author>qq_41008202</author><pubDate>Thu, 16 Apr 2020 21:45:28 +0800</pubDate><description><![CDATA[MVCC（多版本并发控制）
使用锁和锁协议来实现相应的隔离级别来进行并发控制，味道虽好但因为锁会造成事务阻塞，导致并发性能会受到一定的影响。而多版本并发控制使得对同一行记录做读写的事务之间不用相互阻塞等待(写写还是要阻塞等待，因为事务对数据进行更新时会加上排他锁)，提高了事务的并发能力，可以认为MVCC是一种解决读写阻塞等待的行级锁。
MVCC的一些重要特性
(1)MVCC只支持RC(读取已提交)...]]></description><category></category></item><item><title><![CDATA[解析数据库锁协议和InnoDB锁机制(全面解析行级锁、表级锁、排他锁、共享锁、悲观锁、乐观锁等常用锁)]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/105488111</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/105488111</guid><author>qq_41008202</author><pubDate>Thu, 16 Apr 2020 16:53:04 +0800</pubDate><description><![CDATA[前言
数据库通过锁以及锁协议来进行并发控制，解决并发事务带来的问题，本篇博文主要是解析数据库的锁协议和锁机制。
锁协议
在介绍锁之前，我先介绍下锁协议，锁协议规定了何时加锁、释放锁的规则，不同的规则可用于实现不同的隔离级别，解决不同的并发事务问题。
一级封锁协议：更新数据前需要先加X锁，直到事务结束才释放X锁，读数据是不需要加S锁。所以只能解决第一类更新丢失问题，不能解决脏读和不可重复读等问题。
...]]></description><category></category></item><item><title><![CDATA[解析事务隔离(事务隔离是如何解决脏读、幻读、不可重复读等问题)]]></title><link>https://blog.youkuaiyun.com/qq_41008202/article/details/105437443</link><guid>https://blog.youkuaiyun.com/qq_41008202/article/details/105437443</guid><author>qq_41008202</author><pubDate>Mon, 13 Apr 2020 20:17:56 +0800</pubDate><description><![CDATA[前言
锁机制和索引是数据库两块极其重要的知识点，也是面试中面试官最爱问的两个部分。前面的文章已经对索引知识有了一个较为全面的解析，这篇文章主要从并发事务的角度出发，解析并发事务带来的问题，以及事务隔离是如何解决并发事务带来的问题。
事务
事务存在意义是保证数据的一致性。事务保证了事务内的一系列操作，要不都执行，要不都不执行。例如A账号给B账户转账10000，则A账号减去10000，B账号增加100...]]></description><category></category></item></channel></rss>