<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Rocketcp3的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Rocketcp3</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Rocketcp3]]></copyright><item><title><![CDATA[错误码500：消息 java.lang.IllegalStateException: （No output folder）无输出目录解决方法]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/115704561</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/115704561</guid><author>Rocketcp3</author><pubDate>Wed, 14 Apr 2021 17:36:02 +0800</pubDate><description><![CDATA[本文的解决方法是刚安装好tomcat后就无法正常运行的情况。不涉及项目

安装tomcat有两种方式，一个是解压缩版本，一个是安装版，当出现这个问题时一般为解压缩版本才出现

提示错误如下：localhost:8080 java.lang.IllegalStateException: No output folder

原因：没有读写的权限

解决方案：找到你tomcat的目录，右键“属性---&gt;安全---&gt;编辑”，找到Users，将“完全控制”选项“允许”打钩，应用。

然后http://lo]]></description><category></category></item><item><title><![CDATA[TCP三次握手,四次挥手详解]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/108921921</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/108921921</guid><author>Rocketcp3</author><pubDate>Mon, 05 Oct 2020 22:07:45 +0800</pubDate><description><![CDATA[...]]></description><category></category></item><item><title><![CDATA[IP协议详解（ip头部，ip分片，ip路由选择）]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/108874895</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/108874895</guid><author>Rocketcp3</author><pubDate>Thu, 01 Oct 2020 21:43:21 +0800</pubDate><description><![CDATA[IP协议是TCP/IP协议族中至关重要的协议，同时也是socker网络编程的基础之一。其中最重要的部分为

（1）ip头部信息：ip头部信息出现在每个ip报文数据报中，用于指定ip通信的远端ip地址，目的端ip地址，指导ip分片和重组，以及部分的通信行为。

（2）ip数据报的路由和转发：ip数据报文的路由和转发发生在除目标机器之外的所有主机和路由器上。他们决定数据包是否应该转发以及如何转发。

1.IP服务特点

ip协议是TCP/IP协议族的动力，为上层协议提供无状态，无连接，不可靠的服务。

无状态：]]></description><category></category></item><item><title><![CDATA[TCP/IP协议族体系结构以及主要协议]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/108715440</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/108715440</guid><author>Rocketcp3</author><pubDate>Mon, 21 Sep 2020 22:12:02 +0800</pubDate><description><![CDATA[现在因特网是使用的主流协议族是TCP/IP协议族，这是一个分层，多协议的通信体系。

这里的TCP/IP协议族和我们经常说的TCP/IP不是一回事，这里要区分一下

首先TCP/IP协议值得是TCP协议和IP协议，而TCP/IP协议族指的是数据链路层，网络层，传输层，应用层上所有的协议。

TCP/IP是一个四层协议系统，自底而上分别是数据链路层，网络层，传输层，应用层，每一层的功能不同，协议也不同。框架图如下所示。



1.数据链路层

功能：数据链路层实现了网卡接口的网络驱动 。

常用的协议：ARP]]></description><category></category></item><item><title><![CDATA[TCP确认保证可靠性（确认应答，超时重传，窗口控制，快速重传）]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/108635153</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/108635153</guid><author>Rocketcp3</author><pubDate>Mon, 21 Sep 2020 17:24:23 +0800</pubDate><description><![CDATA[众所周知，可靠是TCP的一个特点，那么在这个过程中如何确保TCP的可靠性呢？

TCP确保可靠性的途径：

一、确认应答，超时重传，序列号

数据到达接收方，接收方需要给发送方发送一个确认应答，表示该数据段表示已经收到。

确认序号会表明下一次接收数据的序列号。

如果发送方长时间没有接收到确认应答，那么一种可能是数据丢失，另一种可能就是确认应答丢失，这时发送端就会等待一段时间进行重传。这个等待的时间是2*报文往返时间+偏差值。（发送端每发一个数据包时把那个数据包放入重发队列，如果等到确认应答就把数据包从重]]></description><category></category></item><item><title><![CDATA[C语言常见面试问题——数据类型，关键字，运算符，表达式]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/108359768</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/108359768</guid><author>Rocketcp3</author><pubDate>Wed, 02 Sep 2020 19:23:38 +0800</pubDate><description><![CDATA[问题1：再32位/64位操作系统下，数据类型和指针所占的字节分别是多少？

回答：char在32位和64位操作系统都是1个字节

 int在32位和64位操作系统都是4个字节

 short在32位和64位操作系统都是2个字

 double在32位和64位操作系统都是8个字节

 float在32位和64位操作系统下都是4字节

     long在32位操作系统下是4字节，在64位操作系统是8个字节

     指针在42位下是4字节，64位操作系统下是8字节。（重点...]]></description><category></category></item><item><title><![CDATA[二叉树的层序遍历（队列）]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/107976205</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/107976205</guid><author>Rocketcp3</author><pubDate>Thu, 13 Aug 2020 12:24:50 +0800</pubDate><description><![CDATA[层序遍历就是逐层遍历树结构。

广度优先搜索是一种广泛运用在树或图这类数据结构中，遍历或搜索的算法。 该算法从一个根节点开始，首先访问节点本身。 然后遍历它的相邻节点，其次遍历它的二级邻节点、三级邻节点，以此类推。

当我们在树中进行广度优先搜索时，我们访问的节点的顺序是按照层序遍历顺序的。，说简单点就是一层遍历完遍历下一层。

层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前讲过的都不太一样。

需要借用一个辅助数据结构队列来实现，队列先进先出，符合一层一层遍历的逻辑，而是]]></description><category></category></item><item><title><![CDATA[二叉树的前序，中序，后序遍历（递归）]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/107976050</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/107976050</guid><author>Rocketcp3</author><pubDate>Thu, 13 Aug 2020 11:37:38 +0800</pubDate><description><![CDATA[前序遍历

前序遍历首先访问根节点，然后遍历左子树，最后遍历右子树。


/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public]]></description><category></category></item><item><title><![CDATA[关于auto的一些日常使用]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/107896639</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/107896639</guid><author>Rocketcp3</author><pubDate>Sun, 09 Aug 2020 17:40:32 +0800</pubDate><description><![CDATA[在c++中auto是一个关键字，用来推演变量的类型。所以也就意味着用auto定义的变量必须要初始化（否则无法推演）

比如这样使用可以实现基本的自动推演


auto a=1;//推演a为整形
auto *p=&amp;a;//推演p为整形指针

关于auto在for循环中的表现


#include &lt;stdio.h&gt;
#include &lt;iostream&gt;
int main()
{
	int a[5] = { 1,2,3,4,5 };
	for (auto &amp;ii : .]]></description><category></category></item><item><title><![CDATA[不同路径（动态规划）]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/107848168</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/107848168</guid><author>Rocketcp3</author><pubDate>Thu, 06 Aug 2020 19:47:57 +0800</pubDate><description><![CDATA[一个机器人位于一个 m x n 网格的左上角 （起始点在下图中标记为“Start” ）。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角（在下图中标记为“Finish”）。

问总共有多少条不同的路径？

                  

例如，上图是一个7 x 3 的网格。有多少可能的路径？

解题思路：因为每次只能往右边和下边移动，所以某个格子的状态就等于左边的和上边的格子之和，所以状态转移方程就是

arr[i][j]=arr[i][j...]]></description><category></category></item><item><title><![CDATA[项目：仿写bash程序]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/107747299</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/107747299</guid><author>Rocketcp3</author><pubDate>Sun, 02 Aug 2020 22:33:27 +0800</pubDate><description><![CDATA[项目目标：在linux平台下仿写一些命令的实现

1.输出提示符信息，类似于[stu@host Desktop]$

2.等待用户输入命令

3.完成简单的解析：没输入命令情况(直接敲回车)，输入内置命令的情况（cd exit...），输入外置命令的情况（ls...）

代码的总体框架就是这样的

要想实现上述功能我们要清楚linux系统中命令的存放位置已经分类标准

我们在终端上查看一下：



如果是内置命令：需要把命令集成到bash程序中。实现内置命令只要调用bash中的方法

如果是外置命令：...]]></description><category></category></item><item><title><![CDATA[关于僵死进程的产生原因以及解决方案]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/107741342</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/107741342</guid><author>Rocketcp3</author><pubDate>Sun, 02 Aug 2020 12:45:52 +0800</pubDate><description><![CDATA[说到僵死进程大家应该经常听过可能优点不明白这个意思，首先僵死进程就是指子进程退出时，父进程并未对其发出的SIGCHLD信号进行适当处理，导致子进程停留在僵死状态等待其父进程为其收尸，这个状态下的子进程就是僵死进程。

就是一个进程在他结束生命时并不是真正意义上的销毁，而是调用了exit()把一个正常的进程变成了僵死进程，这个僵死进程不占有内存，也不会执行代码，更不能被调用，他只是在进程列表中占了个地位而已。

所以解决办法就是：

1.他只需要父进程调用wait（）函数来替他收尸然后就完整的结束这一生。否则]]></description><category></category></item><item><title><![CDATA[盛水最多的容器两种解法（c++）]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/107734504</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/107734504</guid><author>Rocketcp3</author><pubDate>Sat, 01 Aug 2020 18:42:39 +0800</pubDate><description><![CDATA[题目描述：

给你 n 个非负整数 a1，a2，...，an，每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线，垂直线 i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线，使得它们与x轴共同构成的容器可以容纳最多的水。

说明：你不能倾斜容器，且n的值至少为 2。

图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下，容器能够容纳水（表示为蓝色部分）的最大值为49。

          

示例：

输入：...]]></description><category></category></item><item><title><![CDATA[魔术索引]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/107726638</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/107726638</guid><author>Rocketcp3</author><pubDate>Sat, 01 Aug 2020 10:09:00 +0800</pubDate><description><![CDATA[魔术索引。 在数组A[0...n-1]中，有所谓的魔术索引，满足条件A[i] = i。给定一个有序整数数组，编写一种方法找出魔术索引，若有的话，在数组A中找出一个魔术索引，如果没有，则返回-1。若有多个魔术索引，返回索引值最小的一个。

示例1:

输入：nums = [0, 2, 3, 4, 5]
输出：0
说明: 0下标的元素为0
示例2:

输入：nums = [1, 1, 1]
输出：1
说明:

nums长度在[1, 1000000]之间
此题为原书中的 Follow-up，即数组中可能...]]></description><category></category></item><item><title><![CDATA[经典atoi（字符串转整数）]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/107722838</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/107722838</guid><author>Rocketcp3</author><pubDate>Fri, 31 Jul 2020 22:40:00 +0800</pubDate><description><![CDATA[相信大家在学习字符串的过程中都做过把字符串转整数这个题目，大家都知道在数字字符后面-‘0’就变成了数字。记得当时的编程多么单纯，不用考虑一些变态的测试用例，只需想最理想的情况基本上写七八行代码就实现了这个功能。但现在不一样了，变态离谱的测试用例等着我们实现。所以今天这个atoi是在当时的基础上完善升级的。

题目要求：

请你来实现一个atoi函数，使其能将字符串转换成整数。

首先，该函数会根据需要丢弃无用的开头空格字符，直到寻找到第一个非空格的字符为止。接下来的转化规则如下：

1.如果第一个非空字..]]></description><category></category></item><item><title><![CDATA[Z字形变换（c++版）]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/107650274</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/107650274</guid><author>Rocketcp3</author><pubDate>Wed, 29 Jul 2020 00:21:14 +0800</pubDate><description><![CDATA[题目描述：

将一个给定字符串根据给定的行数，以从上往下、从左到右进行Z 字形排列。

比如输入字符串为 "LEETCODEISHIRING"行数为 3 时，排列如下：

L  C  I  R
E T O E S I I G
E  D  H  N
之后，你的输出需要从左往右逐行读取，产生出一个新的字符串，比如："LCIRETOESIIGEDHN"。

请你实现这个将字符串进行指定行数变换的函数：

string convert(string s, int numRows);
示例1:

输...]]></description><category></category></item><item><title><![CDATA[寻找两个正序数组的中位数（归并排序）]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/107636493</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/107636493</guid><author>Rocketcp3</author><pubDate>Tue, 28 Jul 2020 15:14:55 +0800</pubDate><description><![CDATA[题目描述：

给定两个大小为 m 和 n 的正序（从小到大）数组nums1和nums2。

请你找出这两个正序数组的中位数，并且要求算法的时间复杂度为O(log(m + n))。

你可以假设nums1和nums2不会同时为空。

示例 1:


nums1 = [1, 3]
nums2 = [2]

则中位数是 2.0


示例 2:


nums1 = [1, 2]
nums2 = [3, 4]

则中位数是 (2 + 3)/2 = 2.5

思想：把这两个有序的数组合并成一个有序的数组...]]></description><category></category></item><item><title><![CDATA[最长回文子串（动态规划解答）]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/107621019</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/107621019</guid><author>Rocketcp3</author><pubDate>Tue, 28 Jul 2020 14:45:48 +0800</pubDate><description><![CDATA[题目描述：给定一个字符串 s，找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。

示例 1：

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2：

输入: "cbbd"
输出: "bb"

解题思路：

根据回文串的特性：我们知道一个字符串是回文那么同时去掉首尾一个字符仍然是回文（abcba同时去掉首尾的a,剩下的bcb仍然是回文），根据这个特性我们就可以列出他的状态转换方程。

我们设一个二维数组dp[i][j]来判断从下标 i 到下标 j.]]></description><category></category></item><item><title><![CDATA[矩阵中最长的递增路径（深度优先）]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/107593795</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/107593795</guid><author>Rocketcp3</author><pubDate>Sun, 26 Jul 2020 17:15:35 +0800</pubDate><description><![CDATA[题目描述

给定一个整数矩阵，找出最长递增路径的长度。

对于每个单元格，你可以往上，下，左，右四个方向移动。 你不能在对角线方向上移动或移动到边界外（即不允许环绕）。

示例 1:

输入: nums =
[
 [9,9,4],
 [6,6,8],
 [2,1,1]
]
输出: 4
解释: 最长递增路径为[1, 2, 6, 9]。
示例 2:

输入: nums =
[
 [3,4,5],
 [3,2,6],
 [2,2,1]
]
输出: 4
解释: 最长递增路径是[3, 4,...]]></description><category></category></item><item><title><![CDATA[买卖股票的最佳时间]]></title><link>https://blog.youkuaiyun.com/Rocketcp3/article/details/107590948</link><guid>https://blog.youkuaiyun.com/Rocketcp3/article/details/107590948</guid><author>Rocketcp3</author><pubDate>Sun, 26 Jul 2020 11:32:04 +0800</pubDate><description><![CDATA[题目：

给定一个数组，它的第i 个元素是一支给定股票第 i 天的价格。

如果你最多只允许完成一笔交易（即买入和卖出一支股票一次），设计一个算法来计算你所能获取的最大利润。

注意：你不能在买入股票前卖出股票。

示例 1:

输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天（股票价格 = 1）的时候买入，在第 5 天（股票价格 = 6）的时候卖出，最大利润 = 6-1 = 5 。
  注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格；同时，你不能在买入前卖出股票...]]></description><category></category></item></channel></rss>