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

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

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

相关推荐
怕浪猫8 小时前
红利窗口开着,程序员别在场边囤课
面试·github·ai编程
lll235269177912 小时前
HR如何快速整理面试沟通内容?
面试·职场和发展
·present·12 小时前
CSAPP(lecture 4_01)
c语言·c++
FPGA小迷弟12 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南
c++·python·ai·plotly·django·ai编程·claude
零售校长12 小时前
西湖区零售门店店长面试怎么准备
面试·职场和发展·零售
程序员-King.13 小时前
【ROS1】Noetic 开发工作流程与常用命令
c++·ubuntu·ros
云深麋鹿13 小时前
C++ | 基于红黑树实现mymap与myset
开发语言·c++
果壳science14 小时前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造
傲世仙尊14 小时前
string增删查改-insert-erase-replace与find加substr组合技
c++
大叔学Linux16 小时前
FreeRTOS任务切换笔记
arm开发·笔记