03 2017 档案

摘要:一.select 和 poll的区别 select的两个限制: 1.一个进程能打开的最大文件描述符个数是有限的 1024 可以通过 unlimt -n number来修改 2.selcet 中的fd_set集合容量的限制(FD_SETSIZE),不可改变。 poll的限制: 1.一个进程能打开的最大 阅读全文
posted @ 2017-03-30 22:28 ren_zhg1992 阅读(514) 评论(0) 推荐(0)
摘要:select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作 IO多路复用之select总结 该函数准许进程指示内核等待多个事件中的任何一个发送,并只在有一个或多个事件发生或经 阅读全文
posted @ 2017-03-30 22:14 ren_zhg1992 阅读(154) 评论(0) 推荐(0)
摘要:代码: 阅读全文
posted @ 2017-03-30 17:11 ren_zhg1992 阅读(1030) 评论(0) 推荐(0)
摘要:代码: 阅读全文
posted @ 2017-03-30 16:33 ren_zhg1992 阅读(329) 评论(0) 推荐(0)
摘要:本章目标: 消息队列实现回射客户/服务器 模型框架如下: 服务器端代码: 客户端代码: 调试了一晚上,还是有问题。 1.未能在服务器端输出显示。换成printf()就行,fputs就不行。。 2.客户端可以接受到回显数据 但是只能回显两个字节。。。。。 满头雾水。。。不说了 上面这个模型中是有缺陷的 阅读全文
posted @ 2017-03-29 21:49 ren_zhg1992 阅读(138) 评论(0) 推荐(0)
摘要:1 #define _CRT_SECURE_NO_WARNINGS 2 #include 3 #include 4 #include 5 using namespace std; 6 7 //二叉树节点的描述 8 typedef struct BiTNode 9 { 10 char data; 11 struct BiTNode *... 阅读全文
posted @ 2017-03-29 15:42 ren_zhg1992 阅读(226) 评论(0) 推荐(0)
摘要:堆排序 Heap Sort 堆排序是一种选择排序,其时间复杂度为O(nlogn)。堆排序(Heap Sort)只需要一个记录元素大小的辅助空间(供交换用),每个待排序的记录仅占有一个存储空间。 堆的存储 一般用数组来表示堆,若根结点存在序号0处, i结点的父结点下标就为(i-1)/2。i结点的左右子 阅读全文
posted @ 2017-03-28 16:03 ren_zhg1992 阅读(222) 评论(0) 推荐(0)
摘要:希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进 阅读全文
posted @ 2017-03-28 15:55 ren_zhg1992 阅读(340) 评论(0) 推荐(0)
摘要:快速排序采用的思想是分治思想。 快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每 阅读全文
posted @ 2017-03-28 15:26 ren_zhg1992 阅读(204) 评论(0) 推荐(0)
摘要:归并排序法是利用递归和分治技术,将数据序列划分为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并为越来越大的有序序列。 其中,“归”代表的是递归的意思,即递归地将数组折半地分离为单个数组。例如:数组[2,6,1,0]会先折半,分为[2,6]和[1,0]两个数组,然后再次折半,将 阅读全文
posted @ 2017-03-28 11:27 ren_zhg1992 阅读(185) 评论(0) 推荐(0)
摘要:本章目标: 五种I/O模型 select 用select改进回射客户端程序 一、五种I/O模型 阻塞I/O 非阻塞I/O I/O复用 (select和poll) 信号驱动I/O 异步I/O 阻塞I/O 非阻塞I/O 消耗cpu,一般很少使用。 I/O复用 select管理文件描述符集合。 信号驱动I 阅读全文
posted @ 2017-03-28 09:33 ren_zhg1992 阅读(190) 评论(0) 推荐(0)
摘要:目标: TCP 11种状态 连接建立三次握手、连接终止四次握手 TIME_WAIT与SO_REUSEADDR SIGPIPE 一、TCP11中状态 当客户端和服务器端同时关闭的时候才会产生CLOSING状态。 我们通过程序来看一下这11中状态。 LISTEN启动服务器,观察状态netstat -an 阅读全文
posted @ 2017-03-27 21:42 ren_zhg1992 阅读(179) 评论(0) 推荐(0)
摘要:思想: 冒泡排序的思想很简单,就是以此比较相邻的元素大小,将小的前移,大的后移,就像水中的气泡一样,最小的元素如同气泡一样,会最终浮到水面上。 代码: 算法复杂度 O(n²) 阅读全文
posted @ 2017-03-27 17:38 ren_zhg1992 阅读(121) 评论(0) 推荐(0)
摘要:思想: 对于给定的一组记录,初始时假定第一个记录自成一个有序序列,其余的记录为无序序列;接着将第二个记录插入之前的有序序列中;以此类推。 核心思想在于找到要插入的位置。就像抓牌一样,新的牌要插到哪儿才是核心。 代码: 插入排序法的时间复杂度为 O(n²)。 插入排序法是稳定的:插入过程中,遇到与插入 阅读全文
posted @ 2017-03-27 17:00 ren_zhg1992 阅读(90) 评论(0) 推荐(0)
摘要:思想: 还是先来看看选择排序的思想。选择排序的思想非常直接,不是要排序么?那好,我就从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。相比于插入排序的固定元素找位置,是两种思维 阅读全文
posted @ 2017-03-27 16:21 ren_zhg1992 阅读(141) 评论(0) 推荐(0)
摘要:二分查找法也叫折半查找法,它的思想是每次都与序列的中间元素比较。二分查找的前提是数组是有序的。 假设有序数组为array[];数组长度为n,要查找的数字为 dataFind。 首先将n个元素分成两半,取 array[n/2] (这里实际上是(0+n-1)/2))与将要查找的值dataFind进行比较 阅读全文
posted @ 2017-03-27 15:41 ren_zhg1992 阅读(585) 评论(0) 推荐(0)
摘要:今天在做《面试笔试宝典》的时候,遇到了初始化列表和构造函数初始化区别的问题。之前只是知道有些情况必须用初始化列表,并且初始化列表的效率要高。但是要是说两者的区别,还真是没有探究过。网上搜了一些博客,对我很有帮助,但是感觉没有讲到自己异或的地方。所以自己实践了一下。 首先,我们来把两者的一般原型给出: 阅读全文
posted @ 2017-03-25 12:08 ren_zhg1992 阅读(5799) 评论(0) 推荐(0)
摘要:本章主要任务;1.继续晚上TCP回射客户/服务器程序2.再次强调TCP是个流协议3.僵死进程与SIGCHLD信号 一、TCP回射客户/服务器程序 第一种会粘包,第二种用在行位加\n。readline. 第三种解决粘包问题就是使用,定长包,但是这种方式效率低,浪费缓冲区。改进机制是我们可以在包中加入包 阅读全文
posted @ 2017-03-24 21:08 ren_zhg1992 阅读(185) 评论(0) 推荐(0)
摘要:本章主要内容1.read\write和recv\send函数的区别2.readline实现3.用readline实现回射客户/服务器4.getsockname、getpeername的简单介绍5.gethostname、gethostbyname、gethostbyaddr的简单介绍 一、1.rec 阅读全文
posted @ 2017-03-24 19:33 ren_zhg1992 阅读(133) 评论(0) 推荐(0)
摘要:c++中异常处理的关键字有:throw try catch。c++中的异常处理机制只能处理有throw捕获的异常,没有捕获的将忽略。 抛出异常即检测是否产生异常,在C++中,其采用throw语句来实现,如果检测到产生异常,则抛出异常。该语句的格式为: throw 表达式 如果在try语句块的程序段中 阅读全文
posted @ 2017-03-22 10:01 ren_zhg1992 阅读(827) 评论(0) 推荐(0)
摘要:首先,new和sizeof都是运算符,而strlen是函数。 new和delete是运算符,重载new和delete是可能的。这样做的原因是,有时希望使用某种特殊的动态内存分配方法。例如,可能有些分配子程序,他们的堆已耗尽,自动开始把一个磁盘文件当虚存储使用,或者用户希望控制某一片存储空间的分配等。 阅读全文
posted @ 2017-03-21 16:52 ren_zhg1992 阅读(1556) 评论(0) 推荐(0)
摘要:new和delete运算符用于动态分配和撤销内存的运算符 new用法: 1. 开辟单变量地址空间 1)new int; //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋值给整型指针a. 2)int *a = new int( 阅读全文
posted @ 2017-03-21 15:21 ren_zhg1992 阅读(344) 评论(0) 推荐(0)
摘要:不多说,看代码 输出的结果为: 7 4 4 4 阅读全文
posted @ 2017-03-21 11:07 ren_zhg1992 阅读(92) 评论(0) 推荐(0)
摘要:这两个名字不同当然所代表的意思也就不同。我刚开始看到这就吓到了,主要是中文太博大精深了,整这样的简称太专业了,把人都绕晕了。从英文解释或中文全称看就比较容易理解。 指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针 数组指针:a pointer to an a 阅读全文
posted @ 2017-03-21 11:00 ren_zhg1992 阅读(93) 评论(0) 推荐(0)
摘要:静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值。 静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见。用法1:函数内部声明的static变量,可作为对象间的一种通信机制 如果一局部变量被声明为static,那么将只有唯一的 阅读全文
posted @ 2017-03-21 10:54 ren_zhg1992 阅读(115) 评论(0) 推荐(0)
摘要:今天在看《程序员面试笔试宝典》时,看到变量的重定义,想起之前传智中有讲过,不过有点模糊了,现在来巩固下。 全局变量、静态全局变量、静态局部变量和局部变量的区别 变量可以分为:全局变量、静态全局变量、静态局部变量和局部变量。 (1) 按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态 阅读全文
posted @ 2017-03-21 10:39 ren_zhg1992 阅读(1750) 评论(0) 推荐(0)
摘要:什么是友元类 当一个类B成为了另外一个类A的“朋友”时,那么类A的私有和保护的数据成员就可以被类B访问。我们就把类B叫做类A的友元。 友元类能做什么 友元类可以通过自己的方法来访问把它当做朋友的那个类的所有成员。但是我们应该注意的是,我们把类B设置成了类A的友元类,但是这并不会是类A成为类B的友元。 阅读全文
posted @ 2017-03-20 22:31 ren_zhg1992 阅读(6448) 评论(0) 推荐(2)
摘要:1.友元函数的简单介绍 1.1为什么要使用友元函数 在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了 使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保 阅读全文
posted @ 2017-03-20 22:29 ren_zhg1992 阅读(168) 评论(0) 推荐(0)
摘要:本人在学习Qt的时候发现了一个非常有趣的现象。有很多函数的调用方法都写成了如下的形式: 这令小弟着实不懂。在上面这段代码中,第一个对象调用它的成员函数func()是完全没有问题的,但是后面那个func2()就奇怪了。我们只知道,点运算符(.)的作用就是调用对象的成员,但是如果按照上面这个程序的字面意 阅读全文
posted @ 2017-03-20 21:50 ren_zhg1992 阅读(2153) 评论(0) 推荐(0)
摘要:转:http://www.cnblogs.com/gw811/archive/2012/10/20/2732687.html C++引用详解 引用的概念 引用:就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法:类型标识符 &引用名=目标变量名; 如下:定义引用r 阅读全文
posted @ 2017-03-15 16:27 ren_zhg1992 阅读(224) 评论(0) 推荐(0)
摘要:今天在《剑指offer》用deque时,看到 std::deque<BinaryTreeNode*> dequeTreeNode; BinaryTreeNode *pNode = dequeTreeNode.front(); front() 是返回双向队列的第一个元素的引用 可以把一个引用赋值给一个 阅读全文
posted @ 2017-03-15 16:21 ren_zhg1992 阅读(148) 评论(0) 推荐(0)
摘要:类对象的构造顺序是这样的:1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员;2.进入构造函数后在构造函数中执行一般赋值与计算。 使用初始化列表有两个原因:原因1.必须这样做: 《C++ Primer》中提到在以下三种情况下需要使用初始化成员列表: 情况一、需要初始化的数据成员是对象的情况( 阅读全文
posted @ 2017-03-07 16:18 ren_zhg1992 阅读(1227) 评论(0) 推荐(0)