机试和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锁,在申请锁的过程中只有在超过一半的节点申请成功才表示加锁成功。这样可以支持实例崩溃下仍然加锁成功。

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

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

相关推荐
weixin_4241836135 分钟前
开放—封闭原则实战(下):基于策略的流程编排与编译期多态
c++·分布式·系统架构
wuminyu1 小时前
C++协程实现接收端的零拷贝Buffer管理原理剖析
java·linux·c语言·jvm·c++
m0_380743871 小时前
C++中的freopen的用法实例详解
开发语言·c++
zhangrelay2 小时前
ROS项目设计案例智能大模型正经乱答案例
linux·笔记·学习·ubuntu·机器人
probex_2 小时前
学习笔记:知识图谱是什么,在测试里能干什么
笔记·学习·知识图谱
jimy12 小时前
polymorph.cpp里面的“析构函数、智能指针”问题
开发语言·c++
泡沫_花火3 小时前
大模型开发相关岗位面试资料(含算法)
语言模型·自然语言处理·面试·职场和发展
朝朝辞暮i3 小时前
C++ 第 6 课:switch —— 多状态选择
开发语言·c++·算法
以为你知道啊3 小时前
90年代复古博客
笔记
朝朝辞暮i3 小时前
C++ 第 4 课:if / else —— 让程序自己做决定
开发语言·c++