- 博客(285)
- 收藏
- 关注
原创 剑指offer-61、序列化二叉树
序列化可以基于先序、中序、后序、层序的⼆叉树遍历⽅式来进⾏修改,序列化的结果是⼀个字符串,序列化时通过 某种符号表示空节点( # ),以!剩余元素中,所有小于根节点的值构成左子树的前序遍历,大于根节点的值构成右子树的前序遍历。:按照前序遍历的顺序,依次从序列化字符串中读取节点值。从根节点开始,将节点值加入字符串,并将其非空子节点(即使是空节点也记录)加入队列,以确保树结构信息完整。利用二叉树的前序遍历顺序(根-左-右)进行序列化,并使用特殊字符(如"#“或"null”)表示空节点,以确保树结构的唯一性。
2026-01-08 09:00:00
226
原创 剑指offer-60、将⼆叉树打印成多⾏
虽然层序遍历通常用BFS,但也可以用DFS通过递归隐式维护层级信息来实现。从上到下按层打印⼆叉树,同⼀层结点从左⾄右输出。返回值:[[8],[6,10],[5,7,9,11]]输⼊:{8,6,10,5,7,9,11}
2026-01-07 09:00:00
122
原创 剑指offer-59、按之字形顺序打印⼆叉树
我们进行标准的层序遍历,但用一个标志位记录当前层是奇数层还是偶数层。对于偶数层,我们在将该层的节点值列表加入最终结果前,先进行反转。请实现⼀个函数按照之字形打印⼆叉树,即第⼀⾏按照从左到右的顺序打印,第⼆层按照从右⾄左的顺序打印,第三⾏按照从左到右的顺序打印,其他⾏以此类推。利用栈后进先出(LIFO)的特性来自然地实现顺序的反转。我们使用两个栈,一个用于处理当前层,另一个用于存储下一层的节点。返回值:[[8],[10,6],[5,7,9,11]]输⼊:{8,6,10,5,7,9,11}
2026-01-06 09:00:00
178
原创 数据结构-堆
堆是一种满足以下条件的树:堆中的每一个节点值都大于等于(或小于等于)子树中所有节点的值。或者说,任意一个节点的值都大于等于(或小于等于)所有子节点的值。大家可以把堆(最大堆)理解为一个公司,这个公司很公平,谁能力强谁就当老大,不存在弱的人当老大,老大手底下的人一定不会比他强。这样有助于理解后续堆的操作。!!!很多博客说堆是完全二叉树,其实并非如此,堆不一定是完全二叉树,只是为了方便存储和索引,我们通常用完全二叉树的形式来表示堆,事实上,广为人知的斐波那契堆和二项堆就不是完全二叉树,它们甚至都不是二叉树。
2026-01-05 09:00:00
1422
原创 剑指offer-58、对称二叉树
如果左右⼦树都为空,则返回 true ,如果有⼀个为空,则返回 false ,如果两个都不为空的时候,除了对⽐左右两个节点的值,还需要递归,对⽐左⼦树的左⼦树和右⼦树的右⼦树是否相等,左⼦树的右⼦树和右⼦树的左⼦树是否相等。请实现⼀个函数,⽤来判断⼀棵⼆叉树是不是对称的。是按照从右到左添加元素,挨个取出来,进⾏对⽐,不等则说明不对称,如果相等,则再把其左右⼦树。是借助两个队列,按照层次,⼀个是按照从左到右添加元素,另外⼀个队列。输⼊:{8,6,6,5,7,7,5}输⼊:{8,6,9,5,7,7,5}
2026-01-04 09:00:00
266
原创 剑指offer-57、二叉树的下一个节点
先找到根节点,然后通过根节点,中序遍历,中序遍历的过程中,对⽐节点,是否等于输⼊的节点,然后获取下⼀个节点放回。注意没有下⼀个节点的时候,应该返回 null ,不能数组越界。给定⼀个⼆叉树和其中的⼀个结点,请找出中序遍历顺序的下⼀个结点并且返回。注意,树中的结点不仅包含左右⼦结点,同时包含指向⽗结点的指针。:中序遍历的顺序是“左-根-右”。给定节点的“下一个节点”取决于它自己的位置情况。(对应情况2,向上找到第一个作为左子节点的祖先节点的父节点)。(对应情况1,找右子树的最左节点),节点。
2025-12-31 09:00:00
313
原创 剑指offer-56、删除链表中重复的节点
在⼀个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5。对⽐前后两个元素,如果相同的情况下,接着遍历后⾯的元素,直到元素不相等的时候,将前⾯的指针指向最后⼀个相同的元素的后⾯,相当于跳过了相同的元素。注意,题目已经提到是排序的节点,那么就可以直接原地删除。使用pre、cur、next三个指针精确控制删除范围。输⼊:{1,2,3,3,4,4,5}返回值:{1,2,5}
2025-12-30 09:00:00
332
原创 回溯算法总结
其实回溯算法和我们常说的 DFS 算法非常类似,本质上就是一种暴力穷举算法。回溯算法和 DFS 算法的细微差别是:回溯算法是在遍历「树枝」,DFS 算法是在遍历「节点」抽象地说,解决一个回溯问题,实际上就是遍历一棵决策树的过程,树的每个叶子节点存放着一个合法答案。你把整棵树遍历一遍,把叶子节点上的答案都收集起来,就能得到所有的合法答案。站在回溯树的一个节点上,你只需要思考 3 个问题:1、路径:也就是已经做出的选择。2、选择列表:也就是你当前可以做的选择。
2025-12-29 09:00:00
151
原创 动态规划详解
动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的,例如:有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。
2025-12-26 09:00:00
1126
原创 剑指offer-55、链表中环的⼊⼝节点
使⽤快慢双指针,⼀个⼀次⾛⼀步,⼀个⼀次⾛两步,当两个重合在⼀起的时候,这时候,并不是环的⼊⼝节点。直接使⽤ HashSet ,历链表的时候,如果 HashSet 中不包含,则添加到 HashSet 中,如果链表中包含,说明已经回到环的第⼀个节点。因此相遇之后,我们将⼀个快指针移动到链表头,两个指针每次⼀步,直到相遇,这个时候,相遇的节点就是环的⼊⼝节点。给⼀个链表,若其中包含环,请找出该链表的环的⼊⼝结点,否则,输出null。⽐如上⾯的,如果开始节点是A ,环的⼊⼝是B ,相遇的节点是C ,那么。
2025-12-25 09:00:00
316
原创 剑指offer-54、字符流中第一个不重复的字符
可以直接使用哈希的数据结构来存取我们的字符,对与重复的字符可以对值进行统计或者标记都行。这里要用LinkedHashMap,因为题目要求到了要出现的第一个不重复的字符,所以如果不使用有序map的话,那么我们就不能保证取到的是第一个不重复的字符。请实现⼀个函数⽤来找出字符流中第⼀个只出现⼀次的字符。例如,当从字符流中只读出前两个字符" go “时,第⼀个只出现⼀次的字符是” g "。当从该字符流中读出前六个字符“ google “时,第⼀个只出现⼀次的字符是” l "。
2025-12-24 09:00:00
262
原创 剑指offer-53、表达数值的字符串
这道题,其实本质是状态的切换,最最重要的⼀点,是 E 出现之后,其实⼩数点和符号,和数字,都是可以再出现的,可以理解为 E 就是⼀个分割线。请实现⼀个函数⽤来判断字符串str是否表示数值(包括科学计数法的数字,⼩数和整数)。例如,字符串[“+100”,“5e2”,“-123”,“3.1416”,“-1E-16”] 都表示数值。但是[“12e”,“1a3.14”,“1.2.3”,“±5”,“12e+4.3”] 都不是数值。⾸先,初始化当前的索引index =0 ,字符串头部的空格需要跳过。
2025-12-23 09:00:00
849
原创 递归与分治算法
分治法(Divide and Conquer)是一种解决复杂问题的重要算法思想,其核心思想是将一个难以直接解决的大问题,分割成若干个规模较小的子问题,以便各个击破,最后将子问题的解组合起来,得到原问题的解。分治法的思想可以追溯到古代,但作为一种系统化的算法策略,它在计算机科学领域得到了极大的发展和应用。在递归中,一个复杂的问题被分解为相同类型但规模更小的子问题,直到达到一个简单到可以直接解决的基本情况(基准情况)。递归算法的妙处在于它能用简洁优雅的代码解决看似复杂的问题,但在使用时一定要注意。
2025-12-19 09:00:00
1019
原创 剑指offer-52、正则表达式匹配
例如,字符串" aaa “与模式” a.a “和” ab*ac*a “匹配,但是与” aa.a “和” ab*a "均不匹。请实现⼀个函数⽤来匹配包括’ . ‘和’ * ‘的正则表达式。说明:因为这⾥ c 为 0 个,a被重复⼀次, * 表示零个或多个a。注意:上⾯说的第⼀个字符是不是匹配,除了两个字符相等的情况,其实还有模式串的字符为’ . '的情况。说明:“.*” 表示可匹配零个或多个(‘*’)任意字符(‘.’)输⼊:“aad”,“c*a*d”输⼊: “aaa”,“a*a”输⼊:“”,“.*”
2025-12-18 09:00:00
725
原创 剑指offer-51、构建乘积数组
对每个B[i]都计算A中除A[i]外所有元素的乘积,双重循环,外层遍历B的每个位置,内层遍历A数组跳过当前元素。思路:left[i]表示A[0]到A[i-1]的乘积,right[i]表示A[i+1]到A[n-1]的乘积。给定⼀个数组A[0,1,…,n-1] ,请构建⼀个数组B[0,1,…: 如果把问题看作矩阵,B[i]就是去掉对角线元素A[i]后,该行所有元素的乘积。对于A ⻓度为1 的情况,B⽆意义,故⽽⽆法构建,因此该情况不会存在。输出:[120,60,40,30,24]输⼊:[1,2,3,4,5]
2025-12-17 09:00:00
137
原创 剑指offer-50、数组中重复的数字
但是上⾯的做法,不适合求解多个重复数字的例⼦,因为调换的时候,很容易将后⾯的数字换到前⾯去,就会导致求解出来不是第⼀个重复的数字(可以⽤来求解任意的重复数字),可能是第2,3…道有⼏个数字是重复的。例如,如果输⼊⻓度为 7 的数组 [2,3,1,0,2,5,3] ,那么对应的输出是第⼀个重复的数字 2。可以直接借助数组,因为所有数字都在 0 到 n-1 的范围内,⽤⼀个⼤⼩为 n 的数组,就可以对所有的数字进⾏统计个数,如果个数超过 1 ,那么肯定是重复的数字,如果没有重复的数字,则返回 -1;
2025-12-16 09:00:00
170
原创 字符串匹配算法
KMP算法的关键在于构建一个部分匹配表(也叫失败函数或者next数组),这个表记录了当匹配失败时,模式串指针应该回退到的位置,让算法跳过已知不可能匹配的位置,提高匹配效率。KMP算法是字符串处理中的经典算法,用来解决字符串匹配问题,理解它对提升算法设计能力还是很有帮助的。Sunday算法是另一种Boyer-Moore的变种,它关注的是文本串中模式串后面的字符。,时间复杂度平均为O(n+m),n是文本串长度,m是模式串长度。,时间复杂度是O(m+n),m是模式串长度,n是文本串长度。
2025-12-15 09:00:00
898
原创 查找算法详解
的数据集合,每次查找都将查找范围缩小为原来的一半,直到找到目标值或确定目标值不存在。二分查找要求数据必须是有序的,经常应用于数组等支持随机访问的数据结构里。在理想情况下,哈希查找的时间复杂度为 O(1),这就意味着无论数据规模多大,查找操作都能在常数时间内完成,这是哈希查找相比其他查找算法(如二分查找、线性查找)的最大优势。哈希查找(Hash Search),又称散列查找,是一种高效的查找算法,它用哈希函数将数据转换为数组下标,然后直接访问数组中的元素。哈希查找的核心思想是。
2025-12-12 09:00:00
598
原创 剑指offer-49、把字符串转换成整数
对于⼩于0 的情况,假设最⼩值是-128 ,那么sum 是数字部分 128 , 如果当前sum ⼤于 12 ,那么就⼀定超出,或者sum == 12 ,但是个位数⼤于8 ,乘以10 ,相加也会⼤于128 ,不符合要求,所以直接返回0。但是在这个过程中,我们依然需要考虑数字溢出的问题,针对这种情况,我们可以在加和之前判断,针对⼤于0的情况,如果⼤于最⼤值整除10,或者等于最⼤值整除10,但是个位数超过了,都直接返回0。解释:加粗的字符串为已经读⼊的字符,插⼊符号是当前读取的字符。输⼊:s = “42”
2025-12-11 09:00:00
610
原创 剑指offer-48、不使⽤加减乘除实现加法
写⼀个函数,求两个整数之和,要求在函数体内不得使⽤ + 、 - 、 * 、 / 四则运算符号。将加法分解为「无进位和」+「进位值」,循环直到进位为0。将迭代过程转为递归调用,基础案例是进位为0。
2025-12-10 09:00:00
168
原创 剑指offer-47、求1+2+3...+n
n ,要求不能使⽤乘除法、 for 、 while 、 if 、 else 、 switch 、 case 等关键字及条件判断语句( A?递归可以模拟出循环,⼏乎所有的for 循环操作,都可以以递归的⽅式实现。这个问题,如果直接使⽤ for 循环,超级简单,重拳出击,时间复杂度为 O(n)。但是上⾯的做法,同样是使⽤乘法,也违反了原则,那么要不使⽤循环,也不适⽤乘法,怎么做呢?+(n-1)+n = n * (n+1)/2 ,思路:将n(n+1)用位运算实现,然后右移1位代替除以2。
2025-12-09 09:00:00
369
原创 十大经典排序算法
内部排序:数据记录在内存中进行排序。外部排序:因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。插入排序希尔排序选择排序冒泡排序归并排序快速排序堆排序基数排序等,本文只讲解内部排序算法。
2025-12-08 09:00:00
2146
原创 数据结构——树
树就是一种类似现实生活中的树的数据结构(倒置的树)。任何一颗非空树只有一个根节点。树的定义:树是⼀种数据结构,它是由n(n≥1)个有限节点组成⼀个具有层次关系的集合。把它叫做“树”是因为它看起来像⼀棵倒挂的树,也就是说它是根朝上,⽽叶朝下的。每个节点有零个或多个⼦节点没有⽗节点的节点称为根节点每⼀个⾮根节点有且只有⼀个⽗节点除了根节点外,每个⼦节点可以分为多个不相交的⼦树一棵树中的任意两个结点有且仅有唯一的一条路径连通。一棵树如果有 n 个结点,那么它一定恰好有 n-1 条边。
2025-12-05 09:00:00
1376
原创 剑指offer-46、孩⼦们的游戏(圆圈中最后剩下的数)
有个游戏是这样的:⾸先,让 n 个⼩朋友们围成⼀个⼤圈,⼩朋友们的编号是0~n-1。然后,随机指定⼀个数 m ,让编号为0的⼩朋友开始报数。每次喊到 m-1 的那个⼩朋友要出列唱⾸歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下⼀个⼩朋友开始,继续 0…直到剩下最后⼀个⼩朋友,可以不⽤表演,并且拿到⽜客礼品,请你试着想下,哪个⼩朋友会得到这份礼品呢?使用循环链表模拟小朋友围成的圈,将小朋友存入链表,循环删除第m个元素。分析每次被删除的数字规律,直接计算出最后的数字,不需要模拟。
2025-12-04 09:00:00
303
原创 剑指offer-45、扑克牌顺⼦
初始化⼀个最⼩牌 14 ,最⼤牌 0 ,直接使⽤ set 保存数组的元素,如果 set 中已经存在该元素,那么我们直接放回 false ,如果 set 中不存在该元素,则将该元素放进 set 中,判断该元素是否⼩于最⼩牌,⼩于则更新最⼩牌,判断该元素是否⼤于最⼤牌,如果⼤于最⼤牌,则更新当前最⼤牌。5张牌 【A,0,3,0,5】 就可以变成“ 1,2,3,4,5 ”(⼤⼩王分别看作 2 和 4 ),这样就组成了顺⼦。输⼊五张牌,如果牌能组成顺⼦就输出true,否则就输出 false。
2025-12-03 09:00:00
429
原创 剑指offer-44、翻转单词序列
Java ⾥⾯有切割字符串的⽅法,直接⽤空格进⾏分隔,分隔成为多个单词,然后从字符串数组的后⾯开始,每⼀个字符拼接上⼀个空格,但是,值得注意的⼀点是,当只剩下⼀个字符串的时候,也就是索引为 0 的时候,不需要再拼接空格。有⼀个值得注意的点,就是空格的问题,我们压栈的时候,跟随着拼接上空格即可,最后⼀个字符不压⼊空格。给定⼀个句⼦,将句⼦中的单词进⾏翻转,注意,单词内部的字符顺序不改变,改变的是单词与单词之间的顺序,⽐如“ I am a coder. ”,翻转之后变成“ coder. a am I ”。
2025-12-02 09:00:00
340
原创 数据结构-哈希表
像线性数据结构在查找的时候,⼀般都是使⽤= 或者!= ,在折半查找或者其他范围查询的时候,可能会使⽤< 和> ,理想的时候,我们肯定希望不经过任何的⽐较,直接能定位到某个位置(存储位置),这种在数组中,可以通过索引取得元素。那么,如果我们将需要存储的数据和数组的索引对应起来,并且是⼀对⼀的关系,那不就可以很快定位到元素的位置了么?只要通过函数f(k) 就能找到k 对应的位置,这个函数f(k) 就是hash 函数。
2025-12-01 09:00:00
737
原创 线性数据结构
数组(Array)是一种很常见的数据结构。它由相同类型的元素(element)组成,并且是使用一块连续的内存来存储。数组是⼀种线性的结构,⼀般在底层是连续的空间,存储相同类型的数据,由于连续紧凑结构以及天然索引⽀持,查询数据效率⾼。假设我们知道数组a 的第 1 个值是 地址是 296,⾥⾯的数据类型占 2 个 单位,那么我们如果期望得到第 5 个: 296+(5-1)*2 = 304 , O(1) 的时间复杂度就可以获取到。
2025-11-28 09:00:00
682
原创 剑指offer-43、左旋转字符串
汇编语⾔中有⼀种移位指令叫做循环左移( ROL ),现在有个简单的任务,就是⽤字符串模拟这个指令的运算结果。对于⼀个给定的字符序列 S ,请你把其循环左移 K 位后的序列输出。例如,字符序列S=”abcXYZdef” ,要求输出循环左移3位后的结果,即“ XYZdefabc ”。值得注意的是, n 可能⼤于 str 的⻓度,那么这种情况下我们应该先对 str 的⻓度取余,保持严谨。这道题⽬的意思就是将前⾯ n 位,移动到后⾯,那么我们可以直接从第 n+1 位开始,遍历到最后⼀个,再拼接上前⾯ n 个。
2025-11-27 09:00:00
177
原创 剑指offer-42、和为S的两个数字
由于数组 nums[] 是有序的,也就是第⼀个数字是最⼩的,第⼆个数字是最⼤的,那么我们使⽤⼀个指针 i 指向数组第⼀个元素,⼀个指针 j 指向数组最后⼀个元素。输⼊⼀个递增排序的数组和⼀个数字 S ,在数组中查找两个数,使得他们的和正好是 S ,如果有多对数字的和等于 S ,输出两个数的乘积最⼩的。如果 nums[i] + nums[j] < sum ,则说明和太⼩了,⽐ sum 还要⼩,则左边的指针i需要左移⼀步,即是 i++。输⼊:[1,2,4,7,11,15],15。返回值:[4,11]
2025-11-26 09:00:00
139
原创 剑指offer-41、和为S的连续正数序列
⼩明很喜欢数学,有⼀天他在做数学作业时,要求计算出 9~16 的和,他⻢上就写出了正确答案是 100。没多久,他就得到另⼀组连续正数和为 100 的序列: 18,19,20,21,22。注意的是,起点我们只需要遍历到 sum/2 的位置即可,因为⼤于 sum/2 的索引,任何两个数的和都⼤于 sum ,不符合条件。如果和⼤于 sum ,则说明连续⼦数组已经超过,该索引起点的不满⾜条件,直接 break。针对每⼀个索引起点,都计算后续的连续⼦数组的和,并且将元素存到临时 list 中。
2025-11-25 09:00:00
129
原创 SpringCloud 常见面试题(三)
API网关(API Gateway)是一种中间层服务器,用于集中管理、保护和路由对后端服务的访问。它充当了客户端与后端服务之间的入口点,提供了一组统一的接口来管理和控制API的访问。路由转发:API网关根据请求的URL路径或其他标识,将请求路由到相应的后端服务。通过配置路由规则,可以灵活地将请求分发给不同的后端服务。负载均衡:API网关可以在后端服务之间实现负载均衡,将请求平均分发到多个实例上,提高系统的吞吐量和可扩展性。
2025-11-24 09:00:00
920
原创 SpringCloud 常见面试题(二)
配置中心是一个用于配置集中化管理目支持动态更新、分发配置文件的工具(服务)。它实现了配置的统一管理和动态同新,当配置信息发生变化时,配置中心可以自动通知服务实例进行配置更新,这样就可以实例无需重启即可应用最新的配置,从一定程度上减少了系统访问的空窗期,非常灵活方便Spring Cloud Config:Spring 提供的分布式配置管理工具,支持从 Git、SVN 等版本控制系统加载配置Apollo:由携程开源的配置管理中心,支持配置的实时推送和权限管理。
2025-11-21 09:00:00
730
原创 剑指offer-40、数组中只出现⼀次的数字
遍历完成之后,需要将次数为 1 的数字捞出来,同样是遍历 hashmap ,由于只有两个满⾜条件,我们设置⼀个标识变量,初始化为1,如果找到第⼀个满⾜条件的数字,除了写⼊放回数组中,还需要将该标识置为 2 ,表示接下来找的是第 2 个。说明这个元素的该位上也是1。有⼀种巧妙的思路,因为 A 和 B 的某⼀位不同才会在结果中出现 1 ,说明在那⼀位上, A 和 B 中肯定有⼀个是 0 ,有⼀个是 1。A^0 = A,任何⼀个数异或0,等于⾃身,因为所有位如果和0不同,就是1,也就是保留了⾃身的数值。
2025-11-20 09:00:00
516
原创 剑指offer-39、平衡⼆叉树
应该如何避免这种重复计算呢?平衡⼆叉树( Balanced Binary Tree ),具有以下性质:它是⼀棵空树或它的左右两个⼦树的⾼度差的绝对值不超过 1 ,并且左右两个⼦树都是⼀棵平衡⼆叉树。平衡树意味着我们需要对⽐任何在同⼀个根下的左右⼦树的⾼度差,还记得之前我们计算树的⾼度么,使⽤递归⽅式来解决,其实这道题与算⾼度差不多,只是两边⾼度需要算出⼀个差值。上⾯的计算,仔细观察就会发现会有很多重复计算的过程,⽐如下⾯的数,计算⼦树深度的时候,计算 1 的左⼦树,和计算 2 的,基本都重复了。
2025-11-19 09:00:00
341
原创 剑指offer-38、⼆叉树的深度
第⼀种⽅法⽐较容易想到,对于任意⼀个节点 node ⽽⾔,我要想知道当前 node 节点(包括当前节点)的深度,肯定得求当前节点的左边节点(设为 left )的深度 leftDeepth ,以及获取右节点(设为 right )的深度 rightDeepth ,然后求两者最⼤+1( Max{leftDeepth,rightDeepth}+1 ),就是当前节点的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的⼀条路径,最⻓路径的⻓度为树的深度。输⼊:{1,2,3,4,5,#,6,#,#,7}
2025-11-18 09:00:00
396
原创 SpringCloud 常见面试题(一)
微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分为一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API),每个服务都围绕着具体的业务进行构建,并且能够被独立的构建在生产环境、类生产环境等。
2025-11-17 09:00:00
999
原创 微服务/分布式 基础面试题
一个系统 各组件分别部署在不同服务器。彼此通过网络通信和协调的系统。可以指多个不同组件分布在网络上互相协作,比如说电商网站也可以一个组件的多个副本组成集群,互相协作如同一个组件,比如数据存储服务中为了数据不丢失而采取的多个服务备份冗余,当数据修改时也需要通信来复制数据分布式最早出现的目地首先是解决单点问题,避免单点故障,然后解决了性能问题。分布式事务是相对本地事务而言的,对于本地事务,利用数据库本身的事务机制,就可以保证事务的ACID特性。而在分布式环境下,会涉及到多个数据库。
2025-11-14 09:00:00
1322
原创 剑指offer-37、数字在升序数组中出现的次数
假设数组为 nums[] ,⼀开始的左边索引为 left = 0 ,右边界索引为 right = nums.length-1。由于数组元素都是整数,k-0.5和k+0.5正好是目标值范围的边界,它们的插入位置差值就是目标值出现次数。找到索引之后,往两边扩展,同时统计k的个数,直到元素不等于 k 的时候停⽌。分别使用二分查找找到目标值的起始和结束位置,计算区间长度,这是最优解法。一种巧妙的解法,通过查找目标值边界的插入位置来计算出现次数。输⼊:[1,2,3,3,3,3,4,5],3。
2025-11-13 09:00:00
310
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅