自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux 线程:从虚拟地址空间到 POSIX 线程控制全解析

本文深入剖析Linux线程核心概念与底层实现机制。首先阐明线程作为进程内轻量化执行流的本质,分析其优缺点及异常处理;其次详解虚拟地址空间与分页管理机制这一线程运行的底层基石,包括页表、TLB等关键组件;通过对比进程与线程的资源分配差异,突出线程高效共享的特性;详细介绍POSIX线程控制API及线程ID的双重机制;最后给出C++线程封装实例。全文系统性地揭示了Linux线程从概念到实现的全貌,为开发高性能多线程程序提供理论基础和实践指导。

2026-04-07 16:46:42 368

原创 Linux 进程信号:从生活类比到内核原理

本文深入解析Linux信号机制的核心原理与应用。信号作为进程间的异步通知机制,其生命周期包含产生、保存和递达三个阶段,来源包括终端按键、系统调用、软件条件和硬件异常等。文章通过快递类比形象说明信号的未决和递达特性,详细介绍了默认处理、忽略和自定义捕获三种处理方式,并给出C++代码示例。同时深入讲解了信号集操作、阻塞与未决的区别、volatile关键字的作用以及可重入函数等进阶知识,最后通过SIGCHLD信号实现优雅的子进程回收方案。全文系统性地剖析了Linux信号从底层原理到实际应用的完整知识体系。

2026-04-07 16:42:07 527

原创 Linux 进程间通信(IPC)从原理到实战:一篇吃透管道、共享内存、信号量

表格通信方式速度复杂度适用场景匿名管道中简单父子进程、进程池、简单数据流命名管道中简单任意进程单向通信共享内存最快中等大数据、高性能、频繁通信消息队列慢复杂极少使用信号量复杂同步互斥、临界区保护简单通信 →管道高性能数据共享 →共享内存 + 同步机制多进程任务派发 →匿名管道进程池进程独立 → 必须靠操作系统提供公共资源才能通信管道:简单、流式、半双工,最常用匿名管道:亲缘进程;命名管道:任意进程最快 IPC,零拷贝,但需要自己同步。

2026-04-05 00:49:33 437

原创 Linux 动静态库:制作、使用与 ELF 加载全解析

本文系统讲解Linux动静态库的开发与应用,涵盖从制作到运行的完整流程。首先对比动静态库的特性:静态库(.a)编译时嵌入可执行文件,运行时无需依赖但占用更多内存;动态库(.so)运行时加载,支持多进程共享。详细演示了通过Makefile制作两种库的方法,重点说明动态库的四种路径配置方案。深入剖析ELF文件结构,解释静态链接的合并重定位机制和动态链接的PIC/GOT/PLT原理。最后提供常用命令速查,帮助开发者掌握库依赖分析和二进制文件解析技巧。通过理解这些底层机制,开发者能更好地处理库依赖问题,并为性能优化

2026-04-05 00:34:35 435

原创 Linux基础 Ext 文件系统:从磁盘硬件到目录路径的全链路解析

本文系统讲解了Linux文件系统的核心原理。从磁盘物理结构(CHS/LBA寻址)出发,详细剖析了分区格式化、Ext文件系统的块组结构、inode机制、目录实现等关键概念。重点阐述了文件查找路径解析、挂载机制和软硬链接的区别,并揭示了文件增删查改的底层逻辑。文章完整呈现了Linux"一切皆文件"的设计思想,包括磁盘抽象为块数组、属性与内容分离、分治管理等核心理念,为深入理解Linux存储管理和性能优化奠定基础。

2026-04-01 20:35:01 383

原创 Linux 基础 IO 全解析:从文件本质到重定向与缓冲区

本文系统讲解Linux基础IO的核心知识,包括:1)文件概念(狭义与广义);2)C语言文件IO与Linux系统调用的关系;3)文件描述符(fd)原理与分配规则;4)重定向的实现机制;5)Linux"一切皆文件"的VFS设计思想;6)缓冲区的类型与作用。重点剖析了系统调用接口(open/read/write)与库函数的关系,通过文件描述符和dup2解析重定向原理,并对比用户缓冲与内核缓冲的差异。掌握这些知识是理解Linux系统编程的基础,为后续学习管道、套接字等高级IO奠定基础。

2026-04-01 20:26:22 557

原创 吃透Linux进程(五):进程控制全解析——从创建到替换

本文深入解析Linux进程控制的四大核心环节:1. 进程创建:通过fork函数实现,采用写时拷贝机制保证高效性和独立性;2. 进程终止:分析三种终止场景,详解退出码的作用与标准错误码;3. 进程等待:介绍wait/waitpid函数处理僵尸进程,对比阻塞与非阻塞等待;4. 程序替换:剖析exec函数簇原理,说明如何在不创建新进程的情况下加载新程序。文章结合底层机制、代码示例和实用技巧,系统讲解了Linux进程管理的核心知识。

2026-03-19 10:51:58 689

原创 吃透Linux进程(四):命令行参数与环境变量|进程地址空间深度解析

本文深入解析Linux系统编程三大核心概念:1.命令行参数(argc/argv)实现程序功能多样化;2.环境变量的全局继承特性及系统配置作用;3.进程地址空间的虚拟内存机制,包括mm_struct结构、页表映射和写时拷贝原理。重点阐述了虚拟地址与物理地址的区别、内存保护机制如何拦截野指针,以及不同类型变量的生命周期管理。这些知识构成了理解Linux进程机制和内存管理的基础框架。

2026-03-18 13:21:15 902 1

原创 Docker背景

Docker是Linux容器技术的易用增强工具,通过封装LXC简化容器操作,实现"一次封装,到处运行"。其核心创新在于镜像技术,将应用环境打包为可复用的镜像文件。相比虚拟机,Docker直接调用物理硬件资源,启动更快、资源占用更低。采用C/S架构,包含客户端、守护进程、镜像仓库等组件。Docker完美解决云时代软件部署痛点:通过镜像仓库实现统一部署,支持快速回滚,确保环境一致性,并提供多环境快速搭建方案。从依赖LXC到自主研发libcontainer,最终形成行业标准runC,Docke

2026-03-18 13:20:48 452

原创 吃透Linux进程(三):Linux 进程优先级与 O (1) 调度——从切换原理到内核实现

本文深入解析Linux进程调度与切换机制。进程切换通过保存/恢复上下文(TSS)实现,由时间片、进程退出或优先级变化触发。O(1)调度算法采用双队列(active/expired)、bitmap位图和双链表结构,确保切换时间恒定,同时解决进程饥饿问题。优先级机制并非绝对优先,而是兼顾效率与公平性,使高优先级进程更易获得CPU,但低优先级进程仍有机会执行。这些设计共同实现了Linux内核高效、公平的进程调度。

2026-03-17 13:13:03 540

原创 吃透 Linux 进程(二):系统进程——从排队原理到内核实现,一篇讲透

本文通俗易懂地讲解了Linux进程优先级的核心概念。优先级本质是资源不足时的排队规则,决定进程获取CPU时间片的顺序。关键点包括:1)优先级数字越小越优先;2)PRI(基础优先级)+NI(nice值)决定最终优先级;3)nice值范围-20到19对应40个等级;4)普通用户不能随意修改优先级;5)优先级与Linux O(1)调度算法密切相关,确保公平性和高效性。文章还解释了权限(UID)与优先级的区别,并强调不应随意更改优先级以免破坏系统平衡。通过食堂排队、医院就诊等生活化比喻,让读者轻松理解这一重要系统概

2026-03-17 13:12:49 533

原创 吃透 Linux 进程(一):从冯诺依曼到 PCB,一篇打通进程入门核心

本文深入解析Linux进程核心原理,从冯诺依曼体系结构出发,详细阐述了操作系统如何通过PCB(task_struct)管理进程。重点内容包括:进程本质是内核数据结构与程序代码的组合;Linux定义的7种进程状态及其转换;进程创建与销毁的底层机制;僵尸进程与孤儿进程的形成与处理。文章还提供了查看进程ID和创建子进程的示例代码,帮助读者理解进程管理的实现细节。掌握这些基础知识是学习进程调度、内存管理等高级主题的前提。

2026-03-16 23:41:59 564

原创 从内核到容器:Linux Namespace、Cgroups 与 LXC 实战全解

本文深入剖析容器技术的底层原理,通过实战演示Linux内核的Namespace和Cgroups两大核心机制。Namespace实现进程、网络、文件系统等环境隔离,Cgroups则控制CPU、内存等资源分配。文章详细展示了PID和Mount命名空间隔离的操作步骤,以及如何用Cgroups限制内存和CPU使用。最后通过LXC工具创建完整容器,验证容器=Namespace隔离+Cgroups限制+独立文件系统的本质。这些实践揭示了Docker等容器工具只是对Linux原生能力的封装,帮助读者真正理解容器技术的底层

2026-03-16 23:19:36 641

原创 Docker:容器技术的前世今生

容器技术早已不是新鲜事物,但自从 Docker 横空出世,它才真正走进大众视野,成为云原生时代的核心基础设施。从早期的进程隔离工具到如今的生态巨头,容器技术的演进背后是开发者对 "一次构建,到处运行" 的不懈追求。

2026-03-10 23:48:45 532

原创 Linux 基础开发工具全解析:从环境搭建到项目调试

本文详细介绍了Linux开发中的核心工具链,涵盖软件包管理(yum/apt)、代码编辑(vim)、编译构建(gcc/make)、版本控制(git)和程序调试(gdb)。通过具体示例讲解了各工具的使用方法:配置国内镜像源提升下载速度、vim三模式操作技巧、gcc四步编译过程、Makefile自动化构建规则、git三板斧工作流以及gdb调试命令。这些工具构成了Linux开发的基础环境,掌握它们能显著提升开发效率,理解从代码编写到部署的完整流程,为后续高级开发奠定基础。文章强调通过实践练习来熟练掌握这些看似复杂但

2026-03-10 23:37:35 541

原创 Docker之电商系统技术架构演进之路:从单机到千万级并发的蜕变

从单机架构到容器编排的微服务架构,电商系统的每一次架构升级,都是业务需求驱动技术变革的结果。架构设计并非一蹴而就,而是一个持续迭代、不断优化的过程,其核心始终是 “以技术支撑业务,以架构适配增长”。对于开发者而言,理解架构演进的逻辑,不仅能掌握各类技术组件的应用场景,更能建立 “从业务出发思考技术” 的思维方式 —— 这也是从初级开发走向中高级开发、架构师的关键一步。在实际开发中,无需盲目追求复杂架构,而是根据业务规模、团队能力、预算成本选择合适的架构,并为未来的发展预留足够的扩展空间。

2026-03-09 13:24:55 560

原创 Linux中的权限及操作

本文介绍了Linux系统的用户类型和权限管理机制。主要内容包括:Linux存在超级用户(root)和普通用户两种类型;文件访问者分为所有者(u)、所属组(g)和其他用户(o)三类;文件权限通过rwx字符或数字表示,可用chmod修改;还介绍了chown修改所有者、chgrp修改所属组、umask设置默认权限等命令。特别说明了目录权限的特殊性及粘滞位(t)的作用:设置粘滞位后,目录中的文件只能被超级用户、目录所有者或文件所有者删除。这些机制共同构成了Linux系统的安全访问控制体系。

2026-03-08 22:46:55 587

原创 Linux命令的使用

在以后冲击offer时,作为后端程序员,掌握Linux常用的终端指令是必要的但是Linux发行版的命令有200多个学习小tips:1、常用命令其实只有十多个2、对于常用命令:多用多敲,自然而然记住,切忌死记硬背对于不常用命令:非常非常不常用的,临时遇到学会运用搜索引擎。

2026-03-06 23:33:31 369

原创 C语言之指针(3)

这里我们使用&arr[0]的方式拿到了数组第一个元素的地址,但是其实数组名本来就是地址,而且是数组首元素的地址,我们来做个测试。2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址(整个数组的地址和数组首元素的地址是有区别的)我们发现数组名和数组首元素的地址打印出的结果一模一样,数组名就是数组首元素(第一个元素)的地址。那么在数组传参的时候,传递的是数组名,也就是说本质上数组传参本质上传递的是数组首元素的地址。数组名arr是数组首元素的地址,可以赋值给p,其实数组名arr和p在这里是等价的。

2023-11-28 23:40:57 1247 7

原创 C语言之指针(2)

如果该表达式为假(返回值为零),assert()就会报错,在标准错误流stderr|中写入一条错误信息,显示没有通过的表达式,以及包含这个表达式的文件名和行号。assert()的使用对程序员是非常友好的,使用assert()有几个好处:它不仅能自动标识文件和出问题的行号,还有一种无需更改代码就能开启或关闭assert()的机制。,在Release 版本中,直接就是优化掉了。Swap1函数在使用的时候,是把变量本身直接传递给了函数,这种调用函数的方式我们之前在函数的时候就知道了,这种叫传值调用。

2023-11-26 23:52:21 1174 6

原创 C语言之指针(1)

我们知道计算上CPU (中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数据也会放回内存中,那我们买电脑的时候,电脑上内存是8GB/16GB/32GB等,那这些内存空间如何高效的管理呢?其实也是把内存划分为一个个的内存单元,每个内存单元的大小取1个字节。计算机中常见的单位(补充)∶一个比特位可以存储一个2进制的位1或者0每个内存单元内可以放每个内存单元都有一个编号,CPU通过这些编号可以快速找到一个内存空间。我们称内存单元的变化为地址。C语言中给地址起了新的名字——指针。

2023-11-18 23:32:07 334 13

原创 C语言之分支和循环(2)

C语言中提供了三种循环语句,分别为while,for以及do-while正如名字的不同,它们的语法结构、适用场景、使用频率......都大不相同。

2023-11-05 00:17:21 328 4

原创 C语言之分支和循环(1)

else总是与最接近的if匹配,不是和代码中对齐的if相匹配,在写代码时应注意{}的合理使用,会使我们的代码可读性跟高。,此外为了避免错误,在只有一条语句时我们也可以加上{}在if和else语句中默认只控制一条语句,所以如果要。表达式为假,语句不执行。语句的时候,这时候要不就不做处理,要不就得在。语句的时候,我们经常可能遇到一种情况,比如。语句,代码会继续玩下执行,有可能执行其他。在C语言中,0为假,非0为真。语句也是分支效果的,只有在。语句连用,构成多重判断。语句中的代码,直到遇到。

2023-11-04 00:16:51 266 6

原创 C语言之 数组

C99中的变⻓数组 在C99标准之前,C语⾔在创建数组的时候,数组⼤⼩的指定只能使⽤常量、常量表达式,或者如果我 们初始化数据的话,可以省略数组⼤⼩。从输出的结果来看,每⼀⾏内部的每个元素都是相邻的,地址之间相差4个字节,跨⾏位置处的两个元 素(如:arr[0][4]和arr[1][0])之间也是差4个字节,所以。完全初始化:int arr3[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};不完全初始化:int arr1[3][5] = {1,2};

2023-10-29 23:47:06 276 7

原创 rand()和猜数字游戏

Hello大家好啊!!今天给大家带来的是编写猜数字小游戏的教程,以及介绍所需应用到的rand()游戏中的代码块的作用和用途均在代码中以注释形式标出希望可以让你有所收获如有不足请多多指教。

2023-10-25 12:28:46 212 2

原创 关于VS2022的一些注意事项

运用 _CRT_SECURE_NO_WARNINGS (tips:在前面要加上“#define ”)选择打开方式用vs2022打开 ,首行输入#define _CRT_SECURE_NO_WARNINGS。这时只需要点击【视图】——【解决方案资源管理器】 就ok啦!缺点:仅适用与vs,不是面向c语言的(T_T)希望这篇分享可以帮助到初次使用vs的同学们!【复制】一份到桌面(注:一定是复制!却遭到了现实的迎头痛击 ——报错!优点 :顺利运行啦!方案一:用vs的方法。

2023-10-20 18:13:49 550 2

原创 如何用C语言输出九九乘法表

但是...好像不完全正确?顺利运行但是发现实际应用时的问题“有一百个*难道要一个一个输入吗”emmm....好像还是不那么对?小时候看到的好像是三角形的?Step1: 查资料找到样例,意外收获“%-2d”的含义。SECOND TRY:运用“%2d”Step2.2:用循环的嵌套简化输入。ok,现在进入正题“输出九九乘法表”THIRD TRY:运用“\t”Step2.1:了解底层原理。

2023-10-19 23:44:47 394 1

原创 The First Try

首先,先立一个“小目标”:一年内学习c语言,完成许多项目和很多练习,可以熟练写出较为优质的代码。2、尽快学习基础知识,打牢地基,坚持高质量高效率练习,后期时间宽裕争取每天提交练习。我是一名新接触计算机科学与技术的大一新生,现在让我们开始c语言的学习之旅吧。3、假期是很好的翻身机会,可以加紧学习c语言,并学习一些其他辅助工具。5、希望以后可以入职百度、华为、阿里、腾讯等IT公司。为了实现这个“小目标”,在这里给自己写一个“备忘录”1、将学校课程和自我学习相结合,合理调配时间。4、每周学习16h左右;

2023-10-14 11:06:09 109 2

空空如也

空空如也

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

TA关注的人

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