java面试问题及答案_第1页
java面试问题及答案_第2页
java面试问题及答案_第3页
java面试问题及答案_第4页
java面试问题及答案_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

java面试问题及答案

java面试问题及答案「篇一」

Djava中能创建volatile数组吗?

能,Java中可以创建volatile类型数组,不过只培一个指向数组的引用,

而不是整个数组。我的意思是,如果改变引用指向的数组,将会受到volatile的

保护,但是如果多个线程同时改变数组的元素,volatile标示符就不能起到之前

的保护作用了。

2)volatile能使得一个非原子操作变成原子操作吗?

一个典型的例子是在类中有一个long类型的成员变量。如果你知道该成员变

量会被多个线程访问,如计数器、价格等,你最好是将其设置为volatile。为什

么?因为Java中读取long类型变量不是原子的,需要分成两步,如果一个线程

正在修改该long变量的值,另一个线程可能只能看到该值的一半(前32位)。但

是对一个volatile型的long或double变量的读写是原子。

3)volatil©修饰符的有过什么实践?

一种实践是用volatile修饰long和double变量,使其能按原子类型来读

写。double和long都是54位宽,因此对这两种类型的读是分为两部分的,第一

次读取第一个32位,然后再读剩下的32位,这个过程不是原子的,但Java中

volatile型的long或double变量的读写是原子的。volatile修复符的另一个

作用是提供内存屏障(memorybarrier),例如在分布式框架中的'应用。简单的

说,就是当你写一个volatile变量之前,Java内存模型会插入一个写屏障

(writebarrier),读一个volatile变量之前,会插入一个读屏障(read

barrier)o意思就是说,在你写一个volatile域时,能保证任何线程都能看到你

写的侑,同时,在写之前,也能保证任何数俏的更新对所有线程是可见的,因为内

存屏障会将其他所有写的值更新到缓存。

4)volatile类型变量提供什么保证?

volatile变量提供顺序和可见性保证,例如,JVM或者JIT为了获得更好的

性能会对语句重排序,但是volatile类型变量即使在没有同步块的情况下赋值也

不会与其他语句重排序。volatile提供happens-before的保证,确保一个线程

的修改能对其他线程是可见的。某些情况下,volatile还能提供原子性,如读64

位数据类型,像long和double都不是原子的,但volatile类型的double和

long就是原子的。

5)10个线程和2个线程的同步代码,哪个更容易写?

从写代码的角度来说,两者的复杂度是相同的,因为同步代码与线程数量是相

互独立的。但是同步策略的选择依赖于线程的数量,因为越多的线程意味着更大的

竞争,所以你需要利用同步技术,如锁分离,这要求更复杂的代码和专业知识。

6)你是如何调用wait方法的?使用if块还是循环?为什么?

wait方法应该在循环调用,因为当线程获取到CPU开始执行的时候,其他条

件可能还没有满足,所以在处理前,循环检测条件是否满足会更好。下面是一段标

准的使用wait和notify方法的代码:

//Thestandardidiomforusingthewaitmethod

synchronized(obj)I.

while(conditiondoesnothold)

obj.wait//(Releaseslock,andreacquiresonwakeup)

//Performactionappropriatetocondition

)

参见EffectiveJava第69条,获取更多关于为什么应该在循环中来调用

wait方法的内容。

7)什么是多线程环境下的伪共享(falsesharing)?

伪共享是多线程系统(每个处理器有自己的局部缓存;中一个众所周知的性能问

题。伪共享发生在不同处理器的上的线程对变量的修改依赖于相同的缓存行,如下

图所示:

java面试问题及答案「篇二」

Java提供了一个健壮的、面向对象的方法来处理出现异常,称为Java异常处

理。我以前写过一篇长文章来介绍Java异常处理,今天我将列出一些重要的

Java异常面试的问题及答案,希望对你们的面试有所帮助。

1.什么是Java异常

答:异常是发生在程序执行过程中阻碍程序正常执行的错误事件。比如:用户

输入错误数据、硬件故障、网络阻塞等都会导致出现异常。只要在Java语句执行

中产生了异常,一个异常对象就会被创建,JRE就会试图寻找异常处理程序来处理

异常。如果有合适的异常处理程序,异常对象就会被异常处理程序接管,否则,将

引发运行环境异常,JRE终止程序执行。Java异常处理棚架只能处理运行时错

误,编译错误不在其考虑范围之内。

2.Java异常处理中有哪些关键字?

答:

throw:有时我们需要显式地创建并抛出异常对象来终止程序的正常执行。

throw关键字用来抛出并处理运行时异常。

throws:当我们抛出任何“被检查的异常(checkedexception)"并不处理时,

需要在方法签名中使用关键字throws来告知调用程序此方法可能会抛出的异常。

调用方法可能会处理这些异常,或者同样用throws来将异常传给上一级调用方

法。throws关键字后可接多个潜在异常,甚至是在main中也可以使用throws。

Iry-catch:我们在代码中用try-catch块处理异常。当然,一个Iry块之后可

以有多个catch子句,try-catch块也能嵌套。每个catch块必须接受一个(且仅

有一个)代表异常类型的参数。

finally:finally块是可选的,并且只能配合try-catch一起使用。虽然异常

终止了程序的执行,但是还有一些打开的资源没有被美闭,因此,我们能使用

finally进行关闭。不管异常有没有出现,finally块总会被执行。

3.Java异常类有哪些的重要方法?

答:Exception和它的所有子类没有提供任何特殊方法供使用,它们的所有方

法都是来自其基类Throwableo

StringgctMcssag。:方法返回Throwable的String型信息,当异常通过构造

器创建后可用。

StringgeiLoucilizedMesbage:此方法通过被重写来得到用本地语言表示的异

常信息返回给调用程序。Throwable类通常只是用getMessage方法来实现返回异

常信息。

synchronizedThrowablegetCause:此方法返回异常产生的原因,如果不知道

原因的话返回null。(原文有拼写错误应该是if不是id)

StringtoString:方法返回String格式的Throwable信息,此信息包括

Throwable的名字和本地化信息。

voidprintStackTrace:该方法打印栈轨迹信息到标准错误流。该方法能接受

Printstream和PrintWritar作为参数实现重载,这样就能实现打印栈轨迹到文件

或流中。

4.描述Java7ARM(AutomaticResourceManagement,自动资源管理)特征和

多个catch块的使用

答:如果一个try块中有多个异常要被捕获,catch块中的代码会变丑陋的同

时还要用多余的代码来记录异常。有鉴于此,Java7的一个新特征是:一个catch

子句中可以捕获多个异常。示例代码如下:

catch(lOExceptionSQLExceptionExceptionex){

logger.error(ex);

thrownewMyException(ex.getMessage);

}

大多数情况F,当忘记关闭资源或因资源耗尽出现运行时异常时,我们只是用

finallyf句来关闭资源。这些异常很难调试,我们需要深入到资源使用的每一步

来确定是否已关闭。因此,Java7用try-with-resources进行了改进:在try子

句中能创建一个资源对象,当程序的执行完ti'y-catch之后,运行环境自动关闭资

源。下面是这方面改进的示例代码:

try(MyResourcemr=newMyResource){

System.out.printin('MyResourcecreatedintry-with-resources");

}catch(Exceptione){

e.printStackTrace

)

6.被检杳的异常和不受检杳的异常有什么区别?

答:

A.被检杳的异常应该用try-catch块代码处理,或者在main方法中用throws

关键字让JRE/解程序可能抛出哪些异常。不受检查的异常在程序中不要求被处理

或用throws语句告知。

B.Except,ion是所有被检查异常的基类.然而,Runt.imeRxcepl.ion是所有不受

检查异常的基类。

C.被检置的异常适用于那些不是因程序引起的错误情况,比如:读取文件时文

件不存在引发的FileNotFoimdException。然而,不被检查的异常通常都是由于糟

糕的编程引起的,比如:在对象引用时没有确保对象非空而引起的

NulIPointerExceptiono

7.在Java中throw与throws关键字之间的区别?

答:throws用于在方法签名中声明此方法可能抛出的异常,而throw关键字

则是中断程序的执行并移交异常对象到运行时进行处理。

8.在Java中怎么写自定义的异常?

答:我们能继承Exception类或其任何子类来实现自己的自定义异常类。这自

定义异常类可以有自己变量和方法来传递错误代码或其它异常相关信息来处理异

常。

下面是一个简单的自定义异常示例:

packagecom.journcildev.exceptions;

importjava.io.lOException;

publicclassMyExceptionextendslOException(

privatestaticfinallongserialVersionUID=4664456874499611218L;

privateStringerrorCode=,/Unknown_Exception/,;

publicMyException(Stringmessage,StringerrorCode)(

super(message);

this.errorCode=errorCode;

)

publicStringgetErrorCode{

returnthis.errorCode;

)

)

9.在Jdvct中什么是内存不足错误?

答:在Java中,OutOfMomoryError是java.lang.VirtualMachineError的一

个子类,当堆内存耗尽时会被JVM抛出。我们能通过设置Java选项来提供更大的

内存供应用使用来达到修复的目的。

$>javaMyProgram-Xms1024m-Xmx1024m-XX:PermSize=64M-

XX:MaxPermSize=256m

10.引发Exceptioninthreadmain的各种不同情形?

答:通常的一些主线程异常情形主要有以下几种:

Exceptioninthreadmainjava.lang.UnsupportedClassVersionError:

译和运行Java类的JDK版本不同的时出现这种异常。

Exceptioninthreadmainjava.lang.NoClassDofFoundError:这种异常出现

的原因有两种:第•种是提供类全名时附带有.class;第二种是指定类未找到。

Exceptioninthreadmainjava.lang.NoSuchMethodError:main:当试图运

行一个没main方法的类时会出现这种异常。

Exceptioninthreadmainjavci.king.NoSuchMethodError:main:无论何时

main方法任何异常,它打印异常到控制台。其第一部分是陈述main方法抛出的异

常,第二部分打印异常类名,后接异常类信息。

想了解更多这方面的内容,请猛点这里。

11.Java中final,finally,finalize的区别?

答:final和finally在Java中是关键字,而finalize则是一个方法。

final关键字使得类变量不可变,避免类被其它类继承或方法被重写。

finally跟try-catch块一起使用,即使是出现了异常,其子句总会被执行,通

常,finally子句用来关闭相关资源。finally方法中的对象被销毁之前会被垃圾

回收。

综上三者,只有finally用于异常处理。

12.在main方法抛出异常时发生了什么?

答:当main方法抛出异常时,Java运行时间终止并在控制台打印异常信息和

栈轨迹。

13.catch子句能为空吗?

答:可以有空的catch子句,但那是鼓糟糕的编程,因为那样的话,异常即使

被捕获,我们也得不到任何的有用信息,对于调试来说会是个噩梦,因此,编程时

永远不要有空的catch子句。Catch子句中至少要包含一个日志语句输出到控制台

或保存到日志文件中。

java面试问题及答案「篇三」

java面试宝典最新完整版(所有面试问题及答案)

一.Java基础部分.2

1、一个java”源文件中是否可以包括多个类(不是内部类)?有什么限制.2

2、Java有没有goto.2

3、说说&和龈的区别.2

4、在JAVA中如何跳出当前的多重嵌套循环.2

5、switch语句能否作用在byte上,能否作用在long上,能否作用在Siring

上.2

6、shortsi=1;si=si+1;有什么错?shortsi=1;si+=1;有什么

错.2

7、char型变量中能不能存贮一个中文汉字?为什么.2

8、用最有效率的方法算出2乘以8等於几?2

9、请设计一个一百亿的计算器.2

10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能

变?2

11、"=="和equals方法究竟有什么区别.2

12、静态变量和实例变量的区别.2

13、是否可以从一个static方法内部发出对非static方法的调用.2

14、Integer与int的区别.2

15、Math.round(l1.5)等於多少?Math,round(Tl.5;等於多少.2

16、下面的代码有什么不妥之处.2

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

18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的

类型?2

19、构造器ConstructDr是否可被override.2

20、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可

继承具体类(concreteclass)?抽象类中是否可以有静态的main方法.2

21、写clone方法时,通常都有一行代码,是什么.2

22、面向对象的特征有哪些方面.2

23、java中实现多态的.机制是什么.2

24、abstractclass和interface有什么区别.2

25、abstract的method是否可同时是static,是否可同时是native,是否可

同时是synchronized?2

26、什么是内部类?StaticNestedClass和InnerClass的不同.2

27、内部类可以引用它的包含类的成员吗?有没有什么限制.2

28、AnonymousInnerClass(匿名内部类)是否可以extends(继承)其它类,

是否可以implements(实现)interface(接口).2

29、super.getClass方法调用.2

30、String是最基本的数据类型吗.2

31、Strings="Hello”;s=s+"world!”;这两行代码执行后,原始的

Siring对象中的内容到底变了没有?2

32、是否可以继承String类.2

33、Strings=newString("xyz”);创建了几个StringObject?二者之间有

什么区别?2

34、String和StringBuffer的区别.2

35、如何把一段逗号分割的字符串转换成一个数组.2

36、数组有没有length这个方法?String有没有length这个方法.2

37、下面这条语句一夬创建了多少个刈象:Strings=〃a"+"b〃+〃c"+"d".2

38、try。里有一个return语句,那么紧跟在这个try后的finally{}里的

code会不会被执行,什么时候被执行,在return前还是后.2

39、下面的程序代码输出的结果是多少.2

40、final,finally,finalize的区别.2

41、运行时异常与一般异常有何异同.2

42、error和exception有什么区别.2

43、Java中的异常处理机制的简单原理和应用.2

44、请写出你最常见到的5个runtimeexception.2

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

throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常

吗.2

46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop

和suspend方法为何不推荐使用.2

47、sleep和wait有什么区别.2

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

49.下面两个方法同步吗?(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论