C++------函数重载,缺省参数,命名空间 C++介绍 C语言是一种结构化的程序设计语言。最初是为了开发UNIX操作系统,由丹尼斯里奇和肯汤姆逊在B语言的基础上于贝尔实验室开发出来的。C语言是一种面向过程的语言,适合处理较小规模的程序。对于复杂的,大规模的程序,需要高度的抽象,此时C语言就不再适合。因此,在C语言的基础上又增加了新的特性————类,最初,称其为“带类的C语言”。后来,又再次基础上增添了更多的新特性。所以,将其重...
IO多路转接------epoll epoll是实现IO多路转接的另一种方式。它与select,poll的作用相同,都是一次等待多个文件描述符。但是,它在接口的使用及原理上与前两者有很大的不同。它改进了select和poll的缺点,使IO操作效率更高。因此它被公认为LInux2.6下性能最好的IO多路转接就绪通知方法。 下面具体介绍epoll的相关概念。epoll 与select,poll...
IO多路转接------poll 在这篇文章中介绍了利用select来实现IO多路转接。在本文中,将介绍利用poll来实现IO多路转接。 poll与select的作用相同。都是一次等待多个文件描述符,当至少有一个文件描述符上的就绪事件发生时,poll返回满足就绪条件的文件描述符的个数并将发生改变的文件描述符由参数带回。只是poll在接口设计上与select有所不同。 select在接口使...
IO多路转接------select 在五种IO模型一文中介绍了五种IO模型。在数据通信过程中,分为两部分:一个是等待数据到达内核,一个是将数据从内核拷贝到用户区。在实际应用中,等待的时间往往比拷贝的时间多,所以要提高IO的效率,就要减少等的比重。在阻塞IO,非阻塞IO,信号驱动IO和异步IO中,虽然等待的方式或等待的主体不同,但是无论是谁在等,无论如何等,等待的时间总长是不变的。 在IO多路转接中,由于...
计算机网络------fcntl实现非阻塞IO,dup2实现重定向 在五种IO模型中有提到在Linux中,默认所有的套接字都是阻塞的。所以要实现非阻塞的套接字,就要执行特定的系统调用来实现。fcntl 函数原型:#include <unistd.h>#include <fcntl.h>int fcntl(int fd, int cmd, ... /* arg */ ); 参数说明:fd:表示...
TCP/IP五层网络模型------数据链路层 在之前的介绍过的网络层的相关内容中可知,网络层的作用是研究如何将一个数据报由一个网络通过路由器转发至另一个网络。而本文中所说的数据链路层的作用则是研究在同一局域网内,如何将数据帧由一台主机传送至另一台主机。在数据链路层使用的通信信道有两种:点对点的数据通信信道(一对一),广播信道(一对多)。 数据链路层的基本数据单元称为帧。 数据链路层的作用主要是:将发...
IP协议------路由选择 当一个数据包发送到某个路由器时,该路由器将数据报如何发送呢。在每个路由器中都会维护一张路由表,路由表的每一行有三个基本消息:目的网络 下一跳IP地址 子网掩码 当路由器收到数据报后,会做如下处理:(1)解析数据报中的目的IP地址;(2)将该IP地址和路由表的第一行的子网掩码进行按位与操作,将结果与该行的目标网络进行对比。 如果与目标网络不相等,...
TCP/IP五层网络模型------IP层(网络层)之IP协议 网络层 网络层的作用是在复杂的网络环境中为要发送的数据报找到一个合适的路径进行传输。 网络层向上提供简单灵活,无连接的,尽最大努力交付的数据报服务。从数据报从主机A发送到主机B的过程中可能要经历很多节点。所谓无连接是指:数据报在传输之前不需要提前规划好整个传输路线,即不用提前建立一条从发送主机到接收主机之间的传输连接路线。(如果是有连接服务,该传输路线建立好之后,各数据...
数据结构------海量数据处理 1. 给定一个大小超过100G的文件,其中存在IP地址,找到其中出现次数最多的IP地址。 要查找IP地址,首先要将100G文件加载到内存以哈希表的形式将其储存起来。其中哈希表中的数组元素一个键值对构成。各IP地址(4字节)作为Key值,IP地址出现的次数作为Value值。在对哈希表进行遍历查找出现次数最多的IP地址。 但是一般的内存不可能有100G,无法将文件中的所有I...
七大排序算法(5)------快速排序(递归和非递归) 在本文中使用到的升序,降序,交换函数的代码见:这篇博客快速排序(递归实现) 快速排序的基本思想是在待排序序列中找到一个基准值(一般取待排序序列的最后一个元素),然后将该基准值放置在一个合适的位置,使得在基准值之前的元素都小于等于基准值,基准值之后的元素都大于等于基准值。 然后再对基准值之前的序列使用上述方法进行排序寻找基准值位置,对基准值之...
七大排序算法(4)------归并排序(递归和非递归) 在本文中使用到的升序,降序,交换函数的代码实现见:这篇博客 在单链表的基本操作中,有一个操作为合并两个有序的单链表使合并后的链表仍然有序。本文中归并排序与这个思想类似。不断使两两有序的序列进行合并。归并排序(递归实现) 例如,有一待排序序列:20 10 9 8 11 10 7 6。 排序过程如上图所示,(1)首先将待排序序...
七大排序算法(3)------希尔排序 在本文中使用到的升序,降序,交换函数的代码以及插入排序的思想见:这篇博客 在上述博客中的插入排序中有介绍了插入排序的两个特点:(1)当待排序序列的有序性比较高时,排序的效率比较高;(2)当待排序序列的元素个数较少时,排序的效率比较高。 本文中介绍的希尔排序就是利用插入排序的两个特点来实现的。希尔排序 例如,待排序序列为:10 30 20 6...
七大排序算法(1)------冒泡,选择,插入排序 本文中将介绍七大排序算法中的三种排序:冒泡排序,选择排序,插入排序。剩余的排序算法将在接下来的文章中一一介绍。 介于排序分为升序和降序两种,所以,这里将比较规则以回调函数的方式传入排序算法中,这样,在具体实现时,就可以根据不同的需求传递不同的函数指针进而达到不同的排序效果。 升序比较规则定义如下: 降序比较规则定义如下:1. 冒泡排序 ...
TCP协议------可靠性保证机制 在这篇博客中介绍了连接管理机制,它是TCP协议保证可靠性的重要机制,除了该机制,还有许多实现可靠性得机制,本文中将一一进行介绍。1. 确认应答(ACK)机制 在TCP的协议报头中有两个字段:序列号和确认序列号。这两个字段就是来保证确认应答机制的。 发送方A将要发送的多个数据段排好序发送给接收端B。比如说A要发送序列号为1~1000的数据段。B如果将这些数...
TCP协议的连接管理机制------三次握手,四次挥手 有关TCP协议的相关知识见:这篇博客 TCP与UDP最大的区别就是TCP保证可靠性数据传输。从TCP与UDP的协议报头就可以看出差别。TCP的协议报头比UDP报头多了很多东西,而多出来的这些都是用于保证数据的可靠性传输的。下面将具体介绍TCP保证可靠传输的机制以及报头中的字段是如何用于可靠性传输机制的。1. 连接管理机制 下图为客户端和服务器端根据TCP协议:三次握手建...