- 博客(29)
- 收藏
- 关注
原创 mysql索引失效的原因
倘若有联合索引(a,b),在b+树的索引中是先按照a进行排序,a相同按照b排序。同样的字符串的匹配也是同样的原理"s%"可以利用到索引是由于字符串的索引是从第一个字符开始排序,在第一个字符相同的情况下,第二个字符进行排序,以此类推,那么“s%”就很好的利用到了有序性。上述的第6点:倘若结果集过大,例如整个表中的a字段都大于1,然后查询的条件 a>1.5,并且满足此查询条件的数据占据了表格的大部分,那么用不用索引效率都差不多甚至更差,那么mysql或许就不会使用索引。5.使用or连接的字段并非都有索引。
2025-10-25 14:46:48
342
原创 如何简单的并且又能大幅度降低任务队列的锁粒度、提高吞吐量?
在高并发场景下,任务队列是削峰和线程间通信的重要手段,是线程池的重要组件,而我自己从零写了一个线程池,当我在优化性能的时候,降低锁粒度就成了必不可少的手段,在我一步一步的优化下,我写的线程池在锁竞争激烈的场景下吞吐量和稳定性都超过jdk线程池的50%,那么话不多说,具体来看我是如何一步步优化的。
2025-10-10 23:08:55
1218
原创 leetcode hot100 合并两个有序链表
那么就需要合并a.next 和 b.val,并且合并后得到的结果需要连接到a,也就是a.next = merge(a.next,b);这道题目是两个有序链表合并为一个有序链表。两个节点 : a、b 并且a.val>=b.val。
2025-08-20 16:00:22
131
原创 leetcode hot100 链表:环形链表Ⅱ
这两个的相对速度为1,如果有环,长为length,也就是共有length个节点,那么走length次后一定会相遇。a = k*c-b===>也就是说a路程大小相当于k圈c的大小-b也就是,这个点正好是环起点。那么只需要在快慢指针相遇后,将慢指针指向头节点,然后快慢指针同时以一步一次的速度移动,就一定会在环起点相遇。2(a+b) = a+b+k*c ===>2(a+b)左右两边是快节点走的路程,k代表k圈。那么如何判断环的起始节点:设头节点到环起始点为 a 到相遇点为 b,环长为c,那么就有。
2025-08-19 20:32:33
203
原创 leetcode hot100 矩阵:旋转图像
/ j只到i为止,因为当j >= i时,[i][j]和[j][i]的交换会重复之前的操作。// 内层循环:遍历当前行中"行索引大于列索引"的元素(避免重复交换)// 交换[i][j]和[j][i]的元素,实现行与列的转换。// 第二步:反转每一行的元素(将每行从左到右的顺序反转)// 定义左右指针,l从行首开始,r从行尾开始。// 左指针右移,右指针左移,缩小范围。// 交换当前行中l和r位置的元素。// 当左指针在右指针左边时,持续交换。// 外层循环:遍历每一行,i表示当前行索引。
2025-08-18 09:53:00
423
原创 leetcode hot100 矩阵:螺旋矩阵
/ 边界判断:如果当前行索引已超出上边界(上边界随圈数收缩:0 + circle),则退出整个循环。// 调整位置:到达上边界后,行索引下移一位(避免越界),列索引右移一位(准备下一圈的右遍历)// 调整位置:到达右边界后,列索引左移一位(避免越界),行索引下移一位(准备向下遍历)// 调整位置:到达下边界后,行索引上移一位(避免越界),列索引左移一位(准备向左遍历)// 调整位置:到达左边界后,列索引右移一位(避免越界),行索引上移一位(准备向上遍历)// 从上到下遍历,行索引递增,直到触及下边界。
2025-08-18 09:44:26
524
原创 leetcodehot100 矩阵置零
额外使用一个boolean变量用来判断第一列是否为零。另外第一行除了第一个用来标记当前的列是否为零,第一列用来标记当前行是否标记为零。i++){//将记录所有应该置零的地方。//判断第一列是否存在零。
2025-08-16 20:05:18
257
原创 leetcode hot100数组:缺失的第一个正数
如何进行排列,只需要遍历到某个索引,然后将这个地方的数据放到合适的地方就行了。应当让这两个数交换:nums[i] 和nums[nums[i]-1],之所以减一就是为了满足上述要求。那么交换一次就行了吗?不行,因为交换过来的数不一定就是放到了合适的位置,所以需要while循环。为了知道第一个缺失的正数,可以将所有的整数按照顺序放到数组里面,然后遍历数组,哪个地方不是对应的正数,那么就缺失了这个地方的对应的正数。需要放进数组进行排列的数据需要满足要求:正数、大小小于等于数组大小的数。
2025-08-16 16:33:45
153
原创 hot100,数组:合并区间(一个return解决!)
先用sorted排序。再使用reduce进行归并,reduce第一个参数代表着初始数值。第二个参数就是具体函数,函数的第一个参数在最开始是初始数值,在之后就是你return的数值。第二个参数代表遍历到的当前元素。第三个参数也是一个函数,使用来解决并行流的合并的,这题目使用单线程,所以无所谓,我就直接返回null了。这道题目用stream流来解决就十分的优雅与高级,那么为什么可以用stream来解决呢。这道题目就说的很清晰了”合并“!而stream流对于合并有个专门的函数reduce()。
2025-08-14 14:07:38
196
原创 hot100:字串,滑动窗口最大值
这道题目是需要用到单调队列,那么为什么要用到单调队列去解决呢?观察题目:窗口始终向右移动,那么就是先进先出,符合队列特性。再看:需要记录窗口每一次移动后其中的最大值。也就是需要找到最大值。那么就是说,在队列的基础上还需要能够快速找到其中的最大值,很明显就应当使用从头至尾的单调递减队列。好的,想明白这个,题目就简单了,我们只需要在每次移动窗口,保证单调队列的情况下,还得保证头部的索引是在窗口里面的就行了。i++){//开始移动窗口。
2025-08-13 10:39:52
133
原创 力扣hot100:字串:最小覆盖子串
这道题目,首先需要想清楚怎么样才能获得覆盖字串,首先初始左右指针形成一个窗口,然后移动右指针进行扩展。这时候已经找到了所有的所需要的字符了,那么就应该尝试缩小窗口,右指针需要动吗?显然右指针指向的地方才正好使得窗口含有所有的所需要字符,所以右指针不需要动,这时候应该左指针右移,右移到什么地步呢?是直到窗口含有所有的字符还是直到窗口已经不满足覆盖字串的要求呢?显然,需要找到下一个满足覆盖字串的窗口(也就是全新的左右指针),所以应当移动到正好窗口不满足覆盖字串这个要求。
2025-08-13 10:31:59
276
原创 hot100 字串第一题:560. 和为 K 的子数组
首先明确,我们是统计每个位置前连续一段数组的和为k的数量。在当前位置,找到和为k的连续字串,那么一定需要存在和为sum-k的连续字串。此题目需要利用前缀和思想去解决。
2025-08-12 10:03:42
165
原创 hot100:滑动窗口第二题
这道题目是寻找字母异位词。要知道异位词,首先得知道题目让我找的词语是什么,所以需要用map记录一下。当我门在字符串中寻找异位词的时候,需要左右两个指针,右指针在扩展当中于map进行比对,一旦发现有多出map的词语了,就收缩,直到多出来的词语全都被消去了就继续进行扩展,那么什么时候才会找到异位词呢?当窗口长度跟原词语一样长,并且没有多出来的字母就算找到了。
2025-08-11 20:18:27
197
原创 hot100:滑动窗口第一题,3. 无重复字符的最长子串
这道题目是找到最长的不重复的字串。首先肯定是确定两个指针,用来确定字串的左右范围。那么,什么情况下能够保证不重复呢?那就是一旦碰到重复的就缩短字串直到不再含有重复的呗( ̄▽ ̄)",那么我们就有思路了,就是右指针用来扩展,等到右指针扩展到了含有重复字符的时候就用左指针来缩短就行了。
2025-08-11 09:39:59
163
原创 力扣hot100三数之和:双指针倒数第二题
这道题就是要想明白怎么才能够不重复的找到三元组-----------首先要保证三元组呈次序关系,其次就是三元组各自不能与上一轮相同。
2025-08-10 20:56:20
239
原创 力扣hot100,双指针最后一题42. 接雨水
当然了左右两边不一定等高,那么一定是选这两个最高的当中较低的一个地方。由此,就知道与水量应该怎么累加了,设置左右两个指针,并且记录着左右两边的最高的点,相对低的一边就与那边的指针位置的高度相减,再与总和累加,然后移动相对低的一边就行了。接雨水其实想清楚后会发现代码非常清晰,其本质是判断当前索引下应该用哪个索引的高度去减去当前的高度。
2025-08-09 23:18:19
213
原创 hot100双指针2:11. 盛最多水的容器
这道题作为中等题还是很有水分的,其实就是初始左右指针,范围持续向内缩小找最大值,那么为了值更大,肯定是移动短的一方。
2025-08-09 14:14:06
274
原创 hot100哈希3:128. 最长连续序列
/ 遍历输入数组nums,将每个数字存入map,并设置初始序列长度为1(每个数字自身视为长度为1的序列)// temp减1,继续向左检查下一个数字(例如,从i=3开始,检查2、1等)// 更新当前键i的值:i的原值加上temp-1的值(合并序列长度)// 创建一个HashMap,键为数字,值为该数字所在序列的长度(或标记值0表示已处理)// 如果当前键i的值是0,表示该数字已被处理过(属于其他序列),跳过本次循环。// 记录当前连续序列的长度,至少为1(当前元素本身)// 若存在,当前连续序列长度加1。
2025-08-08 11:12:14
362
原创 hot100 2 :49. 字母异位词分组
for(List<String> list : map.values()){ // 遍历映射中所有值(分组列表)List<List<String>> res = new ArrayList();for(String str:strs){ // 遍历每个输入字符串。
2025-08-08 09:23:04
194
原创 重刷hot100 经典两数之和!!
还记得一年前想要开始刷算法,结果因为第一题就不会,心态直接崩了。从那之后,几乎每天都不停,刷个一两道。今天从第一题开始重新刷,真是有感,坚持还是有回报的。想想当时,听到各种算法:单调栈、单调队列、二分法、回溯、动态规划。听到就头疼,每次用个集合都得问问ai有哪些常用的方法。这第一道题目还是很有意思的,真正掌握后,就会发现hash的妙用。// 找到解:返回补数索引和当前索引。// 检查补数是否存在于哈希表中。// 无解返回null(题目保证有解)// 计算当前元素所需的补数。// 将当前元素存入哈希表。
2025-08-07 21:00:22
217
原创 力扣200. 岛屿数量
岛屿问题,一种图的问题,首先要明白如何遍历。事实上与二叉树差不多,唯一不同的是图四面八方都有叉,并且各个节点之间是相互连接的那么在遍历的过程中就会碰到之前遍历过的地方被重复遍历,那么如何解决这个问题呢,只需要标记一下就行了,这个岛屿问题中就是将遍历过的土地‘1’都变成‘2’这样,每次发现是‘2’就跳过。
2025-08-07 17:12:25
123
原创 力扣124. 二叉树中的最大路径和
/返回最长单边路径。//右节点的最长单边路径。//左节点的最长单边路径。此题是间接找到答案,dfs的含义是单边最长路径,通过寻找单边最长路径的过程去找到最长的路径。dfs(root);//找到root为节点的最长单边路径。
2025-08-06 21:06:03
235
原创 从 JDK 线程池到 DynaPart-TP动态线程池:能动态调参,竟然还有翻倍的吞吐量提升!
项目首页 - DynaGuardAutoPool-动态线程池 - GitCodehttps://gitcode.com/2401_82379797/DGA-Pool
2025-08-05 20:32:10
2494
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅