- 浏览: 22722 次
- 性别:
- 来自: 苏州
文章列表
1,系统中有些错误符合java语法但却步符合业务逻辑,如果要用异常形式处理这些错误,则需要自定义异常
2,在分层的软件结构中,通常在表现层对其它层次的异常进行捕获处理,而往往需要对不同层次的异常进行分类处理,而如果用java自带的则不能够区分。
自己的异常定义可以从Exception继承,也可以从Throwable继承
对于异常进行适当分类,方便捕获后的处理
如果对于异常不能处理则抛出非受检异常(runtime),直接到最上层
http://www.iteye.com/news/27078
装饰模式是在已有的功能上添加新的功能,装饰器和原有的组件调用的都是同一个方法。对于添加的功能可按流程分拆成不同的功能面,用不同的装饰器来实现这些功能面,然后这些装饰器可以按不同的顺序相互组合,也可以只取其中部分装饰器进行组合(java输入输出流)。对于这些装饰器之间其实是一个递归调用的过程。这样的扩展对原有组件是透明的,符合开闭原则。
策略模式也可以实现动态的改变对象的功能,但是策略模式只是一层选择,也就是根据策略选择一下具体的实现类而已,(可以理解为一种扁平的结构)。而装饰模式不是一层,是递归调用,可以理解为在一次处理的流水线上不同的步骤都使用了策略模式。而且策略模式改变的是原始对象的功能, ...
堆主要用来存放对象的,栈主要是用来执行程序的 .而这种不同又主要是由于堆和栈的特点决定的。栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享。在编程中,例如C/C++中,所有的方法调用都是通过栈来进行的,所有的局部变量,形式参数都是从栈中分配内存空间的。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。但是堆的优点在于,编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留 ...
系统提供的类加载器主要有下面三个:
引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自 java.lang.ClassLoader
。
扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。
系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过 ...
插入排序:
从第一个元素开始,该元素可以认为已经被排序
取出下一个元素,在已经排序的元素序列中从后向前扫描
如果该元素(已排序)大于新元素,将该元素移到下一位置
重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
将新元素插入到该位置中
重复步骤2
void InsertSort(char array[],unsigned int n)
{
int i,j;
int temp;
for(i=1;i<n;i++)
{
temp = array[i];//store the original sor ...
synchronized 总是与对象相关的,当对对象的某个方法同步时,并不影响别的线程访问其非同步方法,原因是别的线程根本就不需要去获取该对象的锁,但是当该对象的两个方法methodA和methodB都被加上同步后,当一个线程访问methodA时,别的方法同样不能访问methodB,因为访问methodB时需要获得该对像的锁。对线程调用sleep时不会放弃对象锁。
hascode()与equals()
- 博客分类:
- Java基础
这两个方法重写一个时必须重写另一个,否则使用hashmap等集合时可能会发生错误,在java的集合中,判断两个对象是否相等的规则是:
1),判断两个对象的hashCode是否相等
如果不相等,认为两个对象也不相等,完毕
如果相等,转入2)
2),判断两个对象用equals运算是否相等
如果不相等,认为两个对象也不相等
如果相等,认为两个对象相等(equals()是判断两个对象是否相等的关键)
为什么是两条准则,难道用第一条不行吗?不行,因为前面已经说了,hashcode()相等时,equals()方法也可能不等,所以必须用第2条准则进行限制,才能保证加入的为非重复元素。
比 ...
内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。
使用目的
:java通过内部类加上接口,可以很好的实现多继承的效果。 ...
java util 集合类小结
- 博客分类:
- Java基础
Collection主要有list和set两个子接口:
List接口:对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList,Vector和LinkedList。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作。(ArrayList 是线程不安全的, Vector 是线程安全的,这两个类底层都是由数组实现的 LinkedList 是线程不安全的,底层是由链表实现的 )
Set接口:是Collection的另一种扩展,在Set中 ...
lucene的缓存可分为两类:filter cache和field cache。
filter cache的实现类为CachingWrapperFilter,用来缓存其他Filter的查询结果。field cache的实现类是FieldCache,缓存用于排序的field的值。
简单来说,filter Cache用于查询缓存,field cache用于排序。这两种缓存的生存周期都是在一个IndexReader实例内,因此提高Lucene查询性能的关键在于如何维护和使用同一个IndexReader(即IndexSearcher)。
lucene文件结构
- 博客分类:
- lucene
1.索引块文件
这个文件包含了索引中的索引块信息,这个文件包含了每个索引块的名字以及大小等信息。表 2 显示了这个文件的结构信息。
表2:索引块文件结构
表2:索引块文件结构
2.域信息文件
我们知道,索引中的文档由一个或者多个域组成,这个文件包含了每个索引块中的域的信息。表 3 显示了这个文件的结构。
表3:域信息文件结构
表3:域信息文件结构
3.索引项信息文件
这是索引文件里面最核心的一个文件,它存储了所有的索引项的值以及相关信息,并且以索引项来排序。表 4 显示了这个文件的结构。
表4:索引项信息文件结构
表4:索引项信息文件结构
4.频率文件
这 ...
IndexWriter的参数设定
- 博客分类:
- lucene
1.合并因子(mergeFactor)
这个参数决定了在 Lucene 的一个索引块中可以存放多少文档以及把磁盘上的索引块合并成一个大的索引块的频率。比如,如果合并因子的值是 10,那么当内存中的文档数达到 10 的时候所有的文档都必须写到磁盘上的一个新的索引块中。并且,如果磁盘上的索引块的隔数达到 10 的话,这 10 个索引块会被合并成一个新的索引块。这个参数的默认值是 10,如果需要索引的文档数非常多的话这个值将是非常不合适的。对批处理的索引来讲,为这个参数赋一个比较大的值会得到比较好的索引效果。
2.最小合并文档数
这个参数也会影响索引的性能。它决定了内存中的文档数至少达到多少才能 ...
struct2执行流程
- 博客分类:
- struct2
(1)客户端提交一个HttpServletRequest请求(.action或JSP页面)
(2)请求被提交到一系列Filter过滤器,如ActionCleanUp和FilterDispatcher等
(3)FilterDispatcher是Struts2控制器的核心,它通常是过滤器链中的最后一个过滤器
(4)请求发到FilterDispatcher后,FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个Request(一般根据URL后缀是否为.action来判断)
(5)如果ActionMapper决定需要调用某个Action,FilterDisp ...
策略模式,把算法的实现和处理逻辑进行分离,选定特定的算法实现,将其填到context中去,然后由context来调用这个算法进行处理(处理流程对每个算法都是等同的)这样客户端只要持有一个context实例,然后为它设定相应的策略算法就可以了,如此可以方便添加不同的算法实现(典型应用:商城打折)
在具体应用中,很可能会出现,不同的策略算法所需要的数据个数及类型不相同,有两种常用的扩展方法,
1:扩展上下文,把数据都传到上下文的环境里,这样策略算法直接到上下文中去取,但这样可能会对那些特定算法所需要的数据造成浪费。
2:把某个策略算法额外需要的数据,直接由客户端传给策略算法,这样的坏处是数据的获取不 ...
工厂设计模式与普通的继承跟本区别在于工厂设计模式中的功能方法会用到没有实现的抽象方法所返回的结果,在工厂方法模式里面,客户端要么使用Creator对象,要么使用Creator创建的对象,一般客户端不直接使用工厂方法
工厂方法模式和IoC/DI的思想是相似的,都是“主动变被动”,进行了“主从换位”,从而获得了更灵活的程序结构。只是在被动获取资源的方式上不同,IoC/DI是通过set的方式注入,而工厂方法模式则延迟到子类实现时区提供资源。
1:简单工厂(Simple Factory)。
又叫静态工厂,主要有一个静态方法,用来接受参数,并根据参数来决定返回实现同一接口的不同类的实例。比较难扩展,如果 ...