自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zw_1510的博客

掌握了才是自己的!!!

  • 博客(51)
  • 收藏
  • 关注

原创 面试遇到的问题

1、迭代器失效问题 最重要的问题是v.erase()返回值是当前删除节点的下一个节点,第一次写代码时,虽然想到了,但一时脑热,写出了下面的代码 vector<int>::iterator it = v.begin(); while (it != v.end()) { if ((*it) == 3) { v.erase(i

2016-09-28 22:08:31 325

原创 grep详解

常用grep选项 -c 只输出匹配行的计数。 -i 不区分大小写(只适用于单字符)。 -h 查询多文件时不显示文件名。 -l 查询多文件时只输出包含匹配字符的文件名。 -n 显示匹配行及行号。 -s 不显示不存在或无匹配文本的错误信息。-v 显示不包含匹配文本的所有行。 grep和egrep的区别 grep是遵照basic规范来写正则表达式,不支持一些rgrep中

2016-08-11 22:33:13 460

原创 Linux下的PS和grep指令的简单使用

ps-process status ps用来查看进程,PS的参数非常多。 格式:ps [options] PS -A 列出所用的进程 PS -aux 显示所有包含其他使用者的进程 PS -axi 列出所有的精灵进程 grep——Goobal Regular Expr ession Print,表示全局正则表达式版本。 格式: grep 查找内容 [options] options负责

2016-08-10 19:34:10 14138

原创 shell脚本编程基础篇——语法和应用

条件测试test 和[ 条件测试中成功返回0,失败返回-1 可以比较两个数的大小,也可以用来比较字符串。 !,-a,-o,分别为非,与,或三个逻辑运算 格式为: test val−gt9[val -gt 9 [ val -gt 9 ] 两个数比较大小 字符串比较 文件存在与操作 判断文件是否存在 循环while for 1、for语句 f

2016-08-10 16:19:32 1775

原创 shell脚本编程基础篇——几个特殊符号

反引号‘’和$() 我们先来演示下使用反引号和$()的输出结果对比 之所以得出此结果,是因为()中的\对()中的\对做了转义 得出此结果,是因为反引号中的两个\=\,所以保留了本身意思 在“中,\=\,此时剩下两个\,所以一个相当于转义,所以输出了1个\ 由此,我们可以得出结论: 1、反引号齐本身就对\进行了转义,保留了齐本身意思,如果我们想在反引号中起到

2016-08-09 22:00:08 503

原创 SHELL脚本入门篇——符号

shell基础知识 shell脚本与Windows/Dos下的批处理相似,都是将各类命令预先放入到一个程序文件,主要方便管理员进行设置和管理用的。但shell脚本比Windows下的批处理更强大。 shell脚本第一句开头为#!,注释为在需注释的行前面加上# shell和shell脚本的区别? shell是一个命令行解释器,本身是一个用c语言编写的程序,是用户使用Linux的桥梁,他的作用是

2016-08-08 17:24:01 1098

原创 二叉树系列问题——求二叉树中最远节点的距离

求二叉树中最远节点的距离,我们首先要对最远距离有清晰的认识,最远距离分为以下三类情况 因此我们在计算距离时总要与前一次的距离作比较,只有当此次左右距离之和大于max值才更改max的值,我们可以使用后续遍历来计算最远距离,此时时间复杂度为O(N),使用前序遍历也是可以的,但时间复杂度为O(N*N),综合比较我们选择后续遍历。实现方法写在一个搜索树中了。 代码如下:#pragma onc

2016-08-07 14:08:09 764

原创 二叉树系列问题——判断一棵树是否为完全二叉树

解决此问题关键点就是理解完全二叉树的特点,完全二叉树定义如下: 若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。如下图: 判断一棵树是否为完全二叉树主要使用的算法是层序遍历,在层序遍历中,只要遇到一个节点的左右子树之一不为空,则立即将标志位置为true,在后面的子树中若遇到不为空的节点则该树不是

2016-08-06 21:31:51 744

原创 二叉树问题——寻找二叉树中两个节点的最近公共祖先

此题大概分为3种情况: 1、节点中无parent,但提供了root 2、节点中有parent,但未提供root 3、此二叉树是二叉搜索树解决方法: 前面两种情况都是想办法将此题转换为求解两个相交链表的交点: 第一种情况需要我们将两个节点到root的路径保存起来,此时路径就好像是链表; 第二种情况比第一种情况还要简单些,我们只需要不断向前找,直至parent为空,统计两个节点的深度,此时依

2016-08-04 22:49:39 830

原创 五种I/O模型

Unix下共有五种I/O模型 (1)阻塞I/O (2)非阻塞I/O (3)多路复用I/O(select和poll) (4)信号驱动I/O(SIGIO) (5)异步I/O1、阻塞I/O模型 应用程序调用IO函数,导致应用程序阻塞,等待数据准备好。如果数据没有准备好,则程序则阻塞等待。若果数据准备好了,从内核空间拷贝到用户空间。 2、非阻塞I/O模型 我们把一个套接字设置为非阻塞就是告诉

2016-07-27 12:07:12 1676

原创 网络基础篇——socket网络编程之UDP通信

UDP和TCP的区别:UDP是无连接的、不可靠的数据协议报,而TCP是面向连接的,提供可靠的字节流。然而,有些情况更适合用UDP而不是TCP。有些流行的应用程序就是用UDP实现的:DNS(域名系统)、NFS(网络文件系统)和SNMP(简单网络管理协议)还有就是qq也是使用的UDP。 UDP和TCP通信模型类似,只是不需要连接,具体过程如下。 1、创建socket 创建一个UDP协议的套接字so

2016-07-27 00:50:57 480

原创 TCP TIME_WAIT

问题:server端在客户端之前断开连接,在TIME_WAIT期间仍然不能再次监听同样的server端口。如何实现server端快速启动? 答:MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间IP数据包将在网络中消失 。MSL在RFC 1122上建议是2分钟,而源自berkeley的TCP实现传统上使用30

2016-07-27 00:03:21 264

原创 网络基础篇——socket编程之TCP服务器

1.socket编程 socket有很多意思,在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标示网络通讯中的一个进程,“IP地址+端口号”就称为socket。 在TCP协议中,建立连接的两个进程各有一个socket来标示,那么这两个socket组成的socketpair就唯一标示一个连接.socket本身有插座的意思,因此用来描述网络连接中的一对关系。 TCP/IP协议规定,网络

2016-07-26 23:59:10 666 2

原创 读者写者模型与生产者消费者模型

读者写者模型 读者写者访问一块共享的数据区域,读者对共享资源进行读访问,写者对共享内存进行写操作。在多处理器系统中,运去多个读者同时访问共享内存,而写者是排他性的,每次只能有一个写者去写入数据。在使用读写锁时,一个读写锁只能同时一个读者和多个写者,但不能同时既有读者又有写者。 公平情况的读者写者代码: 运行结果 此时读者和写者有相同的机会运行,是公平情况。 读者写者有三类情况:

2016-07-24 16:55:23 2903

原创 守护进程

定义 在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。由于在linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。但是守护进程却能突破这种限制,它脱离于终端并且在后台

2016-07-24 00:35:19 310

原创 Tcpdump

定义 TcpDump可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。 简介 Linux作为网络服务器,特别是作为路由器和网关时,数据的采集和分析是不可少的。TcpDump是Linux中强大的网络数据采集分析工具之一。 用简单的话来定义tcpdump,就是:dump the traffic

2016-07-23 23:11:20 264

原创 TCP协议通讯原理

TCP通讯时序图 在上面这个例子中,首先客户端主动发起连接、发送请求,然后服务器端响应请求,然后客户端主动关闭连接。 建⽴立连接的过程: 1. 客户端发出段1,SYN位表⽰示连接请求。序号是1000,这个序号在网络通讯中用作临时的地 址,每发一个数据字节,这个序号要加1,这样在接收端可以根据序号排出数据包的正确顺 序,也可以发现丢包的情况,另外,规定SYN位和FIN位也要占一个序号,这次虽然

2016-07-23 22:55:15 434

原创 NAT原理和代理服务器原理

代理服务器原理当客户端在浏览器中设置好Proxy服务器后,所有使用浏览器访问internet站点的请求都不会直接发给目的主机,而是首先发送至代理服务器,代理服务器接收到客户端的请求以后,由代理服务器向目的主机发出请求,并接收目的主机返回的数据,存放在代理服务器的硬盘,然后再由代理服务器将客户端请求的数据转发给客户端.1.当客户端A对web服务器请求时,此端提出请求时,此请求会首先发送到代理服务器.

2016-07-23 22:19:37 2695

原创 网络基础篇——路由报表

路由表 由很多路由条目组成,每个条目都指明去往某个网络的数据包应该经由哪个接口发送,其中 最后一条是缺省路由条目。 路由条目 路由表中的一行,每个条目主要由目的网络地址、子网掩码、下一跳地址、发送接口由四部分 组成,如果要发送的数据包的目的网络地址匹配路由表中的某一行,就按规定的接口发送到 下一跳地址。 缺省路由条目 路由表中的最后⼀行,主要由下一跳地址和发送接⼜口两部分组成,当目

2016-07-22 12:14:17 478

原创 网络基础篇——IP数据报格式及路由器报表算法

1、Ip数据报格式 IP数据报的首部长度和数据长度都是可变的,但总是4字节的整数倍。 版本号表示IP数据报是哪个版本,对于PIv4,4位版本字段是4 4位首部长度的数值都是以4字节为单位的,最小值为5,最大值是15,所以首部长度的大小介于20到60。 8位TOS字段有3个位用来指定IP数据报的优先级(目前已经废弃不用),还有4位表示可选的服务类型,还有一位总为0。 16位总长度是整个数

2016-07-21 11:17:30 1357

原创 两个栈实现一个队列,两个队列实现一个栈

问题1:用两个栈实现一个队列,实现队列的push和delete操作 栈的特性是先进后出(FILO),队列的特性是先进先出(FIFO),在实现delete时,我们的难点是如何将栈中最底层的数据拿出来,我们有两个栈,所以我们可以将一个栈中的数据依次拿出来压入到另一个为空的栈,另一个栈中数据的顺序恰好是先压入栈1的元素此时在栈2的上面,为了实现效率的提升,我们在delete时,判断栈2是否有数据,如果有

2016-07-17 00:32:26 17670

原创 二叉树——重建二叉树

问题:给定二叉树的前序遍历结果和中序遍历结果,恢复出原二叉树。假设二叉树中的元素都不重复,给定二叉树的前序遍历序列{1,2,4,7,3,5,6,8},二叉树的中序遍历序列{4,7,2,1,5,3,8,6}。看到此题,我首先想到的是寻找根节点,由前序遍历序列可以看出根节点为1,此时通过中序遍历可以看出来4,7,2在根节点的左子树,5,3,8,6在树的右节点。此时我们可以发现序列中每一段都是符合前序或中

2016-07-16 01:14:08 303

原创 Linux基础篇——线程

线程的概念:线程是操作系统调度的最小单元,在Linux平台下线程是进程的基本单位。 线程间的很多资源都是共享的,例如 文件描述符,每种信号的处理方式,当前工作目录,用户id和组id,但线程有的资源是各有一份的,比如线程id,上下文,栈空间等等。。。 线程和进程类似,有创建和终止以及等待。 线程里左右函数的头文件均为#include1 #include<stdio.h> 2 #include

2016-07-14 21:19:12 316

原创 Linux基础篇——死锁

死锁产生的原因 死锁产生的条件 如何避免产生死锁

2016-07-14 01:20:34 324

原创 Linux基础篇——信号(2)

捕捉信号 概念:如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为捕捉信号。 处理过程举例如下: 1. ⽤用户程序注册了SIGQUIT信号的处理函数sighandler。 2. 当前正在执行main函数,这时发⽣生中断或异常切换到内核态。 3. 在中断处理完毕后要返回用户态的main函数之前检查到有信号SIGQUIT递达。 4. 内核决定返回⽤用户态后不是恢复mai

2016-07-14 00:43:03 2345

原创 Linux基础篇 进程通信——管道

IPC(InterProcess Communication)进程间通信 每个进程各⾃自有不同的⽤用户地址空间,任何⼀一个进程的全局变量在另⼀一个进程中都看不到所以进 程之间要交换数据必须通过内核,在内核中开辟⼀一块缓冲区,进程1把数据从⽤用户空间拷到内核缓 冲区,进程2再从内核缓冲区把数据读⾛走,内核提供的这种机制称为进程间通信。linux下进程间通信的几种主要⼿手段简介: 1

2016-07-12 16:38:56 820

原创 Linux基础篇——信号

Linux下的信号列表 列表中,编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。信号的产生方式有四种: 1、硬件中断 2、命令行 3、函数调用 4、软件条件 信号的处理动作有三种: 1、忽略此信号 2、执行该信

2016-07-09 12:31:21 349

原创 Linux-7基础篇 关于进程的一些事

通过几个程序了解下进程创建及运行过程中所涉及的知识点和我对进程的一些理解。#include<stdio.h> 2 #include<unistd.h> 3 4 int main() 5 { 6 int i=0; 7 for(;i<2;++i) 8 { 9 pid_t id=fork(); 10

2016-07-02 17:31:19 332

原创 有序数组旋转的问题

1、有序数组旋转后寻找数组中的最小值一般情况下我们的第一反应肯定是遍历此数组,但这肯定不是我们所期望的,因为此数组是有序数组旋转而成,所以我们此时应该想到用二分法来寻找数组中的最小值。假设我们给定递增数组{0,1,2,3,4,5,6,7,8,9}旋转后的数组有下面几种形式{6,7,8,9,0,1,2,3,4,5}{9,0,1,2,3,4,5,6,7,8}{0,1,2,3,4,5

2016-06-16 17:19:08 1841

原创 c/c++中关键字

1.static1.1作用(1)用于定义全局变量时,此时变量保存在静态区,变量只能在本源文件中使用,不能被其他源文件使用。生命周期为自定义开始直到程序结束时销毁。(2)用于定义局部变量时,变量保存在静态区,在函数返回后存储单元不释放;下一次调用该函数时,该变量为上次函数返回时的值。变量声明周期为定义处开始直到程序结束时销毁。(3)用于定义函数时,函数此时为内部函数,不能被其他源文件

2016-06-12 11:23:51 263

原创 操作系统常见的调度算法

调度算法是指:根据系统的资源分配策略所规定的资源分配算法,如任务A在执行完后,选择哪个任务来执行,使得某个因素(如进程总执行时间,或者磁盘寻道时间等)最小。对于不同的系统目标,通常采用不同的调度算法。几个常用的操作系统进程调度算法一、先来先服务和短作业(进程)优先调度算法1 先来先服务(队列)先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调

2016-06-12 10:14:27 556

原创 Linux下Makefile

Makefile本身是一个文件,文件内包含所执行文件的依赖关系和依赖方法。Makefile的基本格式为“目标:依赖 命令”在我们使用make时,make命令执行时,需要一个Makefile文件,以告诉make命令需要去怎么去编译和链接程序。示例:Makefile文件内容650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/82/5F/w

2016-06-12 10:14:24 245

原创 通过实现Linux下的进度条引发的一系列问题

Linux下实现进度条代码如下: 1 #include  2 #include  3 void Progess()  4 {  5         char arr[101];  6         memset(arr,'\0',sizeof(arr)/sizeof(char));  7         char state[5]="|/-|\0";  8         int 

2016-06-12 10:14:21 558

原创 Linux shell 指令

Linux shell指令运行的原理:Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过 kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。shell对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。ls指令

2016-06-12 10:14:19 941

原创 Linux配置vim ctags g++ IDE GDB

第一讲:vim的配置在安装完Centos后,它默认的是安装了VI编辑器,VIM是没有安装的,所以我们在使用vim test.txt时会提示: vim command not found 。。。 这就是说明我们的Linux环境没有安装vim编辑器,下面我们来说一下如何安装这个编辑器:vim编辑器需要安装三个包:vim-enhanced-7.0.109-7.el5vim-minimal-7.0.109

2016-06-12 10:14:16 498

原创 Linux的下的文件查找命令find

Linux下有几种查找文件命令:Which 查看可执行文件的位置。whereis 查看文件的位置。locate 配合数据库查看文件位置。find 实际搜寻硬盘查询文件名称。每种命令都有他特定的功能,which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和

2016-06-12 10:14:13 521

原创 Linux下的 文件的三个时间参数

Linux下文件三个时间参数:(1)modification time(mtime):内容修改时间    这里的修改时间指的是文件的内容发生变化,而更新的时间。(2)change time(ctime):状态修改时间    这里的修改时间指的是文件的属性或者权限发生变化,而更新的时间。(3)access time(atime):最后访问时间    这里的访问时间是指文件被读取,而更新的时间。在Li

2016-06-12 10:14:10 1225

原创 关于给定栈求出所有合法栈的思考

关于给定栈求出所有合法栈的思考    前几天看到一篇关于给定几个元素,给一个出栈的顺序,判断出栈的顺序是否合法,我们也可以通过给定的元素顺序求出所有的合法的出栈顺序,困扰我的问题是如何求出给定元素的所有的排列问题,之前有篇博文也有求三个数的全序列的,但采用的是三个for循环,实在是too young too simple,效率低不说,而且没有一点实用性,总不能几个数几个for循环,这也太傻了(65

2016-06-12 10:14:07 217

原创 一个数组实现两个栈

一个数组实现两个栈栈(stack),是限定在表尾进行插入或删除操作的线性表,对栈来说,表尾端称为栈顶,表头称为栈底。实现栈首先应该对栈中数据元素和栈顶指针的关系有清楚的认识栈顶指针和栈中元素的关系650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/7E/EF/wKioL1cNvO3DcirSAAAT6jn9EdI625.png" ti

2016-06-12 10:14:04 2250

原创 c++中的动态内存管理

c++中的动态内存管理问题    c++中使用new和delete实现动态内存管理。new和delete实现动态管理对象,new[]和delete[]实现动态管理对象数组。c++中的new和delete运算符均使用我们c中学过的malloc和delete函数实现动态内存的开辟。    首先,先简单介绍下c中的几个动态内存函数malloc,realloc,calloc,free;void *mall

2016-06-12 10:14:01 325

空空如也

空空如也

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

TA关注的人

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