Java部分
1、有个List中存储了Person类型的对象,请用代码删除List中Person对象的kind属性大于“A”或“a”的所有对象
答:
public void remove(List persons){
for(int i=0;i<persons.size();i++){
Person p = (Person)persons.get(i);
String str = p.getkind();
if("A".compareTo(str)<0/*||"a".compareTo(str)<0*/){
System.out.println(str);
i--;
persons.remove(p);
}
}
}
2、请写出下面程序1到5的执行顺序和程序输出结果:
class Singleton{
1)private static Singleton obj = new Singleton();
2)public static int counter1 = 5;
3)public static int counter2 = 8;
4)private Singleton(){
counter1++;
counter2++;
}
5)public static Singleton getInstance(){
return obj;
}
}
public class MyMain {
public static void main(String[] args) {
Singleton obj = Singleton.getInstance();
System.out.println("obj.counter1 = "+obj.counter1);
System.out.println("obj.counter2 = "+obj.counter2);
}
}
答:执行顺序 1)----4)----2)----3)---5)
输出结果: obj.counter1 = 1
obj.counter2 = 1
3、请解释什么是MVC模式,请用一种你熟悉的框架解释他们是怎么实现MVC模式的。比如:Struts
MVC 通过将问题分为三个类别来帮助解决单一模块方法所遇到的某些问题:
· Model(模型)
模型包含应用程序的核心功能。模型封装了应用程序的状态。有时它包含的唯一功能就是状态。它对视图或控制器一无所知。
· View(视图)
视图提供模型的表示。它是应用程序的外观。视图可以访问模型的读方法,但不能访问写方法。此外,它对控制器一无所知。当更改模型时,视图应得到通知。
· Controller(控制器)
控制器对用户的输入作出反应。它创建并设置模型。
Struts,MVC 2 的一种实现
Struts 是一组相互协作的类、servlet 和 JSP 标记,它们组成一个可重用的 MVC 2 设计。这个定义表示 Struts 是一个框架,而不是一个库,但 Struts 也包含了丰富的标记库和独立于该框架工作的实用程序类。图 5 显示了 Struts 的一个概览。
图 5. Struts 概览
Struts 概览
· Client browser(客户浏览器)
来自客户浏览器的每个 HTTP 请求创建一个事件。Web 容器将用一个 HTTP 响应作出响应。
· Controller(控制器)
控制器接收来自浏览器的请求,并决定将这个请求发往何处。就 Struts 而言,控制器是以 servlet 实现的一个命令设计模式。struts-config.xml 文件配置控制器。
· 业务逻辑
业务逻辑更新模型的状态,并帮助控制应用程序的流程。就 Struts 而言,这是通过作为实际业务逻辑“瘦”包装的 Action 类完成的。Model(模型)的状态
模型表示应用程序的状态。业务对象更新应用程序的状态。ActionForm bean 在会话级或请求级表示模型的状态,而不是在持久级。JSP 文件使用 JSP 标记读取来自 ActionForm bean 的信息。
· View(视图)
视图就是一个 JSP 文件。其中没有流程逻辑,没有业务逻辑,也没有模型信息 -- 只有标记。标记是使 Struts 有别于其他框架(如 Velocity)的因素之一。
4、说出ArrayList,Vector,LinkedList的存储性能和特性
答:ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
5、分别列出List,Set,Map的两个实现类,并说明这两个实现类的不同之处
答:
Lis:ArrayList与Vector
一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
Set:HashSet与TreeSet
一. HashSet实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证集合的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
二. TreeSet实现 Set 接口,该接口由 TreeMap 实例支持。此类保证排序后的 set 按照升序排列元素,根据使用的构造方法不同,可能会按照元素的自然顺序 进行排序,或按照在创建 set 时所提供的比较器进行排序。
Map: HashMap与HashTable。
一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现
二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的,由于非线程安全,效率上可能高于Hashtable。
三.值:只有HashMap可以让你将null作为一个表的条目的key或value
6、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型
7、JSP的内置对象及方法。
答:
1).request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几
个用于获取cookie, header, 和session数据的有用的方法。
2).response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方
法(如cookies,头信息等)
3). out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送
输出结果。
4). pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的
名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。
5).session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态
信息
6).applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和
servlet环境的信息
7). config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化
参数。
8).page表示从该页面产生的一个servlet实例
9).exception 针对错误网页,未捕捉的例外