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

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

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

相关推荐
一只叫煤球的猫2 小时前
Spring AI 2.0 源码解析(四):Prompt、Message、Options 的对象模型
后端·面试·ai编程
tdtsmt2 小时前
2026年SMT贴片加工选型指南:天地通电子推荐参考
c++
果壳science2 小时前
《自然本源》如何实现狭义相对论的代数化
笔记·算法·几何学
一木 之林2 小时前
插件、MCP、Skill 的区别?
java·c++·人工智能
1314lay_10072 小时前
C#调用Sql Server存储过程,并且使用传入表结构
数据库·经验分享·笔记·sqlserver·c#
IT大白鼠2 小时前
MySQL 分布式集群系列 · 第八篇(收官)——NDB 集群面试高频题 +架构总结与未来演进
分布式·mysql·面试
ShineWinsu3 小时前
对于MySQL:内置函数的解析
linux·数据库·c++·mysql·面试·函数·查询
letisgo53 小时前
JAVA 高级进阶02篇《并发编程三板斧:JMM、CAS与AQS的源码级拆解》
java·面试·并发编程·aqs·jmm
志尊宝3 小时前
Vue3 零基础每日笔记(015):条件渲染 v-if 与 v-show——控制 DOM 生死还是控制显隐
前端·vue.js·笔记