您的位置:首页 > 职场人生

面试心得

2016-07-13 14:13 239 查看
一、 接口和抽象类的区别是什么 ?

不同点在于:

1.    接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。

2.    类可以实现很多个接口,但是只能继承一个抽象类

3.    类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。

4.    抽象类可以在不提供接口方法实现的情况下实现接口。

5.    Java 接口中声明的变量默认都是 final 的。抽象类可以包含非 final 的变量。

6.    Java 接口中的成员函数默认是 public 的。抽象类的成员函数可以是 private , protected 或者是 public。

7.    接口是绝对抽象的,不可以被实例化 (java 8 已支持在接口中实现默认的方法 ) 。抽象类也不可以被实例化,但是,如果它包含 main 方法的话是可以被调用的。

二、构造器( constructor )是否可被重写( override ) ?

构造方法是不能被子类重写的,但是构造方法可以重载,也就是说一个类可以有多个构造方法。

三、String, StringBuffer StringBuilder 的区别。

String 的长度是不可变的;

StringBuffer 的长度是可变的,如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer ,如果最后需要 >String ,

那么使用 StringBuffer 的 toString() 方法;线程安全;

StringBuilder 是从 JDK 5 开始,为 StringBuffer 该类补充了一个单个线程使用的等价类;通常应该优先使用 StringBuilder 类,因 > 为它支持所有相同的操作,但由于它不执行同步,

所以速度更快。 使用字符串的时候要特别小心,如果对一个字符串要经常改变的话,就一定不要用 String, 否则会创建许多无用的对象出来 . 来看一下比较

String s = "hello"+"world"+"i love you";

StringBuffer Sb = new StringBuilder("hello").append("world").append("i love you");

这个时候 s 有多个字符串进行拼接,按理来说会有多个对象产生,但是 jvm 会对此进行一个优化,也就是说只创建了一个对象,此时它的执行速度要比 StringBuffer 拼接快 . 再看下面

这个 :

String s2 = "hello"; 

String s3 = "world"; 

String s4 = "i love you"; 

String s1 = s2 + s3 + s4;

上面这种情况,就会多创建出来三个对象,造成了内存空间的浪费 .

四、HashMap 与 HashTable 的区别是什么 ?

1.HashTable 基于 Dictionary 类,而 HashMap 是基于 AbstractMap 。 Dictionary 是任何可将键映射到相应值的类的抽象父类,而 AbstractMap 是基于 Map 接口的实现,它以最大限度

地减少实现此接口所需的工作。(在 java 8 中我查看源码发现 Hashtable 并没有继承 Dictionary, 而且里面也没有同步方法,是不是 java 8 中 Hashtable 不在同步的了?有没有人解释

一下?) 2. HashMap 的 key 和 value 都允许为 null ,而 Hashtable 的 key 和 value 都不允许为 null 。 HashMap遇到 key 为 null 的时候,调用 putForNullKey 方法进行处理,而

对 value 没有处理; Hashtable 遇到 null,直接返回 NullPointerException 。 3. Hashtable 是同步的,而 HashMap 是非同步的,

但是我们也可以通过Collections.synchronizedMap(hashMap), 使其实现同步。

五、Array 和 ArrayList 有何区别?什么时候更适合用 Array ?

1.    Array 可以容纳基本类型和对象,而 ArrayList 只能容纳对象。

2.    Array 是指定大小的,而 ArrayList 大小是不固定的

六、LinkedList 和 ArrayList 的区别是什么 ?

1.    ArrayList 是基于数组实现, LinkedList 是基于链表实现

2.    ArrayList 在查找时速度快, LinkedList 在插入与删除时更具优势

七、什么是线程?进程和线程的关系是什么?

线程可定义为进程内的一个执行单位,或者定义为进程内的一个可调度实体。 在具有多线程机制的操作系统中,处理机调度的基本单位不是进程而是线程。一个进程可以有多个线程,

而且至少有一个可执行线程。 打个比喻 : 进程好比工厂 ( 计算机 ) 里的车间,一个工厂里有多个车间 ( 进程 ) 在运转 , 每个车间里有多个工人(线程)在协同工作,

这些工人就可以理解为线程。 线程和进程的关系 :1. 线程是进程的一个组成部分 .2. 进程的多个线程都在进程地址空间活动 .3. 系统资源是分配给进程的,线程需要资源时,

系统从进程的资源里分配给线程 .4. 处理机调度的基本单位是线程 .

八、什么是线程安全 ?

当多个线程访问某个类时,不管运行时环境采用何种调度方式或者线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为。 线程安全的核心

是 “ 正确性 ” ,也就是说当多个线程访问某个类时,能够得到预期的结果,那么就是线程安全的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: