面试心得
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. 处理机调度的基本单位是线程 .
八、什么是线程安全 ?
当多个线程访问某个类时,不管运行时环境采用何种调度方式或者线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为。 线程安全的核心
是 “ 正确性 ” ,也就是说当多个线程访问某个类时,能够得到预期的结果,那么就是线程安全的。
不同点在于:
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. 处理机调度的基本单位是线程 .
八、什么是线程安全 ?
当多个线程访问某个类时,不管运行时环境采用何种调度方式或者线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为。 线程安全的核心
是 “ 正确性 ” ,也就是说当多个线程访问某个类时,能够得到预期的结果,那么就是线程安全的。
相关文章推荐
- 面试心得
- 程序员:编程能力与编程年龄的关系
- 面试题37:两个链表的第一个公共节点
- 第十一讲:软考中高项11_法律法规、标准规范、职业道德
- java 面试心得总结-BAT、网易
- 第三讲:软考中高项03_项目管理一般知识、立项管理
- 一道值得收藏的java面试题
- 置顶 一位近60岁的美国程序员令我狼狈不堪的回复
- 当程序员一天天老去.哪些人晚景凄凉
- 程序员面试宝典--8.3循环和数组 zigzag编码
- 腾讯PHP工程师面试题两份
- 面试题36:数组中的逆序对(归并排序思想)
- Java面试题和答案——终极列表(上)
- 黑马程序员_Java基础_我的Day25学习笔记
- 《程序员修炼之道》---- 修的是什么
- 程序员,你会从 Bug 中学习么?【转载】
- PHP程序员守则
- 三个方法让你成为更好的程序员
- 教你如何迅速秒杀掉:99%的海量数据处理面试题
- 面试经验