- 博客(59)
- 收藏
- 关注
原创 Linux之进程(四)--优先级,进程切换
摘要: 进程优先级与权限是操作系统的核心调度机制。权限(如root与普通用户)决定进程能否执行操作(如修改文件),而优先级(PRI/NI值)决定CPU资源的分配顺序,确保重要任务(如交互程序)优先响应。Linux通过Nice值(-20~19)调整优先级,普通用户仅能降低优先级(0→19),root可自由调整以防止资源独占。进程切换涉及CPU上下文保存与恢复(寄存器数据),实现多任务并发。分时系统通过时间片轮转公平调度,而实时系统则需任务完成才切换,两者适应不同场景需求。优先级机制平衡资源竞争,避免进程饥饿,
2026-06-29 19:51:22
215
原创 算法日常・每日刷题--<模拟>1
题目要求将字符串中的问号替换为小写字母,确保相邻字符不重复。解题思路是遍历字符串,遇到问号时尝试填充字母,检查是否与前后字符不同(边界情况单独处理)。通过逐个尝试字母'a'到'z',找到第一个满足条件的字母进行替换。该方法保证了合法解的存在性,时间复杂度为O(n)。
2026-06-29 16:22:07
121
原创 算法日常・每日刷题--<位运算>5
摘要: 题目要求在O(N)时间和O(1)空间内,从缺失两个数字的1~N数组中找到这两个数。解决思路基于异或运算: 异或所有元素:将数组元素与完整序列1~N异或,得到缺失两数的异或结果ret,其二进制中为1的位是两数不同的位。 分组异或:根据ret的某差异位将元素分为两组,分别异或后得到缺失的两个数。 示例:输入[1](N=3)时,异或得到ret=2^3,按最低有效位分组后异或,输出[2,3]。代码通过位运算高效实现分组与结果提取。
2026-06-28 23:49:31
175
原创 算法日常・每日刷题--<位运算>4
摘要: 题目要求在整数数组中找到唯一出现一次的数字(其余数字均出现三次)。解决方案采用位运算,按32位逐位统计1的个数。对于每个二进制位,统计所有数字在该位上1的总数,若该位总数模3余1,则结果的该位置1。该方法满足O(n)时间复杂度和O(1)空间复杂度要求。例如,输入[2,2,3,2]时,逐位计算后得出唯一数字3。代码通过双重循环实现位统计与结果构建。
2026-06-28 22:17:23
159
原创 Linux之进程(三)--进程状态
摘要 本文详细讲解了进程的各种状态及其转换机制。主要内容包括: 进程基本状态:运行(Running)、阻塞(Blocked)、挂起(Suspended) 状态转换场景:运行中进程遇到I/O操作(如scanf)会进入阻塞状态,PCB被移到等待队列;内存不足时可能被挂起到swap分区 Linux特有状态:S(可中断休眠)、D(不可中断磁盘休眠)、T(停止)、Z(僵尸)、X(终止中) 特殊进程:僵尸进程(已终止但未被回收)、孤儿进程(父进程先终止) Swap机制原理:通过磁盘交换实现"以时间换空间&qu
2026-06-28 20:35:56
316
原创 算法日常・每日刷题--<位运算>3
题目摘要:LeetCode 371.两整数之和要求在不使用+和-运算符的情况下,通过位运算实现两个整数的加法。核心思路是将加法拆分为无进位和(异或运算)与进位值(按位与后左移1位),循环直到进位为0。示例输入a=1,b=2输出3,a=2,b=3输出5。代码通过while循环迭代处理进位,最终返回异或结果。
2026-06-28 09:00:00
161
原创 算法日常・每日刷题--<位运算>2
摘要 题目要求在包含[0,n]中n个数字的数组nums中找出缺失的唯一数字。利用异或运算的性质(自消律、归零律、结合律),通过两次异或操作求解:先异或数组所有元素,再异或完整区间[0,n]的所有数字,最终结果即为缺失数字。例如,nums=[0,1,3]时,0^1^3 ^ 0^1^2^3 = 2。该方法满足O(n)时间复杂度和O(1)空间复杂度。 示例代码: int missingNumber(vector& nums) { int ret = 0; for (int num : nums) ret ^= n
2026-06-27 00:15:00
148
原创 算法日常・每日刷题--<位运算>1
本文介绍了LeetCode面试题01.01的两种解法。题目要求判断字符串中所有字符是否唯一,限定小写字母且长度≤100。基本解法使用哈希表记录字符出现情况。优化解法利用位运算,通过一个32位整数n的二进制位来标记字符存在状态(0-25位对应a-z),实现O(1)空间复杂度。关键步骤包括:字符到位序的转换(ch-'a')、按位与检测重复(n&(1<<i))和按位或标记存在(n|=(1<<i))。当字符串长度>26时可直接返回false(鸽巢原理)。该解法时间复杂度O(n)
2026-06-26 10:30:00
164
原创 Linux之进程(二)
fork创建一个新的进程是以父进程为原型,很多内容都是父进程的,当然代码,数据是从磁盘拷贝到内存,如果再拷贝一次是很消耗资源的,,一般情况是代码和数据是相同的,但是要是要对数据进行修改,两个进程就会相互影响,我们应该要保持进程的独立性,数据和代码就要单独再拷贝出来一份。给子进程返回0,主要是判断子进程是否创建成功,给父进程返回子进程的pid,是为了更好的管理子进程,比如使用wait()/waitpid()回收僵尸子进程,避免资源泄漏;操作系统中,内核如何区分、调度、管理成千上万的进程?
2026-06-26 10:00:00
767
原创 Linux之进程(一)
本文首先介绍了冯诺依曼体系计算机的基本结构,包括输入/输出设备、CPU和内存的作用,重点阐述了引入内存的原因:解决CPU与I/O设备效率不匹配问题,通过层级存储结构和局部性原理提升整体性能。其次,解释了操作系统的必要性:1)作为软硬件管理的中介,采用"先描述(数据结构)后组织(管理机制)"的方式统一管理资源;2)为用户和应用程序提供安全稳定的运行环境,通过封装底层硬件操作(类比银行系统)防止直接访问带来的安全隐患。最后总结操作系统的核心是资源管理和接口提供,实现计算机系统的高效稳定运行。
2026-06-25 19:27:41
787
原创 算法日常・每日刷题--<前缀和>7
摘要:LeetCode 1314题要求计算矩阵中每个元素周围k×k区域的和。暴力解法(O(mnk²))因效率低而超时。最优解采用二维前缀和(O(mn)):1. 预处理:构建前缀和数组dp,dp[i][j]表示从(0,0)到(i-1,j-1)的子矩阵和;2. 查询:利用dp快速计算任意子矩阵和,通过调整边界处理越界问题。最终遍历原矩阵每个位置,用前缀和公式dp[x2][y2] - dp[x1-1][y2] - dp[x2][y1-1] + dp[x1-1][y1-1]得出结果,其中x1,y1,x2,y2为有效
2026-06-25 10:30:00
177
原创 算法日常・每日刷题--<前缀和>6
题目摘要: 给定一个二进制数组 nums(仅含0和1),寻找包含相同数量0和1的最长连续子数组,返回其长度。例如: [0,1] → 2 [0,1,0] → 2 [0,1,1,1,1,0,0,0] → 6(子数组 [1,1,1,0,0,0] 含3个0和3个1)。 解法核心: 转化问题:将0替换为-1,问题转化为寻找和为0的最长子数组。 前缀和+哈希表: 计算前缀和数组,用哈希表记录首次出现某个和的位置。 若当前前缀和已在哈希表中,则 当前下标 - 首次出现下标 即为合法子数组长度。 初始化哈希表为 {0: -
2026-06-24 14:00:00
213
原创 算法日常・每日刷题--<前缀和>5
题目摘要: 给定整数数组 nums 和整数 k,统计所有元素和能被 k 整除的连续子数组数量。例如,nums = [4,5,0,-2,-3,1],k = 5 时,有7个符合条件的子数组。 关键解法: 利用前缀和与哈希表优化。计算前缀和数组 dp,并通过模运算 (dp[i] % k + k) % k 处理负数情况。哈希表记录相同余数的出现次数,累加计数。
2026-06-23 11:00:00
303
原创 算法日常・每日刷题--<前缀和>4
摘要: 题目要求统计整数数组中连续子数组和为k的个数。由于数组可能含负数和零,滑动窗口法不适用。采用前缀和结合哈希表优化:1) 计算前缀和数组dp;2) 用哈希表记录前缀和出现次数;3) 遍历时检查dp[i]-k是否存在表中,累加对应次数。注意处理dp[i]=k的情况(初始存入hash[0]=1)。算法时间复杂度O(n),空间复杂度O(n)。示例代码使用C++实现,通过哈希表避免暴力枚举,高效解决问题。
2026-06-22 10:00:00
220
原创 算法日常・每日刷题--<前缀和>3
题目摘要: LeetCode 238题要求计算一个整数数组 nums 的乘积数组 answer,其中 answer[i] 是 nums 中除 nums[i] 外所有元素的乘积。要求时间复杂度为 O(n),且不使用除法。 示例: 输入 [1,2,3,4] 输出 [24,12,8,6];输入 [-1,1,0,-3,3] 输出 [0,0,9,0,0]。 解法思路: 使用两个辅助数组: f[i] 记录 nums[i] 左侧所有元素的乘积(f[0]=1,递推计算)。 g[i] 记录 nums[i] 右侧所有元素的乘积
2026-06-21 12:00:00
228
原创 算法日常・每日刷题--<前缀和>1
该题目要求高效计算数组区间和。通过构建前缀和数组dp(其中dp[i]存储原数组前i项的和),可将区间查询的时间复杂度从O(n)降至O(1)。具体实现时:1. 初始化dp[0]=0;2. 递推公式dp[i]=dp[i-1]+arr[i];3. 查询区间[l,r]的和时,直接计算dp[r]-dp[l-1]。示例代码展示了输入处理、前缀和数组构建及查询操作,适用于多次区间求和场景,有效避免了重复遍历数组的开销。 (注:摘要严格控制在150字内,提炼了前缀和核心思想、实现步骤和代码要点,同时保留了原题的关键技术细节
2026-06-20 12:00:00
234
原创 MySQL之sql编程(上)
SQL编程是使用结构化查询语言操作关系型数据库的技术,主要包括数据查询(SELECT)、操作(INSERT/UPDATE/DELETE)、结构定义(CREATE/ALTER)和权限控制(GRANT/REVOKE)。存储过程支持条件判断(IF-ELSE)、CASE分支和三种循环结构(WHILE/REPEAT/LOOP),通过IN/OUT/INOUT参数实现数据交互。典型应用包括:分数等级判定(使用IF嵌套)、状态码解析(CASE语句)、季度判断(CASE-WHEN)以及数值累加计算(循环结构)。其中输出参数必
2026-06-20 10:00:00
454
原创 算法日常・每日刷题--<前缀和>2
摘要: 题目要求寻找数组的中心下标,即左侧元素和等于右侧元素和的索引。解法使用前缀和思想,分别计算每个位置的左侧和f(i)与右侧和g(i)。初始化边界条件(如首尾侧和为0),通过遍历数组填充f和g数组。最后检查是否存在f(i) == g(i)的索引,返回最左符合条件的下标,否则返回-1。示例代码展示如何通过两次遍历和一次比较高效解决问题,时间复杂度为O(n),空间复杂度O(n)。
2026-06-19 20:28:20
197
原创 MySQL之变量
MySQL中的变量分为三种类型:系统变量、用户自定义变量和局部变量。系统变量可通过SHOW VARIABLES查看,使用SET GLOBAL临时修改。用户自定义变量以@开头,通过SET或SELECT赋值,会话结束时失效。局部变量在存储过程或函数中使用DECLARE声明,作用域限于BEGIN...END块内,赋值方式与自定义变量类似,但作用域结束后失效。三种变量在使用时需注意作用域和赋值语法(推荐使用:=)的区别。
2026-06-19 05:30:00
196
原创 MySQL之procedure
摘要:存储过程(Procedure)是将多条SQL语句集合起来并实现分支、循环等逻辑功能的数据库对象。创建前需使用DELIMITER重定义结束符,语法为CREATE PROCEDURE 名称 BEGIN...END。调用用CALL命令,查看用SHOW PROCEDURE STATUS,删除用DROP PROCEDURE。存储过程能简化复杂SQL操作,如计算学生总分等任务。创建时需注意在BEGIN和END间编写SQL语句,并用DELIMITER避免分号冲突。
2026-06-18 16:00:00
377
原创 算法日常・每日刷题--<二分查找>6
该问题要求在升序数组中找到缺失的学号。摘要:给定一个包含0到n-1学号的升序数组,其中恰好缺失一个数字,要求找出缺失的学号。通过二分查找算法,比较中间元素的值与其下标:若相等则缺失值在右侧,否则在左侧。最终返回左指针指向的位置即为缺失的学号。该方法时间复杂度为O(log n)。示例:输入[0,1,2,3,5]输出4,输入[0,1,2,3,4,5,6,8]输出7。
2026-06-18 14:00:00
196
原创 算法日常・每日刷题--<二分查找>5
摘要 题目要求在旋转过的升序数组中寻找最小值,需设计O(logn)算法。关键思路是利用二分查找,通过比较中间元素与右端点(或左端点)来确定最小值所在的区间。两种解法分别以右端点和左端点为基准:1)当中间值大于右端点时,最小值在右侧,否则在左侧;2)先检查是否完全升序,再以左端点为基准进行二分。两种方法均能高效定位最小值。 关键点 旋转数组特性:可能保持原序或分为两个升序部分 二分查找策略:比较中间值与端点来缩小搜索范围 时间复杂度:O(logn),空间复杂度O(1) 两种基准选择:右端点(无需预处理)或左端
2026-06-17 15:28:06
311
原创 Linux之,环境变量
环境变量是操作系统中存储配置信息的全局变量,用于指引系统查找可执行文件路径等。例如PATH变量记录了系统搜索命令的目录,当输入命令时系统会按PATH中的路径顺序查找可执行文件。若找不到则报错"command not found"。可通过export临时修改PATH,或写入.bashrc永久生效。env命令可查看所有环境变量,getenv()函数可获取特定变量值。环境变量还包括USER(当前用户)、PWD(当前路径)等。程序可通过main函数的第三个参数访问环境变量数组。
2026-06-17 08:00:00
514
原创 算法日常・每日刷题--<二分查找>4
【摘要】该题要求在一个先增后减的山脉数组中找到峰值元素的下标。关键点在于利用二分查找实现O(log n)时间复杂度。当中间元素小于右侧元素时,峰值在右半部分(left=mid+1);否则峰值在左半部分(right=mid)。最终返回left即为峰值下标。例如,数组[0,2,1,0]的峰值下标为1。解法通过不断缩小搜索范围高效定位峰值。
2026-06-16 12:54:09
212
原创 算法日常・每日刷题--<二分查找>3
这篇文章总结了使用二分查找算法求解非负整数平方根的模板方法。关键点包括:1) 初始化左右边界(left=0, right=46340);2) 循环条件为left<right;3) 取中点mid时采用left+(right-left+1)/2避免死循环;4) 根据mid²与x的比较结果调整边界:当mid²≤x时left=mid,否则right=mid-1;5) 最终返回left作为结果。该方法通过二分查找高效地找到平方根的整数部分,时间复杂度为O(log n),适合处理大数情况。文章以LeetCode
2026-06-16 12:31:47
554
原创 算法日常・每日刷题--<二分查找>2
这篇文章讨论了在排序数组中查找元素第一个和最后一个位置的问题(力扣34题)。关键点在于使用两次二分查找分别确定左右边界: 左端点查找: 将数组分为 <target 和 >=target 两部分 当nums[mid]<target时,left=mid+1 当nums[mid]>=target时,right=mid 循环条件应为left<right mid计算取靠前位置:left+(right-left)/2 右端点查找: 类似左端点但细节不同 将数组分为 <=target
2026-06-15 23:40:26
254
原创 算法日常・每日刷题--<二分查找>1
【摘要】二分查找是一种在有序数组中高效查找目标值的算法,通过不断将搜索范围对半缩小来实现。其核心逻辑是:比较中间元素与目标值,若中间值大则搜索左半区,小则搜索右半区,相等则返回索引。当搜索范围无效(left>right)时返回-1。力扣704题给出了典型实现:初始化左右指针,循环比较中间值,调整指针范围,直到找到目标或区间无效。该算法时间复杂度为O(log n)。
2026-06-13 17:29:18
216
原创 算法日常・每日刷题--<双指针>1
【摘要】《移动零》问题要求将数组中的零元素移至末尾,同时保持非零元素的相对顺序。该解决方案使用双指针法:right指针遍历数组,遇到非零元素时将其移至left指针位置,然后双指针同步前进;遇到零则仅移动right指针。遍历完成后,left指针之后的位置全部填充零。时间复杂度O(n),空间复杂度O(1),高效地实现了原地操作。代码示例展示了具体实现过程,通过两次遍历完成零元素的后移。
2026-06-13 12:15:50
196
原创 数据结构之链表OJ题(下)
本文介绍了三个链表相关算法题解:1) 141题使用快慢指针判断链表是否有环;2) 142题在判断有环基础上找到环入口,通过计算两段链表长度差定位交点;3) LCR026题重排链表,先找到中点,逆置后半段,再交替插入前半段。三题均涉及快慢指针技巧,并综合运用了链表基本操作,展现了处理链表问题的典型思路。
2026-06-12 22:06:12
698
原创 Linux之make,makefile
本文介绍了Linux下make工具和Makefile的基本使用。Makefile是包含编译规则的文本文件,通过make命令执行。主要内容包括:1) 基本Makefile结构,以test.c编译为例;2) .PHONY伪目标的作用,解释为何clean目标可重复执行而编译目标不能;3) make通过文件时间戳判断是否需要重新编译;4) 多文件编译的自动化处理方法。文章通过实例演示了Makefile的编写和执行过程,并解释了关键概念如文件时间戳比较、伪目标声明等,为初学者提供了实用的Makefile入门指南。
2026-06-12 19:55:20
351
原创 数据结构之链表OJ题(中)
本文总结了LeetCode链表相关的四道经典题目解法:1. 移除链表元素:通过先处理头节点再遍历剩余节点的方式删除指定值节点,注意内存释放。2. 反转链表:使用头插法,通过三个指针(cur/newhead/next)逐步反转链表方向。3. 合并有序链表:比较两链表节点值,将较小值节点依次尾插,处理剩余节点后返回新链表。4. 相交链表:计算链表长度差,长链表指针先移动差值步,然后同步遍历直至找到相同节点或到达末尾。所有解法均采用C语言实现,时间复杂度为O(n),空间复杂度O(1)。
2026-06-10 21:06:24
274
原创 MySQL之视图
【摘要】视图是存储在数据库中的SELECT查询语句,不实际存储数据,其查询结果会随基表数据变化而动态更新。视图可简化复杂查询,使用方式与普通表相同。创建视图时需遵循特定规则,如避免使用临时表、确保列名唯一等。视图的DML操作受限于其定义方式:单表源且不含聚合等操作的视图可修改,而多表联查或含聚合的视图则不可。CHECK OPTION选项可控制数据修改时的条件验证范围。视图作为查询优化工具,能有效提升数据库操作效率。
2026-06-04 20:24:45
174
原创 数据结构之双向循环链表
单链表的结点中保存了指向后继结点的地址,所以单链表中找当前结点的后继结点很容易,但要获取当前结点的前驱结点就很麻烦,就只能从头开始往后遍历获取,时间复杂度为 O(n);双向链表相比单链表最大的特征是每个结点中多了一个前驱指针,一些场景需要获取当前结点前驱结点的场景中就需要用双链表实现,如:倒着遍历、删除当前结点、在当前结点前插入结点等。直接告诉你pos的指针,直接修改指针走向即可,和单链表那里类似,如果不引入新节点一定要注意修改的顺序,避免断链。和之前的单链表相似,多了prev指针的指向问题。
2026-06-03 22:32:51
315
原创 Linux之基本操作(上)
注意:在linux里面是没有回收站的,删除了就没有办法,切忌谨慎使用。mv操作就像是我们平时在windows里面剪切粘贴操作。cp A文件名 B文件名 将A的内容考到B。基本的系统命令是很多的,下面的截图还远远不止。如果不想让他弹出是否确认 -f就是强制。接下来我们介绍一些常用的基本指令操作。当文件夹嵌套时 -r递归 -f强制。将a的文件拷贝到目录下,文件名不变。我在刚刚文件中写入200多行代码。蓝色文字的是目录可以进去。展示当前文件夹下的文件。当拷贝的文件夹不存在时。当拷贝的文件夹存在时。
2026-06-03 19:24:18
448
原创 数据结构之如何让opencode帮我们完成单元测试
本文介绍了如何在VS2022中使用GoogleTest框架为C/C++项目编写单元测试。首先创建一个新项目到现有解决方案中,用gtest为单链表接口编写带注释的测试代码。测试方案形成后,在build模式下执行分析,可以查看分支覆盖率等测试结果。测试完成后,开发人员还能根据需求继续扩展测试用例。整个过程演示了从创建测试项目到分析测试结果的完整工作流程。
2026-06-02 19:29:34
109
原创 数据结构之顺序表
地址连续:所有元素挨在一起存放,中间不留空位置逻辑顺序 = 物理顺序:数据前后顺序,和内存里摆放顺序完全一致随机访问快:通过下标能立刻找到任意元素(查询效率高)
2026-05-30 12:55:03
328
原创 MySQL之表的内连接和外连接
本文介绍了SQL中的两种主要连接方式:内连接和外连接。内连接通过WHERE子句筛选两张表的笛卡尔积,只返回满足条件的交集数据(如显示SMITH的名字和部门名称)。外连接分为左外连接(保留左表所有记录,右表不匹配用NULL填充)和右外连接(保留右表所有记录),并可通过示例(学生成绩查询、部门员工信息查询)说明其应用场景及写法转换。文章还通过创建学生表和成绩表的实例,演示了左外连接和右外连接的具体使用方法。
2026-05-29 15:30:30
158
原创 MySQL之复合查询
本文摘要:文章主要介绍了SQL多表查询与子查询的综合应用。首先回顾了单表条件查询,包括工资筛选、部门排序、年薪排序等基本操作。重点讲解了多表查询的核心思想:通过共同字段将多个表转化为单表查询,注意处理同名列名问题。详细解析了自连接(同一表做JOIN)、子查询(单行/多行/多列)的使用场景和方法,并通过实例演示了IN/ALL/ANY关键字、FROM子句嵌套、部门统计等复杂查询。最后介绍了合并查询(UNION/UNION ALL)的用法及注意事项。全文通过大量实例展示如何高效组合各类查询技巧解决实际问题。(14
2026-05-29 14:03:44
288
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅