- 博客(28)
- 收藏
- 关注
原创 【Redis】Redis 分片集群搭建与故障转移实战指南
主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决:海量数据存储问题高并发写的问题使用分片集群可以解决上述问题,如图:分片集群特征:集群中有多个 master,每个 master 保存不同数据每个 master 都可以有多个 slave 节点master 之间通过 ping 监测彼此健康状态客户端请求可以访问集群任意节点,最终都会被转发到正确节点。
2025-12-22 20:48:00
1222
1
原创 【Redis】Redis 主从架构与数据同步机制详解
如果 slave 的 offset 小于 master 的 offset,说明 slave 数据落后于 master,需要更新。因为 slave 原本也是一个 master,有自己的 replid 和 offset,当第一次变成 slave,与 master 建立连接时,发送的 replid 和 offset 是自己的 replid 和 offset。master 判断发现 slave 发送来的 replid 与自己的不一致,说明这是一个全新的 slave,就知道要做全量同步了。
2025-12-22 15:37:27
983
原创 如何迁移 WSL2 虚拟机到其他磁盘
根据刚才导出的文件来恢复虚拟机,注意改成自己的 WSL 虚拟机版本号,第一个路径是恢复后虚拟机的文件存放位置,第二个路径 Ubuntu.tar 文件存放位置。导出系统文件至刚刚创立的文件夹中(以 Ubuntu-24.04 为例),注意要改成自己的 Ubuntu 版本号和文件路径。去文件目录里检查一下,确保文件导出成功,因为接下来要删除之前的虚拟机。注销原有的虚拟机,注意改成自己的 WSL 虚拟机版本号。再次查看虚拟机状态,确保 WSL 虚拟机已停止运行。验证虚拟机是否正常运行。
2025-12-21 14:51:03
428
原创 【Redis】Redis 持久化机制详解:RDB 与 AOF 原理、配置及对比
RDB 全称 Redis Database Backup file(Redis数据备份文件),也被叫做 Redis 数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当 Redis 实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为 RDB 文件,默认是保存在当前运行目录。
2025-12-21 14:28:54
767
原创 【动态规划:96. 不同的二叉搜索树】刷题记录
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的二叉搜索树有多少种?返回满足题意的二叉搜索树的种数。
2025-12-18 07:45:00
1254
原创 【动态规划:343. 整数拆分】刷题记录
给定一个正整数 n ,将其拆分为 k 个正整数的和( k >= 2 ),并使这些整数的乘积最大化。返回你可以获得的最大乘积。
2025-12-17 01:09:15
1028
原创 【动态规划:62.不同路径、63. 不同路径 II 】刷题记录
建立二维数组 dp[m][n],dp[i][j] 表示从左上角到 (i, j) 位置的路径数。建立二维数组 dp[m][n],dp[i][j] 表示从左上角到 (i, j) 位置的路径数。第一行和第一列 dp 数组的值都为 1,因为从左上角出发到第一行或第一列都只有 1 种路径。第一行和第一列dp数组的值都为1,因为从左上角出发到第一行或第一列都只有1种路径。1. 向右 -> 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右 -> 向右。1. 向右 -> 向下 -> 向下。
2025-12-16 09:00:00
1791
原创 【动态规划:509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯】刷题记录
确定dp数组以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组。
2025-12-15 17:51:00
767
原创 【回溯:77. 组合】学习记录
这个树的深度为 k,横向是 for 循环在 startIndex 和 n 之间遍历,纵向是递归操作。从根节点出发,按照深度优先搜索方式搜索至叶子结点,可以找到符合题目要求的组合,图中有6个叶子结点,符合这个例子的结果一共有6个。给定两个整数 n 和 k ,返回范围 [1, n] 中所有可能的 k 个数的组合。
2025-12-09 17:22:08
319
原创 【回溯:216. 组合总和III】学习记录
摘要:本文介绍了使用回溯法解决组合求和问题,找出1-9中k个不重复数字之和等于n的所有组合。通过构建递归树,在叶子节点验证有效组合,并利用剪枝优化(当sum>n或剩余元素不足时终止搜索)。给出了Java实现代码,包含全局变量sum、path和result,以及带剪枝的改进版本。关键点包括递归终止条件、参数传递时的startIndex更新,以及对称的回溯操作。优化后算法避免了无效搜索,提升了效率。
2025-12-09 17:10:27
772
原创 【链表:24. 两两交换链表中的节点】学习记录
为了方便操作,引入虚拟头结点headNode,定义指针cur指向虚拟头结点headNode,temp1指向cur的后继结点,temp2指向temp1的后继结点。链表为空或只有1个结点的时单独处理,直接返回头结点。注意循环条件,cur结点的两个后继结点存在才能循环。
2025-12-05 23:07:02
463
原创 【链表:160. 相交链表】学习记录
先求出两个链表的长度,然后求出两个链表长度之差 count,指针curA、curB分别指向链表A、B的头结点。若链表A比B长,让curA移动couint个结点,然后curA和curB一起向后移动,直到curA和curB指向相同的结点。
2025-12-05 11:36:44
222
原创 【链表:206. 反转链表】学习记录
为了方便操作,引入虚拟头结点。设置3个指针pre、cur、temp,cur用于遍历整个链表,始终指向cur的前驱,temp始终指向cur的后继。初始时pre指向虚拟头结点,cur指向第1个存放数据的结点,temp指向第2个存放数据的结点。
2025-12-04 22:03:18
250
原创 【链表:203. 移除链表元素】学习记录
很基础的题目,想要删除链表中的某个结点,必须修改其前驱结点的指针,使该指针绕过目标结点直接指向后续结点。
2025-12-03 21:52:18
163
原创 【数组:开发商购买土地】学习记录
求出前缀和之后就可以开始进行划分操作了,以横向划分为例,首先将第1行单独划分出来,第一行的土地价值为pRowSum[0] = 6,第2、3行土地价值之和为pRowSum[2] - pRowSum[0] = 12。然后将第1、2行划分为一个整体,第1、2行土地价值为pRowSum[1] = 12,第3行土地价值为pRowSum[2] - pRowSum[1] = 6,在每次划分中记录两个区域的差值,寻找最小的差值,以此确定最优分割点。目前,有两家开发公司,A 公司和 B 公司,希望购买这个城市区域的土地。
2025-12-03 15:30:34
315
原创 【42. 接雨水】学习记录
每一个柱子能取多少水取决于该柱子左右两侧柱子的高度,定义数组。的值为2,表示这个位置在高度为0的情况下最多能放2个雨水;的值为1,表示这个位置的高度为1,最后得出这个位置能接。个柱子左面所有柱子中最高柱子的高度,个柱子右面所有柱子中最高柱子的高度。
2025-12-02 20:49:42
199
原创 【链表:19. 删除链表的倒数第 N 个结点】学习记录
用快慢指针,快指针先移动n次,然后快慢指针同时移动,当快指针指到链表最后一个结点时,慢指针指向待删除结点的前一个结点。
2025-11-26 22:10:12
171
原创 【字符串:541. 反转字符串II】学习记录
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。“每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。若剩余字符大于 k 个,反转前 k 个剩余字符。那么当剩余字符小于 k 个时,反转所有剩余字符。
2025-11-20 18:49:08
218
原创 【字符串:344. 反转字符串】学习记录
赋值后的 left 与 right 异或,将这个结果赋值给 right ,此时left:a ^ b,right:(a ^ b) ^ b = a。赋值后的 left 与 right 异或,将这个结果赋值给 left ,此时left:(a ^ b) ^ a = b,right:a。left 异或 right 的结果赋值给 left ,此时left:a ^ b,right:b。有两个变量 left 和 right ,它们的值分别为 a 和 b。思路:定义左右两个指针,交换两个指针指向的元素。
2025-11-20 18:34:02
223
原创 【数组:区间和】学习记录
题目:给定一个整数数组 Array,请计算该数组在每个指定区间内元素的总和。输入:第一行输入为整数数组 Array 的长度 n,接下来 n 行,每行一个整数,表示数组的元素。随后的输入为需要计算总和的区间,直至文件结束。输出:输出每个指定区间内元素的总和。
2025-11-19 16:52:57
334
原创 【数组:59. 螺旋矩阵II】学习记录
如下图所示,对于一个3×3的矩阵,我们可以将矩阵最外圈8个元素用黄、蓝、绿、红四个颜色划分为四部分,每一部分对应一个。循环访问元素个数是相同的,访问元素时进行赋值操作,最后单独对中间位置元素赋值。对于4×4的矩阵,我们采用同样的方法,先访问外圈,再访问内圈。循环中的一次循环,将每一圈中同一个颜色部分看作一个。观察上面这个5×5矩阵可以看出,对于最外圈,单个。为偶数的矩阵,我们可以将这个矩阵拆分为。为奇数的矩阵,我们可以将这个矩阵拆分为。个元素,对于内圈,单个for循环遍历。个元素,每向内1圈,单个。
2025-11-18 18:13:56
224
原创 【数组:209. 长度最小的子数组】学习记录
将i和j之间的元素(包括i和j)视为可能的子数组,用sum记录子数组的和并与target进行比较,如果sum>=target且子数组长度小于等于result,则更新result。思路:在nums中建立滑动窗口,每个滑动窗口所包含的数组元素可以视为一个子数组,建立两个指针。2、result初始大小为数组nums长度,因为符合条件的子数组长度一定小于等于该值。3、flag用于判断不存在符合条件的子数组的情况,当滑动窗口移动时,满足条件。循环遍历中向右移动,当滑动窗口中的和大于等于。
2025-11-18 12:01:25
310
原创 【数组:有序数组的平方】学习记录
是按照升序排列的,也就是说在数组的左右两端存在着整个数组中的最大值,我们可以每次找出一个最大值并按照升序将其放入新的数组。用于保存排序结果,建立左右指针分别指向。思路:先计算数组平方,再排序。的最右端,每保存一次最大值后。用于将每次选出的最大值放入。的大小,并将大的元素放入。数组的遍历,每访问一次。
2025-11-17 16:12:21
149
原创 【数组:移除元素】学习记录
思路:建立快慢指针,开始时,快慢指针指向第一个元素,每次循环将快指针的元素赋值给慢指针,快慢指针都自增“+1”。当快指针指向要移除的元素时,慢指针停止一次自增“+1”和赋值操作。1、交换一次后右指针左移一位,左指针位置不变(检查交换后的元素是否需要移除)。思路:用一个指针从左往右遍历,遇到要移除的元素时执行元素前移操作。思路:建立左右两个指针,遇到要移除的元素时交换左右指针指向的元素。指针位置保持不变,继续检查当前位置元素是否需要移除。2、当左右指针相遇时,仍需检查当前元素是否需要移除。
2025-11-16 21:22:15
218
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅