自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(499)
  • 收藏
  • 关注

原创 ARC缓存淘汰算法

3. 如果命中,且LFU链表中没有,则将数据放入LFU链表的头部,所有LRU链表中的数据都必须至少被访问两次才会进入LFU链表。4. 如果此时缓存满了,则从LRU链表中淘汰链表尾部的数据,将数据的key放入LRU链表对应的ghost list。在这种情况下,LRU链表的长度将会被增加1,并将命中的数据key从ghost list中移除,放入LRU链表的头部。2. 在缓存中查找客户端需要访问的数据, 如果没有命中,表示缓存穿透,将需要访问的数据 从磁盘中取出,放到LRU链表的头部。

2025-04-02 23:20:50 384

原创 最长公共子串

给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子串的长度。例如,"bcd" 是 "abcde" 的子chuan。若这两个字符串没有公共子串,则返回 0。基本思想:动态规划,dp[i][j]表示text1前i个字符与text2前j个字符时最长公共子串的大小。输入:text1 = "abcde", text2 = "ebcda"解释:最长公共子串是 "bcd",它的长度为 3。输入的字符串只含有小写英文字符。

2025-04-02 20:36:57 151

原创 AWS Aurora存算分离架构

我觉得Aurora之所以提出这个观点是倒果为因,Aurora设计之初就是想到存算分离架构,好处是基于2.1的分析,所以Aurora需要克服最大的问题就是网络数据传输量,所以Aurora核心的理念就是要减少数据的网络传输量,Aurora 为了减少 IO 的数量,所有节点之间的数据传输,只有 redo,而不传输data page,所以Aurora提出log is database,这就变成了Aurora的特性了。当然在实际读请求中,不用真的去 3 个存储节点查询,只需要查询拥有最新数据的那个存储节点就行。

2025-03-30 23:54:44 1013

原创 分布式系统

核心驱动力​性能需求:单机性能受物理限制(CPU/内存/IO),分布式系统通过并行计算突破瓶颈​可扩展性:水平扩展(增加节点) vs 垂直扩展(升级硬件),前者更具经济性​容错性:通过冗余防止单点故障(SPOF),典型案例如金融交易系统多活架构典型场景电商大促流量削峰(Kubernetes自动扩缩容)社交网络实时消息推送(边缘计算节点)大数据分析(Hadoop/Spark集群)​时钟同步​网络分区​安全威胁​(DDoS/中间人攻击)

2025-03-30 22:48:03 571

原创 两阶段提交2PC原理

两阶段提交(2PC)是分布式事务中实现强一致性的经典方案,但其性能和可靠性限制了其在高并发场景中的应用。现代系统常采用 ​。

2025-03-30 22:22:37 686

原创 NVMe协议

​ 三大核心技术,解决了传统AHCI协议的性能瓶颈,成为现代高密度、低延迟存储系统的核心协议。无论是消费级还是企业级场景,NVMe SSD已成为高性能存储的首选方案。

2025-03-26 21:39:11 788

原创 RAID原理

(n-1)*单盘容量。

2025-03-26 21:09:42 267

原创 multi paxos协议

Multi Paxos 协议通过多轮投票机制协调副本间的日志同步。paxos协议用于保证同一个数据分片的多个副本之间的数据一致性。​客户端向主副本提交事务请求(包含读写操作和redo log记录)。

2025-03-25 21:44:59 703

原创 checkpoint机制

将缓冲池中的脏页刷新到磁盘,并更新redo log的checkpoint位点,确保数据库在发生故障时可以快速恢复到一致的状态。3、InnoDB支持的checkpoint类型。2、checkpoint执行过程。4、checkpoint主要作用。1、什么是checkpoint。

2025-03-18 00:00:27 293

原创 翻转奇数链表节点(单链表操作)

给定一个单链表,将奇数节点翻转,偶数节点保持原位置不变。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(n),n 为节点总数。链表的第一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。输入: 1->2->3->4->5->NULL。输出: 5->2->3->4->1->NULL。应当保持奇数节点和偶数节点的相对顺序。基本思想:单链表的基本操作,

2025-03-16 15:33:22 199

原创 整数A变换整数B

1、整数变换1给定数字A和B,A<B,A可以进行两种变换,A+=1或者A*=2,也就是A可以加一也可以翻倍,请问,最少多少步A变换到B。逆向思维:B可以通过B/=2或者B-=1最少的步数得到A,但是B只有是偶数的时候才能B/=2,如果B是奇数,B先减1,然后再B/=2,直到A的值大于B/2的时候,B不能再B/=2,否则B永远无法到A,这个时候只能B一直减减。2、整数变换2给定数字A和B,A可以进行两种变换,A=A*10+1或者A*=2,也就是A可以乘10加一也可以翻倍,请问,最少多少步A变换到B。

2025-03-11 22:51:47 193

原创 C++线程池的实现

结构体,包含文件描述符、缓冲区、偏移量、操作类型(读/写)和回调函数。​**异步IO类 (

2025-03-11 22:32:06 309

原创 C++手动实现一个线性探测法HashMap

所以线性探测的一个突出问题是:平均插入成本的成长幅度,远高于负载系数的成长幅度,这样的现象在hashing过程中称为主集团primary clustering(此时我们手上有的是一大团已被用过的方格,插入操作极有可能在主集团所形成的泥泞中奋力爬行,不断解决碰撞问题)。当散列函数计算出某个元素的插入位置,而该位置上的空间已不再可用时,最简单的办法就是循序往下一一寻找,直到找到一个可用空间为止,只要表格array足够大,总是能找到一个安身立命的空间,但是要花多少时间就很难说了。

2025-03-11 22:28:13 427

原创 LSM存储引擎

目前很多数据库比如levelDB、rocksDB、HBase、OceanBase的存储引擎都是LSM tree结构。LSM是一种树形的数据结构,由多个层级组成,每层的数据按 key 有序。

2025-02-24 00:59:30 217

原创 分布式存储面试经验

分布式存储方向的岗位比较广包括分布式文件存储、对象存储、分布式KV缓存、分布式数据库、表格存储、块存储等岗位,分布式存储主要考察操作系统、计算机网络等知识,比如 Linux IO 栈、内存管理、文件系统、进程调度、TCP 协议等等。

2025-02-24 00:50:18 879

原创 516最长回文子序列(中心扩展法、动态规划)

子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。,找出其中最长的回文子序列,并返回该序列的长度。一个可能的最长回文子序列为 "bbbb"。一个可能的最长回文子序列为 "bb"。与最长回文子串题目类似。

2025-02-16 22:05:43 109

原创 459重复的子字符串(substr)

现在字符串和原字符串匹配了,所以可以得出结论存在重复的子串。因此还是不断遍历子串可能的长度从1到length/2,但是只要判断s.substr(length,s.size()-length)+s.substr(0,length)==s说明这个子串就是重复子串。暴力法,不断遍历子串可能的长度从1到length/2,然后对这个子串不断去找s匹配,如果完全匹配上,这个子串就是重复子串。如果您的字符串 S 包含一个重复的子字符串,那么这意味着您可以多次 “移位和换行”`您的字符串,并使其与原始字符串匹配。

2025-02-16 21:36:55 264

原创 1768交替合并字符串(双指针)

开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。注意,word2 比 word1 长,"rs" 需要追加到合并后字符串的末尾。注意,word1 比 word2 长,"cd" 需要追加到合并后字符串的末尾。双指针,i和j分别指向word1和word2交替插入到新字符串。合并后: a p b q r s。合并后: a p b q c d。合并后: a p b q c r。

2025-02-16 20:34:25 133

原创 746使用最小花费爬楼梯(动态规划)

dp[i]表示达到当前楼梯最小的花费,遍历cost,当前cost可以往前走一步或者两步,所以dp[i+1]=min(dp[i+1],dp[i]+cost[i])以及dp[i+2]=min(dp[i+2],dp[i]+cost[i])- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。- 支付 1 ,向上爬一个台阶,到达楼梯顶部。

2025-02-16 18:32:38 152

原创 977有序数组的平方(双指针)

双指针,先找到中间绝对值最小的下标,left从左往右,right从右往左,将两者中绝对值最小的平方加入到res。平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]组成的新数组,要求也按。

2025-02-16 17:20:24 145

原创 707设计链表(链表操作)

单链表操作,创建虚拟头节点并记住链表的长度length,addAtHead(val)为addAtIndex(0,val),addAtTail(val)为addAtIndex(length,val)myLinkedList.addAtIndex(1, 2);// 链表变为 1->2->3。// 现在,链表变为 1->3。以指示链表中的上一个节点。你可以选择使用单链表或者双链表,设计并实现自己的链表。是指向下一个节点的指针/引用。

2025-02-07 23:37:23 295

原创 704二分查找

输入: nums = [-1,0,3,5,9,12], target = 9。输入: nums = [-1,0,3,5,9,12], target = 2。折半查找target值,时间复杂度O(logn)解释: 9 出现在 nums 中并且下标为 4。解释: 2 不存在 nums 中因此返回 -1。,如果目标值存在返回下标,否则返回。个元素有序的(升序)整型数组。

2025-01-20 23:21:08 228

原创 C++手动实现一个开链法HashMap

参考我的博客:https://blog.youkuaiyun.com/Revendell/article/details/110009858。

2024-12-18 11:50:45 438

原创 比左边大比右边小的元素(单调栈)

1、题目描述给出一个元素无序的数组,求出一个数,使得其左边的数都小于它,右边的数都大于等于它。要求时间复杂度n整理及丰富细节:一个无序的数组,找出所有符合以下特点的数,返回它们的索引。这个数的左边的数都小于它,右边的数都大于等于它。要求时间复杂度 O(n) 。2、示例输入:[2,3,1,8,9,20,12]输出:[8,9]3、题解思路使用单调栈当元素入栈的时候,单调栈只能保证入栈元素比栈内元素都大,但是不能保证是数组中出现过的最大的 所以额外需要一个最大值,来增.

2021-08-30 15:43:55 1039

原创 253会议室 II(上下车问题、最大重叠区间)

1、题目描述给你一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi] ,为避免会议冲突,同时要考虑充分利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排。提示:1 <=intervals.length <= 1040 <= starti < endi <= 1062、示例输入:intervals = [[0,30],[5,10],[15,20]]输.

2021-08-12 17:16:58 1091

原创 440字典序的第K小数字(字典树)

1、题目描述给定整数n和k,找到1到n中字典序第k小的数字。注意:1 ≤ k ≤ n ≤ 109。2、示例输入:n: 13 k: 2输出:10解释:字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10。3、题解首先我们可以通过简单的数学方式,计算出[n,n+1]之间有多少个数字。初始化 l = 1, r = 9, k = k(还差数字个数)令f(x)表示[x,x+1]...

2021-07-22 16:13:25 430

原创 剑指 Offer 33二叉搜索树的后序遍历序列(单调栈)

1、题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。提示:数组长度 <= 1000参考以下这颗二叉搜索树: 5 / \ 2 6 / \1 32、示例输入: [1,6,3,2,5]输出: false输入: [1,3,2,6,5]输出: true3、题解基本思想:单调栈,后序遍历的逆序是根-右-左,从根到右都是递增的,入栈;...

2021-07-21 10:36:30 317

原创 554砖墙(哈希表)

1、题目描述你的面前有一堵矩形的、由 n 行砖块组成的砖墙。这些砖块高度相同(也就是一个单位高)但是宽度不同。每一行砖块的宽度之和相等。你现在要画一条 自顶向下 的、穿过 最少 砖块的垂线。如果你画的线只是从砖块的边缘经过,就不算穿过这块砖。你不能沿着墙的两个垂直边缘之一画线,这样显然是没有穿过一块砖的。给你一个二维数组 wall ,该数组包含这堵墙的相关信息。其中,wall[i] 是一个代表从左至右每块砖的宽度的数组。你需要找出怎样画才能使这条线 穿过的砖块数量最少 ,并且返回 穿过的砖块数量

2021-07-20 17:18:33 225

原创 435无重叠区间(排序+贪心)

1、题目描述给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。2、示例输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。3、题解贪心算法,按照起点排序:选择结尾最短的,后面才可能连接更多的区间(如果两个区间有重叠,应该保留结尾小的) 把问题转化为最多能保留多少个区间

2021-07-20 16:29:32 144

原创 377组合总和 Ⅳ(动态规划、背包、爬楼梯问题)

1、题目描述给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。题目数据保证答案符合 32 位整数范围。提示:1 <= nums.length <= 2001 <= nums[i] <= 1000nums 中的所有元素 互不相同1 <= target <= 10002、示例输入:nums = [1,2,3], target = 4输出:7解..

2021-07-20 15:07:45 285

原创 695岛屿的最大面积(深度优先搜索递归)

1、题目描述给定一个包含了一些 0 和 1 的非空二维数组grid 。一个岛屿是由一些相邻的1(代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设grid 的四个边缘都被 0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)注意:给定的矩阵grid的长度和宽度都不超过 50。2、示例[[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,...

2021-07-19 11:25:24 157

原创 1438绝对差不超过限制的最长连续子数组(滑动窗口+mutiset)

1、题目描述给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit 。如果不存在满足条件的子数组,则返回 0 。提示:1 <= nums.length <= 10^51 <= nums[i] <= 10^90 <= limit <= 10^92、示例输入:nums = [8,2,4,7], limit = 4输出:2解释:所有子数组如下.

2021-07-17 15:46:01 131

原创 670最大交换(哈希表)

1、题目描述给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。注意: 给定数字的范围是[0, 10^8]2、示例输入: 2736输出: 7236解释: 交换数字2和数字7。3、题解这种题目要么两重循环时间复杂度On^2空间复杂度O1,要么用哈希表时间复杂度On空间复杂度On。基本思想:哈希表+贪心,先遍历一遍num,将num每一位上的数字用哈希表记录下标,然后再遍历一遍num,如果当前位上的数小于之后存在的数并且下标比当前位下标大,那么就交换这两个.

2021-07-17 15:18:35 146

原创 680验证回文字符串 Ⅱ(双指针)

1、题目描述给定一个非空字符串s,最多删除一个字符。判断是否能成为回文字符串。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。2、示例输入: "abca"输出: True解释: 你可以删除c字符。3、题解基本思想:双指针,判断left,right是否相等。class Solution {public: bool validPalindrome(string s) { int left=0,right=s.size()-1.

2021-07-16 15:24:02 142

原创 958二叉树的完全性检验(层次遍历+队列)

1、题目描述给定一个二叉树,确定它是否是一个完全二叉树。百度百科中对完全二叉树的定义如下:若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~2h个节点。)提示:树中将会有 1 到 100 个结点。2、示例输入:[1,2,3,4,5,6]输出:true解释:最后一层前的每一层都是满的(即,结点值为 {1} 和 {2,3} 的两层),且最后一层中的...

2021-07-16 14:29:46 147

原创 剑指 Offer 47礼物的最大价值(动态规划)

1、题目描述在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?提示:0 < grid.length <= 2000 < grid[0].length <= 2002、示例输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 12解释:...

2021-07-16 14:14:26 136

原创 1318或运算的最小翻转次数(位运算)

1、题目描述给你三个正整数a、b 和 c。你可以对 a 和 b的二进制表示进行位翻转操作,返回能够使按位或运算a OR b == c成立的最小翻转次数。「位翻转操作」是指将一个数的二进制表示任何单个位上的 1 变成 0 或者 0 变成 1 。提示:1 <= a <= 10^91 <= b<= 10^91 <= c<= 10^92、示例输入:a = 2, b = 6, c = 5输出:3解释:翻转后 a = 1 , ...

2021-07-16 14:11:47 180

原创 692前K个高频单词(哈希表+排序)

1、题目描述给一非空的单词列表,返回前k个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。注意:假定 k 总为有效值, 1 ≤ k ≤ 集合元素数。输入的单词均由小写字母组成。扩展练习:尝试以O(n log k) 时间复杂度和O(n) 空间复杂度解决。2、示例输入: ["i", "love", "leetcode", "i", "love", "coding"], k = 2输出: ["i", "love...

2021-07-16 14:07:55 248

原创 690员工的重要性(递归)

1、题目描述给定一个保存员工信息的数据结构,它包含了员工 唯一的 id ,重要度和 直系下属的 id 。比如,员工 1 是员工 2 的领导,员工 2 是员工 3 的领导。他们相应的重要度为 15 , 10 , 5 。那么员工 1 的数据结构是 [1, 15, [2]] ,员工 2的 数据结构是 [2, 10, [3]] ,员工 3 的数据结构是 [3, 5, []] 。注意虽然员工 3 也是员工 1 的一个下属,但是由于 并不是直系 下属,因此没有体现在员工 1 的数据结构中。现在输入一个公司.

2021-07-14 16:41:07 123

原创 1035不相交的线(动态规划、最长公共子序列)

1、题目描述在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。现在,可以绘制一些连接两个数字 nums1[i]和 nums2[j]的直线,这些直线需要同时满足满足:nums1[i] == nums2[j]且绘制的直线不与任何其他连线(非水平线)相交。请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。以这种方法绘制线条,并返回可以绘制的最大连线数。提示:1 <= nums1.length <= 5001 <= nums2...

2021-07-14 15:00:39 214

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除