自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 链表的逆置

说明:这个链表是不带头结点的方法1:就地逆置,需要三个指针,分别指向连续的三个节点,p2指向当前位置,p1指向前一个结点,p3指向后一个节点,每一次循坏让p2的pNext指向p1,,然后p1,p2,p3分别向后指一个节点,直到p3和p2都指向了空图解如下: 代码实现:ListNode* Reverse(ListNode* pHead){ assert(pHead); L...

2018-08-31 22:59:35 412

原创 URI和URL

URI(统一资源标识符)URL(统一资源定位符):我们经常访问的网址(http://www.baidu.cn).

2020-02-25 23:19:12 183

原创 用Xshell将Windows文件上传到Linux服务器

此处Xshell选用Xshell6首先你的Linux上需要安装安装lrzsz工具包,(如果没有安装请执行以下命令,安装完的请跳过)yum install lrzsz(1)将文件传输属性选为ZMODEM(2输入命令 rz -E在弹出来的对话框中选择要上传的文档,直到上传成功后,关闭对话框...

2019-03-01 15:12:29 926

原创 按层序遍历打印二叉树

面试题:从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:先将根节点放入队列,在打印根节点时,看它有没有左右子节点,如果有左右子节点就将左右子节点放入队列中,然后让根节点出队列,以此规律,每打印一个节点都要判断它是否有子节点,直到队列为空,那这棵树也就打印完了以下以C++代码实现:vector<int> PrintFromTopToBottom(TreeNode...

2018-10-05 23:34:29 787

原创 判断是否是出栈顺序

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路:借助一个辅助栈,把第一个序列的数字一次压入辅助栈,并按照第二个序列的顺序从该栈中弹出...

2018-10-04 14:12:19 1460

原创 ICMP协议

ICMP(Internet Control Message Protocol)Internet控制报文协议,是一个网络层协议功能:确认IP包是否到达目标地址 通知在发送过程中IP包被丢失的原因 基于IP协议工作ICMP大概被分为两类报文:一类是通知出错原因 一类是用于诊断查询基于ICMP的ping命令:查看网络是否畅通 查看网络拥堵情况 ping的是域名而不适合URL...

2018-10-03 21:20:46 181

原创 TCP连接管理机制-确认应答,超时重传,滑动窗口,拥塞控制,流量控制,延迟应答

TCP通过确认应答和超时重传可以保证数据可靠传输使用滑动窗口完成流量控制和拥塞控制使用延迟应答来保证滑动窗口足够大接下来对这些机制进行详细的介绍确认应答(ACK)机制TCP将每个字节的数据都设置了序列号,每一个ACK都带有对应的确认序列号,告诉发送者,我收到了数据,你下一次应该从哪一个序列号开始发超时重传机制当主机A向主机B发送的数据发生丢包,无法到达主机B时,...

2018-10-03 20:00:21 1738

原创 HTTP协议

HTTP请求:首行:【方法】+【url】+【版本】Header:请求的属性,由冒号+空格分割的键值对组成,每组属性之间由\r\n分割空行:表示Header部分结束Body:空行后面的内容都是Body,Body允许为空字符串,如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度HTTP响应:首行:【协议版本】+【状态码】+【状态码描...

2018-10-03 15:26:37 209

原创 模拟实现字符串拷贝,比较等函数

1.模拟实现strcpychar* my_strcpy(char* dst, const char*src){ assert(dst != NULL); assert(src != NULL); char *ret = dst; while (*dst = *src) { dst++, src++; } return ret;}2.模拟实现strncpycha...

2018-09-29 20:13:41 323

原创 测试面试题

1.测试的流程需求分析——测试计划(测试方案、测试策略)——测试用例编写(需求测试)——测试执行——(冒烟测试,系统测试、回归测试、交叉测试、自由测试)——测试报告2.分析需求的具体方法:快速理解需求的捷径:需求串讲 验证需求(需求文档也需要测试:正确性、必要性、完整性、一致性等) 从设计需求中提取测试需求3.需求分析注意事项:测试应尽早介入 不断变化的需求要及时收集和整理...

2018-09-27 08:55:40 294

原创 青蛙跳台阶问题

题目一:一只青蛙一次可以跳上一级台阶,也可以跳上两级台阶。求该青蛙跳上一个n级台阶总共有多少种跳法分析:当n=1时,只有一种跳法;当n=2时,可以一次跳一级,也可以一次跳2级,有两种跳法当n>2时,第一次跳的时候有两种选法,只跳一级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1)                 第一次跳2级,此时跳法的数目等于后面剩下...

2018-09-22 11:05:44 224

原创 斐波那契的递归和非递归解法

斐波那契数列:像1,1,2,3,5,8.....这样的数列通常定义为:F(1)=1,F(2)=2,F(n)=F(n-1)+F(n-2)(n>2)非递归解法如下:int Fibonacci(int n) { int ret[2]={0,1}; if(n<2) { return ret[n]; ...

2018-09-22 10:25:40 369

原创 V模型和W模型

V模型  在编码阶段:测试人员编写测试用例单元测试和集成测试是开发人员和白盒人员干的活在系统测试阶段:测试人员主要做你的事有:搭建测试环境 数据准备 实行测试 缺陷管理 编写报告 W模型...

2018-09-20 19:56:46 497

原创 c++类型转换

c++中的四种类型转换:static_cast,reinterpret_cast,const_cast,dynamic_cast四种类型转化的区别:static_cast:相当于C中的隐式类型转换,用于非多态类型的转换(静态转换)例:int main(){ double d=12.34; int a; a=static_cast<int>(d...

2018-09-04 23:24:59 144

原创 OSI七层模型和TCP/IP五层模型

TCP/IP的各层介绍自顶向下分别为:应用层:功能:主要负责应用程序之间的沟通 协议:电子邮件传输(SMTP),文件传输协议(FTP),超文本传输协议(HTTP),网络远程访问协议(Telnet),DNS(域名系统)等传输层...

2018-09-03 00:05:06 356

原创 排序算法

1.冒泡排序实现冒泡排序,基于一个整数的数组进行排序 升序排序 时间复杂度O(N^2) 空间复杂度O(1) 稳定性:稳定代码如下:void Swap(int *a,int *b) { int temp = *a; *a = *b; *b = temp; return;}void BubbleSort(in...

2018-09-02 19:36:21 171

原创 Linux的基本指令

基本命令:ls:罗列出目录下的所有内容    -a:列出所有文件,包括以.开头的隐含文件pwd:显示当前路径cd:改变当前工作路径   用户登录所在的目录称为家目录(~)    cd..返回上一级目录touch:创建文件,文件存在就只更新时间(ls-l)mkdir:创建目录date:查看当前时间如果想要显示出2018/8/31的格式:date+ %Y/%m%d 显示时间:d...

2018-09-01 00:25:19 172

原创 String类

浅拷贝:也就是值拷贝,将一个对象的值新开辟空间,赋给另一个对象,并没有新开辟空间,而是两个对象共用同一块空间,所以当调用析构函数来释放其中一个对象的资源时,另一个对象并不知道,当它再去调用析构函数销毁资源时,就会出错。深拷贝:为每个对象分配独立的资源,各自调用各自的析构函数来释放资源,就不会造成因共享资源在多次释放时造成的程序崩溃问题以实现String类为例:class String...

2018-08-31 11:48:08 190

原创 重载,重写与同名隐藏的区别

函数重载主要是针对同一个作用域中的同名函数,形参列表(参数个数,参数类型,参数顺序任意一个)必须不同同名隐藏:基类和派生类中具有相同名称的成员(成员变量||成员函数),与相同名称的成员的类型无关,通过派生类对象调用成员函数时,调用派生类自己的,基类中相同名称的成员函数被隐藏。如果一定要通过派生类对象调用基类中相同名称的成员时,需在调用前加上基类的作用域符重写与同名隐藏的区别:重写和...

2018-08-29 00:02:50 326

原创 结构体对齐详解

1.首先理解一下什么是结构体对齐: 许多计算机系统对基本类型数据在内存中存放的位置有限制,要求数据的起始地址需是k(对齐数)的倍数,这样可以提升读取数据的速度。而这里的对齐数也不是任意值,只能是内置类型已有的字节数(1,2,4,8....),在默认情况下,VS中的值为8,Linux中的值是4,当然也可以通过在struct之前加上#pragma pack(4)设置,括号里就是你设置的对齐数,#p...

2018-08-27 23:14:08 477

原创 线程

知识点如下:  面试题:线程是什么?谈线程必须要谈进程,首先线程在Linux里就叫轻量级进程,线程是进程里的一个执行流,创建线程时我们只为线程创建了PCB,我们也可以说每个线程就是一个PCB,而一个进程里拥有多个PCB,所以进程也是多个线程组,线程与进程共享虚拟地址空间,用户id和组id,文件描述符表,当前工作目录,每种信号的处理方式。但是线程也与进程也有很大的区别,线程是程序...

2018-08-27 00:25:06 181

原创 malloc,free与new/delete的区别

面试题1:c库中有malloc/free来动态管理内存,c++中为什么还要new/delete操作符来管理内存?       对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于mal...

2018-08-25 00:19:50 234

原创 根据前序和中序重建二叉树

解题思路:根据前序遍历的特点“根,左,右”,得出前序遍历的第一个节点就是整棵树的根 根据中序遍历的特点“左,根,右”,找到中序遍历中和根节点相同的节点,也就是根节点的位置 在中序中,根节点左边的为整棵树的左子树,根节点后边的为整棵树的右子树,同时也就确定了左右子树的数量 在前序遍历和中序遍历中划分了左右子树节点的值之后,再用递归的方法分别构建左右子树例如:  c代码如下:...

2018-08-17 10:05:33 248

原创 二叉树的下一个节点

题目描述:给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别别指向左右子节点的指针,还有一个指向父节点的指针例如:这棵树的中序遍历是:D,B,H,E,I,A,F,C,G解题思路:(1)当节点的右子树不为空:节点的下一个节点就是这个节点的右子树中的最左子节点,也就是从右子节点出发一直沿着指向左子节点的指针,走到最后一个叶子节点就是此节点的下一个...

2018-08-16 21:44:39 700

原创 简单的TCP/UDP网络程序

1.UDP的服务端程序: 1. 创建socket           socket 2. 为套接字绑定地址信息 bind 3. 数据传输             recvfrom/sendto 4. 关闭socket           close代码如下:int main(){ int sockfd = -1; //1. 创建套接字 sockfd =...

2018-08-15 00:00:22 193

原创 二叉树的深度

思路如下:如果树是空树,就返回0;如果一棵树只有一个节点,那么它的深度为1;如果根节点只有左子树,树的深度为左子树的深度+1;如果根节点只有右子树,树的深度为右子树+1;如果根节点既有左子树,又有右子树,树的深度为左子树和右子树的最大值+1用递归实现的代码如下;int TreeDepth(TreeNode* pRoot) { if(pRoot=...

2018-08-14 21:43:47 166

原创 二叉树的镜像

最终的实现结果如图所示:过程为:先前序遍历整棵树的节点,如果遍历到的节点有子节点,就交换它的两个子节点,当交换完它所有的非叶子节点的左右子节点之后,就得到了树的镜像代码实现如下:void* Mirror(TreeNode *pRoot){ if(pRoot==NULL) { return; } if(pRoot->left=...

2018-08-14 21:01:30 130

原创 TCP和UDP的区别

首先从特点出发TCP的特点:面向连接 可靠传输 面向字节流UDP的特点:面向无连接 不可靠传输 面向数据报根据两者的特点进行具体的分析1.TCP的面向连接体现在,使用TCP协议之前,需要先经过三次握手操作建立连接,连接成功之后双方才能进行通信,当通信完之后还需断开连接;但是UDP就不需要,只需要知道对方的IP和端口号就可以直接进行传输数据,不管数据有没有安全到达2....

2018-08-13 22:35:23 181

原创 TCP的三次握手,四次挥手

TCP建立连接的三次握手: 因为只能是客户端向服务器先发送消息,所以是客户端先向服务器发起连接请求 客户端在此过程中的工作流程如下:1.先调用socket创建套接字 2.调用connect发起连接请求,在这个过程中就会出现三次握手的情况:客户端先向服务器发送一个SYN连接请求,发送完之后客户端处于SYN_SENT状态(此为第一次握手)服务器收到连接请求后,对客户端发一个SYN+...

2018-08-13 00:34:51 276

原创 栈的逆序

题目描述: 一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,从栈顶到栈底围1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数实现,不能用其他数据结构。代码实现如下:class ReverseStack {public: vector<int> reverseStackRecursively(vector&...

2018-08-12 12:30:25 1609

原创 软链接与硬链接

了解一下文件的相关知识: 我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文...

2018-08-10 23:06:18 155

原创 集合栈

题目描述: 请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈。该数据结构应支持与普通栈相同的push和pop操作。给定一个操作序列int[][2] ope(C++为vector&ltvector&ltint>>),每个操作的第一个数代表操作类型,若为1,则为push操作,后一个数为应push的数字;若...

2018-08-09 22:35:24 211

原创 初识c++

1.首先是一张巨大的思维导图:2.指针和引用的比较:共同点:引用在底层上实际是有空间的,因为引用是按照指针方式来实现的不同点:引用在定义时必须初始化,指针不需要 引用只能引用一个实体,而指针可以指向任何一个同类型实体 没有NULL引用,但是有NULL指针 引用自加是给引用的实体加1,指针自加是指针向后偏移一个类型的大小 在sizeof中,引用的结果是引用类型的大小,而指...

2018-08-08 23:31:39 219

原创 c语言版的用两个栈实现一个队列

基本思想:一个栈实现队列的入,一个栈实现队列的出假设先将元素都压入stack1,如果将stack1中的元素逐个弹出并压入stack2,则元素在stack2中的顺序正好和原来在stack1中的顺序相反,也就是stack2中的栈顶元素就是队列中先入的元素,然后弹出stack2的栈顶元素,就实现了队列的“先入先出”的特点当stack2不为空时,在stack2中的栈顶元素是最先进如队列的元素,可以...

2018-08-08 16:24:31 2813 1

原创 TCP网络程序

1.服务器:创建socket套接字,用到的是int socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)接口,返回的是套接字描述符 此时的socket只是用于接收新的客户端的链接请求,仅具有listen的作用 绑定地址端口,用到的是int bind(int sockfd,const struct sockaddr*address,socklen_t  addr...

2018-08-06 21:27:46 165

原创 多进程的基于TCP协议的简单聊天程序

1.服务端程序:            需要注意的是启动一个子进程是在接收(accept)一个新连接后代码如下:void handle(int sockfd,struct sockaddr_in cli_addr){ while(1) { char buff[1024]={0}; ...

2018-08-05 23:57:34 681

原创 两个链表的第一个公共结点

首先需要注意的是,单向链表的节点,每个节点只有一个pNext,,所以从第一个公共结点开始,之后他们所有的节点都是重合的,不可能再出现分叉,拓扑形状如下: 可以有三种解题思路:1.在第一个链表上顺序遍历每个节点,每遍历一个节点,就在第二个链表上顺序遍历每个节点,在第二个链表上找和第一个一样的节点,即在这个节点上重合 时间复杂度是O(mn)2.如果两个链表有公共结点,那...

2018-08-01 18:28:24 174

原创 进程间关系和守护进程

代码如下:

2018-07-29 20:30:44 143

原创 链表的复杂面试题

1.单链表实现约瑟夫环(JosephCircle)思路:首先约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 代码如下:sListNode * JocephCircle(sListNode ...

2018-07-26 20:57:57 171

原创 链表的简单面试题

1.从尾到头打印单链表思路一:定义两个指针,PNode和pend,pNode指向第一个结点,pend指向NULL                   每次从头开始遍历直到pNode->pNext=pend,打印出pNode,再将pNode赋给pend                    pFirst赋给pNode,保证每次都是从头开始遍历代码如下:void PrintR...

2018-06-27 20:18:21 184

空空如也

空空如也

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

TA关注的人

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