法大大(2023.4.6)

总结:(答得不是很完善的地方总结一下)

接口和抽象类的共同点和区别:

共同点:

  • 不可以被实例化
  • 可以包含抽象方法
  • 可以有默认的实现方法

区别:

  • 接口对类的行为进行约束,实现某接口已经拥有了的具体行为,抽象类代码复用,强调的是从属关系
  • 接口的成员变量只能用public static final修饰且不可修改并初始化,抽象类默认是default类型,可以在子类被重新定义且重新赋值
  • 一个类只能继承一个抽象类(单继承),可实现多个接口。

== 和 equals()方法

==:

  • 对于基本数据类型,直接比较值的大小
  • 对于引用类型,比较对象的内存地址

equals()方法:

比较对象是否相等,即对象的内存地址是否相等,一般也分为两种情况

  • 重写了,一般比较两个对象的成员属性是否相等
  • 未重写,比较的该类型的对象是否相等

try-catch-finally方法

  • 如果在catch中return了,那么finally里面的逻辑会在return之前被执行。
  • 如果catch和finally都有return,那么catch的return会被忽略,
  • 因为 try 语句中的 return 返回值会先被暂存在一个本地变量中,当执行到 finally 语句中的 return 之后,这个本地变量的值就变为了 finally 语句中的 return 返回值。
  • finally一般用于资源回收、比如线程、数据库资源回收的情况

HashMap和HashSet区别

  • 前者实现了Map接口,后者实现了Set接口
  • HashSet底层是HashMap实现存储的

HashMap和HashTable的区别

  • 前者继承了AbstractMap类,后者继承了Dictionary类
  • HashMap线程不安全,HashTable线程安全
  • contains不一样,HashMap没有contains方法只有containsValue和containsKey方法,但是HashTable这三个方法都有
  • key-value是否能为null,HashMap 都可以为null,HashTable都不可以null,否则就是空指针异常
  • 获取hashCode方法不一样

  HashMap先调用hashCode获取到了hash值之后,再与右移16位的hash值相异或获取hash值。

  HashTable直接通过hashCode方法获取

  • 解决hash冲突方法不一样

  HashMap通过数组+链表/红黑树,如果链表长度大于8,变成红黑树,若链表长度后面小于6,转回链表格式

  HashTable只有链表存储

项目介绍:

因为主要是自己写的、在redis那一块也比较熟悉,也自己解决了缓存雪崩的问题,后面也解决了缓存和数据库一致性问题,但是面试的时候忘记提了,可能提了会更加加分~