机试和Redis学习笔记

一、机试

1.华为真题考察对优先队列的使用

安排会议室问题,给定F层的房子,每层M个会议室,有N组人每组需要的楼层分别有R,以及每组的人数P,需要在R及R以下去分配这些会议室

首先要判断总的会议室,然后要逐个去每层去处理一个来放入队列,队列里是存放的人最多的组,放在尽可能高的位置。

vector vector int存储的是对每层的要求的那些组。

2.华为真题考察stack

询问最小的值,也就是支持最小值的stack,通过两个栈实现,然后主要需要注意的边界条件就是空的情况

3.力扣关于dfs的问题:岛屿数量

对于每个岛屿把它的联通的值都设置成0

二、Redis有关的知识

1.原子性

原子性操作的一种方式是使用加锁解锁的方式,不足之处是会降低并发性。

一种解决方法是使用原子加和原子减操作,另一种是使用lua脚本,lua脚本会保证原子性。

2.Redis是如何实现分布式锁的?

分布式锁是根据Redis中的key来标记,然后通过value值判断是否加锁成功。为了防止一个进程加的锁被另一个进程delete,可以不把加锁的value设成1而是设置成一个独特的值,独特的值可以用来验证,在具体的解锁加锁的过程中可以使用lua脚本,先判断,再解锁。

setnx命令如果不存在key就会创建,也就是加锁成功,如果存在则不会设置成功。

为了保证高可用,可以使用多节点的Redis锁,在申请锁的过程中只有在超过一半的节点申请成功才表示加锁成功。这样可以支持实例崩溃下仍然加锁成功。

为了防止申请锁的客户端断开连接或者因为其他原因崩溃无法释放锁,其他人无法使用,对锁设置一个过期时间,所以申请的时间如果直接超过了这个时间锁也是无效的。

总结:今天主要学习的内容是关于分布式锁的实现,之前在面经好像看到过好几次了。

相关推荐
小七在进步34 分钟前
string的使用(2)
c++
Z21-X1 小时前
云原生运维学习笔记:ECShop全链路容器化部署与Docker底层资源隔离深度剖析
运维·笔记·学习·云原生
青少儿编程课堂1 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:折半搜索优化子集枚举(Meet in the Middle)解析
c++·python·算法·bfs·信息学竞赛
时间的拾荒人2 小时前
Redis 集合类型详解:Set 与 Zset
redis·缓存·面试
wo_jack3 小时前
C++ 入门笔记(十七):list 入门 —— 为什么 list 不能 sort?
数据结构·c++·面试·stl·list
青少儿编程课堂4 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会Scratch考级:校园连连看解析
c++·python·算法·bfs·信息学竞赛
Rain的Java大神之路5 小时前
设计一套生产级 API 接口:从契约、安全、幂等到限流,我踩过的坑都在这了
java·后端·面试
草莓熊Lotso5 小时前
【C++ 基于微服务的即时通讯系统】文件存储子服务实战:UUID生成、文件IO封装与全接口单元测试
开发语言·网络·数据库·c++·微服务·架构·单元测试
晓梦林6 小时前
BUUCTF-菜刀流量-MISC-学习笔记
笔记·学习
小南家的青蛙6 小时前
微服务体系下DevOps运维岗位面试方案设计
运维·面试·职场和发展·devops