11.Object类有哪些方法?
equal、hashCode、wait、notify,notifyAll、clone、getClass、toString、finalized
12.说一下集合体系:
集合可分为Collection和Map,List可分为Set和List,List可分为ArryList、LinkedList,Set可分为HashSet和TreeSet,LinkedHashSet,Map可分为HashMap、TreeMap、LinkedHashMap
13.ArryList和LinkedList的区别
- ArryList基于动态数组的数据结构,LinkedList基于链表实现;
- ArryList在查和改上效率高,LinkedList在增和删上效率高
14.HashMap底层是数组+链表+红黑树,为什么?
在JDK8之前,HashMap的底层是数组+链表,在JDK8之后,对于链表长度超过8的改用红黑树实现(如果数组长度小于64,会对数组进行扩容而非改用红黑树)。
- Node <K,V>[] table;对key计算hash值后,将value存放在对应的节点处。
- 若节点已存储值,则代表发生hash冲突,存储到链表相应的槽位。
- 若链表长度过长,那么便利链表的代价太大,故JDK8之后对应长度超过8个节点的链表,改用红黑树存储,将遍历的时间复杂度从o(n)降低到o(logn)。
15.HashMap和HashTable区别
- HashTable是线程安全的,HashMap是线程不安全的。因为HashTable的方法都被synchronized修饰。
- HashTable和HashMap均有containsValue()和containsKey()方法,而HashTable还有contains方法,在作用上containsValue和contains方法是一样的
- HashMap允许一个key值为null,多个value可为null;HashTable的key和value均不可为null
- HashMap在不指定容量的时候为16,HashTable为11。HashMap扩容为扩大2倍,其值必须为2的幂次方,HashTable为扩大2倍再加1,其值没有要求必须为2的幂次方。在初始化的时候指定了集合的大小,HashMap会对其扩大到2的幂次方,而HashTable则会直接使用该大小。
- HashTable尽量避免使用,为确保线程安全可以使用ConCurrentHashMap类
16.线程的创造方式
- 继承Thread类
- 实现Runnable接口
- Callable
- 线程池(重中之重)
17.线程的状态转换
JDK5之前,线程有新建,就绪,运行,阻塞,死亡五种状态。
JDK5之后,线程有新建,就绪,运行,等待阻塞,计时阻塞,同步阻塞,死亡七种状态
18.Java中的几种流
1. 字节流(Byte Streams)
字节流用于处理二进制数据(如图片、视频、音频文件等)。它们不会使用字符来作为数据的最小单位,而是使用字节。
输入字节流 (
InputStream
):用于从数据源读取数据到程序中。常见的子类有FileInputStream
(用于从文件读取数据)、BufferedInputStream
(带缓冲的输入流,提高读取效率)、ObjectInputStream
(用于读取序列化后的对象)等。输出字节流 (
OutputStream
):用于将数据写入到目的地。常见的子类有FileOutputStream
(用于向文件写入数据)、BufferedOutputStream
(带缓冲的输出流,提高写入效率)、ObjectOutputStream
(用于写入序列化后的对象)等。2. 字符流(Character Streams)
字符流用于处理文本数据。它们以字符为最小单位来处理数据,可以方便地处理Unicode字符。
输入字符流 (
Reader
):用于从数据源读取文本数据。常见的子类有FileReader
(用于从文件读取文本数据)、BufferedReader
(带缓冲的读取器,提高读取效率)、InputStreamReader
(将字节流转换为字符流)等。输出字符流 (
Writer
):用于将文本数据写入到目的地。常见的子类有FileWriter
(用于向文件写入文本数据)、BufferedWriter
(带缓冲的写入器,提高写入效率)、OutputStreamWriter
(将字符流转换为字节流)等。
19.常见的RuntimeExcecption
数组越界:IndexOutOfBoundException
字符串转化数字转化错误:NubmerFormatException
类型转化错误:ClassCastException
空指针异常:NullPointException
传参类型错误:IllegalArgumentException
20.谈谈你对反射的理解
反射是Java中自视的一种手段。它借助于Class、Field、Method、Constructor类实现,其中Class获取类对象,Field获取类的成员属性,Constructor获取类的构造器,Method获取类的方法。通过反射机制,在Java运行时,对与任意一个类,我们可以获取它的成员变量和构造器,对于任意一个对象,可以调用它的方法。