计算机理论
Ch 4 文件和目录
本文深入解析Unix/Linux系统中文件和目录的核心原理与操作。内容涵盖获取文件信息的`stat`、`fstat`、`lstat`等关键系统调用,并详细阐述七种文件类型(普通文件、目录、符号链接等)。通过剖析文件系统结构(如i节点、数据块、超级块),解释`ls`、`mv`、`unlink`、`remove`等命令的底层机制。重点区分硬链接与符号链接(软链接)的创建、限制与差异,说明硬链接需同文件系统且一般不可用于目录,而符号链接灵活性高但可能引入循环风险。核心结论包括:删除本质是`unlink`操作,需链接计数归零;`mv`在同一文件系统内仅更新目录项。
2026年1月26日
Ch 9 进程关系
本文深入解析Unix/Linux系统下的进程关系管理。核心主题涵盖终端登录机制、进程组与会话的组织结构、作业控制原理及shell的执行过程。关键技术点包括:通过getty/login实现的终端认证、伪终端驱动网络连接、进程组ID的继承与设置规则、会话中前后台进程组的划分,以及作业控制信号(SIGINT/SIGQUIT/SIGTSTP/SIGTTIN)的具体应用。文章系统阐述了shell如何通过fork及进程组管理实现管道命令执行和作业控制功能,是理解系统进程管理和交互式环境运作机制的重要参考。
2026年1月26日
Ch 13 守护进程
本文探讨了Linux系统中守护进程的核心概念与实现机制。作为长期运行的后台进程,守护进程在系统引导时启动,直到系统关闭才终止,通常以root权限运行。文章详细介绍了常见守护进程如`init`、`cron`、`syslogd`等的作用,并重点解析了守护进程的三大关键技术:**出错记录机制**(通过syslog服务实现日志管理)、**单实例控制**(使用文件锁确保唯一性),以及**守护进程的开发惯例**(如锁文件、配置文件位置和信号处理)。这些内容为系统服务开发与运维提供了核心指导。
2026年1月26日
[969. Pancake Sorting 翻转排序][1]
煎饼排序算法通过反复翻转数组前N个元素实现排序。核心思路是从后向前依次定位最大元素并将其移至正确位置。算法利用STL的max_element函数查找最大值位置,使用reverse函数执行翻转操作。时间复杂度O(n²),空间复杂度O(1),展示了迭代器和数组操作的经典应用。
2026年2月5日
1018. Binary Prefix Divisible By 5
解决二进制前缀可被5整除问题,通过位运算和模运算优化算法性能。给定0和1数组,判断每个前缀子数组组成的二进制数是否能被5整除。核心思路是利用(n<<1)|A[i]进行位移操作,同时使用n%5维护余数状态,避免大数溢出问题。时间复杂度O(n),空间复杂度O(1),适用于二进制数学计算场景。
2026年2月5日
1025. Divisor Game
解决除数游戏问题的动态规划算法实现。通过记忆化搜索优化递归过程,当玩家无法选择满足条件的数字时判定输赢。代码采用深度优先搜索策略,结合博弈论思想,实现时间复杂度优化的解决方案。
2026年2月5日
1031. Maximum Sum of Two Non-Overlapping Subarrays
解决两个不重叠定长子数组最大和问题,给定数组A和两个子数组长度l、m。通过预处理前缀和数组优化区间求和,采用暴力枚举方法固定一个区间位置寻找另一个区间最优解。考虑两种情况:长区间在前短区间在后,以及相反顺序。时间复杂度O(n²),空间复杂度O(n)。
2026年2月5日
1079. Letter Tile Possibilities
解决字母瓦片可能性问题,计算含重复字符字符串的非空子序列个数。采用回溯算法结合排列组合数学方法,通过DFS深度优先搜索遍历所有可能长度的子序列,利用阶乘计算去重后的排列数。核心思路是按长度枚举子序列,跳过重复字符避免冗余计算,时间复杂度优化至可接受范围。
2026年2月5日
1080. Insufficient Nodes in Root to Leaf Paths
二叉树路径修剪算法解决根到叶路径和不足问题。当路径累计值严格小于目标阈值时,对应叶子节点需要被删除。该算法通过递归遍历树结构,动态计算路径和并执行条件删除操作,实现树的优化剪枝。适用于数据结构优化和算法性能提升场景。
2026年2月5日
109. Convert Sorted List to Binary Search Tree
将有序链表转换为平衡二叉搜索树的核心在于递归分治策略。通过快慢指针定位链表中点作为根节点,确保树的平衡性。关键步骤包括:使用快慢指针找中点、记录前驱节点实现链表切分、递归构建左右子树。该算法时间复杂度O(nlogn),空间复杂度O(logn),适用于有序数据结构转换场景。
2026年2月5日