Java-八股2

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运行时,对与任意一个类,我们可以获取它的成员变量和构造器,对于任意一个对象,可以调用它的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值