Redis分布式锁方案 使用 Redis 的 EX实现分布式锁时,主要问题是锁过期时间不好设置:如果设置过短,业务未完成锁就过期;设置过长,会降低系统并发度。为此可以使用 Redisson 封装的分布式锁,它内部通过「看门狗机制」自动续期锁(默认锁 30 秒,每 10 秒续期一次),同时通过 Lua 脚本保证加解锁的原子性,从而确保分布式环境下的并发安全。 Redisson分布式锁自动续约机制(看
LeetCode 24. 两两交换链表中的节点 题目大意 给定一个单链表,需要将链表中的节点按顺序两两交换,并返回交换后新的链表头节点。禁止只交换节点的数值,必须真实地调整指针。当链表长度为奇数时,最后一个节点保持原状。 示例 - 输入: - 输出: 当输入为 时,结果应为 ,因为第三个节点无法参与交换。 代码实现
Redis 的数据过期策略 Redis 采用 「惰性删除 + 定期删除」 两种策略相结合的方式,在 CPU 性能开销 与 内存占用 之间取得平衡。 --- 一、惰性删除(Lazy Expiration) 当客户端访问或修改某个键时,Redis 会在操作前调用 函数检查该键是否已过期: - 若已过期: Redis 会立即删除该键,然后向客户端返回 。 删除方式由配置项 决定: - 若开启( ),则采
缓存穿透 缓存穿透指的是:一个缓存和数据库中都不存在的数据,由于数据库无法写入缓存,导致频繁请求直接打到数据库,从而造成数据库压力过大甚至被“打穿”。 常见的解决方法包括:缓存空值 或 布隆过滤器。 布隆过滤器由一个全 0 的位图数组和 n 个哈希函数组成。当一个数据在请求缓存前,会先经过布隆过滤器。过滤器会通过 n 个哈希函数计算出 n 个哈希值,再分别对数组长度取模,并将对应的数组下标置为 1
P1439 【模板】最长公共子序列(洛谷题面) 题目 题目描述: 给出 的两个排列 和 ,求它们的最长公共子序列。 输入格式: 第一行是一个数 。 接下来两行,每行为 个数,为自然数 的一个排列。 输出格式: 一个数,即最长公共子序列的长度。 数据范围与说明: - 对于 的数据, ; - 对于 的数据, 。 输入输出样例 #1 输入: 输出: 题意 给定 的两个排列 、,求它们的最长公共子序列(L
P1434 [SHOI2002] 滑雪(洛谷题面) 题目 题目描述: Michael 喜欢滑雪。这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael 想知道在一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子: 一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度
P1923 【深基9.例4】求第 k 小的数(洛谷题面) 题目 题目描述: 输入 $n$($1 \le n < 5000000$ 且 $n$ 为奇数)个数字 $ai$($1 \le ai < {10}^9$),输出这些数字的第 $k$ 小的数。最小的数是第 $0$ 小。 请尽量不要使用 来写本题,因为本题的重点在于练习分治算法。 输入格式: 第一行有两个整数,分别表示 $n$ 和 $k$。 第二行
P2196 题目 题目描述: 在一个地图上有 $N\ (N \le 20)$ 个地窖,每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径。当地窖及其连接的数据给出之后,某人可以从任一处开始挖地雷,然后每次可以移动到一个编号比当前节点大且联通的节点去挖地雷,当无满足条件的节点时挖地雷工作结束。设计一个挖地雷的方案,使某人能挖到最多的地雷。 输入格式: 有若干行。 第 $1$ 行只有一个数字,
P1216 [IOI 1994 / USACO1.5] 数字三角形(洛谷题面) 题目 题目描述: 观察下面的数字金字塔。 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。 在上面的样例中,从 $7 \to 3 \to 8 \to 7 \to 5$ 的路径产生了最大权值。 输入格式: 第一个行一个正整数 $r$,表示行的数目。 后
P3654 题目 题目描述: 可是……这个篮球场,好像很久没有使用过的样子啊…… 里面堆满了学校的各种杂物呢…… 我们 Aqours 的成员要怎么在里面列队站下呢? 我们浦之星女子学院的篮球场是一个 $R$ 行 $C$ 列的矩阵,其中堆满了各种学校的杂物 (用 表示),空地 (用 表示) 好像并不多的样子呢…… 我们 Aqours 现在已经一共有 $K$ 个队员了,要歌唱舞蹈起来的话,我们得排成一