一、机试
主要是华为机试
1.安排会议室问题
考察对优先队列的使用,具体做法是用多个 vector 分别存储计划在每层参加会议的组以及组的人数。
从顶层往下遍历因为每组要求会议室楼层的组只能往下去安排。
2.判断函数最大栈空间以及在最大栈空间下的最长调用链
考察的是关于图的知识,第一个是怎么去存储图的节点,用 adj 的 Pair,每个是一个 vector
对于环,可以用一个 vector 存储从头开始的节点,然后每个放入 vector 中的他连接的那些节点入度减 1。
然后对于每个节点存储一个到当前节点开始的最大栈空间和最长链
最后遍历一遍返回结果。
3.岛屿数量问题
考察的是 DFS,每次就把岛屿连通的陆地标记,或者把它们变成非岛屿
二、面试相关
1.分布式锁的实现
用 key 表示锁,value 表示是否加锁,然后 set nx 无锁就创建并加锁,delete 会释放锁。
分布式锁过期时间避免锁不被释放,同时多节点避免服务不可用。
对于 value 每个要设置独一无二的值,避免被其他节点误删。
2.Redis 的原子性
一个是通过原子加和原子减实现,另一个是通过 lua 脚本打包,不会被打断,还有就是通过加锁。
总结:关于图的用 queue 可以实现去判断有无环。