自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 门面模式(Façade Pattern)

模式产生的背景1、沉重的网络负担在没有SessionBean的时候,客户端直接同底层的EntityBean进行交互,形成的是一种具有紧密耦合的硬编码机制,对于远程的客户来说,还附加了沉重的网络交互负担,具体的交互图如下:在上面的图中,我们假设客户是通过网络对EntityBean的访问,如果EntityBean中有4个字段ABCD,客户要进行字段ABCD的值的设置,就要进行4次网

2003-09-26 22:50:00 3011

原创 在Weblogic+JBuilder7使用时的奇怪问题

    一周前,老师让我们用Java去做项目,说句实话,我对Java真的是一知半解,绝对是个门外汉,无奈,老师的任务不能不完成,只好硬着头皮去做。    我们有一个项目叫“数据仓库”,以前是师兄们做的,采用的是Tomcat做服务器,JSP+JavaBean做开发。后来老师为了“提高项目的技术含量”,决定改做J2EE版本,我们这里几乎没有人用J2EE做过项目,于是大家就开始到处找资料,下载编译器,忙

2003-08-20 11:17:00 1969 1

原创 小议static

这是很早之前写的一篇文章,呵呵,铁出来仅供参考 1、什么是static?       static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。    2、为什么要引入static?       函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值

2003-08-03 17:08:00 3514 3

原创 “瑜珈山夜话”--- 参考资料

     本来不想写的,可是又怕产生误会,最后决定还是写出来吧。   纸质书籍类:     1、C++程序设计语言(特别版) 机械工业出版社  裘宗燕(译)     2、C++Primer(第三版,中文) 中国电力出版社  潘爱民(译)     3、深度探索C++对象模型       华中科技大学出版社  候捷(译)     4、C++语言的设计和演化       机械工业出版社  裘宗燕(译) 

2003-07-27 11:26:00 2357

原创 “瑜珈山夜话”--- 寻根究底谈“继承”(一)

    摘要:继承是C++的一个很重要的特性,也是OO的三大特征之一,希望对此做一个简单的论述,能消除你一些困惑。         继承是什么?    继承是将相关的类组织起来,并分亨其间的共通数据和操作行为的一种方法,同时也要注意到继承关系是一种强耦合的关系。       继承的目的是什么?    说到继承的目的,人们总是会想到代码重用,实则不然,代码重用只不过是继承的一个副作用,继承的主要目的

2003-07-27 11:25:00 2034

原创 “瑜珈山夜话” ---- 闲谈“封装与抽象”

   摘要:封装和抽象是C++里面的重要概念,本文试着对此作一下简单的讨论。          封装是OO的重要特征,这一点是毫无疑问的,至于算不算的上是OO的三大特征之一(另外两个是继承、多态),目前仍有争论,我也不想在这个问题上作过多的纠缠。    什么是封装呢?封装是人们对现实世界中解决问题时,为了进行简化问题,对研究的对象所采用的一种方法,一种信息屏蔽技术。例如:打电话的时候,我们只需简单

2003-07-25 18:16:00 2046 1

原创 “瑜珈山夜话” ----内存分配(三)

    存储器的结构层次    我想大家都很清楚,在计算机的存储中,有各种各样的存储器,对他们的访问频率和访问方式直接影响到我们的程序效率,一般来说,可以分为5个等级:寄存器、一级缓存、二级缓存、主存、磁盘存储器。下面我们就把他们的特性大体的说一下:    1、寄存器,是所有存储器里面延迟时间最短、带宽最大、开销最少的,毫无疑问,这是目前速度最快的存储器,但是代价比较昂贵,所以寄存器的个数有限,我

2003-07-10 11:06:00 2429

原创 不比不知道,一比吓一跳!

不要发了,我知道怎么回事了    怎么没有办法删除自己法的文章呢?我觉得应该可以的     摘要:我一直以为VC6的执行效率很不错,无论如何这也是微软的产品,在Windows平台下,他的效率应该不会差到哪里去,你是不适也是这么认为的?我还一直以为在VC6下面,通过初始化列表会有一定的性能提高,理论上如此,实际上呢?    源于《Efficient C++》上面的一个例子

2003-07-10 08:36:00 2507 3

原创 “瑜珈山夜话” ----内存分配(二)

    new/delete究竟做了些什么?    在理解这个问题之前,我们先看一下下面的这段程序,有这么一个程序段:       class A       {       public:           A() {   cout           ~A(){   cout       private:           int i;       };       A* pA=new A

2003-07-09 11:40:00 3085 1

原创 “瑜珈山夜话” ----内存分配(一)

       摘要:内存管理向来是C/C++程序设计的一块雷区,大家都不怎么愿意去碰她,但是有时不得不碰它。虽然利用C++中的smart pointer已经可以完全避免使用指针,但是对于对于指针的进一步了解,有助于我们编写出更有效率的代码,也有助于我们读懂以前编写的程序。    五大内存分区    在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。   

2003-07-08 11:28:00 3577 5

原创 “瑜珈山夜话”---序

    初看这个题目,是不是觉得有点怪?“瑜珈山夜话”听起来有点象小说,是不是?    说起为什么取这么个名字,原因也很简单:1、我在华工;2、免受攻击。    华工是“华中理工”的简称,前两年更名为“华中科技大学”,但是我还是比较喜欢称之为“华工”。华工位于武汉郊区,风景秀丽,在学校的北面有一座“武汉第一山”---瑜珈山,据说是武汉市最高的山(其实,武汉也没有几座山,都比较低,瑜珈山也许比起武大

2003-07-08 09:06:00 2339

原创 C++中的预处理(下)

其他预编译指令    除了上面我们说的集中常用的编译指令,还有3种不太常见的编译指令:#line、#error、#pragma,我们接下来就简单的谈一下。    #line的语法如下:      #line number filename    例如:#line 30  a.h     其中,文件名a.h可以省略不写。    这条指令可以改变当前的行号和文件名,例如上面的这条预处理指令就可以改变当

2003-07-07 09:23:00 3215

原创 XP精华-如何使 Java 项目获得更大成功

XP 精华 如何使 Java 项目获得更大成功 Roy W. Miller (rmiller@rolemodelsoft.com) 软件开发人员,RoleModel Software, Inc. Christopher T. Collins (ccollins@rolemodelsoft.com) 高级软件开发人员,RoleModel Software, Inc. 2001 年 3 月 内容: 企

2003-07-07 08:31:00 2025

原创 彻底粉碎“指针与数组的困惑”(上)

   摘要:指针是C语言的精髓,也算是C++的精髓吧,要掌握它不是很容易,特别是与数组经常弄混,希望通过本文,你能够有一个清楚的认识。   (1)一维数组与指针    首先我们看一下下面的例子:  char a[10], *p;  p=a;    p是一个char类型的指针,它里面放的是数组a的首地址,即a[0];a这里有双重含义:地址,也可以看作是常量指针;结构,里面包含了10个char元素。 

2003-07-07 08:30:00 3120 2

原创 形形色色的自定义消息(上)

     摘要:自从发了5篇关于消息的文章,有的网友来信希望我讲一些比较实用的消息机制用法,这里我想就用户的自定义消息做一个全面的论述,希望能够解除你心头的困惑。     一、普通的自定义消息方法。        根据我在前面的几篇文章中提到的消息值的范围,我向大家都很清楚用户自定义消息的范围,不过,虽然说用会自定义消息从WM_USER开始,但是由于我们的工程里面一般还有很多其他的控件,他们也

2003-07-07 08:28:00 2889

原创 JDBC3.0研究报告(节选)

(by huihoo.org Quaker Tan) 数据库连接池的基本原理 传统的数据库连接方式(指通过DriverManager和基本实现DataSource进行连接)中,一个数据库连接对象均对应一个物理数据库连接,数据库连接的建立以及关闭对系统而言是耗费系统资源的操作,在多层结构的应用程序环境中这种耗费资源的动作对系统的性能影响尤为明显。 在多层结构的应用程序中通过连接池(connectio

2003-07-07 08:28:00 1708

原创 Java的内伤

作者: ZDNET CHINA Monday, April 1 2002 12:02 PM Java吸引了越来越多的商业机构和软件开发商,但在赢得最终胜利之前Java还需要克服一些主要障碍。 最近的研究表明 微软 公司开发的编程技术仍然是软件开发商采用的最重要语言。但Java正在逐步地拉近同微软编程语言的距离。根据2000年度IDC研究报告,当时有300万人在使用C 和C++ 作为自己的主要编程语

2003-07-07 08:27:00 1569

原创 EJB设计模式1

设计模式 1 第一个设计模式非常简单。一个公司和雇员的Entity Bean和 下面给出的Entity Bean的代码片断是类似的。它们是由jbuilder4的 EntityBean模版生成的。所有的字段都声明为public的cmp字段。 Code snippet for Company Entity Bean public class CompanyBean implements EntityB

2003-07-07 08:27:00 1316

原创 形形色色的自定义消息(下)

    在前面,我们讨论了自身类中消息的传递方法和成组的消息传递,接下来的问题就是如何向不同的类中传递消息。其实在《解析VC++6中的指针 》中,我们讨论了如何在不同的类中获取其他类的指针的方法,,我们借用这种获取指针的方法就可以轻松的随心所欲的在各个类中传递消息了。    首先,定义消息的方式和我们在上面所说的是一样的(例如在框架类中向视图类发送消息):    (1)在视图类.cpp中定义消息值

2003-07-07 08:27:00 1905

原创 C++中的预处理(上)

一、预处理的由来:    在C++的历史发展中,有很多的语言特征(特别是语言的晦涩之处)来自于C语言,预处理就是其中的一个。C++从C语言那里把C语言预处理器继承过来(C语言预处理器,被Bjarne博士简称为Cpp,不知道是不是C Program Preprocessor的简称)。二、常见的预处理功能:    预处理器的主要作用就是把通过预处理的内建功能对一个资源进行等价替换,最常见的预处理有

2003-07-07 08:27:00 4706 1

原创 关于JAVA的可移植性

天 津 大 学 电 子 系 范 仲 方 (E-mail: zffan@public.tpt.tj.cn) 概 述:Sun 的JAVA 技 术 的 强 大 的 可 移 植 性(portability) 主 要 表 现 在 三 个 各 自 独 立 的 方 面。 本 文 讨 论 了 这 三 种 可 移 植 性 的 特 点 和 它 们 的 不 足。 1. JAVA 作 为 一 种 编 程 语 言: 源 代

2003-07-07 08:26:00 1272

原创 Java虚拟机

一、 什么是Java虚拟机 Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。 1.为什么要使用Java虚拟机? Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行, 至少需要编译成不同的目标代码。而引入Java语言

2003-07-07 08:26:00 1628 1

原创 学Java,观GP

    下笔之时,学Java已经有5天了。用惯了C++,现在看Java,有一种故人之感。Java和C++有很多相同的地方,也有一些不同的地方。其实,仔细想一下,这些区别并不能够说明那个更好,主要是两种语言的设计思路不同,实现的目标不同:C++侧重效率,Java注重安全。他们的差异也就由此展开,当然,我写这篇文章并不是为了说明他们的不同,只不过有感于一件事,记得好像Java声称可以支持GP(也许是下

2003-07-07 08:25:00 1376

原创 读《Efficient C++》疑惑

    当我们进行软件开发时,如果代码比较少,我们可以很容易的掌握、了解程序的执行情况,但是当代码超过数千行,特别是达到上万行的时候,我们就很难准确掌握程序的流程,在这种情况下,进行代码跟踪是很重要的一件事情。    代码跟踪技术,对于大多数程序员来讲,就是定义一个比较简单的Trace类,将程序的信息进行输出,一般是在程序的入口写一条信息,在程序的出口写一条信息,虽然这是以时间性能为代价,但是它有

2003-07-07 08:24:00 1954

原创 深度剖析消息反射机制

    摘要:在前面我们分析了控件通知消息WM_NOTIFY,和WM_NOTIFY紧密联系的还有一个MFC新特性:消息反射。本文中,我想就这个问题作一个全面的论述,如果有错误,还望各路大虾批评指正。    什么是消息反射?    在windows里面,子控件经常向父控件发送消息,例如很多子控件要绘制自己的背景,就可能向父窗口发送消息WM_CTLCOLOR。对于从子控件发来的消息,父控件有可能在

2003-07-03 15:48:00 2088 1

原创 Java下数字类型的转换

作者:家居猫 各种数字类型转换成字符串型: String s = String.valueOf( value); // 其中 value 为任意一种数字类型。 字符串型转换成各种数字类型: String s = "169"; byte b = Byte.parseByte( s ); short t = Short.parseShort( s ); int i = Integer.parseInt

2003-07-03 14:18:00 1735

原创 Java 中怎样在程序中设置代理服务器

在 Java 中代理服务器的基本设置是通过设置系统属性来完成的。而代理服务器的验证则是通过设置 Http 请求头来完成的。 下面的是一个简单的例子供大家参考: // 根据地址 url 打开 Http 连接 HttpURLConnection con = (HttpURLConnection)( new URL( url ) ).openConnection(); if (proxy.hasProx

2003-07-03 14:16:00 3128

原创 全面解读WM_NOTIFY

    摘要:控件通知消息有很多种,但是有一种是很常用,但是又不是很容易掌握的,那就是WM_NOTIFY,我试着对此做一下比较全面的论述,有不对的地方,还希望各路大虾批评指正。    控件通知消息    在《深度解析VC中的消息(上)》中,我们提到了消息的分类有3种:窗口消息、命令消息和控件通知消息,我们这里要谈的是最后一种:控件通知消息。    控件通知消息,是指这样一种消息,一个窗口内的子

2003-07-03 13:58:00 7495 3

原创 深度解析VC中的消息(中)

     队列消息和非队列消息   从消息的发送途径来看,消息可以分成2种:队列消息和非队列消息。消息队列由可以分成系统消息队列和线程消息队列。系统消息队列由Windows维护,线程消息队列则由每个GUI线程自己进行维护,为避免给non-GUI现成创建消息队列,所有线程产生时并没有消息队列,仅当线程第一次调用GDI函数数系统给线程创建一个消息队列。队列消息送到系统消息队列,然后到线程消息队列;非队

2003-07-02 23:22:00 3093

原创 深度解析VC中的消息(上)

     摘要:Windows编程和Dos编程,一个很大的区别就是,windows编程是事件驱动,消息传递的。所以,要做好windows编程,必须对消息机制有一个清楚的认识,本文希望能够对消息的传递做一个全面的论述,由于小生初学VC,里面可能有一些错误的地方,还往各位大虾批评、指正。     消息是指什么?     消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉。一个消

2003-07-02 23:06:00 3222 1

原创 恶草丛生的阴暗角落---虚拟机制(下)

    虚函数的开销  人们一提到虚函数,首先想到的是多态,紧接着想到的就是开销(至少我开始的时候就是这样子的),那么虚函数的开销来自哪里?开销究竟有多大?  在理论上来讲,虚函数所带来的动态开销主要依赖于3个方面:编译器、操作系统和机器。但是在现实中,几乎所有的编译器都以同样的方式操作。调用一个虚函数的开销主要来自于2个方面,一个是如果虚函数不是内联的,就要增加一些额外的机器指令,不过一般来说也

2003-07-02 16:24:00 2326

原创 恶草丛生的阴暗角落---虚拟机制(上)

       摘要:C++是一个恶草丛生的地带,虚拟机制是很重要,但是很危险的一个C++特性,所以有必要对此作一下阐述,希望能对大家有所帮助。       什么是虚函数    简单地说,就是在成员函数前加关键字virtual,这样这个成员函数就变成了虚函数。    虚函数的思想是从Simula借来得,在C++里面算得上最显著的特征。    虚函数允许派生类取代基类所提供的实现。编译器确保当对象

2003-07-02 16:20:00 5579

原创 解除心头的困惑--纯虚函数

     摘要:虚函数里面有一个很特殊的东东,那就是纯虚函数,关于纯虚函数的问题也是bbs上常见的话题,这里我想对此作一个小小的论述,希望能给初学者一个满意的解释。一、引入原因:   1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。   2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。   为了解决上

2003-07-02 16:15:00 5461 1

原创 深度解析VC中的消息(下)

  前面,我们分析了消息的基本理论和基本的函数及用法,接下来,我们将进一步讨论消息传递在MFC中的实现。  MFC消息的处理实现方式  初看MFC中的各种消息,以及在头脑中根深蒂固的C++的影响,我们可能很自然的就会想到利用C++的三大特性之一:虚拟机制来实现消息的传递,但是经过分析,我们看到事情并不是想我们想象的那样,在MFC中消息是通过一种所谓的消息映射机制来处理的。  为什么呢?在潘爱民

2003-07-02 16:11:00 2364

原创 解析VC++6中的指针

     摘要:指针,在VC++中是很常见的,这里我们并不打算去详细讲解在C++中那样的指针用法(我们会有另外的文章去详细讨论),这里主要讲一下VC++中常见的对指针获取的方法,包括:工具条、状态条、控件和窗口的指针。     获取工具条的指针     在缺省状态下,有一个默认的工具条AFX_IDW_TOOLBAR,我们可以根据相应的ID去获取工具条指针,方法如下:     CToolBar*

2003-06-30 14:25:00 1932

原创 闲言碎语话编程

     有人说:编程高手==游戏高手。如果这是真的话,我早就成高手了,因为在游戏里,我早已成为宇宙总管、富甲天下、仗剑走天涯了。可是我还是一个菜鸟:)闲来无事,随便贴点文章。    程序员不应依赖开发工具,程序员更应该拥有的是一种思维、一种精神、一种观念。就像Richard.M.Stallman一样,有自己的精神,为自由软件而奋斗。就像求伯君,为民族软件的振兴而奋斗。这才是真正的程序员。   

2003-06-30 14:24:00 3385

原创 解析#pragma指令

    在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。其格式一般为:    #Pragma Para    其中Para 为参数,下面来看

2003-06-30 14:24:00 2586 1

原创 小技巧:一个工具条内放多排按钮

    有的时候我们需要在一个工具条内放多排按钮,例如windows自带的画图软件,怎么实现呢?这里有一个小小的技巧,希望你能喜欢:)       首先假定我们的工具条资源号为IDR_PAINTTOOL;   我们从CToolBar类派生出一个CPaintToolbar类,添加一个受保护的成员变量:   protected:UIN m_nColumns;        file://排m_nC

2003-06-30 14:23:00 1409

原创 Union的迷思

     联合(union)在C/C++里面见得并不多,但是在一些对内存要求特别严格的地方,联合又是频繁出现,那么究竟什么是联合、怎么去用、有什么需要注意的地方呢?就这些问题,我试着做一些简单的回答,里面肯定还有不当的地方,欢迎指出!1、什么是联合?   “联合”是一种特殊的类,也是一种构造类型的数据结构。 在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许

2003-06-30 14:21:00 1489

原创 计算cpu速度的小程序

以下程序在vc60,console方式下编译运行通过。大家可以试一试,很准的说。#include #include float measure_clock_speed();int main(void){    printf("The cpu is running in %f MHz",measure_clock_speed());    getchar();    return 1;}float

2003-06-30 14:09:00 1842

空空如也

空空如也

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

TA关注的人

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