<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[畅春园]]></title><description><![CDATA[韬光养晦，有所作为。]]></description><link>https://blog.youkuaiyun.com/qq_43539670</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_43539670]]></copyright><item><title><![CDATA[防范SYN洪泛攻击的方法 -- SYN cookie]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/125835867</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/125835867</guid><author>qq_43539670</author><pubDate>Sun, 17 Jul 2022 20:26:22 +0800</pubDate><description><![CDATA[在tcp的三次握手中，如果客户端不发送ACK来完成三次握手的第三步，那么通常一分多钟之后，服务器将中止半开连接并回收资源。如果攻击者发送大量的TCPSYN报文段，而不完成第三次握手的步骤，那么服务器会不断为这些半开连接分配资源，导致服务器的连接资源被消耗殆尽。..................]]></description><category></category></item><item><title><![CDATA[InnoDB中MVCC的实现原理]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/125034547</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/125034547</guid><author>qq_43539670</author><pubDate>Sun, 29 May 2022 19:05:54 +0800</pubDate><description><![CDATA[目的

在尽可能避免加锁操作的情况下，实现可重复读。

实现原理

在每行记录后面保存两个隐藏的列，这两个列中用两个版本号来表征下面两个时间：

1. 行的创建时间。

2. 行的过期时间（或者删除时间）。

这里的“时间”指的是系统版本号。每开始一个新的事务，系统版本号就会自动递增。

操作过程

select

根据以下两个条件检查每行记录：

1. 行的创建时间要早于当前事务版本。

2. 行的删除时间要么没有定义，要么晚于当前事务版本。

只有同时满足以上两个条件，才会返回查询结果。

insert]]></description><category></category></item><item><title><![CDATA[Leetcode.0526 | 优美的排列]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/123488326</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/123488326</guid><author>qq_43539670</author><pubDate>Mon, 14 Mar 2022 23:53:06 +0800</pubDate><description><![CDATA[题目

假设有从 1 到 n 的 n 个整数。用这些整数构造一个数组 perm（下标从 1 开始），只要满足下述条件之一 ，该数组就是一个 优美的排列 ：

1、perm[i] 能够被 i 整除
2、i 能够被 perm[i] 整除
给你一个整数 n ，返回可以构造的“优美的排列”的 数量 。

示例


输入：n = 2
输出：2
解释：
第 1 个优美的排列是 [1,2]：
  - perm[1] = 1 能被 i = 1 整除
  - perm[2] = 2 能被 i = 2 整除
第 2 个...]]></description><category></category></item><item><title><![CDATA[查找文件夹内文件中，含有特定词语的页]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/123302805</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/123302805</guid><author>qq_43539670</author><pubDate>Sat, 05 Mar 2022 22:40:50 +0800</pubDate><description><![CDATA[为了减轻工作负担开发的一个小程序]]></description><category></category></item><item><title><![CDATA[Python中requirements.txt文件]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/122870172</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/122870172</guid><author>qq_43539670</author><pubDate>Thu, 10 Feb 2022 21:58:42 +0800</pubDate><description><![CDATA[用于表示项目的依赖包以及依赖包的版本。我们使用如下命令来重新构建项目所需要的运行环境依赖：


pip install -r requirements.txt

效果如下所示：



对于一个已经构建成功的项目，可以使用如下命令生成requirements.txt文件：


pip freeze &gt; requirements.txt


...]]></description><category></category></item><item><title><![CDATA[RESTful API 简介（学习笔记）]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/122842771</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/122842771</guid><author>qq_43539670</author><pubDate>Wed, 09 Feb 2022 16:10:02 +0800</pubDate><description><![CDATA[RESTful接口的命名规范与语义格式

RESTful是一种网络应用程序的设计风格和开发方式，可以使用xml方式来定义或者json格式来定义。RESTful适用于移动互联网厂商作为业务接口的场景，实现调用移动网络资源的功能。

动作类型：新增、修改、删除所调用的资源。

RESTful的三个要点：

1. 基于http协议URL对外暴露；



URL被视为资源，中括号的内容为可选项。





2. 使用XML或者JSON格式定义数据，不可以包含任何与展现有关的内容。比如，下图中返回了浏览器才能解析的内]]></description><category></category></item><item><title><![CDATA[在控制面板找不到程序的情况下，卸载流氓软件]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/122802124</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/122802124</guid><author>qq_43539670</author><pubDate>Sun, 06 Feb 2022 21:49:44 +0800</pubDate><description><![CDATA[1. 使用快捷键：Ctrl+Shift+Esc ， 打开任务管理器。可以找到程序所对应的进程：



2. 右键点击该进程，选择 “打开文件所在的位置”，显示文件：



3. 打开这个文件夹的上一级目录：



4. 找到uninst，执行该程序：




...]]></description><category></category></item><item><title><![CDATA[Chrome浏览器解决主页被劫持的问题]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/122777438</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/122777438</guid><author>qq_43539670</author><pubDate>Thu, 03 Feb 2022 18:19:19 +0800</pubDate><description><![CDATA[问题

已经设置好启动时的页面，如下所示：



但是打开浏览器时，这个设置仍然无效：



解决方法

在浏览器图标上单击鼠标右键，在菜单中选择“属性”，如下所示：



在“目标”一栏当中，可以发现浏览器的目标已经被劫持：



将这个地址删掉，换成你想要的地址：





切到“常规”标签，将“只读”前面的对勾去掉：



点击确定，重启浏览器：



如果你不写目标地址，打开浏览器以后的默认如下：






...]]></description><category></category></item><item><title><![CDATA[Leetcode.0143 | 重排链表]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/122640394</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/122640394</guid><author>qq_43539670</author><pubDate>Sat, 22 Jan 2022 17:29:41 +0800</pubDate><description><![CDATA[题目

给定一个单链表 L 的头节点 head ，单链表 L 表示为：



L0 → L1 → … → Ln - 1 → Ln


请将其重新排列后变为：



L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …


不能只是单纯的改变节点内部的值，而是需要实际的进行节点交换。

示例





输入：head = [1,2,3,4]
输出：[1,4,2,3]


解决方法

1. 使用快慢指针的方式，寻找链表的中间节点。

2.从中间节点的下一个节点为开头，将链表断成两半。
]]></description><category></category></item><item><title><![CDATA[Leetcode.0378 | 有序矩阵中第k小的元素]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/122591472</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/122591472</guid><author>qq_43539670</author><pubDate>Wed, 19 Jan 2022 23:28:05 +0800</pubDate><description><![CDATA[题目

给你一个n x n矩阵matrix ，其中每行和每列元素均按升序排序，找到矩阵中第 k 小的元素。
请注意，它是 排序后 的第 k 小元素，而不是第 k 个 不同 的元素。

示例


输入：matrix = [[1,5,9],[10,11,13],[12,13,15]], k = 8
输出：13
解释：矩阵中的元素为 [1,5,9,10,11,12,13,13,15]，第 8 小元素是 13




输入：matrix = [[-5]], k = 1
输出：-5


解决方法

使用二分法，...]]></description><category></category></item><item><title><![CDATA[工作中使用的小众git命令整理（不定时更新）]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/121653652</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/121653652</guid><author>qq_43539670</author><pubDate>Wed, 19 Jan 2022 21:50:54 +0800</pubDate><description><![CDATA[边工作边整理]]></description><category></category></item><item><title><![CDATA[将docker镜像外部的文件转到镜像内部]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/122493214</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/122493214</guid><author>qq_43539670</author><pubDate>Wed, 19 Jan 2022 21:29:43 +0800</pubDate><description><![CDATA[1. 运行docker镜像，镜像变为容器


docker run &lt;镜像名&gt;

2. 容器运行结束，可以使用docker ps -a 查看容器名和id。



3. 将指定的文件拷贝到容器里面


docker cp &lt;容器外文件的路径&gt; &lt;要拷贝到容器内的路径&gt;

4. 将容器生成镜像


docker commit &lt;容器id或容器名&gt; &lt;镜像名&gt; 


...]]></description><category></category></item><item><title><![CDATA[查看docker镜像中的文件]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/122493231</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/122493231</guid><author>qq_43539670</author><pubDate>Fri, 14 Jan 2022 14:07:27 +0800</pubDate><description><![CDATA[1. 进入镜像内部


docker run -it --entrypoint sh &lt;镜像名称&gt;

2.执行上面命令后，会进入镜像内部。然后使用ls -al会将镜像中的文件列出来






]]></description><category></category></item><item><title><![CDATA[Leetcode.0287 | 寻找重复数]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/122385361</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/122385361</guid><author>qq_43539670</author><pubDate>Sat, 08 Jan 2022 20:29:52 +0800</pubDate><description><![CDATA[题目

给定一个包含 n + 1 个整数的数组 nums ，其数字都在 1 到 n 之间（包括 1 和 n），可知至少存在一个重复的整数。

假设 nums 只有 一个重复的整数 ，找出 这个重复的数 。

你设计的解决方案必须不修改数组 nums 且只用常量级 O(1) 的额外空间。

示例



输入：nums = [1,3,4,2,2]
输出：2




输入：nums = [3,1,3,4,2]
输出：3




输入：nums = [1,1]
输出：1




输入：nums = [1,1,2]
]]></description><category></category></item><item><title><![CDATA[Leetcode.0437 | 路径总和]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/122372004</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/122372004</guid><author>qq_43539670</author><pubDate>Sat, 08 Jan 2022 00:19:01 +0800</pubDate><description><![CDATA[题目

给定一个二叉树的根节点 root ，和一个整数 targetSum ，求该二叉树里节点值之和等于 targetSum 的 路径 的数目。

路径 不需要从根节点开始，也不需要在叶子节点结束，但是路径方向必须是向下的（只能从父节点到子节点）。

示例




输入：root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
输出：3
解释：和等于 8 的路径有 3 条，如图所示。


使用双重递归解决问题

双重递归的主要应用于需要对每个节点进行相.]]></description><category></category></item><item><title><![CDATA[Leetcode.0215 | 数组中的第K个最大元素]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/122341714</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/122341714</guid><author>qq_43539670</author><pubDate>Thu, 06 Jan 2022 19:04:16 +0800</pubDate><description><![CDATA[题目

给定整数数组 nums 和整数 k，请返回数组中第 k 个最大的元素。

请注意，你需要找的是数组排序后的第 k 个最大的元素，而不是第 k 个不同的元素。

示例



输入: [3,2,1,5,6,4] 和 k = 2输出: 5




输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4


解决方法

使用堆排序解决此问题。首先在原地建立一个，做 k - 1次删除操作后堆顶元素就是我们要找的答案。

根据初始数组，手动构建大根堆。大根堆的本质是一棵完全二叉树，所有的父结点]]></description><category></category></item><item><title><![CDATA[Leetcode.0236 | 二叉树的最近公共祖先]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/122337105</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/122337105</guid><author>qq_43539670</author><pubDate>Thu, 06 Jan 2022 13:35:29 +0800</pubDate><description><![CDATA[题目

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

最近公共祖先的定义为：“对于有根树 T 的两个节点 p、q，最近公共祖先表示为一个节点 x，满足 x 是 p、q 的祖先且 x 的深度尽可能大（一个节点也可以是它自己的祖先）。”

示例






输入：root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出：3
解释：节点 5 和节点 1 的最近公共祖先是节点 3 。





输入：root = [3,5,1,6,2,0,8,nul.]]></description><category></category></item><item><title><![CDATA[Leetcode.0207 | 课程表]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/122321376</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/122321376</guid><author>qq_43539670</author><pubDate>Wed, 05 Jan 2022 15:37:08 +0800</pubDate><description><![CDATA[题目

你这个学期必须选修 numCourses 门课程，记为 0 到 numCourses - 1 。

在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出，其中 prerequisites[i] = [ai, bi] ，表示如果要学习课程 ai 则 必须 先学习课程 bi 。

例如，先修课程对[0, 1] 表示：想要学习课程 0 ，你需要先完成课程 1 。
请你判断是否可能完成所有课程的学习？如果可以，返回 true ；否则，返回 false 。

示例


输入.]]></description><category></category></item><item><title><![CDATA[Leetcode.0200 | 岛屿数量]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/122313841</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/122313841</guid><author>qq_43539670</author><pubDate>Tue, 04 Jan 2022 23:39:52 +0800</pubDate><description><![CDATA[题目

给你一个由 '1'（陆地）和 '0'（水）组成的的二维网格，请你计算网格中岛屿的数量。

岛屿总是被水包围，并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外，你可以假设该网格的四条边均被水包围。

示例


输入：grid = [
 ["1","1","1","1","0"],
 ["1","1","0","1","0"],
 ["1","1","0","0","0"],
 ["0","0","0","0","0"]
]
输出：1



输入：grid = [
 ["...]]></description><category></category></item><item><title><![CDATA[Leetcode.0148 | 排序链表]]></title><link>https://blog.youkuaiyun.com/qq_43539670/article/details/122285134</link><guid>https://blog.youkuaiyun.com/qq_43539670/article/details/122285134</guid><author>qq_43539670</author><pubDate>Mon, 03 Jan 2022 13:29:28 +0800</pubDate><description><![CDATA[题目

给你链表的头结点 head ，请将其按 升序 排列并返回 排序后的链表 。

要求时间复杂度为

示例





输入：head = [4,2,1,3]
输出：[1,2,3,4]






输入：head = [-1,5,3,4,0]
输出：[-1,0,3,4,5]



解决方法

使用归并排序。步骤如下：

1.找到链表的中点，以中点为分界，将链表拆分成两个子链表。寻找链表的中点可以使用快慢指针的做法，快指针每次移动2步，慢指针每次移动1步，当快指针到达链表末尾时，慢指针指向的链表节点即为链.]]></description><category></category></item></channel></rss>