牛客面试题库(8)

文章探讨了Java中的volatile关键字,其确保变量的可见性和有序性,但不保证原子性。同时,文章介绍了Redis的高可用性通过sentinel哨兵集群实现,包括心跳检测和故障转移机制。此外,还讨论了final关键字的作用,重载和重写的区别,以及Java集合框架的基本概念,如list、set、queue和map接口及其常见实现类。
摘要由CSDN通过智能技术生成

说说volatile的用法及原理

用法:保证变量的可见性,有序性,不能保证原子性,保证单个变量的线程安全,可见性即某个线程修改变量后,其他线程第一时间得到新数据,有序性是执行顺序和代码顺序一致,防止指令重排,即还未赋值就使用

原理:每次写的使用,都是先刷新主内存,读的时候先读主内存,而不是使用缓存;volatile使用内存屏障防止指令重排,内存屏障即只能按照某个方向执行

如何实现Redis高可用

高可用即主节点宕机后,需要进行故障转移,选举从节点作为新的主节点,可以通过sentinel哨兵集群来实现该功能

哨兵集群原理:心跳检测,默认每隔1秒给节点发送请求,如果没有接收到节点的回应,则主观判断该节点宕机,防止因为网络导致无法接收到回应,所以如果超过一半sentinel主观判断该节点宕机,则是客观判断宕机,真的宕机,此时需要进行故障转移;数据之间的同步,此时需要分片集群,把主节点槽分配到新主节点的槽中

请你说一下final关键字

可以作用于类、方法、变量上面

类:类不可被继承

方法:方法不可被重写

变量:变量进行过一次初始化,就不能进行第二次赋值,引用不可变,但其内部内容可变

请你说说重载和重写的区别,构造方法能不能重写

重载:发生在一个类当中,多个方法名相同,参数列表,个数,顺序,类型不同,返回值类型可同可不同

重写:发生在父类和子类当中,子类重写父类方法,方法名、参数和父类相同,访问修饰符比父类大,抛出异常比父类小或相等,返回值类型比父类小或相等

构造方法不能被重写,因为构造方法必须和类名相同,如果重写父类构造方法,会违反这个定义

说说你对Java集合的了解

主要由两个接口collectionmap接口派生出来的,collection接口派生出listsetqueue,所有集合类都是这四个listsetqueuemap接口的实现类

list:有序可重复,常见有ArrayListLinkedListVector

set:无需不可重复,常见有HashSet

queue:先进先出队列,常见有PriorityQueue

map:存储键值对,具有映射关系的元素,常见有HashMapHashTableConcurrentHashMap

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值