java面试(三)

异常处理考核点

1.throw和throws的区别?

throw用在方法体内,用法:throw 异常对象 ,表示把异常抛给本方法,让本方法用throws或者try…catch处理
throws用在方法名后,用法:throws 异常类名 , 当本方法throw出异常时,把该异常抛给调用者

2.Error和 Exception的区别?

他们都继承Throwable接口,表示可抛出的。
Error是程序中不可预料的,不正常的异常状态,不可被捕捉,会导致jvm不可处理,不可恢复。
Exception是程序中可预料的意外情况,可以被捕捉并处理。

3.请说出你最常见的5个RuntimeException

NullPointerException 空指针异常
ArrayIndexOutOfBoundsException 数组下标越界异常
ClassCastException 强制转换异常
NumberFormatException 数字格式异常
IllegalArgumentException 非法参数异常

4.final、finally、finalize的区别?

final为修饰符,表示最终的,修饰的类不能被继承,方法不能被重写,变量不能被修改
finally是在异常处理时提供finally块来执行任何清除操作。不管有没有异常被抛出、捕获,finally块都会被执行。
finalize是一个Object类中的方法,当垃圾回收器回收该对象前调用该方法。

6.异常的处理机制有几种?

两种
1.使用throws 异常类名,当方法中出现异常时,把该异常抛给该方法的调用者。
2.使用try{}catch(){},当try代码块中出现异常时,catch语句块中代码对该异常进行处理。

7.Java 反射创建对象效率高还是通过new创建对象的效率高?

通过new创建对象的效率比较高。
通过反射时,先找查找类资源,使用类加载器创建,过程比较繁琐,所以效率较低。

8.哪里会用到反射机制?

1.模块化的开发,通过反射去调用对应的字节码
2.动态代理设计模式采用了反射机制
3.Spring、SpringBoot框架使用了大量的反射机制
4.可以使用反射机制创建对象

9.注解是什么?

Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。
和注释不同,Java 注解可以通过反射获取注解内容。在编译器生成类文件时,注解可以被嵌入到字节码中。Java 虚拟机可以保留注解内容,在运行时可以获取到注解内容 。 当然它也支持自定义 Java 注解。
不是程序本身,可以对程序作出解释。
可以被其他程序(比如编译器)读取。

集合考核点【重点】

10、请描述—下你对集合的理解?(集合中数据不可被序列化)

Java中的集合就是一种数据的容器,按照不同的存储特点,对数据进行存储与管理;

11、Collection集合与Map集合区别?

Collection是单列集合,只能存储一种类型的元素
Map是以键和值的方法存储数据,是双列集合,可存储不同类型的元素

12、List集合与set集合区别?

二者都继承了Collection
List存储数据有序可重复
Set存储数据无序不可重复

13、ArrayList与LinkedList区别?

ArrayList底层结构是数组,查询数据快,添加修改数据慢,扩容倍数1.5
LinkedList底层结构是双向链表,查询数据慢,添加修改数据快,没有扩容问题

14、ArrayList与Vector区别?

ArrayList和Vector都实现List接口,都是使用数组存储元素
ArrayList不是线程安全的,效率相对较高,默认容量为0,第一次添加改为10,扩容因子为1.5,不可设置
Vector是线程安全的,效率相对较低,可自行设置初始容器大小,默认为10,可自行设置扩容因子,默认为2

15、HashSet和TreeSet区别?

HashSet是哈希表实现的,数据是无序的,可以放入null,但最多放一个
TreeSet是二叉树实现的,数据是按照某种规则排列好的,不可以放null

16、如何去Vector集合中重复数据?

1.创建一个新的Vector对象,使用遍历原对象,如果一个元素没有在新对象中出现,则把该对象添加到新的Vector对象。(判断一个元素是否在Vector对象中可以用contains方法)
2.使用HashSet去重,HashSet中元素是不可重复的,代码如下

HashSet hs = new HashSet(vector);
Vector newVector = new Vector();
newVector.addAll(hs);

17、Collection与Collecctions区别?

Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。
Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。

18、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?
使用equals方法来去重的,在hashset对象添加数组时调用hashmap的方法put方法,hashmap通过hash值与equals方法判断对象是否相同

if ((p = tab[i = (n - 1) & hash]) == null)
            tab[i] = newNode(hash, key, value, null);
        else {
            Node<K,V> e; K k;
            //这里先判断key的hash值是否相同,后通过判断==或equals
            //equals判断要比==严格,==返回true,equals必返回true
            //因此我们说set使用equals判断对象是否重复。
            if (p.hash == hash &&
                ((k = p.key) == key || (key != null && key.equals(k))))
                e = p;

19、HashMap与Hashtable区别?

二者都实现Map接口
HashMap是非线程安全的,效率较快,key中可以有一个null,默认初始容量为16,扩容倍数为2
HashTable是线程安全的,效率较慢,key不可以有null,默认初始容量为11,扩容数为原来的2倍+1

20、集合迭代器的接口?

Iterator,用于遍历集合,有hasNext()和next()方法

21、HashMap底层原理【难点重点】

hashmap的底层是 数组+单向链表
当添加数据时,hashmap获取key的hash值,hash对数组的长度取余,获得值作为下标,查看改下标下是否有值,若没有直接把该值插入,若有值则创建链表,把要添加的数据加到链表之后。
hashmap扩容的负载因子是0.75,也就是说当数组有75%的位置有值的话,hashmap的数组就会扩容。扩容容量为扩容之前的两倍。
当有数组长度达到64或者有链表长度达到8是,hashmap结构变成红黑树,解决链表过长查询效率过低的问题

22、总结一下Java语言中哪些集合是线程安全的

Vector、HashTable、Stack

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狴犴ys

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值