自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 shell字符串截取

一、按指定字符串截取 方法一:1.# 从左向右截取该字符串第一次出现后的字符串 2. ## 从左向右截取该字符串最后一次出现后的字符串 3. % 从右向左截取该字符串第一次出现后的字符串 4. %% 从右向左截取该字符串最后一次出现后的字符串 方法二:5. 从左边第n个字符后开始到指定个数结束 6. 从左边第n个字符后开始直到结束 7. 从右边第n个字符开始直到指定个数结束 8

2017-07-05 17:14:05 1503

原创 crond和crontab调研

1.crond crond在linux下是一个定时执行工具,可以在无需人工干预的情况下定时地运行任务; crond文件位于/etc/rc.d/init.d/crond 要设置这个服务在系统启动的时候自动启动,在/etc/rc.d/rc.local这个脚本的末尾加上: /sbin/service crond start 要查看linux是否已经安装crond,使用命令:rpm -

2017-07-05 11:53:51 467

原创 正则表达式及grep、sed、awk、cut、sort、uniq工具

1.正则表达式 (1)定义:规定一些特殊语法用来对字符串进行模糊匹配; (2)特点: ①灵活性、逻辑性和功能性较强; ②可以迅速地用简单的方式匹配字符串; (3)使用事项:当正则表达式作为命令参数时,要用单引号括起来,因为正则表达式中的某些字符在shell中有特殊意义,如转义字符\,括起来后把原封不动地传递给命令。 2.字符的分类 (1)字符类

2017-07-04 23:00:00 793

原创 dup/dup2实现客户端

1.dup/dup2介绍 man dup后: 作用:进行文件描述符重定向;①dup将oldfd复制给一个新的描述符,这个新文件描述符指向oldfd拥有的文件表项,dup函数返回新文件描述符; ②dup2与dup的作用相似,只是它用newfd参数指定新的文件描述符,即newfd是oldfd的一份拷贝; 2.使用dup/dup2实现客户端 #include<stdio.h>#include

2017-06-30 16:10:59 476

原创 select服务器

1.select简单介绍 ①select:一次用来等待多个文件描述符,只负责等待 ②select函数: int select(int nfds,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,struct timeval *timeout) ③参数介绍: 第一个参数nfds表示最大的文件描述符+1 fd_set是文件描述

2017-06-30 15:37:12 340

原创 shell程序练习

1.计算1~100相加之和,并用1+2+3+…+100=?的形式打印出来 结果如图: 还可以使用工具计算1~100的和: 2.打印出命令行参数中的最大值,最小值,平均值,而且平均值保留两位小数 : 结果如图所示: 3.根据标准输入打印斐波拉契数列中的对应数字:方法①:使用迭代器 方法②:使用数组 方法③:使用递归 三种方法的结果如图所示: 4.有一个f

2017-06-30 09:24:35 355

原创 shell语法及实现进度条

使用shell实现一个进度条: 效果如图所示:

2017-06-28 16:24:09 1106

原创 shell---反引号,$( )以及eval的比较

1.反引号“ 和$( )的相同点: 反引号是将“中的命令执行,再将执行结果替换到代码所在地,交给外层显示,即将命令的结果作为输入或输出。 $( )和反引号都是用于命令的替换编写一个脚本,显示出HOME目录: 执行结果,与预期相同: 2.反引号“ 和$( )的区别: 对于很多命令,虽然反引号和$( )的的输出结果相同,但是有一个字符却可以区别它们,那就是转义字符\

2017-06-26 16:20:16 414

原创 Linux进程池、线程池调研

1.进程池 (1)进程池是由服务器预先创建的一组子进程,这些子进程的数目在3-10个之间。进程池中的所有子进程都运行着相同的代码,并具有相同的属性,比如优先级,PGID等等。因为进程池在服务器启动之初就创建好了,所以他们没有打开不必要的文件描述符(从父进程继承而来),也不会错误地使用大块的堆内存(从父进程复制得到)。 (2) 当有新的任务到来时,主进程将通过某种方式选择进程池中的某一个

2017-06-23 16:40:05 441

原创 Linux I/O多路转接----poll模型

1.poll模型属于I/O多路转接模型,是对select模型的一种优化; int  poll(struct pollfd *fds,nfd_t  nfds,int timeout);2.poll的优点: ①poll使用数组存储文件描述符,所以能描述的文件描述个数在理论上没有上限;   ②poll将输入输出型参数进行了分离,因此使用时不需要重新设置;  ③不要求计

2017-06-22 16:58:29 387

原创 多进程、多线程服务器程序

版本一:客户端和服务器端可以进行通信,但是只能有一个客户端。1.服务器端程序tcp_server.c#include<stdio.h>#include<string.h>#include<stdlib.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>static

2017-06-21 16:45:43 478

原创 解析TCP三次握手四次挥手

1.TCP的运输连接 TCP的运输连接用于传送TCP报文,包括三个阶段:建立连接、数据传送、释放连接;2.TCP建立连接要解决的问题: ①使双方要知道对方的存在; ②允许双方协商一些参数,如最大窗口值 ③能对运输实体资源进行分配,如缓存大小;3.TCP三次握手过程(假设客户端为A,服务器端为B) ①A向B发送建立连接请求(SYN设置为有效); ②B收

2017-06-20 00:37:42 315

原创 TCP定时器调研

TCP常用的四种定时器:重传定时器坚持定时器保活定时器时间等待定时器具体介绍: (1)重传定时器 ①应用场景: TCP报文段超时 ② 特点:对于tcp协议,在规定的时间内,发现没有收到ACK,就会重新发送消息,如果还没有收到ACK,继续重新发送消息,每次重新发送消息的时间间隔不同,默认第一次重传是发现超时后1s,第二次重传是第一次重传后3s,第三次是6s; ③

2017-06-19 17:24:42 312

原创 TCP报文标志位--URG,PSH调研

1.URG:紧急位 当设置为1时,表示TCP报文中的紧急指针有效,此时告诉系统此报文段中有紧急数据,应优先传送,发送方会把紧急数据放至报文最前面,URG设置为0时,紧急指针无意义; 窗口大小为0时,也可以发送紧急数据;2.PSH:推送位 当两个应用进程交互式通信时,客户可能发送一个请求给服务器,希望能尽快收到对方的响应,此时,客户应用程序通知TCP将PSH置为1,并立即创建一个

2017-06-19 16:38:33 1192

原创 端口调研

1.定义: 端口一般认为是设备与外界通讯交流的出口; 端口可以分为物理端口和虚拟端口: ①物理端口:可以叫做接口,是可见端口,如交换机,路由器,集线器,用于连接其他网络设备的接口,比如RJ-45端口; ②虚拟接口:是逻辑意义的端口,指计算机或交换机、路由器内部的端口,是不可见端口,如80端口、21端口、23端口;2.有效端口号范围: 0 ~ 216-1 即 0~655

2017-06-19 16:11:17 481

原创 线程死锁调研

1.定义 死锁:是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外部处理作用,它们都将无限等待下去。2.死锁产生的原因: ①系统资源不足; ②进程(线程)推进的顺序不恰当; ③资源分配不当;3.线程死锁产生的必要条件: (1)互斥条件:一个资源每次只能被一个进程使用; (2)请求与保持条件:一个进程因请求资源而阻塞时,对已

2017-06-18 15:44:34 271

原创 Linux线程

1.定义 线程是在进程内部运行的一个执行分支,即线程是在进程的地址空间运行,执行进程的一个分支。2.Linux下的线程 Linux下没有真正意义的线程,是使用进程模拟的,在Linux下,线程叫做轻量级进程,使用task_struct结构体描述,而Windows下存在线程TCB。3.线程与进程的区别 ①进程强调资源独占,线程强调资源共享; ②进程是承担系统资源分配的一个实体,

2017-06-18 15:05:26 1062

原创 ARP协议

1.ARP协议 ARP,地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议;2.工作过程 当数据包进行转发时,源主机不知道不知道目的主机的物理地址,会首先查一下自己的ARP高速缓存表,如果查询的IP-MAC值不存在,那么主机就向网络广播一个ARP请求包,这个包里面就有待查询的IP地址,而直接收到这份广播的包的所有主机都会查询自己的IP地址,如果收到广播包的某一个主机发现自己符合

2017-06-18 12:42:15 464

原创 路由生成算法调研

1.路由 路由(名词):数据包从源地址到目的地址所经过的路径,由一系列路由节点组成。 路由(动词):从一个接口上收到数据包,根据数据包的目的地址进行定向并转发到另一个接口的过程。 2.路由表 路由表是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径,路由表中含有网络周边的拓扑信息。建立路由表的主要是为了实现路由协议和静态路由选择

2017-06-18 10:57:01 388

原创 代理服务器调研

1.名词解释: 代理服务器是一种重要的服务器安全功能,它的工作主要在开放系统互联(OSI)模型的会话层,从而起到防火墙的作用。代理服务器大多被用来连接国际互联网和局域网。2.相关概念 (1)代理也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保

2017-06-18 10:22:57 1448

原创 NAT技术调研

本博客中5.NAT原理中所有内容引用自: http://www.cnblogs.com/derrick/p/4052401.html?utm_source=tuicool&utm_medium=referral#undefinedNAT技术1.定义 NAT为网络地址转换,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。 所有使用本地地址的主机在和外界通信时,都要在

2017-06-18 10:11:15 399

原创 CRC循环冗余校验码

1、CRC CRC循环冗余校验码是数据通信中的一种查错校验码。 循环冗余检查对数据进行多项式计算,将计算结果附加在帧后面,接收数据的设备执行模2运算,保证数据传输的正确性和完整性。 2.模2除法 ①不向上借位,只要除数和被除数的位数相同就可进行计算,不比较它们的大小; ②模2运算中用到了模2减法,与逻辑异或相似: 1-1=0, 1-0=1, 0-1

2017-06-16 17:18:05 10745 2

原创 进程间通信---管道

1.进程间通信(IPC): 把数据从用户空间拷到内核缓冲区,另一个进程再从内核缓冲区将数据读走,这种由内核提供的机制叫做进程间通信。2.管道 管道是一种最基本IPC机制,由pipe函数创建3.创建管道的函数pipe( ) int pipe( pipefd[2] ); ①函数调用成功时返回0,失败返回-1 ②函数分别以读方式和写方式打开一个文件,使用3,4作为文件描述

2017-06-15 23:52:41 189

原创 AVL树的进一步实现

代码:#pragma once#include<iostream>using namespace std;template<class K, class V>struct AVLTreeNode{ AVLTreeNode(const K& key, const V& value) : _pLeft(NULL) , _pRight(NULL)

2017-06-15 19:10:13 242

原创 阻塞信号及信号屏蔽pending

1.信号在内核中的三种表示 (1)信号递达:实际执行信号的处理动作; (2)信号未决(pending):信号从产生到递达的状态,是一种记录状态; (3)阻塞信号(block):被阻塞的信号不会递达,它在产生时处于未决状态,直到进程解除对这个信号的阻塞,才会执行递达,但不会立即递达; 阻塞与忽略的不同:忽略是在信号递达后的处理动作,而被阻塞的信号是不会递达的;2.信

2017-06-15 18:52:51 818

原创 信号Signal

1.信号的定义 操作系统向目标进程发送通知的过程。2.信号的相关概念 ①操作系统是进程的管理者,它会向进程发送信号; ②发送信号即修改目标进程PCB中的信号字段; ③进程的PCB中会有信号的信息,当进程看到这些信息时,就知道自己收到信号了; ④进程受到信号后,它知道如何处理,但不会立即处理,而是在合适的时间处理它; ⑤信号由编号和名称组成,发送信

2017-06-15 16:52:59 405

原创 Linux--守护进程(精灵进程)

守护进程(daemon) 了解守护进程必须要先了解进程组、作业、会话,这三个概念已经在上一篇blog中介绍过了。1.定义 守护进程独立于控制端并周期性地执行某种任务或等待处理发生的某些事件 ;2.特点: ①守护进程的命名都是以d结尾; ②守护进程不受用户登录和注销的影响,当会话终止时,后台登录和注销受到影响,但不影响守护进程; ③守护进程的PPID即父进程都为

2017-06-15 12:45:55 402

原创 进程组-作业-会话

一、进程组(PGID) 1.进程组是一个或多个进程的集合,它们与同一作业相关联,可以接收来自同一中端的各种信号; 2.每个进程都属于一个进程组; 3.多个毫不相关的进程可能共同协作完成同一个作业; 4.组长进程:每个进程组有一个组长进程,它是该组的第一个进程,组长进程的ID等于进程组的ID; 5.一个进程组中,只要有一个进程存在,这个进程组就存在,它与组长没有关系,只是用

2017-06-15 00:31:51 296

原创 可重入函数与线程安全

一.可重入函数 1.定义: 可重入函数:可以被两个或多个执行流进入的函数,并且产生的结果是正确的,可以在函数执行的任何时候中断它,它主要用于多任务环境中。 不可重入函数:因为重入而导致错误的函数称为不可重入函数。 2.不可重入函数: (1)函数内使用了静态数据结构; (2)函数内调用了malloc(),free(); (3)函数内部调用了标准输入,标准输出; 3.编写可重

2017-06-14 16:30:33 226

原创 子进程的异步等待方式

一.SIGCHLD SIGCHLD信号:当子进程退出时,它会向父进程发送SIGCHLD信号,该信号的默认处理方式为忽略,当父进程以阻塞方式等待时,它不能处理自己的工作。 我们自定义一个捕捉信号的函数catchsig。代码如下:#include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<sys/wait.h>voi

2017-06-13 16:24:29 259

原创 AVL树的四种旋转--初步解析

>AVL树也叫作平衡树,它的每个节点 都有平衡因子: 平衡因子=右子树的高度-左子树的高度AVL树的性质: 平衡因子大小为(-2,2),即-1,0,1当一个节点插入后可能导致AVL树的不平衡,因此需要经过旋转,让这棵树满足AVL树的性质: 一共有四种旋转方式,分别对应插入节点后的四种情况:1.左单旋: 2.右单旋: 3.左右双旋: 先进行左单旋,再进行右单旋

2017-05-25 18:39:59 6463 6

原创 二叉搜索树---使用迭代器

迭代器:它的用法与指针用法相同 使用迭代器实现二叉搜索树,使用有两个指针域的头结点实现, 并且多给BSTree中加入一个双亲结点_pParent。代码: BSTIterator.hpp#pragma once#include<iostream>using namespace std;#include<assert.h>template<class k,class v>s

2017-05-25 16:17:40 297

原创 二叉搜索树---递归及非递归

二叉搜索树又称为二叉排序树,它为一棵空树,或者是一棵左子树所有节点的值比根节点小,右子树所有节点的值比根节点大的一棵树。 性质: ①.二叉搜索树中,最左边的结点值最小,最右边的结点值最大 ②中序遍历一棵二叉搜索树,所有节点的值是按顺序排列的 构造一棵二叉搜索树时,比较插入结点的key值,key小于根节点的_key时,向根节点的左边走,大于根节点的_key值时,向根节点的右边

2017-05-23 16:38:20 337

原创 哈夫曼树Huffmantree

实现哈夫曼树,首先要了解这些知识: 路径长度:一个节点到另一个节点的边数; 二叉树的路径长度(PL):每个叶子节点到根节点的路径长度相加; 带权路径长度(WPL):每个叶子结点到根节点的路径乘权值相加之和; 哈夫曼树:相同节点个数的二叉树中,WPL最小的二叉树;构建哈夫曼树的方法: 将权值最小的两个节点作为左右孩子,它们的权值之和即为双亲结点的权值,再从权值集合其他结点

2017-05-11 18:36:01 313

原创 优先级队列---使用堆

优先级队列(priority queue) 是0个或多个元素的集合,每个元素都有一个优先权。 一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素 ,对于优先权相同的元素,可按先进先出次序处理或按任意优先权进行。 由于优先级队列的性质,我们可以使用堆实现它:代码: Heap.hpp#include<ostream>using namespace std;#incl

2017-05-11 18:28:47 211

原创 模拟实现队列

队列:在队尾插入元素,在队头删除元素,符合先进先出原则; 栈:符合先进后出原则; 队列的分类: 1.顺序队列 2.循环队列 3.链式队列 4.优先级队列 5.双端队列循环队列的实现方法: 方法一:使用rear和front标记,当rear走到最后一个元素时,下一步为rear=rear%最大容量,当(rear+1)%最大容量=front时,表示队列已满

2017-05-11 18:08:27 238

原创 模拟实现堆

堆分为最小堆和最大堆。 最小堆:堆顶的关键码最小,每个节点的关键码小于该节点的左右孩子结点,并且从根节点到每个节点的路径上,关键码依次递增。 最大堆:堆顶的关键码最大,每个节点的关键码大于该节点的左右孩子结点,并且从根节点到每个节点的路径上,关键码依次递减。 将一棵二叉树调整为最小堆的方法: 1.比较左右孩子的关键码大小,较小的用child标记 2.比较child和pa

2017-05-11 15:13:47 218

原创 文件指针FILE*及文件描述符fd

文件指针 在C语言中,通过文件指针可以对文件进行相应的操作,定义说明文件指针的一般形式为:FILE *指针变量标识符。 FILE实际是由系统定义的一个结构体,它包含的字段有文件描述符和缓冲区等。 通常程序运行后会打开:stdin--文件输入流,stdout--文件输出流,stderr--文件错误流,它们对应了键盘、显示器、显示器,它们的类型都为FILE*。   由于fwrite,prin

2017-05-07 17:12:07 2029

原创 二叉树的基本操作及部分面试题

1.构造二叉树#include<iostream>#include<queue>#include<stack>#include<assert.h>using namespace std;template<class T>struct BinaryTreeNode{ T _value; BinaryTreeNode<T>* _pLeft;//左孩子 BinaryTr

2017-05-07 16:12:37 271

原创 使用栈存储后缀表达式

12*(3+4)-6+8/2的后缀表达式为:12 3 4 + * 6 - 8 2 / + 使用栈模拟存储后缀表达式:#include<iostream>#include<stack>using namespace std;enum OPERATOR//使用枚举类型{ DATA, ADD, SUB, MUL, DIV};struct Cell{

2017-05-04 19:13:07 446

空空如也

空空如也

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

TA关注的人

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