Java程序员框架面试题及答案

时间:2024-10-25 09:21:37 秀雯 JAVA认证 我要投稿
  • 相关推荐

Java程序员集合框架面试题及答案

  在现实的学习、工作中,我们很多时候都会有考试,接触到试题,借助试题可以对一个人进行全方位的考核。什么样的试题才能有效帮助到我们呢?以下是小编精心整理的Java程序员集合框架面试题及答案,仅供参考,欢迎大家阅读。

Java程序员集合框架面试题及答案

  Java程序员框架面试题及答案 1

  1. 什么是Java集合API

  Java集合框架API是用来表示和操作集合的统一框架,它包含接口、实现类、以及帮助程序员完成一些编程的算法。简言之,API在上层完成以下几件事:

  ● 编程更加省力,提高城程序速度和代码质量

  ● 非关联的API提高互操作性

  ● 节省学习使用新API成本

  ● 节省设计新API的时间

  ● 鼓励、促进软件重用

  具体来说,有6个集合接口,最基本的是Collection接口,由三个接口Set、List、SortedSet继承,另外两个接口是Map、SortedMap,这两个接口不继承Collection,表示映射而不是真正的集合。

  interview-questions

  2. 什么是Iterator

  一些集合类提供了内容遍历的功能,通过java.util.Iterator接口。这些接口允许遍历对象的集合。依次操作每个元素对象。当使用Iterators时,在获得Iterator的时候包含一个集合快照。通常在遍历一个Iterator的时候不建议修改集合本省。

  3. Iterator与ListIterator有什么区别?

  Iterator:只能正向遍历集合,适用于获取移除元素。ListIerator:继承Iterator,可以双向列表的遍历,同样支持元素的修改。

  4.什么是HaspMap和Map?

  Map是接口,Java 集合框架中一部分,用于存储键值对,HashMap是用哈希算法实现Map的类。

  5.对比Hashtable VS HashMap

  HashMap与HashTable有什么区别?

  两者都是用key-value方式获取数据。Hashtable是原始集合类之一(也称作遗留类)。HashMap作为新集合框架的一部分在Java2的1.2版本中加入。它们之间有一下区别:

  ● HashMap和Hashtable大致是等同的,除了非同步和空值(HashMap允许null值作为key和value,而Hashtable不可以)。

  ● HashMap没法保证映射的顺序一直不变,但是作为HashMap的子类LinkedHashMap,如果想要预知的'顺序迭代(默认按照插入顺序),你可以很轻易的置换为HashMap,如果使用Hashtable就没那么容易了。

  ● HashMap不是同步的,而Hashtable是同步的。

  ● 迭代HashMap采用快速失败机制,而Hashtable不是,所以这是设计的考虑点。

  6. 在Hashtable上下文中同步是什么意思?

  同步意味着在一个时间点只能有一个线程可以修改哈希表,任何线程在执行hashtable的更新操作前需要获取对象锁,其他线程等待锁的释放。

  7. 什么叫做快速失败特性

  从高级别层次来说快速失败是一个系统或软件对于其故障做出的响应。一个快速失败系统设计用来即时报告可能会导致失败的任何故障情况,它通常用来停止正常的操作而不是尝试继续做可能有缺陷的工作。当有问题发生时,快速失败系统即时可见地发错错误告警。在Java中,快速失败与iterators有关。如果一个iterator在集合对象上创建了,其它线程欲“结构化”的修改该集合对象,并发修改异常 (ConcurrentModificationException) 抛出。

  8.怎样使Hashmap同步?

  HashMap可以通过Map m = Collections.synchronizedMap(hashMap)来达到同步的效果。

  9.什么时候使用Hashtable和HashMap

  基本的不同点是Hashtable同步HashMap不是的,所以无论什么时候有多个线程访问相同实例的可能时,就应该使用Hashtable,反之使用HashMap。非线程安全的数据结构能带来更好的性能。

  如果在将来有一种可能—你需要按顺序获得键值对的方案时,HashMap是一个很好的选择,因为有HashMap的一个子类LinkedHashMap。所以如果你想可预测的按顺序迭代(默认按插入的顺序),你可以很方便用LinkedHashMap替换HashMap。反观要是使用的Hashtable就没那么简单了。同时如果有多个线程访问HashMap,Collections.synchronizedMap()可以代替,总的来说HashMap更灵活。

  10.关于Vector类

  为什么Vector类认为是废弃的或者是非官方地不推荐使用?或者说为什么我们应该一直使用ArrayList而不是Vector?

  你应该使用ArrayList而不是Vector是因为默认情况下你是非同步访问的,Vector同步了每个方法,你几乎从不要那样做,通常有想要同步的是整个操作序列。同步单个的操作也不安全(如果你迭代一个Vector,你还是要加锁,以避免其它线程在同一时刻改变集合).而且效率更慢。当然同样有锁的开销即使你不需要,这是个很糟糕的方法在默认情况下同步访问。你可以一直使用Collections.sychronizedList来装饰一个集合。

  事实上Vector结合了“可变数组”的集合和同步每个操作的实现。这是另外一个设计上的缺陷。Vector还有些遗留的方法在枚举和元素获取的方法,这些方法不同于List接口,如果这些方法在代码中程序员更趋向于想用它。尽管枚举速度更快,但是他们不能检查如果集合在迭代的时候修改了,这样将导致问题。尽管以上诸多原因,oracle也从没宣称过要废弃Vector.

  Java程序员框架面试题及答案 2

  1、Collection 和 Collections的区别?

  Collection是集合的根接口,其下有set及list

  Collections是集合的算法。

  2、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用?

  在比较时先调用hashCode方法,如果不相同,证明不相等。

  如果相同,再调用equals方法,如果equals方法相同,证明相等,不相同,证明不相等。

  ==:主要用在基本数据类型及引用

  equals:主要是对象或对象引用的比较。

  集合中是否包含某一个元素用contains来判断。

  3、List,Set,Map是否继承自Collection接口?

  List,set继承于Collection

  Map没有继承于Collection,其相对是独立的。

  属于Collection类型的对象,可以通过构造函数将一个集合构造成另外一个集合。

  4、面向对象的特征有哪些方面?

  1.抽象:

  找共性,将共有的属性、方法放到父类中

  2.继承:

  子类继承于父类,具有父类的所有属性与方法,可以重用,也可以覆盖。

  3.封装:

  一个类包括多个属性及方法。

  4. 多态性:

  5、String是最基本的数据类型吗?

  基本数据类型包括byte、int、char、long、float、double、boolean和short。

  java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类

  6、int 和 Integer 有什么区别?

  int 是基本数据类型,不是对象,占一个内存空间,没有方法。与其同类的有long,char,doble

  Integer是封装类,具有方法及属性。与其同类的有Long,Double.Float

  7、运行时异常与一般异常有何异同?

  运行时异常:JVM抛出的异常,代码中不用处理。

  一般异常:用户抛出的异常,如果用throws 声明了,调用这个方法的代码必须对其处理。

  8、&和&&的区别?

  &:与: 左边若为false右边还执行。

  &&:短路与,左边若为false右边不执行。

  9、final,finally,finalize的区别?

  final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

  finally是异常处理语句结构的一部分,表示总是执行。

  finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

  10、heap和stack有什么区别?

  栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的.方式进行处理。堆是栈的一个组成元素

  11、Static Nested Class 和 Inner Class的不同?

  Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。

  12、GC是什么? 为什么要有GC?

  GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

  13、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

  short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)

  short s1 = 1; s1 += 1;(可以正确编译)

  14、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

  Math.round(11.5)==12

  Math.round(-11.5)==-11

  round方法返回与参数最接近的长整数,参数加1/2后求其floor.

  15、Java有没有goto?

  java中的保留字,现在没有在java中使用。

  16、给出一个你最常见到的runtime exception 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

  一般异常:

  IOException

  FileNotFoundException

  SqlException

  17、数组有没有length()这个方法? String有没有length()这个方法?

  数组没有length()这个方法,有length这个属性

  String有length()这个方法.

  18、构造器Constructor是否可被override?

  构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

  19、是否可以继承String类?

  String类是final类故不可以继承。

  20、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

  switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

  21、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

  会执行,在return前执行。

  22、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

  不对,有相同的 hash code

  这是java语言的定义:

  1) 对象相等则hashCode一定相等;

  2) hashCode相等对象未必相等

  23、四种会话跟踪技术?

  Cookie

  Session

  Hidden

  url 重写

  24、写一个Singleton出来。

  Singleton模式主要作用是保证在Java应用程序中,一个类只有一个实例存在。

  一般Singleton模式通常有几种种形式:

  第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。

  public class Singleton {

  private Singleton(){}

  //在自己内部定义自己一个实例,是不是很奇怪?

  //注意这是private 只供内部调用

  private static Singleton instance = new Singleton();

  //这里提供了一个供外部访问本class的静态方法,可以直接访问

  public static Singleton getInstance() {

  return instance;

  }

  }

  第二种形式:

  public class Singleton {

  private static Singleton instance = null;

  public static synchronized Singleton getInstance() {

  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次

  //使用时生成实例,提高了效率!

  if (instance==null)

  instance=new Singleton();

  return instance; }

  }

  其他形式:

  定义一个类,它的构造函数为private的,所有方法为static的。

  一般认为第一种形式要更加安全些

  25、Java中的异常处理机制的简单原理和应用。

  原理: 有错直接转到异常处理部分或向上抛出。

  应用:JAVA的异常就是错误,有两种,一种是运行时,编码可以不用捕捉。一种是一般异常,如果throws声明了,必须进行处理。

  26、描述一下JVM加载class文件的原理机制?

  JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。

【Java程序员框架面试题及答案】相关文章:

2017年Java程序员面试题及答案03-30

java程序员面试题03-08

java面试题2017及答案03-06

sun认证java程序员须知Java日志框架03-30

Java main方法面试题及答案03-14

2017年经典的JAVA面试题及答案03-29

2017年java面试题及答案03-09

高级Java面试题及答案201602-26

NIIT认证Java面试题及答案03-30