面试心得

一、 接口和抽象类的区别是什么 ?
不同点在于:


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. 处理机调度的基本单位是线程 .


八、什么是线程安全 ?
当多个线程访问某个类时,不管运行时环境采用何种调度方式或者线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为。 线程安全的核心
是 “ 正确性 ” ,也就是说当多个线程访问某个类时,能够得到预期的结果,那么就是线程安全的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值