随笔分类 -  Java

摘要:1 概述 装饰模式(Decorator),就是可以动态的给对象增加新的功能,它要求装饰者对象和被装饰者对象有着相同的抽象父类或者接口。 当然,也可以写一个新的类来继承旧的类,在新的类中增加方法或者重写父类中的方法以此来达到扩展功能的目的,但是这样做的话,依然在编译的时候就定死了这个新的子类及其对象。想要动态的达到这一目的,就得使用这个模式了。 装饰者模式有以下几个要点(来自HeadFirst):(1)装饰者和被装饰者有着相同的超类型(2)可以使用多个装饰者来装饰一个对象(3)对象可以在任何时候被装饰,动态的(4)在该模式的使用过程中,也会用到继承,但是继承的目的不是为了获得行为,而是让装... 阅读全文
posted @ 2013-11-23 12:41 Scott007 阅读(2076) 评论(3) 推荐(0) 编辑
摘要:1 概述原型模式(Prototype model)被用在频繁调用且极其相似的对象上,在已指定对象的基础上,然后通过拷贝这些原型对象创建新的对象。 Prototype类需要具备以下两个条件:(1)实现Cloneable接口。在Java语言有一个Cloneable接口,它的目的是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。(2)重写Object类中的clone方法。Java中,所有类的父类都是Object类,Object类中有一个clone方法,作用是返回对象的一 阅读全文
posted @ 2013-11-21 22:15 Scott007 阅读(1171) 评论(1) 推荐(1) 编辑
摘要:1 概述 建造者模式(Builder Pattern)主要用于“分步骤构建一个复杂的对象”,在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。因此, 建造者模式主要用来解决“对象部分”的需求变化。 这样可以对对象构造的过程进行更加精细的控制。2 示例 还是以生产手机为例,每个手机分为屏幕Screen、CPU、Battery。现在要生产两种手机,苹果机和三星。苹果: 1 package org.scott.builder.before.use; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 /** .. 阅读全文
posted @ 2013-11-20 22:26 Scott007 阅读(402) 评论(0) 推荐(0) 编辑
摘要:1 概述 单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:(1)某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。(2)省去了new操作符,降低了系统内存的使用频率,减轻GC压力。(3)有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。2 详解 单例模式常用的写法有如下这么两种。2.1 饿汉式 如果应用程序总是创建并使用单例模式,或者在创建和运行时压力不是很大的情况下,可以使用一个私有静态变量,提前把对象创建好。 1 package org.sc. 阅读全文
posted @ 2013-11-16 10:13 Scott007 阅读(452) 评论(0) 推荐(0) 编辑
摘要:近期开始搞搞web的东西,觉得有必要把遇到的问题总结一下,就在这里当做个笔记本吧。1.用maven建立的web工程,在运行的时候,右键找不到“Run on server”菜单:可以在命令提示行中,切换到项目的根目录,输入如下命令:即:mvn eclipse:eclipse -Dwtpversion=1.0刷新下eclipse work space,就出现了Run as on server了:2.关于div的垂直居中CSS中的确是有vertical-align属性,但是它只对(X)HTML元素中拥有valign特性的元素才生效,例如表格元素中的、、等,而像、这样的元素是没有valign特性的.. 阅读全文
posted @ 2013-10-11 20:05 Scott007 阅读(1620) 评论(0) 推荐(0) 编辑
摘要:Storm框架入门1 Topology构成 和同样是计算框架的Mapreduce相比,Mapreduce集群上运行的是Job,而Storm集群上运行的是Topology。但是Job在运行结束之后会自行结束,Topology却只能被手动的kill掉,否则会一直运行下去。 Storm集群中有两种节点,一种是控制节点(Nimbus节点),另一种是工作节点(Supervisor节点)。所有Topology任务的提交必须在Storm客户端节点上进行(需要配置~/.storm/storm.yaml文件),由Nimbus节点分配给其他Supervisor节点进行处理。Nimbus节点首先将提交的Topolo 阅读全文
posted @ 2013-09-14 11:00 Scott007 阅读(2155) 评论(0) 推荐(2) 编辑
摘要:1 前提 由于近期工作的需要,要把RESTLET应用到项目中,于是在网上参考了一些资料的基础上,实践了一个关于RESTLET接口的小例子。 Restlet的思想是:HTTP客户端与HTTP服务器之间的差别,对架构来说无所谓。一个软件应可以既充当Web客户端又充当Web服务器,而无须采用两套完全不同的APIs。 Restlet提供了多个版本:Java SE、Java EE、android、Google AppEngine、Google Web Toolkit、Android。这里我们使用的是jee版本。 RESTLET的实现可以采用JAX-RS方式,也可以采用其他方式,见:http://... 阅读全文
posted @ 2013-09-03 23:27 Scott007 阅读(12221) 评论(1) 推荐(0) 编辑
摘要:HDFS2.x之RPC流程分析1 概述 Hadoop提供了一个统一的RPC机制来处理client-namenode, namenode-dataname,client-dataname之间的通信。RPC是整个Hadoop中通信框架的核心,目前采用ProtocolBuf作为RPC的默认实现。RPC的整体调用流程如下:2 Protobuf Protocol buffer(以下简称PB),PB是Google开源的一种轻便高效的结构化数据存储格式,可以用于结构化数据的序列化和反序列化,很适合做数据存储或 RPC 数据交换格式,目前提供了 C++、Java、Python 三种语言的 API。序列化/反序 阅读全文
posted @ 2013-08-21 20:10 Scott007 阅读(2060) 评论(0) 推荐(0) 编辑
摘要:Java自定义日志输出文件日志的打印,在程序中是必不可少的,如果需要将不同的日志打印到不同的地方,则需要定义不同的Appender,然后定义每一个Appender的日志级别、打印形式和日志的输出路径。1 log4j输出多个自定义日志文件如果在实际应用中需要输出独立的日志文件,怎样才能把所需的内容从原有日志中分离,形成单独的日志文件呢?先看一个常见的log4j.properties文件,它是在控制台和test.log文件中记录日志: 1 log4j.rootLogger=DEBUG, stdout, logfile 4 5 log4j.appender.stdout=org.apache.... 阅读全文
posted @ 2013-08-19 22:09 Scott007 阅读(27530) 评论(1) 推荐(1) 编辑
摘要:1 概念 通常来说,我们编写的Java代码是以进程的形式来运行的,所编写的代码就是“程序”,而执行中的程序就是“进程”。进程是系统进行资源分配和调度的独立单位。 线程是位于进程的下一级,是系统中的最小的执行单位。但是线程本身不拥有资源,线程本身通常只拥有寄存器数据以及执行时的堆栈。同一个进程内的多个线程共享属于当前进程的资源,在需要资源的时候要抢占。 多线程编程的目的就是使得程序能够最大限度的利用CPU等资源,当某一线程的处理不需要占用CPU而只和I/O等资源打交道时,让需要占用CPU资源的其它线程有机会获得CPU资源。相对于进程间的通信,线程间的通信占用的资源更少,实现起来也更加方便,而且能 阅读全文
posted @ 2013-06-29 22:27 Scott007 阅读(679) 评论(0) 推荐(0) 编辑
摘要:HDFS中的Block状态分析 文件在HDFS里进行读取和存储的时候大都是以block的形式存在和表现。每个文件都可能会有很多个block,每个block又会根据配置文件中的replica的value设置有着多个备份。在NN(NameNode)中,称之为block的这些个东东,在DN(DataNode)中通常叫做replica(都是指的同一种东东)。Block在NN中和DN中随着操作的不同,会有多种状态,这些状态因不同的操作而触发,又因不同的操作而发生转变。下面就分别分析block在NN中和DN中的各种状态以及状态之间的转变。1 DN端的block状态 DN端block状态都保存在DN的内存之 阅读全文
posted @ 2013-05-30 20:12 Scott007 阅读(1069) 评论(0) 推荐(0) 编辑
摘要:通常来说,大家都是对Java中的Exception进行捕获和进行相应的处理,有些人说,error就无法捕获了。其实,error也是可以捕获的。Error和Exception都是Throwable的子类。既然可以catch Throwable,那么error也是可以catch的。下面给个小例子,来验证一下error的捕获。public class TestCatchError extends Error{ private static final long serialVersionUID = -351488225420878020L; public TestCatchE... 阅读全文
posted @ 2013-05-22 21:03 Scott007 阅读(1932) 评论(0) 推荐(0) 编辑