自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++编程思想笔记--隐藏实现

友元:如果程序员想允许不属于当前结构的

2014-05-16 16:10:37 707

原创 UNIX网络编程笔记

TCP IP是内核协议栈的一部分sockaddr_in:网际套接口地址结构struct sockaddr:通用套接口地址结构

2014-02-09 08:15:30 734

转载 Nagle算法

Nagle算法目 录1简介2算法1简介Nagle算法是以他的发明人John Nagle的名字命名的,它用于自动连接许多的小缓冲器消息;这一过程(称为nagling)通过减少必须发送包的个数来增加网络软件系统的效率。Nagle算法于1984年定义为福特航空和通信公司IP/TCP拥塞控制方法,这使福特经营的最早

2013-10-11 14:18:42 537

转载 程序顺序点

经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m = 1; n = m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4,而不是4和5:a = 4; cout C++ 不是规定 要弄清这些,需要理解的一个问题是:如果程序里某处修改了一个变量(通过赋值、增量/减量操作等),什么时候从该变量能够取到新值?

2013-10-09 09:05:21 557

转载 IOCP原理

IOCP原理要想彻底征服IOCP,并应用好IOCP这个模型,首先就让我们穿越到遥远的计算机青铜器时 代(以出现PC为标志),那时候普通的PC安装的还是DOS平台,微软公司主要靠这个操作系统在IT界的原始丛林中打拼,在DOS中编写程序,不得不与很 多的硬件直接打交道,而最常操作的硬件无非是键盘、声显卡、硬盘等等,这些设备都有一个特点就是速度慢,当然是相对于PC平台核心CPU的速度而言,尤其

2013-10-09 09:04:50 592

转载 volatile

推荐一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:  1). 并行设备的硬件寄存器(如:状态寄存器)  2). 一个中断服务子程序中会访问到的非自动变量(Non-automat

2013-10-09 09:03:47 405

转载 Linux man

1 Executable programs or shell commands2 System calls (functions provided by the kernel)3 Library calls (functions within program libraries)4 Special files (usually found in /dev)5 File format

2013-10-09 09:03:05 358

原创 鸟哥linux笔记

ls -lia 查看目录所记载的所有档案关联性数据,第一列是inode号ext2的特色:1.Blocks与inodes咋一开始格式化时就已经固定了2.一个partition能够容纳的文件数与inode有关3.一般来说,每4KBytes的硬盘空间分配一个inode4.一个inode的大小为128bytes5.Block为固定大小,目前支持1024/2048/4096Bytes

2013-08-19 09:54:08 507

原创 linux shell笔记

ls -lia 查看目录所记载的所有档案关联性数据,第一列是inode号ext2的特色:1.Blocks与inodes咋一开始格式化时就已经固定了2.一个partition能够容纳的文件数与inode有关3.一般来说,每4KBytes的硬盘空间分配一个inode4.一个inode的大小为128bytes5.Block为固定大小,目前支持1024/2048/4096Bytes

2013-08-19 09:53:21 368

原创 C++标准程序库笔记---迭代器

迭代器是一种能够遍历某个序列内所有元素的对象,它可以偷过于一般指针一直的接口来完成自己的工作,迭代器可以作为一种数据结构与算法解耦的手段使用,例如,某一算法可以通过迭代器来对顺序容器或二叉树做相同的操作。迭代器种类:迭代器类型能力供应者输入迭代器向前读取istream输出迭代器向前写入ostream,inserter

2013-07-29 15:45:21 491

原创 VC使用API连接mysql方法

1.#include    #include 2.#pragram comment("lib", "libmysql.h");3.VS IDE中工具->选项->项目和解决方案->VC++目录->包含文件 “C:\Program Files\MySQL\MySQL Server 5.5\include”4.VS IDE中工具->选项->项目和解决方案->VC++目录->库文件 “C:

2013-07-28 16:12:50 413

原创 设计模式笔记--工厂方法模式

1.意图定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其他类2.别名虚构造器3.动机框架使用抽象类定义和维护对象之间的关系。这些对象的创建通常也由框架负责4.适用性在下列情况下可以使用Factory Method模式:当一个类不知道它所必须创建的对象的类的时候当一个类希望由它的子类来指定它所创建的对象的时

2013-07-18 14:32:22 360

原创 二叉树前序、中序、后序,递归和非递归算法

前两天在CoolShell上面看到todd的文章《二叉树迭代器算法》,很有收获,顺便试着写出了下面的代码#include #include #include using std::cout;using std::endl;using std::stack;struct Node{ int val; Node* left; Node* right; Node() {lef

2013-07-17 16:05:25 439

原创 设计模式笔记--抽象工厂模式

意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类适用性:在以下情况可以使用Abstract Factory模式1.一个系统要独立于它的产品的创建、组合和表示时2.一个系统要由多个产品系列中的一个来配置时3.当你要强调一系列相关的产品对象的设计以便进行联合使用时4.当你提供一个产品类库,而只想显示他们的接口而不是实现时结构参与者

2013-07-10 11:24:59 715

原创 Linux程序设计--进程和信号

系统进程STAT代码S: 睡眠。通常是在等待某个事件的发生,如一个信号或有输入可用R:运行。严格来说,应是“可运行”,即在运行队列中,处于正在执行或即将运行状态D:不可中断的睡眠(等待)。通常是在等待输入或输出完成T:停止。通常是被Shell作业控制所停止Z:死进程或将是进程N:低优先级任务,niceW:分页(不使用于2.6版本开始的linux内核)s:进程是会话期

2013-07-10 10:01:20 532

原创 C++编程思想笔记——多态和虚函数

函数调用绑定把函数体与函数调用相联系成为绑定。当绑定在程序运行之前(由编。译器和连接器)完成时,成为早绑定。C编译只有一种函数调用,就是遭绑定。绑定在运行发生时,成为晚绑定。当一个语言实现晚绑定时,必须有一种机制在运行时确定对象的类型和合适的调用函数。这就是,编译器还不知道实际的对象类型,但它插入能找到和调用正确函数体的代码。晚绑定机制因语言而异,但可以想象,一些种类的类型信息必须装在对象自身

2013-06-19 11:20:42 639

原创 C++编程思想笔记——继承和组合

非自动继承的函数不是所有的函数都能从基类继承到派生类中。构造函数和析构函数是用来处理对象的创建和析构的,他们只知道对咋他们的特殊层次的对象做什么。所以,在整个层析的所有的构造函数和析构函数都必须被调用,也就是说构造函数和析构函数不能被继承。另外,operator=也不能被继承,应为它完成类似构造函数的活动。这就是说,尽管我们知道如何由等号右边的对象初始化左边的对象的所有成员,但这并不意味着

2013-06-18 08:59:26 546

原创 C++编程思想笔记——动态对象创建

如果正在删除的对象指针是0,将不发生任何事情内存管理的开销1.调用malloc(),从堆里申请一块内存2.从堆里搜索出一块足够满足请求的内存。可以挺过检查显示内存使用情况的某种图或目录来实现搜索。这个过程很快,但可能要试探几次。3.在指向这块内存的指针返回之前,这块内存大小和地址必须记录下来,这样以后调用malloc()时就不会再使用它了,而且当调用free()时,系统就会知道要释

2013-06-18 08:38:24 560

原创 C++编程思想笔记——运算符重载

警告和确信运算符重载仅仅是一个语法修饰,是另一种调用函数的方法而已,除非他会使包含我们的类的代码变得易写,尤其是易读。如果不是这种情况,就不必去重载运算符。所用于仅保安内部数据类型的表达式的运算符是不可能被改变的,永远不能重载下面的运算符使执行的行为不同:1 虽然可以重载几乎所有C中可用的运算符,但使用它们是相当受限制的。特别地,不能结合C中当前没有意义的运算符,不能改变运算符的参

2013-06-17 10:23:54 484

原创 C++编程思想笔记——引用和拷贝构造函数

引用是支持C++运算符重载的语法基础C和C++指针的最重要区别,在于C++是一种类型要求更强的语言。C不允许随便吧一个类型的指针指派给另一个类型,但允许通过void*来实现,例如:bird* b;  rock* r;   void* v;   v=r;   b=v; C++不允许这样做。如果真想这么做,必须显示地使用映射。1.C++中的引用引用(&)像一个自动能被编译器逆向引用的常

2013-06-14 10:03:04 643

原创 C++编程思想笔记——命名控制

static最基本的含义是指“位置不变的某个东西”(像静电),这里则指内存中的物理位置或文件中的可见性1.来自C语言中的静态成员在C和C++中,static都有两种基本的含义,并且这两种含义经常是互相有冲突的:1.在固定的地址上分配,也就是说对象是在一个特殊的静态数据区上创建的,而不是每次函数调用时在堆栈上产生的,这也是静态存储的概念2.对一个特定的编译单位来说是本地的,这里sta

2013-06-09 09:36:31 578

原创 C++编程思想笔记——内联函数

C++中预处理器不能存取private数据有两种编译器不能处理内联的情况:1.假如函数太复杂,编译器不能执行内联。这取决于特定编译器,但大多数编译器这时都会放弃内联方式,因为这时内联可能不为我们提供任何效率。一般地,任何种类的循环都被认为太复杂而不扩展为内联函数。循环在 函数里可能比调用花费更多的时间。加入函数仅有一条简单语句,编译器可能没有任何内联的麻烦。但加入有许多语句,调用函数的

2013-06-03 15:12:58 499

原创 C++编程思想笔记——const

const的最初动机是取代预处理器#define进行值替代,被用于指针、函数变量、返回类型、类对象及其成员函数。可以在编译器需要知道这个值的地方只用常量,同时执行常量折叠。与使用#define 一样,使用const必须把const放进头文件里。C++中的const默认为内部连接,也就是说,const仅在const被定义过的文件里才是可见的,在链接时不能被其他编译单元看到。当定义一个常量时,必须

2013-05-15 10:25:11 501

转载 Java中abstract class 和 interface 的解释和他们的异同点(转)

(一)概述    在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进 行抽象类定义时对于abstract class和interface的

2013-04-18 09:10:20 550

空空如也

空空如也

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

TA关注的人

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