面试总结
zhaolengquan Lv3

重写和重载

重写是 子类继承父类, 然后子类可以重写父类的方法

重写时,参数类型,参数个数,方法名都要和被重写的方法完全一致!

重写时,父类private方法不能被重写(爸爸的隐私,孩子不能看)

子类重写的方法不能比父类的修饰符更严格

重载发生在一个类中,方法名相同,参数个数,参数类型,参数顺序 不相同

Redis持久化方式 -RDB和AOF的优缺点

RDB是快照方式
需要恢复数据的时候直接把RDB快照加载就行

如果数据较多, 保存快照的时间比较久

AOF是写命令追加到日志, 日志文件会越来越大

RDB的缺点

RDB快照一般都是每五分钟或者更长时间更新一次,如果Redis宕机 可能会丢失近几分钟的数据. 这个问题就是RDB最大的缺点, 不适合做第一恢复方案

RDB fork子进程进行数据备份,如果数据量特别大,等待时间变久,.

所以 一般不要让RDB备份时间间隔太久, 否则每次生成的RDB文件太大了,对Redis本身的性能可能会有影响的;

AOF优缺点

一般AOF会每隔1秒,通过一个后台线程执行一次fsync操作,最多丢失1秒钟的数据,Redis进程挂了,最多丢掉1秒钟的数据;

AOF日志文件以append-only模式写入,所以没有任何磁盘寻址的开销,写入性能非常高,而且文件不容易破损,即使文件尾部破损,也很容易修;

MySQL主键索引有什么用

主键保证唯一性 && 主键列不为NULL

MySQL表主键是必须的吗

主键不是必须的,简单的表可以不设置主键, 设置主键能提高表的查询效率

如果没有定义主键,innoDB会选择唯一非空索引作为主键,如果没有的话 innoDB会自动生成一个包含了ROW_ID值的列作为聚簇索引,行都会根据这个ROW_ID排序。

callable接口的返回值用什么接收

Callable相比Runnable接口的好处

Callable接口 有返回值,返回值用FutureTask的get方法接收
Callable接口可以抛出异常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class CallTest implements Callable{
@Override
public Integer call(){
return 123;
}
}

public static void main(String[] args) throws Exception {
// new Thread(new Runable1(), "RunnableName").start();
FutureTask<Integer> futureTask = new FutureTask<>(new CallTest());
//lambda表达式优化
FutureTask<String> futureTask1=new FutureTask<>(()-> "lambda表达式优化");

new Thread(futureTask1).start();
System.out.println("Callable接口(lambda表达式)返回数据"+futureTask1.get());

new Thread(futureTask).start();
System.out.println("Callable接口返回数据"+futureTask.get());
}
}

sleep() 方法 和wait() 方法

sleep方法是Thread类下的

线程调用sleep方法虽然休眠了 但是不会释放锁对象

wait() 方法是Object类下的

wait方法会让出CPU的执行权, 调用wait方法后 需要用notify/notifyall 来唤醒线程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
* @ Author :赵棱泉.
* @ Date :Created in 23:21 2022/2/1
* @ Description:
*/
public class Task implements Runnable {
private static synchronized void threadtest() {
System.out.println(Thread.currentThread().getName() + "获取到了锁");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "释放锁");
}
public static void main(String[] args) {
new Thread(new Task()).start();
new Thread(new Task()).start();
}
@Override
public void run() {
threadtest();
}
}

image-20220314205337372

子类可以重写父类的构造方法吗

不能!!

每个类的构造方法和类名都是相同的,

如果重写了构造方法 相当于子类和父类名是相同的, 不可实现

MySQL排序关键字 和分组关键字

排序关键字order by

分组关键字group by

Redis 缓存雪崩讲一下

缓存雪崩指的是大面积key值在同一时间段失效,大量的请求落到数据库上,导致数据库宕机

 Comments