- 博客(111)
- 收藏
- 关注
原创 算法:课程表&&课程表||
学习课程 1 之前,你需要先完成课程 0;并且学习课程 0 之前,你还应先完成课程 1。要学习课程 3,你应该先完成课程 1 和课程 2。并且课程 1 和课程 2 都应该排在课程 0 之后。要学习课程 1,你需要先完成课程 0。返回你为了学完所有课程所安排的学习顺序。学习课程 1 之前,你需要完成课程 0。如果减成 0,就加⼊到队列中。如果减成 0,就加⼊到队列中。在选修某些课程之前需要一些先修课程。a. 将所有⼊度为 0 的点加⼊到队列中;a. 将所有⼊度为 0 的点加⼊到队列中;
2025-06-11 08:30:00
594
原创 算法(最小基因变化+迷宫中离入口最近的出口)
本文介绍了两个基于广度优先搜索(BFS)的算法问题。第一个问题是“最小基因变化”,要求从起始基因序列通过最少次数的单字符变化到达目标基因序列,且每次变化后的序列必须存在于给定的基因库中。通过将每个基因序列视为图中的节点,变化视为边,使用BFS寻找最短路径。第二个问题是“迷宫中离入口最近的出口”,要求在迷宫中找到从入口到最近出口的最短路径。同样使用BFS,从入口开始逐层遍历,直到找到出口。两个问题都通过BFS有效地解决了最短路径问题,并提供了相应的代码实现。
2025-05-19 18:52:19
862
原创 算法(三十四)
本文介绍了两种树的层序遍历方法。第一种是N叉树的层序遍历,通过使用队列逐层遍历节点,并将每层的节点值存储在列表中。第二种是二叉树的锯齿形层序遍历,与普通层序遍历类似,但在偶数层时将节点值列表逆序,以实现锯齿形的遍历效果。两种方法都通过队列实现,时间复杂度为O(n),其中n为树的节点数。
2025-05-11 08:30:00
375
原创 算法(三十三)
本文介绍了两个与栈相关的算法问题及其解法。第一个问题是“字符串解码”,要求将编码字符串解码为原始字符串。通过使用两个栈,一个存储重复次数,另一个存储字符串信息,可以有效地处理嵌套的解码过程。第二个问题是“验证栈序列”,判断给定的推入和弹出序列是否合法。通过模拟栈的推入和弹出操作,可以验证序列的有效性。两个问题都展示了栈在处理顺序和嵌套问题中的强大能力。
2025-05-10 08:30:00
632
原创 算法(三十二)
本文将介绍两个LeetCode题目的解法。第一个题目是844.比较含退格的字符串,要求比较两个字符串在输入到文本编辑器后是否相等,其中#代表退格字符。解法使用数组模拟栈结构,遇到非#字符时入栈,遇到#时出栈,最后比较两个字符串处理后的结果。第二个题目是227.基本计算器II,要求实现一个基本计算器来计算字符串表达式的值,仅包含加减乘除运算。解法使用栈来处理运算顺序,先处理乘除法,再处理加减法,最终栈中元素之和即为结果。两个题目都通过栈结构来简化问题处理,展示了栈在算法中的常见应用。
2025-05-09 17:30:00
688
原创 算法(三十一)
文章摘要:本文介绍了两个字符串处理问题的解法。第一个问题是字符串相乘,要求在不使用内置大整数库或直接转换为整数的情况下,计算两个非负整数字符串的乘积。解法通过模拟竖式乘法,先进行无进位相乘,再处理进位,最后去除前导零。第二个问题是删除字符串中的所有相邻重复项,通过栈结构模拟消除过程,遍历字符串时检查当前字符与栈顶字符是否相同,决定是否进行消除操作。两种解法均通过代码实现,并提供了详细的算法思路和示例。
2025-05-09 08:30:00
331
原创 算法(三十)
对于⼀个⼦串⽽⾔,如果它是回⽂串,并且⻓度⼤于 2,那么将它⾸尾的两个字⺟去除之后,它仍然是个回⽂串。从这个性质可以反推出来,从回⽂串的中⼼开始,往左读和往右读也是⼀样的。我们可以先找出前两个的最⻓公共前缀,然后拿这个最⻓公共前缀依次与后⾯的字符串⽐较,这样就可以找出所有字符串的最⻓公共前缀。但是这⾥是⼆进制的求和,我们不是逢⼗进⼀,⽽是逢⼆进⼀。题⽬要求多个字符串的公共前缀,我们可以逐位⽐较这些字符串,哪⼀位出现了不同,就在哪⼀位截止。枚举每⼀个可能的⼦串⾮常费时,有没有⽐较简单⼀点的⽅法呢?
2025-05-07 17:30:00
891
原创 算法(二十九)
如果不符合条件,那么前⼀个下标⼀定不可能与后续相同元素的下标匹配(因为下标在逐渐变⼤),那么我们可以⼤胆舍去前⼀个存储的下标,转⽽将其换成新的下标,继续匹配。因此,我们可以使⽤「哈希表」,令数组内的元素做 key 值,该元素所对应的下标做 val 值,将 「数组元素」和「下标」绑定在⼀起,存⼊到「哈希表」中。如果数组内存在⼤量的「重复元素」,⽽我们判断下标所对应的元素是否符合条件的时候,需要将不同下标的元素作⽐较,怎么处理这个情况呢?将排序后相同的单词,「划分到同⼀组」;答:这⾥运⽤了⼀个「⼩贪⼼」。
2025-05-07 08:30:00
675
原创 算法(二十八)
2. 如果两个字符串能够构成互相重排,那么每个字符串中「各个字符」出现的「次数」⼀定是相同的。这样的话,我们就可以选择「哈希表」来统计字符串中字符出现的次数。分析⼀下题⽬,出现「⾄少两次」的意思就是数组中存在着重复的元素,因此我们可以⽆需统计元素出现的数⽬。在遍历数组的时候,⼀边检查哈希表中是否已经出现过当前元素,⼀边将元素加⼊到 哈希表中。1. 当两个字符串的⻓度不相等的时候,是不可能构成互相重排的,直接返回 false;,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
2025-05-05 17:30:00
647
原创 算法(二十七)
⽽是在将元素放⼊到哈希表中的「同时」,直接来检查表中是否已经存在当前元素所对应的⽬标元素(即 target - nums[i] )。如果我们可以事先将「数组内的元素」和「下标」绑定在⼀起存⼊「哈希表」中,然后直接在哈希表中查找每⼀个元素的 target - nums[i] ,就能快速的找到「⽬标和的下标」。因为哈希表中查找元素的时间复杂度是 O(1) ,遍历⼀遍数组的时间复杂度为 O(N) ,因此可以将时间复杂度降到 O(N)。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
2025-05-05 08:30:00
579
原创 算法(二十五)
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。2. 中间部分往后的逆序;
2025-04-23 08:30:00
439
原创 算法(二十四)
⼤思路与求逆序对的思路⼀样,就是利⽤归并排序的思想,将求整个数组的翻转对的数量,转换成 三部分:左半区间翻转对的数量,右半区间翻转对的数量,⼀左⼀右选择时翻转对的数量。与上个问题不同的是,上⼀道题我们可以⼀边合并⼀遍计算,但是这道题要求的是左边元素⼤于右边元素的两倍,如果我们直接合并的话,是⽆法快速计算出翻转对的数量的。综上所述,我们可以利⽤归并排序的过程,将求⼀个数组的翻转对转换成求 左数组的翻转对数量 + 右数组中翻转对的数量 + 左右数组合并时翻转对的数量。你需要返回给定数组中的重要翻转对的数量。
2025-04-20 08:30:00
1581
原创 算法(二十三)
left[cur1] > right[cur2],由于两个数组都是升序的,那么我们可以断定,此刻 left 数组中 [cur1, 2] 区间内的 3 个元素均可与 right[cur2] 的元素构成逆序对,因此可以累加逆序对的数量 ret += 3,并且将 right[cur2] 加⼊到辅助数组中,cur2++ 遍历下⼀个元素。第四轮循环结束后:left = [x, x, 9] right = [x, x, 8] help = [4, 5, 5, 7] ret = 5 cur1 = 2 cur2 = 2。
2025-04-18 08:30:00
788
原创 算法(二十二)
如果我们使⽤荷兰国旗问题的思想,将数组划分为 左 中 右 三部分:左边是⽐基准元素⼩的数据,中间是与基准元素相同的数据,右边是⽐基准元素⼤的数据。我们在数据结构阶段学习的快速排序的思想可以知道,快排最核⼼的⼀步就是 Partition (分割数据):将数据按照⼀个标准,分成左右两部分。[right, r] ,我们可以通过计算每⼀个区间内元素的「个数」,进而推断出我们要找的元素是在「哪⼀个区间」里面。[right, r] ,我们可以通过计算每⼀个区间内元素的「个数」,进⽽推断出最⼩的 k 个数在哪。
2025-04-14 08:30:00
936
原创 算法(二十一)
说明此时这个位置的元素需要在 left + 1 的位置上,因此交换 left + 1 与 cur 位置的元素,并且让 left++ (指向 0 序列的右边界),cur++ (为什么可以 ++ 呢,是因为 left + 1 位置要么是 0 ,要么是 cur ,交换完毕之后,这个位置的值已经符合我们的要求,因此 cur++ );当遇到 'r' 'o' 'a' 'k' 这四个字符的时候,我们要去看看每⼀个字符对应的前驱字符,当遇到 'c' 这个字符的时候,我们去看看 'k' 这个字符有没有⻘蛙叫出来。
2025-04-08 17:30:00
513
原创 算法(二十)
第⼆⾏、第三⾏除了第⼀个数取值为⾏ 数,每组下标为(2n - 1, 2n)的数围绕(2row - 2)的倍数左右取值。第⼆⾏的数是:1, (2row - 2) - 1, (2row - 2) + 1, (4row - 4) - 1, (4row - 4) + 1;第三⾏的数是:2, (2row - 2) - 2, (2row - 2) + 2, (4row - 4) - 2, (4row - 4) + 2;第四⾏的数是:3, (2row - 2) + 3, (4row - 4) + 3。
2025-04-08 08:30:00
978
原创 算法(十九)
然后找出那两个数(a,b)比特位为1的那个数,把整体的数分为两部分,a+比特位为0的为一部分,b+比特位为1的为一部分,然后进行异或,把1的放入1里面,0的放入0里面。- 第 2 秒,提莫再次攻击艾希,并重置中毒计时器,艾希中毒状态需要持续 2 秒,即第 2 秒和第 3 秒。- 第 1 秒,提莫攻击艾希并使其立即中毒。中毒状态会维持 2 秒,即第 1 秒和第 2 秒。中毒状态会维持 2 秒,即第 1 秒和第 2 秒。- 第 4 秒,提莫再次攻击艾希,艾希中毒状态又持续 2 秒,即第 4 秒和第 5 秒。
2025-04-03 08:30:00
2019
原创 论坛系统项目测试报告
随着互联网的社交模式的多样化,用户对主体化,结构化的需求日益增长,传统的社交媒体(如微信,微博)存在偏碎片化的交流,而垂直领域(如技术,教育)需要更专注的互动平台。论坛系统可以实现这样的想法,其后端通过Spring,SpringBoot,SpringMVC,Mybaits以及前端HTML,CSS,Js实现。实现用户的注册功能,并将密码以加密的形式存储在数据库中,注册之后再进行登录,确保用户已经进行了注册,也可在个人中心修改用户的头像,用户名称,电话号码,以及密码,这些通常存储在数据库中。
2025-04-01 08:30:00
507
原创 网页聊天室项目测试报告
1.网页聊天室是一种基于浏览器运行的实时在线聊天系统,允许多用户通过网页端进行文字交互,类似于微信的简易版,用户无需下载APP,通过浏览器快速进入临时讨论,支持用户之间的临时通信,好友管理和历史消息记录查看。聊天室采用了SpringBoot,SpringMVC作为后端框架,通过WebSocket实现消息的实时传输,前端使用HTML,JavaScript,CSS构建用户界面,项目的自动化测试部分通过Selenium进行编写,结合Java语言进行测试脚本开发,主要对部分功能进行测试。
2025-03-30 08:30:00
803
原创 算法(十八)
由于整个数组中,需要找的元素只出现了「⼀次」,其余的数都出现的「三次」,因此我们可以根据所有数的「某⼀个⽐特位」的总和 %3 的结果,快速定位到 ret 的「⼀个比特位上」的值是 0 还是 1。这样,我们通过 ret 的每⼀个比特位上的值,就可以将 ret 给还原出来。你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。然后⼀直循环进⾏,直到「进位」变成 0 为⽌。按位与 & 操作能够得到「进位」;请你找出并返回那个只出现了一次的元素。,计算并返回两整数之和。设要找的数位 ret。
2025-03-27 08:30:00
437
原创 算法(十七)
如果我们把数组中的所有数,以及 [0, n] 中的所有数全部「异或」在⼀起,那么根据「异或运算的「消消乐」规律,最终的异或结果应该就是缺失的数。设数组的大小为 n ,那么缺失之前的数就是 [0, n] ,数组中是在 [0, n] 中缺失⼀个数形成的序列。,因为有 3 个数字,所以所有的数字都在范围。,因为有 2 个数字,所以所有的数字都在范围。,因为有 9 个数字,所以所有的数字都在范围。2 是丢失的数字,因为它没有出现在。2 是丢失的数字,因为它没有出现在。8 是丢失的数字,因为它没有出现在。
2025-03-26 08:30:00
292
原创 算法(十六)
想知道最⼤的「以 i 为结尾的和为 0 的⼦数组」,就要找到从左往右第⼀个 x1 使得 [x1, i]区间内的所有元素的和为 0。右下⻆坐标: x1 = i + k,y1 = j + k ,但是由于会「超过矩阵」的范围,因此需要对 m - 1 ,以及 n - 1 取⼀个 min。如果将 0 记为 -1 , 1 记为 1 ,问题就变成了找出⼀段区间,这段区间的和等于 0。[1,1,1,0,0,0] 是具有相同数量 0 和 1 的最长连续子数组。的最长连续子数组,并返回该子数组的长度。
2025-03-25 18:00:00
770
原创 算法(十五)
想知道有多少个「以 i 为结尾的和为 k 的⼦数组」,就要找到有多少个起始位置为 x1, x2, x3... 使得 [x, i] 区间内的所有元素的和为 k。设 i 为数组中的任意位置,⽤ sum[i] 表⽰ [0,设 i 为数组中的任意位置,⽤ sum[i] 表⽰ [0, i] 区间内所有元素的和。设 [0, x - 1] 区间内所有元素之和等于 a , [0, i] 区间内所有元素的和等于 b ,可得 (b - a) % k == 0。例如: -1 % 3 = -(1 % 3) = -1。
2025-03-25 08:30:00
661
原创 算法(十四)
那么我们就不能使 ⽤暴⼒的解法,以及求出整个数组的乘积,然后除以单个元素的⽅法。ii. suf 表⽰: i 位置之后的所有元素,即 [i + 1, n - 1] 区间内所有元素的后缀乘积 ,然后再处理最终结果。然后,我们可以⽤⼀个 for 循环枚举可能的中心下标,判断每⼀个位置的「前缀和」以及 「后缀和」,如果⼆者相等,就返回当前下标。i. post 表⽰:i 位置之前的所有元素,即 [0, i - 1] 区间内所有元素的前缀乘积,是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。
2025-03-22 08:30:00
473
原创 算法(十三)
用dp[i] 表示: [1, i] 区间内所有元素的和,那么 dp[i - 1] 里面存的就是 [1, i - 1] 区间内所有元素的和,那么:可得递推公式: dp[i] = dp[i - 1] + arr[i];v. 那么,红⾊就 = 整个⾯积 - 黄 - 绿 - 蓝,但是绿蓝不好求,我们可以这样减:整个⾯积 -(绿 + 黄 )-(蓝 + 黄),这样相当于多减去了⼀个黄,再加上即可。sum[i][j] 表⽰,从 [0, 0] 位置到 [i, j] 位置这段区域内,所有元素的累加和。
2025-03-21 08:30:00
1017
原创 算法(十二)
通过图像我们可以发现, [A,B] 区间内的点都是严格⼤于 D 点的值的, C 点的值是严格小于 D 点的值的。但是当 [C,D] 区间只有⼀个元素的时候, C 点的值是可能等于 D 点的值的。当 mid 在 [C,D] 区间的时候,也就是 mid 位置的值严格小于等于 D 点的值,下次查询区间在 [left,mid] 上。当 mid 在 [A,B] 区间的时候,也就是 mid 位置的值严格大于 D 点的值,下⼀次查询区间在 [mid + 1,right] 上;的数组,预先按照升序排列,经由。
2025-03-19 08:30:00
662
原创 算法(十一)
峰顶左边的数据特点: arr[i] > arr[i - 1] && arr[i] < arr[i + 1] ,也就是呈现上升趋势;峰顶右边数据的特点: arr[i] < arr[i - 1] && arr[i] > arr[i + 1] ,也就是呈现下降趋势。arr[i] < arr[i + 1] :此时「右侧区域」⼀定会存在山峰(因为最右侧是负无穷),那么我们可以去右侧去寻找结果。峰顶数据特点: arr[i] > arr[i - 1] && arr[i] > arr[i + 1];
2025-03-18 08:30:00
784
原创 算法 (十)
当 nums[mid] < target 时,说明 mid 落在了 [left, index - 1] 区间上,mid 右边但不包括 mid 本⾝,可能是最终结果,所以我们接下来查找的区间在 [mid + 1, right] 上。当 nums[mid] >= target 时,说明 mid 落在了 [index, right] 区间上,mid 左边包括 mid 本⾝,可能是最终结果,所以我们接下来查找的区间在 [left, mid] 上。[index + 1, x] 之间的元素,平方之后都是⼤于 x 的。
2025-03-17 08:30:00
964
原创 算法 (九)
iii. arr[mid] < target 说明 [left, mid] 这段区间的值都是⼩于 target 的,因此舍去左边区间,在右边 [mid + 1, right] 区间继续查找,即让 left = mid + 1 ,然后重复 2 过程;ii. arr[mid] > target 说明 [mid, right] 这段区间都是⼤于 target 的,因此舍去右边区间,在左边 [left, mid -1] 的区间继续查找,即让 right = mid - 1 ,然后重复 2 过程;
2025-03-14 08:30:00
749
原创 Linux常用命令
但是一旦代码出现一些意外,导致workdir这个变量的定义语句没有被执行到,没有定义的变量,通过$变量名的方式访问不会报错,而是返回" "字符串。使用cd等命令,需要加上路径的时候,可以使用tab来补全目录,我们只需要按前两个字母,后面按tab,就会帮我们自动补全路径。需要你当前输入的内容,得是唯一的选项,有多个匹配的目录名字/文件名字,按tab不能补全。有的系统上删除目录(递归)每个都要进行确认,我们可以使用rm-rf的方式,直接删除。在linux操作中,涉及到目录操作,都会使用到绝对路径和相对路径的。
2025-03-13 08:00:00
848
原创 算法 (八)
它是 words 中以 ["the","foo","bar"] 顺序排列的连接。它是 words 中以 ["foo","bar","the"] 顺序排列的连接。它是 words 中以 ["bar","the","foo"] 顺序排列的连接。当动态哈希表中包含目标串中所有的字符,并且对应的个数都不⼩于⽬标串的哈希表中各个字符的个数,那么当前的窗⼝就是⼀种可行的方案。它是 words 中以 ["bar","foo"] 顺序排列的连接。它是 words 中以 ["foo","bar"] 顺序排列的连接。
2025-03-11 08:00:00
1001
原创 通过form表单构造HTTP请求
浏览器对于html来说就有一定的鲁棒性(容错能力),即使出现了一个错误的代码,也是可以解析并显示出来的。可以有多个属性,多个键值对之间使用空格来分割,键和值之间使用=来分割,键不需要有引号,只需要有双引号。2.Html中,一些特殊的html标签,可能会触发GET请求,如:img,a,link,script。更规范的代码写法,在此处我们就可以看到html中有许多标签,他们往往是成对出现的。当前的标题是Document,浏览器中刷新就会得到,里面改了,浏览器标签也会改。
2025-03-07 17:00:00
487
原创 HTTP协议-fiddler抓包工具
使用http协议的场景:1.浏览器打开网站2.手机APP访问对应的服务器分为两个部分看待:1.请求2.响应它是一种“一问一答”结构模型的协议请求和响应的协议格式是有所差异的。除了上述结构模型,也有其他的结构模型:一问一答(访问网站)多问一答(上传网站)一问多答(下载网站)多问多答(串流/远程桌面)
2025-03-07 08:30:00
339
原创 算法 (七)
因为字符串 p 的异位词的长度⼀定与字符串 p 的长度相同,所以我们可以在字符串 s 中构 造⼀个长度为与字符串 p 的长度相同的滑动窗口,并在滑动中维护窗口中每种字母的数量;因此可以⽤两个大小为 26 的数组来模拟哈希表,⼀个来保存 s 中的子串每个字符出现的个数,另⼀个来保存 p 中每⼀个字符出现的个数。出窗口:若超过了,则进行left-1操作,若此元素在窗口内没有了,则从哈希表中删除该数据。当窗口中每种字母的数量与字符串 p 中每种字母的数量相同时,则说明当前窗口为字符串 p 的异位词;
2025-03-04 08:30:00
993
原创 算法 (六)
题目要求的是数组「左端+右端」两段连续的、和为 x 的最短数组,信息量稍微多⼀些,不易理清 ,我们可以变换成求总和减去x的做法,只需找出那段的最长长度即可。因此,我们可以把问题转化成:求数组中⼀段最长的连续区间,要求这段区间内 0 的个数不超 过 k 个。要,必须设定与代码⼀致),记录当前滑动窗口内数组和的变量 sum = 0 ,记录当前满足条件数组的最大区间长度 ret = -1;iii. 如果经过前两步的左右移动使得 sum == target ,维护满足条件数组的最大长度,并 让下个元素进入窗⼝;
2025-03-03 08:30:00
747
原创 算法 (五)
但是如果继续像方法⼀⼀样,重新开始统计第二个元素( left2 )往后的和,势必会有大量重复的计算(因为我们在求第⼀段区间的时候,已经算出很多元素的和了,这些和是可以在计算下次区间和的时候用上的)。让滑动窗口满足:从 i 位置开始,窗口内所有元素的和小于 target (那么当窗口内元素之和第⼀次大于等于目标值的时候,就是 i 位置开始,满足条件的小长度)。由于此问题分析的对象是「⼀段连续的区间」,因此可以考虑「滑动窗⼝」的思想来解决这道题。后寻找⼀段最短的区间,使得这段区间的和「大于等于」⽬标值。
2025-02-26 10:00:00
554
原创 算法 (四)
ii. 当使用完⼀次双指针算法之后,固定的 a 也要「跳过重复」的元素(一轮走完后进入下一轮,看这一轮固定的数b是否与上一轮a是同一个数,若是同一个,则继续往后走)。ii. 当使用完⼀次双指针算法之后,固定的 b 也要「跳过重复」的元素(一轮走完后进入下一轮,看这一轮固定的数b是否与上一轮b是同一个数,若是同一个,则继续往后走)。iii.当使用完⼀次双指针算法之后,固定的 a 也要「跳过重复」的元素(一轮走完后进入下一轮,看这一轮固定的数a是否与上一轮a是同一个数,若是同一个,则继续往后走)。
2025-02-23 09:00:00
880
原创 算法 (3)
对于 nums[left] ⽽⾔,此时 nums[right] 相当于是 nums[left] 能碰到的 最大值(升序数组)。那对于 nums[right] ⽽⾔,由于此时两数之和是小于目标值的,nums[right] 还可以选择比 nums[left] 大的值继续努力达到目标值,因此 right 指针我们按兵不动;让 right-- ,继续比较下⼀ 组数据,而 left 指针不变(因为他还是可以去匹配比 nums[right] 更小的数的)。因此,我们可以从 a 往后的数开始列举。
2025-02-22 17:30:00
1627
原创 多线程--单例模式
创建的这个对象,不一定轻量,可能在背后会做很多事情,比如,在创建对象的时候,加载几十G的数据到内存中。懒汉模式:类加载的时候不会创建出实例,第一次使用的时候才会创建出实例,不调用,就不创建实例。所以一旦这两操作被穿插了,就容易出现问题,加锁的关键是要保证这两操作是一个整体(原子)!此时代码会出现重复加锁现象,导致画蛇添足,也会产生锁冲突的问题,所以还需进一步的解决。锁加在哪里也是有一定依据的,他不是加了就安全,加的对不对,也是关键!单例模式的代码,只是在首次使用的时候,会涉及到线程不安全问题,
2025-02-22 08:30:00
939
原创 线程安全--死锁
死锁当一个线程出现线程安全问题(线程内可能存在修改操作)时,这时候就要通过synchronized进行加锁操作了。加锁过程中也会出现死锁现象!synchronized是可重入的,也就相当于可重入锁,可重入锁指的是:一个线程连续针对一把锁,加锁两次,不会出现死锁现象。
2025-01-20 08:30:00
935
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅