自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

原创 错误码500:消息 java.lang.IllegalStateException: (No output folder)无输出目录解决方法

本文的解决方法是刚安装好tomcat后就无法正常运行的情况。不涉及项目安装tomcat有两种方式,一个是解压缩版本,一个是安装版,当出现这个问题时一般为解压缩版本才出现提示错误如下:localhost:8080 java.lang.IllegalStateException: No output folder原因:没有读写的权限解决方案:找到你tomcat的目录,右键“属性--->安全--->编辑”,找到Users,将“完全控制”选项“允许”打钩,应用。然后http://lo

2021-04-14 17:36:02 2625 3

原创 TCP三次握手,四次挥手详解

...

2020-10-05 22:07:45 336

原创 IP协议详解(ip头部,ip分片,ip路由选择)

IP协议是TCP/IP协议族中至关重要的协议,同时也是socker网络编程的基础之一。其中最重要的部分为(1)ip头部信息:ip头部信息出现在每个ip报文数据报中,用于指定ip通信的远端ip地址,目的端ip地址,指导ip分片和重组,以及部分的通信行为。(2)ip数据报的路由和转发:ip数据报文的路由和转发发生在除目标机器之外的所有主机和路由器上。他们决定数据包是否应该转发以及如何转发。1.IP服务特点ip协议是TCP/IP协议族的动力,为上层协议提供无状态,无连接,不可靠的服务。无状态:

2020-10-01 21:43:21 7498

原创 TCP/IP协议族体系结构以及主要协议

现在因特网是使用的主流协议族是TCP/IP协议族,这是一个分层,多协议的通信体系。这里的TCP/IP协议族和我们经常说的TCP/IP不是一回事,这里要区分一下首先TCP/IP协议值得是TCP协议和IP协议,而TCP/IP协议族指的是数据链路层,网络层,传输层,应用层上所有的协议。TCP/IP是一个四层协议系统,自底而上分别是数据链路层,网络层,传输层,应用层,每一层的功能不同,协议也不同。框架图如下所示。1.数据链路层功能:数据链路层实现了网卡接口的网络驱动 。常用的协议:ARP

2020-09-21 22:12:02 1463

原创 TCP确认保证可靠性(确认应答,超时重传,窗口控制,快速重传)

众所周知,可靠是TCP的一个特点,那么在这个过程中如何确保TCP的可靠性呢?TCP确保可靠性的途径:一、确认应答,超时重传,序列号数据到达接收方,接收方需要给发送方发送一个确认应答,表示该数据段表示已经收到。确认序号会表明下一次接收数据的序列号。如果发送方长时间没有接收到确认应答,那么一种可能是数据丢失,另一种可能就是确认应答丢失,这时发送端就会等待一段时间进行重传。这个等待的时间是2*报文往返时间+偏差值。(发送端每发一个数据包时把那个数据包放入重发队列,如果等到确认应答就把数据包从重

2020-09-21 17:24:23 495

原创 C语言常见面试问题——数据类型,关键字,运算符,表达式

问题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字节。(重点...

2020-09-02 19:23:38 261 1

原创 二叉树的层序遍历(队列)

层序遍历就是逐层遍历树结构。广度优先搜索是一种广泛运用在树或图这类数据结构中,遍历或搜索的算法。 该算法从一个根节点开始,首先访问节点本身。 然后遍历它的相邻节点,其次遍历它的二级邻节点、三级邻节点,以此类推。当我们在树中进行广度优先搜索时,我们访问的节点的顺序是按照层序遍历顺序的。,说简单点就是一层遍历完遍历下一层。层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前讲过的都不太一样。需要借用一个辅助数据结构队列来实现,队列先进先出,符合一层一层遍历的逻辑,而是

2020-08-13 12:24:50 2198

原创 二叉树的前序,中序,后序遍历(递归)

前序遍历前序遍历首先访问根节点,然后遍历左子树,最后遍历右子树。/** * 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

2020-08-13 11:37:38 196

原创 关于auto的一些日常使用

在c++中auto是一个关键字,用来推演变量的类型。所以也就意味着用auto定义的变量必须要初始化(否则无法推演)比如这样使用可以实现基本的自动推演auto a=1;//推演a为整形auto *p=&a;//推演p为整形指针关于auto在for循环中的表现#include <stdio.h>#include <iostream>int main(){ int a[5] = { 1,2,3,4,5 }; for (auto &ii : .

2020-08-09 17:40:32 308

原创 不同路径(动态规划)

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径? 例如,上图是一个7 x 3 的网格。有多少可能的路径?解题思路:因为每次只能往右边和下边移动,所以某个格子的状态就等于左边的和上边的格子之和,所以状态转移方程就是arr[i][j]=arr[i][j...

2020-08-06 19:47:57 288

原创 项目:仿写bash程序

项目目标:在linux平台下仿写一些命令的实现1.输出提示符信息,类似于[stu@host Desktop]$2.等待用户输入命令3.完成简单的解析:没输入命令情况(直接敲回车),输入内置命令的情况(cd exit...),输入外置命令的情况(ls...)代码的总体框架就是这样的要想实现上述功能我们要清楚linux系统中命令的存放位置已经分类标准我们在终端上查看一下:如果是内置命令:需要把命令集成到bash程序中。实现内置命令只要调用bash中的方法如果是外置命令:...

2020-08-02 22:33:27 193

原创 关于僵死进程的产生原因以及解决方案

说到僵死进程大家应该经常听过可能优点不明白这个意思,首先僵死进程就是指子进程退出时,父进程并未对其发出的SIGCHLD信号进行适当处理,导致子进程停留在僵死状态等待其父进程为其收尸,这个状态下的子进程就是僵死进程。就是一个进程在他结束生命时并不是真正意义上的销毁,而是调用了exit()把一个正常的进程变成了僵死进程,这个僵死进程不占有内存,也不会执行代码,更不能被调用,他只是在进程列表中占了个地位而已。所以解决办法就是:1.他只需要父进程调用wait()函数来替他收尸然后就完整的结束这一生。否则

2020-08-02 12:45:52 1553

原创 盛水最多的容器两种解法(c++)

题目描述:给你 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。 示例:输入:...

2020-08-01 18:42:39 687

原创 魔术索引

魔术索引。 在数组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,即数组中可能...

2020-08-01 10:09:00 220

原创 经典atoi(字符串转整数)

相信大家在学习字符串的过程中都做过把字符串转整数这个题目,大家都知道在数字字符后面-‘0’就变成了数字。记得当时的编程多么单纯,不用考虑一些变态的测试用例,只需想最理想的情况基本上写七八行代码就实现了这个功能。但现在不一样了,变态离谱的测试用例等着我们实现。所以今天这个atoi是在当时的基础上完善升级的。题目要求:请你来实现一个atoi函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:1.如果第一个非空字..

2020-07-31 22:40:00 210

原创 Z字形变换(c++版)

题目描述:将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z 字形排列。比如输入字符串为 "LEETCODEISHIRING"行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例1:输...

2020-07-29 00:21:14 1470

原创 寻找两个正序数组的中位数(归并排序)

题目描述:给定两个大小为 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思想:把这两个有序的数组合并成一个有序的数组...

2020-07-28 15:14:55 478

原创 最长回文子串(动态规划解答)

题目描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"解题思路:根据回文串的特性:我们知道一个字符串是回文那么同时去掉首尾一个字符仍然是回文(abcba同时去掉首尾的a,剩下的bcb仍然是回文),根据这个特性我们就可以列出他的状态转换方程。我们设一个二维数组dp[i][j]来判断从下标 i 到下标 j.

2020-07-28 14:45:48 182

原创 矩阵中最长的递增路径(深度优先)

题目描述给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。示例 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,...

2020-07-26 17:15:35 1568

原创 买卖股票的最佳时间

题目:给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票...

2020-07-26 11:32:04 340

原创 对逆波兰式(后缀表达式)求值详解

题目:编程对一个逆波兰式(后缀表达式)进行求值,如“435*+23*-”的结果是 13,函数的参数为字符串(后缀表达式),假定字符串为正确的逆波兰式。解题思路:定义一个栈对象,然后开始遍历字符串,当遇到数字时直接入栈,当遇到运算符时出栈两个元素并且出来的两个元素和那个运算符进行计算。讲计算结果再次入栈。遍历结束后栈中的值就是逆波兰式的值。(1)定义栈:(2)遍历字符串,第一个字符4是数字,所以直接入栈:(3)同理后面的3和5也都是数字所以直接入栈。(4)继续遍历字符串,遇到

2020-07-21 21:02:26 1408 6

原创 栈解决括号匹配问题

题目:、假设一个表达式中可以包含三种括号:小括号,中括号,大括号,且这三种括号可以任意次序嵌套使用,如:“3*[5+4]*{[3+5]*[40-2*(5-3)]}” ,编写判断表达式括号是否匹配的程序。表达式为字符串。解题思路:解决括号匹配问题我们要考虑的是优先级,大家学过数学的都知道要想解决这类算式我们要做的就是去括号,去括号不能随便去,要先去除最后写的一组括号。意思就是如果大括号“{}”里面还有小括号“()”我们要先去小括号再去大括号。意思就是后写入的一组括号要先被处理。而先写入的括号最后处理。这

2020-07-20 23:55:02 2711 1

原创 二分查找的一系列问题

关于二分查找大家都挺熟悉的,今天主要是给大家讲一下二分查找衍生出来的一系列问题首先给呈上二分查找的代码实现//返回目标数字的下标//val:查找的数字int SearchValue(const vector<int> &vec,const int val){ int right=vec.size()-1; int left=0; int mid; while(right>=left) { mid=(right-left)/2+left; if(va

2020-07-19 00:56:46 129

原创 判断单链表中是否有环

相信大家都比较了解单链表这种数据结构,面试中经常会遇到这样一个问题。如何判断一个单链表中是否存在环。所谓的环大家可以理解成一个“口”字一样,就像下图红色框一样这样的数据模型就是链表中有环,那么如何判断链表中存在环呢?我们可以用快慢指针法,所谓的快慢指针法就是找两个指针同时遍历整个链表,这两个指针一个是快指针,一个是慢指针,快指针一次走两个结点,慢指针一次走一个结点也就是下一个结点,最终这两个快慢指针会相遇,如果相遇时指针不为NULL时那就说明环存在,如果两个指针为空那就说明走到了尾结点,那.

2020-07-14 19:00:45 723 1

原创 算法题:神奇的数字

题目描述在这个特殊的假期里,由于牛牛在家特别无聊,于是他发明了一个小游戏,游戏规则为:将字符串数字中为偶数位的数字进行翻转,将翻转后的结果进行输出。示例1输入复制"1234"输出复制"1432"说明第2、4位为偶数,所以将其翻转后,得到 1432示例2输入复制"12346"输出复制"16342"说明第2、4、5位为偶数,所以将其翻转后,得到 16342解题思路:我们发现要把偶数反转,说到反转我们就想起来经常使用的

2020-07-13 00:41:35 625

原创 数据结构之哈希链表Hashtable

散列(Hashing)在现实中经常遇到按照给定的值进行查询的实例。在软件开发过程记录存放的位置和用于表示他的数据项直接的对应关系。这种数据结构记录了数据和数据位置的信息,这就是Hashing。我们哈希链表的数据结构图示是这样的 如图所示这就是整个hashtable的图书,其中红色部分其实是一个数组,里面存放的是链表,大家可以通过蓝色知道里面存放的是链表,绿色部分就是链表的一个结点,有数据域和...

2020-07-11 12:32:51 4988 1

原创 进程虚拟地址空间的分配以及内容

环境:linux,32位操作系统首先虚拟空间的作用:为了防止恶意的程序修改其它程序的内存数据,因此引入了虚拟空间。大家可以这样理解:如果我们把一个进程也就是一个程序直接引入内存,那么别的恶意程序可以通过指针的偏移来恶意修改别的程序,这就造成了不安全,引入虚拟地址空间后每个程序有属于自己的虚拟地址空间,那么偏移也不会影响其它的程序。虚拟地址空间的大小:每当一个进程运行就会开辟一个2^32次方(也就是4G)的虚拟地址空间。所谓的虚拟和物理可以这样解释:这个东西存在,你也看得见就是物理的。

2020-07-09 14:42:18 760

原创 malloc,calloc,realloc,free的作用以及区别

首先c语言开辟动态内存有三个函数,分别为malloc(),callloc(),realloc()。而释放内存只有free().在日常编码中,我们使用malloc最频繁,因为它最简单,只需要一个参数,即需要动态开辟的内存字节数,如果堆里的连续空间能满足需要则将分配好的内存地址返回,否则将会返回空。char*arr=(char*)malloc(20);calloc只是在malloc的基础上将分配好的每个字节赋值为0,这功能使用并不是很常见,但是由于需要提供两个参数,所有没有malloc使用的多。

2020-07-05 22:10:12 357

原创 extern关键字的用法及注意事项

首先extern是一个关键字,它最简单的一个用法就是实现在一个文件中引用另一个文件中的变量或者函数。就比如我们一个项目下有两个文件,分别是a.cpp和b.cpp文件,当我们要在b.cpp中想使用a.cpp的全局变量或者是某一个功能函数时我们不需要再次编写,而是使用extern这个关键字来告诉系统我们要调用某个变量,具体如下//a.cpp#include<iostream>int c=1;int fun(int a,int b){ return a+b;}a...

2020-07-05 16:25:31 559

原创 关于strcpy和strncpy的面试题

问题1:strcpy()和strncpy()的区别1.首先两个函数的参数不同,所以功能不是完全相同。strncpy()比strcpy()多一个参数n,表示拷贝前n个字符。而strcpy()则是拷贝全部字符。2.因为strncpy中有参数n的存在,所以它只负责复制前n个字符,没复制字符串结尾的标记’\0‘。strcpy()则复制了’\0‘。3.两者的错误处理,当strncpy()中规定复制的长度n大于目标的长度时会直接报错;strcpy()如果目标的长度小于原长度的话则是能复制多少复制多少。c

2020-07-04 19:43:56 332

原创 剑指offer笔试题:另类1+2+3+.......+n

题目要求:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)解题思路:针对1+2+3+...+n我们有如下若干方法方法一:公式求和;高中数学中我们知道这是公差为1的等差数列求和,我们只需要带入等差数列前n项和公式n(n-1)/2,但是主要解题用了乘除法所以不可以方法二:循环求和;通过循环来实现求和,但题目要求不能使用循环。所以这种办法也不行。方法三:递归调用;递归调用有一个很主要的因素就是规定临界值

2020-06-19 10:03:50 191

原创 leetcode求给定二叉树的最大深度

题目简述:求给定二叉树的最大深度,最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量。示例1输入{1,2}输出2示例2输入{1,2,3,4,#,#,5}输出3解题思路:求二叉树的最大深度,我们可以采用递归的思想,比较左子树和右子树的深度,谁的深度大就取谁。边界就是最后的叶子结点,所以代码如下/** * struct TreeNode { * int val; * struct TreeNode *left; * struct Tree

2020-05-29 11:00:49 493

原创 c++顺序容器之——vector容器的实现(类模板)

看了前面的介绍今天给大家讲讲vector容器,首先vector就是我们数学中经常说的向量,

2020-05-28 18:45:07 792

原创 linux系统之文件的属性及权限的变更

linux最优秀的地方就在于他的多用户多任务环境。大家可以想想多个用户具有不同的保密数据,因此这些文件的管理权限就尤为重要了。linux一般将文件的存取身份分为三个类别,分别是:owner(文件属主),group(所属群组),others(其他人),并且三种身份都有read(读),write(写),execute(执行)权限。使用者的身份1。owner:文件属主,也就是我们说的文件拥有者顾名思义也就是说创建这个文件的人就是文件拥有者。我们知道linux是一个多用户多任务系统,多用户就代表会有很多

2020-05-15 15:33:55 1032

原创 SQL语句之DDl(数据定义语言)create(增)drop(删)alter(改)show(查)

说到数据库,我们一听就知道是对数据进行一系列的操作,说起数据离不开四个字“增,删,改,查”。今天就给大家介绍一下这些常用的sql语句。 首先告知大家明白一些概念性的东西 sql:结构化查询语言,如此高大上的名字的作用就是对数据库进行一些TCL列操作,是一个统称。它分为六个部分,分别是DDL(数据定义语言),DML(数据操作语言),DCL(数据控制语言),DQL(数据查询语言),TCL(事务控制语言),CCl(指针控制语言)。 六个部分共同组成了sql,我...

2020-05-14 23:32:48 1880

原创 循环和递归解决全排列问题

首先先帮大家了解一下数字的全排列,数字的全排列在我看来就是把给出的若干数字按照不同的顺序就行排序,比如说:{1,2,3}这三个数字就行全排列我们可以排出{1,2,3},{1,3,2},{2,1,3},{2,3,1},{3,2,1},{3,1,2} 方法一:因为给的数值比较小所以我们可以用一个笨办法(同时也是一个容易理解的方法)解决。也就是枚举法。int main(){ f...

2020-05-05 12:13:22 1369 1

原创 邻居交换——冒泡排序

相信大家看了上篇博客了解了我们简化版的桶排序有一定的局限性,对于数字大的占用空间严重并且无法处理小数,所以这节课给大家讲比桶排序的实用性高一点的冒泡排序。 首先冒泡排序的核心思想就是比较相邻的两个元素,顺序错误那就换位置。(顺序指的是从大到小或者从小到大) 就比如说我们要将12,35,99,18,76这五个数要按照从大到小的顺序进行排序。就意味着小...

2020-04-30 12:14:50 10264

原创 最快最简单的排序——桶排序

在我们日常生活中经常会用到排序,像站队时要按照身高进行排序,考试成绩单要按照分数排序,购物按照价格排序等等。可以说排序是无处不在的。下面给大家通过一个实例来给大家讲一下最简单最容易的桶排序。最简单最快的桶排序,我们可以把数组想象成一个又一个桶,每一个桶只能装一个特定的数字,桶里有几个数字我们就打印几次,遇到空桶就跳过。排序的过程就是遍历数组的过程,相当于我们不用考虑排序,只需要考虑打印就好...

2020-04-27 13:21:04 440

原创 剑指offer面试题:打印1到最大的n位数

题目描述:输入数字n,按顺序打印从1到最大的n位十进制数例如:输入3,//最大的三位数为999, 输出:打印出1,2,3,4.。。。。999。基础入门解法:虽然可以解出本题,但是当输入的n很大时,超出long long型会造成溢出,这才是本题的难点。void print1(int n){ int max=1; for(int i=0;i<n;...

2020-03-14 13:34:51 114

原创 剑指offer面试题:数值的整数次方

问题描述:实现一个函数double power(double base,int exponent),不得使用库函数。不需要考虑大数问题. 思路:利用循环之间解,本题的难点在于需要考虑的全面,比如输入的指数是否为正数。负数的负指数幂求解。//实现一个函数double power(double base,int exponent),不得使用库函数。不需要考虑大数问题#include&...

2020-03-07 18:45:36 113

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除