自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

piaojun_pj的专栏

http://wotahouse.blogbus.com/

  • 博客(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 2867 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 4352

原创 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 3979

原创 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 2361

原创 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 2108

原创 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 1941

原创 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 1994

原创 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 2058

原创 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 1972

原创 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 1982

原创 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 1754

原创 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 2074 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 1932

原创 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 1954

原创 像一个电脑高手一样操作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 2279 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 4508

原创 如果你的电脑蓝屏了,请温柔的对她。。。

<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 2636

转载 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 5041

原创 linux库文件编写

静态库与动态库的区别:      如果程序是在编译时加载库文件的,就是使用了静态库。如果是在运行时加载目标代码,就成为动态库。换句话说,如果是使用静态库,则静态库代码在编译时就拷贝到了程序的代码段,程序的体积会膨胀。如果使用动态库,则程序中只保留库文件的名字和函数名,在运行时去查找库文件和函数体,程序的体积基本变化不大。静态库的原则是“以空间换时间”,增加程序体积,减少运行时间;动态库则是“以时间换空间”,增加了运行时间,但减少了程序本身的体积。其实,程序设计就是一个“时间与空间的矛盾”。下面我们就以实际例

2011-02-05 22:12:00 2904 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 3334

原创 细谈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 4725

原创 搭建linux C语言开发环境——redhat9+vim+ctags+taglist+cscope

搭建linux C语言开发环境——vim+ctags

2011-01-02 00:20:00 9899 1

转载 细谈C++中的new和delete

/*****************************************************************************//*                        C++中的 new / delete                               *//*****************************************************************************//*    new的3种形态: new o

2010-12-31 21:01:00 1570

原创 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 19897 4

原创 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 114741 9

原创 细谈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 2257

转载 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 1103

原创 细谈C++中的智能指针

      指针是C++语言的灵魂,也就是说想学好C++,就必须学好指针的用法。指针的灵活性给C++程序插上了一双翅膀,使C++程序员可以编写出更加飘逸的代码,但随之而来的则是令人烦躁的内存管理。在使用指针时,内存泄露的问题一直困扰着C++程序员。智能指针的出现使得内存泄露这一棘手的问题得到了相当程度的缓解。      智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针

2010-12-05 10:08:00 1737 1

原创 网络游戏服务器端架构设计

      一款大型的网游的开发主要由游戏策划,服务器端,客户端,美工,游戏测试,用户体验等几部分组成,其中服务器端的开发绝对是一个程序员大展身手的地方。只要你崇拜技术,热爱编程,在服务器端开发的世界里就有你的光芒。下面谈一谈服务器端的整体架构。      服务器端的整体架构如上图所示,首先,auth就是玩家的登录界面,玩家输入用户名和密码之后,auth就会直接去AccountDB验证账户的合法性。然后,如果用户通过验证,auth就会将玩家带到服务器选择界面(例如第二大二区的xxx服务器)。之后,Scene

2010-12-03 23:24:00 27300 2

原创 常见的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 2608

原创 细谈select函数(C语言)

      Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不

2010-11-06 16:50:00 154008 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 33095 9

原创 细谈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 1802 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 4330 1

原创 计算n!中结尾零的个数——上海先锋商泰面试归来

编程实现:计算n!中结尾零的个数。/*计算n!中结尾零的个数,返回结尾零的个数。*/int CalZeroNum(int n);

2010-10-30 20:17:00 8579 5

原创 寻找二叉树中两个节点的最近的公共祖先——迅雷笔试归来

      迅雷的笔试可真让人煎熬啊,题量很大,而且考试时间是三个小时。不过迅雷的题目质量很高,既考查了基础知识又不乏高难的数据结构和算法题目。下面和大家分享两道算法编程题,代码没有在编译器上调试,可能会出现一点小bug,感兴趣的朋友可以编译调试一下。题目1:将一个单链表逆转——原来的头指针变为尾指针,原来的尾指针变为头指针。算法思想:从链表的头结点开始依次逆转,最终将整个链表逆转。程序代码:/*节点的类定义*/class Node{ Node * next;};/*链表的类定义*/

2010-10-28 10:38:00 10596 10

原创 细谈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 2993

原创 判断链表是否有环以及查找环的入口点——淘宝笔试归来

#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 5017 1

原创 任意进制整数之间的相互转换(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 18737 2

原创 细谈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 2364 3

mysql-devel-3.23.54a-11.i386.rpm

mysql数据库提供的应用程序开发包,里面包含mysql提供的API和类库。mysql版本为3.23.54。

2011-04-12

基于linux的socket多人聊天室程序,采用posix多线程控制技术

基于linux的socket多人聊天室程序,采用posix多线程控制技术。客户端和服务器采用协议机制通信,服务器端在用户上线和下线时及时更新在线人数,并打印上下线信息(用户名)。客户端登陆需要输入用户名,若用户名已存在则让用户重新登陆。客户端也有即时显示好友上线下线信息功能。

2011-01-05

C++编程思想电子书pdf格式

C++编程思想电子书pdf格式,C++编程思想电子书pdf格式

2010-12-12

Effective_STL.pdf电子书

Effective_STL.pdf电子书。Effective_STL.pdf电子书。Effective_STL.pdf电子书。

2010-11-30

网游开发基础代码我的收藏

网游开发基础代码我的收藏,网游开发基础代码我的收藏。

2010-11-29

Linux下socket网络编程实现代码

Linux下socket网络编程实现代码,包含TCP和UDP以及curl包等协议。

2010-08-03

Linux下的进程间各种通信方式的实现代码

Linux下的进程间各种通信方式的实现代码,包含信号,信号量,共享内存和消息队列。

2010-08-03

基于arm-Linux的ATM模拟程序

硬件平台:ARM实验箱,PC机,s3c2410处理器 软件平台:RedHat-Linux,SQLite数据库,GNU工具链,Editplus编辑器,cgwin。 项目简述:设计一款由5*4键盘作为输入终端,LCD作为输出显示终端的ATM系统。处理器为S3C2410,嵌入式操作系统为ARM-Linux。ATM系统具备取款,存款,查询余额,转账,修改密码等功能,用户信息储存在SQLite数据库中。系统界面友好,操作简单,实用性强。

2010-08-03

基于RedHat+Oracle 11i +pro * C 的通讯录系统

一款基于Oracle 11i +pro * C 的通讯录系统,程序包含Makefile和notebook.pc主程序。实现了同学信息的增,删,改,查以及修改密码等功能。

2010-08-03

基于arm-Linux平台的经典贪吃蛇游戏

硬件平台:ARM实验箱,PC机,s3c2410处理器 软件平台:RedHat-Linux,GNU工具链,Editplus编辑器,cgwin。 程序简述:设计一款由5*4键盘作为输入终端,LCD作为输出显示终端的贪吃蛇游戏。处理器为S3C2410,嵌入式操作系统为ARM-Linux。要求,游戏具有友好的用户界面,操作简单,可玩性强,同时具备关卡设计,游戏计分功能,游戏计时功能等。游戏采用多线程控制技术。

2010-08-03

基于j2me的手机聊天软件

一款简单的基于j2me的手机聊天软件,采用socket网络编程技术实现两个客户端之间的通信,程序中包含一个服务器端程序和一个客户端程序。

2010-08-03

基于j2me的手机经典贪吃蛇游戏

一款基于j2me的手机经典贪吃蛇游戏,游戏界面友好,可玩性强,采用多线程控制技术。

2010-08-03

基于j2me+rms的手机电话簿程序

一款基于j2me+rms的手机电话簿程序,实现用户信息的增,删,改,查,其中搜索功能采用模糊匹配技术。

2010-08-03

绿色版editplus

绿色解压缩版EditPlus,需要上网搜一个序列号就能用了。哈哈,很好,很强大。

2010-08-01

WindowsAPI

WindowsAPIWindowsAPIWindowsAPIWindowsAPIWindowsAPIWindowsAPIWindowsAPI

2010-01-25

空空如也

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

TA关注的人

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