整理Java面试题 Q&A (reviewing)

239 阅读2分钟

一、基础

1. 多态

指父类的某个方法被子类重写时,可以产生自己的功能行为。
就像一千个人眼里有一千个哈姆雷特。

2. 反射

能够获取到Java中要反射类的字节码。
- 1. Class.forName(className)

- 2. 类名.class

- 3. this.getClass()。

3. Java泛型

类型 含义
<?> 无界泛型,任意类型都匹配
<T extends ClassA> 有界泛型 - 继承自某父类
<T extends InterfaceB> 有界泛型 - 实现某接口
<T extends ClassA & InterfaceB & InterfaceC ... > 有界泛型 - 多重边界
<T super ClassC> 有界泛型 - 指定类父类

4. String能被继承吗?

不可以,因为String类有final修饰符。

5. String, Stringbuffer, StringBuilder 的区别

StringBuffer 字符串变量(线程安全),其也是final类别的。 StringBuilder 字符串变量(非线程安全)。

6. 集合

List:有序、可重复;索引查询速度快;插入、删除伴随数据移动,速度慢;

Set:无序,不可重复;

Map:键值对,键唯一,值多个;

LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的;

HashMap是非线程安全的,HashTable是线程安全的;

StringBuilder是非线程安全的,StringBuffer是线程安的。

  • HashMap、HashSet

7. ArrayList 和 LinkedList 区别

ArrayList是基于索引的数据接口,它的底层是数组。 LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用。

8. Map 类的区别

  • hashMap

线程不安全。

HashMap是数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的,采用哈希表来存储的。

  • Hashtable

采用对象锁(synchronized修饰对象方法),

HashTable的get/put方法都被synchronized关键字修饰,说明它们是方法级别阻塞的。

  • ConcurrentHashMap

并发度就是segment的大小,默认为16,这意味着最多同时可以有16条线程操作ConcurrentHashMap。

  • 顺序的 Map 实现类

TreeMap和LinkedHashMap是有序的,TreeMap默认升序,LinkedHashMap则记录了插入顺序。

二、多线程

1. 锁

自己整理写的:

Java那么多锁,能锁住灭霸吗?

也有改编成漫画哈哈

码妞:Java那么多锁,能锁住灭霸吗?

2. 线程池

笔记:

Java线程池 你知它有多深

码妞漫画:

码仔漫画:怎么给女朋友讲明白线程池?

3. 线程池怎样复用?

三、JMM

保证共享内存的原子性、可见性、有序性。

线程的工作内存是线程私有内存,线程间无法互相访问对方的工作内存。

  • 线程安全

四、JVM

JVM好像很难鸭,难也要看吖

参考