J2EE面试题

6、说出Servlet的生命周期,并说出Servlet和CGI的区别。

Servlet在被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法派遣调用对应的doGet/doPost方法,服务器觉得将实例销毁的时候调用destroy方法。 

servlet采用多线程方式运行service方法,一个实例可以服务于多个请求,而cgi对每个请求都要产生新的进程,服务完后销毁,效率低于servlet

参见 http://blog.csdn.net/fly_way/article/details/6752821

7.说出ArrayList,Vector, LinkedList的存储性能和特性

ArrayList ,Vector都是以数组方式实现,查找速度较快,插入速度较慢,Vector线程安全,速度相对ArrayList慢。LinkedList采用双向链表实现存储,查找较慢,插入较快。

11、HashMap和Hashtable的区别。 
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

12. final finally finalize的区别

final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 finally 是异常处理语句结果的一部分,表示总是执行。finalize是Object类的一个方法,在垃圾回收时调用被回收对象的此方法,可以覆盖此方法提供垃圾回收时的其他资源的回收,例如文件关闭。

16.同步和异步有何异同,什么情况下分别使用它们?

如果数据在线程间共享,例如正在写的数据可能会被其他线程读到,或者正在读的线程可能已经被其他线程写过,那么需要共享数据,进行同步存取。

当程序在对象上调用了一个需要花费很长时间的方法,并且不希望程序等待方法返回数据时,可以使用异步存取,提高效率。

17。抽象类与接口

抽象类是只声明方法不实现方法的类,用于创建一个具有某些基本行为的类,并为其声明方法。同时,抽象类不能实例化,但可以创建一个抽象类的对象,并引用一个具体子类的实例。不能有抽象构造函数和抽象静态方法。抽象类的子类需要实现父类的抽象方法,否则也是抽象类。

接口是抽象类的变体,在接口中所有方法都是抽象的,接口只能定义 final static 成员变量。一个类可以实现多个接口,多个类可以实现相同的接口。接口的命名是在类名前面加'I'.

19.forward redirect的区别

forward是服务器直接访问目标地址url,把响应内容读过来再发送给浏览器,浏览器不知道服务器发送的内容从哪里来,所以浏览器的地址栏上地址是不变的。

redirect是服务器根据逻辑,发送一个状态码告诉浏览器去重新请求另外一个url,浏览器会用到原请求中所有参数,所以session,request都可以获取。

22.jsp中的静态和动态Include的区别。

动态include使用<jsp:include page="include.jsp" flush="true" />它总是检查所含文件中的变化,适用于动态页面,并可以带参数

静态include使用<%@ include file="include.html" %> 不会检查文件的变化,使用于静态页面。

24.GC是什么?为何要有GC?

GC(Gabage Collection)是垃圾收集的意思,用于自动检测对象是否超过作用域从而达到自动回收的目的(用的是DAG的方法)

32、应用服务器有那些?

 Apache Tomcat       BEA WebLogic Server       IBM WebSphere Application Server         Oracle9i Application Server         jBoss

33、给我一个你最常见到的runtime exception

NullPointerException   ClassCastException   IndexOutOfBoundsException    IllegalArgumentException    

34、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

36、说出数据连接池的工作机制是什么?
J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其标记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接标记为空闲,其他调用就可以使用这个连接。

原文地址:https://www.cnblogs.com/elenno/p/java_interview.html