Java面试宝典精华版新Word格式文档下载.docx

上传人:b****7 文档编号:22825963 上传时间:2023-02-05 格式:DOCX 页数:68 大小:65.09KB
下载 相关 举报
Java面试宝典精华版新Word格式文档下载.docx_第1页
第1页 / 共68页
Java面试宝典精华版新Word格式文档下载.docx_第2页
第2页 / 共68页
Java面试宝典精华版新Word格式文档下载.docx_第3页
第3页 / 共68页
Java面试宝典精华版新Word格式文档下载.docx_第4页
第4页 / 共68页
Java面试宝典精华版新Word格式文档下载.docx_第5页
第5页 / 共68页
点击查看更多>>
下载资源
资源描述

Java面试宝典精华版新Word格式文档下载.docx

《Java面试宝典精华版新Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Java面试宝典精华版新Word格式文档下载.docx(68页珍藏版)》请在冰豆网上搜索。

Java面试宝典精华版新Word格式文档下载.docx

14、面向对象的特征有哪些方面8

15、java中实现多态的机制是什么?

9

16、abstractclass和interface有什么区别?

10

17、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

11

18、什么是内部类?

StaticNestedClass和InnerClass的不同。

19、内部类可以引用它的包含类的成员吗?

有没有什么限制?

13

20、String 

"

Hello"

;

 

world!

这两行代码执行后,原始的String对象中的内容到底变了没有?

14

21、Strings=newString("

xyz"

);

创建了几个StringObject?

二者之间有什么区别?

15

22、String和StringBuffer的区别15

23、try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?

16

24、final,finally,finalize的区别。

17

25、运行时异常与一般异常有何异同?

26、error和exception有什么区别?

27、Java中的异常处理机制的简单原理和应用。

28、JAVA语言如何进行异常处理,关键字:

throws,throw,try,catch,finally分别代表什么意义?

在try块中可以抛出异常吗?

18

29、java中有几种方法可以实现一个线程?

用什么关键字修饰同步方法?

stop()和suspend()方法为何不推荐使用?

29、sleep()和wait()有什么区别?

19

30、同步和异步有何异同,在什么情况下分别使用他们?

举例说明。

22

31、多线程有几种实现方法?

同步有几种实现方法?

32、线程的基本概念、线程的基本状态以及状态之间的关系22

33、简述synchronized和java.util.concurrent.locks.Lock的异同?

23

34、介绍Collection框架的结构25

35、Collection框架中实现比较要实现什么接口25

36、List和Map区别?

25

37、List、Map、Set三个接口,存取元素时,各有什么特点?

38、说出ArrayList,Vector,LinkedList的存储性能和特性26

39、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?

是用==还是equals()?

它们有何区别?

26

40、你所知道的集合类都有哪些?

主要方法?

41、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常!

27

42、字节流与字符流的区别28

43、什么是java序列化,如何实现java序列化?

或者请解释Serializable接口的作用。

30

44、描述一下JVM加载class文件的原理机制?

45、heap和stack有什么区别。

46、GC是什么?

为什么要有GC?

31

47、垃圾回收器的基本原理是什么?

垃圾回收器可以马上回收内存吗?

有什么办法主动通知虚拟机进行垃圾回收?

48、java中会存在内存泄漏吗,请简单描述。

二.Javaweb部分34

1、HTTP请求的GET与POST方式的区别34

2、解释一下什么是servlet;

34

3、说一说Servlet的生命周期?

35

4、SERVLETAPI中forward()与redirect()的区别?

5、forward和redirect的区别35

6.jsp有哪些内置对象?

作用分别是什么?

分别有什么方法?

7、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

36

8、MVC的各个部分都有那些技术来实现?

如何实现?

三.数据库部分37

1、存储过程与触发器必须讲,经常被面试到?

37

2、数据库三范式是什么?

39

3、说出一些数据库优化方面的经验?

4、union和unionall有什么不同?

40

5.分页语句42

6.xxx公司的sql面试44

四.XML部分45

1、xml有哪些解析技术?

区别是什么?

45

五.j2ee部分45

1、BS与CS的联系与区别。

2、应用服务器与WEBSERVER的区别?

47

3、四种会话跟踪技术47

4、美资软件公司JAVA工程师电话面试题目47

一.Java基础部分

基础部分的顺序:

基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法。

可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。

并且编译器会为每个类编译相应的.class类文件。

透彻深入、实际经验丰富。

在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break语句,即可跳出外层循环。

例如,

ok:

for(inti=0;

i<

10;

i++){

for(intj=0;

j<

j++){

System.out.println(“i=”+i+“,j=”+j);

if(j==5)breakok;

}

}

另外,我个人通常并不使用标号这种方式,而是让外层的循环条件表达式的结果可以受到里层循环体代码的控制,例如,要在二维数组中查找到某个数字。

intarr[][]={{1,2,3},{4,5,6,7},{9}};

booleanfound=false;

for(inti=0;

arr.length&

&

!

found;

arr[i].length;

j++){

if(arr[i][j]==5){

found=true;

break;

}

在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。

显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。

char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。

不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。

补充说明:

unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。

备注:

后面一部分回答虽然不是在正面回答题目,但是,为了展现自己的学识和表现自己对问题理解的透彻深入,可以回答一些相关的知识,做到知无不言,言无不尽。

使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。

例如,对于如下语句:

final 

StringBuffer 

a=new 

StringBuffer("

immutable"

执行如下语句将报告编译期错误:

但是,执行如下语句则可以通过编译:

a.append("

broken!

有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进来的参数对象:

publicvoidmethod(finalStringBufferparam){

实际上,这是办不到的,在该方法内部仍然可以增加如下代码来修改参数对象:

param.append("

a"

(单独把一个东西说清楚,然后再说清楚另一个,这样,它们的区别自然就出来了,混在一起说,则很难说清楚)

==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。

如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Objetobj=newObject();

变量obj是一个内存,newObject()是另一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。

对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用equals操作符进行比较。

equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。

例如,对于下面的代码:

String 

String("

foo"

b=new 

两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。

在实际开发中,我们经常要比较传递进行来的字符串内容是否等,例如,Stringinput=…;

input.equals(“quit”),许多人稍不注意就使用==进行比较了,这是错误的,随便从网上找几个项目实战的教学视频看看,里面就有大量这样的错误。

记住,字符串的比较基本上都是使用equals方法。

如果一个类没有自己定义equals方法,那么它将继承Object类的equals方法,Object类的equals方法的实现代码如下:

boolean 

equals(Object 

o){

return 

this==o;

}

这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从Object类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回false。

如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。

在语法定义上的区别:

静态变量前要加static关键字,而实例变量前则不加。

在程序运行时的区别:

实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。

静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。

总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个staticVar变量,并且每创建一个实例对象,这个staticVar就会加1;

但是,每创建一个实例对象,就会分配一个instanceVar,即可能分配多个instanceVar,并且每个instanceVar的值都只自加了1次。

publicclassVariantTest{

publicstaticintstaticVar=0;

publicintinstanceVar=0;

publicVariantTest(){

staticVar++;

instanceVar++;

System.out.println(“staticVar=”+staticVar+”,instanceVar=”+instanceVar);

这个解答除了说清楚两者的区别外,最后还用一个具体的应用例子来说明两者的差异,体现了自己有很好的解说问题和设计案例的能力,思维敏捷,超过一般程序员,有写作能力!

不可以。

因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。

也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?

这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。

1.if(username.equals(“abc”){}

2.intx=1;

returnx==1?

true:

false;

1.字符串username可能为空值会抛出NullPointerException,所有最好写成“zxx”.equals(username)这样的话不管username是否为空都不会抛出NullPoninterException

2.定义的时候x为整数可以在返回指的时候返回的却是布尔类型,所有会抛出类型不匹配异常。

10、请说出作用域public,private,protected,以及不写时的区别

这四个作用域的可见范围如下表所示。

说明:

如果在修饰的元素上面没有写任何访问修饰符,则表示default。

作用域当前类同一package子孙类不同package

PublicTTTT

ProtectedTTTF

DefaultTTFF

PrivateTFFF

注:

只要记住了有4种访问权限,4个访问范围,然后将全选和范围在水平和垂直方向上分别按排从小到大或从大到小的顺序排列,就很容易画出上面的图了。

Overload是重载的意思,Override是覆盖的意思,也就是重写。

重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。

重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。

子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。

子类方法的访问权限只能比父类的更大,不能更小。

如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。

至于Overloaded的方法是否可以改变返回值的类型这个问题,要看你倒底想问什么呢?

这个题目很模糊。

如果几个Overloaded的方法的参数列表不一样,它们的返回者类型当然也可以不一样。

但我估计你想问的问题是:

如果两个方法的参数列表完全一样,是否可以让它们的返回值不同来实现重载Overload。

这是不行的,我们可以用反证法来说明这个问题,因为我们有时候调用一个方法时也可以不定义返回结果变量,即不要关心其返回结果,例如,我们调用map.remove(key)方法时,虽然remove方法有返回值,但是我们通常都不会定义接收返回结果的变量,这时候假设该类中有两个名称和参数列表完全相同的方法,仅仅是返回类型不同,java就无法确定编程者倒底是想调用哪个方法了,因为它无法通过返回结果类型来判断。

override可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。

对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。

除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。

在覆盖要注意以下的几点:

1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;

2、覆盖的方法的返回值必须和被覆盖的方法的返回一致,jdk1.5之后还可以使协变类型;

3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;

4、被覆盖的方法不能为private,final,static修饰,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

overload对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM就会根据不同的参数样式,来选择合适的方法执行。

在使用重载要注意以下的几点:

1、在使用重载时只能通过不同的参数样式。

例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int,float),但是不能为fun(int,int));

2、不能通过访问权限、返回类型、抛出的异常进行重载;

3、方法的异常类型和数目不会对重载造成影响;

4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。

构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload。

接口可以继承接口。

抽象类可以实现(implements)接口,抽象类是否可继承具体类。

抽象类中可以有静态的main方法。

如容器List容器接口和Set容器接口都继承了Collection接口,抽象类是一个类它基本上拥有类的所有特征(实现接口,继承类,方法),只不过抽象类和接口一样不能被实例话

只要明白了接口和抽象类的本质和作用,这些问题都很好回答,你想想,如果你是java语言的设计者,你是否会提供这样的支持,如果不提供的话,有什么理由吗?

如果你没有道理不提供,那答案就是肯定的了。

只有记住抽象类与普通类的唯一区别就是不能创建实例对象和允许有abstract方法。

14、面向对象的特征有哪些方面

计算机软件系统是现实生活中的业务在计算机中的映射,而现实生活中的业务其实就是一个个对象协作的过程。

面向对象编程就是按现实业务一样的方式将程序代码按一个个对象进行组织和编写,让计算机系统能够识别和理解用对象方式组织和编写的程序代码,这样就可以把现实生活中的业务对象映射到计算机系统中。

面向对象的编程语言有封装、继承、抽象、多态等4个主要的特征。

1封装:

封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响。

在面向对象的编程语言中,对象是封装的最基本单位,面向对象的封装比传统语言的封装更为清晰、更为有力。

面向对象的封装就是把描述一个对象的属性和行为的代码封装在一个“模块”中,也就是一个类中,属性用变量定义,行为用方法进行定义,方法可以直接访问同一个对象中的属性。

通常情况下,只要记住让变量和访问这个变量的方法放在一起,将一个类中的成员变量全部定义成私有的,只有这个类自己的方法才可以访问到这些成员变量,这就基本上实现对象的封装,就很容易找出要分配到这个类上的方法了,就基本上算是会面向对象的编程了。

把握一个原则:

把对同一事物进行操作的方法和相关的方法放在同一个类中,把方法和它操作的数据放在同一个类中。

例如,人要在黑板上画圆,这一共涉及三个对象:

人、黑板、圆,画圆的方法要分配给哪个对象呢?

由于画圆需要使用到圆心和半径,圆心和半径显然是圆的属性,如果将它们在类中定义成了私有的成员变量,那么,画圆的方法必须分配给圆,它才能访问到圆心和半径这两个属性,人以后只是调用圆的画圆方法、表示给圆发给消息而已,画圆这个方法不应该分配在人这个对象上,这就是面向对象的封装性,即将对象封装成一个高度自治和相对封闭的个体,对象状态(属性)由这个对象自己的行为(方法)来读取和改变。

一个更便于理解的例子就是,司机将火车刹住了,刹车的动作是分配给司机,还是分配给火车,显然,应该分配给火车,因为司机自身是不可能有那么大的力气将一个火车给停下来的,只有火车自己才能完成这一动作,火车需要调用内部的离合器和刹车片等多个器件协作才能完成刹车这个动作,司机刹车的过程只是给火车发了一个消息,通知火车要执行刹车动作而已。

抽象:

抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处,并且会忽略与当前主题和目标无关的那些方面,将注意力集中在与当前目标有关的方面。

例如,看到一只蚂蚁和大象,你能够想象出它们的相同之处,那就是抽象。

抽象包括行为抽象和状态抽象两个方面。

例如,定义一个Person类,如下:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1