<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_35531985的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_35531985</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_35531985]]></copyright><item><title><![CDATA[xxxxx]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/132839730</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/132839730</guid><author>qq_35531985</author><pubDate>Tue, 12 Sep 2023 20:08:05 +0800</pubDate><description><![CDATA[xxxxx。]]></description><category></category></item><item><title><![CDATA[手写Sping(3) :手写AOP与事务管理]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/116950538</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/116950538</guid><author>qq_35531985</author><pubDate>Tue, 18 May 2021 10:27:00 +0800</pubDate><description><![CDATA[为了方便理解代码中的实现，我们先对AOP与事务的概念做简单介绍：
AOP
AOP（Aspect-Oriented Programming：面向切面编程）能够将那些与业务无关，却为业务模块所共同调用的逻辑或者责任（例如事务处理、日志管理、权限控制）封装起来，以便减少系统的重复代码，降低模块的耦合度，并有利于未来的可扩展性与可维护性。



横切关注点：跨越应用程序多个模块的方法或者功能。即：与我们的业务逻辑无关，但是是我们需要关注的部分，也即横切关注点
切面（Apect）：横切关注点被模块化的特殊对象。即，它]]></description><category></category></item><item><title><![CDATA[手写Sping(2) :手写IOP与DI（依赖注入）]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/116949688</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/116949688</guid><author>qq_35531985</author><pubDate>Mon, 17 May 2021 22:47:11 +0800</pubDate><description><![CDATA[为了方便理解项目中的实现，我们先对IOC与DI进行简单的介绍
控制反转
IoC（Inverse of Control:控制反转）是一种设计思想，就是将原本在程序中手动创建对象的控制权，交由Spring框架来管理。所谓IOC一句话搞定：对象由Spring来创建、管理、装配。而DI(依赖注入)是实现IOC的一种方式。所谓的控制反转就是获取依赖对象的方式反转了。

Spring IOC 容器就像是一个工厂一样，当我们需要创建一个对象的时候，只需要配置好配置文件/注解即可，完全不用考虑对象是如何被创建出来的。 IO]]></description><category></category></item><item><title><![CDATA[手写Sping(1) : 项目介绍]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/116949651</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/116949651</guid><author>qq_35531985</author><pubDate>Mon, 17 May 2021 22:07:35 +0800</pubDate><description><![CDATA[为了进一步加深对Spring框架的理解，项目从Spring的IOC、依赖注入、AOP以及事务管理四个方面，对Spring框架进行简单的重写




]]></description><category></category></item><item><title><![CDATA[JWT加密解密算法]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/116310046</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/116310046</guid><author>qq_35531985</author><pubDate>Fri, 30 Apr 2021 23:23:13 +0800</pubDate><description><![CDATA[JWT(JSON Web Token)是一个开放标准(RFC 7519)，它定义了一种紧凑的、自包含的方式，用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任，因为它将使用数字签名（密钥）记性加密解密。
什么时候使用JWT

Authorization (授权) : 这是JWT最常见的使用场景，一旦用户登录后，后面每个请求都将包含JWT，用户将被允许访问该令牌允许的路由、服务和资源。单点登录是JWT应用的一个场景，并且JWT可以轻松的跨域使用。
Information Exchange (]]></description><category></category></item><item><title><![CDATA[Redis集群工作原理]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/115634500</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/115634500</guid><author>qq_35531985</author><pubDate>Mon, 12 Apr 2021 21:26:34 +0800</pubDate><description><![CDATA[Redis Cluster


redis cluster是Redis的分布式解决方案，在3.0版本推出后有效地解决了redis分布式方面的需求。


Redis自动将数据进行分片，每个master上放一部分数据提供内置的高可用支持，部分master不可用时，还是可以继续工作的，但是当超过一半的master结点挂掉后，集群将不再可用。


支撑N(N必须是奇数)个redis master node，每个master node都可以挂载多个slave node高可用，因为每个master都有salve节点，那]]></description><category></category></item><item><title><![CDATA[redis集群:RedisCluster 出现redis.clients.jedis.exceptions.JedisConnectionException: no reachable node in]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/115578264</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/115578264</guid><author>qq_35531985</author><pubDate>Sat, 10 Apr 2021 15:47:29 +0800</pubDate><description><![CDATA[错误信息
Exception in thread "main" redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster
    at redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnection(JedisSlotBasedConnectionHandler.java:57)
    at redis]]></description><category></category></item><item><title><![CDATA[String与byte[]的互转]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/115553983</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/115553983</guid><author>qq_35531985</author><pubDate>Sat, 10 Apr 2021 12:54:05 +0800</pubDate><description><![CDATA[在Java中可以实现序列化将Java对象转为二进制序列，这方便进行对象数据的传输与存储。在实际使用的过程中，将二进制序列转为String是一种常见的形式。
下面我们先介绍一种错误的互转方式，这也是我搜索时见过最多的。
public class SerializeUtils {
    public static byte[] serialize(Object obj){
        byte[] bytes = null;
        try {
            ByteArrayOutpu]]></description><category></category></item><item><title><![CDATA[刷题笔记：再讲二分查找(以leetcode剑指offer53-I为例)]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/115266342</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/115266342</guid><author>qq_35531985</author><pubDate>Sat, 27 Mar 2021 16:52:03 +0800</pubDate><description><![CDATA[在这篇博客中，我们以leetcode162题为例对二分查找中的易错点进行了辨析，但是在这篇博客中，关于左右边界的查找写的并不好。下面对左右边界的查找的代码进行简化。
左边界查找
在上篇博客中，这块关于左边界查找的通用模板是以[0,nums.length)为范围进行查找的。这篇博客中关于查找范围的讲解时非常棒的。下面对于其中模板的改进也是基于这个理论的：
        int len=nums.length;
        int mid=0;
        int left=0,right=len-1]]></description><category></category></item><item><title><![CDATA[Redis入门：redis持久化]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/113390315</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/113390315</guid><author>qq_35531985</author><pubDate>Mon, 08 Feb 2021 17:56:43 +0800</pubDate><description><![CDATA[Redis将数据存储在内存当中，为了防止数据丢失与服务重启时能够恢复数据，Redis支持数据的持久化，这主要分为两种方式，即RDB与AOF.
RDB
RDB持久化是把当前进程数据生成快照保存到磁盘上的过程，由于是某一时刻的快照，那么快照中的值要早于或者等于内存中的值。
生成的rdb文件的名称以及存储位置由redis.conf中的dbfilename和dir两个参数控制，默认生成的rdb文件是dump.rdb。
触发方式
手动触发
在redis客户端执行save与bgsave命令。但两种命令存在区别：

sa]]></description><category></category></item><item><title><![CDATA[刷题笔记：快慢指针]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/112546948</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/112546948</guid><author>qq_35531985</author><pubDate>Wed, 27 Jan 2021 12:10:15 +0800</pubDate><description><![CDATA[快慢指针
相关证明
Th 1.在有环的链表中，快慢指针一定相遇。
证明：如果链表中有环，快慢指针一定在环内相遇。这可以看做是，快指针追赶慢指针的过程。

如果快指针在与慢指针差一步，则在下一步中，快指针前进两步，慢指针前进一步，两个指针相遇。
如果快慢指针相差两步，在下一步中，快指针前进两步，慢指针前进一步，两个指针相差一步，转为第一种情况。
如果快慢指针相差N步，经过N-1步的追逐，转换为第一种情况。
因此在有环的链表中快慢指针必然相遇。
2.Th 2：慢指针进入环之后，快指针最多比慢指针多绕一个圈。
证]]></description><category></category></item><item><title><![CDATA[check the manual that corresponds to your MySQL server version for the right syntax to use near ‘XX‘]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/112790258</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/112790258</guid><author>qq_35531985</author><pubDate>Mon, 18 Jan 2021 18:02:17 +0800</pubDate><description><![CDATA[问题描述：
我的项目原来是使用Orcale的，为了方便使用我想把它改为mysql的。在完成重新建表进行测试时，出现这个令人匪夷所思的bug——check the manual that corresponds to your MySQL server version for the right syntax to use near ‘where id=‘1’’，还说是语法错误。
原因分析：
在查看出错的sql语句后，我很确信语法不会有问题。这能怎么错？？？

参考了这篇博文，我觉得问题应该在关键字上。
解决]]></description><category></category></item><item><title><![CDATA[刷题笔记：排序算法总结（计数、桶排、基数）]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/112295264</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/112295264</guid><author>qq_35531985</author><pubDate>Thu, 07 Jan 2021 12:08:27 +0800</pubDate><description><![CDATA[计数排序
计数排序不是基于比较的排序算法，其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序，计数排序要求输入的数据必须是有确定范围的整数。
算法步骤：

找出待排序的数组中最大和最小的元素；
统计数组中每个值为i的元素出现的次数，存入数组C的第i项；
对所有的计数累加（从C中的第一个元素开始，每一项和前一项相加）；
反向填充目标数组：将每个元素i放在新数组的第C(i)项，每放一个元素就将C(i)减去1。

代码如下：
下述代码事实上还可以进行优化，即新建的tmp的大]]></description><category></category></item><item><title><![CDATA[刷题笔记：排序算法汇总（2）（选择、归并）]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/112281091</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/112281091</guid><author>qq_35531985</author><pubDate>Wed, 06 Jan 2021 19:47:13 +0800</pubDate><description><![CDATA[归并排序（二路归并）
思想：利用分治的思想，对待排序的数组划分为一个个的子排序任务，然后合并，再进行排序。具体来说就是：

把长度为n的输入序列分成两个长度为n/2的子序列；
对这两个子序列分别采用归并排序；
将两个排序好的子序列合并成一个最终的排序序列。
将上述步骤递归进行，直至最终得到有序序列。

见下图：

代码实现如下：
	public static int[] sort(int[] nums){
        return reSort(nums,0,nums.length-1);
    }
]]></description><category></category></item><item><title><![CDATA[刷题笔记：排序算法汇总(1)（冒泡、快排、插入排序、希尔排序）]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/111585025</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/111585025</guid><author>qq_35531985</author><pubDate>Sun, 27 Dec 2020 14:13:59 +0800</pubDate><description><![CDATA[排序算法是算法题中非常常见的一类题，相关的排序方法也很多，如：快速排序、冒泡排序、归并排序、简单选择排序、堆排序等等。本文以Leetcode 面试题 17.14. 最小K个数为例，对以上排序算法做一个回顾。
冒泡排序
冒泡排序是一种交换排序算法。它重复地走访过要排序的数列，一次比较两个元素，如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换，也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
算法步骤：

比较相邻的元素。如果第一个]]></description><category></category></item><item><title><![CDATA[刷题笔记：根据中序遍历与前序遍历确定二叉树&根据后序遍历与前序遍历确定二叉树]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/109869554</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/109869554</guid><author>qq_35531985</author><pubDate>Fri, 20 Nov 2020 22:57:20 +0800</pubDate><description><![CDATA[根据中序遍历与前序遍历确定二叉树
对于一棵树而言，前序遍历的形式为：
[根节点，[左子树的前序遍历]，[右子树的前序遍历]]。
中序遍历形式为：
[[左子树的中序遍历]，根节点，[右子树的中序遍历]]
因此，只要我们定位到根节点在中序遍历中的位置，就可以知道其左边的序列是其左子树的中序遍历，右边的序列是其右子树中序遍历的结果。此外，由于中序与前序遍历，其子树节点的数量是一定的，所以可以进一步确定根节点的左子树与右子树的前序与中序遍历。因此，我们就可以递归的构造左子树与右子树。
代码实现如下：
public ]]></description><category></category></item><item><title><![CDATA[谷歌学术403：某URL没有权限访问]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/109839210</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/109839210</guid><author>qq_35531985</author><pubDate>Fri, 20 Nov 2020 09:36:18 +0800</pubDate><description><![CDATA[出现这个问题的原因，可能是因为电脑不间断的发送访问谷歌学术的请求，导致IP被封，放着不管，过段时间自己也会好，但有的时候着急用不能等，这个时候该怎么解决呢？
解决方法
在谷歌浏览器中找到设置，然后点击隐私设置与安全性——&gt;清除浏览数据

然后选择请清楚cookie及其他缓存文件。

再次打开谷歌学术，已经可以正常访问，问题解决。


...]]></description><category></category></item><item><title><![CDATA[Java：深度优先搜索、广度优先搜索]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/109693972</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/109693972</guid><author>qq_35531985</author><pubDate>Sat, 14 Nov 2020 18:31:30 +0800</pubDate><description><![CDATA[以下图的遍历为例

广度优先搜索
英文缩写为BFS即Breadth FirstSearch。其过程检验来说是对每一层节点依次访问，访问完一层进入下一层，而且每个节点只能访问一次。在实际实现中，使用队列来进行实现，先往队列中插入左节点再插入右节点，这样出队就是先左后右了。

先将A插入队列中，队列中有元素（A）
将A弹出，得到A结点，然后A的孩子从左至右先后放到队列中，（B,C）。
继续弹出B，得到B结点，然后将B的孩子从左至右先后放入到队列中，（C,D,E）。
然后弹出C，将C的左右孩子依次放入（D,E,F]]></description><category></category></item><item><title><![CDATA[深度学习实验：服务器上批量nohup运行程序]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/109471242</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/109471242</guid><author>qq_35531985</author><pubDate>Tue, 03 Nov 2020 16:05:20 +0800</pubDate><description><![CDATA[在运行python程序时，需要对多个版本或者多个方法的代码进行运行，它们往往需要设置一个系列的参数，然后使用python xxx.py运行该py文件。这种情况往往要做大量重复的没有意义的工作，所以我想通过批量生成运行命令，然后批量跑实验。

解决方案：
首先我们需要一个批量生成命令的脚本，如下：
from copy import deepcopy

def generate(param_dict):

    count=0
    final=1
    for k,v in param_dict.ite]]></description><category></category></item><item><title><![CDATA[刷题笔记：树的前序、中序、后序遍历]]></title><link>https://blog.youkuaiyun.com/qq_35531985/article/details/109403122</link><guid>https://blog.youkuaiyun.com/qq_35531985/article/details/109403122</guid><author>qq_35531985</author><pubDate>Sat, 31 Oct 2020 17:17:13 +0800</pubDate><description><![CDATA[在此之前，我们定义二叉树的数据结构如下：

class TreeNode//节点结构
{
	int value;
	List&lt;TreeNode&gt; children=new ArrayList&lt;&gt;();
	TreeNode left;
	TreeNode right;
	
	TreeNode(int value)
	{
		this.value = value;
	}
}


//主函数
public class main {

    public static List&lt;In]]></description><category></category></item></channel></rss>