自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(95)
  • 收藏
  • 关注

原创 C 语言部分操作符详解 -- 进制转换,原码、反码、补码,位操作符,逗号表达式,操作符的优先级和结合性,整型提升,算术转换

本文介绍了C语言操作符的分类及其应用,包括算术、位运算、移位等操作符的使用方法。重点讲解了二进制与其他进制的转换原理,以及整数的原码、反码、补码表示。通过具体代码示例演示了位操作符(&、|、^、~)的实际应用,并对比了两种变量交换方法。文章还涉及逗号表达式、下标访问和函数调用操作符的特性,最后分析了表达式求值中的整型提升和算术转换规则。这些内容为理解C语言底层运算机制提供了重要参考。

2025-07-15 13:12:52 642

原创 C语言函数介绍 -- 库函数与标准库,形参和实参,数组作函数参数,函数的声明和定义,static,extern,函数递归

本文系统介绍了C语言函数的相关概念和使用方法。主要内容包括:1.函数的基本概念,分为库函数和自定义函数两类;2.函数的定义与调用,包括形参和实参的关系、return语句的使用;3.数组作为函数参数的传递方式;4.函数的嵌套调用和链式访问;5.函数声明与定义,以及多文件编程方法;6.static和extern关键字对函数和变量的修饰作用;7.递归函数的工作原理及注意事项。文章通过具体代码示例详细说明了函数各种用法的实现方式,并比较了递归与迭代的优缺点,为C语言函数的使用提供了全面指导。

2025-06-29 15:34:42 811

原创 MySQL 索引 -- 磁盘,主键索引,唯一索引,普通索引,全文索引

MySQL数据库索引机制与优化策略 摘要: 本文系统介绍了MySQL数据库的存储结构与索引原理。首先阐述了磁盘IO的基本概念,指出MySQL以16KB的page作为基本交互单位,通过Buffer Pool缓存机制提升效率。重点分析了B+树索引结构,包括其非叶子节点存储目录、叶子节点相连的特性,以及聚簇索引与非聚簇索引的差异(数据存储方式、查询效率等)。文章详细说明了主键、唯一、普通、全文四种索引的操作方法,并提出了索引优化原则:选择合适字段、遵循最左前缀、避免冗余、使用覆盖索引。最后对比了全文索引与LIKE

2025-06-28 21:39:25 1043

原创 MySQL 复合查询和内外连接 -- 子查询,多表查询,自连接,合并查询,表的内外连接

这篇文章介绍了SQL查询中的多种高级操作技巧。主要包括子查询(单行、多行、多列子查询及from子句中的使用)、多表查询与笛卡尔积、自连接、合并查询(union和union all)以及表的内外连接(左外连接和右外连接)。通过具体示例展示了如何查询同一部门员工、高于部门平均工资的员工、员工上级领导信息等场景,并对比了不同语法(如where子句与inner join)的实现方式。文章还解释了外连接在保留完整数据(如所有学生或所有成绩)时的重要作用。

2025-06-28 02:02:42 591

原创 五种 IO 模式的简单介绍 -- 阻塞 IO,非阻塞 IO,信号驱动 IO,IO 多路复用,异步 IO

文章摘要: 本文系统介绍了五种IO模型:1)同步阻塞IO:进程发起请求后阻塞等待完成;2)同步非阻塞IO:通过轮询检查状态,避免阻塞;3)信号驱动IO:内核通过信号通知进程IO就绪;4)IO多路复用(select/poll/epoll):单进程监控多描述符,高效处理并发;5)异步IO:内核完成所有操作后通知进程。重点分析了各模型的工作机制、适用场景及优缺点,并提供了非阻塞IO的代码示例,帮助理解实际操作。适用于需要优化IO性能的开发场景。

2025-06-25 00:15:03 718

原创 MySQL 内置函数 -- 日期函数,字符串函数,数学函数,其他函数

本文介绍了MySQL中常用的四类函数:1. 日期函数:包括now()获取当前时间,date()提取日期部分,date_add/date_sub日期加减,datediff计算日期差等;2. 字符串函数:如length()获取字节数,replace()字符串替换,substring()截取子串,trim()去除空格等;3. 数学函数:包括bin()转二进制,hex()转十六进制,conv()进制转换等;4. 其他实用函数:如user()查看用户,database()显示当前库,md5()加密,ifnull()空

2025-06-24 22:10:36 429

原创 C语言数组介绍 -- 一维数组和二维数组的创建、初始化、下标、遍历、存储,C99 变长数组

【摘要】本文系统地介绍了C语言中数组的概念、创建与使用方法。一维数组部分详细讲解了数组定义、初始化、下标访问、遍历操作、内存存储及sizeof计算元素个数等内容。二维数组部分重点阐述了创建方式、多种初始化方法、行列下标访问、嵌套循环遍历,以及连续存储的特性。最后介绍了C99标准新增的变长数组(VLA)特性,说明其运行时确定数组大小的特点。全文通过大量代码示例,全面展示了数组这一重要数据结构在C语言中的具体应用和底层实现原理。

2025-06-23 20:40:53 835

原创 NAT 与代理服务器 -- NAT,NAPT,正向代理,反向代理

(1)从应用上讲,NAT 设备是网络基础设备之一,解决的是 IP 不足的问题;(3)从使用范围上讲,NAT 一般在局域网的出口部署,代理服务器可以部署在局域网,可以部署在广域网,也可以跨网络部署。如上图所示,全球的网络就是由一个一个子网嵌套式的组成在一起,最后通过一个路由器连入广域网中(公网)。路由器往往都具备 NAT 设备的功能,通过 NAT 设备进行中转,完成子网设备和其他子网设备的通信。一般家用的主机,都是通过网线连在路由器的 LAN 口上,这表示这个主机属于该路由器构建的子网当中。

2025-06-18 23:12:24 1124

原创 数据链路层介绍 -- 以太网数据帧格式,MTU 以及 MTU 与 UDP、TCP 的影响,ARP 协议

本文介绍了数据链路层核心概念,重点分析了以太网技术、MTU限制和ARP协议。以太网作为主流局域网技术,其数据帧包含6字节MAC地址、2字节协议类型和4字节校验码。MTU(最大传输单元)限制数据包大小(以太网为1500字节),影响UDP/TCP传输效率——UDP易因分片丢失数据,TCP通过MSS协商避免分片。ARP协议用于IP到MAC地址的映射,通过广播请求/单播应答实现跨层通信。文章还详细解析了ARP报文格式和工作流程,阐述了其在网络通信中的关键作用。

2025-06-18 18:08:30 1140

原创 网络层协议 IP 协议介绍 -- IP 协议,网段划分,私有 IP 和 公网 IP,路由

本文介绍了网络层IP协议的核心概念与应用。主要内容包括:1) IP协议格式解析,包含版本号、首部长度、服务类型等12个关键字段;2) 网段划分技术,包括传统IP分类(A-E类)和更高效的CIDR无类域间路由;3) 特殊的IP地址用途与IP地址限制解决方案,如动态分配、NAT技术和IPv6;4) 私有IP与公网IP的区别及应用场景;5) 路由工作原理,包括路由表查询和数据包转发过程。文章系统性地阐述了网络通信中IP地址管理、子网划分和数据路由的核心机制。

2025-06-17 21:47:46 1675

原创 C语言数据类型、变量和常用操作符 -- C语言数据类型,变量创建、分类以及初始化,常见运算符,强制类型转换,printf 函数,scanf 函数

本文摘要: 《C语言基础语法要点解析》系统介绍了C语言核心概念。内容包括:1)数据类型及其长度,使用sizeof操作符测量类型大小;2)signed/unsigned区别及取值范围;3)变量创建、初始化与分类(全局/局部变量);4)算术运算符(+-*/%)的使用规则;5)赋值运算符及复合赋值运算符;6)单目操作符(++/--)的前置后置区别;7)强制类型转换语法;8)输入输出函数详解:printf的占位符(%d,%f等)及格式控制(宽度、对齐、小数位),scanf的数据读取机制、返回值及安全注意事项。全文通

2025-06-16 23:57:59 826

原创 传输层协议 TCP 介绍 -- TCP协议格式,确认应答机制,超时重传机制,连接管理机制,滑动窗口,流量控制,拥塞控制,延迟应答,捎带应答

TCP协议详解摘要 TCP(传输控制协议)是一种可靠的面向连接的传输层协议,通过序列号、确认应答、超时重传等机制保证数据传输的可靠性。其核心机制包括:1)连接管理(三次握手建立连接、四次挥手释放连接);2)滑动窗口机制实现高效传输;3)流量控制通过窗口大小动态调节;4)拥塞控制采用慢启动、拥塞避免等算法;5)延迟应答和捎带应答提升性能。TCP通过32位序号和确认号实现字节流有序传输,使用6个标志位(SYN/ACK/FIN等)控制连接状态。应用层协议如HTTP、HTTPS、SSH等均基于TCP实现可靠通信。

2025-06-11 23:21:32 1313

原创 Git 介绍、安装以及基本操作

Git入门指南:版本控制与基本操作 Git是一款强大的版本控制系统,解决了传统文件管理中的版本混乱问题。本文介绍了Git的核心概念和基本操作:1) Git可高效管理各种文件版本,解决文件冗余和修改记录不清问题;2) 在Ubuntu中通过简单命令即可安装Git;3) 详细讲解了仓库创建、三区概念(工作区/暂存区/版本库)、文件添加/修改/版本回退等核心操作;4) 重点说明如何通过git add/commit提交修改,使用git reset进行版本回退,以及如何撤销不同阶段的修改。Git通过指针机制快速切换版本

2025-06-11 14:46:06 1892

原创 传输层协议 UDP 介绍 -- UDP 协议格式,UDP 的特点,UDP 的缓冲区

本文主要是对计算机网络体系结构中传输层的 UDP 协议做了一定的介绍,包括 UDP 协议的格式,UDP 协议的特点,UDP 协议的缓冲区以及一些基于 UDP 协议的应用层协议。

2025-06-04 23:24:01 1456

原创 Linux 中应用层自定义协议与序列化 -- 自定义协议概述,序列化和反序列化,Jsoncpp

本文介绍了应用层自定义协议的设计与实现,重点基于Jsoncpp库开发网络计算器应用。主要内容包括: 应用层协议设计原理:通过序列化将结构化数据转为字符串传输,反序列化还原数据,解决跨平台兼容性问题。 Jsoncpp核心功能:详细解析Json::Value类的构造、元素访问、类型检查及转换方法,展示FastWriter序列化和Reader反序列化实践。 网络计算器实现:采用三层架构设计: 传输层:封装Socket类处理TCP通信 协议层:基于Json定制请求/响应报文格式 业务层:实现计算器核心逻辑 代码示例

2025-05-30 15:43:51 1227

原创 MySQL 表内容的增删查改 -- CRUD操作,聚合函数,group by 子句

本文系统介绍了SQL的CRUD操作,包含创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)四大基本功能。详细讲解了数据插入的多种方式、条件查询、排序分组、分页显示等核心语法,并提供了丰富的示例说明。重点介绍了聚合函数使用、GROUP BY子句分组统计以及SQL查询关键字的执行顺序。文章还特别对比了DELETE与TRUNCATE的区别,并展示了如何利用子查询实现表数据去重等实用技巧,全面覆盖了SQL基础操作的关键知识点。

2025-05-28 12:35:50 746

原创 MySQL 中表的约束 -- 空属性,默认值,主键,自增长,唯一键,外键

数据库约束机制是保证数据合法性和正确性的关键技术手段。主要包括:1)空属性(NOT NULL)约束确保字段不为空;2)默认值(DEFAULT)为常用字段预设值;3)列描述(COMMENT)提供字段说明;4)主键(PRIMARY KEY)保证记录唯一性且非空;5)自增长(AUTO_INCREMENT)自动生成递增值;6)唯一键(UNIQUE)确保字段值唯一但允许空值;7)外键(FOREIGN KEY)维护表间引用完整性。这些约束共同作用,有效规范数据操作行为,维护数据质量。

2025-05-24 21:24:39 944

原创 MySQL 中的数据类型 -- 数据类型的分类,数值类型,字符串类型

本文介绍了MySQL中主要的数据类型及其特性。数值类型包括tinyint、bit和浮点类型(float/decimal),其中decimal能避免精度损失。字符串类型对比了定长char和变长varchar,char效率高但浪费空间,varchar反之。日期时间类型包含date、datetime和timestamp。枚举类型enum用于单选,set支持多选,两者都支持选项值或数值插入。文章还详细说明了各类型的存储限制、使用场景及注意事项,如越界处理、编码影响长度计算等,为数据库设计提供了实用的类型选择参考。

2025-05-24 11:47:28 929

原创 MySQL 表的操作

本文介绍了数据库表的基本操作,包括创建、查看、修改和删除表。创建表时,需指定表名、字段名、数据类型、字符集、校验规则和存储引擎。查看表可以通过show tables查看当前数据库的表,或使用desc和show create table查看表结构和创建语句。修改表包括重命名表名、修改列名称及属性、增加字段、修改字段属性和删除字段,使用alter table语句实现。删除表使用drop table语句,可删除指定表及其数据。这些操作为数据库表的管理提供了全面的指导。

2025-05-22 00:13:21 896

原创 Linux 的 TCP 网络编程 -- 回显服务器,翻译服务器

本文介绍了TCP网络编程中的关键函数及其应用,包括listen()、accept()和connect(),并详细描述了如何实现TCP回显服务器和TCP翻译服务器。listen()用于将套接字设置为监听状态,accept()用于接受客户端连接,connect()用于客户端发起连接请求。文章还展示了如何通过多线程和线程池技术处理客户端请求,并提供了代码示例和测试方法。TCP回显服务器通过线程池处理客户端请求,而TCP翻译服务器则通过多线程技术实现英文到中文的翻译功能。

2025-05-20 14:36:31 1133

原创 MySQL 库的操作 -- 字符集和校验规则,库的增删查改,数据库的备份和还原

本文主要介绍了数据库中的字符集和校验规则,以及数据库的基本操作、备份和恢复方法。字符集决定了数据的编码方式,而校验规则影响数据的读取和比较,如大小写敏感性。文章详细说明了如何查看和设置字符集及校验规则,并提供了创建、查看、删除和修改数据库的SQL语法和示例。此外,还介绍了使用mysqldump命令进行数据库备份和恢复的步骤,以及如何查看当前数据库的连接情况。这些操作对于数据库管理和维护至关重要。

2025-05-20 12:55:39 924

原创 MySQL数据库基础 -- SQL 语句的分类,存储引擎

本文介绍了数据库的基本概念和使用方法,重点围绕MySQL展开。首先解释了数据库的定义,指出MySQL是一个基于客户端-服务器模式的网络服务,能够高效管理数据。接着详细说明了如何进入MySQL、理解服务器、数据库和表之间的关系,并通过案例展示了数据库的创建和使用过程。此外,文章还介绍了SQL语句的分类,包括数据定义语言(DDL)、数据操纵语言(DML)和数据控制语言(DCL)。最后,讨论了MySQL的存储引擎,如何查看不同引擎以及常用引擎的对比。本文为初学者提供了MySQL数据库的入门指南。

2025-05-19 22:09:29 1005 1

原创 Linux 的 UDP 网络编程 -- 回显服务器,翻译服务器

本文介绍了如何使用C++实现一个回显服务器(Echo Server)和翻译服务器(Translation Server)。回显服务器的功能是接收客户端发送的消息并将其回显到客户端显示器上。文章首先介绍了互斥锁的封装模块和线程安全的日志模块,接着详细讲解了UDP服务端的封装,包括socket()、bind()、recvfrom()、sendto()等关键函数的用法。此外,文章还提供了服务端和客户端的代码实现,并演示了本地和跨网络的通信过程。最后,文章介绍了如何将回显服务器扩展为翻译服务器,通过加载字典文件实现

2025-05-17 17:17:54 1061

原创 Linux网络基础 -- 局域网,广域网,网络协议,网络传输的基本流程,端口号,网络字节序

本文系统介绍了计算机网络基础知识和Socket编程预备知识。主要内容包括:1)计算机网络基础概念,详细阐述了局域网(LAN)和广域网(WAN)的组成原理及区别;2)网络协议体系结构,重点分析了OSI七层模型与TCP/IP五层模型的区别与联系;3)网络通信基本原理,通过数据封装/分用过程详细说明了局域网以太网通信和跨网段路由转发机制;4)Socket编程基础,介绍了端口号概念、TCP/UDP协议特点、网络字节序转换以及sockaddr地址结构等核心知识。文章采用分层递进的方式,从网络硬件层到应用层,全面梳理了

2025-05-11 18:37:16 1121 1

原创 多线程编程的常见问题

线程安全:线程安全是指在多线程环境下,一个函数或者一段代码可以被多个线程同时调用,并且能够正确地处理共享资源,不会因为多线程的并发执行而产生数据竞争、不一致或者其他未定义行为。 可重入函数:可重入函数是指一个函数可以被多个线程或者同一个线程在不同的执行上下文中安全地调用,即使在函数执行过程中被中断并再次被调用,也不会出现数据混乱或者其他错误。可重入函数不依赖于任何静态或全局的非常量数据,也不修改任何静态或全局的非常量数据,所有数据都由函数的调用者提供。 可重入性与线程安全的联系:

2025-05-02 13:51:23 541

原创 Linux中线程池的简单实现 -- 线程安全的日志模块,策略模式,线程池的封装设计,单例模式,饿汉式单例模式,懒汉式单例模式

由于实现的日志系统要支持多线程程序日志的有序打印,所以不管在访问显示器还是访问文件的时候都需要通过加锁来维护线程之间的互斥关系。// 将互斥量接口封装成面向对象的形式public:Mutex()(void)n;(void)n;(void)n;

2025-04-27 17:06:45 821

原创 线程同步与互斥 -- 互斥锁,线程同步,条件变量,生产者消费者模型,POSIX信号量

1. 初始化互斥量,初始化方法有两种:方法1:静态分配全局互斥量使用宏 PTHREAD_MUTEX_INITIALIZER 初始化全局的锁。不需要进行释放,程序运行结束会自动释放申请的资源。方法2:动态分配参数:mutex:要初始化的互斥量attr:设置锁的属性,默认情况为 NULL使用动态分配的方式初始化锁,需要调用 pthread_mutex_destroy 进行销毁。2. 销毁互斥量使用 PTHREAD_MUTEX_INITIALIZER 初始化的互斥量不需要销毁;

2025-04-24 16:31:10 1012

原创 Linux中线程的概念与控制 -- 线程概念,分页式存储管理,页表,物理地址与虚拟地址的转换,线程与进程,线程控制,C++封装线程

本文系统介绍了Linux线程相关概念及其实现机制。主要内容包括:1. 线程概念:线程作为进程内部执行分支,是CPU调度的基本单位,共享进程资源但拥有独立栈空间;2. 存储管理:详细解析虚拟地址空间、页表机制及多级页表地址转换过程;3. 线程控制:涵盖线程创建、终止、等待、分离等操作,以及POSIX线程库接口使用;4. 线程特性:分析线程ID、线程栈、局部存储等实现细节;5. 线程封装:展示C++封装pthread库的实践方法。文章通过大量代码示例,深入浅出地阐述了Linux线程管理机制及其应用场景。

2025-04-13 13:51:00 942

原创 Linux的进程信号 -- 信号产生,信号保存,信号捕捉,硬件中断,内核态和用户态,可重入函数,volatile,SIGCHLD

本文系统介绍了Linux信号机制,涵盖信号的定义、产生、保存、捕捉及相关技术应用。信号是进程间异步通信的软中断方式,其处理时机由内核决定。信号可通过终端按键、kill命令、函数调用(如kill、raise、abort)、软件条件(如alarm)及硬件异常(如除零错误)产生。信号在进程中的保存涉及未决(pending)和阻塞(block)状态,通过sigset_t类型及操作函数(如sigprocmask、sigpending)管理。信号捕捉流程涉及用户态与内核态切换,使用sigaction函数自定义处理动作

2025-03-25 15:15:52 1170

原创 进程间通信(Inter-Process Communication,IPC) -- 匿名管道,命名管道,System V,共享内存,消息队列,信号量

1.:⼀个进程需要将它的数据发送给另⼀个进程。2.:多个进程之间共享同样的资源。3.:⼀个进程需要向另⼀个或⼀组进程发送消息,通知它(它们)发⽣了某种事件(如进程终⽌时要通知⽗进程)。4.:有些进程希望完全控制另⼀个进程的执⾏(如Debug进程),此时控制进程希望能够拦截另⼀个进程的所有陷⼊和异常,并能够及时知道它的状态改变。

2025-03-13 14:43:15 998

原创 C/C++动静态库的制作与原理 -- 静态库,动态库,目标文件,ELF文件,动态链接,静态链接

本文系统介绍了静态库和动态库的制作与使用原理。静态库(.a/.lib)在编译时链接到可执行文件中,而动态库(.so/.dll)在运行时加载,支持多进程共享。通过ELF文件格式分析,详细阐述了目标文件、节(Section)与段(Segment)的转换过程,以及程序加载时的内存映射机制。重点解析了动态链接的核心技术:采用相对编址和GOT表实现地址无关代码,通过延迟绑定优化性能。文章还对比了静态链接与动态链接的优缺点,静态链接生成独立文件但体积大,动态链接节省资源但依赖运行时环境。完整揭示了从源代码编译到程序运行

2025-02-26 14:39:49 1364

原创 Ext系列文件系统 -- 磁盘结构,磁盘分区,inode,ext文件系统,软硬链接

一个进程PCB中,fs_struct中存储根目录和当前文件的当前目录的信息,file_struct中有一个文件描述符表,其中是该进程打开的文件,文件描述符表中的指针指向每个被打开文件的files结构体,在files结构体中有存储该文件的操作方式结构体files_operations,用f_op指针指向。dentry_operations和inode_operations同理。

2025-02-20 16:41:18 939

原创 Linux中的基础IO -- C语言文件操作,系统级文件操作(open, write, read),文件描述符,重定向,dup2,缓冲区机制

pathname:要打开或创建的目标文件路径。flags:打开文件时,可以传⼊多个参数选项,这里就是使用位图的方式来传递标志位,⽤下⾯的⼀个或者多个常量进⾏“或”运算,构成flags。O_RDONLY:只读打开。O_WRONLY:只写打开。O_RDWR:读,写打开。这三个常量,必须指定⼀个且只能指定⼀个。O_CREAT:若⽂件不存在,则创建它。需要使⽤mode选项,来指明新⽂件的访问权限。O_APPEND:追加写。mode:指定创建文件时的默认权限。

2025-02-13 16:47:58 1147

原创 进程控制 -- 进程创建(fork),进程终止(exit, _exit),进程等待(wait, waitpid),进程程序替换(exec*系列函数)

execl函数,需要传递程序的路径,并且使用列表形式传递命令行参数。int main()printf("我的程序要运行了!\n");sleep(1);exit(1);printf("我的程序运行完毕!\n");return 0;

2025-01-04 12:46:46 660

原创 虚拟地址空间 -- 虚拟地址,进程地址空间(虚拟地址空间),虚拟内存管理

本文摘要: C/C++程序的内存空间分布实际上是虚拟地址空间,而非物理内存。通过实验代码展示了代码区、全局变量区、堆区、栈区等不同区域的虚拟地址。进程地址空间通过页表映射到物理内存,父子进程共享相同虚拟地址但可能指向不同物理地址(写时拷贝机制)。虚拟地址空间由mm_struct结构体管理,包含各内存区域的边界信息。虚拟内存技术通过地址转换、内存隔离和分页管理,实现了进程间的稳定运行、内存保护和高效利用。内核使用vm_area_struct结构体组织虚拟内存区域,通过链表或红黑树进行高效管理。

2024-12-22 23:09:01 971

原创 Linux系统中的环境变量 --命令行参数,PATH,通过代码获取环境变量,本地变量

本文主要介绍了Linux系统中的命令行参数和环境变量相关知识。命令行参数通过main()函数的argv和argc实现程序选项功能;环境变量则是系统运行的环境参数,具有全局特性,可通过env、echo等命令查看和修改。重点讲解了PATH、HOME等常见环境变量的作用,以及通过代码获取环境变量的三种方法:main函数参数、getenv()函数和全局变量environ。文章还区分了环境变量和本地变量的不同特性,解释了子进程继承环境变量的必要性,并说明了export命令的特殊性。

2024-12-19 21:58:46 756

原创 Linux系统中进程的概念 -- 冯诺依曼体系结构,操作系统,进程概念,查看进程,进程状态,僵尸进程,孤儿进程,进程优先级,进程切换,进程调度

我们常⻅的计算机,如笔记本。我们不常⻅的计算机,如服务器,目前,我们所认识的计算机都是由一个个的硬件组成,包括如下:包括键盘, ⿏标,扫描仪, 写板,网卡,磁盘(外存)等。含有和等。显⽰器,打印机,磁盘,网卡等。从硬件的角度上来理解,用户1用qq发送一条消息给用户2。本质上就是两台冯诺依曼体系结构的计算机进行数据的交互,具体过程如下:(1)首先用户1和用户2都要启动qq,本质是将qq这个可执行程序加载到内存中。

2024-12-14 12:51:10 1229

原创 C++中智能指针的使用及其原理 -- RAII,内存泄漏,shared_ptr,unique_ptr,weak_ptr

内存泄漏指因为疏忽或错误造成程序未能释放已经不再使⽤的内存,⼀般是忘记释放或者发⽣异常释放程序未能执⾏导致的。内存泄漏并不是指内存在物理上的消失,⽽是应⽤程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因⽽造成了内存的浪费。内存泄漏的危害:普通程序运⾏⼀会就结束了出现内存泄漏问题也不⼤,进程正常结束,⻚表的映射关系解除,物理内存也可以释放。⻓期运⾏的程序出现内存泄漏,影响很⼤,如操作系统、后台服务、⻓时间运⾏的客⼾端等等,不断出现内存泄漏会导致可⽤内存不断变少,各种功能响应越来越慢,最终卡死。

2024-11-28 23:43:34 1115

原创 C++中的异常处理

⼀般⼤型项⽬程序才会使⽤异常,下⾯我们模拟设计⼀个服务的⼏个模块每个模块的异常都是Exception的派⽣类,每个模块可以添加⾃⼰的数据最后捕获时,我们捕获基类的引用就可以了。下列程序要完整的运行成功就需要每个模块都调用成功,这里抛出异常的情况使用随机数取模进行模拟。

2024-11-24 11:56:07 1450

原创 Linux环境下的基础开发工具 -- 包管理器,vim,gcc/g++,make/makefile,git,gdb/cgdb

本文介绍了Linux开发环境中的关键工具链,包括软件包管理、代码编辑、编译构建、调试及版本控制等方面。主要内容涵盖:1)Linux软件包管理机制,对比源码安装、rpm安装和yum/apt包管理器;2)vim编辑器的三种模式及常用命令;3)gcc/g++编译流程和动静态库原理;4)make/Makefile自动化构建工具;5)基于缓冲区的进度条程序实现;6)Git版本控制基本操作;7)gdb/cgdb调试技巧如断点设置、条件断点等。通过具体实例演示了各工具的使用方法,为Linux环境下的软件开发提供了实用指南

2024-11-21 23:23:24 1350

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除