自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Mercury_Lc的博客

宁愿笑着流泪,也不哭着说后悔。

  • 博客(536)
  • 收藏
  • 关注

原创 一个简短的自我介绍

挺幸运,能够以这种方式和不经意间看到此刻文章的你打个招呼~如你所见,这里是一个程序开发人员在探索他所碰到的未知过程中的记录。巧合地,现在你在见证着我的成长,也不巧的,这里你看到了很多初学者所犯的几近乎愚蠢至极的错误,这些也都会成为我们相识的见证。在这里记录的有:Python,Java,Golang,C++等编程语言的学习笔记~计算机体系结构,计算机组成原理,编译原理,操作系统等计算机系统的知识基础。.........

2022-07-06 20:47:06 3101 2

原创 【链表 - LeetCode】146. LRU 缓存

本文实现了一个LRU(最近最少使用)缓存机制,使用双向链表和哈希表结合的方式。主要功能包括: get(key)方法:获取键对应值,并将该键值对移动到链表头部,表示最近使用过 put(key,value)方法:插入/更新键值对,如缓存已满则移除链表尾部(最久未使用)的键值对 使用unordered_map存储键到链表节点的映射,实现O(1)时间复杂度的查找 使用list存储键值对,维护最近使用顺序 该实现满足LRU缓存的核心要求:高效访问和更新操作,保证缓存容量不超过设定值。

2025-08-29 17:01:33 364

原创 【二叉树(DFS) - LeetCode】437. 路径总和 III

这篇题解介绍了如何用DFS解决二叉树路径总和III问题。算法采用双递归策略:rootSum函数计算从指定节点出发满足条件的路径数,pathSum函数遍历所有节点,分别调用rootSum计算每个节点作为起点的路径数。通过递归分解问题,最终统计所有可能的路径数量。该方法时间复杂度为O(n²),空间复杂度为O(n)。

2025-08-29 16:16:51 408

原创 【二叉树(DFS)- LeetCode】124. 二叉树中的最大路径和

本文介绍了一种使用深度优先搜索(DFS)解决二叉树最大路径和问题的算法。该算法通过递归计算每个节点的最大贡献值,同时维护全局最大值。对于每个节点,其最大路径和可能包含:1)仅自身值;2)自身值加左子树贡献;3)自身值加右子树贡献;4)自身值加左右子树贡献。算法时间复杂度为O(n),空间复杂度为O(h),其中n为节点数,h为树高。关键点在于处理负数贡献时将其置零,以及正确更新全局最大值。

2025-08-29 15:10:33 261

原创 【双指针 - LeetCode】42. 接雨水

该题解使用双指针法计算接雨水量。初始化左右指针和左右最大值,比较左右指针对应的高度:若左指针高度较小,则计算左指针处的积水量并移动左指针;反之计算右指针处的积水量并移动右指针。每次移动时更新对应侧的最大高度,确保积水高度由较低侧的最大高度决定。算法时间复杂度O(n),空间复杂度O(1),通过动态更新左右最大值来避免重复扫描。

2025-08-29 14:47:21 252

原创 【贪心 或 DFS - 面试题】小于n最大数

该代码实现了一个查找不大于给定数字n的最大数字的算法。通过分解n的各位数字,在可用数字集合中寻找合适组合:首先尝试匹配原数字位数,若不成功则回溯寻找更小的数字组合。算法利用排序和哈希集合优化查找过程,最终拼接出符合条件的最大数字。示例输入为数字2533和数组{1,2,4,9},程序输出2499作为结果。

2025-08-28 17:57:04 172

原创 【链表 - LeetCode】25. K 个一组翻转链表

该题解提供了K个一组翻转链表的两种解法:递归和迭代。递归解法通过反转每K个节点,并递归处理剩余链表,不足K个时再反转回来。迭代解法使用虚拟头节点,先计算链表长度确定反转轮数,然后通过指针操作实现分组反转。两种方法的时间复杂度均为O(n),空间复杂度递归为O(n/k)(栈空间),迭代为O(1)。关键点在于处理好组间连接和边界条件(不足K个节点的情况)。

2025-08-27 23:35:06 1121

原创 【双指针- LeetCode】15.三数之和

本文介绍了一种优化的双指针解法来解决LeetCode上的三数之和问题。该解法首先对数组排序,然后固定一个元素,在剩余部分使用双指针寻找满足条件的组合。相比传统方法,其特点是当sum不满足条件时,会同时移动左右指针,并加入了跳过重复元素的优化。时间复杂度为O(n²),空间复杂度为O(1),代码简洁高效地解决了三数之和问题。

2025-08-27 23:02:17 1076

原创 【栈 - LeetCode】739.每日温度

本文介绍了LeetCode"每日温度"问题的两种解法。第一种解法利用温度范围有限(0-100)的特性,从后向前遍历,维护一个next数组记录各温度最近出现的位置,将时间复杂度优化为O(100n)。第二种解法使用单调栈,栈中存储未找到更高温度的日期索引,遇到更高温度时出栈计算间隔,时间复杂度O(n)。两种方法都避免了暴力O(n²)解法,其中单调栈解法更为简洁高效。

2025-08-25 23:16:21 646 1

原创 【二叉树 - LeetCode】617. 合并二叉树

该题解提供了合并两棵二叉树的递归解法。当两棵树的当前节点都存在时,将第二棵树节点的值加到第一棵树节点上,并递归处理左右子树。若任一节点为空,则返回非空节点。时间复杂度为O(min(m,n)),空间复杂度为O(min(m,n)),其中m和n分别是两棵树的节点数。该方法直接在root1上进行修改,节省了额外空间。

2025-08-25 21:52:30 536

原创 【DFS 或 BFS 或拓扑排序 - LeetCode】329. 矩阵中的最长递增路径

本文介绍了一种使用DFS搜索和记忆化算法寻找矩阵中最长递增路径的解法。通过定义四个方向向量,从每个点出发进行深度优先搜索,比较相邻点的值并记录当前路径长度。使用二维数组dist存储已计算过的结果避免重复计算,最终返回所有路径中的最大值。时间复杂度为O(mn),适用于各种规模的矩阵。该方法结合了DFS的遍历性和记忆化的优化特性,是解决此类问题的标准模板。

2025-08-25 21:32:04 562

原创 【二叉树 - LeetCode】236. 二叉树的最近公共祖先

这道题解使用递归方法在二叉树中寻找两个节点的最近公共祖先(LCA)。关键思路是:递归遍历左右子树,若当前节点等于p或q则直接返回;若左右子树分别找到p和q,当前节点即为LCA;若仅在一侧找到,则返回该侧结果。时间复杂度O(n),空间复杂度O(h),h为树高。该解法简洁高效,通过递归的返回值判断LCA位置,是解决二叉树LCA问题的经典方法。

2025-08-25 19:59:30 209

原创 【链表 - LeetCode】206. 反转链表【带ACM调试】

摘要:本文介绍了链表反转的迭代解法,使用三个指针(prev、cur、nxt)逐步修改节点指向。核心思路是将当前节点指向前驱节点,然后指针顺序后移。提供了LeetCode题解版本(仅核心反转逻辑)和ACM完整版本(含输入输出处理)。代码演示了如何创建链表、反转链表并输出结果,时间复杂度为O(n),空间复杂度O(1)。(148字)

2025-08-25 00:01:28 745

原创 【(含模板)滑动窗口 - LeetCode】3. 无重复字符的最长子串

【摘要】本文介绍了力扣第3题"无重复字符的最长子串"的滑动窗口解法。通过维护一个哈希集合记录当前窗口字符,外层循环扩展右边界,内层循环在遇到重复字符时收缩左边界。时间复杂度O(n),空间复杂度O(字符集大小)。关键代码展示了如何动态调整窗口并更新最大长度,最终返回最长无重复子串的长度。该解法是典型的滑动窗口应用,通过双指针高效解决问题。

2025-08-24 15:03:23 547

原创 【链表 - LeetCode】24. 两两交换链表中的节点

首先是直接遍历的做法,这里注意调整指针指向的顺序。递归的本质在于直接处理最小子集。

2025-08-22 22:21:20 813

原创 【链表 - LeetCode】19. 删除链表的倒数第 N 个结点

题解:直接遍历,到该节点时,跳过该节点,最终返回即可。

2025-08-22 21:41:10 227

原创 【链表 - LeetCode】2. 两数相加

谁都逃不掉 LeetCode!2025年08月22日。

2025-08-22 21:34:18 294

原创 【eBPF 技术】能绑定 eBPF 程序在哪一些核上运行吗?

无法直接绑定eBPF程序到特定CPU核心,因为eBPF是事件驱动的,执行位置由触发事件的CPU决定。控制方法包括:1)对进程监控类程序,使用taskset绑定目标进程;2)对网络程序,通过IRQ亲和性绑定网卡中断。eBPF程序分用户态和内核态,taskset只能控制用户态进程,无法影响内核态eBPF的执行位置。

2025-07-18 10:44:36 1393

原创 【二进制优化 | 性能优化】(篇1)什么是 BOLT(Binary Optimization and Layout Tool)?BOLT 的基本流程是啥?如何使用?

基本块是一段连续的机器指令序列,仅有一个入口(首条指令)和一个出口(最后一条指令),且内部无分支或跳转(除末尾)。调整函数内部基本块的顺序,使高频执行路径(Hot Path)连续排列,减少分支跳转和缓存行切换。将高频调用或共同执行的函数在内存中相邻存放,减少函数调用时的缓存行切换开销。:边权重为基本块之间的跳转频率(如A→B跳转100次,B→C跳转50次)。:将频繁访问的数据结构(如全局变量、常量池)集中存放,提升数据缓存命中率。:最大化“连续执行基本块”的局部性,即跳转频率高的块应相邻。

2025-05-01 22:19:55 1111

原创 【运维 | 硬件】服务器中常见的存储插槽类型、对应的传输协议及其特性总结

企业级 HDD/SSD、RAID。消费级/企业级 NVMe SSD。传统 HDD/SATA SSD。高性能 SSD、低延迟场景。企业级存储、SAN 网络。企业级 NVMe SSD。最低延迟,无接口转换损耗。企业级 HDD/SSD。多协议兼容,热插拔支持。高端 NVMe SSD。优化散热,适合数据中心。单队列(256命令)多队列(64K队列)多队列(256命令)双端口冗余,高可靠性。高密度服务器 SSD。

2025-04-10 15:37:43 474

原创 【论文解读 |资源竞争】TC‘2024 Analysis and Mitigation of Shared Resource Contention on Heterogeneous Multicore

异构多核计算平台因其能够提供显著的性能提升,同时满足尺寸、重量和功耗(SWaP)约束,所以在安全关键的网络物理系统(CPS)中越来越受到青睐。例如在自动驾驶汽车、无人机等应用中,这些平台可以在有限的空间和能源消耗下,实现高效的计算性能,以支持各种复杂的算法和实时数据处理任务。

2025-03-17 00:39:50 869

原创 【Linux 内核 | 操作系统 | 内核编译】内核编译中与锁调试相关的设置有哪一些?内核 Debug 选项中 LockDep 和其他锁调试选项详解

未启用,内核无法主动检测锁顺序错误,可能遗留潜在的死锁隐患。)未启用,无法捕获锁的非法操作(如错误释放)。会引入性能损耗(尤其是高锁竞争场景),建议仅在。获取锁的竞争统计信息,难以定位高竞争锁。若需在生产环境调试,可选择性启用。,但需评估对系统吞吐量的影响。特定锁类型的调试选项(如。

2025-03-14 22:15:28 761

原创 【论文阅读 | 瓶颈定位】OSDI 2024 Identifying On-/Off-CPU Bottlenecks Together with Blocked Samples 系列1 - 简要解读

论文提出了一种新的采样技术“blocked samples”,用于同时捕捉,以解决传统分析器在识别现代应用程序性能瓶颈时的不足。基于这一技术,开发了两个分析器bperf和BCOZ,用于识别性能瓶颈并评估优化的潜在影响。

2025-03-10 23:14:32 713 1

原创 【内存泄漏 | 论文速读】Automated Memory Leak Diagnosisby Regression Testing

核心问题 :如何在开发阶段高效检测内存泄漏,减少生产环境中的修复成本?:通过比较软件新旧版本(v_old和v_new)的内存分配/释放行为差异,定位新引入的泄漏。

2025-02-27 20:02:08 957

原创 【论文速读 | 通俗理解】DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning

本文主要通俗理解一下 DeepSeek-R1 的论文内容,具体细节还是要看论文里面描述的为准。

2025-02-27 16:25:57 1631

原创 【操作系统、数学】什么是排队论?如何理解排队论?排队论有什么用处?Queueing Theory?什么是 Little’s Law?

【在排队论中,Kendall记号 (Kendall's notation)是一种用于标准化描述排队模型的符号系统,由英国数学家David G. Kendall于1953年提出。:20世纪中期,随着计算机和通信技术的兴起,排队论成为运筹学和系统科学的重要分支,被扩展应用于更复杂的场景。假设顾客到达时间间隔服从指数分布,到达率为λ(单位时间到达的顾客数)。:服务时间服从参数为μ的指数分布,服务率为μ(单位时间服务的顾客数)。【单服务台,到达为泊松过程(M),服务时间为指数分布(M),无限容量。

2025-02-26 22:25:35 1895

原创 【力扣 - 简单题】88. 合并两个有序数组

舍友看我写小学编程题,然后嘲笑我:)

2025-02-12 23:21:56 356

原创 【万字长文解读锁1】【论文阅读 | TOCS】Lock–Unlock: Is That All? A Pragmatic Analysis of Locking in Software Systems

在过去的25年中,为了缓解与临界区和锁相关的性能瓶颈,研究者们设计了大量的优化互斥锁算法。然而,目前尚缺乏对这些优化锁算法在实际应用中的行为进行全面研究,尤其是考虑到不同性能指标(如能效和尾延迟)的情况。本文旨在对同步机制进行深入且实用的分析,旨在为软件开发人员提供足够的信息,以设计出快速、可扩展且高效的同步机制。首先,我们在四种不同的多核机器上,对28种先进的互斥锁算法在40个应用中的性能进行了研究。我们不仅考虑了传统的性能指标——吞吐量,还关注了日益重要的能效和尾延迟。

2025-01-31 15:21:13 698

原创 【计算机体系结构、微架构性能分析】core 与 uncore 分别是哪一些部分?区分 core 和 uncore

指的是处理器中的计算核心,是执行指令和处理数据的基本单元。:服务器处理器(如Intel Xeon、AMD EPYC)的Uncore部分通常更复杂,以支持更多的核心和更高的内存带宽。:现代处理器(如Intel的Core系列、AMD的Ryzen系列)通常包含多个核心和复杂的Uncore部分。:Core 的性能决定了单线程任务的执行速度,而 Uncore 的性能影响多核处理器的扩展性和整体效率。Core 和 Uncore 共同决定了处理器的性能、功耗和扩展性,是现代处理器设计中不可分割的两部分。

2025-01-16 14:21:11 1643

原创 【2024总结】 2024 年终总结 —— 破冰计划±

2024 年过得真快,这一年是忙忙碌碌但没有收成的一年,也是导致情况越来越坏的一年。尽管是努力去回想这一年所发生的所有的事情,也没有什么想起什么有意义、又或者是重要的事情。每个人都会对自己的人生有所衡量,无论这个人成功与否,或多或少都会有那么一些想法,对自己的当下、以前、未来有所期望。更多的是,人应该学会,让每天的自己成长一些。再慢一点,一年至少要有一些成长,这也是可以的。唯一让自己有所欣慰的是,在表达上,自己迈出了一步,良好的开始是成功的一半。可见,这是灰色的一年,也是自己逃避的一年。

2025-01-05 15:45:06 294

原创 【性能工程 - eBPF 技术】什么是 kprobe 和 uprobe?一文详解 kprobe 和 uprobe 奥秘

详解 eBPF 中的 kprobe、 uprobe、kretprobe、 uretprobe。

2024-12-07 23:59:33 1388

原创 【Linux 内核构建】如何查看 Linux 系统中可以选择的内核有哪一些?如何切换 Linux kernel 版本?

在折腾内核版本时,遇到的问题,遂将各方面的答案整理在一起。

2024-09-08 00:26:35 757

原创 【Linux 运维知识】Linux 编译后的内核镜像大小

Linux 内核镜像的大小取决于多个因素,包括内核的版本、启用的功能、模块的数量以及特定的编译配置。

2024-09-07 13:57:49 1044

原创 【操作系统 OS】什么是Linux CFS?完全公平调度器是什么?

时钟中断驱动:CFS 的调度检查主要由时钟中断触发,定期执行。红黑树的角色:红黑树帮助 CFS 快速找到最需要 CPU 时间的进程。vruntime:是调度决策的核心指标,反映进程的 CPU 使用时间。公平性:通过不断地选择vruntime最小的进程,CFS 尽可能地实现 CPU 时间分配的公平性。CFS 通过这种机制平衡了系统中所有进程的 CPU 使用,使得所有进程都能按照其优先级和需要公平地获得运行机会。

2024-07-30 22:58:58 1280

原创 【性能工程 - eBPF 技术】小白也能学会的 eBPF 技术(二)—— 什么是 Ring Buffer?【1】

定义:Ring Buffer是一种固定大小、头尾相连的缓冲区,它允许数据以循环的方式在缓冲区中存储和读取。原理:在Ring Buffer中,数据的写入和读取操作是通过移动指针(如头指针和尾指针)来实现的。当数据被写入时,尾指针向前移动;当数据被读取时,头指针向前移动。当尾指针追上头指针时,表示缓冲区已满,此时新的数据会覆盖最旧的数据。也就是说,ring buffer 和我们所用的双向链表形态类似,支持存储和读写。不一样的是使用场景和名字。(当然,程序员可能最喜欢的操作之一,可能就是命名!

2024-07-11 00:49:50 933

原创 【性能工程 - eBPF 技术】小白也能学会的 eBPF 技术——初步了解 eBPF 技术(一)

eBPF技术以其高度的灵活性、安全性以及低开销的特点,正在成为现代云原生、容器化环境、以及需要高性能监控和安全控制场景下的关键技术。随着持续的发展和社区的支持,eBPF的应用前景非常广阔。

2024-07-10 21:38:01 1095

原创 【Linux 基础】df -h 的输出信息解读

tmpfs (/sys/fs/cgroup):这是用于 cgroup(控制组)管理的 tmpfs。详细的来讲, /sys/fs/cgroup 是 cgroup 文件系统的挂载点。例如,可以创建新的 cgroup、配置资源限制(如内存限制、CPU 限制),以及查看当前 cgroup 的资源使用情况。目录用于存储系统和应用程序的锁文件。tmpfs(/run/user/1000):这是为用户 1000(通常是当前登录用户)分配的 tmpf。tmpfs (/run/lock):是一个用于锁文件的 tmpfs。

2024-07-08 23:24:02 1572

原创 【论文速读 | USENIX Security‘2022】Debloating Address Sanitizer

在程序的内存访问点(如加载和存储指令)插入额外的检查代码,这些代码会在运行时检查影子内存,以确定对应的内存访问是否有效。:对 ASan 的运行时活动、状态进行了详细的分类和测量,识别出 sanitizer 检查是导致高开销的主要原因。:如果在影子内存中发现异常(例如,访问了未初始化或已释放的内存),ASan 将报告错误并可能终止程序执行。ASan 是一种广泛使用的内存错误检测工具,但因其开销较大,限制了其在更多场景下的应用。:它集成了多种优化措施,旨在减少 sanitizer 检查,从而降低开销。

2024-06-08 12:27:41 986

原创 【论文速读 | ASPLOS‘24】Merlin: Multi-tier Optimization of eBPF Code for Performance and Compactness

论文主要解决的问题是如何对 eBPF(扩展的 Berkeley Packet Filter)代码进行多级优化,以提高其在 Linux 内核中的性能和紧凑性。eBPF 是一种在内核中运行的虚拟机,它允许用户以安全的方式执行自定义程序,用于观察、分析和修改内核行为。然而,由于 eBPF 程序在执行前需要通过内核的严格验证,并且受限于指令数量和程序长度,这导致在不牺牲安全性的前提下进行性能优化成为一个挑战。

2024-06-07 15:35:27 621

原创 【版本标记 | Github】Github 中常见的版本标记(Tags)有哪一些?分别在什么情况下使用?

无论是自己自由开发项目还是公司协同合作,随着软件的迭代升级,都需要一个比较规范(好区分)的标记来区分不同的软件版本。通常,我们使用不同的数字来表示不同的版本,例如大版本号加上小版本号等,不同的开发者会根据特殊的场景,对每个位数表述的含义进行定义。但往往还会有一些会放在这些数字前后,本文简要说明其作用和使用场景。

2024-05-26 20:25:34 907

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除