JAVA程序员面试之葵花宝典.docx
《JAVA程序员面试之葵花宝典.docx》由会员分享,可在线阅读,更多相关《JAVA程序员面试之葵花宝典.docx(80页珍藏版)》请在冰豆网上搜索。
JAVA程序员面试之葵花宝典
程序员面试之葵花宝典
1、面向对象特性有哪些方面
1.抽象:
抽象就是忽视一种主题中与当前目的无关那些方面,以便更充分地注意与当前目的关于方面。
抽象并不打算理解所有问题,而只是选取其中一某些,暂时不用某些细节。
抽象涉及两个方面,一是过程抽象,二是数据抽象。
2.继承:
继承是一种联结类层次模型,并且容许和勉励类重用,它提供了一种明确表述共性办法。
对象一种新类可以从既有类中派生,这个过程称为类继承。
新类继承了原始类特性,新类称为原始类派生类(子类),而原始类称为新类基类(父类)。
派生类可以从它基类那里继承办法和实例变量,并且类可以修改或增长新办法使之更适合特殊需要。
3.封装:
封装是把过程和数据包围起来,对数据访问只能通过已定义界面。
面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装对象,这些对象通过一种受保护接口访问其她对象。
4.多态性:
多态性是指容许不同类对象对同一消息作出响应。
多态性涉及参数化多态性和包括多态性。
多态性语言具备灵活、抽象、行为共享、代码共享优势,较好解决了应用程序函数同名问题。
2、String是最基本数据类型吗?
基本数据类型涉及byte、int、char、long、float、double、boolean和short。
java.lang.String类是final类型,因而不可以继承这个类、不能修改这个类。
为了提高效率节约空间,咱们应当用StringBuffer类
3、int和Integer有什么区别
Java提供两种不同类型:
引用类型和原始类型(或内置类型)。
Int是java原始数据类型,Integer是java为int提供封装类。
Java为每个原始类型提供了封装类。
原始类型封装类booleanBooleancharCharacterbyteByteshortShortintIntegerlongLongfloatFloatdoubleDouble
引用类型和原始类型行为完全不同,并且它们具备不同语义。
引用类型和原始类型具备不同特性和用法,它们涉及:
大小和速度问题,这种类型以哪种类型数据构造存储,当引用类型和原始类型用作某个类实例数据时所指定缺省值。
对象引用实例变量缺省值为null,而原始类型实例变量缺省值与它们类型关于。
4、String和StringBuffer区别
JAVA平台提供了两个类:
String和StringBuffer,它们可以储存和操作字符串,即包括各种字符字符数据。
这个String类提供了数值不可变化字符串。
而这个StringBuffer类提供字符串可以进行修改。
当你懂得字符数据要变化时候你就可以使用StringBuffer。
典型地,你可以使用StringBuffers来动态构造字符数据。
5、运营时异常与普通异常有何异同?
异常表达程序运营过程中也许浮现非正常状态,运营时异常表达虚拟机普通操作中也许遇到异常,是一种常用运营错误。
java编译器规定办法必要声明抛出也许发生非运营时异常,但是并不规定必要声明抛出未被捕获运营时异常。
6、说出Servlet生命周期,并说出Servlet和CGI区别。
Servlet被服务器实例化后,容器运营其init办法,祈求到达时运营其service办法,service办法自动派遣运营与祈求相应doXXX办法(doGet,doPost)等,当服务器决定将实例销毁时候调用其destroy办法。
与cgi区别在于servlet处在服务器进程中,它通过多线程方式运营其service办法,一种实例可以服务于各种祈求,并且其实例普通不会销毁,而CGI对每个祈求都产生新进程,服务完毕后就销毁,因此效率上低于servlet。
7、说出ArrayList,Vector,LinkedList存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数不不大于实际存储数据以便增长和插入元素,它们都容许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,因此索引数据快而插入数据慢,Vector由于使用了synchronized办法(线程安全),普通性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项先后项即可,因此插入速度较快。
8、EJB是基于哪些技术实现?
并说出SessionBean和EntityBean区别,StatefulBean和StatelessBean区别。
EJB涉及SessionBean、EntityBean、MessageDrivenBean,基于JNDI、RMI、JAT等技术实现。
SessionBean在J2EE应用程序中被用来完毕某些服务器端业务操作,例如访问数据库、调用其她EJB组件。
EntityBean被用来代表应用系统中用到数据。
对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运营业务逻辑。
对于客户机,EntityBean是一种持久性对象,它代表一种存储在持久性存储器中实体对象视图,或是一种由既有公司应用程序实现实体。
SessionBean还可以再细分为StatefulSessionBean与StatelessSessionBean,这两种SessionBean都可以将系统逻辑放在method之中执行,不同是StatefulSessionBean可以记录呼喊者状态,因而普通来说,一种使用者会有一种相相应StatefulSessionBean实体。
StatelessSessionBean虽然也是逻辑组件,但是她却不负责记录使用者状态,也就是说当使用者呼喊StatelessSessionBean时候,EJBContainer并不会找寻特定StatelessSessionBean实体来执行这个method。
换言之,很也许数个使用者在执行某个StatelessSessionBeanmethods时,会是同一种BeanInstance在执行。
从内存方面来看,StatefulSessionBean与StatelessSessionBean比较,StatefulSessionBean会消耗J2EEServer较多内存,然而StatefulSessionBean优势却在于她可以维持使用者状态。
9、Collection和Collections区别。
Collection是集合类上级接口,继承与她接口重要有Set和List.
Collections是针对集合类一种协助类,她提供一系列静态办法实现对各种集合搜索、排序、线程安全化等操作。
10、&和&&区别。
&是位运算符,表达按位与运算,&&是逻辑运算符,表达逻辑与(and)。
11、HashMap和Hashtable区别。
HashMap是Hashtable轻量级实现(非线程安全实现),她们都完毕了Map接口,重要区别在于HashMap容许空(null)键值(key),由于非线程安全,效率上也许高于Hashtable。
HashMap容许将null作为一种entrykey或者value,而Hashtable不容许。
HashMap把Hashtablecontains办法去掉了,改成containsvalue和containsKey。
由于contains办法容易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进Mapinterface一种实现。
最大不同是,Hashtable办法是Synchronize,而HashMap不是,在各种线程访问Hashtable时,不需要自己为它办法实现同步,而HashMap就必要为之提供外同步。
Hashtable和HashMap采用hash/rehash算法都大概同样,因此性能不会有很大差别。
12、final,finally,finalize区别。
final用于声明属性,办法和类,分别表达属性不可变,办法不可覆盖,类不可继承。
finally是异常解决语句构造一某些,表达总是执行。
finalize是Object类一种办法,在垃圾收集器执行时候会调用被回收对象此办法,可以覆盖此办法提供垃圾收集时其她资源回收,例如关闭文献等。
13、sleep()和wait()有什么区别?
sleep是线程类(Thread)办法,导致此线程暂停执行指定期间,把执行机会给其她线程,但是监控状态依然保持,届时后会自动恢复。
调用sleep不会释放对象锁。
wait是Object类办法,对此对象调用wait办法导致本线程放弃对象锁,进入等待此对象等待锁定池,只有针对此对象发出notify办法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运营状态。
14、Overload和Override区别。
Overloaded办法与否可以变化返回值类型?
办法重写Overriding和重载Overloading是Java多态性不同体现。
重写Overriding是父类与子类之间多态性一种体现,重载Overloading是一种类中多态性一种体现。
如果在子类中定义某办法与其父类有相似名称和参数,咱们说该办法被重写(Overriding)。
子类对象使用这个办法时,将调用子类中定义,对它而言,父类中定义犹如被“屏蔽”了。
如果在一种类中定义了各种同名办法,它们或有不同参数个数或有不同参数类型,则称为办法重载(Overloading)。
Overloaded办法是可以变化返回值类型。
15、error和exception有什么区别?
error表达恢复不是不也许但很困难状况下一种严重问题。
例如说内存溢出。
不也许指望程序能解决这样状况。
exception表达一种设计或实现问题。
也就是说,它表达如果程序运营正常,从不会发生状况。
16、同步和异步有何异同,在什么状况下分别使用她们?
举例阐明。
如果数据将在线程间共享。
例如正在写数据后来也许被另一种线程读到,或者正在读数据也许已经被另一种线程写过了,那么这些数据就是共享数据,必要进行同步存取。
当应用程序在对象上调用了一种需要耗费很长时间来执行办法,并且不但愿让程序等待办法返回时,就应当使用异步编程,在诸多状况下采用异步途径往往更有效率。
17、abstractclass和interface有什么区别?
声明办法存在而不去实现它类被叫做抽象类(abstractclass),它用于要创立一种体现某些基本行为类,并为该类声明办法,但不能在该类中实现该类状况。
不能创立abstract类实例。
然而可以创立一种变量,其类型是一种抽象类,并让它指向详细子类一种实例。
不能有抽象构造函数或抽象静态办法。
Abstract类子类为它们父类中所有抽象办法提供实现,否则它们也是抽象类为。
取而代之,在子类中实现该办法。
懂得其行为其他类可以在类中实现这些办法。
接口(interface)是抽象类变体。
在接口中,所有办法都是抽象。
多继承性可通过实现这样接口而获得。
接口中所有办法都是抽象,没有一种有程序体。
接口只可以定义staticfinal成员变量。
接口实现与子类相似,除了该实现类不能从接口定义中继承行为。
当类实现特殊接口时,它定义(即将程序体予以)所有这种接口办法。
然后,它可以在实现了该接口类任何对象上调用接口办法。
由于有抽象类,它容许使用接口名作为引用变量类型。
普通动态联编将生效。
引用可以转换到接口类型或从接口类型转换,instanceof运算符可以用来决定某对象类与否实现了接口。
18、heap和stack有什么区别。
栈是一种线形集合,其添加和删除元素操作应在同一段完毕。
栈按照后进先出方式进行解决。
堆是栈一种构成元素
19、forward和redirect区别forward是服务器祈求资源,服务器直接访问目的地址URL,把那个URL响应内容读取过来,然后把这些内容再发给浏览器,浏览器主线不懂得服务器发送内容是从哪儿来,因此它地址栏中还是本来地址。
redirect就是服务端依照逻辑,发送一种状态码,告诉浏览器重新去祈求那个地址,普通来说浏览器会用刚才祈求所有参数重新祈求,因此session,request参数都可以获取。
20、EJB与JAVABEAN区别?
JavaBean是可复用组件,对JavaBean并没有严格规范,理论上讲,任何一种Java类都可以是一种Bean。
但普通状况下,由于JavaBean是被容器所创立(如Tomcat),因此JavaBean应具备一种无参构造器,此外,普通JavaBean还要实现Serializable接口用于实现Bean持久性。
JavaBean事实上相称于微软COM模型中本地进程内COM组件,它是不能被跨进程访问。
EnterpriseJavaBean相称于DCOM,即分布式组件。
它是基于Java远程办法调用(RMI)技术,因此EJB可以被远程访问(跨进程、跨计算机)。
但EJB必要被布置在诸如Webspere、WebLogic这样容器中,EJB客户从不直接访问真正EJB组件,而是通过其容器访问。
EJB容器是EJB组件代理,EJB组件由容器所创立和管理。
客户通过容器来访问真正EJB组件。
21、StaticNestedClass和InnerClass不同。
StaticNestedClass是被声明为静态(static)内部类,它可以不依赖于外部类实例被实例化。
而普通内部类需要在外部类实例化后才干实例化。
22、JSP中动态INCLUDE与静态INCLUDE区别?
动态INCLUDE用jsp:
include动作实现includepage="included.jsp"flush="true"/>它总是会检查所含文献中变化,合用于包括动态页面,并且可以带参数。
静态INCLUDE用include伪码实现,定不会检查所含文献变化,合用于包括静态页面<%@includefile="included.htm"%>
23、什么时候用assert。
assertion(断言)在软件开发中是一种惯用调试方式,诸多开发语言中都支持这种机制。
在实现中,assertion就是在程序中一条语句,它对一种boolean表达式进行检查,一种对的程序必要保证这个boolean表达式值为true;如果该值为false,阐明程序已经处在不对的状态下,系统将给出警告或退出。
普通来说,assertion用于保证程序最基本、核心对的性。
assertion检查普通在开发和测试时启动。
为了提高性能,在软件发布后,assertion检查普通是关闭。
24、GC是什么?
为什么要有GC?
GC是垃圾收集意思(GabageCollection),内存解决是编程人员容易浮现问题地方,忘掉或者错误内存回收会导致程序或系统不稳定甚至崩溃,Java提供GC功能可以自动监测对象与否超过作用域从而达到自动回收内存目,Java语言没有提供释放已分派内存显示操作办法。
25、shorts1=1;s1=s1+1;有什么错?
shorts1=1;s1+=1;有什么错?
shorts1=1;s1=s1+1;(s1+1运算成果是int型,需要强制转换类型)shorts1=1;s1+=1;(可以对的编译)
26、Math.round(11.5)等於多少?
Math.round(-11.5)等於多少?
Math.round(11.5)==12Math.round(-11.5)==-11round办法返回与参数最接近长整数,参数加1/2后求其floor.
27、Strings=newString("xyz");创立了几种StringObject?
两个
28、设计4个线程,其中两个线程每次对j增长1,此外两个线程对j每次减少1。
写出程序。
如下程序使用内部类实现线程,对j增减时候没有考虑顺序问题。
publicclassThreadTest1{privateintj;publicstaticvoidmain(Stringargs[]){ThreadTest1tt=newThreadTest1();Incinc=tt.newInc();Decdec=tt.newDec();for(inti=0;i<2;i++){Threadt=newThread(inc);t.start();t=newThread(dec);t.start();}}privatesynchronizedvoidinc(){j++;System.out.println(Thread.currentThread().getName()+"-inc:
"+j);}
privatesynchronizedvoiddec(){j--;System.out.println(Thread.currentThread().getName()+"-dec:
"+j);}
classIncimplementsRunnable{publicvoidrun(){for(inti=0;i<100;i++){inc();}}}classDecimplementsRunnable{publicvoidrun(){for(inti=0;i<100;i++){dec();}}}}
29、Java有无goto?
java中保存字,当前没有在java中使用。
30、启动一种线程是用run()还是start()?
启动一种线程是调用start()办法,使线程所代表虚拟解决机处在可运营状态,这意味着它可以由JVM调度并执行。
这并不意味着线程就会及时运营。
run()办法可以产生必要退出标志来停止一种线程。
31、EJB涉及(SessionBean,EntityBean)说出她们生命周期,及如何管理事务?
SessionBean:
StatelessSessionBean生命周期是由容器决定,当客户机发出祈求要建立一种Bean实例时,EJB容器不一定要创立一种新Bean实例供客户机调用,而是随便找一种既有实例提供应客户机。
当客户机第一次调用一种StatefulSessionBean时,容器必要及时在服务器中创立一种新Bean实例,并关联到客户机上,后来此客户机调用StatefulSessionBean办法时容器会把调用分派到与此客户机有关联Bean实例。
EntityBean:
EntityBeans能存活相对较长时间,并且状态是持续。
只要数据库中数据存在,Entitybeans就始终存活。
而不是按照应用程序或者服务进程来说。
虽然EJB容器崩溃了,Entitybeans也是存活。
EntityBeans生命周期可以被容器或者Beans自己管理。
EJB通过如下技术管理实务:
对象管理组织(OMG)对象实务服务(OTS),SunMicrosystemsTransactionService(JTS)、JavaTransactionAPI(JTA),开发组(X/Open)XA接口。
32、应用服务器有那些?
BEAWebLogicServer,IBMWebSphereApplicationServer,Oracle9iApplicationServer,jBoss,Tomcat
33、给我一种你最常用到runtimeexception。
ArithmeticException,ArrayStoreException,BufferOverflowException,BufferUnderflowException,CannotRedoException,CannotUndoException,ClassCastException,CMMException,ConcurrentModificationException,DOMException,EmptyStackException,IllegalArgumentException,IllegalMonitorStateException,IllegalPathStateException,IllegalStateException,ImagingOpException,IndexOutOfBoundsException,MissingResourceException,NegativeArraySizeException,NoSuchElementException,NullPointerException,ProfileDataException,ProviderException,RasterFormatException,SecurityException,SystemException,UndeclaredThrowableException,UnmodifiableSetException,UnsupportedOperationException
34、接口与否可继承办口?
抽象类与否可实现(implements)接口?
抽象类与否可继承实体类(concreteclass)?
接口可以继承办口。
抽象类可以实现(implements)接口,抽象类与否可继承实体类,但前提是实体类必要有明确构造函数。
35、List,Set,Map与否继承自Collection接口?
List,Set是,Map不是
36、说出数据连接池工作机制是什么?
J2EE服务器启动时会建立一定数量池连接,并始终维持不少于此数目池连接。
客户端程序需要连接时,池驱动程序会返回一种未使用池连接并将其表记为忙。
如果当前没有空闲连接,池驱动程序就新建一定数量连接,新建连接数量有配备参数决定。
当使用池连接调用完毕后,池驱动程序将此连接表记为空闲,其她调用就可以使用这个连接。
37、abstractmethod与否可同步是static,与否可同步是native,与否可同步是synchronized?
都不能
38、数组有无length()这个办法?
String有无length()这个办法?
数组没有length()这个办法,有length属性。
String有有length()这个办法。
39、Set里元素是不能重复,那么用什么办法来区别重复与否呢?
是用==还是equals()?
它们有何区别?
Set里元素是不能重复,那么用iterator()办法来区别重复与否。
equals()是判读两个Set与否相等。
equals()和==办法决定引用值与否指向同一对象equals()在类中被覆盖,为是当两个分离对象内容和类型相配话,返回真值。
40、构造器Constructor与否可被override?
构造器Constructor不能被继承,因而不能重写Overriding,但可以被重载Overloading。
41、与否可以继承String类?
String类是final类故不可以继承。
42、swtich与否能作用在byte上,与否能作用在long上,与否能作用在String上?
switch(expr1)中,expr1是一种整数表达式。
因而传递给switch和case语句参数应当是int、short、char或者byte。
long,string都不能作用于swtich。
43、try{}里有一种return语句,那么紧跟在这个try后finally{}里code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。
44、编程题:
用最有效率办法算出2乘以8等於