Java面试题个人总结复习资料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本人最近参加了大大小小很多公司的面试,在这里我把自己面试遇到的问题给大家说一下

JAVA基础篇

1、在java类加载器中,系统类加载器和用户自定义加载器那个先加载?(遇到这个问题

时感觉很意外,没有想到会问这样的问题)

先加载系统类加载器

Java类加载器加载类顺序依次为:

JVM类加载器:这个模式会加载JAVA_HOME/lib下的jar包

扩展类加载器:会加载JAVA_HOME/lib/ext下的jar包

系统类加载器:这个会去加载指定了classpath参数指定的jar文件

用户自定义类加载器:sun提供的ClassLoader是可以被继承的,允许用户自己实

现类加载器

2、堆和栈分别存放什么?

栈:基本数据类型和对象的引用

堆:对象和数组

3、String、StringBuffer、StringBuilder的区别

(1)String是不可变对象,也就是说每次修改String都是新建了一个对象并赋值

(2)StringBuffer是字符缓冲区,修改它不会新建对象,可以使用append()方法和delete()方法修改StringBuffer的值

(3)StringBuilder可以替代StringBuffer,它是一个单线程使用的类,和StringBuffer比速度快、效率高,但是是非安全的

(4)三者都是被final修饰的(这一点面试官的问我的时候一直在说,你确定吗?搞得我有点虚)

4、Java的异常和错误有什么区别?

(1)Error

Error是JVM的错误,这种错误会严重影响程序的运行,设计者不会设计程序代码去捕捉这种错误,因为即使捕捉到也无法给予适当的处理,比如内存溢出。

(2)Exception

Exception包含了一般性的异常,这些异常同在在捕捉到之后便可做妥善的处理,以确保程序继续运行。Exception有很多种分类,从Exception产生的时机上我们可以把Exception分为

①运行时异常

运行时异常是指程序运行过程中可能出现的非正常状态

②非运行时异常

非运行时异常是指方法声明时throws的异常

5、&和&&的区别

&是位运算符,表示按位与运算。&&是逻辑运算符,表示逻辑与。在条件判断的时候&必须逐一检查各个条件,&&具有短路功能,只要一个条件为false则不会进行后续的判断。

6、abstract class和interface的区别

(1)abstract class是抽象类,声明方法的存在而不去实现它的类叫做抽象类,它用于创建一个体现某些基本行为的类。抽象类中不能有构造方法、不能有静态方法,抽象类不能被实例化。抽象类中可以有变量、可以有普通方法、可以有抽象方法,在继承抽象方法后,必须实现它的所有抽象方法。

(2)interface是接口,接口中的变量必须是静态常量(static final),接口中的方法必须都是抽象方法(abstract),不过由于接口中所有变量、方法修饰符都一致,因可以不写。接口的实现必须实现接口中所有的方法。

7、final、finally、finalize的区别

(1)final是用来描述变量、方法、类的关键字,表示变量值不可变、方法不可被重写、类不可被继承

(2)finally是异常处理的关键字,表示finally块里面的代码一定会被运行到

(3)finalize是Object类中的protected方法,垃圾回收器执行的时候会调用被回收的类的此方法。

8、接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以实现实体类?

(1)接口可以继承接口

(2)抽象类里可以有普通方法,因此抽象类可以实现接口,只需要实现接口内所有方法就可以了

(3)抽象类里可以有普通方法,变量也不需要是常量,因此抽象类可以实现实体类

9、一个”.java”源文件中是否可以包含多个类(非内部类)?有什么限制?

可以。必须只有一个类名与文件名相同且该类以public修饰

10、java是怎么通过包名.类名来获得该类的实例的?

通过Class.forName()方法

11、介绍一下集合?

①Collection:是最基本的集合接口,一个collection代表一组Object,即collection的元素。

②List:是collection的扩展,作用是收集对象,并以索引方式保留收集对象的顺序。其元素有放入顺序,元素可重复。

1)ArrayList:利用类似于数组的形式来存储数据,它的随机访问速度极快。

2)LinkedList:内部实现是链表,它适合于在链表中间需要频繁的插入和删除

操作。

3)Vector:与ArrayList相似,但是两者不同,Vector主要用在事先不知道数组

的大小,或者只是需要一个可以改变大小的数组的情况。

4)ArrayList与Vector的区别:

ArrayList是非线程安全的,效率高

Vector是基于线程安全的,效率低。

③Set:也是collection的扩展,在Set中的元素对象要求不能重复(注意:元素虽然无

放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)。常用实现类有HashSet和TreeSet。

1)HashSet:其核心是HashMap,HashSet中存放的值为HashMap中的key,这也就是HashSet不允许重复的原因。

2)TreeSet:底层由平衡二叉树实现,它会将投入其中的元素自动排序,这就要求投入其中的元素是可排序的,也就是说,存放的必须是同一种数据类

型。其实现自动排序的实质是compareable,即

public int compareTo(Object obj){

if( equals( obj ) ){

return 0;

}else{

Return 1;

}

}

这个方法称为比较器,可以比较两个对象,如果对象都一致相等,则返回0

④Map:没有继承collection接口,提供key到value的映射,也就是说,它是一种把键对象和值对象进行关联的容器。

1)HashMap:key不允许重复,如果后面的key重复,则会覆盖前面的值,key 允许为null,但是只能有一个。

2)TreeMap:key如果是一个对象的话,这个对象所在的类一定要实现compareable接口,并且重写compareTo方法。

3)HashMap与HashTable比较:

HashMap:非线程安全,高效率,支持null

HashTable:线程安全,低效率,不支持null

12、list、set和map的遍历方法比较:

List:可以用for循环、for each循环和Iterator迭代。

Set:可以用for each循环和Iterator迭代。

Map:HashMap只能用Iterator迭代。

13、写一个单例设计模式:

Public class Apple{

Private static Apple apple;

Private Apple( ){

}

Public static Apple getApple( ){

If(null == apple){

apple = new Apple( );

return apple;

}else{

return apple;

}

}

}

相关文档
最新文档