<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[guoquanqin的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/guoquanqin</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; guoquanqin]]></copyright><item><title><![CDATA[都2023年了还不知道@CacheEvict的坑吗？]]></title><link>https://blog.youkuaiyun.com/guoquanqin/article/details/131822860</link><guid>https://blog.youkuaiyun.com/guoquanqin/article/details/131822860</guid><author>guoquanqin</author><pubDate>Thu, 20 Jul 2023 09:58:22 +0800</pubDate><description><![CDATA[为啥一个@CacheEvict会调用keys命令呢，一般大家都知道keys是会阻塞线程的，更何况redis是单线程执行，一个keys就可以搞崩整个redis，通常情况下都用scan命令代替keys命令，那就一看究竟吧]]></description><category></category></item><item><title><![CDATA[记一次删除oracle高水位线问题]]></title><link>https://blog.youkuaiyun.com/guoquanqin/article/details/131323647</link><guid>https://blog.youkuaiyun.com/guoquanqin/article/details/131323647</guid><author>guoquanqin</author><pubDate>Wed, 21 Jun 2023 11:05:17 +0800</pubDate><description><![CDATA[最近在oracle生产上删除数据以及高水位时，发现一些问题， 在此记录一下]]></description><category></category></item><item><title><![CDATA[自定义编程式事务]]></title><link>https://blog.youkuaiyun.com/guoquanqin/article/details/127077212</link><guid>https://blog.youkuaiyun.com/guoquanqin/article/details/127077212</guid><author>guoquanqin</author><pubDate>Tue, 27 Sep 2022 19:45:23 +0800</pubDate><description><![CDATA[Transactional也被称为声明式事务管理，通过AOP的方式由Spring容器集中管理，另一种就是编程式事务管理了，可以自由的控制事务的范围，虽然没有@Transactional 那么舒服，但是至少透明可控啊，代码如下。简单来说，在事务被开启到commit为止，数据库会一直占用锁资源，其次所有的事务视图会一直保存着，暂用存储空间，如果涉及到大量数据变更或io连接的话，就更加难堪了，最严重的就是数据库挂掉，这要是到生产影响可就不是一毛两毛的事了。新建事务，如果当前存在事务，把当前事务挂起。]]></description><category></category></item><item><title><![CDATA[关于switch的坑，你中过招吗]]></title><link>https://blog.youkuaiyun.com/guoquanqin/article/details/126586425</link><guid>https://blog.youkuaiyun.com/guoquanqin/article/details/126586425</guid><author>guoquanqin</author><pubDate>Mon, 29 Aug 2022 15:54:55 +0800</pubDate><description><![CDATA[关于switch的坑，你中过招吗]]></description><category></category></item><item><title><![CDATA[Mybatis plus 启动项目时报错Invocation of init method failed； nested exception is java.lang.NullPointerExcep]]></title><link>https://blog.youkuaiyun.com/guoquanqin/article/details/125574916</link><guid>https://blog.youkuaiyun.com/guoquanqin/article/details/125574916</guid><author>guoquanqin</author><pubDate>Sat, 02 Jul 2022 16:53:43 +0800</pubDate><description><![CDATA[Mybatis plus 启动项目时报错Invocation of init method failed; nested exception is java.lang.NullPointerException]]></description><category></category></item><item><title><![CDATA[记一次mongoDB-@Document(collection = “XXX“)配置的探索]]></title><link>https://blog.youkuaiyun.com/guoquanqin/article/details/121797938</link><guid>https://blog.youkuaiyun.com/guoquanqin/article/details/121797938</guid><author>guoquanqin</author><pubDate>Wed, 08 Dec 2021 18:39:49 +0800</pubDate><description><![CDATA[直接开门见山，大多数会用mongoDB开发的都知道实体类上加上**@Document(collection = “XXX”)**可以直接将操作指定到对应的XXX 集合中，但是对应第一次玩mongoDB的我却浑然不知（留下没有技术的眼泪）。起因是因为每次调用都需要指定collectionName，如下
Long totalCount = mongoOperations.count(query, reqDTO.getClass(),"refund_error");
List&lt;OperatorBilling]]></description><category></category></item><item><title><![CDATA[分布式项目启动时报错：Duplicate spring bean id XXX]]></title><link>https://blog.youkuaiyun.com/guoquanqin/article/details/121212652</link><guid>https://blog.youkuaiyun.com/guoquanqin/article/details/121212652</guid><author>guoquanqin</author><pubDate>Mon, 08 Nov 2021 17:48:30 +0800</pubDate><description><![CDATA[分布式项目启动时报错：Duplicate spring bean id XXX
报错如下
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from URL [file:/F:/marketing/marketing-service/target/classes/dubbo/consumer-beans.xml]; nested exception]]></description><category></category></item><item><title><![CDATA[跳表]]></title><link>https://blog.youkuaiyun.com/guoquanqin/article/details/115474202</link><guid>https://blog.youkuaiyun.com/guoquanqin/article/details/115474202</guid><author>guoquanqin</author><pubDate>Tue, 06 Apr 2021 23:46:55 +0800</pubDate><description><![CDATA[跳表

二分查找底层依赖的是数组随机访问的特性，所以只能用数组来实现，如果数据存储在链表中，对链表稍加改造，就可以支持类似“二分”的查找算法。我们把改造之后的数据结构叫做跳表（Skip list），

它是一种各方面性能都比较优秀的动态数据结构，可以支持快速地插入、删除、查找操作，写起来也不复杂，甚至可以替代红黑树（Red-black tree）。Redis 中的有序集合（Sorted Set）就是用跳表来实现的

1、原理

如果要想在其中查找某个数据，也只能从头到尾遍历链表。这样查找效率就会很低，时间复]]></description><category></category></item><item><title><![CDATA[二分查找]]></title><link>https://blog.youkuaiyun.com/guoquanqin/article/details/115473954</link><guid>https://blog.youkuaiyun.com/guoquanqin/article/details/115473954</guid><author>guoquanqin</author><pubDate>Tue, 06 Apr 2021 23:27:15 +0800</pubDate><description><![CDATA[一、二分查找

二分查找（Binary Search）算法，也叫折半查找算法，是一种针对有序数据集合的查找算法，查找思想有点类似分治思想。每次都通过跟区间的中间元素对比，将待查找的区间缩小为之前的一半，直到找到要查找的元素，或者区间被缩小为 0。

时间复杂度：O(logn)（对数时间复杂度）

常量级时间复杂度的算法有时候可能还没有 O(logn) 的算法执行效率高。O(1) 有可能表示的是一个非常大的常量值，比如 O(1000)、O(10000)

1、二分查找的递归与非递归实现

（1）有序数组中不存]]></description><category></category></item><item><title><![CDATA[数据结构排序学习总结]]></title><link>https://blog.youkuaiyun.com/guoquanqin/article/details/115033868</link><guid>https://blog.youkuaiyun.com/guoquanqin/article/details/115033868</guid><author>guoquanqin</author><pubDate>Sat, 20 Mar 2021 20:24:37 +0800</pubDate><description><![CDATA[排序算法执行效率的分析，从这几个方面来衡量

1. 最好情况、最坏情况、平均情况时间复杂度

2. 时间复杂度的系数、常数 、低阶

3. 比较次数和交换（或移动）次数



原地排序（Sorted in place）。原地排序算法，就是特指空间复杂度是 O(1) 的排序算法

排序算法的稳定性：如果待排序的序列中存在值相等的元素，经过排序之后，相等元素之间原有的先后顺序不变，如果两个 3 的前后顺序没有改变，那我们就把这种排序算法叫作稳定的排序算法



冒泡排序（Bubble Sort）



冒...]]></description><category></category></item><item><title><![CDATA[栈与队列学习总结]]></title><link>https://blog.youkuaiyun.com/guoquanqin/article/details/115033284</link><guid>https://blog.youkuaiyun.com/guoquanqin/article/details/115033284</guid><author>guoquanqin</author><pubDate>Sat, 20 Mar 2021 19:40:48 +0800</pubDate><description><![CDATA[栈与队列学习总结

栈

结构特点：后进者先出，先进者后出，同时栈是一种“操作受限”的线性表，只允许在一端插入和删除数据

栈既可以用数组来实现，也可以用链表来实现。用数组实现的栈，我们叫作顺序栈，用链表实现的栈，我们叫作链式栈。



时间空间复杂度分析

在入栈和出栈过程中，只需要一两个临时变量存储空间，所以空间复杂度是 O(1)。

不管是顺序栈还是链式栈，入栈、出栈只涉及栈顶个别数据的操作，所以时间复杂度都是 O(1)。

特殊情况：

对于出栈操作来说，不会涉及内存的重新申请和数据的搬移，所以出.]]></description><category></category></item><item><title><![CDATA[递归学习总结]]></title><link>https://blog.youkuaiyun.com/guoquanqin/article/details/115033270</link><guid>https://blog.youkuaiyun.com/guoquanqin/article/details/115033270</guid><author>guoquanqin</author><pubDate>Sat, 20 Mar 2021 19:34:30 +0800</pubDate><description><![CDATA[递归学习总结

递归需要满足的三个条件

1. 一个问题的解可以分解为几个子问题的解

2. 这个问题与分解之后的子问题，除了数据规模不同，求解思路完全一样

3. 存在递归终止条件



** 写递归代码的关键就是找到如何将大问题分解为小问题的规律，并且基于此写出递推公式，然后再推敲终止条件，最后将递推公式和终止条件翻译成代码。



如果一个问题 A 可以分解为若干子问题 B、C、D，可以假设子问题 B、C、D 已经解决，在此基础上思考如何解决问题 A。而且，只需要思考问题 A 与子问题 B、C、D..]]></description><category></category></item><item><title><![CDATA[链表学习总结]]></title><link>https://blog.youkuaiyun.com/guoquanqin/article/details/114752139</link><guid>https://blog.youkuaiyun.com/guoquanqin/article/details/114752139</guid><author>guoquanqin</author><pubDate>Sat, 13 Mar 2021 16:55:59 +0800</pubDate><description><![CDATA[1、链表的分类

单链表、双向链表和循环链表







单向链表只有一个方向，结点只有一个后继指针 next 指向后面的结点。而双向链表，顾名思义，它支持两个方向，每个结点不止有一个后继指针 next 指向后面的结点，还有一个前驱指针 prev 指向前面的结点。

循环链表是一种特殊的单链表，循环链表的优点是从链尾到链头比较方便。当要处理的数据具有环型结构特点时，就特别适合采用循环链表。

2、删除、插入操作

删除操作

在实际的软件开发中，从链表中删除一个数据无外乎这两种情况：

删除结点中“值等于]]></description><category></category></item><item><title><![CDATA[复杂度分析学习总结]]></title><link>https://blog.youkuaiyun.com/guoquanqin/article/details/114749385</link><guid>https://blog.youkuaiyun.com/guoquanqin/article/details/114749385</guid><author>guoquanqin</author><pubDate>Sat, 13 Mar 2021 16:25:35 +0800</pubDate><description><![CDATA[复杂度分析学习总结

1、大 O 复杂度表示法

T(n) = O( f(n) )

其中，T(n) 表示代码执行的时间；n 表示数据规模的大小；f(n) 表示每行代码执行的次数总和。公式中的 O，表示代码的执行时间 T(n) 与 f(n) 表达式成正比。

大 O 时间复杂度实际上并不具体表示代码真正的执行时间，而是表示代码执行时间随数据规模增长的变化趋势，所以，也叫作渐进时间复杂度（asymptotic time complexity），简称时间复杂度。



 int cal1(int n) {
  ]]></description><category></category></item><item><title><![CDATA[处理业务代码中循环遍历出现的性能问题]]></title><link>https://blog.youkuaiyun.com/guoquanqin/article/details/109339101</link><guid>https://blog.youkuaiyun.com/guoquanqin/article/details/109339101</guid><author>guoquanqin</author><pubDate>Wed, 28 Oct 2020 18:09:49 +0800</pubDate><description><![CDATA[处理业务代码中循环遍历出现的性能问题
在开发中很多场景下我们都会用到foreach循环遍历一个list，并在内部通过sql再去查询对应的数据，代码如下
public void test(){
        // 获取知识点关联数据
        List&lt;KnowledgeRelate&gt; list = getKnowledgeRelate();

        for(KnowledgeRelate relate : list){
            // 执行 list.size()]]></description><category></category></item><item><title><![CDATA[Navicat 远程连接docker容器中的mysql 报错1251 - Client does not support authentication protocol 解决办法]]></title><link>https://blog.youkuaiyun.com/guoquanqin/article/details/98114409</link><guid>https://blog.youkuaiyun.com/guoquanqin/article/details/98114409</guid><author>guoquanqin</author><pubDate>Thu, 01 Aug 2019 22:26:03 +0800</pubDate><description><![CDATA[Navicat 远程连接docker容器中的mysql 报错1251 - Client does not support authentication protocol 解决办法
1）、容器中登录mysql,查看mysql的版本
mysql&gt; status;
2）、进行授权远程连接(注意mysql 8.0跟之前的授权方式不同)
授权
GRANT ALL ON . TO ‘root’@’%’;...]]></description><category></category></item><item><title><![CDATA[关于yum安装后提示There are no enabled repos Run "yum repolist all"..的问题解决]]></title><link>https://blog.youkuaiyun.com/guoquanqin/article/details/98027406</link><guid>https://blog.youkuaiyun.com/guoquanqin/article/details/98027406</guid><author>guoquanqin</author><pubDate>Thu, 01 Aug 2019 09:07:25 +0800</pubDate><description><![CDATA[关于yum安装后提示There are no enabled repos Run “yum repolist all”…的问题解决
1）、一般情况下是因为wget未安装导致的，先去官网下载对应的wget，我的是centos7，地址是http://mirrors.163.com/centos/7/os/x86_64/Packages/，如果是centos5或6版本的就改为http://mirrors...]]></description><category></category></item><item><title><![CDATA[去掉BootStrap的错误弹框信息]]></title><link>https://blog.youkuaiyun.com/guoquanqin/article/details/97920369</link><guid>https://blog.youkuaiyun.com/guoquanqin/article/details/97920369</guid><author>guoquanqin</author><pubDate>Wed, 31 Jul 2019 15:06:37 +0800</pubDate><description><![CDATA[去掉BootStrap的错误弹框信息
找到jquery.dataTables.js,修改如下


]]></description><category></category></item></channel></rss>