自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(30)
  • 收藏
  • 关注

转载 socket, nio socket 及nio socket框架MINA总结

nio学习:最近花了点时间研究了一下nio,及其开源框架MINA,现把心得总结如下:1:传统socket:阻塞式通信每建立一个Socket连接时,同时创建一个新线程对该Socket进行单独通信(采用阻塞的方式通信)。这种方式具有很高的响应速度,并且控制起来也很简单,在连接数较少的时候非常有效,但是如果对每一个连接都产生一个线程的无疑是对系统资源的一种浪费,如果连接数较多将会出现资源不足的情况exa

2009-09-02 15:53:00 374 1

转载 浅谈HTTP无状态性

       HTTP是Hyper Text Transfer Protocol的缩写,顾名思义,这个协议支持着超文本的传输。那么什么是超文本呢?说白了就是使用HTML编写的页面。通常,我们使用客户端浏览器访问服务器的资源,最常见的URL也是以html为后缀的文件。因此,我们可以说超文本是网络上最主要的资源。        既然HTTP协议的目的在于支持超文本的传输,更加广义一些就是支持资源的传输

2009-08-29 17:06:00 252

转载 HTTP协议详解

      计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP目前协议的版本是1.1.HTTP是一种无状态的协议,无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息.HTTP遵循请求(Re

2009-08-29 17:05:00 188

转载 Oracle SQL优化技术

1)      选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是

2009-07-23 18:00:00 182

转载 为什么要优先使用组合而不是继承

      继承具有如下优点:实现新的类非常容易,因为基类的大部分功能都可以通过继承关系自动赋予派生类;修改或者扩展继承来的实现非常容易;只要修改父类,派生的类的行为就同时被修改了。 初学面向对象编程的人会认为继承真是一个好东西,是实现复用的最好手段。但是随着应用的深入就会发现继承有很多缺点:继承破坏封装性。基类的很多内部细节都是对派生类可见的,因此这种复用是“白箱复用”;如果基类的实现发生改

2009-04-07 19:05:00 2053

转载 ERWin中的实体之间的相互关系

决定关系(Identifying   Relationship)非决定关系(None-Identifying   Relationship)多对多(Many-To-Many   Relationship)关系.      以客户(Customer)和订单(Order)的关系为例,客户拥有唯一的识别信息CustomerID,订单拥有一个流水号。     第一种情况,假如该流水号是整个系统范围内的,那

2009-04-02 19:20:00 2208

转载 全面分析Java的垃圾回收机制

      引言   Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new、newarray、anewarray和multianewarray等指令建立,但是它们不需要程序代码来显式地释放。一般来说,堆的是由垃圾回收 来负责的,尽管JVM规范并不要求特殊的垃圾回收技术,甚至根本就不需要垃圾回收,但是

2009-03-17 12:06:00 214

原创 Js调用服务器端方法总结

 一、__doPostBack方式。        1、在页面上放置一个隐藏Button,并为其添加Click事件,Js调用的服务器方法即为该事件的处理方法。       2、Js代码:__doPostBack("Button1","abc");  参数1为实际页面控件名字,参数2为传递给处理方法的参数。       3、参数接收方法: Request.Form["__EVENTA

2008-12-08 18:00:00 310

转载 可执行程序的内存分布总结

  原来一直对于可执行程序的内存分布很迷惑,最近查了好多资料以及请教了诸多高手,方有一些领悟,现将自己领悟的写下来,以供大家批评指正。     在操作系统中,一个进程就是处于执行期的程序(当然包括系统资源),实际上正在    执行的程序代码的活标本。那么进程的逻辑地址空间是如何划分的呢?    图1做了简单的说明(Linux系统下的):            图1

2008-11-14 10:12:00 264

转载 堆与栈,静态变量和全局变量的区别

    对堆和栈的主要的区别由以下几点:       1、管理方式不同;       2、空间大小不同;       3、能否产生碎片不同;       4、生长方向不同;       5、分配方式不同;       6、分配效率不同;        管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory

2008-11-14 09:55:00 233

原创 背包问题的非递归算法

        const int M = 12;//背包重M斤               int[,] Subjects = {{3,4},{4,5},{5,7},{8,10} };//物件数组,重量/价值                        int CurrentWeight = 0, CurrentValue = 0;//当前重量,当前价值            int MaxV

2008-10-12 20:07:00 331

原创 白话索引技术

  索引这个东西由来已久,其目的无非就是为了提高我们的查询速度,想想我们新华字典上的拼音和笔划索引表,通过它我们能够快速找到所需要的汉字,对应于数据库,通过索引我们可以快速找到所需要的记录,由此可见,索引的思想其实是被我们熟知的。 如果现在假定一个任务,让你来发明一个数据库,而我们需要在你的表中存储100条数据,请问你应该怎么设计索引,帮助我们快速的查找某一条数据? 我想很多人

2008-10-09 13:59:00 416

转载 NHibernate的基本使用(转载)

  一.O/R Mapping 概论 工厂模式+反射+每个数据库的DAL层来解决数据访问层的代码针对数据库表中字段的变化我们是无法预料的,所以每一次用户需求的修改都会直接导致我们程序员来修改—实体类(BE层),数据访问层(DAL),这样同样会导致以上的各层BLL,UI等等的修改,长久的下去,只会造成项目的噩梦。在软件高速发展的今天,已经有很多的人在为这个问题而努力了,其中最

2008-09-05 16:46:00 437

原创 模式十四: 生成器模式

  14.1生成器模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。14.2生成器模式UML类图: 14.3应用场景: 1、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。2、当构造过程必须允许被构造的对象有不同的表示时。 14.4生成器模式分析与实现(c#描述): //抽象假期计划生成器:复杂对

2008-08-28 21:50:00 1750 1

原创 模式十三: 状态模式

 13.1状态模式定义:状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。13.2状态模式UML类图:13.3应用场景:1、当一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为。 2、一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常, 有多个操作包含这一相同的条件

2008-08-28 21:47:00 1530

原创 模式十二:组合模式

  12.1组合模式定义:    组合模式允许你将对象组合成树型结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。 12.2组合模式UML类图:  12.3应用场景:当我们有数个对象的集合,它们彼此之间有整体/部分的关系,并且想用一致的方式处理它们时,就可以使用组合模式。例如我们的应用程序菜单,每一个菜单项可能是一个普通菜单项,

2008-08-28 21:42:00 547

原创 模式十一:迭代器模式

        11.1迭代器模式定义: 迭代器模式提供一种模式顺序访问一个集合对象中的各个元素,而又不暴露其内部的表示。 11.2迭代器模式UML类图: 11.3应用场景: 由于每个集合对象本身不一样,所以当我们对不同类型的集合进行遍历时,由于必须暴露其内部表示,所写的遍历语句(for/foreach)也是不能通用的。而如果我们对需要用到的集合创建迭代器,由于对迭代器的遍

2008-08-05 21:45:00 922

原创 模式十:模板方法模式

   10.1模板方法模式定义   在一个方法中定义一个算法的框架,而将一些步骤延迟到子类中。模板方法可以使得子类在不改变算法结构的情况下,重新定义算法中的某些步骤。         10.2模板方法模式UML类图:    模式方法的定义:void TemplateMethod()。模式方法不能声明成virtual是因为当然不允许子类改变算法的框架。  10.3应用场景: 

2008-08-05 21:30:00 297

原创 模式九:外观模式

9.1外观模式定义:  提供了一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更加容易使用。                                  9.2外观模式UML类图: 9.3应用场景:   生活中其实有许多外观模式,例如我们去自动取款机取钱,和我们打交道的是取款机(相当于银行一系列复杂子系统的Facade),当我们按下取款

2008-08-04 17:40:00 279

原创 模式八:适配器模式

8.1适配器模式定义:   适配器模式将一个类的接口,转换成客户期望的另一个接口,适配器模式让原本接口不兼容的类可以互相合作。                                  8.2适配器模式UML类图:    8.3应用场景:   我们平常所说的网络适配器即网卡就是适配器最典型的一个例子。我们网卡的Client端(网络设备)是RJ-4

2008-08-04 17:32:00 620

原创 模式八:适配器模式

  8.1适配器模式定义:   适配器模式将一个类的接口,转换成客户期望的另一个接口,适配器模式让原本接口不兼容的类可以互相合作。                                   8.2适配器模式UML类图:   8.3应用场景:我们平常所说的网络适配器即网卡就是适配器最典型的一个例子。我们网卡的Client端(网络设备)是RJ-45

2008-08-02 15:18:00 195

原创 模式七:命令模式

    7.1命令模式定义:   命令模式将请求(命令)封闭成对象,以便使用不同的请求、队列或者日志来参数化其它对象(命令的发布者)。命令模式也支持可撤消的操作。       7.2命令模式UML类图:    7.3应用场景   命令在生活中随处可见,例如我们开灯这个动作,人是发出命令的对象(对应Invoker),开是命令(对应Command),灯是命令

2008-07-30 20:19:00 274

原创 模式六:单件模式

   6.1单件模式定义:   确保一个类只有一个实例,并提供一个全局访问点。   6.2单件模式UML类图:6.3应用场景在软件开发中有很多对象我们只需要一个,如:线程池,缓存,对话框,注册表对象,日志对象等等,当我们想让某些类只能产生一个对象时,就可以采用单件模式。 6.4单件模式分析与实现(c#描述) Using System.Runtime.Co

2008-07-30 20:14:00 270

原创 模式五:抽象工厂模式

  5.1抽象工厂模式定义:   抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。 5.2抽象工厂模式UML类图:    5.3应用场景当我们有一系列的对象而不是单个对象可能变化时,例如:如果我们生产一台笔记本电脑和一台普通的PC机,其所用的原料如显卡、声卡虽然名称都一样,但是很明显,其真实的材料却是肯定不一样的。这时

2008-07-30 20:11:00 290

原创 模式四:工厂方法模式

       4.1工厂方法模式定义  工厂方法模式定义了一个创建对象的接口,但有子类决定需要实例化的类是哪一个。工厂方法模式把类的实例化推迟到子类。 4.2工厂方法模式UML类图: 工厂方法:abstract Product FactoryMethod(string type) 4.3应用场景  当我们需要创建的单个对象可能发生的改变时,例如:假设一个玩具生产

2008-07-30 20:05:00 300

原创 简单工厂

    简单工厂就是将创建类的操作封装在一个工厂类中,该工厂只被用来创建类,通常传递一个参数用以指定创建具体哪个类。创建类的方法可以被用来设置成静态方法,这样就不用创建工厂类的实例了,这种工厂也称之为静态工厂。一般情况下我们都使用静态工厂,其缺点是不能通过类的特性如继承和多态来扩展和改变行为,也就是说其违背了设计模式的一个重要原则:开-闭原则(对修改关闭,对扩展开放)。简单工厂实际上就是将创建对象

2008-07-30 20:03:00 222

原创 模式三:装饰者模式

牢记:代码应该如同晚霞中的莲花一样地关闭(免于改变),如同晨曦中的莲花一样地开放(能够扩展)。3.1装饰者模式定义:  动态地将动作附加到对象上,动作可以根据需要任意叠加(装饰)。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 3.2装饰者模式UML类图:       Component是被装饰者和装饰者之间所共同拥有的行为,可以抽象类或接口的方式实现,有别于以传

2008-07-30 19:57:00 405

原创 模式二:观察者模式

      2.1观察者模式定义: 观察者模式定义了对象之间一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 2.2观察者模式UML类图:一个观察者只有一个主题一个主题对应多个观察者>Subject RegisterObserver()RemoveObserve

2008-07-30 19:04:00 693

原创 模式一:策略模式

       1、 模式一:策略模式 1.1策略模式定义:策略模式定义了算法簇,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。 1.2应用场景    现任举一现实案例如下,以此来模拟软件开发中的问题事实。设Human类如下:public class Human{                  public void Eat

2008-07-30 19:02:00 291

原创 面向对象原则综述

                 任何一种设计模式都是上述原则的具体体现,所以这里先列出整体原则。  1、  封装变化。2、  多用组合,少用继承。3、  针对接口编程,不针对实现编程。4、  为交互对象之间的松耦合设计而努力。5、  类应该对扩展开放,对修改关闭。6、  依赖倒置原则:要依赖抽象,不要依赖具体类(和第3点类似)。 

2008-07-30 13:11:00 159

空空如也

空空如也

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

TA关注的人

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