Java基础知识总结(面试利器)

2020-09-27  本文已影响0人  iflymoon

正所谓学而时习之,温故而知新,最近在回顾Java基础知识的过程中有了和以前不一样的理解,所以在此记录一下,注意这仅供参考哦!如果有什么理解有误的地方希望大家可以纠正,共同探讨,一起进步。

抽象类和接口

我认为Java中抽象类主要承担着封装的角色,而接口主要承担着多态的角色,接口是一种约定,实现接口的类要遵循这个约定,举个栗子吧,usb3.0就是一种规范,插口尺寸就是接口中的常量,传输数据、充电就是对应的方法,抽象类是一个类,主要是对一些拥有共同属性或方法的对象的一种封装。

HashMap、TreeMap、ConcurrentHashMap对比

使用最多的通常是HashMap,如果需要有顺序的存储则使用TreeMap,并且可以自己定义排序规则,ConcurrentHashMap用在要求线程安全的情况下。

equals()和hashCode()的联系

equals()比较时有时可能会很复杂,这样效率就比较低,而利用hashCode()进行对比,则只要生成一个hash值进行比较就可以了,效率很高,那么hashCode()既然效率这么高为什么还要equals()呢?因为hashCode()并不是完全可靠,有时候不同的对象他们生成的hashCode也会一样,所以hashCode()只能说是大部分时候可靠,并不是绝对可靠,所以我们可以得出如下结论:

回到实际应用中,通常我们在重写一个类的equals方法时会同时重写它的hashCode方法,这主要是因为每当需要对比的时候,首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等(也就是不必再用equals()去再对比了),如果hashCode()相同,此时再对比他们的equals(),如果equals()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性!

finally{}里的代码一定会执行吗?

总结下来就是:与finally相对应的try语句得到执行的情况下,finally才有可能执行。finally执行前,程序或线程终止,finally不会执行。

sleep()方法和wait()方法对比

其实这两个方法完全没有可比性,因为是两个不同类的方法,只是因为都有使线程休眠的功能,所以面试时可能会经常被面试官拿来作比较。

常用的设计模式

所谓设计模式,就是一套被反复使用的代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

List、Set、Map的区别

在Java容器中一共定义了2种集合,顶层接口分别是Collection和Map。简单来看,Collection代表的是单个元素对象的序列,(可以有序/无序,可重复/不可重复等,具体依据具体的子接口Set,List,Queue等);Map代表的是“键值对”对象的集合(同样可以有序/无序等依据具体实现)。具体实现类如下图所示:

上一篇 下一篇

猜你喜欢

热点阅读