自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 STL中的set和map

原文:http://blog.csdn.net/terence1212/article/details/52487656STL的set和map都是基于红黑树实现的,和stack和queue都是基于deque一样,它们仅仅是调用了RBTree提供的接口函数,然后进行外层封装即可。本篇博客理解起来比较轻松,set和map的源代码也不多,大家可以慢慢“品味”。另外,还会介绍multiset和multima

2017-09-05 15:29:48 525

原创 webbench源码剖析

webbench是一种网站的压力测试工具,它是由Lionbridge公司开发,wenbench的标准测试可以向我们展示两项内容:每秒钟相应的请求数和每秒钟传输的数据量;。webbench不但能具有便准静态页面的测试能力,还能对动态页面(ASP,PHP,Java,CGI)进 行测试的能力。还有就是他支持对含有SSL的安全网站例如电子商务网站进行静态或动态的性能测试。 Webbench最多可以模拟3

2017-09-04 21:04:34 487

转载 常见的文本压缩算法

1.目前主要的文本压缩算法 文本压缩是根据一定的方法对大量数据进行编码处理以达到信息压缩存储的过程,被压缩的数据应该能够通过解码恢复到以前的状态,而不会发生信息丢失的现象。2.文本压缩的分类 3.算法描述3.1.Huffman编码1.原理简介huffman压缩是数据结构课程中的常见内容, 是典型的贪心算法与二叉树的应用.压缩前, 以ascii文本为例, 每个字符如a,b…都采用等长的8位ac

2017-08-15 14:32:18 15067

转载 C语言实现C++的封装继承与多态

1、 概述 C语言是一种面向过程的程序设计语言,而C++是在C语言基础上衍生来了的面向对象的语言,实际上,很多C++实现的底层是用C语言实现的,如在Visual C++中的Interface其实就是struct,查找Interface的定义,你可以发现有这样的宏定义:#ifndef Interface#define Interface struct#endifC++在语言级别上添加了很多新机

2017-07-29 07:53:16 816

转载 学习字符串string类

学习C++ -> string类字符串一、string类字符串的介绍 在程序设计中, 字符串的使用十分频繁, C语言类型字符串(简称C-串)在使用与字符串的处理上较为复杂, C++为了在程序设计中更加方便的使用字符串特新增了一种string类型的字符串。  string类字符串为STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 相对于C-

2017-07-25 22:36:51 325

原创 面试题:C++实现一个不能被继承的类

一个子类继承一个父类,子类的构造函数和析构函数会自动调用父类的构造函数, 先要求设计不能继承的类,即不允许子类的构造函数调用父类的构造函数和析构函数,方法如下:1.直接的方法:将父类的构造函数和析构函数设置为private成员函数 私有成员只能被自身的类访问class A{public: static A* Create() { return new A()

2017-07-15 20:51:48 554

原创 obj : error LNK2019: 无法解析的外部符号 "public: __thiscall B::B(void)" (??0B@@QAE@XZ),该符

今天在写类的简单实现时突然遇见这样的问题,最后发现是因为自己忘记实现构造函数的析构函数class B:public A{public: B(); ~B();};出现该错误:obj : error LNK2019: 无法解析的外部符号 “public: __thiscall B::B(void)” (??0B@@QAE@XZ),该符号在函数 _main 中被引用,修改即解决了错误

2017-07-15 20:23:22 4099 4

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

我们在之前写过c/c++实现的进度条,原理相同,这里主要着重于彩色进度条的实现这里只是一个带颜色的进度条,主要是让我们知道颜色如歌设置 代码:#!/bin/bashfunction bar(){str=''i=0j=0arr=('|' '/' '-' '\')while [ $i -le 100 ]do j=i let j%=4 str=#${str}

2017-07-06 15:11:53 489

转载 shell中的eval以及与 反引号``、$()的区别

本文转载自:shell中的eval shell 中的 eval 功能说明:重新运算求出参数的内容。语  法:eval [参数]补充说明:eval可读取一连串的参数,然后再依参数本身的特性来执行。参  数:参数不限数目,彼此之间用分号分开。1.eval命令将会首先扫描命令行进行所有的替换,然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的

2017-07-03 17:54:05 1196

原创 poll服务器---多路连接之 poll

1.poll与select不同在于描述符存储方式不同和参数类型不同结构体数组的管理:当每次有需要关心的描述符时,将其放入结构体中,每次有无效的描述符后,将其描述符置-1,下次poll函数会忽略它。当有新的描述符加入时,从头遍历结构体,将为-1的元素设为要关心的描述符事件状态。切记:当新的描述符加到结构体数组末尾时要更新关心描述符个数,即poll第二个参数。 每次调用poll后,结构体元素reve

2017-07-01 19:12:57 556

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

1、基本知识  epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关心的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。2、epoll接口  epoll操作过程需要三个接口,分别如下:  epoll_create:

2017-06-30 16:46:17 290

原创 select服务器---I/O多路连接之select

现如今,提高网络服务器的性能,提高I/O的性能,我们知道I/O系统其实做了两件事,一是等待数据就绪,二是数据的搬移;尤其是远距离网络传输“等”状态尤其明显,所以提高I/O性能本质是减少等的比重,其越趋近于0,效率就越高;I/O模型中提供一种多路复用模型,一次等待多个文件描述符,只要存在就绪文件,就可进行读写,大大提高了I/O的性能; 多路链接中存在三个特殊的函数select、poll、epoll,

2017-06-29 22:17:56 355

原创 socketpair和dup---高级I/O

一、我们在学习进程间通信的时候学习过匿名管道pipe,匿名管道的特点:只能用于单向通信只能用于有血缘关系的两个进程,通常是父子进程生命周期随进程面向字节流具有同步机制我们现在学习一种新的管道socketpair,可以用于双向通信,也是用于父子进程,代码实现与匿名管道类似#include<stdio.h>#include<sys/types.h>#include<sys/socket.

2017-06-25 20:28:04 540

原创 udp套接字及应用层udp超时重传

编写udp服务器1.注意要点:udp是无连接,不稳定,面向数据报的一种传输层协议;既然他不可靠为什么还要用呢?其一:当应用程序使用广播或多播时只能使用UDP协议;其二:由于他是无连接的,所以速度快如果一方的数据报丢失,那另一方将无限等待,解决办法是设置一个超时重传机制;建立UDP套接口时socket函数的第二个参数应该是SOCK_DGRAM,说明是建立一个UDP套接口;由于UDP是无连接

2017-06-25 19:00:52 10455 3

原创 进程池与线程池---实现服务器

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

2017-06-24 21:06:22 1709

原创 bind error : Cannot assign requested address,该如何处理

bind error : Cannot assign requested address 代码:#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<stdlib.h>#include<netinet/in.h>#include<arpa/inet.h>#include<string.h>static

2017-06-24 08:07:41 27073 3

原创 tcp_socket绑定(bind)失败---Address already is use原因

我们前面介绍了三种tcp_server编写多进程多线程服务器编写,在测试这三个servet我们遇到一个问题,就是当我们绑定一个端口号后,ctrl-z结束掉server服务器,此时再次绑定该端口号会出现这样的出错提示:显示端口号正在被使用,可是我们已经关闭了服务器了,为什么不能使用呢?但过一端时间之后,该端口号又可以使用了,这又是为什么呢?IBM官网给出了具体解释linux套接字编程的五大隐患 其中

2017-06-24 07:39:58 28459 2

原创 多进程多线程服务器(tcp_server)编写

编写客户/服务器1.编写单进程客户/服务器(Version1)代码清单: tcp_servet#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<stdlib.h>#include<netinet/in.h>#include<arpa/inet.h>#include<string.h>static

2017-06-23 23:21:25 962

原创 TCP三次握手和四次挥手

TCP是面向来连接的协议,运输连接有三个阶段:建立连接(三次握手)、数据传送、释放连接(四次挥手);一、TCP的连接建立1.如图:建立链接(三次握手)具体步骤:(假设A是客户,B是服务器)A主动打开链接,B被动打开链接,此时两端的TCP处于CLOSED状态;B的TCP服务进程先创建传输控制块TCB,准备接收客户的请求,B处于LISTEN状态;A的客户进程首先创建传输控制块TCB,然后向B发送连

2017-06-20 10:38:41 280

原创 URG和PSH区别以及TCP协议定时器

一、URG&PSH的区别 TCP的报头信息有六个控制位,说明本段文的性质;分别为紧急URG、确认ACK、推送ACK、复位RST、同步SYN、终止FIN;今天我们来主要来介绍介绍PSH和URG的区分;1.URG是什么? URG表示紧急指针,与紧急指针字段搭配使用,当URG = 1时,表示紧急指针字段有效。它告诉系统此报文有紧急数据,应尽快传送(相当于高优先级数据),而不按照原来的排序顺序来传送;

2017-06-20 08:23:14 515

原创 位图一

面试题:给40亿个不重复的无符号整数,没排过序。给定一个无符号整数,如何快速判断一个数是否在这40亿个数中 分析: 40亿个数,4 000 000 000相当于4G个数,每个数4个字节,总共16G采用遍历的方法,运行内存为4G,数据不能全部加载到内存,所以这个方法不行;采用哈希的方法,虽然效率高,但是空间浪费大;采用位图的方法,用字节0或1代表这个数是否存在,整数的范围从0~2^32-1,

2017-06-18 17:56:08 246

原创 传输层概述以及传输层端口

一、运输层协议概述两个主机进行通信实际上就是两个主机中的应用进程互相通信,应用进程之间的通信又称为端到端的通信。“运输层提供应用进程间的逻辑通信”。“逻辑通信”的意思是:运输层之间的通信好像是沿水平方向传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接。运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就是好像在两个运输层实体之间有一条端到

2017-06-14 22:33:24 11658

原创 传输层概述以及传输层端口

一、运输层协议概述两个主机进行通信实际上就是两个主机中的应用进程互相通信,应用进程之间的通信又称为端到端的通信。“运输层提供应用进程间的逻辑通信”。“逻辑通信”的意思是:运输层之间的通信好像是沿水平方向传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接。运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就是好像在两个运输层实体之间有一条端到

2017-06-14 22:29:02 1259

原创 NAT技术与代理服务器

一、NAT技术 1.在了解NAT技术之前,我们首先来了解一下什么是专用互联网? 专用网互联网简称专用网,是由专用IP地址构成的互联网或本地网络;2.什么是专用IP地址? 由于IP类型IPv4提供的IP地址已经不够现如今网络主机的需求,为了缓解这用问题,我们在一个机构内部进行通信时,采用专用地址,但专用地址只能作位一个机构内部通信的IP地址,不能用于和互联网上的主机通信,所以,在不同的组织机构,

2017-06-13 22:34:33 360

原创 ARP协议

1.什么是ARP协议ARP(Address Resolution Protocol,地址解析协议)是获取物理地址的一个TCP/IP协议。某节点的IP地址的ARP请求被广播到网络上后,这个节点会收到确认其物理地址(MAC地址)的应答,这样的数据包才能被传送出去。RARP(逆向ARP)经常在无盘工作站上使用,以获得它的逻辑IP地址。2.为什么要有ARP协议?我们在实际应用中经常遇到这样的问题,已知一个主

2017-06-12 16:00:47 327

原创 CRC循环冗余检验算法

1.为什么要有CRC循环冗余检验算法 数据在网络的传输过程中,都是以二进制数据传输,即不是0,就是1;数据传输过程中,因为各种可能的原因导致数据0变为1,1变为0。为了保证传输数据的可靠性,在计算机网络传输时,必须采用各种差错检测措施; CRC是我们运用在数据链路层的差错检验算法;2.CRC循环冗余检验算法的原理举例说明如何得到帧检验序列FCS假设待传输的数据M=101001(k=6),CRC

2017-06-12 14:38:18 2194

原创 守护进程Daemon---fork两次

1.什么是守护进程? 守护进程也叫精灵进程,是在后台运行的一种特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件; 在 linux系统启动时会有很多系统服务进程,这些系统服务进程没有控制终端,不能直接和用户交互,除守护进程外其他进程都是在用户登录或运行程序时创建,在系统注销时终止,但系统服务程序不受用户登录注销的影响(原因:它跟终端没有关系),我们把这种进程叫做守护进程。

2017-06-08 15:30:24 589

原创 linux下定时任务的方法crontab

crond是什么? 使用crond(cron监控程序)来定期运行一些任务比如备份日志、数据库、 把日志发送到自己邮箱等等操作都可以又定期运行程序来完成。 crond是个脚本每次Linux启动的时候都自动起到该脚本该脚本是 /etc/rc.d/init.d下面的每次系统启动的时候就自动会启动该目录下的脚本。 cron有两个配置文件一个/etc/crontab是一个全局配置文件一组cr

2017-06-07 18:46:56 262

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

一、gdb调试多进程多线程代码2.默认设置下,在调试多进程程序时GDB只会调试主进程。但是GDB(>V7.0)支持多进程的分别以及同时调试,换句话说,GDB可以同时调试多个程序。只需要设置follow-fork-mode(默认值:parent)和detach-on-fork(默认值:on)即可。 follow-fork-mode 和detach-on-fork 说明<1>,设置方法:s

2017-06-07 10:22:33 607

原创 B树的创建

1.B树的概念一棵M阶的(M>2) 的平衡二叉树,是一棵平衡的M路平衡搜索树,可以是空树或者满足一下性质:根节点至少有两个孩子; 原因:因为根节点至少有一个关键字,有两个指针域;每个非根节点至少有M/2-1(上取整)个关键字,至多有M-1个关键字,并且以升序排列;每个非根节点至少有M/2(上取整)个孩子,至多有M个孩子;key[i]和key[i+1]之间的孩子节点的值介于key[i]、ke

2017-06-01 20:27:46 9257 1

原创 约瑟夫环的普通解法及优化

约瑟夫环问题的普通解法很简单,就是不断遍历循环链表,删除节点,假如有n个人,等到第m个人报数时杀掉这个人,即删除这个节点,直到只剩下一个人。struct Node{ Node(int data) :_data(data) ,_pNext(NULL) {} int _data; Node* _pNext;};1,普通解法,时间复杂度为O

2017-05-25 22:56:27 641

原创 汉罗塔问题(修改版)---递归和栈实现

汉罗塔问题是一个非常经典的算法,我们首先来研究一下修改的汉罗塔(简化步骤),在后面我们将来讲述经典的汉罗塔问题。题目: 修改后的汉罗塔的规则:现在限制不能从最左侧的塔直接移动到最右侧,必需要经过中间;同时从最右侧移动到最左测试,同样必需经过中间;要求移动N层塔时,打印最优移动1、用递归函数实现(从最左移动到最右)分析: - 当只有一层塔时,我们先需要将其从左移到中间,再从中间移动到右边,共分为

2017-05-25 15:03:41 1153

原创 二叉搜索树---红黑树节点插入

1.红黑树的概念:红黑树是一棵二叉搜索树,它在每个节点上增加一个存储位来表示节点的颜色,可以是red或black,通过对任何一条从根节点到叶子节点上的间单路径来约束,红黑树保证最长路径不超过最短路径的两倍,因而近视平衡。2.红黑树的性质性质1,每个节点不是黑色就是红色性质2,根节点是黑色的;性质3,如果一个根节点是红色的,则它的两个叶子节点是红色的,即没有两个连续节点是红色节点性质4,对于每

2017-05-24 22:38:38 280

原创 二叉搜索树---AVL树删除节点

前面我们写了AVL树的创建AVL树插入节点,即节点的插入,下面我们介绍AVL树节点的删除,与前面调整的 方法相同,在树不平衡时,对树进行调整,具体步骤如下:1. - 判断树是否为NULL,若为NULL,直接返回false; - 判断树是否只有一个节点,且该节点为要删除的节点,直接删除,_pRoot置NULL; - 否则的话找到要删除节点的位值,删除该节点(分三种情况),并用其孩子节点来代

2017-05-23 07:29:49 1306

原创 队列的常见面试题总结

1.实现猫狗队列#include<string>#include<queue>//宠物类class Pet{public: Pet(string type) :_type(type) {} string GetPetType() { return _type; }private: string _type;};

2017-05-22 15:30:31 773

原创 二叉树搜索树---AVL树插入节点

1.AVL树的概念: AVL树或则是空树,或是具有下列性质的二叉搜索树 它的左右子树都是AVL树;左子树和右子树的高度之差简称(平衡因子)的绝对值不超过1;2.AVL树的实现原理 与二叉搜索树的节点插入方法相同,具体步骤如下: 当树不平衡时,我们需要做出旋转调整,有四种调整方法,分别为右单旋、左单旋、先左单旋再右单旋、先右单旋在左单旋左单旋 右单旋 先右旋再左旋 先左旋再右

2017-05-22 14:59:58 555

原创 栈的面试题总结

1.不用辅助空间实现栈的逆序(利用函数的递归) 例如栈中元素1 2 3 4,逆序后栈中元素为4 3 2 1int GetLastNumOfStack(stack<int>& s)// 得到栈顶的元素{ int result = s.top();//取栈顶元素 s.pop();//出栈 if(s.empty()==true) return result;//

2017-05-16 07:31:35 329

原创 Huffman树的创建

运用了小堆堆的基本操作#include<stdio.h>#include<iostream>using namespace std;#include"heap.cpp"//引用堆的创建文件template<class T>struct Node{ Node(T weight,T data = T()) :_pLeft(NULL) ,_pRight(NU

2017-05-12 12:48:36 710

原创 线索化二叉树的创建及遍历

#include<stdio.h>#include<iostream>using namespace std;enum thread{ LINK, THREAD,};template<class T>struct BinaryTreeThdNode{ BinaryTreeThdNode() :_pLeft(NULL) ,_pRig

2017-05-12 12:43:03 297

原创 堆的基本操作

堆的创建及插入删除堆顶元素等基本操作用模板参数来调整大小堆#include<stdio.h>#include<vector>#include<assert.h>#include<iostream>using namespace std;//下面是实现的小堆,同时我们也要实现大堆(只是将交换比较的小于号都改成大于号),为了实现代码的复用率,我们多添加一个模板参数---比较器(容器适配器)

2017-05-12 12:38:30 256

空空如也

空空如也

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

TA关注的人

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