- 博客(75)
- 收藏
- 关注
原创 【Linux】信号
本篇文章全面探讨了信号在操作系统中的作用及其处理机制。首先介绍了信号的基本概念,随后详细阐述了信号的产生方式,包括通过键盘、系统调用(如kill、raise、abort函数)、异常、软件条件(如关闭管道读端、alarm函数)等方式。接着,文章讨论了信号的保存方法,包括信号集sigset_t和相关函数的使用。在信号处理部分,着重介绍了信号捕捉和sigaction函数。最后,文章补充了与信号相关的重要概念,如可重入函数、volatile关键字和SIGCHLD信号的处理。希望本篇文章对大家学习信号有所帮助。
2025-01-16 14:25:55 1054 27
原创 【C++】异常
本篇文章概述了C语言与C++在处理错误机制上的不同,首先介绍了C语言传统的错误处理方式,随后详细阐述了C++中的异常概念,包括异常的抛出与捕获、重新抛出、异常安全及异常规范。文章还探讨了自定义异常体系和C++标准库的异常体系。最后,分析了C++异常机制的优缺点,为理解和应用C++异常处理提供了全面指导。希望本篇文章对大家学习异常有所帮助。
2025-01-16 14:24:42 606 9
原创 【C++】C++11(二)
本篇文章全面介绍了C++11在模板、lambda表达式、包装器及线程库方面的新特性。首先,探讨了可变参数模板的灵活性。随后,深入解析了lambda表达式的语法及其与函数对象的对比,展示了C++11在匿名函数编程上的进步。此外,文章还介绍了function包装器和bind函数,以及C++11线程库,包括线程管理、锁机制、条件变量和原子操作,为并发编程提供了强大支持。希望本篇文章对大家学习C++11有所帮助。
2025-01-10 15:36:35 1645 69
原创 【C++】C++11(一)
本篇文章概述了C++11的主要特性。首先简介C++11,随后详述了统一的列表初始化,包括{}初始化和std::initializer_list。接着阐述新型声明方式,如auto、decltype类型推导及nullptr替代NULL。文章还介绍了范围for循环、智能指针、STL变化及右值引用和移动语义。在类功能方面,探讨了默认成员函数、成员变量初始化、default和delete关键字的作用,以及final与override在继承和多态中的应用,展示了C++11在提升代码简洁性、安全性和性能方面的显著进步。
2025-01-10 15:33:00 755 18
原创 【Linux】线程池
本篇文章涵盖多线程编程中的几个关键方面:线程的封装确保线程管理的便捷与安全;锁的封装保护共享资源,避免并发冲突;日志实现助力程序调试与运行监控;任务实现探讨任务分配与执行机制;线程池实现及测试,包括标准实现与懒汉模式,提升资源利用率与性能。
2025-01-05 20:02:14 977 70
原创 【优选算法】优先级队列(堆)
本篇文章列举了四个经典的LeetCode算法题目,包括最后一块石头的重量、数据流中的第K大元素、前K个高频单词和数据流的中位数。我会在每道题中提到每道题的解题思路,并提供解决本题的C++代码,希望通过这些题的讲解,能够加深大家对优先级队列的理解。
2025-01-05 20:01:19 1519 26
原创 【Linux】进程间通信(二)
本篇文章概述了System V IPC(进程间通信)机制,包括共享内存、消息队列和信号量。共享内存部分详细讲解了其原理及关键函数如ftok、shmget、shmat、shmdt、shmctl。消息队列和信号量部分简要介绍了其原理和主要函数。文章最后探讨了内核对IPC资源的看法。
2025-01-01 16:53:11 1589 87
原创 【Linux】进程间通信(一)
本篇文章概述了进程间通信的目的、理解、发展及分类,并重点介绍了管道通信机制,在匿名管道部分,详细讲解了pipe函数、实现方式及小结,包括四种常见情况和五种关键特性,并提及了匿名管道在进程池中的应用。命名管道部分则从指令级和代码级两个层面,分别介绍了其创建与使用方法。
2025-01-01 16:47:16 937 22
原创 【Linux】动静态库
本篇文章介绍了静态库与动态库的相关概念,包括静态库的创建与使用,以及动态库的创建、使用和使操作系统找到动态库的多种方法。文章还阐述了动态库的加载过程,包括ELF格式、可执行程序中的地址、绝对编址和相对编址等关键内容。文章最后还谈到了进程地址空间,有关于CPU如何找到程序入口,以及CPU执行程序时,虚拟地址到物理地址的转换过程。希望本篇文章对大家了解静态库与动态库的基本原理和使用方法,以及动态库在操作系统中的加载机制有所帮助。
2024-12-26 10:35:53 1457 86
原创 【优选算法】队列+宽搜(BFS)
本篇文章列举了四个经典的LeetCode算法题目,包括N叉树的层序遍历、二叉树的锯齿形层序遍历、二叉树最大宽度和在每个树行中找最大值。我会在每道题中提到每道题的解题思路和对应的图解,并提供解决本题的C++代码,希望通过这些题的讲解,能够加深大家对队列与宽度搜索的理解。
2024-12-26 10:30:40 1040 30
原创 【Linux】基础IO(磁盘文件)
本篇文章全面概述了文件系统、磁盘存储结构及其逻辑抽象,包括磁盘的物理与逻辑层面。简略探讨了磁盘分区与格式化。接着,深入解析了磁盘存储的逻辑抽象结构,包括inode表、数据块、位图、块组描述符及超级块等关键组成部分。此外,文章还介绍了目录文件的基本概念和查找方法,以及软链接与硬链接的区别与用途,并解释了为何用户无法对目录产生硬链接。最后,阐述了ACM时间(Access、Modify、Change时间)的定义与更新机制,希望本篇文章对大家有所帮助。
2024-12-21 10:54:44 1956 88
原创 【优选算法】栈
本篇文章列举了五个经典的LeetCode算法题目,包括删除字符串中的所有相邻重复项、比较含退格的字符串、基本计算器Ⅱ、字符串解码和验证栈序列。我会在每道题中提到每道题的解题思路和对应的图解,并提供解决本题的C++代码,希望通过这些题的讲解,能够加深大家对栈的理解。
2024-12-21 10:53:33 1218 30
原创 【Linux】基础IO(内存文件)
本篇文章首先复习了常见的C语言文件接口,接着深入认识了操作文件的系统调用,并详细说明了Linux中的常见传参方法。文章进一步探讨了C语言文件接口与文件系统接口的关系,并引入了文件描述符(fd)的概念,解释了fd为0、1、2的文件及其意义。同时,阐述了操作系统下一切皆文件的理解,以及C语言中FILE的概念。此外,还深入理解了struct file内核对象、fd的分配规则以及重定向等相关内容。最后,文章对缓冲区进行了简单介绍,并通过样例和原理简单的模拟实现了stdio.h,希望本篇文章对大家有所帮助。
2024-12-14 11:10:50 1341 100
原创 【优选算法】字符串
本篇文章列举了四个经典的LeetCode算法题目,包括最长公共前缀、最长回文子串、二进制求和和字符串相乘。我会在每道题中提到每道题的解题思路和对应的图解,并提供解决本题的C++代码,希望通过这些题的讲解,能够加深大家对字符串的理解。
2024-12-14 11:03:55 1456 39
原创 【Linux】自定义shell(讲解原理)
本篇文章讲解了一个命令行工具的设计与封装的原理,包括打印命令提示符、获取命令行命令字符串、分割字符串、执行指令以及处理内置命令的执行和重定向功能。。
2024-12-10 19:44:38 2085 88
原创 【优选算法】哈希表
本篇文章先对哈希表进行简单的描述,列举了五个经典的LeetCode算法题目,包括两数之和、判定是否互为字符重排、存在重复元素、存在重复元素Ⅱ和字母异位词分组。我会在每道题中提到每道题的解题思路和对应的图解,并提供解决本题的C++代码,希望通过这些题的讲解,能够加深大家对哈希表的理解。
2024-12-10 19:42:49 1277 36
原创 【Linux】进程控制
本文全面介绍了进程管理中的关键概念,包括进程创建(重点探讨了fork函数及其返回值、写时拷贝、常规用法及失败原因)、进程退出(涉及多种退出方法和exit与_exit函数的区别)、进程等待(解释了进程等待的重要性、方法及操作系统层面的实现原理)以及进程替换(详细阐述了七种替换函数、使用场景、原理及与程序加载的关系)。希望本篇文章对大家掌握进程控制有所帮助。
2024-12-05 13:03:51 2187 92
原创 【优选算法】分治--快速排序
本篇文章列举了四个经典的LeetCode算法题目,包括颜色分类、排序数组、数组中的第K个最大元素和库存管理Ⅲ。我会在每道题中提到每道题的解题思路和对应的图解,并提供解决本题的C++代码,希望通过这些题的讲解,能够加深大家对快速排序的理解。
2024-12-05 12:53:24 1646 35
原创 【Linux】进程地址空间
本篇文章先讲述了C/C++中的普遍认知,例如空间布局图、堆栈相对而生和栈区申请与访问相关知识,然后详细阐述了进程地址空间的核心概念,包括地址的深入理解、进程地址空间的本质以及区域划分的必要性。进程地址空间通过将内存空间有序化,有效提升了进程访问内存的安全性与效率,实现了进程管理与内存管理在操作系统层面的解耦,并确保了各进程间的独立性。希望本篇文章对大家有所帮助。
2024-12-01 18:25:38 1926 88
原创 【Linux】Linux2.6内核进程调度队列与调度原理
本篇文章概述了进程管理中的关键概念,包括竞争性、独立性、并行与并发,介绍了寄存器的作用,阐述了进程切换的过程,并探讨了Linux2.6内核的进程调度队列及其调度原理。希望对大家了解Linux2.6内核进程调度队列与调度原理有所帮助。
2024-12-01 18:24:38 976 33
原创 【优选算法】模拟
本篇文章列举了五个经典的LeetCode算法题目,包括替换所有的问号、提莫攻击、Z字形变换、外观数列和数青蛙。我会在每道题中提到每道题的解题思路和对应的图解,并提供解决本题的C++代码,希望通过这些题的讲解,能够加深大家对模拟的理解。
2024-12-01 18:24:08 1439 34
原创 【Linux】命令行参数与环境变量
本文深入探讨了命令行参数与环境变量的相关知识。首先,介绍了命令行参数的定义及其设计意义,强调了命令行参数在提升程序灵活性和可配置性方面的作用。随后,详细阐述了环境变量的基本概念、常见类型(如PATH、HOME、PWD)及其查看方法,并探讨了如何在进程中获取环境变量,包括使用getenv函数、命令行参数以及全局变量environ等方式。文章还介绍了进程如何获取环境变量,以及向进程中设置环境变量的方法。此外,对比了本地变量与环境变量的差异,并简要说明了命令的分类,包括常见命令和内建命令。希望对大家有帮助。
2024-11-28 16:38:03 1386 91
原创 【优选算法】位运算
本篇文章首先常用位运算进行了总结,然后列举了十个经典的LeetCode算法题目,包括位1的个数、比特位计数、汉明距离、只出现一次的数字、只出现一次的数字Ⅲ、判定字符是否唯一、丢失的数字、两整数之和只出现一次的数字Ⅱ以及消失的两个数字。我会在每道题中提供每道题的解题思路和解决本题的C++代码,希望通过这些题的讲解,能够加深大家对位运算的理解。
2024-11-28 16:36:00 1303 35
原创 【Linux】进程优先级
本篇文章介绍了进程优先级的基本概念及其相关操作。首先阐述了优先级在操作系统中的重要性,用于决定进程的运行顺序。接着,说明了如何查看进程的优先级,包括使用相关命令查看PRI(优先级)和NI(nice值)。其中,详细探讨了PRI与NI的含义、计算方法、取值范围等。进一步地,文章介绍了如何设置进程的优先级,包括使用top命令更改已存在进程的nice值,以及使用nice和renice命令来设置或调整进程的优先级。希望通过本篇大家可以对进程优先级有更深入的了解。
2024-11-25 13:01:34 2139 95
原创 【优选算法】前缀和
本篇文章列举了八个经典的算法题目,包括【模板】前缀和、【模板】二维前缀和、寻找数组的中心下标、除自身以外数组的乘积、和为K的子数组、和可被K整除的子数组、连续数组以及矩阵区域和。我会在每道题中提供每道题的解题思路、图解和解决本题的C++代码,希望通过这些题的讲解,能够加深大家对前缀和的理解。
2024-11-25 12:54:18 1480 43
原创 【Linux】进程状态
本篇文章全面探讨了操作系统层面上的进程状态以及Linux操作系统中具体的进程状态。首先,文章概述了进程在操作系统中的六种基本状态,包括新建、终止、运行、阻塞、挂起(含阻塞挂起和就绪挂起)以及进程切换的本质。随后,文章深入分析了Linux操作系统中的进程状态,详细描述了R(运行)、S(睡眠)、D(磁盘休眠)、T(停止)、t(追踪停止)、X(死亡)、Z(僵尸)等状态,并解释了僵尸状态与僵尸进程的概念。此外,文章还介绍了前台进程、后台进程、孤儿进程等相关知识。希望本篇文章对大家掌握进程状态有所帮助。
2024-11-22 12:20:19 1447 95
原创 【优选算法】二分查找
本篇文章首先讲解了二分查找进行了总结,包括二分查找的原理和二分查找的模版,然后列举了八个经典的LeetCode算法题目,包括二分查找、在排序数组中查找元素的第一个和最后一个位置、搜索插入位置、x的平方根、山脉数组的峰顶索引、寻找峰值、寻找旋转排序数组中的最小值以及点名。我会在每道题中提供每道题的解题思路、图解和解决本题的C++代码,希望通过这些题的讲解,能够加深大家对二分查找的理解。
2024-11-22 12:14:13 1606 36
原创 【Linux】进程的基本概念
本篇文章深入探讨了进程概念,从操作系统资源管理需求出发,指出进程是执行中的程序实例。进程控制块PCB,特别是Linux的task_struct,是进程内核的表征,包含PID、PPID等丰富信息。文章介绍了查看系统进程的方法,并详细阐述了进程创建方式,包括命令行启动和通过代码(特别是fork函数)创建。同时,fork函数原理也得到了清晰解释。通过本文,读者可全面了解进程概念、PCB结构、进程查看及创建技巧,尤其是fork函数的应用。希望本文能帮助读者深入理解进程相关知识,提升对操作系统的认识。
2024-11-19 12:55:35 1531 88
原创 【优选算法】滑动窗口
本篇文章首先讲解了滑动窗口基础知识和操作,然后列举了八个经典的LeetCode算法题目,包括长度最小的子数组、无重复字符的最长子串、最大连续1的个数 III、将 x 减到 0 的最小操作数、水果成篮、找到字符串中所有字母异位词、串联所有单词的子串以及最小覆盖子串。我会在每道题中提供每道题的解题思路和解决本题的C++代码,希望通过这些题的讲解,能够加深大家对滑动窗口的理解。
2024-11-19 12:54:36 1144 33
原创 【Linux】操作系统
本篇文章探讨了操作系统的基本概念和设计目的,以及对计算机层状结构进行逐层讲解。首先,定义了操作系统是什么,随后阐述了设计操作系统的目的,即操作系统将软硬件资源管理好,给用户提供良好使用环境。通过计算机层状结构的角度,将操作系统分为下三层(底层硬件、驱动程序、操作系统)和上三层(用户、用户操作接口、系统调用接口),并讲述了各层定义与作用。最后在总结部分,文章探讨了“管理”的含义,还分别讲述了系统调用和库函数的定义和作用。文章最后还提供了查看源代码的方式,希望能够对大家理解操作系统有所帮助。
2024-11-15 17:42:42 1624 98
原创 【优选算法】双指针
本篇文章列举了八个经典的LeetCode算法题目,包括移动零、复写零、快乐数、盛最多水的容器、有效三角形的个数、查找总价格为目标值的两个商品、三数之和以及四数之和。这些题目都涉及到了算法和数据结构的核心知识。我会在每道题中提到每道题的解题思路和对应的图解,并提供解决本题的C++代码,希望通过这些题的讲解,能够加深大家对双指针的理解。
2024-11-15 17:31:18 1297 29
原创 【Linux】冯诺依曼体系结构
本文介绍了冯诺依曼体系结构,这是现代计算机设计的基础框架,由数学家冯·诺依曼提出。文章详细阐述了冯诺依曼体系结构的基本组成,包括输入单元、中央处理器、输出单元和存储器,并强调了CPU只能与内存进行直接交互,而不能与外设进行直接交互的原因。此外,文章还探讨了关于冯诺依曼体系结构的一些问题,如程序必须加载到内存中才能运行的原因,并通过QQ聊天和发送文件的例子,深入解释了数据在计算机中的流动过程。最后,文章强调了理解和掌握冯诺依曼体系结构对于深入理解计算机软件数据流的重要性。
2024-11-10 13:25:46 2428 73
原创 【Linux】使用Linux实现小程序 - 进度条
这篇文章简要介绍了缓冲区的作用、回车换行的基本概念,并详细探讨了进度条设计的三个版本演进:从无场景配合的基础版,到结合具体场景增强用户体验的进阶版,再到最终通过美化提升视觉效果的最终版。
2024-09-03 15:31:34 4690 106
原创 【Linux】Linux项目自动化构建工具 - make/Makefile
这篇文章全面概述了make/Makefile在自动化编译过程中的重要性及其核心概念。首先,探讨了make/Makefile的背景与基本概念,为后续深入解析奠定基础。随后,详细分析了依赖关系与依赖方法,这是Makefile实现高效编译的关键。进而,揭示了make/Makefile的工作原理,阐述了其如何根据文件时间戳自动判断并执行必要的编译步骤。此外,还介绍了Makefile中的伪目标、变量以及强大的推导能力,这些特性使得Makefile成为项目管理和构建自动化的强大工具。
2024-09-03 15:29:19 1108 9
原创 【Linux】Linux环境基础开发工具使用之Linux调试器-gdb使用
程序发布通常包含两种主要模式:Debug模式与Release模式。Debug模式用于开发阶段,包含详尽的调试信息,便于开发者追踪并修复程序中的错误。而Release模式则用于最终发布,经过优化以提高运行效率,同时去除了调试信息,减少程序体积。默认发布模式多为Release,以提供用户最佳的使用体验。在程序调试过程中,gdb是不可或缺的工具。它允许开发者在程序运行时暂停、检查程序的内部状态和变量值,逐步执行代码,从而定位问题所在。通过gdb,开发者可以更高效地修复程序中的bug,确保程序的稳定性和可靠性。
2024-08-21 07:24:06 2084 98
原创 【Linux】Linux环境基础开发工具使用之Linux编译器-gcc/g++使用
本文概述了编译过程及GCC/G++的使用,包括预处理、编译、汇编和链接等关键步骤。特别针对C语言编译中遇到的“for循环初始声明仅在C99模式下允许”错误,提出了解决方法。此外,还详细讨论了数据库中的动态库与静态库的概念及其动/静态链接的优缺点。预处理阶段处理宏定义和条件编译等;编译阶段将源代码转换为汇编代码;汇编阶段进一步转换为机器语言;链接阶段则将所有编译生成的目标文件及库文件合并成可执行文件。动态库与静态库在链接方式上不同,各有优劣。
2024-08-16 14:18:55 2472 101
原创 【Linux】Linux环境基础开发工具使用之软件包管理(yum)与 Linux编辑器(vim)
本文详细介绍了Linux环境下两大核心工具:yum软件包管理器和vim文本编辑器。yum部分涵盖了软件包基础、rzsz工具简介、软件包的查看、安装、卸载、更新及yum源更新方法。vim部分则从基本概念出发,深入讲解了vim的基本操作、命令模式与底行模式的常用命令,包括光标移动、文本编辑、查找与保存等。此外,还介绍了vim的高级功能如视图模式、替换模式及多文件编辑,并提供了简单的vim配置指南,帮助用户根据个人需求优化vim使用体验,提升代码编辑与管理效率。
2024-08-11 13:09:03 2152 199
原创 【Linux】shell命令与Linux权限的概念
Linux系统的权限管理通过shell命令实现,涉及用户、指令、文件类型和访问权限等多个方面。用户通过su和sudo指令切换身份以执行高权限命令。文件权限分为所有者、所属群组和其他用户,每类用户拥有读、写、执行等基本权限。权限值可用字符或八进制数值表示,通过chmod、chown、chgrp等命令灵活设置。umask控制新文件的默认权限,file命令识别文件类型。目录权限同样重要,影响用户的访问行为。此外,粘滞位增强目录安全,防止非所有者删除文件。Linux权限管理为系统安全提供了坚实基础。
2024-08-04 15:43:10 6797 209
原创 【Linux】常见指令的使用
在Linux系统中,掌握常用命令是高效管理与操作文件系统的关键。灵活组合与运用得以展现。掌握这些基础而重要的命令,对于Linux系统的日常管理和维护至关重要。
2024-07-27 16:55:17 1554 186
原创 【C++】位图和布隆过滤器
这篇文章详细的介绍了位图与布隆过滤器,位图与布隆过滤器是C++开发者在处理大数据集时常用的优化工具。位图通过每一位表示集合中某元素的存在性,实现空间与查询效率的双赢,特别适用于快速去重和查找。而布隆过滤器则是一种概率型数据结构,利用多个哈希函数降低误判率,适用于判断元素是否“可能”存在于集合中,适合处理大规模数据过滤。尽管布隆过滤器存在删除困难和一定误判率的缺点,但其高效的空间利用率和查询速度,使其成为处理海量数据时的优选方案。掌握位图与布隆过滤器的实现与应用,对于提升C++程序性能至关重要。
2024-07-21 14:46:20 1409 192
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人