自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 程序人生

   搁置快两年的博客从今天开始要重新拾起,这两年过得甚是辛苦,经历了考研失败、科三考了三次都没过、六级直到毕业也没有考过,正如歌词中说的一样,得不到的永远在骚动,第一次考研失败后,毅然决然选择二战,在现在看来只不过是没得到的不甘心罢了,又经历了第二次考,这一次来说成绩依然一般吧,冒着风险的成为了一名准研究生,我也不知道这条道会不会是一条死胡同,但又一想既然已经这样了,那就再努力一次,再试一次。研...

2018-07-03 15:56:28 264

原创 boost库------>unordered_set(散列容器)

散列容器(hash container)是一种非常重要的容器类型,它通常比二叉树的存储方式可以提供更高的访问效率。因为散列容器是无序的,因此不需要容器提供operator    unordered库提供两个散列集合类unordered_set和unordered_multiset,它们的用法接口和用法与C++标准里的关联容器set/multiset相同,只是内部使用散列表代替二叉树实现,因此查

2016-06-13 16:00:22 4295

原创 boost库----->dynamic_bitset的学习

c++标准为处理二进制数值提供了两个工具:vector和bitset。     vector是对元素类型为bool的vector特化,它的内部并不真正存储bool值,而是以bit来压缩保存、使用代理技术来操作bit,造成的后果就是它很像容器,大多数情况下和标准容器一致,但它不是容器,不满足容器的定义。      bitset与vector类似,同样存储二进制位,但它的大小固定,而且比vec

2016-06-09 11:29:14 6174

原创 traceroute程序剖析

traceroute允许我们确定IP数据报从本地主机游历到某个远程主机所经过的路径。    我们先来说明tranceroute的工作原理:是IP路由过程中对数据包TTL(Time to Live,存活时间)的处理。当路由器收到一个IP包时,会修改IP包的TTL(及由此造成的头部检测和checksum变化)。每收到一个包,检查这个的TTL是否是0或1.如果是,表明这个包还没有到达目的地,而且剩余

2016-06-07 17:32:36 4375

原创 ping程序剖析

在剖析ping之前我们先补充一点知识。。。    (1)结构体addinfo     头文件:#include    struct addrinfo    {           int  ai_flags;           int  ai_family;      //AF_INET,AF_INET6,UNIX etc           int  ai_

2016-06-07 12:22:17 1314

原创 三组I/O复用函数的比较

前面我们讨论了select、poll和epoll三组I/O复用系统调用,这三组系统调用都能同时监听多个文件描述符。它们将等待由timeout参数指定的超时时间,直到一个或多个文件描述符上有事件发生时返回,返回值是就绪的文件描述符的数量。返回0表示没有事件发生。现在我们从事件集、最大支持文件描述符数、工作模式和具体实现等四个方面进一步比较它们的异同,以明确在实际应用中应该选择使用哪个。    这

2016-06-06 22:10:42 521

原创 I/O复用:epoll函数

epoll函数是Linux特有的I/O复用函数。它在实现和使用上与select、poll有很大的差异。首先,epoll函数使用一组函数来完成任务,而不是单个函数。其次,epoll把用户关心的文件符上的事件放在内核里的一个事件表中,从而无须像select和poll那样每次调用都要重复传入文件描述符集或事件集。但epoll需要使用一个额外的文件描述符,来唯一标识内核中的这个事件表。这个文件描述符使用如

2016-06-06 21:00:08 605

原创 IO复用:poll函数

poll提供的功能与select函数类似,不过在处理流设备时,它能够提供额外的信息 。   #include   int  poll(struct pollfd *fdarray,unsigned long nfds,int  timeout);       返回:若有就绪的描述符则为其数目,若超时则为0,若出错则为-1;  第一个参数是指向一个结构第一个元素的指针。每个数组元素都

2016-06-06 18:40:45 425

原创 IO复用:select函数

IO模型:(1)阻塞式IO模型:         最流行的I/O模型是阻塞式I/O模型,默认情况下,所有的套接字都是阻塞的。如上图所示,进程调用recvfrom,其系统调用直到数据报到达且被复制到应用进程的缓冲区中或发生错误才返回。最常见的错误是系统调用被信号中断,我们说进程在从调用recvfrom开始到它返回的整段时间内是被阻塞的。recvfrom成功返回后,应用进程开始处理

2016-06-06 16:48:55 1551

原创 基本的UDP套接字编程

在使用TCP编写的应用程序和使用UDP编写的应用程序之间存在一些本质的差异,其原因在于这两个传输层之间的差异:UDP是无连接不可靠的数据报协议,非常不同于TCP提供的面向连接的可靠字节流。然而相比TCP,有些场合确实更适合使用UDP,使用UDP编写的一些常见的应用程序有:DNS(域名系统)、NFS(网络文件系统)和SNMP(简单网络管理协议)。 上图给出了典型的UDP客户端/服务器程序的函

2016-06-02 19:55:21 573

原创 TCP的连接与终止

(1)三次握手:

2016-06-02 19:09:52 574

原创 基本的TCP套接字编程

上图基本展示了TCP客户端与服务器编程的基本的流程。1、面向连接编程(TCP)面向连接的网络应用程序开发流程比较固定,需要开发者创建服务器与客户端两个应用程序,通过网络是想进程间的通讯。●     服务器端流程1        创建套接字(socket)2        服务绑定(bind)3        服务侦听(listen)4

2016-06-02 17:43:55 1176

原创 同步机制--->互斥锁

互斥锁指代相互排斥,它是最基本的同步形式。互斥锁用于保护临界区,以保证任何时刻只有一个线程在执行其中的代码,或者任何一个时刻只有一个进程在执行其中的代码。保护一个临界区的代码的通常轮廓大体如下:     lock_the_mutex(...)     临界区     unlock_the_mutex(...)    Posix互斥锁被声明为具有pthread_mutex_t 数

2016-06-02 16:05:16 395

原创 System V 消息队列 (每个客户一个队列)

今天将之前的一个服务器和多个客户端的例子改成给去往服务器的所有客户请求使用一个队列,给每个客户使用一个队列接收去往各个客户的服务器应答。     下面给出这样的设计:    服务器的队列有一个对客户来说众所周知的键,但是各个客户以IPC_PRIVATE键创建各自的队列,这里并未随请求传递本进程id,而是由每个客户把自己的私用队列的标识符传递给服务器,服务器把自己的应答发送到由客户指出的

2016-05-19 18:11:51 496

原创 System V 消息队列(多个客户和一个服务器)

今天主要和大家分享有关System V 消息队列一个服务器带多个客户端。客户端把进程ID用作消息类型。每个客户把自己的进程ID指定为msgrcv的type参数,这样服务器就可以很好的进行区分。。。。首先给出客户端的代码:#include"uitil.h"int main(int argc,char*argv[]){ int msqid; //客户端打开消息队列

2016-05-19 14:42:28 1151

原创 System V 消息队列

首先我们来看操纵System V消息队列的函数。    (1)msgget函数用于创建一个新的消息队列或访问一个已存在的消息队列   #include   int msgget(key_t key,int oflag);  返回值是一个整数标识符。它是基于指定的key值产生的,而key即可以是ftok的返回值,也可以是常值IPC_PRIVATE.   oflag表示读写权限值的

2016-05-18 21:26:40 387

原创 无亲缘关系的客户与服务器

今天给出一个简单的无亲缘关系的客户端与服务器之间的通信,客户端发送服务器端进行接收,服务器端发送客户端进行接收。    服务器端的程序:#include"utili.h"int main(int argc,char**argv){ int write_fd; int read_fd; //mkfifo用于创建有名管道, int res = mkfi

2016-05-17 20:29:18 298

原创 网络编程之FIFO

管道没有名字,因此它们最大的劣势在于只能用于有一个祖先进程的各个进程之间。我们无法在无亲缘关系的两个进程间创建一个管道并将它用作IPC通道(不考虑文件描述符)。      FIFO指先进先出,UNIX中的FIFO类似管道。它是一个单向的(半双工)的数据流。不同于管道的是,每个FIFO有一个路径名与之关联,从而允许无亲缘关系的进程访问同一个FIFO,FIFO也成为有名管道。      FIF

2016-05-17 20:02:54 567

原创 UNIX网络编程之管道

管道    所有式样的UNIX都提供管道。它由pipe函数创建。提供一个单路(单向)数据流。   函数原型:           #include            int pipe(int fd[2]) 该函数返回两个文件描述符:fd[0]和fd[1]。前者打开来读,后者打开来写。   单个进程中的管道:    两个不同进程间的通信:下面给出一个简

2016-05-17 19:34:10 346

原创 哈希表之笔试题

现在有一个用来存放整数的Hash表,Hash表的存储单位称为桶,每个桶能放3个整数,当一个桶中要放的元素超过3个时,则要将新的元素存放在溢出桶中,每个溢出桶也能放3个元素,多个溢出桶使用链表串起来。此Hash表的基桶数目为素数P,Hash表的hash函数对P取模。   题目的大致意思就是上述的,下面给出个人的代码:#includeusing namespace std;#defi

2016-05-04 21:01:52 895

原创 STL之空间配置器

众所周知,STL中的空间配置器分为一级空间配置器和二级配置器。第一级配置器以malloc( ),free(),realloc()等C函数执行实际的内存配置、释放、重配置操作,并实际出类似C++  new-handler的机制。    C++ new handler机制是,你可以要求系统在内存配置需求无法被满足时,调用一个你所指定的函数。换句话说,一旦::operator new 无法完成任务,

2016-04-26 20:56:43 319

原创 c++中的特化问题

C++类模板的三种特化:      (1)特化为绝对类型:即直接为某个特定类型做特化。    下面给出代码实例:templateclass Test{public: Test(T t = 0):data(t) { cout << "Test object!" << endl; }private: T data;};te

2016-04-26 17:47:39 809

原创 模板类的继承问题

首先大家来看这段代码:class A {public: void Show() { cout << "A::Show() !!!" << endl; } void Fun() { cout << "A::Fun() !!! " << endl; }};class B {public: voi

2016-04-22 12:07:42 2709

原创 模板类中重载<<和>>操作符

在模板类中输入流">>"和输出流">"的重载。     《一》将输出流">”重载的实现写在类中。    下面给出示例的代码:templateclass Test;templateostream& operator &t);templateclass Test{ friend ostream& operator &t) { cout <<

2016-04-21 20:06:10 561

原创 MyString类的实现

string类在c++中使得程序员对于字符串的操作更加方便,今天就来编写自己的MyString类。   先来看mystring.h的定义:#ifndef _MYSTRING_H_#define _MYSTRING_H_#includeusing namespace std;class MyString{public: MyString(); MyString(

2016-04-14 21:43:04 4531 1

原创 面试题之替换空格

题目:实现一个函数,把字符串中的每个空格替换成“%20”.例如输入"We are happy",则输出“We%20are%20happy”。    对于这道题来说,大多数人都会从前向后遍历字符串,遇到空格时,将后面的字符串后移,这样一来,时间复杂度瞬间到了o(n^2),如果我们首先遍历字符串判断出字符串内由几个空格,然后从后向前遍历,一次放到位。这样一来,时间复杂度瞬间降为o(n).   

2016-04-13 22:20:42 371

原创 面试题之二维数组中的查找

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数。   例如:    1     2      8      9   2      4      9      12  4       7      10    13  6      8       11    

2016-04-13 20:50:30 335

原创 #每日一题#2016腾讯实习生笔试题

题目:蛇形矩阵            题目的大意是这样:top                 输入2                矩阵为:                 1    2                  4    3                 输出:1 2 4 3 //按行打印                 输入:3

2016-04-08 18:49:25 357

原创 #每日一题# 2016腾讯笔试题之一

最长回文子序列     题目大概的意思是这样:例如:cabbeaf:回文子序列有:c,a,aa,bb,aba,abba,e,f,最长的就是abba,所以输出长度为4       该题目可以转换为该字符串和它反转的字符串的最长公共子序列。     最长公共子序列:其定义是,一个序列s,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则s称为已知序列的最长公共子序列。

2016-04-08 16:18:53 537

原创 面试中的赋值运算符函数

当一个面试官要求应聘者定义一个赋值运算符函数时,他会在检查应聘者写出的代码中关注如下几点:       (1)是否把返回值的类型声明为该类的引用,并在函数结束的时侯返回示例自身的引用(即*this).只有返回一个引用,才可以允许连续赋值。      (2)是否把参数的类型声明为常量引用。如果传入的参数不是引用而是实例,那么从形参到实参会调用一次构造函数。把参数声明为引用时可以避免这样无

2016-04-08 15:27:41 341

原创 SeqList(顺序表的实现)

顺序表也就是我们常说的数组,今天就是把对于数组 的各种操作封装成类,下面就来看具体的实现:    我们先来看test.h的内容:#ifndef _TEST_H_#define _TEST_H#include #include #include using namespace std;templateclass SeqList{public: SeqList(

2016-04-06 17:04:06 2401

原创 c++编程思想---第二章练习题

今天给出c++编程思想第二章的练习题代码,第二章是学习c++的一些基本知识,有几个个人认为比较重要的是:      (1)string类,c语言中是没有类这个概念,在第二章中给大家就讲了string类的使用,使得对字符串的操作变得简单。例如字符串的加操作。      (2)第二大方便就是文件的读写,,在c中对文件的读写是比较的麻烦,而在c++中,打开文件时,只用创建ifstream对象

2016-04-06 16:41:24 443

原创 c++类中的六种默认函数

今天和大家要说的就是c++类中的六大默认函数,这些函数的调用是不由用户给出的,系统自动完成调用,这六种分别是:        构造函数        拷贝函数        赋值运算        非const的取址运算        const的取址运算        析构函数    下面给出简单的代码进行验证: #include using nam

2016-04-04 22:05:32 574

原创 #每日一题#网易2016实习研发工程师笔试题

问题描述:有一个整数数组,请你根据快速排序的思路,找出数组中第k大的数。          给定一个整数数组a,同时给定它的大小n和要找的k(k在1到n之间),请返回第k大的数,保证答案存在。      测试样例:          【1,3,5,2,2】,5,3       返回:2        根据题目的要求:我们利用快速排序的思路,递归时要对于k与i的值进行对比。 

2016-03-31 09:56:33 643

原创 编程之美《寻找数组中的最大最小值》

数组是最简单的一种数据结构。我们经常碰到的一个基本问题,就是寻找整个数组中最大的数,或者最小的数。这时,我们都会扫描一遍数组,把最大(最小)的数找出来。如果我们需要同时找出最大,最小的数呢?     下面给出具体的代码://对于原数组进行了调换void getmax_min(int *a,int n,int *max,int *min){ int i = 0; int

2016-03-30 19:50:26 460

原创 #每日一题#腾讯研发工程师笔试题

我们先来看问题描述:春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体的算法思路和代码实现。要求算法尽可能高效。     给定一个红包的金额数组gifts及它的大小,请返回所求红包的金额。    测试样例:        [1,2,3,2,2] 5    输出 2

2016-03-30 13:44:26 423

原创 #每日一题#腾讯笔试题

在一组数的编码中,若任意两个相邻的代码只有一个二进制数不同,则称这种编码为格雷码(Gary Code),请编写一个函数,使用递归的方法生成N位的格雷码。给定一个整数n,请返回n位的格雷码,顺序为从0开始。   测试样例:     输入:1    返回:“0”,“1”。    首先给出二进制--->格雷码的转换:      此方法从对应的n位二进制字中直接得到n位格雷码字,步骤如

2016-03-29 10:35:09 704

原创 面试题之实现3^100次方和大整数的相乘

今天则主要和大家来说一下如何利用数组来存储大数据,我们先来看第一个小的算法,实现3^100次方: 具体代码如下: #include #include #include #define N 500int main(int argc,char **argv){ int s,j,i,cp,x,n,b; int a[N]; a[N - 1] = 1;

2016-03-28 18:05:50 1121

原创 C++中有关多态和继承的那些事

今天就主要和大家分享下多态和继承的那些事,我们先来看百度百科是如何对于多态和继承下定义的。    多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作

2016-03-27 19:34:57 333

原创 redis基本数据结构之压缩列表

压缩列表(ziplist)时列表键和哈希键的底层实现之一。压缩列表时redis为了节约内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型(sequential)数据结构。一个压缩列表可以包含任意多个节点(entry),每个节点可以保存一个字节数组或者一个整数值。     接下来给大家展示以下压缩列表的具体结构:在表中列出了空的压缩列表和非空的压缩列表的具体是如何存储的。

2016-03-24 19:03:51 548

空空如也

空空如也

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

TA关注的人

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