- 博客(47)
- 收藏
- 关注
原创 力扣70.爬楼梯
摘要:爬楼梯问题可通过斐波那契数列解决。每次可爬1或2阶,n阶方法数等于f(n)=f(n-1)+f(n-2)。初始化p=0,q=0,r=1,通过循环计算最终返回r。例如:1阶1种,2阶2种,3阶3种,4阶5种,5阶8种。该解法时间复杂度O(n),空间复杂度O(1)。
2025-10-06 21:37:28
262
原创 力扣169.多数元素
本文介绍了一种寻找数组中多数元素的算法。多数元素指出现次数超过数组长度一半的元素。算法使用哈希表记录元素出现次数,遍历数组时更新次数并检查是否超过阈值。当发现某元素出现次数超过n/2时立即返回该元素。该方法时间复杂度为O(n),空间复杂度为O(n),能高效解决该问题。代码实现包含了对边界情况(如数组长度为1)的处理。
2025-10-06 21:01:34
162
原创 力扣136.只出现一次的数字
摘要:本文讨论了两种在非空整数数组中找出唯一出现一次元素的解法。第一种解法先排序数组,然后通过遍历比较相邻元素,时间复杂度为O(nlogn)。第二种更优解法利用异或运算的性质,只需一次遍历就能得到结果,时间复杂度为O(n),且空间复杂度为O(1)。异或解法通过其消除偶数次出现的特性,能高效地找出唯一出现的数字,是最佳解决方案。
2025-10-06 18:05:30
190
原创 C++版单例模式-现代化简洁写法
本文介绍了C++中单例模式的两种线程安全实现方式。饿汉式在程序启动时创建实例,通过静态成员变量实现;懒汉式在首次调用时创建实例,利用C++11的静态局部变量线程安全特性。两种方式都通过删除拷贝构造和赋值运算符来保证单例特性。饿汉式实例在类外定义,懒汉式则在getInstance()方法内定义静态变量。两种实现都简洁且线程安全,满足不同场景下的单例需求。
2025-09-11 19:33:26
210
原创 Rust语法(不废话版)
本文介绍了Rust编程语言的基础知识和核心概念。从"Hello,World!"程序开始,逐步讲解了变量声明、数据类型、控制流、函数定义、结构体和枚举等基本语法。重点阐述了Rust独特的特性,包括所有权系统、借用检查、生命周期管理等内存安全机制。同时介绍了高级特性如泛型编程、错误处理、并发编程、宏系统等。文章还涵盖了Rust的模块系统、测试框架、文档注释等工程实践内容,展示了Rust作为系统编程语言在安全性和性能方面的优势。通过丰富的代码示例,帮助读者快速掌握Rust的核心概念和编程范式。
2025-09-11 10:15:39
732
原创 Axum web框架【实习】
Axum是Rust生态中的现代web框架,基于Tokio、Tower和Hyper构建。它以异步优先、类型安全和模块化中间件为特点,支持async/await语法,并充分利用Rust的编译时检查减少运行时错误。Axum提供简洁的路由语法、灵活的提取器(Extractors)和内置响应构建功能,可轻松开发REST API和微服务。其错误处理机制能确保所有错误都被适当处理。示例展示了如何创建基本服务器、处理不同HTTP方法、解析JSON请求以及实现超时处理。Axum与Serde、sqlx等Rust生态库无缝集成,
2025-09-09 18:35:09
776
原创 103.二叉树的锯齿状遍历
bool变量确保第一层根节点是正序(本质也是从左向右了),第二层是从左向右,第三层是从右向左(使用reverse反转),后面以此类推。主要就是bool变量判断状态是从左往右还是从右往左,如果是从右向左就使用reverse反转一下。这里不做解释了,因为面过的手撕题下次不想再做错了,这里做下笔记,时刻提醒自己曾经栽在这个题目上。力扣:103.二叉树的锯齿状层序遍历。
2025-07-16 17:38:50
305
原创 Qt面试常问
Qt信号槽机制通过元对象系统实现动态绑定,利用moc生成的函数间接调用槽函数,支持跨线程和运行时连接调整。使用信号槽需继承QObject并添加Q_OBJECT宏。连接方式包括自动/直接/队列/阻塞/唯一连接,处理不同线程场景。.pro文件管理项目依赖模块。Qt对象树机制使父对象销毁时自动析构子对象,无需手动释放内存。核心特性包括:信号本质为特殊函数、元对象系统支撑、四种线程处理模式,体现了Qt在对象通信和内存管理方面的设计优势。
2025-06-17 15:27:05
443
原创 Nginx的负载均衡算法
会话状态是服务器为客户端存储的临时上下文数据,在用户交互期间有效。代理分为正向代理(隐藏客户端)和反向代理(隐藏服务器)。Nginx负载均衡算法包括静态算法(轮询、加权轮询、IP哈希、一致性哈希)和动态算法(最小连接数、最短响应时间)。不同算法适用于不同场景:轮询适合无状态服务,IP哈希适合需要会话保持的场景,最小连接数适用于长连接服务,最短响应时间适合负载变化快的节点。一致性哈希则适用于分布式缓存系统。
2025-06-16 18:57:37
278
原创 【树合集】
本文总结了四种重要树结构的特点与应用。1) 二叉搜索树:左小右大结构,中序有序,最坏O(n)复杂度;2) AVL树:严格平衡的二叉搜索树,平衡因子≤1,查询高效但维护成本高;3) 红黑树:弱平衡二叉搜索树,通过颜色规则和旋转保持平衡,增删效率优于AVL;4) B/B+树:多叉平衡树,B+树非叶节点仅存键值、叶子链表连接,特别适合数据库索引,减少IO次数并提升范围查询效率。不同树结构各具优势,需根据具体场景(查询/增删频率、是否范围查询等)选择。
2025-06-13 16:19:41
362
原创 C++11智能指针的循环引用问题
有个类A和类B,A类包含B类型的shared_ptr成员,B类包含A类型的shared_ptr成员。然后主函数各自创建A类的对象和B类的对象都被shared_ptr管理(引用计数为1)。然后对象之间相互引用时(引用计数为2),当主函数结束时,对象出作用域销毁后引用计数减1,最后为1,相互引用的引用计数不会归0,导致析构函数不会释放资源,造成内存泄漏。
2025-06-13 11:45:41
242
原创 【力扣:字符串篇】344.反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
2025-06-13 09:30:39
291
原创 【力扣:双指针法】18.四数之和(梦的延续)
给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d < na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target
2025-06-12 15:29:18
266
原创 【力扣:双指针法】15.三数之和(梦破碎的地方)
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。
2025-06-12 14:23:31
256
原创 【力扣Hash篇】454.四数相加 ||
给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:0 <= i, j, k, l < n ,nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
2025-06-12 09:43:46
484
原创 【力扣Hash篇】349.两个数组的交集
给定两个数组 nums1 和 nums2 ,返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序
2025-06-11 11:59:02
190
原创 【力扣链表篇】142.环形链表||
给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
2025-06-10 14:10:36
367
原创 概念理解篇:线程同步之【互斥】
首先我们知道线程同步分为线程互斥与线程通信。线程同步的意思就是确保多个线程按正确的顺序去获取资源并依次执行。线程互斥的意思就是同一时刻只有一个线程可以访问共享资源(临界区),防止共享资源被多个线程同时访问造成数据覆盖从而崩溃。
2025-06-06 16:47:56
342
原创 【力扣链表篇】24.两两交换链表的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
2025-06-06 14:20:50
245
原创 【力扣链表篇】203.移除链表元素
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
2025-06-04 14:59:42
321
原创 【二刷力扣】【力扣热题100】今天的题目是:283.移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。
2025-05-25 18:25:26
291
原创 【二刷力扣】【力扣热题100】今天的题目是:128.最长连续序列
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
2025-05-24 19:05:17
140
原创 【二刷力扣】【力扣热题100】今天的题目是:49.字母异位词分组
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
2025-05-23 17:59:51
212
原创 【二刷力扣】【力扣热题100】今天的题目是:1.两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。
2025-05-22 19:18:54
514
原创 海量数据Top k 与查重问题
文章讨论了处理海量数据中求前k个最大或最小元素、第k个元素以及数据查重的问题。对于求前k个元素,可以使用大根堆或小根堆(优先级队列)来实现,例如用小根堆找前k个最大元素,或用大根堆找前k个最小元素。快速分割方法也能在O(log2N)时间内找到第k个元素。对于数据查重,可以使用哈希表、布隆过滤器或字典树等方法。在处理内存受限的大文件时,可以采用分治思想,将大文件分割成小文件进行处理。综合使用哈希表统计重复次数,并结合堆或快排方法,可以有效地找到重复次数最多或最少的元素。
2025-05-14 21:12:52
537
原创 Python中的Requests库
requests模块是Python中广泛使用的库,用于简化HTTP请求的发送和响应处理。无论是调用API、下载文件、处理复杂会话管理,requests都能提供很好的解决方案。
2025-03-27 20:00:43
511
原创 Git常用的命令【提交与回退】
将远程仓库的代码拉取到本地$ git clone [github的SSH地址]git客户端进入项目中,git log可以查看提交人和提交日期git remote得到的是origin,是我们远程仓库的名称,可以在隐藏文件.git 的配置文件更改可以得到代码版本的分支,也就是你工作在哪个分支上把工作区的代码改动,提交到暂存区。$ git add main.cpp #使用 git status 去查看状态把暂存区的代码提交到本地仓库的分支上。
2024-12-06 14:43:46
1286
原创 线程间同步通信【生产者、消费者模型详解】
使用到的技术:互斥锁:先定义一个mutex mtx;然后线程间互斥使用unique_lock 锁名(互斥锁名);(为什么使用的是它而不lockguard,是因为lock_guard没有拷贝和赋值操作,被delete掉了)条件变量:condition_variable 条件变量名;
2024-11-20 14:31:59
440
原创 MySQL事务相关问题
事务隔离级别的实现原理:锁+MVCC未提交读:没有做任何的并发控制,安全性低,并发效率高已提交读和可重复读:通过MVCC多版本并发机制实现,结合了安全性和并发的效率都很好,虽然没有用到锁,但也可以手动加锁。串行化:通过共享锁和排他锁实现,对并发的所有事务排序,安全性高,并发效率低。
2024-11-17 21:29:17
773
原创 详解MySQL数据库中的锁
事务隔离级别的实现原理:锁+MVCC未提交读:没有做任何的并发控制,安全性低,并发效率高已提交读和可重复读:通过MVCC多版本并发机制实现,结合了安全性和并发的效率都很好,虽然没有用到锁,但也可以手动加锁。串行化:通过共享锁和排他锁实现,对并发的所有事务排序,安全性高,并发效率低。
2024-11-14 18:37:39
958
原创 C++11新特性
核心:智能指针是通过栈上的对象出作用域后自动析构来实现自动释放资源的。简单的智能指针简单实现代码如下:class CSmartPtr {//一个简单的智能指针public:}//返回的是引用类型为本身,才能将指针的指向修改为20private:T* mptr;public://裸指针//可能由于中间代码的逻辑提前return,导致释放指针的代码没运行到,发生内存泄漏//delete p;//需要手动释放//C++11引出智能指针,保证资源自动释放。
2024-11-13 13:46:33
1067
原创 C++中的函数模板和类模板
模板分为函数模板和类模板,函数模板是用于生成函数的,类模板是生成类的。函数模板产生了实例化就是模板函数,也就是具体的函数。类模板产生了实例化就是类模板,也就是具体的类。
2024-11-09 19:37:47
878
原创 MySQL数据库的索引
聚簇索引树:innodb存储引擎下的主键索引树(叶子节点下主键键值和所有数据记录,存储在一块)非聚簇索引树:innodb存储引擎下的二级索引树(叶子节点下存储的是普通索引键值和主键的键值)和MyISAM存储引擎下的主键索引树和二级索引树(叶子节点下索引和所有数据并没有没存在一块且MyISAM下的数据还是寻址形式)innodb为了加速查询,产生一个自适应哈希索引,不是我们创建的,是innodb给我们自动创建的。
2024-11-07 19:28:41
984
原创 C/C++常考问题整理
宏替换是简单的文本替换;typedef是给定义的类型起别名的宏替换发生在编译之前的预处理阶段;typedef发生在编译期间,属于编译的一部分宏替换不检查类型;typedef会检查类型宏替换不是语句,不需要加分号;typedef是语句,要分号结束宏定义在预处理阶段对文本进行替换,不需要函数调用;函数需要代码执行到被调用处才能调用宏定义是直接插入代码,没有返回值;函数具有返回值宏定义没有参数类型;函数参数有返回值,且检查类型声明是把变量的的位置和类型提供给编译器,但不分配内存空间。
2024-10-26 15:15:06
833
原创 到底什么是虚拟内存?
首先学过单片机的同学应该知道单片机是没有操作系统的,编写好的程序是靠工具烧录的,运行的程序是直接访问物理地址的,这时如果两个程序同时写入一块相同位置的物理地址就会造成崩溃。而在我们操作系统的多进程环境下,为了多个进程间的内存地址互不影响,相互隔离,操作系统提出了虚拟内存去解决。也就是给每一个进程都分配一套独立的虚拟地址,至于虚拟地址最终怎么落实映射到物理地址上对于我们来说是透明的,全盘交给操作系统处理。
2024-10-20 16:18:15
1168
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅