- 博客(74)
- 收藏
- 关注
原创 深入理解进程切换:操作系统多任务的核心引擎
进程切换是操作系统实现多任务并发的核心技术,通过在不同进程间快速切换CPU执行权,使单核处理器能"同时"运行多个程序。关键点包括:1) 进程切换触发时机(主动放弃或被动剥夺);2) 核心数据结构(PCB保存进程状态);3) 完整切换步骤(保存/恢复上下文、切换页表等)。Linux采用统一任务模型和CFS调度器优化进程切换性能。虽然切换过程带来直接开销(寄存器保存、页表切换等)和间接开销(缓存失效),但现代操作系统通过多种技术(如惰性保存、TLB优化)显著降低了这些开销。系统监控工具(vm
2025-11-20 21:14:41
693
原创 深入理解 Linux 进程状态与优先级:从内核源码到实践
本文深入解析Linux系统中的进程状态及其转换机制。从内核源码出发,详细介绍了R运行态、S睡眠态、D磁盘休眠态、T停止态等主要进程状态的特点和应用场景。通过代码示例演示了不同状态转换的过程,重点分析了僵尸进程的产生机制和危害,并提供了解决方案。文章揭示了Linux进程状态设计的精妙之处,特别是D状态如何通过不可中断特性保证数据一致性,以及运行队列调度机制如何实现多任务并发。
2025-11-18 22:00:00
1171
原创 MySQL表约束完全实战指南:从入门到精通,让你的数据库坚如磐石!
MySQL表约束机制包括空值约束(null/not null)、默认值约束(default)、列描述(comment)、零填充(zerofill)、主键(primary key)、自增长(auto_increment)、唯一键(unique key)和外键(foreign key)。其中,not null约束确保字段不为空;default提供字段默认值;comment增加可读性;zerofill用于数字显示格式化;primary key保证记录唯一性;auto_increment实现自动递增;unique
2025-11-18 21:18:48
913
原创 MySQL表操作完全指南:从创建到管理的实用技巧
本文介绍了MySQL表操作的基础概念和核心操作。主要内容包括: 表的基础概念:字段、数据类型、字符集和存储引擎 创建表的语法详解,包括用户表、文章表等实例演示 查看表结构的常用命令和结果解读方法 修改表的操作:添加、修改、删除字段以及表重命名 删除表的语法和安全检查流程 文章通过具体SQL示例展示了表结构的设计与变更操作,强调了对表结构修改时的注意事项,为数据库表的创建和管理提供了实用指导。
2025-11-17 23:01:16
273
原创 解密进程创建:fork函数与写时拷贝机制详解
本文深入讲解了进程的概念及其在Linux系统中的实现。进程是程序的执行实例,由内核PCB数据结构对象和代码数据组成。Linux通过task_struct结构体管理进程,包含标识符、状态、优先级等关键信息。文章详细介绍了父子进程关系,Bash作为进程创建者的角色,以及如何通过系统调用操作进程。还提供了查看进程信息的多种方法,包括/proc文件系统和命令行工具。通过实际代码示例,展示了获取进程标识符和创建子进程的实践操作,帮助读者从理论到实践全面理解进程管理机制。
2025-11-17 19:13:20
1021
原创 MySQL数据类型全面解析:从数值精度到字符串优化的最佳实践
本文介绍了MySQL中常见的数据类型及其使用。主要内容包括:1)数值类型(tinyint、bit、float、decimal等)的语法和使用示例,说明数值越界处理和精度差异;2)字符串类型(char、varchar)的特点和选择建议,比较固定长度和可变长度的适用场景;3)重点强调了数据类型选择对存储空间和查询效率的影响,建议根据实际数据特性合理选择类型。文章通过具体SQL示例演示了各种数据类型的边界情况和最佳实践。
2025-11-16 08:55:45
564
原创 MySQL数据库入门指南
本文介绍了数据库的核心概念、主流数据库系统及MySQL的使用方法。主要内容包括:1. 数据库定义及其优势,如结构化存储、数据共享等;2. 主流数据库系统如MySQL、Oracle的特点;3. MySQL安装配置及基本操作(创建数据库、表、插入和查询数据);4. MySQL架构概述;5. 存储引擎类型及对比分析。文章还简要介绍了SQL语言分类(DDL、DML、DQL、DCL),为数据库初学者提供了全面基础指南。
2025-11-15 10:14:48
2096
1
原创 MySQL数据库操作完全指南:从创建到管理的完整教程
本文详细介绍了MySQL数据库的基本操作与管理技巧,包括数据库创建、字符集设置、日常管理、备份恢复等核心内容。关键点包括:1)创建数据库时指定字符集和校验规则的最佳实践;2)数据库修改和删除操作的安全注意事项;3)多种备份策略与恢复方法;4)连接监控和性能管理。文章还提供了实战案例,如自动化备份脚本和数据库维护检查清单,帮助开发者全面掌握MySQL数据库管理。适合作为MySQL数据库管理的实用参考指南。
2025-11-15 10:14:38
1251
原创 操作系统:从冯诺依曼到进程管理的前夜
摘要 冯诺依曼计算机体系结构由运算器、控制器、存储器、输入和输出设备五大部件组成,通过总线连接。其核心特点是所有设备只能与内存(主存储器)直接交互,解决CPU与I/O设备的速度矛盾,并为程序执行提供工作空间。操作系统作为计算机系统的管理者,通过"先描述再组织"的方式管理软硬件资源,为用户提供稳定高效的运行环境。操作系统采用分层结构,通过系统调用向应用程序提供接口,而库函数则对系统调用进行封装,简化开发。这种架构实现了硬件资源的高效利用和安全隔离,使计算机能够执行复杂任务。
2025-11-14 17:04:17
987
原创 云服务器-- centos -- MySQL安装
MySQL是一个流行的开源关系型数据库管理系统,广泛应用于网站和App后台。安装方式多样:本地原生安装提供完全控制;容器化安装(推荐)便于快速部署;集成化安装适合初学者。在云服务器安装MySQL可实现高度自定义配置和成本优化。CentOS/RHEL系统下通过包管理器安装步骤包括:添加官方仓库、安装服务、安全配置(设置强密码、移除匿名用户等)和基础性能调整。安装完成后可通过命令行验证并优化配置,如调整字符集和连接数等参数。
2025-11-04 21:30:17
674
原创 大话数据结构之 <堆> (C语言)
本文系统介绍了堆数据结构及其实现。堆是一种特殊的完全二叉树,分为大堆(父节点值≥子节点)和小堆(父节点值≤子节点)。关键特性包括:1. 完全二叉树结构保证高效操作(O(logn));2. 数组存储实现空间高效;3. 通过上浮/下沉调整维持堆序性。重点阐述了堆的核心操作(插入、删除、建堆)和两种建堆方法(逐个插入O(nlogn)和Floyd法O(n)),并提供了完整的C语言实现。文章还分析了堆在优先队列、堆排序和TopK问题中的应用场景,总结了各类操作的时间复杂度。堆凭借其高效的极值访问和动态维护能力,成为优
2025-10-19 09:10:50
684
1
原创 大话数据结构之 <栈> 和<队列>(C语言)
摘要:本文介绍了队列的基本概念和链表实现方法。队列是一种遵循先进先出(FIFO)原则的线性数据结构,支持在队尾插入、队头删除操作。相比数组,链表实现队列更具优势,可避免数组头部删除时的低效问题。文中给出了完整的C语言实现代码,包括初始化、销毁、入队、出队、判空、获取长度/队头/队尾数据等核心功能,并通过示例演示了队列的基本操作过程。实现采用两个结构体分别表示队列节点和队列整体,确保操作效率。
2025-10-18 14:16:31
541
原创 详细分析平衡树--红黑树(万字长文/图文详解)
本文介绍了红黑树的基本概念、插入操作的迭代实现,以及与AVL树的对比分析。主要内容包括:1. 红黑树五大性质:自平衡二叉查找树,通过颜色约束保证近似平衡;2. 插入操作详解:标准BST插入后,通过变色和旋转(分3种情况)修复平衡;3. 迭代实现要点:包含节点定义、旋转操作和修复逻辑;4. 与AVL树对比:红黑树更适合频繁插入删除场景,AVL树查询效率更高;5. 补充完整递归实现代码。文章通过示意图和代码示例,帮助理解红黑树的核心算法和实现细节。
2025-10-17 21:09:16
1545
1
原创 数据结构与算法(递归)
递归是一种通过调用自身来解决问题的算法思想,其核心包括递归出口(终止条件)和递归体(递推关系)。典型例子如阶乘函数和汉诺塔问题,前者通过不断调用自身缩小问题规模,后者通过递归分解移动步骤。递归适用于定义、数据结构或解法本身具有递归性质的问题,如链表、斐波那契数列等。递归与数学归纳法密切相关,后者为其提供了理论基础。递归算法可通过尾递归优化转化为非递归形式,提升效率。
2025-10-15 23:19:33
817
2
原创 数据结构与算法(串)
本文介绍了字符串的基本概念、运算、存储结构和模式匹配算法。主要内容包括:1. 字符串的定义及相关术语(串长、空串、子串等);2. 字符串的基本运算(赋值、比较、连接、求子串等);3. 两种存储结构:顺序存储(含紧缩和非紧缩格式)和链式存储;4. 模式匹配算法,重点介绍了朴素匹配算法(BF算法)及其实现;5. 简要提及KMP算法作为改进的字符串匹配算法。文章通过具体示例和算法实现,系统阐述了字符串处理的基本原理和方法,为文本处理提供了理论基础。
2025-10-15 23:07:07
796
1
原创 手搓二叉平衡搜索树--AVL树(万字长文/图文详解)
AVL树是一种高度平衡的二叉搜索树,由Adelson-Velskii和Landis提出。它通过平衡因子(右子树高度-左子树高度)维护树结构,确保绝对差值不超过1。文章详细讲解了AVL树的节点定义、插入操作和四种旋转情况(左旋、右旋、左右双旋、右左双旋),并提供了C++实现代码。AVL树保证了O(log n)的搜索效率,适合需要频繁查找的场景。实现时需注意三叉链结构和平衡因子的更新规则。
2025-10-14 22:44:40
1067
1
原创 C++ 异常 初解
本文介绍了C++异常处理机制的基本概念和使用方法。主要内容包括:异常的定义(throw/try/catch机制)、异常处理的优势(错误分离、资源释放等)、基本语法和匹配原则、自定义异常体系设计、标准库异常类继承结构,以及异常的优缺点分析。文章通过代码示例展示了异常的实际应用场景,并强调在实际开发中应建立规范的异常继承体系。最后指出异常虽能提高错误处理效率,但也存在执行流混乱、资源管理困难等问题,建议合理使用RAII等技术来确保异常安全。
2025-10-10 17:27:32
828
原创 快速排序的深入优化探讨
快速排序是一种高效的分治排序算法,通过"哨兵划分"将数组分为三部分:小于基准数 VS 基准数 VS 大于基准数。文章详细介绍了标准快速排序的实现方法(包括hoare和lomuto两种划分方式),并重点分析了当数组中存在大量重复数据时的性能问题。针对这一问题,提出了三路划分算法,将数组分为小于、等于和大于基准数三个区间,有效优化了重复数据场景下的排序效率。通过代码示例展示了不同划分方法在处理重复数据时的实际表现。
2025-10-04 21:32:32
1359
原创 STL map、set、multi_map、multi_set 基本概念与用法
本文介绍了C++ STL中的关联式容器,主要包括map、set、multimap和multiset。这些容器基于红黑树实现,通过键值对存储数据,具有高效的查找性能(O(logN))。文章详细说明了各容器的特性:set/multiset存储单一值,map/multimap存储键值对;set/map键值唯一,multiset/multimap允许重复。重点分析了容器的构造、迭代器、容量查询等操作,特别强调了map的下标访问特性。此外,还比较了这些容器与序列式容器的区别,阐述了它们的有序存储特点。文章最后指出关联
2025-10-03 20:32:16
1213
原创 二叉搜索树:从根到叶的完全指南
本文介绍了二叉搜索树(BST)的基本概念、应用场景和实现方法。主要内容包括:二叉搜索树的性质(左子树小于根,右子树大于根)、常用结论(最大最小节点位置)、K模型和KV模型两种应用方式。重点分析了二叉搜索树的查找、插入和删除操作,特别是删除节点时的三种情况处理。文章提供了C++实现代码,包含递归和非递归版本的核心操作,并通过测试用例验证了各种删除场景。最后指出二叉搜索树在实际中多作为高阶数据结构(如AVL树、红黑树)的基础。
2025-10-02 22:02:47
1338
原创 大话数据结构之<二叉树>(C语言)
本文介绍了树和二叉树的基本概念、结构特征及实现方式。主要内容包括:1)树结构的定义、相关术语(节点度、叶节点、父子节点等)及表示方法;2)二叉树的特殊性质、满/完全二叉树的概念及相关数学特性;3)二叉树的顺序存储和链式存储结构;4)堆的概念及其在完全二叉树中的应用;5)二叉树遍历等基本操作。文章通过图示和代码示例,系统阐述了非线性数据结构中树与二叉树的核心知识点。
2025-10-01 20:54:25
1227
原创 链表理论基础
链表是一种通过指针连接的线性数据结构,每个节点包含数据域和指针域。主要类型包括单链表、双链表(可双向查询)和循环链表(首尾相连)。与数组不同,链表在内存中是非连续存储的。基本操作包括添加节点(O(1)复杂度)和删除节点(查找需O(n)),性能上链表适合频繁增删但不擅长随机访问。文中还给出了单链表的Java实现代码,包含获取、头插、尾插、指定位置插入和删除等功能,展示了链表的核心操作方法。
2025-09-30 22:09:40
881
原创 辗转相除法(欧几里得算法)探微
这篇文章深入探讨了辗转相除法求最大公约数(GCD)的原理。首先明确了GCD的定义,然后通过核心定理gcd(a,b)=gcd(b,a mod b)揭示了算法的数学本质,并给出了详细的证明过程。文章还通过实例演示了算法的执行步骤,展示了循环和递归两种实现方式。最后指出算法的关键在于"公共约数的传递性"和"余数的有界性",这使得算法具有O(log min(a,b))的高效时间复杂度。全文既有理论深度,又包含代码实现,帮助读者从原理层面理解这个经典算法。
2025-09-28 21:08:53
1161
原创 双指针技巧秒杀七道数组题目
本文介绍了数组操作中常用的双指针技巧,包括快慢指针和左右指针。重点讲解了三种典型应用场景:有序数组去重(26题)、移除指定元素(27题)和移动零元素(283题)。这些题目都要求原地修改数组,通过快慢指针可以在O(n)时间复杂度内高效解决问题。快指针用于遍历数组,慢指针指向有效元素位置,根据条件决定是否更新慢指针位置。这种技巧不仅适用于数组,也可用于链表操作(如83题)。关键思路是保持nums[0..slow]为有效区域,fast指针扫描整个数组进行筛选。
2025-09-27 13:51:09
1069
原创 Linux开发工具入门:零基础到熟练使用(二)
本文介绍了Linux下gcc/g++编译器的使用流程和调试工具gdb的基本操作,以及Makefile自动化构建工具的应用。主要内容包括: gcc编译流程分为预处理、编译、汇编和链接四个阶段,各阶段通过不同选项控制生成相应文件类型,并介绍了静态库与动态库的区别。 gdb调试器使用需在编译时加-g选项生成调试信息,详细列出了常用调试命令如断点管理、单步执行、变量查看等。 Makefile通过定义依赖关系和依赖方法实现自动化构建,解释了make工作原理和伪目标.PHONY的作用。 通过进度条小程序示例演示了行缓冲
2025-09-26 19:39:33
1039
原创 “永不回退”的智慧:KMP算法详解
本文介绍了字符串匹配的两种算法:暴力匹配和KMP算法。暴力匹配虽然简单,但时间复杂度高达O(n·m),效率较低。KMP算法通过利用前缀表(next数组)避免不必要的回溯,将时间复杂度优化为O(n+m)。文章详细解释了前缀、后缀、最长相等前后缀等概念,并阐述了前缀表的作用——在匹配失败时指示模式串回退的位置。通过图示和示例,展示了KMP算法如何利用前缀表实现高效匹配,以及如何构造前缀表。KMP算法的关键在于理解前缀表的原理及其在匹配过程中的应用,从而避免暴力匹配的低效问题。
2025-09-26 17:22:45
1125
原创 Linux开发工具入门:零基础到熟练使用(一)
Linux 软件包管理及vim编辑器使用指南 软件包管理 Linux下使用yum作为软件包管理器,类似Windows的应用商店。通过yum可以方便地安装、卸载软件: yum list 查看可用软件包 sudo yum install 安装软件 sudo yum remove 卸载软件 常用工具如lrzsz实现Windows与Linux文件传输 vim编辑器 vim是功能强大的多模式文本编辑器,具有三种主要模式: 命令模式:移动光标、删除/复制文本 插入模式:输入编辑文本 底行模式:保存文件、退出等操作 常用
2025-09-25 22:05:00
1109
原创 数据结构与算法(队列)
队列是一种先进先出(FIFO)的线性表,操作限定在表的两端进行:队头删除,队尾插入。可用数组实现顺序队列或循环队列(解决假溢出问题),也可用链表实现链队列。关键操作包括初始化、判空、入队、出队和销毁。循环队列通过取模运算实现指针循环移动,需牺牲一个存储单元来区分队空和队满状态。链队列则需维护头尾指针,操作时需注意指针的更新。队列与栈(后进先出)形成对比,在程序设计中具有广泛应用。
2025-09-24 15:53:01
1237
2
原创 数据结构与算法(栈)
本文介绍了栈的基本概念、抽象数据类型定义及两种实现方式。栈是一种操作限定在表的一端进行的线性表,遵循后进先出(LIFO)原则。顺序栈使用数组存储,通过栈顶指针top管理入栈和出栈操作,需注意上溢和下溢问题。链栈采用单链表实现,栈顶设在链表头部,无需判断栈满。文章详细阐述了两种栈的6种基本操作算法(初始化、判空、入栈、出栈、取栈顶、销毁栈),并分析其时间复杂度均为O(1)。顺序栈和链栈各有特点,顺序栈实现简单但容量固定,链栈动态扩容但操作略复杂。
2025-09-24 14:56:53
750
2
原创 Leet code 每日一题
本文介绍了如何生成一个n×n的螺旋矩阵。通过模拟顺时针填充过程,按照"上行→右列→下行→左列"的顺序由外向内逐层填充数字。关键点在于: 使用循环不变量原则,保持左闭右开区间 处理完每层后更新起始点和偏移量 单独处理奇数n时的中心点 时间复杂度O(n^2),空间复杂度O(n^2) 代码实现采用四步循环法,通过控制偏移量offset和起始点(startx,starty)来逐层填充矩阵,最后处理可能的中心点。
2025-09-24 11:15:21
146
原创 Linux权限完全指南:从基础到高级实战
Linux权限管理摘要 Linux系统通过用户分类(root/普通用户)和文件权限机制实现安全管理。文件权限分为读(r)、写(w)、执行(x)三种,对应不同用户组(所有者u/同组g/其他o)。权限可用字符(rwx)或八进制数字表示,通过chmod/chown/chgrp命令修改。目录权限中,写权限允许增删文件,可能导致安全问题,为此引入粘滞位(+t)限制非所有者删除文件。umask值影响新建文件默认权限。特殊权限如su/sudo实现权限分配,file命令可识别文件类型。理解这些机制对Linux系统管理至关重
2025-09-23 23:00:20
931
原创 数据结构与算法(线性表)
本文介绍了线性表的两种基本存储结构:顺序存储和链式存储。顺序表通过连续的存储单元实现线性关系,支持随机存取但插入删除效率低;链表通过指针链接实现动态存储,插入删除高效但不支持随机访问。文章详细阐述了两种结构的定义、基本操作实现及优缺点比较,并延伸介绍了循环链表和双向链表等特殊形式。最后指出应根据实际需求(如操作频率、数据规模等)选择合适的存储结构,顺序表适合稳定查询操作,链表适合频繁插入删除场景。
2025-09-22 16:09:51
720
1
原创 C++多态入门:轻松理解虚函数与多态编程
C++多态机制详解:从虚函数到动态绑定的全面解析 摘要:本文系统讲解了C++多态机制的核心概念与实现原理。主要内容包括: 多态基础:虚函数、虚函数继承与重写规则 多态实现条件:通过基类指针/引用调用虚函数 特殊特性:协变返回值、析构函数多态化处理 虚函数表机制:对象内存布局、虚表指针初始化过程 多继承下的虚表管理及this指针修正问题 动态绑定与静态绑定的本质区别 纯虚函数与抽象类的接口继承特性 现代C++特性:override和final关键字的使用场景 通过深入分析虚函数表的内存布局和函数调用机制,揭示
2025-09-22 16:07:10
1192
11
原创 数据结构与算法(绪论)
《数据结构与算法基础》摘要:作为计算机核心课程,数据结构与算法是编程基础、竞赛重点和企业考核内容。文章介绍了数据(元素、项、对象)的基本概念,阐述了逻辑结构(线性、树形、图形)与存储结构(顺序、链式、索引、散列)的区别。重点讲解了算法特性(正确性、可读性、健壮性等)和复杂度分析方法,包括时间复杂度O(f(n))和空间复杂度S(n)=O(f(n))的度量标准,强调问题规模n对算法效率的影响。通过沃斯"算法+数据结构=程序"的经典公式,说明了数据结构与算法在程序设计中的核心地位。
2025-09-21 16:05:26
1038
2
原创 Leet Code每日一题
这篇文章介绍了一个使用滑动窗口算法解决"最大连续1的个数III"问题的方法。给定一个二进制数组和整数k,问题要求在最多翻转k个0的情况下,找到数组中连续1的最大长度。文章通过具体示例分析,阐述了滑动窗口的工作机制:窗口不断扩展,记录0的个数,当0超过k时窗口左边界右移,始终保持窗口内0的个数不超过k。关键点在于维护一个计数器n记录已翻转0的数量,并在窗口移动时动态调整。这种解法的时间复杂度为O(n),空间复杂度为O(1),能有效解决问题。
2025-09-21 13:44:09
778
原创 《C++ 内存布局通关指南:从动态内存到对齐规则,手把手破解底层痛点》
本文介绍了计算机内存的基本布局与管理机制。内存主要分为5个区域:栈区(存储局部变量、函数参数)、堆区(动态分配内存)、全局/静态区(存放全局和静态变量)、常量区和代码区。其中,栈区由编译器自动管理,堆区需要手动分配释放,全局/静态区在程序生命周期内持续存在。文章通过图示和代码示例展示了不同内存区域的特性和使用方法,并对比了静态内存分配和动态内存分配的差异。重点讲解了动态内存分配的操作方式(new/delete),强调了内存泄漏的风险。最后指出内存对齐这一关键但常被忽视的细节,为理解程序内存管理提供了基础框架
2025-09-21 11:56:12
892
10
原创 解锁代码复用的终极武器:深入C++继承
本文系统介绍了C++继承的核心概念与应用。主要内容包括:1)继承的基本概念与三种继承方式(public/protected/private),重点阐述了派生类对基类成员的访问控制规则;2)基类与派生类对象间的赋值转换规则,强调"向上转型"的安全性;3)继承体系中的作用域处理,特别是同名成员的隐藏机制;4)派生类默认成员函数的生成规则及注意事项;5)友元关系不可继承的特性;6)静态成员在继承体系中的共享性;7)菱形继承问题的解决方案——虚继承机制及其底层实现原理。文章最后总结了继承的适用场
2025-09-18 23:44:39
1099
3
原创 终端之外:解锁Linux命令行的魔法与力量
本文系统梳理了Linux命令行的核心概念与常用指令,旨在帮助用户从理解其设计哲学入手,高效掌握这一强大工具。内容分为核心理念、基础指令详解、进阶组合技巧及实用场景示例。
2025-09-12 21:02:25
1212
13
原创 C++ -- 模板
本文主要介绍了C++模板的高级特性与应用。首先回顾了模板的基本概念,包括函数模板和类模板的使用方法。接着详细讲解了非类型模板参数、模板特化(全特化和偏特化)等进阶内容,并提供了相关代码示例。针对模板分离编译问题,文章提出了三种解决方案:将定义放在头文件中、显式实例化以及使用.tpp文件。最后总结了模板的优点(代码复用、灵活性)和缺陷(代码膨胀、编译错误难定位)。文章适合有一定C++基础的开发者阅读,为进一步学习模板特性提供了实用指导。
2025-09-09 22:52:22
912
空空如也
虚拟机无法打开是什么原因
2024-10-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅