题目整理

172 阅读4分钟

Java

Q:谈谈你对Java平台的理解

A:Java本身是一种面向对象的语言,最显著的特性有两个方面,一是所谓的“书写一次,到处运行”,能够非常容易地获得跨平台能力;另外就是垃圾收集,java通过垃圾收集器回收分配内存,大部分情况下,程序员不需要自己操心内存的分配和回收。

Q:JRE和JDK

A:JRE是Java运行环境,包含了JVM和Java类库,以及一些模块等。JDK可以看作是JRE的一个超集,提供了更多的工具,比如编译器、各种诊断工具。

Q:对于Java是解释执行这句话怎么解释?

A:这个说法不太准确。我们开发的Java的源代码,首先通过javac编译成为字节码,然后,在运行时,通过Java虚拟机也就是JVM将字节码转换成最终的机器码。但是常见的oracle的hotspot JVM提供JIT,可以在编译时将热点代码编译成机器码,在这种情况下热点代码就属于编译执行

Q:exception和error有什么区别

A:Exception和Error都是继承throwable类,java中只有throwable类的实例可以抛出或捕获。exception是正常情况下可以预见的异常,分为可检查和不检查,可以被捕获。error是正常情况下不可能出现的问题,例如oom这种的。或导致程序异常停止。

Q:谈谈final、finally、finalize有什么不同

A:final是关键字用例修饰类,方法和变量的,使用final修饰的类不可被继承扩展,String就是一个典型的final类。final修饰的变量不可修改。
finally是保证代码一定被执行的,出现异常之后仍需要执行的代码。一般是连接关闭这种用的比较多 finalize是object的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定的资源回收,具体没使用过

Q:强引用,软引用,弱引用,幻象引用的区别

A:强引用就是一般的普通对象引用,垃圾回收是不会回收这些对象的。
软引用比强引用弱一些,在OOM之前这些对象才会被回收 弱引用会直接被垃圾收集回收 幻象引用是不能通过它访问对象,仅仅是提供了一种确保对象被finalize以后,做某些事情的机制,具体没用到过

Q:String、Stringbuffer和Stringbuilder的区别

A:String是个final类,如果需要在字符串后增加都需要重新创建对象。Stringbuffer是用来解决这个问题的,可以通过append,add,在原字符串后面增加,或者在指定位置增加。Stringbuffer是线程安全的,对性能有些影响。自JDK1.5之后增加了Stringbuilder,它不是线程安全的,除非有线程安全的必要,建议使用Stringbuilder。

Q:int和Integer有什么区别

A:int是整形数字,是java八个原始数据之一,我们常说的java一起皆对象是除原始数据类型的。Interger是int的包装类,有一个int类型的字段存储数据,并且提供了基本操作,比如数学运算,int和字符串之间转换等。

Q:对比Vector、ArrayList、LinkedList有什么区别

A:Vector可扩展list,线程安全的,ArrayList差别不大,内部数据都是数组,但是ArrayList不是线程安全,并且需要扩容时,Vector是扩大一倍,ArrayList是扩大50%
LinkedList是双向链表,不支持动态扩容

Q:Hashtable、HashMap、TreeMap有什么不同

A:Hashtable是早期的hash表实现,它是同步的,不支持空的键值对,键值都不能为NULL;HashMap是应用更加广泛的哈希表,它不是同步的,也支持键值为NULL,并且它的get和put方法时间复杂度都是常量级别的;TreeMap是基于红黑树的一种提供顺序访问map,它的get、put等方法时间复杂度都是O(logn)。

Q:谈谈接口和抽象类的区别

A:接口是对行为的抽象,它是抽象方法的集合,利用接口可以达到API定义和实现分离的目的。接口不能实例化,不能包含非常量的成员,任何field都隐含public static final修饰,不能有非静态方法,要么是抽象方法,要么是静态方法;抽象类也是不能实例化的类,用abstract修饰,它的目的是为了代码重用。除了不能实例化,形式上和一般的java类并没有太大区别,可以有一个或者多个抽象方法,也可以没有抽象方法。