- 博客(31)
- 资源 (14)
- 收藏
- 关注
转载 state模式
作用:允许一个对象在其内部状态改变时改变它的行为.UML结构图:解析:State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的问题,大部分人是采用switch-case语句进行处理的,这样会造成一个问题:分支过多,而且如果加入一个新的状态就需要对原来的代码进行编译.State模式采用了对这些不同的状态进行封装的方式处理这类问题,当状态改变的时候进行处理然后再
2008-04-28 08:46:00 651
原创 SIP协议详解
一、SIP协议的背景和功能SIP( 会话初始协议)的开发目的是用来帮助提供跨越因特网的高级电话业务。因特网电话(IP电话)正在向一种正式的商业电话模式演进,SIP就是用来确保这种演进实现而需要的NGN(下一代网络)系列协议中重要的一员。SIP是IETF标准进程的一部分,它是在诸如SMTP(简单邮件传送协议)和HTTP(超文本传送协议)基础之上建立起来的。它用来建立,改变和终止基于IP网络的用户间的
2008-04-27 08:40:00 826
原创 双链表实现
/**//************************************************************* * FileName: doubleLink.cpp * Description: implemention for doublelink * Author: Cui Xiaofeng * Date: 2008/04/23*****************
2008-04-26 09:31:00 531
转载 深入分析 Linux 内核链表
本文详细分析了 2.6.x 内核中链表结构的实现,并通过实例对每个链表操作接口进行了详尽的讲解。一、 链表数据结构简介链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和
2008-04-26 09:26:00 519
转载 服务器端程序开发中池的概念和使用
Pool(池)的概念被广泛的应用在服务器端软件的开发上。使用池结构可以明显的提高你的应用程序的速度,改善效率和降低系统资源的开销。所以在现在的应用服务器端的开发中池的设计和实现是开发工作中的重要一环。池(Pool)的概念 池的描述和定义: Pool(池)的概念被广泛的应用在服务器端软件的开发上。使用池结构可以明显的提高你的应用程序的速度,改善效率和降低系统资源的开销。所以在现在的应
2008-04-26 09:24:00 1526
转载 CString 操作指南
CString 操作指南原著:Joseph M. Newcomer翻译:littleloach原文出处:codeproject:CString Management通过阅读本文你可以学习如何有效地使用 CString。 CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。不管怎样,使用CString有很多特殊的技巧,特别是
2008-04-24 19:35:00 537
转载 ACE的构建(VC++6.0环境)
ACE的构建(VC++6.0环境)Windows下ACE的构建1. 将ACE-5.5.zip解压到所需的安装目录,此处以E:/为例,解压后形成ACE_wrappers文件夹,因此ACE将会存在于ACE_wrappers/ace目录中。ACE_ROOT=E:/ACE_wrappers。2. 在系统中新建ACE_ROOT环境变量,值设为 E:/ACE_wrappers。具体设置为:我的电脑->属性->
2008-04-24 08:31:00 818
转载 .vimrc配置文件
在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号、语法高亮度显示、智能缩进等功能的。为了更好的在vim下进行工作,需要手动设置一个配置文件:.vimrc。在启动vim时,当前用户根目录下的.vimrc文件会被自动读取,该文件可以包含一些设置甚至脚本,所以,一般情况下把.vimrc文件创建在当前用户的根目录下比较方便,即创建的命令为:$vi ~/.vimrc
2008-04-22 20:31:00 943
转载 dup2和dup
相信大部分在Unix/Linux下编程的程序员手头上都有《Unix环境高级编程》(APUE)这本超级经典巨著。作者在该书中讲解dup/dup2之前曾经讲过“文件共享”,这对理解dup/dup2还是很有帮助的。这里做简单摘录以备在后面的分析中使用:Stevens said:(1) 每个进程在进程表中都有一个记录项,每个记录项中有一张打开文件描述符表,可将视为一个矢量,每个描述符占用一项。与每
2008-04-21 22:45:00 962
转载 setuid和setgid
5、setuid和setgid 位;本部份内容做为了解,看看就行了;5.1 setuid和setgid的解说 ;setuid 和setgid位是让普通用户可以以root用户的角色运行只有root帐号才能运行的程序或命令。比如我们用普通用户运行passwd命令来更改自己的口令,实际上最终更改的是/etc/passwd文件。我们知道/etc/passwd文件是用户管理的配置文件,只有roo
2008-04-20 08:31:00 2116 1
转载 动态库搜寻路径
众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库,并且该 动 态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序就可以使用该动态库中的函数,以及 该动态库的其它资源了。在Linux 中,动态库的搜索路径除了默认的搜索路径外,还可以通过以下三种方法来指
2008-04-20 08:25:00 1401
转载 硬链接和软链接
首先要弄清楚,在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问。 链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(S
2008-04-20 08:24:00 718
转载 FlyWeight模式
Flyweight模式1.1 问题 在面向对象系统的设计何实现中,创建对象是最为常见的操作。这里面就有一个问题:如果一个应用程序使用了太多的对象,就会造成很大的存储开销。特别是对于大量轻量级(细粒度)的对象,比如在文档编辑器的设计过程中,我们如果为没有字母创建一个对象的话,系统可能会因为大量的对象而造成存储开销的浪费。例如一个字母“a”在文档中出现了100000次,而实际
2008-04-19 08:26:00 675
转载 设计模式原则
这篇文章,不需要你一次就看懂,如果你真的能一次都看懂,我想设计模式对于你来说已经没什么难度了..因为设计模式就是要体现这些原则的,你可以把设计原则看做是一门语言,设计模式是由这些语言编码的程序..你既然已经明白,精通了语言,剩下的编码自然是很简单的事情,编码的越多则经验越多,经验越多则对原则的理解就越深...这是一个学习领悟的过程.. 我希望这篇文章能帮助新人感受到设计模
2008-04-19 08:20:00 665
转载 C语言中的指针和内存泄漏
在使用 C 语言时,您是否对花时间调试指针和内存泄漏问题感到厌倦?如果是这样,那么本文就适合您。您将了解可能导致内存破坏的指针操作类型,您还将研究一些场景,了解要在使用动态内存分配时考虑什么问题。引言 对于任何使用 C 语言的人,如果问他们 C 语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏。这些的确是消耗了开发人员大多数调试时间的事项。指针和内存泄漏对某些开发人员来说
2008-04-13 09:33:00 683
原创 程序设计实践(2)----算法
程序设计实践(2)----算法1 每个程序都要依靠算法与数据结构,但很少有程序依赖于必须发明一批全新的东西。即使是很复杂的程序,比如在编译器或者网络浏览器里,主要的数据结构也是数组、表、树和散列表等等。如果在一个程序里要求某些更精巧的东西,它多半也是基于这些简单东西构造起来的。因此,对大部分程序员而言,所需要的是知道有哪些合适的、可用的算法和数据结构,知道如何在各种可以互相替代的东西之中做出选
2008-04-09 21:53:00 942
原创 高质量c++编程指南(笔记4-11章)
第四章 c++入门: 1 main()函数ms c++ 应用程序的启动函数是mainCRTStartup或WinMainCRTStartup().同时在该函数的末尾调用main,或WinMain,然后以他们的返回值调用exit().main应返回int类型,返回0表示正常结束,非零表示错误或非正常退出.exit()用main的返回值作为返回操作系统的代码以指示程序执行的结构.2 一
2008-04-08 22:52:00 880
转载 Windows 语音编程初步
Windows 语音编程初步一、SAPI简介软件中的语音技术包括两方面的内容,一个是语音识别(speech recognition) 和语音合成(speech synthesis)。这两个技术都需要语音引擎的支持。微软推出的应用编程接口API,虽然现在不是业界标准,但是应用比较广泛。SAPI全称 The Microsoft Speech API.相关的SR和SS引擎位于Speech S
2008-04-08 21:09:00 1513 5
原创 Josephus问题求解
/**//************************************************************************Josephus问题求解: 设有n个人围坐一个圆桌周围,,现从第S人开始报数,数到第m的人出列, 然后从出列的下一个重新开始报数,数列的第m个人又出列……如此重复,直 到所有的人全部出列为止。对任意给定的n、s、m,求按出列
2008-04-08 19:53:00 2901
转载 学习经验
授人以鱼,不如授人以渔。现在很多新技术出来,那么怎么来学好他们呢?下面是个人的体会。 1、收集安装程序(有个术语叫安装介质),没有了安装程序,从头下载所花的时间不是一般的大,而且立即开始工作的话就没法做了。 2、收集文章,电子书和网页(可以用软件,例如 Code Manager.NET)。 3、收集源代码,例如项目示例代码,开源项目类库和源码等,以后实在不行抄也能把项目作出来。 4、多做练习,就算
2008-04-07 11:28:00 609
转载 详细解说 STL 排序(Sort)
详细解说 STL 排序(Sort) 作者Winter 详细解说 STL 排序(Sort) 0 前言: STL,为什么你必须掌握 1 STL提供的Sort 算法 1.1 所有sort算法介绍 1.2 sort 中的比较函数 1.
2008-04-07 10:34:00 624
原创 交换单链表的任意两个节点
#include iostream>using namespace std;/**//* link node struct */struct Node...{public: Node():val(0), next(NULL) ...{ } Node(int _val, Node* _next):val(_val), next(_next) ...{ }
2008-04-06 20:00:00 4936
转载 c时间函数
1,时间的获取:通过time()函数来获得日历时间(Calendar Time),其原型为:time_t time(time_t * timer); #include "stdafx.h"#include "time.h"#include "stdio.h"#include "stdlib.h" int main(void){struct tm t; //定义tm时间结构,用
2008-04-04 10:08:00 907
原创 程序设计实践7-----性能
程序设计实践7-----性能计时和轮廓文件1 在linux中使用time,测试程序的运行时间.或使用clock函数。C和C++ 提供了一个标准函数, c l o c k,它报告程序到某个时刻总共消耗的C P U时间。可以在一个函数的执行前和执行后调用c l o c k,测量C P U的使用情况.2 使用轮廓程序。除了可靠的计时方法外,在性能分析中最重要的工具就是一种能产生轮廓文件的系统
2008-04-03 20:19:00 898
转载 编写易于理解代码的六种方式
对于一名开发人员,时间是最宝贵的资源。本文所要介绍的这六种编写可维护代码的方法可以保证让您节省时间和少受挫折:在编写注释上多花一分钟,会让您少受一小时研读代码的痛苦折磨。我学习编写、改善和维护代码的过程是很艰苦的。在过去的 12 年里,我一直在编写计算机游戏并通过曾红极一时的共享软件技术进行网络销售,并以此为生。这就是说,我常常要从空白的屏幕开始从头编码,当代码达到数万行之后才能拿去销售。
2008-04-03 19:09:00 791
原创 程序设计实践笔记---风格
程序设计实践1-----风格名字:1 定义常数的时候,要用有意义的名字,他要能说明这些值在程序中所起的作用. 不要这样: #define TWENTY 20 而是: #define OUTPUT_BUFSIZE 202 全局变量使用具有说明性的名字,局部变量用短名字。根据定义,全局变量可以出现在整个程序中的任何地方,因此它们的名字应该足够长,具有足够的说明性,以便使读者能够
2008-04-03 09:49:00 851
原创 字符串移动
/**//********************************************************************** 字符串移动函数 给定一个字符串,要求在给定位置进行左移。例如:给定”abcdefg”,给定 i = 3进行左移,得到的结果应该为”defgabc” ******************
2008-04-02 20:48:00 672
原创 翻转字符串
char* ReverseString1(char *str)...{ assert(str != NULL); for (int i = 0, j = strlen(str) - 1; i j; i++, j--) ...{ str[i] = str[i] - str[j]; str[j] = str[i] + str[j]; s
2008-04-02 19:29:00 490
原创 swap实现(优化空间和时间),及其带来的问题
/** *//************************************************************ swap 的三种实现, 后两种实现了空间优化, 但带来了一个问题, 若调用swap(a, a) a的结果将是0, 可在程序的开头判断两者是不 是同一个地址,如swap2所示.***************************
2008-04-02 19:12:00 748
转载 netfilter 和 Linux 防火墙介绍
netfilter 和 Linux 防火墙介绍Linux 的防火墙技术经历了若干代的沿革,一步步的发展而来。最开始的 ipfwadm 是 Alan Cox 在 Linux kernel 发展的初期,从 FreeBSD 的内核代码中移植过来的。后来经历了 ipchains,再经由 Paul Russell 在 Linux kernel 2.3 系列的开发过程中发展了 netfilter 这个架构
2008-04-01 22:31:00 849
原创 全排列算法
/**//* 全排列算法 "后补法" */void Permutation2(char* a, int m, int n) ...{ int i; char t; if (m n-1) ...{ Permutation2(a, m + 1, n); for (i =
2008-04-01 17:28:00 707
大内高手(详细的内存知识)
2008-09-10
The.Linux.Networking.Architecture_Design.and.Implementation
2007-08-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人