- 博客(285)
- 收藏
- 关注
原创 抖音高频编程考题:合并区间 (中等)
首先,我们需要按区间的起始位置对区间进行排序。这样可以确保我们处理区间时,所有重叠区间都在一起,便于合并。:O(n),因为我们仅遍历一遍区间列表。要解决这个问题,我们需要合并所有重叠的区间。区间[1,3]和[2,6]重叠,将它们合并为[1,6].一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。区间[1,4]和[4,5]可被视为重叠区间。:O(nlogn),其中n是区间的数量;表示若干个区间的集合,其中单个区间为。中的区间即为合并后的不重叠区间。,用于存储合并后的区间。
2025-01-19 18:40:21
1111
2
原创 抖音高频编程考题:最大子数组和 (中等)
每次分割数组都需要O(n)时间来计算跨越中间的子数组和,并且总共有O(logn)层递归。,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。这种方法的时间复杂度为O(nlogn),空间复杂度为O(logn)。这种方法的时间复杂度为O(n),空间复杂度为O(1)。:O(logn)。递归调用栈的深度为O(logn)。连续子数组[4,-1,2,1]的和最大,为6。来记录当前子数组的最大和,然后更新全局最大和。
2025-01-19 18:40:12
1210
3
原创 抖音高频编程考题:最小覆盖子串 (困难)
中每个字符的计数,并且滑动窗口可能需要O(∣S∣)的空间来存储窗口中的字符计数。指针以缩小窗口,尽量找到最小的符合条件的子串;在缩小窗口的过程中,不断更新最小子串的长度和起始位置。t中两个字符'a'均应包含在s的子串中,因此没有符合条件的子字符串,返回空字符串。问题的核心是要用滑动窗口的技巧来找到最小的满足条件的子串。:当遍历完成后,返回找到的最小子串,如果没有符合条件的子串,则返回空字符串。中的增减操作是O(1)的,因此总时间复杂度为O(m+n)。
2025-01-19 18:40:00
1054
3
原创 抖音高频编程考题:滑动窗口最大值 (困难)
要解决这个问题,我们可以使用**双端队列(Deque)**来高效地找到滑动窗口内的最大值。双端队列允许我们在O(1)的时间复杂度下在队列的两端进行插入和删除操作。具体可参考:https://zyfcodes.blog.youkuaiyun.com/article/details/141401712。的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的。每个元素最多被插入和删除一次,因此总的时间复杂度是O(n)。个元素的索引,因此空间复杂度是O(k)。滑动窗口每次只向右移动一位。
2025-01-19 18:39:51
1099
3
原创 抖音高频编程考题:和为 K 的子数组 (中等)
具体可参考:https://zyfcodes.blog.youkuaiyun.com/article/details/141401712。我们只遍历一次数组,每次操作的时间复杂度是O(1),因此总的时间复杂度是O(n)。前缀和的基本思想是通过累积数组元素的和,可以快速计算出任意子数组的和。要解决这个问题,我们可以使用前缀和(PrefixSum)以及哈希表来优化查找和为。个不同的前缀和,因此空间复杂度是O(n)。在最坏的情况下,哈希表。子数组是数组中元素的连续非空序列。
2025-01-19 18:39:43
1150
5
原创 抖音高频编程考题:找到字符串中所有字母异位词 (中等)
起始索引等于0的子串是"ab",它是"ab"的异位词。起始索引等于1的子串是"ba",它是"ab"的异位词。起始索引等于2的子串是"ab",它是"ab"的异位词。起始索引等于0的子串是"cba",它是"abc"的异位词。起始索引等于6的子串是"bac",它是"abc"的异位词。滑动窗口每次移动都需要比较两个频率表,这一步是O(1)的操作,因此整个算法的时间复杂度为O(n)。,但它们的大小是固定的(26个字母),所以空间复杂度为O(1)。
2025-01-19 18:39:32
1037
2
原创 抖音高频编程考题:无重复字符的最长子串 (中等)
为了解决这个问题,可以使用滑动窗口的技术。滑动窗口可以动态地维护一个子串,并且当发现子串中有重复字符时,可以调整窗口的起始位置,从而找到不含重复字符的最长子串。使用了一个哈希集来存储当前窗口内的字符,最坏情况下需要存储所有字符,因此空间复杂度与字符集大小。:每次更新窗口后,记录当前窗口的长度,并与已知的最大长度进行比较,保留较大的值。指针右移,缩小窗口,直到窗口内没有重复字符为止。因此,总的时间复杂度为O(n),其中。中时,说明出现了重复字符,这时需要将。,请你找出其中不含有重复字符的。
2025-01-19 18:39:23
1119
原创 抖音高频编程考题:接雨水 (困难)
上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1]表示的高度图,在这种情况下,可以接6个单位的雨水(蓝色部分表示雨水)。只使用了固定的额外空间来存储指针和变量,因此空间复杂度为O(1)。为了计算在柱子之间能够接住多少雨水,可以使用双指针的方法。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。指针相遇时,遍历结束,所有的雨水量已经计算完毕。位置的柱子可能会接住雨水,接住的水量取决于。,以便在接下来的计算中使用。用于记录接住的总雨水量。,则能接住雨水,并将。位置能接住的雨水量。
2025-01-19 18:39:14
1118
3
原创 抖音高频编程考题: 三数之和 (中等)
不同的三元组是[-1,0,1]和[-1,-1,2]。注意,输出的顺序和三元组的顺序并不重要。要在数组中找出所有和为0且不重复的三元组,可以采用排序+双指针的方法。唯一可能的三元组和为0。
2025-01-19 18:39:05
1123
2
原创 高频编程考题:盛最多水的容器 (中等)
图中垂直线代表输入数组[1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为49。这个问题可以通过使用双指针的方式来解决。在双指针法中,每一步只移动一个指针,一共需要遍历整个数组一次,因此时间复杂度为O(n)。只使用了固定的额外空间来存储指针和最大面积,因此空间复杂度为O(1)。轴共同构成的容器可以容纳最多的水。找出其中的两条线,使得它们与。返回容器可以储存的最大水量。
2025-01-19 18:38:55
1014
2
原创 抖音高频编程考题:移动零 (简单)
数组中的每个元素最多被遍历两次(一次在第一次遍历时移动非零元素,另一次在填充零时),因此时间复杂度为O(n)。具体可参考:https://zyfcodes.blog.youkuaiyun.com/article/details/141401712。到数组末尾,同时保持非零元素的相对顺序,我们可以使用双指针技术来实现。移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。只使用了常数级别的额外空间,即指针。为了在不复制数组的情况下原地移动所有。,因此空间复杂度为O(1)。
2025-01-19 18:38:45
929
4
原创 抖音高频编程考题:最长连续序列 (中等)
要在未排序的整数数组中找出最长的连续序列,并且时间复杂度要求为O(n),可以采用哈希集(HashSet)来进行优化。具体可参考:https://zyfcodes.blog.youkuaiyun.com/article/details/141401712。需要一个哈希集来存储数组中的所有元素,最坏情况下需要O(n)的额外空间。每个数字最多只会被访问一次,因此时间复杂度为O(n),其中。在哈希集中插入和查找的操作时间复杂度都是O(1)。,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
2025-01-19 18:38:36
1008
4
原创 抖音高频编程考题:字母异位词分组 (中等)
要将字母异位词组合在一起,我们可以利用哈希表(HashMap)的特性。:O(n*k)。需要使用额外的空间来存储排序后的字符串,以及存储结果的哈希表。哈希表最多需要O(n*k)的空间,其中。具体可参考:https://zyfcodes.blog.youkuaiyun.com/article/details/141401712。是由重新排列源单词的所有字母得到的一个新单词。是字符串数组的长度,是字符串的平均长度。是字符串数组的长度,是字符串的平均长度。
2025-01-19 18:38:27
1114
1
原创 抖音高频编程考题:旋转图像(中等)
原矩阵中的matrix[col][n−row−1]就被覆盖了!当我们知道了如何原地旋转矩阵之后,还有一个重要的问题在于:我们应该枚举哪些位置(row,col)进行上述的原地交换操作呢?题目中要求我们尝试在不使用额外内存空间的情况下进行矩阵的旋转,也就是说,我们需要「原地旋转」这个矩阵。那么matrix[col][n−row−1]经过旋转操作之后会到哪个位置呢?我们再重复一次之前的操作,matrix[n−row−1][n−col−1]经过旋转操作之后会到哪个位置呢?使用另一个矩阵来旋转图像。
2025-01-19 18:38:18
1361
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS覆盖率检测原理与增量代码测试覆盖率工具实现-美团技术团队日常开发Guava提效工具库核心实用指南梳理_guavastring转list-优快云博客从ES的JVM配置起步思考JVM常见参数优化_esjvm配置-优快云博客。
2025-01-19 18:32:46
1041
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现1
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-优快云博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-优快云博客。
2024-12-30 00:23:10
880
1
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现2
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-优快云博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-优快云博客。
2024-12-30 00:23:07
857
3
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现3
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-优快云博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-优快云博客。
2024-12-30 00:23:04
840
1
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现4
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-优快云博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-优快云博客。
2024-12-30 00:22:59
804
2
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现5
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-优快云博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-优快云博客。
2024-12-30 00:22:57
907
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现6
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-优快云博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-优快云博客。
2024-12-30 00:22:54
855
2
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现7
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-优快云博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-优快云博客。
2024-12-30 00:22:51
527
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现8
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-优快云博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-优快云博客。
2024-12-30 00:22:49
881
2
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现9
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-优快云博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-优快云博客。
2024-12-30 00:22:47
991
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现10
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-优快云博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-优快云博客。
2024-12-30 00:22:44
853
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现11
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-优快云博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-优快云博客。
2024-12-30 00:22:42
754
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现12
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-优快云博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-优快云博客。
2024-12-30 00:22:39
840
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现13
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-优快云博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-优快云博客。
2024-12-30 00:22:37
1007
2
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现14
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-优快云博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-优快云博客。
2024-12-30 00:22:34
935
1
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现15
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-优快云博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-优快云博客。
2024-12-30 00:22:31
848
1
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结1
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 18:37:44
853
4
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结2
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 18:37:42
892
1
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结3
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 18:37:39
714
3
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结4
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 18:37:37
806
1
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结5
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 18:37:34
826
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结6
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 18:37:32
580
1
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结7
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 18:37:30
950
2
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结8
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 18:37:28
519
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结9
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 18:37:26
958
1
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结10
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 18:37:23
864
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人