<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Kk_Chosen1的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Kk_Chosen1</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Kk_Chosen1]]></copyright><item><title><![CDATA[TCP的运输连接管理——三次握手，四次挥手]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/128495022</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/128495022</guid><author>Kk_Chosen1</author><pubDate>Fri, 30 Dec 2022 14:35:12 +0800</pubDate><description><![CDATA[TCP是面向连接的协议，基于运输连接来传送TCP报文段。TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。]]></description><category></category></item><item><title><![CDATA[Spring框架Assert工具类的使用]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/126526208</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/126526208</guid><author>Kk_Chosen1</author><pubDate>Thu, 25 Aug 2022 15:41:54 +0800</pubDate><description><![CDATA[当 object 不为 null 时抛出异常，notNull(Object object, String message) 方法允许您通过 message 定制异常信息。notEmpty(Map map) / notEmpty(Map map, String message) 和 notEmpty(Object[] array, String message) / notEmpty(Object[] array, String message) 分别对 Map 和 Object[] 类型的入参进行判断；]]></description><category></category></item><item><title><![CDATA[SpringSecurity实现自动登录]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/126452154</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/126452154</guid><author>Kk_Chosen1</author><pubDate>Sun, 21 Aug 2022 16:40:40 +0800</pubDate><description><![CDATA[在日常的上网中，各种网站需要登陆之后才能使用，而频繁的输入用户名和密码也是够令人烦恼的。那么自动登录就解决了这一痛点，就比如登录qq邮箱时就有这一选项。今天正好学到使用spring security可以实现这一功能，因此前来记录一下。简而言之，当用户在第一次登陆之后spring security会生成一个加密的字符串存放在cookie中，同时在数据库中也会存放加密字符串和用户的信息加密字符串。等下一次访问时就会比较cookie与数据库之间的数据，如果一致那么就能免去登录了。]]></description><category></category></item><item><title><![CDATA[SpringSecurity常见注解的使用]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/126444180</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/126444180</guid><author>Kk_Chosen1</author><pubDate>Sun, 21 Aug 2022 11:38:42 +0800</pubDate><description><![CDATA[方法级别的权限认证，只有被该注解指定的角色才能访问该方法使用该注解需要开启注解功能，在配置类或者启动类上添加在controller方法上添加@Secured注解此时如果不是这两个角色其中之一访问请求将被拒绝。]]></description><category></category></item><item><title><![CDATA[Java8 StreamAPI的使用]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/126212169</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/126212169</guid><author>Kk_Chosen1</author><pubDate>Sun, 07 Aug 2022 20:18:25 +0800</pubDate><description><![CDATA[1.Stream关注的是对数据的运算，与CPU打交道。集合关注的是数据的存储，与内存打交道。2. Stream自己不会存储元素，不会改变元素。相反，他们会返回一个持有结果的新Stream。Stream的操作是延迟执行的，这意味着他们会等到需要结果的时候才能执行。3.Stream执行流程。...]]></description><category></category></item><item><title><![CDATA[Java枚举类的使用]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/125957444</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/125957444</guid><author>Kk_Chosen1</author><pubDate>Sun, 24 Jul 2022 13:48:17 +0800</pubDate><description><![CDATA[****自定义枚举类**47*///使用枚举类实例化一个对象}}//定义属性//私有化构造器并给属性赋值}//提供多个枚举类对象publicstaticfinalSeasonSPRING=newSeason("春天","春暖花开");publicstaticfinalSeasonSUMMER=newSeason("夏天","夏日炎炎");运行结果如下/****使用enum定义枚举类。...]]></description><category></category></item><item><title><![CDATA[MyBatis逆向工程生成bean与mapper]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/125663562</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/125663562</guid><author>Kk_Chosen1</author><pubDate>Thu, 07 Jul 2022 20:22:09 +0800</pubDate><description><![CDATA[Mybatis的逆向工程是通过mybatis generator来实现的，可以帮我们生成bean，mapper接口和mapper映射文件。想要使用mybatis generator需要先引入对应的依赖，如下


需要一个配置文件来设置生成代码的参数


然后使用Java代码配合xml文件运行，直接生成文件


将xml文件改成正确的名字直接运行便可 可见，直接自动生成了这些文件，当数据库表和字段很多的时候使用逆向工程生成文件能为我们剩下不少的精力...]]></description><category></category></item><item><title><![CDATA[解析代理模式（Proxy）]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124926496</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124926496</guid><author>Kk_Chosen1</author><pubDate>Mon, 23 May 2022 15:10:09 +0800</pubDate><description><![CDATA[前言

代理模式其实在生活中非常常见，就比如你想买火车票不一定要去火车站买。而是可以去附近的代售点或者是在手机上的12306App上买，这里的代售点和12306App就是代理类。

亦或是在外面租房子，当我们无法方便的找到房东直租时，可以直接委托租房中介帮助我们找房子。这里的租房中介便是代理类。

什么是代理模式

使用一个代理对象将原始对象包装起来，然后用该代理对象取代原始的对象。任何对原始对象的调用都需要经过代理对象。代理对象决定时候以及何时将方法调用转到原始对象上。

代理模式的结构

代理模式的结构]]></description><category></category></item><item><title><![CDATA[Java算法——验证回文串（LeetCode第125题）]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124894920</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124894920</guid><author>Kk_Chosen1</author><pubDate>Sat, 21 May 2022 10:13:44 +0800</pubDate><description><![CDATA[问题描述

给定一个字符串，验证它是否是回文串，只考虑字母和数字字符，可以忽略字母的大小写。

说明：本题中，我们将空字符串定义为有效的回文串。

示例



分析

先判断原字符串中每个字符是否是字母或者是数字，使用 Character类中的静态方法isLetterOrDigit(char ch)来判断

如果是的则添加到StringBuilder中 然后再使用双指针判断是否为回文串

其实可以使用String类中的replaceAll(String regex, String replacement)方]]></description><category></category></item><item><title><![CDATA[Java算法——移动零（LeetCode第283题）]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124674169</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124674169</guid><author>Kk_Chosen1</author><pubDate>Mon, 09 May 2022 20:24:01 +0800</pubDate><description><![CDATA[问题描述

给定一个数组nums，编写一个函数将所有0移动到数组的末尾，同时保持非零元素的相对顺序。

请注意，必须在不复制数组的情况下原地对数组进行操作。

示例



分析

解法一：

遍历数组直接将非零元素全部移动到前面来，然后将数组后面补上零

解法二：

使用快慢指针，慢指针指向已经处理好的非零元素的尾部，快指针指向未处理好的元素的头部。

当快指针不断前移并且指向的元素不为0时，将其与慢指针指向的元素交换。

然后慢指针前移一位。

注意到以下性质：

慢指针左边均为非零数
	快指针...]]></description><category></category></item><item><title><![CDATA[Java算法——数组中重复的数据（LeetCode第442题）]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124650587</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124650587</guid><author>Kk_Chosen1</author><pubDate>Sun, 08 May 2022 16:56:48 +0800</pubDate><description><![CDATA[问题描述

给你一个长度为 n 的整数数组 nums ，其中 nums 的所有整数都在范围 [1, n] 内，且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数，并以数组形式返回。

你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。

示例



分析

因为题目中规定了nums 的所有整数都在范围 [1, n] 内，因此 nums 的取值范围正好与 nums 的下标[0, n - 1]能相互映射。

利用正负号来标识数组元素是否重复，那么每次判断 nums[]]></description><category></category></item><item><title><![CDATA[Java算法——反转链表（LeetCode第206题）]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124634856</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124634856</guid><author>Kk_Chosen1</author><pubDate>Sat, 07 May 2022 17:18:30 +0800</pubDate><description><![CDATA[问题描述

给你单链表的头节点 head ，请你反转链表，并返回反转后的链表。

示例



分析

解法一：

使用头插法返回一个新的结果链表，因为头插法产生的链表就是逆序的。因此刚好就是反转过来的链表。

解法二：

使用双指针，直接将链表中的指针全部改变方向，最终产生的链表就是反转过来的链表。

如图：



定义一个preNode初始化为null，一个nextNode指向头节点。定义一个tempNode临时节点保存nextNode.next。

首先用tempNode保存当前节点的下一个节点，然后将]]></description><category></category></item><item><title><![CDATA[Java算法——翻转二叉树（LeetCode第226题）]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124632040</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124632040</guid><author>Kk_Chosen1</author><pubDate>Sat, 07 May 2022 15:38:01 +0800</pubDate><description><![CDATA[问题描述

给你一棵二叉树的根节点 root ，翻转这棵二叉树，并返回其根节点。

示例



分析

自顶向下递归交换每个结点的左右子树，便可将整棵树交换。

代码实现


class Solution {
    public TreeNode invertTree(TreeNode root) {
        //递归终止条件
        if (root == null) return null;
        //交换当前节点的左右子树
        TreeNode tempRoot]]></description><category></category></item><item><title><![CDATA[Java算法——多数元素（LeetCode第169题）]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124560267</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124560267</guid><author>Kk_Chosen1</author><pubDate>Tue, 03 May 2022 20:00:18 +0800</pubDate><description><![CDATA[问题描述

给定一个大小为 n 的数组 nums ，返回其中的多数元素。多数元素是指在数组中出现次数 大于

⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的，并且给定的数组总是存在多数元素。

示例



分析

解法一：

利用HashMap，遍历输入数组将数组元素作为key，出现次数作为value。

遍历完数组之后，将value最大的map的key返回便是最终答案。

代码：


class Solution {
    public int majorityElement(int[] nums)]]></description><category></category></item><item><title><![CDATA[Java算法——按奇偶排序数组（LeetCode第905题）]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124485348</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124485348</guid><author>Kk_Chosen1</author><pubDate>Thu, 28 Apr 2022 22:52:15 +0800</pubDate><description><![CDATA[问题描述：

给你一个整数数组 nums，将 nums 中的的所有偶数元素移动到数组的前面，后跟所有奇数元素。

返回满足此条件的 任一数组 作为答案。

示例：



分析：

使用一个长度与nums相等的新数组存储排好序的整数。遍历nums，遇到偶数便将其存放进新数组的前面（从0下标开始），遇到奇数便将其存储至新数组后面（从下标nums.length - 1 开始）。

判断是偶数还是奇数的方法这里不用除二取余，可以使用位运算。因为偶数的二进制最后一位数字一定是0，而奇数的二进制最后一位数字一定是1。
]]></description><category></category></item><item><title><![CDATA[Java算法——二进制间距（LeetCode第868题）]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124398106</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124398106</guid><author>Kk_Chosen1</author><pubDate>Mon, 25 Apr 2022 10:11:35 +0800</pubDate><description><![CDATA[问题描述

给定一个正整数 n，找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1，返回 0 。

如果只有 0 将两个 1 分隔开（可能不存在 0 ），则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如，"1001" 中的两个 1 的距离为 3 。

示例



分析

根据题意进行模拟，用last记录下前一个遇到1的位置，当后面再遇到1时计算二者之间的距离并更新last。

可使用 位与（&amp;） 来比较二进制最后一位是]]></description><category></category></item><item><title><![CDATA[Java算法——爬楼梯（LeetCode第70题）]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124272814</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124272814</guid><author>Kk_Chosen1</author><pubDate>Tue, 19 Apr 2022 14:44:13 +0800</pubDate><description><![CDATA[问题描述

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢？

示例



分析

题目中给出，上台阶的方式只有两种，一种为一步跨一阶，一种为一步跨两阶。

这里先列出上前4阶台阶的方式：

第1阶：只能一步跨一阶（1种方式）

第2阶：（1）1阶 + 1阶 （2） 2阶 （2种方式）

第3阶：（1）1阶 + 1阶 （2）1阶 + 2阶 （3）2阶 + 1阶 （3种方式）

第4阶：（1）1阶 + 1阶 + 1阶 + 1阶 （2）1阶]]></description><category></category></item><item><title><![CDATA[Java算法——斐波那契数（LeetCode第509题）]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124272477</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124272477</guid><author>Kk_Chosen1</author><pubDate>Tue, 19 Apr 2022 14:19:55 +0800</pubDate><description><![CDATA[问题描述

斐波那契数 （通常用 F(n) 表示）形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始，后面的每一项数字都是前面两项数字的和。

示例



分析

根据题目要求可以发现从0，1之后，每个数字都可以由前面两项数字之和计算出来。因此这就是一个最简单的动态规划问题，动态规划的递推公式就是Fn=(Fn - 1) + (Fn - 2)。那么可以创建一个动态规划数组，前两项为0和1。从下标2开始每个数组元素的值都是数组前两个元素的和，最后输出数组最大下标的值就是解。

代码实现


packag]]></description><category></category></item><item><title><![CDATA[Spring Cloud——GateWay网关Filter的使用]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124214540</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124214540</guid><author>Kk_Chosen1</author><pubDate>Sat, 16 Apr 2022 15:52:43 +0800</pubDate><description><![CDATA[是什么

路由过滤器可用于修改进入的HTTP请求和返回的HTTP响应，路由过滤器只能指定路由进行使用。
Spring Cloud Gateway 内置了多种路由过滤器，他们都由GatewayFilter的工厂类来产生

Gateway自带的Filter种类繁多，具体可以参见官网Spring Cloud Gatewayhttps://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/#th]]></description><category></category></item><item><title><![CDATA[SpringCloud——Gateway网关Predicate（断言）的使用]]></title><link>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124214122</link><guid>https://blog.youkuaiyun.com/Kk_Chosen1/article/details/124214122</guid><author>Kk_Chosen1</author><pubDate>Sat, 16 Apr 2022 15:25:50 +0800</pubDate><description><![CDATA[是什么



Route Predicate Factories这个是什么? 



Spring Cloud Gateway将路由匹配作为Spring WebFlux HandlerMapping基础架构的一部分。
Spring Cloud Gateway包括许多内置的Route Predicate工厂。所有这些Predicate都与HTTP请求的不同属性匹配。多个Route Predicate工厂可以进行组合

Spring Cloud Gateway 创建 Route 对象时， 使用 RoutePr.]]></description><category></category></item></channel></rss>