自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

脚踏实地,用心编写出客户满意的代码,为公司创造出应有的价值。

这是一个让人成长的地方,我们需要不断提升自己,学无止境!

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

原创 如何定义自己的线程函数与第三方系统兼容

在多线程的环境中,我们需要有线程创建函数来创建需要的线程,一般的系统都是有自己的线程创建函数的,但是有的系统没有,或者说两个系统不兼容,那么我们就需要有自己的线程创建函数来兼容第三方,一般在模拟线程创建的时候都是用进程来实现的,下面就是一个例子:static intpthread_create(sp_pthread_t *thread, const void *attr, void

2015-08-07 17:44:51 607

原创 一个修改文件中指定内容的程序

下面是一个修改文件中指定内容的程序,这里面主要用到了以下几个函数:FILE * fopen(const char * path,const char * mode);size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;buffer:用于接收数据的内存地址;size:要读的每个数据项的大小,

2015-05-18 20:15:06 1334

原创 远程差异化同步(RSYNC)讲解及源码剖析

近日研究了远程差异化同步(RSYNC)源码,对里面的主要算法流程与业务流程作了一个比较详细的分析,知道这个概念的应该清楚,RSYNC主要是用来进行远程同步和备份的。设计初衷是为了减少带宽的使用,每次同步和备份的时候,只传递差异化的部分,不需要传递整个文件。这样的好处对于只有少部分修改的文件来说是相当有效的,如果我们需要同步和备份一个20M的文件,而其中只有两个字节修改了,那么我们只需要传递这修改的

2015-05-15 19:39:25 4023

原创 C++类的底层机理

我们首先从一个问题来阐明类的底层机理:假如有一个类A,里面有一个成员函数get(),例如:class A{public:    void get();}A a;那么a.get()表示什么呢?首先给出答案是get(&a),因为在类的底层机制中,成员函数的第一个参数都是一个指向该类数据结构的指针(静态成员函数除外),所以成员函数get()的存在形式为void g

2014-08-10 00:27:36 1393

原创 STL中慎重选择删除元素的方法

一、要删除容器中有特定值的所有对象1、如果容器是vector、string或deque,则使用erase-remove习惯用法。例如:vector c;c.erase(remove(c.begin(),c.end(),1963),c.end());//删除值是1963的元素下面讲一下算法remove:templateForwardIterat

2014-08-07 00:07:48 1088

转载 valgrind的使用

一  valgrind是什么?Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合。Valgrind由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具;而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务。Valgrind的体系结构

2015-07-31 10:13:24 601

原创 http get请求获取服务器返回的应答数据

这个参数所设置的回调函数原型是这样的:size_t function( char *ptr, size_t size, size_t nmemb, void *userdata).这个回调函数被调用的时机是有响应数据到达,这些数据由ptr指向,大小是size*nmemb.到这里为止还是文档上的说法.从socket的角度考虑,响应数据自然不一定会是以0结尾的字符串,而应当被认为是流数据.只要

2015-07-30 19:31:33 2277

转载 grep命令小结

本文转自:http://www.cnblogs.com/end/archive/2012/02/21/2360965.htm1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。2.格式gr

2015-07-14 20:53:38 657

转载 linux find命令小结

本文转载自:http://blog.chinaunix.net/uid-20082146-id-83489.htmlfind命令:功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。 语法:find 起始目录 寻找条件 操作 说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。 

2015-07-13 21:17:55 455

转载 gdb基本命令总结

本文转自:http://blog.chinaunix.net/uid-9525959-id-2001805.html本文介绍使用gdb调试程序的常用命令。 主要内容: [简介] [举例] [其他] [简介] ============= GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。如果你是在 UNIX平台

2015-07-11 10:27:55 459

原创 常见网络编程面试题整理

1、TCP和UDP的区别:

2015-05-18 17:48:33 3661

原创 Linux下read和write的正确用法

我写这篇文章的目的是为了对read和write两个函数的用法做一个总结,同时提醒自己不要忘记:一、原型介绍#include ssize_t read(int fd, void *buf, size_t count);参数:   fd: 将要读取数据的文件描述词。buf:  所读取到的数据的内存缓冲。 count: 需要读取的数据量。read()会把参

2015-05-15 11:37:28 3321

转载 浮点数据在计算机中的存储方式

C语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit, double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是float还是double在存储方式上都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,

2014-09-28 23:28:34 896

原创 僵尸进程产生的原因及如何避免

如果子进程先于父进程退出, 同时父进程又没有调用wait/waitpid,则该子进程将成为僵尸进程。通过ps命令,我们可以看到该进程的状态为Z(表示僵死),

2014-09-28 23:25:03 1074

原创 枚举(enum)

C++enum工具提供了另一种创建符号常量的方式,

2014-08-25 23:20:07 1052

原创 二维数组与指针

二维数组和指针一二维数组和指针1、二维数组和数组元素的地址若有以下定义:int *p, a[3][4]; 1)二维数组a由若干个一维数组组成在C语言中定义的二维数组实际上是一个一维数组,这个一维数组的每一个成员又是一个一维数组。如以上定义的a数组,则可视a数组由a[0]、a[1]、a[2]等三个元素组成,而a[0]、a[1]、a[2]等每个元

2014-08-25 23:18:20 786

原创 逗号操作符

不能用逗号操作符将两个声明组合起来,这是因为声明

2014-08-25 23:16:46 773

原创 最优二叉树(霍夫曼树)分析

1.树的路径长度     树的路径长度是从树根到树中每一结点的路径长度之和。在结点数目相同的二叉树中,完全二叉树的路径长度最短。2.树的带权路径长度(Weighted Path Length of Tree,简记为WPL)  结点的权:在一些应用中,赋予树中结点的一个有某种意义的实数。  结点的带权路径长度:结点到树根之间的路径长度与该结点上权的乘积。  树的带权路

2014-08-21 08:54:30 1823

原创 快速排序的递归和非递归分析

1、算法思想     快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。(1) 分治法的基本思想     分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。(2)快速排序的

2014-08-21 08:52:03 875

原创 UDP的机制

由于UDP是无连接服务,所以传输的每个数据报都和其他所有传输的数据报无关。即使不同的数据报源于相同的源进程,并且都是传输到相同的目的进程,它们之间也没有任何关系。用户数据报没有编号,也没有连接建立或连接终止序列。因此,每个数据报可能都是通过不同的路由传输的,并且接收数据报的顺序可能与发送顺序不同。UDP的一个明显的缺点就是使用UDP的高层进程不能只向UDP软件发送一个数据流,然后通过这个软件把

2014-08-21 08:51:52 1825

原创 堆排序详解

实质上是满足如下性质的完全二叉树:树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。

2014-08-21 08:51:24 679

原创 TCP机制

1、面向连接的协议面向连接的协议在两个对等端内部网之间直接建立逻辑连接。它

2014-08-21 08:50:51 1493

原创 冒泡排序时间复杂性的分析

关于冒泡排序时间复杂性,大家都知道最坏情况下为O(n^2)为什么最好情况下为O(n),很多人有疑问,下面我们就来分析一下:首先大家看看下面两种冒泡排序的方法:方法一://冒泡排序  template class T>  void Bubble(T a[],int n)  {      //把数组a[0:n-1]中最大的元素冒泡移到右边      for(int i=

2014-08-17 08:58:50 1636

原创 三种插入排序的分析

插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。一、直接插入排序

2014-08-17 08:57:49 974

原创 选择排序的时间复杂度分析

方法一:templatevoid SelectSort(T a[],int n){}

2014-08-16 08:40:49 1596

原创 UDP和TCP的比较

当客户端需要请求数据库服务器上的某些数据时,它至少需要三个数据报来建立TCP连接,三个数据报礼发送和确认少量数据,三个用来关闭连接。然而,如果使用UDP的话,仅仅需要发出两个数据报就能达到相同的效果。UDP不需要客户端建立和关闭与服务器的连接。客户端只是将数据放到数据报中并发给服务器。服务器构造出应答,并将应答数据放到去往客户端的数据报中,然后再发送给客户端。尽管对于简单实事务来说,这种数据传输方

2014-08-16 08:40:06 1110

原创 中继器、集线器、交换机、网桥和路由器分别对应于哪一层?

我们首先要详细分析各个设备的作用:一、中继器       中继器(Repeater)工作于OSI的第一层(物理层),中继器是最简单的网络互联设备,连接同一个网络的两个或多个网段,主要完成物理层的功能,负责在两个网络节点的物理层上按位传递信息,完成信号的复制、调整和放大功能,以此从而增加信号传输的距离,延长网络的长度和覆盖区域,支持远距离的通信。一般来说,中继器两端的网络部分是网段,而不

2014-08-16 08:39:06 7957

原创 网络结构----ISO/OSI七层网络模型和TCP/IP四层网络模型

对等实体在一次交互作用中传送的信息单位称为协议数据单元,它包括控制信息和用户数据两部分。上下层实体之间的接口称为服务访问点。ISO/OSI参考模型分为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。物理层:表示一些物理设备,还包括网络拓扑结构、信令与编码方法等,涉及到在信道上传输的原始比特流,在信号传输中,物理层处理数据传输速率,监控数据出错频率并处理电压电平。数据链路层

2014-08-16 08:37:51 1361

原创 交换机和路由器各自的实现原理及区别

交换机属于OSI第二层即数据链路层设备。它根据MAC地址寻址,通过站表选择路由,站表的建立和维护由交换机自动进行。交换是指转发和过滤帧。路由器属于OSI第三层即网络层设备,它根据IP地址进行寻址,通过路由表路由表路由协议产生。路由是指网络线路当中非直连的链路。交换机最大的好处是快速,路由器最大的好处是控制能力强。区别:①交换是不需要IP的,而路由需要,因为IP就是第三层的协议,第二

2014-08-16 08:36:35 1158

原创 端到端的通信

1、端到端的连接管理一般可以通过三次握手协议来完成两端点的建立。计算机A传送一个请求一次连接的TPDU,序列号为x;计算机B回送一个确认该请求及其序列号的PDU,序列号为y;计算机A通过在第一个数据PDU中包含的序列号x和y,对计算机B的确认帧发回一个确认。如果计算机A的请求或计算机B的确认丢失了,计算机A将在计时结束后重新发送请求。如果计算机A确认丢失了,计算机B将在计时结束后终止连接。

2014-08-13 10:07:28 2638

原创 端口与套接字

端口和套接字,用于确定指定主机上的哪个本地进程使用了哪个协议和哪台远程主机上的哪个进程进行了通信。端口和套接字的使用可以基于以下几点:①为每个应用过程分配一个过程标识符(Process ID),每次启动一个进程时,这个ID都可能是不同的。②进程ID因操作系统平台不同而不同,因而它们是不统一的。③一个服务器过程能够同时与多个客户连接,因而简单的连接标识符不可能是唯一的。端口和套接字概

2014-08-13 10:04:36 1904

原创 引用和指针的区别

引用(references)使用“.”操作符,指针(pointers)使用“*”和“->”操作符,这是两者最基本也是最熟悉的区别了,应该不用详说。首先,没有所谓的null reference。一个reference必须总代表某个对象,因此C++要求references必须有初值:string& rs;//错误!references必须被初始化string s("xyzzy");st

2014-08-11 00:09:52 878

原创 C++中的四种转型操作符

在详细介绍C++中的四种转型操作符之前,我们先来说说旧式转型的缺点:①它几乎允许将任何类型转换为任何其他类型,这是十分拙劣的。如果每次转型都能够更精确地指明意图,则更好。②旧式转型难以辨识。旧式转型的语法结构是由一对小括号加上一个对象名称组成,而小括号和对象名称在C++的任何地方都有可能被使用。为解决C旧式转型的缺点,C++导入了4个新的转型操作符:static_cast、const_

2014-08-11 00:09:24 934

原创 C++中如何获取类成员的指针

我们都知道C++ class中有三种成员函数,static(静态的),nonstatic(非静态的),virtual(虚拟的)各种成员函数的指针各有区别,以下是一个完整的例子:(注意红颜色的区别)class A {public:   static void staticmember(){cout   void nonstatic(){cout   virtual

2014-08-08 00:14:43 1550

原创 进程、程序和线程的区别

1、区别①程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。②程序可以作为一种软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的。③进程更能真实地描述并发,而程序不能;④进程是由进程控制块、程序段、数据段三部分组成;⑤进程具有创建其他进程的功能,而程序没有。⑥同一程序同

2014-08-08 00:14:29 892

原创 进程控制在进程管理中的作用

进程控制是进程管理中最基本的功能。它用于创建一个新进程,终止一个已完成的进程,或者去终止一个因出现某事件而使其无法运行下去的进程,还可负责进程运行中的状态转换。一、创建进程1.引起创建进程的事件在多道程序环境中,只有(作为)进程(时)才能在系统中运行。因此,为使程序能运行,就必须为它创建进程。导致一个进程去创建另一个进程的典型事件,可以有以下四类:1) 用户登录在分时系

2014-08-08 00:12:51 1726

原创 用C++设计一个不能被继承的类

在 C++ 中,子类的构造函数会自动调用父类的构造函数。同样,子类的析构函数也会自动调用父类的析构函数。要想一个类不能被继承,我们只要把它的构造函数和析构函数都定义为私有函数。那么当一个类试图从它那继承的时候,必然会由于试图调用构造函数、析构函数而导致编译错误。  template class A{     friend T;     private:     A(

2014-08-08 00:11:36 743

原创 详细分析死锁产生的条件与原因

一、定义死锁:集合中的每一个进程都在等待只能由

2014-08-08 00:11:32 1388

原创 切勿创建包含auto_ptr的容器对象

当你拷贝一个auto_ptr时,它所指向的对象的所有权被移交到拷入的auto_ptr上,而它自身被置为NULL。我的理解是:拷贝一个auto_ptr意味着改变它的值。例如:auto_ptr pint1(new int);//pint1指向一个intauto_ptr pint2(pint1);//pint2指向pint1的int;pint1被置为NULLpint1

2014-08-07 00:06:12 852

原创 职责链模式分析、结构图与基本代码

定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。好处:当客户提交一个请求时,请求时沿链传递直至有一个ConcreteHandler对象负责处理它。这就使得接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构。结果是职责链可简化对象的相互连接,它们仅需保持一个指向其后继

2014-07-31 23:40:37 782

空空如也

空空如也

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

TA关注的人

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