Java面试题大全答案版Word下载.docx
《Java面试题大全答案版Word下载.docx》由会员分享,可在线阅读,更多相关《Java面试题大全答案版Word下载.docx(26页珍藏版)》请在冰点文库上搜索。
2<
<
3,表示将2左移3位;
一个数左移几位就表示这个数乘以了2的几次方,左移运算,CPU直接支持,所以是最有效率的
9、请设计一个一百亿的计算器
思路:
用两个数组分别保存两个操作数,再新建一个数组保存结果。
10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
引用变量不能变
11、"
=="
和equals方法究竟有什么区别?
==和equals方法都可以用来比较两个对象是否是同一个对象。
==还可以比较两个变量的值是否相等。
equals是Object类中的方法,可以由子类重写此方法,实现内容相等。
12、静态变量和实例变量的区别?
语法上不同:
静态变量前要加static关键字,实例变量不需要
程序运行时不同:
实例变量是属于某个对象的,只有创建了对象,才会为这个对象的实例变量分配空间。
静态变量是属于类的,当程序加载了这个类的字节码文件,就会为静态变量分配空间,并且所有对象共享这个变量
13、是否可以从一个static方法内部发出对非static方法的调用?
不可以,非static方法需要与对象关联在一起的,而static方法调用时不需要对象,可以直接调用,也就是说调用static方法时,可能还没有创建任何实例
14、Integer与int的区别
int是java中的8种基本数据类型之一,默认值是0,Integer是int的包装类,默认值是null,即Integer可以表示未赋值和赋值为0
15、(麦死)Math.round(乱的)(11.5)等於多少?
Math.round(-11.5)等於多少?
12,-11,Math.round()方法的实现是:
Math.floor(n+0.5);
16、作用域public,private,protected,以及不写时的区别
本类同包子类其他类
public✔✔✔✔
protected✔✔✔✘
friendly✔✔✘✘
private✔✘✘✘
17、Overload(喔我楼的)和Override的区别。
Overloaded的方法是否可以改变返回值的类型?
Overload是重载,Override是重写。
Overload是指在一个类中,方法名相同,参数列表不同,那么这些方法之间构成重载。
Override是指在父子类之间,子类的方法签名和父类的方法签名完全一样,那么这两个方法构成重写。
Overload的方法可以改变返回值。
因为调用方法时,返回值可以接受也可以不接受,所以编译器无法根据返回值来判断是否重载。
18、构造器Constructor(看似爪克特)是否可被override?
Constructor不能被继承,所以不能override
19、接口是否可继承接口?
抽象类是否可实现(implements)接口?
抽象类是否可继承具体类(concreteclass)?
抽象类中是否可以有静态的main方法?
接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类,抽象类中可以有静态的main方法
20、写clone()方法时,通常都有一行代码,是什么?
super.clone();
克隆时,首先得将父类的成员克隆完。
21、面向对象的特征有哪些方面
封装
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。
面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
继承
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。
对象的一个新类可以从现有的类中派生,这个过程称为类继承。
新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。
派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
抽象
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。
抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。
抽象包括两个方面,一是过程抽象,二是数据抽象。
多态
多态性是指允许不同类的对象对同一消息作出响应。
多态性包括参数化多态性和包含多态性。
多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
22、java中实现多态的机制是什么?
靠的是父类或接口能够指向子类或实现类。
程序运行时,JVM会根据内存中实际的对象调用方法。
23、abstract(抽象)class和interface有什么区别?
1、abstractclass本质是类,用abstract修饰类,而interface是接口,将class替换为interface
2、abstractclass可以有构造方法,interface不能有
3、abstractclass中可以包含普通变量,interface所有的变量都是finalstatic的
4、abstractclass中可以包含普通方法,interface中所有的方法都是抽象的。
5、abstractclass中除抽象方法不可以是private修饰符外,其它成员任意;
而interface中所有成员的修饰符都为public
6、abstractclass可以继承一个类实现多个接口,interface只能继承接口
24、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
abstract的方法不可以是static,abstract方法必须由子类去实现,而static方法可以由当前类调用。
abstract的方法不可以是native,abstract方法必须由子类去实现,而native是调用其它程序语言的代码,所以不存在由子类去实现的问题,矛盾。
关于abstract和synchronized同用的问题,我觉得也不行,因为在这几年的开发中,从没见过这种情况,而且我觉得synchronized应该是作用在一个具体的方法上才有意义。
25、什么是内部类?
在一个类的内部定义的类叫做内部类。
26、内部类可以引用外部类的成员吗?
有没有什么限制?
如果不是静态内部类,完全可以。
27、StaticNestedClass和InnerClass的不同。
NestedClass一般是C++的说法,InnerClass一般是Java的说法,指的是同一意思。
内部类分为静态内部类和非静态内部类。
静态内部类中可以包含静态成员,非静态内部类中不可以包含静态成员。
静态内部类中不能引用外部类中的实例成员。
非静态内部类则没有这个限制。
28、AnonymousInnerClass(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
可以继承其它类,可以实现接口
29、String是最基本的数据类型吗?
不是,基本数据类型是:
byteshortintlongfloatdoublecharboolean
30、Strings="
Hello"
;
s=s+"
world!
"
这两行代码执行后,原始的String对象中的内容到底变了没有?
没有,String类被设计为不可变的类。
所以它的所有对象都不可变。
31、是否可以继承String类?
不可以。
String被final修饰,被final修饰的类不可被继承。
32、Strings=newString("
xyz"
);
创建了几个StringObject?
二者之间有什么区别?
2个对象。
一个放在常量区,不管写多少遍,永远只有一个。
一个放在堆内存中。
每次newString就产生一个新的。
33、String和StringBuffer的区别
String和StringBuffer都是操作字符串的类。
String类被设计为不可变,而StringBuffer可变。
34、如何把一段逗号分割的字符串转换成一个数组?
第一种用正则表达式的方式:
String类的split方法
第二种方式:
StringTokenizer,代码为:
newStringTokenizer(“1,2,3,4”,”,”);
35、数组有没有length()这个方法?
String有没有length()这个方法?
数组是length属性,String有length()这个方法
36、try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?
会,return前
38、final,finally,finalize的区别。
final用来修饰类,变量,方法的。
修饰类表示类不可被继承,修饰变量表示变量的引用不可变,修饰方法表示方法不可被重写。
finally是异常处理结构中的一部分,表示一定会执行。
finalize是Object类的方法,当垃圾收集器执行的时候会调用此对象的这个方法。
39、运行时异常与一般异常有何异同?
一般异常强制要求捕获或声明。
运行时异常可以捕获,也可以不捕获。
40、error和exception有什么区别?
error表示恢复不是不可能但是很困难的情况下的一种严重问题。
例如:
内存溢出
exception表示程序的设计或实现有问题。
也就是说如果程序正常运行,不会发生的情况。
41、Java中的异常处理机制的简单原理和应用。
当Java程序违反了Java的语义规则时,JVM就会将发生的错误表示为一个异常。
违反语义规则包括两种:
一种是Java类库内置的语义检查,另一种是程序员自己定义的异常。
42、给我一个你最常见到的runtime(茹二楼)exception。
ArithMaticExceptionNullPointExceptionIndexOfBoundException
HibernateException(子类:
CacheException,LazyInitializationException,MappingException)
NestedRuntimeException(AopConfigException,AopInvocationException)
43、JAVA语言如何进行异常处理,关键字:
throws,throw,try,catch,finally分别代表什么意义?
在try块中可以抛出异常吗?
throws用来表名方法可能抛出异常。
throw用来明确的抛一个异常。
try用来监控一段可能出现异常的代码。
当出现异常后进入catch块,进行异常类型匹配
finally表示无论是否出现异常都要执行的代码。
44、java中有几种方法可以实现一个线程?
用什么关键字修饰同步方法?
stop()和suspend()方法为何不推荐使用?
有两种实现方法,分别是继承Thread(斯read)类与实现Runnable(软的包)接口
用synchronized(新鬼耐斯特)关键字修饰同步方法
因为他们是线程的方法,不安全,当已启动后,就想脱缰野马难以把控
45、sleep()(斯瑞谱)和wait()(外特)有什么区别?
1、sleep是线程类的方法wait是Object类的方法
2、sleep会自动醒来wait需要notify唤醒
3、sleep不会释放锁wait会释放锁
46、同步和异步有何异同,在什么情况下分别使用他们?
举例说明。
48、多线程有几种实现方法?
同步有几种实现方法?
多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
同步的实现方面有三种:
1、同步代码块
2、同步方法
3、Lock
49、启动一个线程是用run()还是start()?
.
Start()(斯达特)
50、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
分几种情况:
1.其他方法前是否加了synchronized关键字,如果没加,则能。
2.如果这个方法内部调用了wait,则可以进入其他synchronized方法。
3.如果其他个方法都加了synchronized关键字,并且内部没有调用wait,则不能。
51、线程的基本概念、线程的基本状态以及状态之间的关系
线程就是进程中的一个执行线路。
新建newThread();
就绪:
thread.start();
运行,阻塞,挂起,结束。
创建一个线程,这时状态为新建,当调用start方法后转为就绪,再由线程调度器将就绪状态转为运行状态,遇到synchronized语句后,可能由运行状态改为阻塞状态,当获得synchronized锁后由阻塞状态转为运行,这时调用wait方法转为挂起状态。
当线程关联的代码执行完成后。
线程转为结束。
52、简述synchronized和java.util.concurrent.locks.Lock的异同?
主要相同点:
Lock(拉克)能完成synchronized所实现的所有功能
主要不同点:
Lock有比synchronized更精确的线程语义和更好的性能。
synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。
54、ArrayList和Vector的区别
ArrayList和Vector都实现了List接口。
ArrayList是线程不安全的,Vector是线程安全的。
ArrayList的增长方式为*3/2+1Vector的增长方式为*2,Vector还可以设置增长量。
55、HashMap和Hashtable的区别
Hashtable和HashMap都实现了Map接口。
Hashtable是线程安全的,HashMap是线程不安全的。
Hashtable不允许键值为null,HashMap允许。
Hashtable自JDK1.0就有了,HashMap到1.2才出来。
Map中有2个方法分别是containsKey(康腾思Key)和containsValue;
Hashtable中还有个contains方法,容易让人误解,HashMap没有。
56、List和Map区别?
List是存储单列数据的有序集合,允许重复。
而Map是键值对双列数据的集合。
键不允许重复,值可以重复。
57、List,Set,Map是否继承自Collection接口?
Collection(克莱克神)是集合类的顶级接口,其子接口分别是List和Set
List下有ArrayList,LinkedListSet下有HashSetTreeSet
Collection和Map没有关系,Map是HashMap的父接口
58、List、Map、Set三个接口,存取元素时,各有什么特点?
List以特定的次序来持有元素,允许重复。
Set无法拥有重复元素,内部排序。
Map保存key-value值,key不可重复,value可重复。
59、说出ArrayList,Vector,LinkedList的存储性能和特性
ArrayList和Vector都是使用数组存储数据。
查找快,插入慢。
由于Vector是线程安全的,所以性能上比ArrayList差。
LinkedList是链表结构。
插入快,查找慢。
60、去掉一个Vector集合中重复的元素
最简单的方式:
HashSetset=newHashSet(vector);
61、Collection和Collections的区别。
Collection是集合类的顶级接口,而Collections是集合类的辅助类,如:
将一个数组的元素copy到另一个集合。
62、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
是用==还是equals()?
它们有何区别?
equals,区别见11题
63、你所知道的集合类都有哪些?
主要方法?
集合类有(画集合类的体系结构)
ArrayList的主要方法:
add,get,remove,contains,indexOf,isEmpty,toArray,iterator
LinkedList的主要方法:
add,get,remove,addFirst,addLast,getFirst,getLast,iterator
HashSet的主要方法:
add,iterator,remove
HashMap的主要方法:
put,get,remove,entrySet,keyset,values
64、两个对象值相同(x.equals(y)==true),但却可有不同的hashcode,这句话对不对?
对。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
65、java中有几种类型的流?
JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
根据功能分:
输入流,输出流根据类型分:
字节流,字符流
输入字节流的抽象类:
InputStream输出字节流的抽象类:
OutputStream(Stream斯俊木)
输入字符流的抽象类:
Reader(瑞得)输出字符流的抽象类:
Writer(ruai的)
66、什么是java序列化,如何实现java序列化?
序列化就是指将内存中的一个对象存储到硬盘中或者转为字节码作网络传输。
实现Serializable(修儿奈斯啵)接口。
67、描述一下JVM加载class文件的原理机制?
JVM中类的加载是由ClassLoader和它的子类来实现的。
JavaClassLoader是一个重要的Java运行时系统组件。
它是一个负责查找和装入类文件的类。
68、heap(细谱)和stack(死大克)有什么区别。
stack是用来保存基本数据类型,以及变量的引用。
小,速度快
heap是用来保存new出来的对象。
大,速度慢。
69、GC是什么?
为什么要有GC?
GC是GarbageCollection(垃圾回收)。
内存处理是程序员容易出现问题的地方。
忘记回收或错误的内存回收会导致程序或系统的不稳定甚至崩溃。
Java提供的GC可以自动检测对象是否已经死亡,从而进行回收内存。
70、垃圾回收的优点和原理。
并考虑2种回收机制。
垃圾回收机制使得程序员不需要关注内存的回收和释放,提高了程序的健壮性。
垃圾回收器通常是作为一个单独的低级别线程运行。
当程序员创建对象时,GC就开始监测这个对象的地址、大小及使用情况,通常,GC采用有向图的方式记录和管理堆中的所有对象。
通过这种方式确定哪些对象是”不可达”时,GC就有责任回收这些内存空间。
标记垃圾回收机制和分带复制垃圾回收机制。
71、垃圾回收器的基本原理是什么?
垃圾回收器可以马上回收内存吗?
有什么办法主动通知虚拟机进行垃圾回收?
可以。
通过System.gc();
或者Runtime.getRuntime().gc();
来通知GC回收内存,但是Java语言规范不保证GC一定会执行。
72、什么时候用assert(额色特)。
assert(断言)是程序开发中一种常见的调试方式。
73、java中会存在内存泄漏吗,请简单描述。
会。
内存泄漏就是指一个不再被程序使用的对象一直占据着内存。
长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景
75、说出一些常用的类,包,接口,请各举5个
包:
(Spring)org.springframework.context,org.springframework.web.context,
org.springframework.web.context.filter,org.springframework.orm.hibernate3.support
(Hibernate)org.hibernate,org.hibernate.cfg
(Struts)org.apache.struts.actions,org.apache.struts.upload
(DWR)org.directwebremoting.servlet
接口:
(Spring)ApplicationContext,
(Hibernate)SessionFactory,Session,Query,Criteria,SQLQuery,Transaction
(Struts)FormFile
类:
(Spring)ClassPathApplicationContext,OpenSessionInViewFilter,CharacterEncodingFilter
(Hibernate)Configuration,Hibernate
(Struts)ActionForm,Action,DispatchAction,MappingDisactionAction
(DWR)DwrServle