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
P2543 题目 题目描述: 输入格式: 输入文件中包含两个字符串X和Y。当中两字符串非0即1。序列长度均小于9999。 输出格式: X和Y的最长公共子序列长度。 数据范围与说明: 输入输出样例 #1 输入: 输出: 输入输出样例 #2 输入: 输出: 代码
蓝桥杯 2023 岛屿个数 题目描述 给定 组测试数据,每组数据是一张 的二值地图,字符 表示陆地,字符 表示海洋,地图之外视为海水。两个相邻的 (上、下、左、右四个方向)属于同一个岛屿。若某个岛屿完全被另一个岛屿包围,则称其为子岛屿;统计时只需统计最外层岛屿的数量,子岛屿不计入答案。 输入格式 第一行一个整数 。 接下来每组数据: - 第一行两个整数 ; - 接下来 行,每行一个长度为 的字符串
Synchronized 与 ReentrantLock 的区别 :隐式锁,JVM 自动加锁 / 释放锁 :显式锁,需要手动 / ReentrantLock 本质上是基于 AQS 实现的。 synchronized是非公平锁 然后ReentrantLock 有公平锁有非公平锁 ReentrantLock 支持中断 还有超时获取锁 | | synchronized | ReentrantLock |
P1030(洛谷题面) 题目 题目描述: 给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,且二叉树的节点个数 )。 输入格式: 共两行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。 输出格式: 共一行一个字符串,表示一棵二叉树的先序。 数据范围与说明: 【题目来源】 NOIP 2001 普及组第三题 输入输出样例 #1 输入: 输出: 题意 简述:
P8195 题目 题目描述: 传智专修学院给了小智一个仅包含小写字母的字符串 $s$,他想知道,里面出现了多少次子串 呢。 我们称一个字符串 $t$ 是 $s$ 的子串,当且仅当将 $s$ 的开头若干个(可以为 0 个)连续字符和结尾若干个(可以为 0 个)连续字符删去后,剩下的字符串和 $t$ 相同。例如,我们称 是 的子串,但 不是 的子串。 输入格式: 输入只有一行一个字符串,表示字符串 $