java面试题含(答案)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

面试题
1. 面向对象的特征,具体描述
1.抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。

抽象包括两个方面,一是过程抽象,二是数据抽象。

2.继承:
继承是一种类的层次模型,允许和鼓励类的重用,它提供了一种明确表述共性的方法。

客观事物既有共性,也有特性。

如果只考虑事物的共性,而不考虑事物的特性,就不能反映出客观世界中事物之间的层次关系。

抽象机制是考虑事物的共性,继承机制是考虑事物的特性,这样才能完整地描述客观世界的层次关系。

继承能使软件模块具有可重用性、独立性,缩短软件开发周期,提高软件开发效率,同时使软件易于维护。

3.封装:
封装是把过程和数据包围起来,没必要直接去操作对象属性,只要调用这些方法就可以实现要完成的任务,这种现象称为封装,它把对象
属性封装在一个对象内部,对象与外界打交道全部通过其自身的方法来实现,有效的把对象属性隐藏在对象内部。

但是如果一味地强调封装,对象的任何属性都不允许外部直接存取,则要增加许多没有其他意义、只负责读或写的行为。

这会为编程工作增加负担,增加运行开销,并且使程序显得臃肿。

为了避免这一点,在程序的具体实现过程中应使对象有不同程度的可见性,进而与客观世界的具体情况相符合。

4. 多态性:
多态性是指在一个程序中同名的不同方法共存的情况(类继承中父类和子类中可以有多个同名但不同意义或实现方式的属性和方法),允许不同类的对象对同一消息作出不同响应。

2. 说出Servlet的生命周期,并说出Servlet和CGI的区别
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service 方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI 对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

3. 说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,V ector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快
4. EJB是基于哪些技术实现的?并说出SessionBean和EntityBean
的区别,StatefulBean和StatelessBean的区别。

5. HashMap和Hashtable的区别。

6. final, finally, finalize的区别
1. final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

(注意:如果是基本类型,说明变量本身不能改变;如果是引用类型,说明它不能指向其他的对象了,但对象还是可以改变的。


2. finally是异常处理语句结构的一部分,表示无论是否出现异常总是执行。

3. finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

7. sleep() 和 wait() 有什么区别?
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。

调用sleep不会释放对象锁。

wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,
进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

8. Overload和Override的区别。

Overloaded的方法是否可以改变返回值的类型?
override(重写)
1、方法名、参数、返回值相同。

2、子类方法不能缩小父类方法的访问权限。

3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。

4、存在于父类和子类之间。

5、方法被定义为final不能被重写。

overload(重载)
1、参数类型、个数、顺序至少有一个不相同。

2、不能重载只有返回值不同的方法名。

3、存在于父类和子类、同类中。

override表示“重写”,用于继承一个基类的时候,基类当中虚拟成员的实现。

overload表示“重载”,用于同一类中同名方法但参数个数或类型不同的实现,也就是让方法有不同签名的版本。

9. 同步和异步有何异同,在什么情况下分别使用他们?举例说明。

10. abstract class和interface有什么区别?
abstract class和interface有什么区别?声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。

不能创建abstract 类的实例。

然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。

不能有抽象构造函数或抽象静态方法。

Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。

取而代之,在子类中实现该方法。

知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。

在接口中,所有方法都是抽象的。

多继承性可通过实现这样的接口而获得。

接口中的所有方法都是抽象的,没有一个有程序体。

接口只可以定义static final成员变量。

接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。

当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。

然后,它可以在实现了该接口的类的任何对象上调用接口的方法。

由于有抽象类,它允许使用接口名作为引用变量的类型。

通常的动态联编将生效。

引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

11. forward 和redirect的区别
forward是服务器内部重定向,程序收到请求后重新定向到另一个程序,客户机并不知道;redirect则是服务器收到请求后发送一个状态头给客户,客户将再请求一次,这里多了两次网络通信的来往。

当然forward也有缺点,就是forward的页面的路径如果是相对路径就会有些问题了。

forward 会将 request state , bean 等等信息带往下一个 jsp redirect 是送到 client 端后再一次 request , 所以资料不被保留.
12. EJB与JA V A BEAN的区别?
Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。

但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。

Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。

Enterprise Java Bean 相当于DCOM,即分布式组件。

它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。

但EJB 必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。

EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。

客户通过容器来访问真正的EJB组件。

13. JSP中动态INCLUDE与静态INCLUDE的区别?
用jsp:include动作实现 <jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。

静态INCLUDE
用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>
14. 什么时候用assert
15. 应用服务器有那些?
Microsoft IIS,IBM WebSphere,BEA WebLogic,Apache,Tomcat
16. 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口可以继承接口。

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

17. 说出数据连接池的工作机制是什么?
J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。

客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。

如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。

当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

18. 分页是我们在做项目的时候经常会遇到的技术点之一,分页技术从设计的角度考虑主要分为两大类:
1.基于缓存的分页实现
2.基于数据库查询的分页实现
两者在使用上各有优缺点:
分页机制有两种方式:基于缓存的和基于查询的。

基于缓存:把数据库中查询的结果存储起来,可以是HTTP Session、Stateful Session Bean或自定义的一个缓存机制。

下次请求产生的
页面数据就从缓存中而不是数据库中取得,对于少量的数据和重复的查询,将非常有用。

缺点就是当结果集很大时,会占用大量的内存,长时间的进行查询,进而连接超时,长时间占据数据库连接和session资源。

基于查询:不使用缓存,直接从数据库中取得所需的数据,但请求的响应时间将变长。

所以,大多数情况是混合使用两种方法,设定缓存的大小,维护少量的缓存数据,使用数据连接池,利用高效的查询得到数据。

19. JA V A中文乱码解决方案
javax.servlet.Filter
20.表单提交中get和post方式的区别
1. get是从服务器上获取数据,post是向服务器传送数据。

2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。

post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。

用户看不到这个过程。

3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

4. get传送的数据量较小,不能大于2KB。

post传送的数据量较大,一般被默认为不受限制。

但理论上,IIS4中最大量为80KB,IIS5中为100KB。

5. get安全性非常低,post安全性较高。

21.String常用的函数
Java中String提供的常用操作函数:
char charAt(int index)
返回指定索引处的char值。

int compareTo(String anotherString)
按字典顺序比较两个字符串。

int compareToIgnoreCase(String str)
不考虑大小写,按字典顺序比较两个字符串。

String concat(String str)
将指定字符串联到此字符串的结尾。

static String copyValueOf(char[] data)
返回指定数组中表示该字符序列的字符串。

static String copyValueOf(char[] data, int offset, int count) 返回指定数组中表示该字符序列的字符串。

boolean endsWith(String suffix)
测试此字符串是否以指定的后缀结束。

boolean equals(Object anObject)
比较此字符串与指定的对象。

boolean equalsIgnoreCase(String anotherString)
将此 String 与另一个 String 进行比较,不考虑大小写。

int indexOf(int ch)
返回指定字符在此字符串中第一次出现处的索引。

int indexOf(int ch, int fromIndex)
从指定的索引开始搜索,返回在此字符串中第一次出现指定字符处的索引。

int indexOf(String str)
返回第一次出现的指定子字符串在此字符串中的索引。

int indexOf(String str, int fromIndex)
从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。

String intern()
返回字符串对象的规范化表示形式。

int lastIndexOf(int ch)
返回最后一次出现的指定字符在此字符串中的索引。

int lastIndexOf(int ch, int fromIndex)
从指定的索引处开始进行后向搜索,返回最后一次出现的指定字符在此字符串中的索引。

int lastIndexOf(String str)
返回在此字符串中最右边出现的指定子字符串的索引。

int lastIndexOf(String str, int fromIndex)
从指定的索引处开始向后搜索,返回在此字符串中最后一次出现的指定子字符串的索引。

int length()
返回此字符串的长度。

String replace(char oldChar, char newChar)
返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有oldChar 而生成的。

boolean startsWith(String prefix)
测试此字符串是否以指定的前缀开始。

boolean startsWith(String prefix, int toffset)
测试此字符串是否以指定前缀开始,该前缀以指定索引开始。

String substring(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。

String substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。

char[] toCharArray()
将此字符串转换为一个新的字符数组。

String toLowerCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为小写。

String toLowerCase(Locale locale)
使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。

String toUpperCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为大写。

String trim()
返回字符串的副本,忽略前导空白和尾部空白。

static String valueOf(boolean b
22.struts原理
23. page、request、session、application作用域
24.解释spring,struts,hibernate优缺点
25.文件上传原理
26. 几种排序方式,写出快速排序
27. jdbc中PreparedStatment与Statement区别
Statement对象代表一个静态SQL语句,只能执行一次.
PreparedStatement对象代表一个预编译的SQL语句,可以被多次执行,效率更高.
PreparedStatement可以防止SQL注入
28. Collection与Collections区别
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

29.说明Collection的framework机制
30.写单例模式
public class Singleton {
static class SingletonHolder {
static Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
31. 求n的阶乘
32. xml有哪些解析技术?区别是什么?
xml有哪些解析技术?区别是什么?
Answer:
有DOM,SAX,STAX等
(1):DOM:处理大型文件时其性能下降的非常厉害。

这个问题是由DOM的树结构所
造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问
(2):SAX:不现于DOM,SAX是事件驱动型的XML解析方式。

它顺序读取XML文件,不需要一次全部装载整个文件。

当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问
(3):STAX: STAX:Streaming API for XML (StAX)
33.分别写出几种不同数据库的连接语句,还有给几张表,写查询
34. Class.forName的作用?为什么要用?
35. 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。

写出程序。

相关文档
最新文档