<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Qiaoshurui的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Qiaoshurui</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Qiaoshurui]]></copyright><item><title><![CDATA[python算法打卡：209. 长度最小的子数组、59.螺旋矩阵]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/141258482</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/141258482</guid><author>Qiaoshurui</author><pubDate>Fri, 16 Aug 2024 17:49:12 +0800</pubDate><description><![CDATA[时间复杂度O(n^2)]]></description><category></category></item><item><title><![CDATA[python算法打卡：704. 二分查找、27. 移除元素、977.有序数组的平方]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/141198732</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/141198732</guid><author>Qiaoshurui</author><pubDate>Wed, 14 Aug 2024 20:42:21 +0800</pubDate><description><![CDATA[2.使用while循环的时候判断条件是 left < right,维持左闭右开区间;因为[1,1)是不合法的区间。3.if 判断条件是没有=，当target偏大，要移动left向右;1.初始化right的时候是len(nums) 因为右区间取不到。左闭右闭意味着在这个区间中left能取到，right值取不到。快指针：寻找新数组的元素 ，新数组就是不含有目标元素的数组。左闭右闭意味着在这个区间中left和right值都能取到。1.数组是有序数组并且无重复元素。时间复杂度：O(log n)空间复杂度：O(1)]]></description><category></category></item><item><title><![CDATA[Golang语言设计模式的实现—代理模式]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/131480839</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/131480839</guid><author>Qiaoshurui</author><pubDate>Fri, 30 Jun 2023 17:48:08 +0800</pubDate><description><![CDATA[代理模式是一种结构型设计模式，它允许通过代理对象控制对另一个对象的访问。它的基本思想是创建一个代理对象，进行逻辑处理的原对象通常被称作 服务对象，代理要跟服务对象实现相同的接口，才能让客户端傻傻分不清自己使用的到底是代理还是真正的服务对象，这样一来代理就能在客户端察觉不到的情况下对服务对象的处理逻辑进行增强。]]></description><category></category></item><item><title><![CDATA[Kong 快速入门]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/129144617</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/129144617</guid><author>Qiaoshurui</author><pubDate>Wed, 22 Feb 2023 14:34:49 +0800</pubDate><description><![CDATA[Kong快速入门]]></description><category></category></item><item><title><![CDATA[Golang语言设计模式的实现—工厂模式]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/127847165</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/127847165</guid><author>Qiaoshurui</author><pubDate>Mon, 14 Nov 2022 16:20:29 +0800</pubDate><description><![CDATA[当对象的创建逻辑比较复杂，不只是简单的 new 一下就可以，而是要组合其他类对象，做各种初始化操作的时候，推荐使用工厂方法模式，将复杂的创建逻辑拆分到多个工厂类中，让每个工厂类都不至于过于复杂。由于 Go 本身是没有构造函数的，一般而言我们采用 New（） 的方式创建对象/接口，当它返回的是接口的时候，其实就是简单工厂模式。1.工厂类负责创建的对象比较少，由于创建的对象较少，不会造成工厂方法中的业务逻辑太过复杂。和简单工厂模式的区别：将工厂抽取出来，形成一个抽象的工厂，返回一个抽象的产品类。]]></description><category></category></item><item><title><![CDATA[Golang语言设计模式的实现—单例模式]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/127682156</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/127682156</guid><author>Qiaoshurui</author><pubDate>Fri, 04 Nov 2022 10:43:37 +0800</pubDate><description><![CDATA[除了懒汉式和饿汉式以外，在golang语言中有一种更加优雅的方法实现单例模式，使用once.Do可以确保 instance 实例全局只被创建一次，once.Do 函数还可以确保当同时有多个创建动作时，只有一个创建动作在被执行。饿汉方式指全局的单例实例在包被加载时创建，而懒汉方式指全局的单例实例在第一次被使用时创建，我们可以看到，这种命名方式非常形象地体现了它们不同的特点。因为单例模式保证了实例的全局唯一性，而且只被初始化一次，所以比较适合全局共享一个实例，且只需要被初始化一次的场景。要求生成唯一的序列号。]]></description><category></category></item><item><title><![CDATA[进程间的通信方式]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/126428554</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/126428554</guid><author>Qiaoshurui</author><pubDate>Sat, 20 Aug 2022 10:12:02 +0800</pubDate><description><![CDATA[进程通信就是进程之间的信息交换进程是资源管理的基本单位，因此各个进程拥有的内存地址空间相互独立。]]></description><category></category></item><item><title><![CDATA[深入理解Golang之Map]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/125893205</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/125893205</guid><author>Qiaoshurui</author><pubDate>Sat, 30 Jul 2022 21:41:46 +0800</pubDate><description><![CDATA[Map的实现主要有两种方式哈希表（hashtable）和搜索树（searchtree）。例如Java中的hashMap是基于哈希表实现，而C++中的Map是基于一种平衡搜索二叉树——红黑树而实现的。Go中map的基于哈希表（也被称为散列表）实现。...]]></description><category></category></item><item><title><![CDATA[IPV4和IPV6是什么？]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/125866257</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/125866257</guid><author>Qiaoshurui</author><pubDate>Wed, 20 Jul 2022 09:17:57 +0800</pubDate><description><![CDATA[二进制只有0或1，每逢2的时候会进位，对照表如下举个例子因此十进制255的二进制是八个111111111IPV4地址是由4组8位二进制组成的，每一组的十进制数字范围都是0到255IP网络号+主机号IP地址划分为A,B,C,D,E类，D和E是特殊类为了解决简单分类导致的IP分配不合理，子网掩码诞生子网掩码它其实就是为了区分网络号和主机号的，可以用来表示下面四个IP地址同属于一个网络首先将十进制先转换为二进制，用1来锁定相同的位数，不相同的位数用0表示子网掩码如下。...]]></description><category></category></item><item><title><![CDATA[golang之GMP调度模型]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/125757094</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/125757094</guid><author>Qiaoshurui</author><pubDate>Thu, 14 Jul 2022 09:08:45 +0800</pubDate><description><![CDATA[G:一个G代表一个goroutine，协程的本质是用户态的线程，用户对其有控制权限，内存占用少，切换代价低。
M:内核态线程,一个M代表了一个内核线程，等同于系统线程，所有的G都要放在M上才能运行。
P:逻辑处理器,可以承载若干个G，并且使这些G适时的与M对接，一个P代表了M所需的上下文环境。P的个数取决于设置的GOMAXPROCS， go新版本默认使用最大内核数，比如你有8核处理器，那么P的数量就是8M的数量和P不一定匹配，可以设置很多M，M和P绑定后才可运行，多余的M处于休眠状态。
系统会通过调度器从全]]></description><category></category></item><item><title><![CDATA[casbin模型]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/125196371</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/125196371</guid><author>Qiaoshurui</author><pubDate>Mon, 13 Jun 2022 22:09:10 +0800</pubDate><description><![CDATA[subject(sub访问实体)，object (obj访问的资源) 和 action (act访问的方法) eft  (策略结果  一般为空，默认指定allow) 还可以定义为denyp:策略   一般存储到数据库，因为会有很多
m:匹配规则   会把r和p按照匹配原则进行匹配，从而返回匹配结果  （eft）如果不定义会返回allow 如果定义过了，会返回我们定义过的那个结果
r:请求
e:影响  这里的规定是定死的
role_definition  角色域
g= _ , _ 表示以角色为基础，前者是后者]]></description><category></category></item><item><title><![CDATA[Mysql的锁]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/124781595</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/124781595</guid><author>Qiaoshurui</author><pubDate>Sun, 22 May 2022 10:41:52 +0800</pubDate><description><![CDATA[目录MySQL加锁的目的是什么MySQL的锁是基于什么实现的并发事务访问相同记录读读情况写写情况读写情况
MySQL加锁的目的是什么
数据库的锁是为了解决事务的隔离性问题，为了让事务之间相互不影响，每个事务进行操作的时候都会对数据加上一把特有的锁，防止其他事务同时操作数据。
MySQL的锁是基于什么实现的
数据库里面的锁是基于索引实现的，在Innodb中我们的锁都是作用在索引上面的，当我们的SQL命中索引时，那么锁住的就是命中条件内的索引节点(行锁)，如果没有命中索引的话，那我们锁的就是整个索引树（表锁）
]]></description><category></category></item><item><title><![CDATA[Mysql之MVCC]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/124699074</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/124699074</guid><author>Qiaoshurui</author><pubDate>Sun, 15 May 2022 13:59:37 +0800</pubDate><description><![CDATA[目录什么是 MVCCMVCC 的实现原理面试题之：MVCC能否解决幻读？
什么是 MVCC
MVCC， 即多版本并发控制。MVCC 的实现，是通过**保存数据在某个时间点的快照来实现的**。
根据事务开始的时间不同，每个事务对同一张表，同一时刻看到的数据可能是不一样的。
MVCC 的实现原理
对于 InnoDB ，聚簇索引记录中包含 3 个隐藏的列：

ROW ID：隐藏的自增 ID，如果表没有主键，InnoDB 会自动按 ROW ID 产生一个聚集索引树。
事务 ID：记录最后一次修改该记录的事务 ID。]]></description><category></category></item><item><title><![CDATA[Innodb 引擎和 Myisam 引擎对索引的实现]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/124674928</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/124674928</guid><author>Qiaoshurui</author><pubDate>Mon, 09 May 2022 23:02:14 +0800</pubDate><description><![CDATA[目录写在前面——索引类型主键索引唯一索引常规索引全文索引Innodb 引擎和 Myisam 引擎对索引的实现底层分析MyISAM 引擎的底层实现（非聚集索引方式）Innodb 引擎的底层实现（聚集索引方式、非聚集索引）为什么 InnoDB 只在主键索引树的叶子节点存储了具体数据，但是其他索引树却不存具体数据呢，而要多此一举先找到主键，再在主键索引树找到对应的数据呢？为什么InnoDB 和MyISAM 对比，MyISAM 查询性能更好？
写在前面——索引类型
在MySQL数据库，将索引的具体类型主要分为以下几]]></description><category></category></item><item><title><![CDATA[隐藏实用的GitHub使用技巧]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/124647165</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/124647165</guid><author>Qiaoshurui</author><pubDate>Sun, 08 May 2022 15:15:33 +0800</pubDate><description><![CDATA[目录技巧1：在Github个人资料页面上启用自述文件技巧2：快速有效的搜索技巧技巧3：用文件查找器快速、轻松地搜索仓库中的文件技巧4：代码阅读技巧技巧5：无敌技巧——在线运行项目
GitHub是程序员必备的交友，代码托管平台。这篇文章介绍并演示了几个GitHub使用技巧，我希望它们也能帮助你更有效地使用GitHub。
技巧1：在Github个人资料页面上启用自述文件
启用它非常简单，你只需要创建一个与你的Github账户用户名相同的新仓库，这是一个特殊的仓库，你可以用它在你的Github配置文件中添加REA]]></description><category></category></item><item><title><![CDATA[Redis的线程模型]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/124508134</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/124508134</guid><author>Qiaoshurui</author><pubDate>Sat, 30 Apr 2022 10:14:54 +0800</pubDate><description><![CDATA[一、Redis为何选择单线程
在Redis6.0之前，Redis的核心网络模型选择单线程来实现

正如redis官网上说，对于一个 DB 来说，CPU 通常不会是瓶颈，因为大多数请求不会是 CPU 密集型的，而是 I/O 密集型。具体到Redis 的话，如果不考虑 RDB/AOF 等持久化方案，Redis是完全的纯内存操作，执行速度是非常快的，因此这部分操作通常不会是性能瓶颈，Redis 真正的性能瓶颈在于网络 I/O，也就是客户端和服务端之间的网络传输延迟，因此 Redis 6.0版本前选择了单线程的 I]]></description><category></category></item><item><title><![CDATA[Golang 垃圾回收机制详解]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/124381531</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/124381531</guid><author>Qiaoshurui</author><pubDate>Mon, 25 Apr 2022 12:44:17 +0800</pubDate><description><![CDATA[目录一、垃圾回收概念二、常用的垃圾回收算法引用计数标记——清除算法三色标记算法标记——整理算法分代收集算法三、屏障技术四、运行模式1.增量式垃圾回收2.并行垃圾回收3.并发垃圾回收参考
一、垃圾回收概念
有些编程语言(C、C++)需要手动释放那些不再需要的、分配在堆上的数据，这叫做“手动垃圾回收”，但是如果数据释放过早，后续对数据的访问就会出错，因为被释放的内存可能已经被清空或者重新分配；如果忘记释放，数据会一直占用内存，出现“内存泄漏”，所以越来越多的编程语言支持“自动垃圾回收”。
由运行时识别不再有用的]]></description><category></category></item><item><title><![CDATA[操作系统——银行家算法]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/124369617</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/124369617</guid><author>Qiaoshurui</author><pubDate>Sat, 23 Apr 2022 22:15:36 +0800</pubDate><description><![CDATA[一、写在前面的银行家算法
银行家算法的由来：

银行家算法是操作系统中最有代表性的死锁避免方案，操作系统作为裸机上安装的第一层软件，起着控制和管理计算机内部软硬件资源，合理组织计算机工作流程，提高计算机工作效率，用户和计算机硬件接口的重要作用。因此操作系统既要保证系统资源的合理分配提高系统资源利用率，同时又要避免死锁等不安全状况的出现，如果这些不安全状况出现操作系统还要解决这些问题，让系统回到安全状态。银行家算法就是在这样的背景下应运而生的。

银行家算法的核心思想：

在进程提出资源申请时，先预判此次分配]]></description><category></category></item><item><title><![CDATA[总结计算机网络超全面试题]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/124205076</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/124205076</guid><author>Qiaoshurui</author><pubDate>Sat, 16 Apr 2022 10:16:13 +0800</pubDate><description><![CDATA[总结计算机网络超全面试题
OSI七层模型：大而全，但是比较复杂、而且是先有了理论模型，没有实际应用。
TCP / IP四层模型：是由实际应用发展总结出来的，从实质上讲，TCP/IP只有最上面三层，最下面一层没有什么具体内容，TCP/IP参考模型没有真正描述这一层的实现。
五层模型：五层模型只出现在计算机网络教学过程中，这是对七层模型和四层模型的一个折中，既简洁又能将概念阐述清楚。


2. TCP和UDP的区别？]]></description><category></category></item><item><title><![CDATA[TCP三次握手、四次挥手]]></title><link>https://blog.youkuaiyun.com/Qiaoshurui/article/details/123775946</link><guid>https://blog.youkuaiyun.com/Qiaoshurui/article/details/123775946</guid><author>Qiaoshurui</author><pubDate>Sun, 27 Mar 2022 17:21:59 +0800</pubDate><description><![CDATA[TCP三次挥手，四次握手]]></description><category></category></item></channel></rss>