- 浏览: 216894 次
- 性别:
- 来自: 北京
文章列表
RMI是实现将服务暴露给远程的一种手段,通过RMI可以实现应用的跨服务器,跨JVM的方法活对象的调用。
首先实现RMI服务器端
创建远程方法调用参数类
package com.spring.pojo;
import java.io.Serializable;
/**
* 该类主要用于RMI参数的传递
* ...
在java2中完成定时调度是基于Timer(启动定时器)和TimerTask(定义执行任务)来完成的。
但是功能比较局限。spring支持Quartz。
首先看一下非spring情况下使用Quartz的实例
首先定义一个实现StatefulJob接口的类,该类表示定时器的执行的任务。
public class WeatherCaptureJob implements StatefulJob {
public void execute(JobExecutionContext context)
throws JobExecutionException {
/ ...
1、使用java.util.Properties类的load()方法
示例: InputStream in = lnew BufferedInputStream(new FileInputStream(name));
Properties p = new Properties();
p.load(in);
2、使用java.util.ResourceBundle类的getBundle()方法
示例: ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());
3、使用java.util.Propert ...
1.window.location.search方法
该方法主要用于截获地址栏上?和以后的部分。如http://xxx.com?type=man,使用window.location.search得到的结果就是?type=man.
2.substr(start,[length])方法
length参数是可选的。start是从0开始算起,如对于hello world,使用substr(1)的结果为ello world
3.split(separator,[howmany])方法
howmany参数是可选的,用于指定长度。separator参数既可以是字符串也可以是正则表达式。例如
获取单词:str. ...
1.创建正则表达式的两种方式
第一种方法:
var reg = /pattern/;
第二种方法:
var reg = new RegExp('pattern');
2.调用正则表达式的3种方法
第一种方法:
reg.exec(str);//返回的是匹配的内容
第二种方法:
str.match(reg);//返回的是匹配的内容,返 ...
WebAppClassLoader装载器装作文件的范围:
会加载WEB-INF/lib/*和WEB-INF/classes/*
如果加载失败会交给上级AppClassLoader进行加载。
AppClassLoader装载器装作文件的范围:
加载的顺序为
JRE\lib\* => JRE\lib\ext\* => JRE\classes\* => CLASSPATH\*
如果加载失败会再交给上层斤进行加载。
Tomcat负责Web应用的类加载的是org.apache.catalina.loader.WebappClassLoader,它有几个比较重要的方法:findClass ...
AbstractList中为了实现顺序访问AbstractList中的元素,而又隐含AbstractList内部结构使用了Iterator的模式。
实现如下:
首先AbstractList类提供了
public Iterator<E> iterator() {
return new Itr();
}访问方法。
然后Iterator的实现类是用一个内部类实现。
private class Itr implements Iterator<E> {
int cursor = 0;
*
*
.......
}
这样内部类就可以直接访问外部类AbstractList的成员变 ...
情景1.当借个类都拥有一个相似的方法时,可以考虑为这些类定义一个接口,然后就可以考虑使用命令模式,将这接口注入到一个命令中,在命令中进行调用注入对象的这个方法。如果含有多个命令,可以将命令抽象出来一个接 ...
我个人常叫它游标模式,该模式的主要目的就是,顺序访问集合中的各个对象,而又不暴露该对象的内部表示。
使用场景:针对一个集合或是封装了集合的对象,对外界需要提供一个访问该集合或是该集合封装对象的保存的元素时,同时又不希望暴露该集合的内部结构。并且希望支撑根据不同的需求对集合元素进行不同的遍历。
主要的思想就是将集合与集合的遍历操作进行分离。即集合元素负责添加对象和删除对象等等。而遍历操作交给另一个对象。因此很容易想像到使用了组合,即将集合注入到Iterator的实现类当中。
实例:
public class BookShelf implements Aggregate {
private ...
1.抽象工厂模式
实例1:
public static Calendar getInstance()
{
Calendar cal = createCalendar(TimeZone.getDefaultRef(),Locale.getDefault());
cal.sharedZone = true;
return cal;
}
Calendar类将构造方法进行私有话,这样获取对象实例只能 ...
创建类对象虽然可以使用new(底层也是通过反射创建对象的),但是在一些情况下使用工厂模式确实最合适的。
情况一:如果一个对象拥有很多子类,那么创建该对象的子类使用工厂模式是最合适的,不但可以面向接口的编程,为维护以及开发带来方便。
情况二:如果创建某个对象时需要进行许多额外的操作,如查询数据库然后将查询到的值赋予要创建的对象(单例初始化时使用比较多),或是需要许多额外的赋值等等。如果查看JDK源码中,会发现许多成员变量在对象构造时,通过工厂方法进行创建的。因为这些成员变量本身的创建也很复杂。不可能创建对象时,在该对象的构造方法里创建成员变量然后再赋值给该成员变量。而且使用工厂模式也提高了代码的重 ...
实现数据在多线程之间的共享:
因为线程的成员变量是各个该线程实例之间是共享的,所以可以将开变量放到实现Runnable接口的实现类中。充当成员变量。这样可以使用同一个Runnable创建多个线程。据说买票系统就是这么做的。(这种是线程的代码相同,所以才考虑使用同一个Runnable的)
如果必须要使用不同的线程,可以将变量封装成负责对象传入到不同是线程中充当成员变量。
当然也可以考虑使用内部类的方式实现线程之间的数据共享,即将共享数据定义成外部类的成员变量,而将操作线程定义成不同的内部类,这样内部线程类就可以操作外部共享数据了
LRU算法是指最近最少使用算法,该算法最早使用在操作系统的内存管理上,由于访问磁盘和访问内存速度差距非常大,为了尽量去迎合cpu的处理速度,提出了cache的思想,但是内存是有限的,因此提出了LRU算法,即将最近最少使用的数据放入LRU中,然后将位于LRU中的数据从内存中清除。
目前非常多的软件使用该算法,包括ORACLE、memcached等等。
ThreadLocal是实现线程范围内的数据共享,即不同线程获取的数据不同。
ThreadLocal只是保存一个变量的,如果要让2个变量实现范围内的共享。就要定义2个ThreadLocal,如果是多个变量,可以将这些变量封装到对象当中,然后将对象放入一个Threadlocal中。
ThreadLocal的原理就是内部是一个map,map的key存放的是线程的名称。值存放的是自己要保存的变量。
通常ThreadLocal类放到一个类中,用于保存该对象的实例。当其他类调用这个类的方法时(静态的)就从这个类的threadLocal变量中返回当前线程绑定的对象实例。如果没有就创建一个,然后再放入Thr ...