接口和抽象类的区别是什么
1.接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),抽象类可以有非抽象的方法。
2.接口中的实例变量默认是 final 类型的,而抽象类中则不一定。
3.一个类可以实现多个接口,但最多只能实现一个抽象类。
4.一个类实现接口的话要实现接口的所有方法,而抽象类不一定。
5.接口不能用 new 实例化,但可以声明,但是必须引用一个实现该接口的对象 从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。
备注: 在JDK8中,接口也可以定义静态方法,可以直接用接口名调用。实现类和实现是不可以调用的。如果同时实现两个接口,接口中定义了一样的默认方法,必须重写,不然会报错。
https://blog.csdn.net/fenglibing/article/details/2745123
常见的数据结构有哪些
数组:
数组是最常用的数据结构,数组的特点是长度固定,可以用下标索引,并且所有的元素的类型都是一致的。数组常用的场景有:从数据库里读取雇员的信息存储为EmployeeDetail[ ];把一个字符串转换并存储到一个字节数组中便于操作和处理等等。尽量把数组封装在一个类里,防止数据被错误的操作弄乱。另外,这一点也适合其他的数据结构。
列表:
列表和数组很相似,只不过它的大小可以改变。列表一般都是通过一个固定大小的数组来实现的,并且会在需要的时候自动调整大小。列表里可以包含重复的元素。常用的场景有,添加一行新的项到订单列表里,把所有过期的商品移出商品列表等等。一般会把列表初始化成一个合适的大小,以减少调整大小的次数。
集合:
集合和列表很相似,不过它不能放重复的元素。
堆栈:
堆栈只允许对最后插入的元素进行操作(也就是后进先出,Last In First Out – LIFO)。如果你移除了栈顶的元素,那么你可以操作倒数第二个元素,依次类推。这种后进先出的方式是通过仅有的peek(),push()和pop()这几个方法的强制性限制达到的。
队列:
队列和堆栈有些相似,不同之处在于在队列里第一个插入的元素也是第一个被删除的元素(即是先进先出)。这种先进先出的结构是通过只提供peek(),offer()和poll()这几个方法来访问数据进行限制来达到的。例如,排队等待公交车,银行或者超市里的等待列队等等,都是可以用队列来表示。
链表:
链表是一种由多个节点组成的数据结构,并且每个节点包含有数据以及指向下一个节点的引用,在双向链表里,还会有一个指向前一个节点的引用。例如,可以用单向链表和双向链表来实现堆栈和队列,因为链表的两端都是可以进行插入和删除的动作的。当然,也会有在链表的中间频繁插入和删除节点的场景。Apache的类库里提供了一个TreeList的实现,它是链表的一个很好的替代,因为它只多占用了一点内存,但是性能比链表好很多。也就是说,从这点来看链表其实不是一个很好的选择。
https://blog.csdn.net/weixin_42288131/article/details/81458963
列举5种常见的运行时异常
(1)java.lang.NullPointerException 【空指针异常】
(2)java.lang.ClassNotFoundException 【类找不到异常】
(3)java.lang.NumberFormatException 【数字格式化异常】
(4)java.lang.IndexOutOfBoundsException 【数组角标越界异常】或 【数组索引越界异常】
(5)java.lang.IllegalArgumentException 【非法参数异常】
(6)java.lang.ClassCastException 【类型转换异常】
(7)java.lang.NoClassDefFoundException 【类未定义异常】
(8)SQLException 操作数据库异常 【SQL异常】
(9)java.io.IOException 【IO异常】
(10)java.lang.NoSuchMethodException 【没有匹配方法异常】
https://blog.csdn.net/iblade/article/details/50523263
List 的三个子类的特点
ArrayList 底层结构是数组,底层查询快,增删慢
LinkedList 底层结构是链表型的,增删快,查询慢
Voctor 底层结构是数组 线程安全的,增删慢,查询慢
https://blog.csdn.net/wangzff/article/details/7296648
List 和 Map、Set 的区别
结构特点:
List 和 Set 是存储单列数据的集合,Map 是存储键和值这样的双列数据的集合;
List 中存储的数据是有顺序,并且允许重复;
Map 中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的,Set中存储的数据是无序的,且不允许有重复,但元素在集合中的位置由元素的 hashcode 决定,位置是固定的(Set 集合根据 hashcode 来进行数据的存储,所以位置是固定的,但是位置不是用户可以控制的,所以对于用户来说 set 中的元素还是无序的);
实现类
List 接口有三个实现类(LinkedList:基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢;ArrayList:基于数组实现,非线程安全的,效率高,便于索引,但不便于插入删除;Vector:基于数组实现,线程安全的,效率低)。
Map 接口有三个实现类(HashMap:基于 hash 表的 Map 接口实现,非线程安全,高效,支持 null 值和 null键;HashTable:线程安全,低效,不支持 null 值和 null 键;LinkedHashMap:是 HashMap 的一个子类,保存了记录的插入顺序;SortMap 接口:TreeMap,能够把它保存的记录根据键排序,默认是键值的升序排序)。
Set 接口有两个实现类(HashSet:底层是由 HashMap 实现,不允许集合中有重复的值,使用该方式时需要重写 equals()和 hashCode()方法;LinkedHashSet:继承与 HashSet,同时又基于 LinkedHashMap 来进行实现,底层使用的是 LinkedHashMp)。
https://blog.csdn.net/lmarster/article/details/90672794
总结
今天我们复习了面试中常考的JavaSE相关的五个问题,你做到心中有数了么?
对了,如果你的朋友也在准备面试,请将这个系列扔给他,
好了,今天就到这里,学废了的同学,记得在评论区留言:打卡。给同学们以激励。