- 博客(95)
- 资源 (18)
- 收藏
- 关注
原创 Observer模式——行为模式
<br /><br />observer.h<br />#ifndef _OBSERVER_H_#define _OBSERVER_H_#include <string>using namespace std;typedef string State;class Subject;class Observer{public: virtual ~Observer(); virtual void Update(Subject* sub) = 0; vir
2011-04-15 20:14:00
2936
6
原创 linux下C语言操作mysql数据库(系统自带版本3.23.54)
我的上一篇blog介绍了在linux环境下如何安装配置系统自带的mysql数据库,并列举了mysql的一些简单的操作。接下来我将介绍一下如何利用mysql提供给我们的API来访问并操作mysql数据库(C语言)。首先,我们需要安装mysql-devel-3.23.54a-11.i386.rpm包,这样我们才能使用mysql提供的API和类库。mysql-devel-3.23.54a-11.i386.rpm的下载地址:http://www.rpmfind.net/linux/rpm2html/se
2011-04-12 23:58:00
4415
原创 redhat9安装配置mysql数据库(系统自带,版本3.23.54)
Mysql安装:首先,查看你的系统中是否已经安装了mysql,在终端里输入mysql,[root@localhost root]#mysqlbash: mysql: command not found说明系统中还没有安装mysql数据库,如果出现,说明已经安装了mysql数据库,那么跳过接下来的安装步骤,直接看配置步骤吧。“从这里开始”——>“系统设置”——>“添加/删除应用软件”——>“SQL数据库服务器”,如下图所示。选择——>“细节”,安装“标准软件包”和“额外软件包”,系统会提示你插入第二张和第三张
2011-04-12 18:11:00
4095
原创 Flyweight模式——结构型模式
<br /><br /> <br />flyweight.h<br />#ifndef _FLY_WEIGHT_H_#define _FLY_WEIGHT_H_#include <string>using namespace std;class Flyweight{protected: Flyweight(string intrinsic_state);public: virtual void Operation(const string& extrinsic_s
2011-04-05 09:12:00
2413
原创 Strategy模式——行为模式
<br /><br /> <br />strategy.h<br />#ifndef _STRATEGY_H_#define _STRATEGY_H_class Strategy{public: virtual ~Strategy(); virtual void AlgrithmInterface()=0;protected: Strategy();};class ConcreteStrategyA:public Strategy{public:
2011-03-31 21:55:00
2147
原创 Template模式——行为模式
<br /><br />template.h<br />#ifndef _TEMPLATE_H_#define _TEMPLATE_H_class AbstractClass{public: virtual ~AbstractClass(); void TemplateMethod();protected: AbstractClass(); virtual void PrimitiveOperation1()=0; virtual void PrimitiveOp
2011-03-28 17:50:00
2031
原创 Proxy模式——结构性模式
<br /><br /> <br />proxy.h<br />#ifndef _PROXY_H_#define _PROXY_H_class Subject{public: virtual ~Subject(); virtual void Request()=0;protected: Subject();};class ConcreteSubject:public Subject{public: ConcreteSubject(); ~Con
2011-03-27 15:21:00
2030
原创 Facade模式——结构型模式
外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式。facade.h#ifndef _FACADE_H_#define _FACADE_H_class SubSystem1;class SubSystem2;class Facade{public: ~Facade(); static Facade* Instance(); void OperationWrapper();protected: Facade();priv
2011-03-26 01:28:00
2094
原创 Adapter模式——结构型模式
<br /><br /> <br />adapter.h<br />#ifndef _ADAPTER_H_#define _ADAPTER_H_class Target{public: Target(); virtual ~Target(); virtual void Request();};class Adaptee{public: Adaptee(); ~Adaptee(); void SpecificRequest();};c
2011-03-24 20:29:00
2009
原创 Bridge模式——结构型模式
<br /><br /> <br />tank.h<br />#ifndef _TANK_H_#define _TANK_H_class TankImpl;class Tank{public: virtual ~Tank(); virtual void shot()=0; virtual void run()=0;protected: Tank();};class ChinaTank:public Tank{public: ChinaT
2011-03-23 19:51:00
2012
原创 Bridge模式——结构型模式
<br /><br /> <br />tank.h<br />#ifndef _TANK_H_#define _TANK_H_class TankImpl;class Tank{public: virtual ~Tank(); virtual void shot()=0; virtual void run()=0;protected: Tank();};class ChinaTank:public Tank{public: ChinaT
2011-03-23 19:33:00
1828
原创 Singleton模式——创建型模式
<br /><br /> <br />Singleton.h<br />#ifndef _SINGLETON_H_#define _SINGLETON_H_class Singleton{public: virtual ~Singleton(); static Singleton* Instance();protected: Singleton();private: static Singleton* m_instance;};#endif<br />
2011-03-22 22:09:00
2124
4
原创 AbstractFactory模式——创建型模式
<br /><br />factory.h<br />#ifndef _ABSTRACT_FACTORY_H_#define _ABSTRACT_FACTORY_H_class Product;class AbstractFactory{protected: AbstractFactory();public: virtual ~AbstractFactory()=0; virtual Product* CreateProductA()=0; virtual P
2011-03-21 12:10:00
1979
原创 FactoryPattern——创建型模式
<br /><br />以下代码已经在VC6.0中测试运行通过。<br />factory.h<br />#ifndef _FACTORY_H_#define _FACTORY_H_#include <string>using namespace std;class Fruit;class Factory{protected: Factory(){};public: virtual ~Factory() = 0; virtual Fruit* Crea
2011-03-20 19:56:00
2007
原创 像一个电脑高手一样操作windows——windows常用快捷键大全
<br />一、常见用法:<br />F1 显示当前程序或者windows的帮助内容。<br />F2 当你选中一个文件的话,这意味着“重命名”<br />F3 当你在桌面上的时候是打开“查找:所有文件” 对话框<br />F10或ALT 激活当前程序的菜单栏<br />windows键或CTRL+ESC 打开开始菜单<br />CTRL+ALT+DELETE 在win9x中打开关闭程序对话框<br />DELETE
2011-03-06 10:45:00
2340
1
原创 细谈C/C++中的前置++和后置++
++运算符是大家都再熟悉不过的东西了,无论是在for循环里,还是在一些赋值语句中,都有++的身影。这里我和大家分享一下我对++的理解,若有不足之处欢迎批评指正啊。首先,看这样一段代码:#include using namespace std;int main(){ int i; ++++i; // All Right //i++++; // error C2105: '++' needs l-value //++i=10; // All Right
2011-02-27 14:22:00
4638
原创 如果你的电脑蓝屏了,请温柔的对她。。。
<br /> 如果你的电脑蓝屏了,请不要气愤的说一句"fucking shit,damn it“,然后直接冷启动。你可以根据屏幕上显示的错误码来判断是哪出了问题,下面就是一些蓝屏的原因,仅供参考。<br /> 0 0x00000000 作业完成。 <br />1 0x00000001 不正确的函数。 <br />2 0x00000002 系统找不到指定的档案。 <br />3 0x00000003 系统找不到指定的路径。 <br />4 0x00000004 系统无法开启档案。 <br />5 0
2011-02-22 23:08:00
2694
转载 windows下DLL的编写
<br /> 在VC中新建一个空的Win32动态链接库工程(Win32 Domanic-Link Library),然后添加一个C++ Sourse File到工程,我这里的文件名取DllTest.cpp。然后在文件中添加如下内容: //DllTest.cpp _declspec(dllexport) int add(int a,int b)<br /> {<br /> return a+b;<br /> } _declspec(dllexport) int subtract(int
2011-02-09 21:09:00
5141
原创 linux库文件编写
静态库与动态库的区别: 如果程序是在编译时加载库文件的,就是使用了静态库。如果是在运行时加载目标代码,就成为动态库。换句话说,如果是使用静态库,则静态库代码在编译时就拷贝到了程序的代码段,程序的体积会膨胀。如果使用动态库,则程序中只保留库文件的名字和函数名,在运行时去查找库文件和函数体,程序的体积基本变化不大。静态库的原则是“以空间换时间”,增加程序体积,减少运行时间;动态库则是“以时间换空间”,增加了运行时间,但减少了程序本身的体积。其实,程序设计就是一个“时间与空间的矛盾”。下面我们就以实际例
2011-02-05 22:12:00
2970
1
原创 设置个性的windows XP开机音乐
<br /> 每次开机都听XP的默认开机音乐已经让我感到厌烦了,不知道你是否也和我一样。如果是那就像我一样设置属于自己的个性windows开机音乐。具体步骤如下:<br />①在网上下载自己喜欢的开机音乐,要尽量短些,就像短信提示音一样(不让你的开机音乐会让你恶心到吐血的!)。我选择的是FC经典坦克大战的BGM(background music),下载地址:http://www.midishow.com/midis/show/11892。<br />②要想设置成windows的开机音乐,文件的格式
2011-01-22 19:29:00
3479
原创 细谈const char ** 与 char ** 的区别
<br />#include "stdafx.h"#include <iostream>using namespace std;int main(int argc, char* argv[]){ const char ** p0=NULL; char ** p1=NULL; p0=p1;}// error C2440: “=”: 无法从“char **”转换为“const char **”<br /> 程序出现了错误,很明显是类型转换时类型不匹配(const
2011-01-12 19:21:00
4885
原创 搭建linux C语言开发环境——redhat9+vim+ctags+taglist+cscope
搭建linux C语言开发环境——vim+ctags
2011-01-02 00:20:00
9972
1
转载 细谈C++中的new和delete
/*****************************************************************************//* C++中的 new / delete *//*****************************************************************************//* new的3种形态: new o
2010-12-31 21:01:00
1630
原创 linux下Epoll实现简单的C/S通信
<br />epoll的优点:<br />1.支持一个进程打开大数目的socket描述符(FD)<br /> select 最不能忍受的是一个进程所打开的FD是有一定限制的,由FD_SETSIZE设置,默认值是2048。对于那些需要支持的上万连接数目的IM服务器来说显然太少了。这时候你一是可以选择修改这个宏然后重新编译内核,不过资料也同时指出这样会带来网络效率的下降,二是可以选择多进程的解决方案(传统的 Apache方案),不过虽然linux上面创建进程的代价比较小,但仍旧是不可忽视的,加上进程间数据
2010-12-28 20:27:00
20022
原创 socket编程小问题:地址已经被使用——Address already in use
很多socket编程的初学者可能会遇到这样的问题:如果先ctrl+c结束服务器端程序的话,再次启动服务器就会出现Address already in use这个错误,或者你的程序在正常关闭服务器端socket后还是有这个问题。正如下面的这段简单的socket程序。server.c#include #include #include #include #include #include #include #define BUFFER_SIZE 40int mai
2010-12-25 22:07:00
115181
3
原创 细谈linux下的posix多线程编程
下面实现一个简单的多线程编程的例子。#include #include #include #include #include char message[]="Hello World!";void * thread_function(void * arg);int main(){ pthread_t second_thread; void * thread_result; // create new thread if(pthread_create(
2010-12-22 13:15:00
2298
转载 select, poll和epoll的区别
<br />select()系统调用提供一个机制来实现同步多元I/O:<br /><br />#include <sys/time.h><br />#include <sys/types.h><br />#include <unistd.h><br /><br />int select (int n,<br />fd_set *readfds,<br />fd_set *writefds,<br />fd_set *exceptfds,<br />struct timeval *timeout);<br /
2010-12-08 23:17:00
1125
原创 细谈C++中的智能指针
指针是C++语言的灵魂,也就是说想学好C++,就必须学好指针的用法。指针的灵活性给C++程序插上了一双翅膀,使C++程序员可以编写出更加飘逸的代码,但随之而来的则是令人烦躁的内存管理。在使用指针时,内存泄露的问题一直困扰着C++程序员。智能指针的出现使得内存泄露这一棘手的问题得到了相当程度的缓解。 智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针
2010-12-05 10:08:00
1791
原创 网络游戏服务器端架构设计
一款大型的网游的开发主要由游戏策划,服务器端,客户端,美工,游戏测试,用户体验等几部分组成,其中服务器端的开发绝对是一个程序员大展身手的地方。只要你崇拜技术,热爱编程,在服务器端开发的世界里就有你的光芒。下面谈一谈服务器端的整体架构。 服务器端的整体架构如上图所示,首先,auth就是玩家的登录界面,玩家输入用户名和密码之后,auth就会直接去AccountDB验证账户的合法性。然后,如果用户通过验证,auth就会将玩家带到服务器选择界面(例如第二大二区的xxx服务器)。之后,Scene
2010-12-03 23:24:00
27514
1
原创 常见的HTTP错误码的具体含义
<br />"100" : Continue <br />"101" : witching Protocols <br />"200" : OK <br />"201" : Created <br />"202" : Accepted <br />"203" : Non-Authoritative Information <br />"204" : No Content <br />"205" : Reset Content <br />"206" : Partial Content <br />"300"
2010-11-08 19:48:00
2655
原创 细谈select函数(C语言)
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不
2010-11-06 16:50:00
154541
26
原创 细谈C语言中的main返回值
<br /> C语言几乎是所有人的第一个编程语言,而main函数则又是我们接触到的第一个函数。我们的所有程序都需要main函数,对于下面的代码,相信大家再熟悉不过了。<br /> #include <stdio.h>void main(){ printf("I am main function./n");}<br /> <br />接下来再看一段很相似的代码。<br />#include <stdio.h>int main(){ printf("I am mai
2010-11-04 10:00:00
33347
5
原创 细谈C++中的new和malloc
new和malloc的区别:1、new 是c++中的操作符,malloc是c 中的一个函数2、new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行,而malloc没有这些信息。4、new 和 malloc效率比较new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的。而m
2010-11-01 16:19:00
1902
1
原创 细谈volatile限定符——上海先锋商泰面试归来
volatile的本意是“易变的”,由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化。比如: static int i=0; int main(void) { ... while (1) { if (i) dosomething(); } } /* Interrupt service routine. */ void ISR_2(void) { i=1; } 程序的本意是
2010-10-31 09:39:00
4410
1
原创 计算n!中结尾零的个数——上海先锋商泰面试归来
编程实现:计算n!中结尾零的个数。/*计算n!中结尾零的个数,返回结尾零的个数。*/int CalZeroNum(int n);
2010-10-30 20:17:00
8672
原创 寻找二叉树中两个节点的最近的公共祖先——迅雷笔试归来
迅雷的笔试可真让人煎熬啊,题量很大,而且考试时间是三个小时。不过迅雷的题目质量很高,既考查了基础知识又不乏高难的数据结构和算法题目。下面和大家分享两道算法编程题,代码没有在编译器上调试,可能会出现一点小bug,感兴趣的朋友可以编译调试一下。题目1:将一个单链表逆转——原来的头指针变为尾指针,原来的尾指针变为头指针。算法思想:从链表的头结点开始依次逆转,最终将整个链表逆转。程序代码:/*节点的类定义*/class Node{ Node * next;};/*链表的类定义*/
2010-10-28 10:38:00
10688
6
原创 细谈C++中的强制转换——淘宝笔试归来
将一种类型转换为另一种类型,转换后的变量,它的内部数据存储方式也随之发生改变,c++有四个显示的类型转换函数,reinterpret_cast,const_cast,static_cast,dynamic_cast.前面三个是在编译期间实现转换的,最后一个是在运行时实现转换,还可返回转换成功与否标志。转换函数的原型如下:reinterpret_cast(expression)const_cast(expression)static_cast(expression)dynamic_cast(exp
2010-10-26 13:17:00
3056
原创 判断链表是否有环以及查找环的入口点——淘宝笔试归来
#include using namespace std;/*节点的类定义*/class Node{public: int data; Node * next; Node(int data) { this->data=data; }};/*链表的类定义*/class List{public: Node * head;//头结点指针 Node * tail;//尾结点指针 /*用一个整形数组作为参数的构造函数*/ L
2010-10-25 22:29:00
5105
原创 任意进制整数之间的相互转换(C++实现)
任意进制整数之间的相互转换经常出现在各大IT公司的笔试面试中,这里我对其中的算法和实现代码做个总结。算法思想:例如,要求将x1进制的数r1转化成为x2进制的数r2,首先应该将r1转化为十进制的数r_decimal,然后再将十进制数r_decimal转化为x2进制的数r2。(1下面是我用C++实现的代码,已经在visual C++ 6.0上测试通过了,程序没有考虑太多的细节(整数和进制合法性的判断等),主要是为了实现算法的思想,如果想做的再好一点,个人感觉应该用类实现,将整数封装成class。例如
2010-10-25 08:08:00
18835
1
原创 细谈C语言中的字符串
对于初学者来说,C语言中对于字符串的操作稍显复杂,而且夹杂着指针的操作,这使得程序员稍微一不小心就会出现错误。C语言作为低级语言和高级语言的中间题,必然比不上java中的String来的舒服。但是,C语言的优秀体现在它的效率和接近底层环境。好了,不多说了,大家先看下面这一道某IT公司的笔试题。#include #include void main(){ char * str1="abc"; char * str2="abc"; const char * str3="abc"; const char * st
2010-10-23 14:49:00
2423
3
基于linux的socket多人聊天室程序,采用posix多线程控制技术
2011-01-05
基于arm-Linux的ATM模拟程序
2010-08-03
基于RedHat+Oracle 11i +pro * C 的通讯录系统
2010-08-03
基于arm-Linux平台的经典贪吃蛇游戏
2010-08-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人