- 博客(16)
- 收藏
- 关注
原创 C/C++ 并发编程:多线程 / 多进程锁的种类、特点及场景
锁的核心是 “平衡并发与安全”—— 没有最好的锁,只有最适合的场景。实际开发中,需先明确 “线程 / 进程”“临界区特性”“资源类型” 三个关键维度,再结合锁的优缺点选型。本文梳理的锁类型、特点及选型逻辑,既适用于日常开发沉淀,也能应对 C/C++ 并发编程的面试提问。
2025-12-15 21:40:16
1019
原创 进程、线程和协程
C++ 协程的核心价值是将异步代码 “同步化书写”—— 相比传统的回调地狱(Callback Hell),协程让高并发 IO 代码的可读性提升 10 倍以上,同时保持极致的性能。C++20 原生协程:推荐新项目使用,搭配asio库可快速实现高并发网络服务;:兼容旧编译器,适合存量项目改造;选型原则:IO 密集型高并发场景优先用协程,CPU 密集型用多线程,强隔离场景用进程。
2025-12-11 22:10:58
1015
原创 力扣141. 环形链表
双指针解法是判断链表有环的最优方案,核心在于利用 “快慢速度差” 让有环场景下必然相遇,同时保证空间复杂度最优。代码逻辑简洁,关键在于处理好边界条件和循环条件,避免空指针异常。
2025-11-11 19:00:17
852
原创 C++常考面试题复习与总结(持续更新)
浅拷贝是对象复制时,仅复制对象中的基本数据类型成员变量的值。对于指针类型成员变量,它只是复制指针所存储的内存地址,而非指针指向的实际内存空间内容。这意味着新对象和原对象的指针成员指向同一块内存区域。
2025-11-11 18:51:10
595
原创 C++智能指针
C++ 智能指针是封装普通指针的模板类,自动管理内存生命周期,从根源解决普通指针导致的内存泄漏、野指针、二次释放等问题,是 C++11 及以后标准中内存管理的核心工具。相互指向对方,形成 “引用闭环”,导致引用计数无法减为 0,对象无法析构,最终内存泄漏。指向同一块内存,内部维护 “引用计数”,计数为 0 时自动释放内存。指向某块内存,不可拷贝,仅支持移动(所有权转移),无额外性能开销。的 “观察者”,不增加引用计数,无法直接访问数据(需要通过函数。:输出 “A 析构” 和 “B 析构”,无泄漏。
2025-11-05 22:45:39
249
原创 力扣101. 对称二叉树
对称二叉树指的是:一棵二叉树的左子树与右子树呈镜像结构,即沿根节点的竖直中线翻转后,翻转后的树与原树完全一致。根节点的左子节点与右子节点的值必须相等;左子节点的左子树需与右子节点的右子树对称;左子节点的右子树需与右子节点的左子树对称。对称二叉树的判断核心是 “镜像对比”,递归解法通过辅助函数逐层校验左右子树的对称性,代码简洁且逻辑清晰。理解递归终止条件和镜像关系的映射规则,是掌握该题的关键。
2025-11-04 22:39:10
363
原创 力扣739. 每日温度
当遍历到新元素时,若其大于栈顶索引对应的温度,说明栈顶元素的 “下一个更高温度” 就是i(栈内元素递减,栈顶是当前最 “需要” 更高温度的元素);弹出栈顶元素并更新结果后,继续检查新的栈顶,直到栈空或栈顶温度不小于当前温度,确保栈的递减性。本题的核心是 “寻找右侧第一个更大元素”,单调栈通过维护 “递减性”,将暴力解法的O(n²)优化为O(n),其本质是用空间换时间,通过栈暂存待处理元素,避免重复比较。
2025-11-03 23:10:12
877
原创 力扣11. 盛最多水的容器
本题的关键在于理解双指针法的贪心策略:通过移动较矮边的指针,确保每次遍历都向 “可能获得更大容量” 的方向前进,既保证了效率,又能找到最优解。
2025-11-01 23:37:59
713
原创 力扣56. 合并区间
该代码通过 “排序 + 临时区间遍历合并” 的思路,高效解决了区间合并问题。时间复杂度为O(n log n)(排序主导),空间复杂度为O(n)(存储结果)。核心亮点是用h实时维护当前合并区间,通过简单的push/pop操作避免复杂的区间创建,逻辑清晰易懂。掌握此思路后,可轻松应对类似的区间问题(如 “插入区间”“区间交集”),关键在于利用排序简化重叠判断,用遍历一次完成合并。
2025-10-28 22:09:22
985
原创 力扣15. 三数之和
双指针法是解决 “两数之和”“三数之和”“四数之和” 等问题的通用思路,核心是通过排序减少重复判断,用指针移动替代一层循环,从而优化效率。掌握该思路后,可轻松应对类似的多数之和问题。
2025-10-26 18:04:20
400
原创 力扣121. 买卖股票的最佳时机
给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择买入这只股票,并选择在卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回0。
2025-10-25 22:31:45
241
原创 力扣45. 跳跃游戏 II
45. 跳跃游戏 II 跳跃游戏 II 的核心是在 “必然能到达终点” 的前提下,求到达数组最后一个位置的最少跳跃次数。 本题与跳跃游戏Ⅰ的思路有所不同,本题是已知能到达终点的情况下,需要的最少步数,但是所使用的核心也是“贪心算法”,首先分析,什么时候要开始跳越,本题需要最小的跳越次数,那就证明,我们要在“万不得已”的情况下才要跳,那是什么时候算万不得已呢?我们一开始都是在数组的第一个元素上,而唯一让我们万不得已跳越的就是不能再往前走了的时候(就是到达了第一个数组所能前进的最大距离i+num
2025-10-25 17:51:12
253
原创 力扣236. 二叉树的最近公共祖先
首先,我们需要一个辅助函数,辅助函数的返回值是int类型,然后在辅助函数中写出后序遍历的框架,而我们需要在函数内定义一个int变量,这个变量用来记录p和q是否出现(当p出现时n++,q出现时,也n++),当第一个满足n==2(也就是p和q都找到的时候)这个条件的节点,就是他们的最近公共祖先。而对于第二个例子而言,当递归到5的时候,n的值就是2了,而5就是他的最近公共祖先。例如p->val=5,q->val=1,他们的最近共同祖先就是3,或者p->val=5,q->val=4,那他们的最近共同祖先就是5。
2025-10-23 19:46:45
337
原创 力扣55. 跳跃游戏
给定一个非负整数数组 ,你最初位于数组的第一个位置。数组中的每个元素 表示你在位置 时可以跳跃的最大长度(即从 出发,最多可以跳到 的位置)。请判断你是否能够到达数组的最后一个位置。 本题使用的核心思维就是贪心算法,贪心算法的核心思路就是:先找寻每一步的局部最优,通过局部最优来实现全局最优,运用到本题中 ,就是每走一步,找到最远能到达的距离并将其保存下来,再用这个最远距离来判断是否能到达下一个位置(false的情况),或者是否到达最后一个位置(true的情况)。从代码中我们能看到
2025-10-22 17:52:36
171
原创 力扣238. 除自身以外数组的乘积
首先看到本题的题目,我们第一想到的就是前缀乘积和后缀乘积,而想到这里本题的思路也就比较清晰了。前缀乘积就是:对于第i个元素,他的前缀乘积就等于从第1个到第(i-1)个元素的乘积。后缀乘积:对于第i个元素,他的后缀乘积就等于从最后一个到第(i+1)个元素的乘积。1.不能使用除法(避免数组中存在 0 时的除零错误);,要求返回一个数组output,其中output[i] 等于。而解开本体的首要目标就是计算前缀乘积数组和后缀乘积数组。他们正好没有把当前元素算进去,而有了这两个就可以得出,之外其余所有元素的乘积。
2025-10-21 12:26:53
130
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅