- 博客(99)
- 收藏
- 关注
原创 经典算法题剖析:按奇偶排序数组
新建一个数组 res 用来保存排序完毕的数组。遍历两次 nums,第一次遍历时把所有偶数依次追加到 res 中,第二次遍历时把所有奇数依次追加到 res 中。给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。返回满足此条件的 任一数组 作为答案。
2026-07-09 15:09:19
146
原创 拓扑排序 + 广度优先搜索法实例应用(二)
每次将一个节点出队列并加入拓扑排序中,然后将该节点的所有相邻节点的入度都减 1 ,如果一个相邻节点的入度变成 0 ,则将该相邻节点入队列。如果有向图中无环,则每个节点都将加入拓扑排序,因此拓扑排序的长度等于字典中的字母个数。如果有向图中有环,则环中的节点不会加入拓扑排序,因此拓扑排序的长度小于字典中的字母个数。当一个节点加入拓扑排序之后,该节点的所有相邻节点的入度都减 1,表示相邻节点少了一条入边。当一个节点的入度变成 0 ,则该节点前面的节点都已经加入拓扑排序,该节点也可以加入拓扑排序。
2026-07-02 09:00:16
156
原创 拓扑排序 + 深度优先搜索法实例应用
遍历字典构造有向图需要 O(n×L) 的时间,由于有向图包含最多 n-1 条边和 ∣Σ∣ 个节点,因此深度优先搜索需要 O(n+∣Σ∣) 的时间,总时间复杂度是 O(n×L+n+∣Σ∣) = O(n×L+∣Σ∣)。一般来说,使用深度优先搜索实现拓扑排序的总体思想是:对于一个特定节点,如果该节点的所有相邻节点都已经搜索完成,则该节点也会变成已经搜索完成的节点,在拓扑排序中,该节点位于其所有相邻节点的前面。一个节点的相邻节点指的是从该节点出发通过一条有向边可以到达的节点。
2026-06-30 16:23:20
182
原创 经典算法实例:有效的回旋镖
思路和算法计算从 points [0] 开始,分别指向 points [1] 和 points [2] 的向量 V1 和 V2。给定一个数组 points ,其中 points [ i ] = [ xi, yi ] 表示 X-Y 平面上的一个点,如果这些点构成一个回旋镖则返回 true。回旋镖定义为一组三个点,这些点各不相同且不在一条直线上。时间复杂度: O(1)。空间复杂度: O(1)。
2026-06-29 11:25:41
361
原创 将字符串翻转到单调递增
如果一个二进制字符串,是以一些 0(可能没有 0)后面跟着一些 1(也可能没有 1)的形式组成的,那么该字符串是 单调递增 的。给你一个二进制字符串 s,你可以将任何 0 翻转为 1 或者将 1 翻转为 0。返回使 s 单调递增的最小翻转次数。
2026-06-28 18:12:26
166
原创 集成学习常见概念的优缺点总结
Bagging* 主要关注降低方差,在不容易受样本扰动的学习器上的效用更明显* 可以有效地缓解过拟合问题,但它对于噪声数据的容忍度较低* Boosting* 更多地关注如何减小模型的偏差* 可以提高模型的泛化能力,但容易受到噪声数据的干扰* GBDT 只用到了损失函数的一阶导;XGboost 用到了损失函数的二次导,效果会更好* XGBoost 加入了一个正则化项,包含了叶子节点的个数和各个叶子节点输出值的平方之和* XGBoost 引入了列抽样,能够降低过拟合的风险,也减少了计算量。
2026-06-28 11:52:31
263
原创 集成学习方法之前向分步算法
假设两个弱分类器 a 和 b ,ea = 0.8 和 eb = 0.1 ,在这两种情况下,正确分类的样本的权重比上错误分类的样本的权重分别是 8 : 2 和 1 : 9。可知 log(4/1) 是负数,log (9) 是正数,此处可以看出,分类性能越好的分类器,计算出的权重会更大,对最终结果影响的程度越高。这是因为我们希望正确分类的样本的权重比上错误分类的样本的权重恰好是正确率和错误率的比值的反比,如果用上面的式子的话,就有。其中,y∈{−1, +1} 表示样本的真实标签,f(x) 表示模型的预测值。
2026-06-27 16:10:03
310
原创 小白如何轻松学会用STAR法则?
运用 STAR 法则,是一种讲述自己故事的方式,是一个清晰、条理的模板,合理熟练运用此法则,可以轻松地表现出自己分析问题的清晰性、条理性和逻辑性。所以用 STAR 法则,说明项目的背景(S)、担任的任务(T),采取什么样的行动(A),取得了什么样的结果(S)。列举你在项目中遇到的难点和挑战,以及你是如何克服它们的,突出你的解决问题的能力和创新思维。突出你在项目中所取得的成果和效果,比如完成的任务、提出的解决方案、获得的荣誉等。列出你在项目中承担的职责和任务,突出你在项目中的作用和贡献。
2026-06-26 12:16:35
366
原创 经典算法专区:找树左下角的值(三)
使用广度优先搜索遍历每一层的节点。在遍历一个节点时,需要先把它的非空右子节点放入队列,然后再把它的非空左子节点放入队列,这样才能保证从右到左遍历每一层的节点。广度优先搜索所遍历的最后一个节点的值就是最底层最左边节点的值。空间复杂度:O(n) ,如果二叉树是满完全的二叉树,那么队列 q 最多保存「n /2」个节点。时间复杂度:O(n) ,其中 n 是二叉树的节点数目。方法二:广度优先搜索。
2026-06-25 16:11:57
237
原创 经典算法专区:找树左下角的值(二)
使用 height 记录遍历到的节点的高度,curVal 记录高度在 curHeight 的最左节点的值。在深度优先搜索时,我们先搜索当前节点的左子节点,再搜索当前节点的右子节点,然后判断当前节点的高度 height 是否大于 curHeight ,如果是,那么将 curVal 设置为当前结点的值,curHeight 设置为 height。因为我们先遍历左子树,然后再遍历右子树,所以对同一高度的所有节点,最左节点肯定是最先被遍历到的。空间复杂度:O(n) ,递归栈需要占用 O(n) 的空间。
2026-06-25 13:41:52
274
原创 经典算法专区:找树左下角的值(一)
给定一个二叉树的 根节点 root ,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。
2026-06-24 16:53:31
245
原创 经典算法实例:串联所有单词的子串(二)
初始化 differ 时,出现在窗口中的单词,每出现一次,相应的值增加 1 ,出现在 words 中的单词,每出现一次,相应的值减少 1。窗口移动时,若出现 differ 中值不为 0 的键的数量为 0 ,则表示这个窗口中的单词频次和 words 中单词频次相同,窗口的左端点是一个待求的起始位置。记 words 的长度为 m,words 中每个单词的长度为 n,s 的长度为 ls。空间复杂度:O(m×n),其中 m 是 words 的单词数,n 是 words 中每个单词的长度。
2026-06-23 18:53:49
207
原创 经典算法实例:串联所有单词的子串(一)
例如:如果 words = [ “ab”,“cd”,“ef” ] 那么 "abcdef", "abefcd","cdabef", "cdefab"," efabcd ", 和 " efcdab " 都是串联子串。" acdbef " 不是串联子串,因为他不是任何 words 排列的连接。给定一个字符串 s 和一个字符串数组 words。words 中所有字符串 长度相同。s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。返回所有串联字串在 s 中的开始索引。
2026-06-23 13:40:52
299
原创 算法竞赛入门:UVA11572 Unique Snowflakes
可以使用双指针法解决问题,移动指针保证两个指针形成的子区间没有重复的元素,C++ 可以用到 STL set ,Java 语言可以使用 HashSet 存储元素(当然用哈希表代替也可以)。指针 i 指向区间左端点,指针 j 指向区间右端点,j 不断尝试向右侧扩展区间,将新数加入到 Set 中,如果发现元素有重复,则移动 i 指针缩短区间长度。这种算法的编程的套路比较固定,对于这类题型,只需要分析清楚题目的应用场景,选择适合的做法即可。实际上,本题还有其他解法,例如二分法,map 等。
2026-06-22 15:59:16
310
原创 双指针法学习:反转字符串与链表的反转
双指针法,定义一个指针 cur 指向当前节点,一个指针 pre 指向前一个节点,另一个指针 next 指向当前节点的下一个节点。然后依次将当前节点指向前一个节点,然后依次将 pre、cur、next 向右移动一个节点,直到 cur 指向链表的尾节点。输入:["h", "e", "l", "l", "o"]输出:["o", "l", "l", "e", "h"]给定一个链表,反转链表后,返回新链表的头节点。输入:1->2->3->4->5->NULL。输出:5->4->3->2->1->NULL。
2026-06-21 16:58:26
193
原创 后端面试中的MySQL高频考题
无论是常年与数据打交道的数据分析师和数据科学家,经常需要管理和维护数据库的数据库管理员,还是是需要了解嵌入式数据库的移动开发工程师,都免不了与 SQL 打交道。( Structured Query Language )是一门在开发者中使用覆盖率超50%的数据库结构化查询语言。哈希范围查询很慢,链表要遍历,剩下的就是树。广为人知的有,二叉搜索树,AVL 树,红黑树,B 树等等。那么,在后端的技术面试中,有哪些常见的 MySQL 考题呢?而对于后端程序员来说,MySQL 也是技术面试过程中的高频考点之一。
2026-06-20 20:29:25
303
原创 栈与队列实例精讲|单调栈
单调栈是让栈内元素保持大小顺序的结构,专门快速找“下一个更大/更小”的数,遍历一遍就能算完,不用反复循环。共一行,包含 N 个整数,其中第 i 个数表示第 i 个数的左边第一个比它小的数,如果不存在则输出 −1。假设给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。第一行包含整数 N ,表示数列长度。第二行包含 N 个整数,表示整数数列。1 ≤ 数列中的元素 ≤ 10^9。
2026-06-20 09:11:21
197
原创 经典算法实例讲解:质数排列(二)
求符合条件的方案数,使得所有质数都放在质数索引上,所有合数放在合数索引上,质数放置和合数放置是相互独立的,总的方案数即为「所有质数都放在质数索引上的方案数」×「所有合数都放在合数索引上的方案数」。求 n 个数中质数个数的时间复杂度为 O(n*3/2 ) ,阶乘的时间复杂度为 O(n) ,总的时间复杂度为 O(n*3/2)。「204.计数质数的官方题解」列举了更多的求质数个数方法,读者可以根据兴趣阅读。求「所有质数都放在质数索引上的方案数」,即求质数个数 numPrimes 的阶乘。
2026-06-19 20:44:34
289
原创 经典算法实例讲解:质数排列(一)
100 以内的质数清单:2、3、5、7、11、13、17、19、23、29、31、37、41、43、47、53、59、61、67、71、73、79、83、89、97。题目描述:请你帮忙给从 1 到 n 的数设计排列方案,使得所有的「质数」都应该被放在「质数索引」(索引从 1 开始)上;你需要返回可能的方案总数。让我们一起来回顾一下「质数」:质数一定是大于 1 的,并且不能用两个小于它的正整数的乘积来表示。几个关键特点:2 是最小的质数也是唯一的偶数质数,1 既不是质数也不是合数。
2026-06-19 11:38:33
184
原创 什么是离散化及其实现方式
如大家所熟悉的,在一些场景或题目中,常常会遇到数据跨度较大的一堆数据。如果需要用连续空间存储,则会有大量空闲的空间,并且遍历的时间复杂取决于最大和最小值的间距。离散化是指,将无限的数据,映射到有限的空间中并保留原来的全 / 偏序关系。如果不关系数据的具体大小,只关心数据的相对顺序,那么就可以用到本文重点。这正式排序后的次序。因此排序是必不可少的一个步骤。以下以一维数组给出示例,将数据离散化到。
2026-06-17 22:07:28
310
原创 换个角度看:快速傅里叶变换算法(FFT)
假设我们有一个长度为 n 的信号 x ,我们可以将其分解为两个长度为 n/2 的信号 x1 和 x2。然后,我们可以使用递归算法计算 x1 和 x2 的 DFT(离散傅里叶变换),并将它们组合成 x 的 DFT。傅里叶变换的计算复杂度为 O(n^2) ,其中 n 是信号长度。它使用递归算法将 x 分解为两个长度为 n/2 的信号 x_even 和 x_odd ,并分别计算它们的 DFT。然后,我们可以计算 x1 和 x2 的 DFT ,分别得到长度为 n/2 的 DFT 向量 X1 和 X2。
2026-06-17 12:50:58
188
原创 面经经验分享|实用的小建议
这里举几个反例:有的同学可能某方面知识复习的不到位或者是比较紧张,回答的时候会反复强调这一点,这种行为没有任何好处,停顿一下,深呼吸一下,都是更好的选择;有的同学可能正好问到了准备的比较充分的问题,引申了很多不太相关的内容,这里有个技巧,在引申的时候可以提几个关键词询问面试官,如果他比较感兴趣,再继续说,这样会比你直接滔滔不绝最后被打断好很多。一般面试官设计面试题目,都是由浅入深,简单题代表着面试官心中的一条线,这种题没答好,有时候会直接影响面试结果。还可以问部门和工作情况,表达自己的意愿。
2026-06-16 17:48:07
275
原创 经典算法专区:最低加油次数(二)
当遍历到加油站 stations[i] 时,假设在到达该加油站之前已经加油 j 次,其中 0 ≤ j ≤ i ,则只有当 dp[j] ≥ stations[i][0] 时才能在加油 j 次的情况下到达加油站 stations[i] 的位置,在加油站 stations[i] 加油之后,共加油 j+1 次,可以行驶的英里数是 dp[j] + stations[i][1]。遍历满足 0 ≤ j ≤ i 且 dp[j] ≥ stations[i][0] 的每个下标 j ,计算 dp[j+1] 的最大值。
2026-06-15 15:48:40
201
原创 经典算法专区:最低加油次数(一)
注意:如果汽车到达加油站时剩余燃料为 0 ,它仍然可以在那里加油。如果汽车到达目的地时剩余燃料为 0 ,仍然认为它已经到达目的地。假设汽车油箱的容量是无限的,其中最初有 startFuel 升燃料。当汽车到达加油站时,它可能停下来加油,将所有汽油从加油站转移到汽车中。其中 stations[i] = [positioni, fueli] 表示第 i 个加油站位于出发位置东面 positioni 英里处,并且有 fueli 升汽油。汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。
2026-06-15 12:57:33
184
原创 算法专题:独特的电子邮件地址
每个有效电子邮件地址都由一个本地名和一个域名组成,以 '@' 符号分隔。除小写字母之外,电子邮件地址还可以含有一个或多个 '.' 或 '+'。给你一个字符串数组 emails ,我们会向每个 emails[i] 发送一封电子邮件。返回实际收到邮件的不同地址数目。如果在本地名中添加加号('+'),则会忽略第一个加号后面的所有内容。例如 m.y+name@email.com 将转发到 my@email.com。为了计算不同地址的数目,我们可以用一个哈希表记录所有的邮件地址,答案为哈希表的长度。
2026-06-14 15:59:12
236
原创 栈与队列专题详解之拖拉机
她们在田地的不同地方放了 N 捆干草,这样一来,约翰想要开走拖拉机就必须先移除一些干草捆。拖拉机的位置以及 N 捆干草的位置都是二维平面上的整数坐标点。拖拉机的初始位置上没有干草捆。当约翰驾驶拖拉机时,他只能沿平行于坐标轴的方向( 北,南,东和西 )移动拖拉机,并且拖拉机必须每次移动整数距离。还有一种比较特殊的队列称为双端队列,在入队或出队操作时的位置可以是队头也可以是队尾,经常和 BFS 结合起来,解决一些常见的算法问题。请帮助约翰确定他需要移除的干草捆的最小数量,以便他能够将拖拉机开到二维平面的原点。
2026-06-14 09:18:33
248
原创 常见的数据结构——栈与队列
当我们浏览网页时,每次点击链接都会将新的页面加入到栈中,而当我们点击 “返回” 按钮时,就会将栈顶的页面弹出,这样就可以回到之前的页面了。队列的本质也是一个容器,它可以存储任何类型的数据,但是队列的大小也是固定的。栈的基本操作有两个,即入栈和出栈。栈的本质是一个容器,它可以存储任何类型的数据,但是栈的大小是固定的,因为它的元素只能在栈顶添加或删除。当一个进程需要运行时,就将它加入到队列的队尾,当操作系统分配到一个 CPU 时,就将队首的进程取出来运行,这样就可以保证每个进程都能得到运行的机会。
2026-06-13 17:09:55
336
原创 欧拉回路与欧拉路径的算法流程演示
我们发现,节点 还存在未被遍历的边( 和 ),因此我们从节点 出发,重复步骤 1。将结果序列中的一个 换成这个回路,此时的结果序列即为 ,而图也变成了下面的样子。将结果序列中的一个 换成这个回路,此时的结果序列即为 ,而图也变成了下面的样子。我们通过反证法简要说明一下,为什么步骤 1 中,如果遇到一个节点 不存在未被删除的边(即节点 的度数为 ),那么该节点必然是出发点。首先,假设 ,那么在遍历过程中,为了最终进入节点 ,进入 的边数需要恰好比离开 的边数多 ,也就是说节点 的度数将减少一个奇数。
2026-06-13 10:06:06
657
原创 浅谈:无向图的欧拉回路
同样地,对于起点而言,离开起点需要“消耗”一条边,而回到起点需要“消耗”另一条边。因此,该节点的度数(连接该节点的边的数量,若一条边的两端是同一个节点则需计算两次)必须为偶数,才能保证我们不被“困在”该节点中。欧拉对哥尼斯堡七桥问题的分析更加抽象化。首先,欧拉将每片地区抽象为一个点,并将每座桥抽象为连接两点的一条线,得到如下抽象图形。与上一节中的分析类似,对于任意一个与起点不同的节点,进入该节点需要“消耗”一条边,而离开该节点需要“消耗”另一条边。为了纪念欧拉的发现,符合要求的路径被称为“欧拉回路”。
2026-06-12 14:37:57
261
原创 欧拉回路与欧拉路径实例分析
如果 pairs 的一个重新排列,满足对每一个下标 i(1 <= i < pairs.length)都有 endi-1 == starti,那么我们就认为这个重新排列是 pairs 的一个合法重新排列。然而,设 pair 的数量有 个,这样构建的图将有 条边(考虑 个 pair 满足 end == 1,另外 个 pair 满足 start == 1 的数据),无法满足本题的数据范围。更妙的是,我们只需要找到一条经过所有边恰好一次的路径,又回到了我们熟悉的有向图的欧拉路径问题。
2026-06-11 16:08:43
247
原创 干货篇:多线程拓展问题
如大家所熟悉的,程序员在学操作系统的时候一般都会接触一个经典问题——哲学家进餐问题,有 5 个哲学家围着在一个圆桌上,而圆桌上正好放有 5 根筷子,每根筷子放在两个哲学家之间,就在这两个人的左 / 右手边,并且这两个哲学家都能拿起筷子,哲学家进餐有规定:每个人只能拿起左手边和右手边的筷子,如果没有两根筷子,就不能进餐,每个人进餐结束之后将筷子放回原处。总之,多线程是有很多知识点需要总结的,学习了多线程的概念和方法,还应当去实际场景中去应用,多敲多练才是掌握知识的最好方法。
2026-06-11 10:54:43
179
原创 线程的生命周期之线程通信
那么当这本书被一位同学借走时,程序就应当阻止其它线程的访问,因此借书就是多线程访问一个共享资源的方法,必须加同步锁,其它线程抢占不到资源会进入阻塞状态。这其实就是线程间通信的典型例子。线程间通信常用的方法有 wait()、notify()、notifyAll() 等。请注意,在使用 wait() 和 notify() 方法时,必须在同步块内部调用它们,否则会抛出 IllegalMonitorStateException 异常。此外,线程在调用 wait() 方法时会释放锁,直到被唤醒后才会重新获得锁。
2026-06-10 21:26:16
303
原创 实现Runnable接口来创建线程
在这个代码中,我们首先创建了一个实现了 Runnable 接口的类 MyRunnable ,然后在类中实现了 run() 方法,并在 run() 方法中编写了多线程任务代码。最后,我们调用 start () 方法启动这两个线程,实现了多线程执行任务的效果。如你所知,多线程的实现方法主要有三种,一种是通过继承 Thread 类来创建线程,一种是通过实现 Runnable 接口来创建线程,其中,的方法比继承 Thread 类的方法更灵活,因为一个类只能继承一个父类,而实现接口可以实现多继承。
2026-06-09 08:57:39
287
原创 干货分享——认识多线程
多线程的优点包括提高程序的并发性和效率,可以实现异步处理,提高程序的响应速度和用户体验。在单线程的程序中,只有一个执行流程,只能执行一个任务,无法同时处理多个任务。而多线程程序中,可以同时执行多个任务,不同的线程可以同时读写不同的数据,从而避免了线程之间的阻塞等待,提高了程序的效率和响应速度。多线程是指在一个程序中同时运行多个线程,每个线程都是独立的执行流程,可以在同一时间内执行不同的任务,从而提高程序的并发性和效率。不得不说,我们平常写的大部分程序都是单线程,但是单线程的程序往往功能非常有限,
2026-06-08 18:15:55
231
原创 模拟退火算法的实例应用
这里面的 neighbor() 函数用来产生当前解附近的解,因为解空间是连续的,所以当前解附近必定有离最优解更近的解,我们只需要找到个这个解并继续做迭代即可。那么迭代的停止条件是什么呢?假如地图中只存在一个最优解,那么迭代的结果必然是让当前解无限的接近最优解,所以只需要设置一个阈值,并判断当前迭代步长是否小于该阈值即可(这里可以选择一个比题目中要求的误差更小的值作为阈值)。因为解的类型是小数,所以解空间的边界是连续的,可以进一步猜测该问题是凸优化问题,我们可以尝试使用爬山算法来寻找最优解。
2026-06-08 12:37:23
322
原创 机器学习之精确率和召回率的关系
不同的阈值会导致分类结果的变化,当阈值较低时,模型更容易将样本判定为正例,这可能会提高召回率,但精确率可能会降低。相反,当阈值较高时,模型更谨慎地将样本判定为正例,这可能会提高精确率,但召回率可能会降低。精确率的目标是尽可能地减少将负样本错误的预测为正样本的情况,即减少**假阳性**的数量。在疾病预测的例子中,精确率表示模型能够将样本正确预测为患病的能力。F1 分数的取值范围为 0 到 1,其中分数较高的情况表示模型能够同时取得较高的精确率和召回率,即模型能够在保持准确性的同时捕捉到更多的真实正例。
2026-06-07 15:47:50
324
1
原创 机器学习任务二分类的应用案例
如下图,假设一共有 100 个样本,其中 90 个是正常未患病的人,10 个是患病的人,现在模型预测出 12 个患病的人,88 个未患病的人。是一个常见的机器学习任务,有许多指标来衡量二分类模型的性能,本文将从疾病预测的场景开始,分别介绍二分类的基础指标和综合指标,并进行对比。预测患病的人中,8 人真正患病(真阳性),4 人并未患病(假阳性)。预测未患病的人中,86 人未患病(真阴性),4 人患病(假阴性)。二分类就是把数据非此即彼地分成两类的任务,结果只有两种可能,比如判断邮件是不是垃圾。
2026-06-07 10:42:23
210
原创 分布式锁的可用性与切换效率探讨
当进程持有的锁需要被重新调度时,持有者可以主动删除锁节点,但当持有者发生异常(如进程重启,机器宕机等),新的进程要重新抢占,就需要等待原先的会话过期后,才有机会抢占成功。我们也曾经遇到过该类场景,因为机器 load 高,硬件问题等原因,设备上的进程假死但其中仍存在部分线程在工作,比如锁的心跳维护线程依然正常运行,这样锁节点仍然是被假死进程占据着,且无法被其他进程抢占。当用户需要将发生假死的进程持有的锁释放时,可以通过查询会话信息,并将会话加黑,此后,心跳将不能正常维护,最终导致会话过期,锁节点被安全释放。
2026-06-06 21:56:29
343
原创 干货分享——分布式锁的典型案例
因为涉及到数据一致性,无论是 Master 之间的分布式锁实现 HA ,还是不同的 manager 对 sourcer 的访问控制,这里对于分布式锁的需求就是绝对互斥性是第一位的。大多数情况下都希望这两类操作在同一时间段最多只有一个,从而保证库存数据不会错乱,这是个典型的追求“效率提升”的分布式锁应用场景。无论是 Master 选主,还是 manager 的 sourcer 互斥,均需要常驻分布式锁,这里的一个技术选型是自研的 Paxos 协议,还是依赖三方的分布式一致性系统。
2026-06-06 11:20:23
242
原创 干货分享|C++运算符重载知识点
C++ 支持类型的重载,使得外部在调用对象的时候能够在某些情况下达到使用类似目标类型的效果。使用静态对象可以减少临时对象的生成,但是提升效率的同时往往会造成许多意想不到的问题。分别对应拷贝赋值和移动赋值。请同时出现让外部人员认为行为的一致。一般对应左右值重载的情况不多,此处以 const 重载为例。就像是在工厂模式中一样,有构造工厂的同时要提供析构工厂。C++ 非常重要的两个构造,拷贝构造和移动构造。
2026-06-05 21:30:39
147
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅