JAVA常见面试题及解答2015版_第1页
JAVA常见面试题及解答2015版_第2页
JAVA常见面试题及解答2015版_第3页
JAVA常见面试题及解答2015版_第4页
JAVA常见面试题及解答2015版_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、JAVA1)transient和volatile是java如果用transient声明一个实例classTtransientinta;/不需要维持intb;/需要维持这里,如果T类的一个对象写volatilevolatilevolatile入synchronized方法时。用strictfp修饰类或方法的Java版本那样准确。切断只类被strictfp修饰,所有的方法自动被strictfp修饰strictfp的意FP-strict是说精确浮点的意思。在Java没有指定strictfp关Java算的表达式是采取一种近似于我行我素的行为来完成这些操作,以致于得到的结果往往无法令你满意。而一旦使用了

2、strictfp来声明一个类、接口或者方法时,那么所声明的范围内Java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。因此如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,那就请用关键字strictfp。你可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字,例如下面的代码:strictfpinterfaceApublicstrictfpclassFpDemo1strictfpvoidf()错误的使用方法interfaceAstrictfpvoidf();publicclassFpDem

3、o2strictfpFpDemo2()一旦使用了关键字strictfp来声明某个类、接口或者方法时,那么在这个关键字所声明的范围内所有浮点运算都是精确的,符合IEEE-754规范的。例如一类被声明为strictfp,那么该类中所有的方法都是strictfp的。2)抽象类和接口有什么区别?(瞬联)abstractclass在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interfaceo在abstractclass中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是s

4、taticfinal的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。abstractclass和interface所反映出的设计理念不同。其实abstractclass表示的是is-a咲系,interface表示的是like-a关系。实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。接口中定义的变量默认是publicstaticfinal型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。抽象类中的变量默认是friendly型,其值可以在子类中重新定义,也可以重新赋值。接口中的方法默认都是publi

5、c,abstract类型的。3)能说一下java的反射(reflection)机制吗?(瞬联)个类继承(如小程序必须继承自个类继承(如小程序必须继承自Applet类),则无法再继承Thread类,这时如果我们又不想建立一个新的开放性和原因连接(causally-connected)是反射系统的两大基本要素4)在java?extendsThreadimplementRunnablerun(),加入线程所要执行方法一:继承Thread类,覆盖方法run(),我们在创建的Threadrun(),加入线程所要执行的代码即可。下面是一个例子:publicclassMyThreadextendsThrea

6、dintcount=1,number;publicMyThread(intnum)number=num;System.out.println(创建线程+number);publicvoidrun()while(true)System.out.println(线程+number+:计数+count);if(+count=6)return;publicstaticvoidmain(Stringargs)for(inti=0;i5;i+)newMyThread(i+1).start();这种方法简单明了,符合大家的习惯,但是,它也有一个很大的缺点,那就是如果我们的类已经从一if(+count=6)r

7、eturn;if(+count=6)return;4.4.阻塞状态:线程不会被分配CPU时间,无法执行。类,应该怎么办呢?我们不妨来探索一种新的方法:我们不创建Thread类的子类,而是直接使用它,那么我们只能将我们的方法作为参数传递给Thread类的实例,有点类似回调函数。但是Java没有指针,我们只能传递一个包含这个方法的类的实例。那么如何限制这个类必须包含这一方法呢?当然是使用接口!(虽然抽象类也可满足,但是需要继承,而我们之所以要采用这种新方法,不就是为了避免继承带来的限制吗?)Java提供了接口java.lang.Runnable来支持这种方法。方法二:实现Runnable接口Run

8、nable接口只有一个方法线程代码写入其中,就完成了这一部分的任务。但是创建Thread类的实例,这一点通过Runnable接口只有一个方法线程代码写入其中,就完成了这一部分的任务。但是创建Thread类的实例,这一点通过个例子:run(),我们声明自己的类实现Thread类的构造函数Runnable接口并提供这一方法,将我们的Runnable接口并没有任何对线程的支持,我们还必须publicThread(Runnabletarget);来实现。下面是一publicclassMyThreadimplementsRunnableintcount=1,number;publicMyThread(i

9、ntnum)number=num;System.out.println(”创建线程+number);publicvoidrun()while(true)System.out.println(线程+number+:计数+count);publicstaticvoidmain(Stringargs)for(inti=0;i5;i+)newThread(newMyThread(i+1).start();Thread类run方法,Thread类run方法,的run方法,否则该线程执行的将是子类的run方法,而不是我们用以实现Runnable接口的类的对此大家不妨试验一下。使用Runnable接口来实现

10、多线程使得我们能够在一个类中包容所有的代码,有利于封装,它的缺点在于,我们只能使用一套代码,若想创建多个线程并使各个线程执行不同的代码,则仍必须额外创建类,如果这样的话,在大多数情况下也许还不如直接用多个类分别继承Thread来得紧凑。综上所述,两种方法各有千秋,大家可以灵活运用。下面让我们一起来研究一下多线程使用中的一些问题。三、线程的四种状态新状态:线程已被创建但尚未执行(start()尚未被调用)。可执行状态:线程可以执行,虽然不一定正在执行。CPU时间随时可能被分配给该线程,从而使得它执行。死亡状态:正常情况下run()返回使得线程死亡。调用stopdestroy。亦有同样效果,但是不

11、被推荐,前者会产生异常,后者是强制终止,不会释放锁。四、线程的优先级线程的优先级代表该线程的重要程度,当有多个线程同时处于可执行状态并等待获得CPU时间时,线程调度系统根据各个线程的优先级来决定给谁分配CPU时间,优先级高的线程有更大的机会获得CPU时间,优先级低的线程也不是没有机会,只是机会要小一些罢了。你可以调用Thread类的方法getPriority()和setPriority()来存取线程的优先级,线程的优先级界于1(MIN_PRIORITY)和10(MAX_PRIORITY)之间,缺省是5(N0RM_PRI0RITY)。5IBMaspenTech:design:pattern:fr

12、ameworkGoFA.Factory()new一样频繁.2002/10/9Prototype()Builder汽车由车轮方向盘发动机很多部件组成,同时,将这些部件组装成汽车也是一件复杂的工作,Builder模式就是将这两种情况分开进行。设计模式之Singleton(单态模式)保证一个类只有一个实例,并提供一个访问它的全局访问点2002/10/9更新结构模式设计模式之Facade可扩展的使用JDBC针对不同的数据库编程,Facade提供了一种灵活的实现.设计模式之Proxy以Jive为例,剖析代理模式在用户级别授权机制上的应用设计模式之Adapter使用类再生的两个方式:组合(new)和继承(

13、extends),这个已经在thinkinginjava中提到过.设计模式之Composite就是将类用树形结构组合成一个单位.你向别人介绍你是某单位,你是单位中的一个元素,别人和你做买卖,相当于和单位做买卖。文章中还对Jive再进行了剖析。设计模式之DecoratorDecorator是个油漆工,给你的东东的外表刷上美丽的颜色.设计模式之Bridge将牛郎织女分开(本应在一起,分开他们,形成两个接口),在他们之间搭建一个桥(动态的结合)设计模式之Flyweight提供Java运行性能,降低小而大量重复的类的开销.行为模式设计模式之Template实际上向你介绍了为什么要使用Java抽象类,该

14、模式原理简单,使用很普遍.设计模式之Memento很简单一个模式,就是在内存中保留原来数据的拷贝.设计模式之Observer介绍如何使用JavaAPI提供的现成Observer设计模式之ChainofResponsibility各司其职的类串成一串,好象击鼓传花,当然如果自己能完成,就不要推委给下一个.设计模式之Command什么是将行为封装Command是最好的说明.设计模式之State状态是编程中经常碰到的实例,将状态对象化,设立状态变换器,便可在状态中轻松切换.StrategyStrategyMediatorMediatorInterpreterVisitorIteratorJavaCo

15、llection.Iterator,MediatorMediatorInterpreterVisitorIteratorJavaCollection.Iterator,IteratorCollectionIterator6)请说一下MVC架构IBMaspenTech)Model:View:Controller:MVC(ModalViewControler)DesktopMVCMVCMVCMVMCMVMMVCMVCCMVMCMVMMVCMVCMVCXeroxPARCSmalltalk80SunJ2EEColdFusionPHPMVCMVCMVCWebWebHTMLMacromediaFlashX

16、HTMLXML/XSLWMLHTMLWebservices.MVCEJBsMVCEJBsMVCMVCColdFusionComponentsWebHTMLMVCMVCWebASPPHPCFMLHTMLMVCMVCFlashWAPMVCFlashWAPMVCMVCMVCMVCMVCMVCMVCFlashWAPMVCFlashWAPMVCMVCMVCMVCMVCMVCHTMLMVCFlashWAPMVCFlashWAPMVCMVCMVCMVCMVCMVCMVCFlashWAPMVCFlashWAPMVCMVCMVCMVCMVCMVCMacromediaFlashWAP车和电子商务过程也能被Flas

17、hMVCFlashWAPMVCFlashWAPMVCMVCMVCMVCMVCMVCMVCFlashWAPMVCFlashWAPMVCMVCMVCMVCMVCMVCMVCMySQL移植到OracleRDBMSLDAPLDAPMVCMVCMVCMVCMVCMVCMVCMVCMVCMVC7)如果类a继承类b,实现接口c,而类b和接口c中定义了同名变量,请问会出现什么问题?(瞬联)interfaceAintx=0;classBintx=1;classCextendsBimplementsApublicvoidpX()System.out.println(x);publicstaticvoidmain(

18、Stringargs)newC().pX();答案:错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时importjava.util和java.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确(输出的是1),而接口的属性默认隐含为publicstaticfinal.所以可以通过A.x来明确(输出的是0)。下面的代码运行时会不会报错interfacePlayablevoidplay();interfaceBounceablevoidplay();interfaceRollableextendsPlayabl

19、e,BounceableBallball=newBall(PingPang);classBallimplementsRollableprivateStringname;publicStringgetName()returnname;publicBall(Stringname)=name;publicvoidplay()ball=newBall(Football);System.out.println(ball.getName();答案:错interfaceRollableextendsPlayable,Bounceable没有问题。interface可继承多个interfaces,所以这里没错

20、。问题出在interfaceRollable里的Ballball=newBall(PingPang);。任何在interface里声明的interfacevariable(接口变量,也可称成员变量),默认为publicstaticfinal。也就是说Ballball=newBall(PingPang);实际上是publicstaticfinalBallball=newBall(PingPang);。在Ball类的Play()方法中,ball=newBall(Football);改变了ball的reference,而这里的ball来自Rollableinterface,Rollableinter

21、face里的ball是publicstaticfinal的,final的object是不能被改变reference的。因此编译器将在ball=newBall(Football);这里显示有错。8)请说一下java中为什么要引入内部类?还有匿名内部类?(瞬联,IBM)9)请说一下final,finally和finalize的区别?(瞬联)final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他

22、资源回收,例如关闭文件等。10)请说一下HTTP请求的基本过程(IBM)11)java中存在内存泄漏问题吗?请举例说明?(IBM)会inti,i2;return(i-i2);/wheni为足够大的正数,i2为足够大的负数。结果会造成溢位,导致错误。12)请说一下java中的内存回收机制所采用的算法(IBM,瞬联)虽然垃圾回收关心着大部分的问题,包括内存管理,使得程序员的任务显得更加轻松,但是程序员还是可能犯些错误导致内存泄漏问题。GC(垃圾回收)通过递归对所有从“根”对象(堆栈中的对象,静态数据成员,JNI句柄等等)继承下来的引用进行工作,然后标记所有可以访问的活动着的对象。而这些对象变成了程

23、序唯一能够操纵的对象,其他的对象都被释放了。因为GC使得程序不能够访问那些被释放的对象,所以这样做是安全的。13)请说一下Systemgc()函数的作用。什么时候可以调用垃圾回收器?(瞬联)垃圾回收函数,手动调用的.当一个对象停止被活动声明所引用,它就变成了垃圾(garbage)可以被回收重新使用14)你做过的项目中采用了什么安全认证机制?(IBM)15)Math.round()什么作用?Math.Round(3.44,1)=3.4Math.Round(3.45,1)=3.4Math.Round(3.46,1)=3.5Math.Round(3.54,1)=3.5Math.Round(3.55,

24、1)=3.6Math.Round(3.56,1)=3.6Math.Round(3.64,1)=3.6Math.Round(3.65,1)=3.6Math.Round(3.66,1)=3.7Math.Round(3.74,1)=3.7Math.Round(3.75,1)=3.8Math.Round(3.76,1)=3.8这种舍入方法叫做银行家舍入(BankersRound),这就是已经规定下来的标准、Round的标准、世界的标准。Round四舍五入164j1j1jpackagejava_example150;publicclassTestThread3privateintj;publicstat

25、icvoidmain(Stringargs)TestThread3t=newTestThread3();Incinc=t.newInc();Decdec=t.newDec();for(inti=0;i2;i+)Threadts=newThread(inc);ts.start();ts=newThread(dec);ts.start();privatesynchronizedvoidinc()j+;System.out.println(Thread.currentThread().getName()+-inc:+j);privatesynchronizedvoiddec()j-;System.o

26、ut.println(Thread.currentThread().getName()+-dec:+j);classIncimplementsRunnablepublicvoidrun()for(inti=0;i10;i+)inc();classDecimplementsRunnablepublicvoidrun()for(inti=0;i10;i+)dec();TOC o 1-5 h z17CORBA?CORBA(CommonObjectRequestBrokerArchitecture)(ObjectManagementGroupOMG)(IDL),(binding:)用不同的程序设计语言

27、书写在不同的进程中运行为不同的操作系统开发18JAVA1.abstractclassNameprivateStringname;publicabstractbooleanisStupidName(Stringname)abstractmethod2.publicclassSomethingvoiddoSomething()privateStrings=intl=s.length();答案:错。局部变量前不能放置任何访问修饰符(private,public,和protected)。final可以用来修饰局部变量(final如同abstract和strictfp都是非访问修饰符,strictfp只

28、能修饰class和method而非variable)。3.abstractclassSomethingprivateabstractStringdoSomething();答案:错。abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节的怎么可以用private把abstractmethod封锁起来呢?(同理,abstractmethod前不能加final)。4.publicclassSomethingpublicintaddOne(finalintx)return+x;答案:错。intx被修饰成final,意味着x不能在addOnemethod中被修改。5.publicclassSomethingpublicstaticvoidmain(Stringargs)Othero=newOther();newSomething().addOne(o);publicvoidaddOne(finalOthero)o.i+;classOtherpublicinti;答案:正确。在addOnemethod中,参数o被修饰成final。如果在addOnemethod里我们修改了o的reference(比如:o=newOther();),那么如同上例这题也是错的。但这里修改的

温馨提示

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

评论

0/150

提交评论