自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 shell脚本实现彩色进度条

产生进度条的元素: 1.一个不断向右增长的容器,可以直观看出当前的进度。 2.一个反应进度的百分比,在这里用到转义字符"%%",代表的是"%" 3.一个标志,反应该进度是正在运行还是卡死,在程序中体现的是char *label="-\\|/";,是顺时针输出.

2017-07-05 10:06:03 566

转载 内存泄露、内存溢出以及解决方法

内存溢出即用户在对其数据缓冲区操作时,超过了其缓冲区的边界;尤其是对缓冲区写操作时,缓冲区的溢出很可能导致程序的异常。A) 比如在程序中多使用strcpy_s、memcpy_s等具有缓冲区大小检查的函数,去取代strcpy、memcpy等;B)给工程设置编译选项/WX开启(“将警告视为错误”),严格要求自己,这样很可能避免了不少潜在的bug;C) 对自己的代码做好单元测试

2017-07-03 11:28:24 2445

原创 素数的求解方法:

一、朴素判断素数算法就判断素数而言,事实上是非常简单的了。根据定义,判断一个整数n是否是素数,只需要去判断在整数区间[2, n-1]之内,是否具有某个数m,使得n % m == 0。代码可以这么写

2017-07-02 23:10:50 1257

原创 STCP与TCP协议

(1)首先SCTP和TCP之间的最大区别是SCTP的连接可以是多宿主连接的,TCP则一般是单地址连接的(2)其次SCTP是基于消息流,而TCP则是基于字节流。(3)在网络安全方面,SCTP增加了防止恶意攻击的措施。不同于TCP连接采用的三次握手机制,SCTP连接采用四次握手机制, 有效的防止了类似于SYN Flooding的防范拒绝服务攻击。

2017-07-01 15:52:01 12480

原创 linux命令之eval

eval可以读取一连串的参数,然后按照参数特性来执行。参数数目不限,彼此之间用分号隔开。 eval会对后面的cmdLine进行两遍扫描,如果在第一遍扫面后cmdLine是一个普通命令,则执行此命令;如果cmdLine中含有变量的间接引用,则保证简介引用的语义。也就是说,eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令。因此,eval命令适用于那些一次扫描无法实现其功能的变量。

2017-07-01 14:54:48 575

原创 I/O多路转接之poll服务器

函数说明: #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, int timeout); 参数说明:fds:是一个struct pollfd结构类型的数组,用于存放需要检测其状态的Socket描述符;每当调用这个函数之后,系统不会清空这个数组,操作起来比较方便;特别是对于socket连接比较多的情况下,在一定程度上可以提高

2017-06-30 15:25:37 333

原创 ]I/O多路转接(二)之epoll服务器

epoll是为处理大批量句柄而作了改进的poll。当然,这不是 2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通 知方法。

2017-06-29 22:39:44 325

原创 I/O多路转接(一)之select_server

select模型的特点:(1)可监控的文件描述符个数取决与sizeof(fd_set)的值。(2)将fd加入select监控集的同时,还要再使用一个数据结构array保存放到select监控集中的fd。(3)可见select模型必须在select前循环array(加fd,取maxfd),select返回后循环array (FD_ISSET判断是否有时间发生)。

2017-06-28 15:09:47 431

原创 高级I/O模型(2)--dup/dup2

dup和dup2是两个非常有用的调用,它们的作用都是用来复制一个文件的描述符。它们经常用来重定向进程的stdin、stdout和stderr。这两个函数的原形如下:利用函数dup,我们可以复制一个描述符。 传给该函数一个既有的描述符,它就会返回一个新的描述符,这个新的描述符是传给它的描述符的拷贝。这意味着,这两个描述符共享同一个数据结构。

2017-06-28 14:06:39 669

原创 linux之UDP_server

UDP它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。 传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。 **实现确认机制、重传机制、窗口确认机制**。

2017-06-26 14:10:27 11112

原创 高级I/O模型(1)--socketpair

非阻塞IO,纪录锁,系统V流机制,I/O多路转接(select/poll),readv和writev函数以及存储 映射IO(mmap),这些统称为高级IO。 pipe用来创建管道,但是单个管道只能单向通信,⼀端用于读,⽽而另一端用于写。如果要实现进程双向通信,必须创建一对管道。而socketpair则可以⽤用来创建双向通 信的管道,头文件:

2017-06-25 15:56:20 539

原创 Linux--进程池,线程池

池的概念:由于服务器的硬件资源“充裕”,那么提高服务器性能的一个很直接的方法就是以空间换时间,即“浪费”服务器的硬件资源,以换取其运行效率。这就是池的概念。池是一组资源的集合,这组资源在服务器启动之初就完全被创建并初始化,这称为静态资源分配。当服务器进入正是运行阶段,即开始处理客户请求的时候,如果它需要相关的资源,就可以直接从池中获取,无需动态分配。

2017-06-24 19:35:23 2526 2

原创 多进程以及多线程socket编程

多进程,多线程socket编程与单进程不同的只是服务器端的不同,客户端是一样的。多进程:父进程fork子进程, 子进程退出,但是子进程的子进程仍在运行,变成了孤儿进程,由1号进程回收,父进程不用等待子进程的子进程的退出,它俩是爷孙进程,不用回收子进程。多线程:不用关闭多余的文件描述符表,进程有两张文件描述符表,而线程只有一张文件描述符表,共享进程的文件描述符表,因此不用关闭多余的文件描述符表。

2017-06-23 11:40:28 3831

原创 单进程socket编程

在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket。在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成 的socket pair就唯一标识一个连接。

2017-06-22 23:03:31 1553

原创 linux命令之Xargs用法详解

之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令,例如:find /sbin -perm +700 |xargs ls -l xargs 可以读入 stdin 的资料,并且以空白字元或断行字元作为分辨,将 stdin 的资料分隔成为 arguments 。

2017-06-21 12:58:24 731

原创 哈希桶的实现

【开散列法】 开散列法又叫链地址法(开链法)。 开散列方法首先对关键码集合用某一个散列函数计算他们的存放位置。若设散列表地址空间的 所有位置是从0到m-1,则关键码集合中的所有关键码被划分为m个子集合,通过散列函数计算出来的 具有相同地址的关键码归于同一子集合。称同一子集合中的关键码互为同义词,每一个子集合称为 一个桶。通常各个桶中的表项通过一个单链表链接起来,亦称为同义词子表。

2017-06-20 12:32:29 17600 1

原创 搜索结构之哈希表(线性探测法)

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

2017-06-20 12:01:58 36663 2

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

为什么建立TCP连接需要三次握手?原因:为了应对网络中存在的延迟的重复数组的问题例子:假设client发起连接的连接请求报文段在网络中没有丢失,而是在某个网络节点长时间滞留了,导致延迟到达server。本来这是一个已经失效的连接报文,但是server接收到这个连接报文之后,误认为client发起了新的连接,于是向client发送确认报文段。此时因为没有了连接的3次握手,client不会对serve

2017-06-20 08:08:56 325

原创 TCP协议中的定时器

TCP协议中的定时器: (1)连接建立(connection establishment)”定时器(2)“重传(retransmission)”定时器(3)“延迟ACK(delayed ACK)”定时器(4)“持续 (persist)”定时器(5)“保活(keep alive)”定时器(6)FIN_WAIT_2定时器(7)TIME_WAIT定时器

2017-06-20 07:46:07 634

原创 URG(紧急位)与PSH(急迫位)

URG(紧急位): 紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。T C P的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指向包内数据段的某个字节(数据从第一字节到指针所指字节就是紧急数据,不进入接收缓冲就直接交给上层进程,余下的数据要进入接收缓冲的),设置为1时,首部中的紧急指针有效;为0时,紧急指针没有意义。PSH(急迫位): 在一个交互程序中,当客户

2017-06-20 07:27:25 1642

原创 Heap与Stack的区别

(1)栈区(stack):由编译器自动分配和释放,存放函数的参数值,局部变量的值等(2)堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。(3)全局区(静态区)(static):全局变量和静态变量的存储放在一块,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻另一块区域,程序结束后由系统释放。(4)文字常量区:常量字符串,程序结后由系统释放

2017-06-19 17:02:44 1064

原创 路由器的路由表生成算法

路由选择算法:1、向量-距离路由选择算法2、链路-状态路由选择算法3、LS算法4、Dijkstra算法

2017-06-13 13:12:20 4479

原创 linux中的网络端口

常用的保留TCP端口号有: HTTP 80,FTP 20/21,Telnet 23,SMTP 25,DNS 53等。常用的保留UDP端口号有: DNS 53,BootP 67(server)/ 68(client),TFTP 69,SNMP 161等。

2017-06-13 09:39:18 3247

原创 Linux之ARP协议

在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬 件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。ARP协议就起到这 个作用。

2017-06-12 22:41:41 2931

原创 循环冗余校验码

CRC即循环冗余校验码(Cyclic Redundancy Check ):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。编

2017-06-10 16:55:04 1675

原创 队列和栈

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。

2017-06-10 15:45:47 289

原创 浅析可变参数

在函数原型中,列出了函数期望的参数,但原型只能显示固定数目的参数,在求平均数的时候,如果数字有少数的几个,那么我们可以依次给函数传参,可是,如果数字多的话,难道要写出每个形参吗?那么让一个函数在不同时候接受不同数目的参数是否可以呢?答案是ok的,因为C语言很聪明,提供了一系列的可变参数来解决这个问题。

2017-06-08 15:01:52 267

原创 linux之crond(作业规划进程)

crond是Linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有 要执行的工作便会自动执行该工作。而Linux任务调度的工作主要分为以下两类: 1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存 2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信

2017-06-08 14:24:00 1587

原创 Linux之守护进程

守护进程也称精灵进程( Daemon),是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd 等。同时,守护进程完成许多系统任务。

2017-06-07 21:59:59 275

原创 gdb调试多进程,多线程

一:普通命令1.list命令 list linenum 显示程序第linenum行周围的程序 list function 显示函数名为function的函数的源程序 list 显示当前行后面的源程序 list - 显示当前行前面的源程序2.run(r) 运行命令。3.break(b)

2017-06-04 21:44:59 1937 1

原创 搜索结构之B-Tree

在B-树中查找给定关键字的方法是,首先把根结点取来,在根结点所包含的关键字K1,…,Kn查找给定的关键字(可用顺序查找或二分查找法),若找到等于给定值的关键字,则查找成功;否则,一定可以确定要查找的关键字在Ki与Ki+1之间,Pi为指向子树根节点的指针,此时取指针Pi所指的结点继续查找,直至找到,或指针Pi为空时查找失败。

2017-06-01 22:59:16 325

原创 map,set,multimap,multiset的异同

map的特性是,所有元素都会依据元素的键值自动排序,map的所有元素都是键值对,同时有实值value和键值key。键值对的第一元素被视为键值,第二元素视为实值,map不允许两个元素有相同的实值注意:不可以通过map的迭代器改变map的元素值,因为set的元素值就是键值,关系到set的排列规则,如果任意改变set的元素值,会严重弄破坏set组织。

2017-05-30 09:00:21 1648

原创 复杂链表的复制

(1)根据原始链表的每个结点N创建对应的N,并且把N链接在N的后面。 (2)设置复制出来的节点的m_pSibling (3)把长链表拆分成两个链表#include <iostream>

2017-05-27 17:26:03 188

原创 纸牌游戏--小猫钓鱼

“小猫钓鱼”游戏规则: 将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手上的第一张扑克牌放在桌子上,然后小哈也拿出手上的第一张扑克牌,放在小哼刚打出的牌上面,就这样两人交替出牌。出牌时,如果某人打出的牌与桌上的牌的牌面相同,即可将两张相同的牌及其中间所加的牌全部取走,并依次放到自己手中牌的末尾,当任意一人手中的牌全部出完时,游戏结束,对手获胜。

2017-05-27 12:38:26 13114

原创 二叉搜索树之红黑树

1、 每个结点的颜色只能是红色或黑色。2、 根结点是黑色的。3、每个叶子结点都带有两个空的黑色结点(被称为黑哨兵),如果一个结点n的只有一个左孩子,那么n的右孩子是一个黑哨兵;如果结点n只有一个右孩子,那么n的左孩子是一个黑哨兵。4、 如果一个结点是红的,则它的两个儿子都是黑的。也就是说在一条路径上不能出现相邻的两个红色结点。5、对于每个结点来说,从该结点到其子孙叶结点的所有路径上包含相同数目的黑结点

2017-05-25 10:56:44 359

原创 AVL的插入,删除操作

在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树可以是空树,也可以是具有以下性质的树: (1):他的左右子树都是AVL树 (2):左子树和右子树高度之差(平衡因子)的绝对值不超过1特点:

2017-05-23 07:27:41 838

原创 荷兰国旗

题目描述:现有n个红白蓝三种不同颜色的小球,乱序排在一起,请通过两两交换任意两个球,使得从左至右的球依次为红球白球蓝球。这个问题之所以叫荷兰国旗,是因为将红白蓝三色小球弄成条状物,并有序的排列后正好组成荷兰的国旗(图中球上标数字0的表示红球,1表示白球,2表示蓝球)解法:需要三个指针,一个前指针begin,一个中指针current,一个后指针end,current指针

2017-05-20 23:31:51 458

原创 奇偶数排序

题目描述:给定一个整数数组,请调整数组的顺序,使得所有奇数位于数组前半部分,所有偶数位于数组后半部分, 要求时间复杂度为O(n).分析与解法: 最容易想到的办法是从头到尾扫描这个数组,每遇到一个偶数,就把他单独取出来,然后把该偶数后面的所有数往前移动一位,最后把该偶数放入数组的最末尾。因为每遇到一个偶数,需要移动O(N)个数,所以时间复杂故为O(N*N),不符合题目要求。

2017-05-19 22:46:38 5415

原创 最大连续子数组和

题目描述:给定一个数组,数组里可能有正数,负数,0,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个一个和。求所有子数组和的最大值。例如,如果输入数组为,和的最大子数组为{1,-2,3,10,-4,7,2,-5},那么输出为该子数组的和18解法一:蛮力枚举法(时间复杂度:O(N*N*N))用三个for循环三层遍历,求出数组中每一个子数组的和,最终求出这些子数组和中最大的一个值。

2017-05-18 19:57:27 416

原创 二叉搜索树查找,插入,删除

二叉排序树的查找过程通常采取二叉链表作为二叉排序树的存储结构。中序遍历二叉排序树可得到一个关键字的有序序列,一个无序列可以通过构造一棵二叉排序树变成一个有序序列,构造树的过程即为对无序列进行排序的过程。每次插入的新的结点都是二叉排序树上新的叶子结点,在进行插入操作时,不必移动其它结点,只需改动某个结点的指针,由空变为非空即可。搜索,插入,删除的复杂度等于树高,O(log(n)).

2017-05-18 14:45:49 428

空空如也

空空如也

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

TA关注的人

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