自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Yinghuhu333333的博客

搬砖砖砖砖砖...........................................

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

原创 解决频繁I/O之select以及select+TCP的服务器代码实现

select的特点:可监视的文件描述符的个数有上限,取决于sizeof(fd_set),每一个bit表示一个文件描述符. select的缺点(就是epoll的优点): 1. 每次调用select,都要手动设置fd_set的集合,使用很比方便. 2.每次调用select,都要把fd_set集合(3个集合,读,写,异常)从用户态拷贝到内核态,那么如果频繁的调用s...

2018-07-25 21:59:10 596

原创 epoll的工作原理和使用场景

对比epoll和select,就会发现select的缺点恰恰都是epoll的优点.下面进行epoll的学习:epoll的相关系统调用的函数:1.创建一个epoll句柄(即是一个文件)int epoll_create(int size);返回值:epoll_create的返回值是一个文件描述符.参数:在现在的使用中,size没有什么意义,可以随便填写2.epoll事件的添加...

2018-07-24 21:59:16 3384

原创 非阻塞IO(将文件描述符设置为非阻塞)

我们知道,所有的套接字都默认是阻塞IO.那么怎么将其改为非阻塞呢? 有一个函数fcntl,就可以将其设置为非阻塞.#include <fcntl.h>int fcntl(int fd,int cmd,...);参数cmd一般有一下几种方式: - 复制一个现有的文件描述符(cmd = F_DUPFD) - 获得/设置文件描述符标记(cmd = FGGETFD/FSE...

2018-07-24 11:48:56 2402 2

原创 五种IO模型

IO:可以理解为将数据从外设到内存,从内存到外设的转移. IO通常分为两步:①等待数据准备好(可能大部分的时间都是在等待数据准备就绪的过程)②将数据进行拷贝. 所以提升IO效率:尽量减少等待数据的时间. 下面就是常见的5中IO模型. - 阻塞IO:在内核数据准备好之前,其系统调用函数会一直等待.(注意:所有的套接字,默认都是阻塞方式)阻塞IO中,调用者在等,也会亲自去调用.(同步IO) ...

2018-07-21 21:48:52 279

原创 软件测试之基础篇

软件测试的生命周期生命周期: 需求分析->测试计划->测试设计->测试开发->测试执行->测试评估 在这里与软件开发的周期进行类比学习,其实就是V模型.描述bug合格的bug包含: 1.发现问题的版本. 2.问题出现的环境(查看项目的支持版本,测试的环境不同可能结果也会不同). 3.错误重现的步骤(类比测试用例的步骤). 4.预期行为的描述(需...

2018-07-14 12:07:08 402

原创 快速排序算法(快排)

基本思想:快排也是一种分治的思想.从一个数组中选择一个数作为基准值(基准值一般为数组的最后一个元素或者第一个元素).遍历数组,如果大于基准值的放在基准值的右边,小于基准值的放在基准值的左边.对左右两个部分再执行第二步,直至每个区间只有一个元素为止.方法1:交换法遍历数组,找到第一个大于基准值的元素停下来;然后从数组的后面从前遍历,找到第一个小于基准值的元素停下来;然后交换找...

2018-07-10 11:37:33 359

原创 归并排序(递归与非递归实现)

归并排序:采用的是一种分而治之的思想. 过程:将一个数组进行二分,直到有每组有一个元素为止.然后进行合并元素,按照一定的顺序进行排序. 代码实现: ①:递归实现void Merge(int arr[],int left,int mid,int right,int tmp[]){ if(right - left <= 1) { return; ...

2018-07-08 23:57:30 260

原创 堆的相关操作以及堆排序

堆:它的物理结构可以看做是数组,而逻辑结构可以看做一颗完全二叉树. 堆有大堆和小堆之分:大堆:根节点是当前所有元素中的最大值,而对于每一个子树,其子树也是一个大堆.小堆:根节点是当前所有元素中的最小值,而对于每一个子树,其子树也是一个小堆.堆的应用: 堆还可用来表示优先级队列.队列:即只允许队列的队首进行删除,而队尾进行插入.而优先级队列就是一组有序的队列.在堆中,进行插入和...

2018-07-06 14:44:38 362

原创 插入排序

对于插入排序,我理解的原理是这样的(假设是升序): 第一个元素不用排序,从第二个元素开始,与前面的元素比较,如果小于前面的元素就把前面的元素赋值给后面的元素. 前两个元素排好序以后,紧接着与第三个元素进行比较将这三个元素进行排序. …….. 如下图所示: 代码如下:void InsertSort(int arr[],int size){ if(size <= ...

2018-07-04 23:31:31 240

原创 传输层协议之TCP

TCP:传输控制协议 首先我们来看看TCP的协议格式: 源/目的端口号表示数据从哪个进程来去哪个进程.32位序号/32位确认序号:在数据传送时标识数据的发送端已发送的和接收端确认消息收到后确认的对应的数据.4位TCP报头,在图中已经给出解释.6个标志位 ①URG:紧急指针是否有效 ②ACK:确认号是否有效 ③PSH:提示应用程序接收端立刻从TCP缓冲区把数据读走. ④RST...

2018-07-04 21:59:05 405

原创 选择排序

原理: 比如现在是升序排序:那么每次都是在寻找当前剩余元素中的最小值,找到后与当前元素交换. 如下图所示: 代码实现: 是一个升序的代码: 3 void swap(int* a,int* b) 4 { 5 int tmp = *a; 6 *a = *b; 7 *b = tmp; 8 } 9 void SelectSort(int...

2018-07-03 20:24:47 182

原创 传输层协议之UDP

端口号端口号的范围划分: 范围 0~1023 知名端口号:一些著名的协议,它们的端口号都是固定的. 1024~65535 普通端口号:操作系统动态分配的端口号.例如:客户端程序的端口号,就是由操作系统从这个范围分配的常见的著名端口号:ssh服务器:22号端口ftp服务器:21号端口telnet服务器:23号端口http服务器:8...

2018-07-01 21:59:17 760

原创 应用层HTTP协议----超文本传输协议

HTTP是一个属于应用层的协议,它是基于TCP实现的服务器/客户端的模式,客户端发送请求,服务请响应请求.认识URLURL:网址. 例如:下面这个图中的网址其实是一个标准的网址 而我们现在的看到的网址基本都是这样的:https://www.baidu.com/s?wd=%E5%A4%A7%E8%92%9C%E7%9A%84%E8%8B%B1%E6%96%87&rsv...

2018-07-01 15:53:59 809

空空如也

空空如也

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

TA关注的人

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