[1]. 抽象类和接口的区别
接口体现的是一种规范,适用于定义类的能力或功能;抽象类体现的是一种模板式设计,适用于有明显继承关系的场景。
实现接口的关键字为implements,继承抽象类的关键字为extends。
接口只有方法的定义不能有方法的实现,抽象类可以有定义与实现。
一个类可以实现多个接口,但只能继承一个抽象类。
接口只能包含常量,抽象类可以包含实例变量和静态变量。
[2]. Redis缓存击穿以及解决方案
缓存中的某个热点数据过期了,此时大量的请求访问该热点数据,自然无法从缓存中读取,于是直接访问数据库,但数据库很容易被高并发的请求冲垮,从而引起的问题就是缓存击穿。
解决缓存击穿的方案:
- 将热点数据设置为永不过期。
- 对数据的访问加互斥锁。
[3]. 重写和重载的区别
方法的重写和重载都是实现多态的方式,重写实现的是运行时多态,重载实现的是编译时多态。
重写是子类重新定义父类中的方法,重载是在同一个类中定义多个同名的方法。
重写的方法名,参数列表必须相同;重载的方法名相同但参数列表(参数个数,顺序,类型)不同。
重写的子类返回值类型、抛出的异常范围小于等于父类、访问修饰符大于等于父类,重载与返回值类型、访问修饰符无关。
[4]. 什么是依赖注入
依赖注入(Dependency Injection)是指类之间的依赖关系由容器来负责。比如说a依赖b,但a不创建(或销毁)b,仅使用b,b的创建(或销毁)交给容器。
[5]. 设计模式-单例模式
单例模式是一种创建型设计模式,它限制了一个类只能实例化一个对象,并提供一个全局访问点以供其他对象使用。
Windows系统的任务管理器和回收站都是典型的单例模式的应用。
[6]. 事务的四种隔离级别
读未提交(read uncommitted):一个事务还没提交时,它做的变更就能被其他事务看到;
读已提交(read committed):指一个事务提交之后,它做的变更才能被其他事务看到;
可重复读(repeatable read):指一个事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的;
可串行化(serializable):对记录加上读写锁,在多个事务对这条记录进行读写操作时,如果发生了读写冲突,后访问的事务必须等前一个事务执行完成,才能继续执行;