自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 《Linux篇》进程等待(wait、waitpid)与进程程序替换(exec等接口)

摘要:本文介绍了进程等待的必要性和方法,以及进程程序替换的原理和实现。进程等待是父进程回收子进程资源并获取退出信息的关键机制,避免僵尸进程导致内存泄漏。详细讲解了wait和waitpid两种方法,包括阻塞与非阻塞等待模式。此外,阐述了进程程序替换原理,通过exec系列函数实现子进程执行全新程序,确保进程独立性。文章通过代码示例展示了execl等接口的使用方式,并分析了不同替换函数的参数特点,为进程管理和程序替换提供了实用指导。(148字)

2025-10-31 20:16:58 994

原创 《Linux篇》进程控制——进程创建(写时拷贝)、进程终止(退出码,exit,_exit)

本文主要介绍了进程创建和终止的相关知识。在进程创建方面,重点讲解了写时拷贝技术,它能提高内存使用率并保证进程独立性,同时分析了fork失败的原因。在进程终止部分,详细说明了退出码的作用、获取方式及其意义,对比了return、exit和_exit的区别,指出exit会刷新缓冲区而_exit不会。文章还介绍了进程退出的三种情况,并强调了进程终止必须通过系统调用完成。最后探讨了输出缓冲区的存储位置问题。

2025-10-28 20:54:23 645

原创 《Linux篇》进程/虚拟地址空间

本文主要介绍了进程地址空间(虚拟地址空间)的概念及其重要性。通过父子进程中相同虚拟地址不同值的例子,说明虚拟地址与物理地址的区别。文章解释了虚拟地址空间的划分(如代码区、数据区等)及其底层结构体mm_struct,并阐述了写时拷贝机制保证进程独立性。同时说明了全局变量、字符串常量的存储特性。最后,分析了使用虚拟地址的三大原因:安全审核、内存有序管理、进程与内存管理解耦。虚拟地址通过页表映射物理内存,既能保护物理内存安全,又能让每个进程拥有统一的地址视图。

2025-10-27 17:50:52 821

原创 《Linux篇》命令行参数与环境变量

本文介绍了命令行参数和环境变量的相关知识。main函数可以接收命令行参数argc和argv,其中argv[0]是程序名,argc表示参数个数。环境变量是系统级别的全局变量,通过PATH等变量影响程序执行路径。文章讲解了三种获取环境变量的方法:通过main函数参数、getenv函数和C语言的全局指针environ。环境变量具有全局属性,可以被继承到子进程。最后解释了环境变量的作用,如实现用户专属程序执行权限等。

2025-10-26 20:09:27 397

原创 《linux篇》进程优先级、进程切换、进程调度

进程的优先级,包括nice值、进程切换、进程调度,包括O(1)调度算法等等

2025-10-10 15:51:30 612

原创 《Linux篇》进程状态——浅度、深度睡眠状态、僵尸状态、运行状态

本文摘要: 文章系统讲解了进程状态的概念与分类。首先介绍传统教材中的进程状态模型,强调进程状态本质是task_struct中的数字标识。重点分析了运行状态(R)、阻塞状态(S/D)和挂起状态的区别,指出运行队列管理机制。详细解释了Linux特有状态:可中断睡眠(S)、不可中断磁盘睡眠(D)、暂停状态(T)、追踪状态(t)、死亡状态(X)和僵尸状态(Z)。特别警示僵尸进程会导致内存泄漏,并说明孤儿进程会被init进程领养。文章通过"先描述再组织"的管理思想,揭示了操作系统对进程资源的组织方

2025-10-09 16:53:08 754

原创 《Linux篇》进程概念——task_struct、fork创建子进程

本文从硬件和软件两个角度介绍了计算机系统的基本结构。硬件层面阐述了冯诺依曼体系结构的四大单元(输入设备、输出设备、存储器、中央处理器)及其交互关系,重点说明了内存作为CPU与外设之间缓存的关键作用。软件层面讲解了操作系统作为资源管理软件的本质,指出其采用"先描述,再组织"的管理方法,通过PCB等数据结构管理进程。文章还通过Linux系统实例演示了进程查看、PID获取等操作,揭示了系统调用与用户程序间的关系。最后解释了进程创建机制,说明Linux通过父进程创建子进程实现进程增多。全文贯穿了

2025-10-09 16:52:16 646

原创 《C语言篇》一篇文章搞懂C语言的预处理(#define定义变量、定义宏、条件编译等等)

这个我们之前是经常使用的。当然不知可以定义整数,浮点数、字符串、字符都是可以的。一下有几个特殊的例子;特别是对于swich语句来说,每次都要写个break比较麻烦,如下:而我们可以使用#define来重新定义它,如下:【注意】在define定义标识符的时候,建议不要在最后加上;在有些场景下会出问题。1000;//错误1//括号里面有个分号//错误2max = MAX;

2025-07-15 21:47:32 935

原创 《Linux篇》自动化构建-make/Makefile

本文介绍了使用Makefile实现多文件自动化编译的方法。Makefile通过定义编译规则,可以高效管理多个源文件的编译顺序和依赖关系。文章详细讲解了Makefile的基本语法,包括目标文件、依赖关系和编译命令的编写方式,并通过实例演示了编译和清理功能。重点分析了Makefile的工作原理:通过对比源文件和目标文件的时间戳(stat)判断是否需要重新编译,并解释了.PHONY伪目标的作用。此外,文章还展示了如何优化Makefile,包括使用变量、模式规则和自动推导,使其更具通用性。最后,文章通过栈结构示意图

2025-07-13 22:11:45 793

原创 《Linux篇》一篇文章彻底搞懂Linux的编译器gcc

在上一篇文章中,我们学会了如何使用vim来写代码,在这节我们主要来学习如何把我们写的代码编译生成可执行文件。

2025-07-13 12:08:55 589

原创 《Linux篇》基础开发工具——vim详细介绍

在Linux下安装软件, ⼀个通常的办法是下载到程序的源代码, 并进⾏编译, 得到可执⾏程序。但是这样太⿇烦了, 于是有些⼈把⼀些常⽤的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在⼀个服务器上, 通过包管理器可以很⽅便的获取到这个编译好的软件包, 直接进⾏安装。软件包和软件包管理器, 就好⽐ “App” 和 “应⽤商店” 这样的关系。

2025-04-28 22:06:42 1313

原创 C++知识整理day12——set容器和map容器

我们先了解一下什么是序列式容器和关联式容器:string、vector、list、deque、array、forward_list等,这些容器统称为序列式容器,因为逻辑结构为线性序列的数据结构,两个位置存储的值之间⼀般没有紧密的关联关系,⽐如交换⼀下,他依旧是序列式容器。顺序容器中的元素是按他们在容器中的存储位置来顺序保存和访问的。关联式容器也是⽤来存储数据的,与序列式容器不同的是,关联式容器逻辑结构通常是⾮线性结构,两个位置有紧密的关联关系,交换⼀下,他的存储结构就被破坏了。

2025-03-07 21:35:55 1013

原创 C++知识整理day11——二叉搜索树(二叉搜索树的插入、查找、删除及完整代码实现)

二叉搜索树又称为二叉排序树,为什么这么说呢,我们学过就知道,对二叉搜索树进行一遍中序遍历,就会实现排序的功能。这里先声明一下,对于二叉搜索树,“改”是没有必要的,而且改完数据再恢复到二叉搜索树很难设计,因此我们只会实现增、删、查。当然,朴素的二叉搜索树在项目中是很少使用的,之后我们会看到他们的变种,如AVL树、红黑树。删除的过程最为复杂,首先我们要确定这个值在书中存在不存在,不存在我们直接返回false。例如,我们还是给如上的例子,我们想插入4怎么实现呢?综合来说,二叉搜索树的增删查的时间复杂度为O(N)

2025-03-05 22:48:51 1219 1

原创 C++知识整理day10——多态(多态的定义和实现、虚函数重写/覆盖、override和final关键字、纯虚函数和抽象类、多态的原理)

多态是⼀个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为。⽐如Student继承了Person。Person对象买票全价,Student对象优惠买票。

2025-02-27 22:56:51 967

原创 C++知识整理day9——继承(基类与派生类之间的转换、派生类的默认成员函数、多继承问题)

继承(inheritance)机制是⾯向对象程序设计使代码可以复⽤的最重要的⼿段,它允许我们在保持原有类特性的基础上进⾏扩展,增加⽅法(成员函数)和属性(成员变量),这样产⽣新的类,称派⽣类或子类。继承呈现了⾯向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复⽤,继承是类设计层次的复⽤。

2025-02-25 22:30:23 767

原创 《Linux篇》谈谈对Linux权限的理解

我们还可以发现,我们切换后,pwd查看位置是不发生改变的,如果我们想要切换完后回到该用户的家目录,可以使用 su - username,对于普通用户su到root,可以省略root,直接su即可切换到root。我们可以看到我们刚刚创建的zhangsan是不可以使用sudo的,因为他不在那个组(信任列表)里面,他需要找一个在sudo组里面的人给他加到这个组里面去才行。Linux系统是非常注重安全性的,权限是较为重要的一部分,不同的用户当然有着不同的权限,这一节,就来谈谈我对于Linux权限的理解。

2025-02-24 22:53:51 861

原创 C++知识整理day8——模版--一篇完整版搞定模板问题(函数模板、类模板、模板特化)

上述示例中,p1指向的d1显然小于p2指向的d2对象,但是Less内部并没有比较p1和p2指向的对象内容,而比较的是p1和p2指针的地址,这就无法达到预期而错误。A:泛型编程就类似于生活中的印刷术一样,有一个模具,我们需要印刷哪一本书,就会有对应的模具,我们不需要来一页纸,就重新写字,我们只需要找到这页纸的模具就可以了。通常情况下,使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些错误的结果,需要特殊处理,比如:实现了一个专门用来进行小于比较的函数模板。

2025-02-22 14:28:17 907

原创 C++知识整理day7容器——stack和queue容器(包括deque容器、priority_queue容器)

我们可以看到,在我们之前学的容器中,例如vector,里面调的都是内存池,而stack和queue里面都是一个容器适配器。Q:什么是适配器?A:适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。例如:Q:为什么还要有deque这种容器?A:首先,deque是双带你队列,它允许两端都可以插入和删除元素。

2025-02-06 21:24:13 682

原创 C++知识整理day6容器——vector容器

在上一节中,我们主要学习了string容器的常见操作,当然对于模拟实现string类还没有更新,我会在之后进行更新,先把这几个容器的常见操作学了,方便后面的算法。注意:对于insert和erase操作,他不像string类那样,可以通过下标找到要修改的位置,vector类是不支持的。一般我们都是通过迭代器的指向来找到要修改的位置的,迭代器是可以加数字的,从而变相的实现。,之后对于容器的操作常见接口就不会那么详细的说明了,用法都是大致一样的。容器的迭代器都是一样的,可以参考上篇string类的迭代器。

2025-02-06 21:23:41 359

原创 堆的实现——堆的应用(堆排序)

堆的模拟实现,以及堆的排序

2025-02-04 21:04:08 873

原创 C++知识整理day5容器——string容器

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。STL的六大组件:我们之前在数据结构阶段学了很多,包括顺序表、链表、栈、队列、二叉树等等;在之后我们在做算法题时,需要用到哪个数据结构,靠我们手写是不太现实的,C++帮我们封装了很多的容器,本质上他们都是给我们实现好的一个个类,我们直接使用即可。当然我们也要学习他的底层,这是很重要的。本节我们先来学习一下string类。

2024-12-10 16:01:12 1073

原创 C++知识整理day4内存管理——new和delete详解

int main()// new/delete 和 malloc/free最大区别是// new/delete对于【自定义类型】除了开空间//还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;

2024-12-06 18:50:54 899

原创 C++知识整理day3类与对象(下)——赋值运算符重载、取地址重载、列表初始化、友元、匿名对象、static

赋值运算符重载是六个默认成员函数之一,在讲解这个我们要先了解一下运算符重载。当运算符被用于类类型的对象时,C++语言允许我们通过运算符重载的形式指定新的含义。C++规定类类型对象使用运算符的时候,必须转换成调用对应运算符重载,若没有对应的运算符重载,则会报编译错误。注意:对于下面的例子中,都是使用的Date类。运算符重载是具有特别名字的函数,他的名字是由operator和后面要定义的运算符共同构成。和其他函数一样,他也具有其返回类型和参数列表以及函数体。重载运算符函数的参数个数和该运算符作⽤的运算对象

2024-12-03 19:22:22 1147

原创 C++知识整理day2类与对象(上)——类的定义、实例化、this指针、构造、析构、拷贝构造函数

class为定义类的关键字,Stu为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略(与结构体struct一样)。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_ 或者 m开头,注意C++中这个并不是强制的,只是⼀些惯例,每个地方要求都不一样。

2024-11-24 21:08:30 735 1

原创 C++知识整理day1——前置基础知识整理(命名空间、输入输出、函数重载、引用)

定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不在冲突了。C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。

2024-11-22 20:58:22 1114

原创 《深度学习》VGG网络

2014年,⽜津⼤学计算机视觉组(Visual Geometry Group)和GoogleDeepMind公司的研究员⼀起研发出了新的深度卷积神经⽹络:VGGNet,并取得了ILSVRC2014⽐赛分类项⽬的第⼆名,主要贡献是使⽤很⼩的卷积核(3×3)构建卷积神经⽹络结构,能够取得较好的识别精度,常⽤来提取图像特征的VGG-16和VGG-19。

2024-11-14 21:53:43 553

原创 《深度学习》AlexNet网络

2012年,AlexNet横空出世,该模型的名字源于论⽂第⼀作者的姓名AlexKrizhevsky。AlexNet使⽤了8层卷积神经⽹络,以很⼤的优势赢得了ImageNet 2012图像识别挑战赛。它⾸次证明了学习到的特征可以超越⼿⼯设计的特征,从⽽⼀举打破计算机视觉研究的⽅向。

2024-11-14 21:40:58 855

原创 《目标检测》R-CNN网络基础(RCNN,Fast-RCNN)

训练阶段多,训练耗时: 微调CNN⽹络+训练SVM+训练边框回归器。预测速度慢: 使⽤GPU, VGG16模型处理⼀张图像需要47s。占⽤磁盘空间⼤:5000张图像产⽣⼏百G的特征⽂件。数据的形状变化:候选区域要经过缩放来固定⼤⼩,⽆法保证⽬标的不变形CNN⽹络不再对每个候选区域进⾏特征提取,⽽是直接对整张图像进⾏特征提取,这样减少了很多重复计算。⽤ROI pooling进⾏特征的尺⼨变换,来满⾜FC全连接层对输⼊数据尺度的要求。

2024-11-14 20:42:28 1589

原创 卷积神经网络CNN——卷积层、池化层、全连接层

我们之前学习了全连接的神经网络,如下图:利用全连接神经网络对图像进行处理存在以下两个问题:CNN⽹络受⼈类视觉神经系统的启发,⼈类的视觉原理:从原始信号摄⼊开始(瞳孔摄⼊像素 Pixels),接着做初步处理(⼤脑⽪层某些细胞发现边缘和⽅向),然后抽象(⼤脑判定,眼前的物体的形状,是圆形的),然后进⼀步抽象(⼤脑进⼀步判定该物体是只⼈脸)。下⾯是⼈脑进⾏⼈脸识别的⼀个示例:CNN网络主要有三部分构成:卷积层、池化层和全连接层构成。其中卷积层是负责提取图像中的局部特征;池化层是用来答复降低参数量级(降维

2024-11-13 17:02:16 18718 2

原创 《目标检测》——基础理论知识(目标检测的数据集、评价指标:IOU、mAP、非极大抑制NMS)

Annotations下存放的是xml⽂件,描述了图⽚信息,如下图所示,需要关注的就是节点下的数据,尤其是bndbox下的数据.xmin,ymin构成了boundingbox的左上⻆,xmax,ymax构成了boundingbox的右下⻆,也就是图像中的⽬标位置信息。NMS的原理是对于预测框的列表B及其对应的置信度S,选择具有最⼤score的检测框M,将其从B集合中移除并加⼊到最终的检测结果D中.通常将B中剩余检测框中与M的IoU⼤于阈值Nt的框从B中移除.重复这个过程,直到B为空。

2024-11-08 15:37:33 1859

原创 全连接神经网络案例——手写数字识别

使⽤⼿写数字的MNIST数据集如上图所示,该数据集包含60,000个⽤于训练的样本和10,000个⽤于测试的样本,图像是固定⼤⼩(28x28像素),其值为0到255。

2024-11-07 20:20:30 961

原创 《深度学习》——深度学习基础知识(全连接神经网络)

在介绍神经网络之前,我们先看下面这幅图:人工智能>机器学习>深度学习深度学习是机器学习的⼀个⼦集,也就是说深度学习是实现机器学习的⼀种⽅法。与机器学习算法的主要区别如下图所示:传统机器学习依赖于人工设计特征,并进行特征提取,而深度学习算法不需要人工,而是依赖算法自动提取特征,这也是深度学习被看做黑盒子、可解释性差的原因。卷积神经网络(CNN)循环神经网络(RNN)生成对抗网络(GAN)深度强化网络(DRN)

2024-11-07 20:20:01 1746 2

原创 pytorch框架(上)——基本操作、自动求导、梯度的概念

对比有无初始化的矩阵: 当声明一个未初始化的矩阵时, 它本身不包含任何确切的值. 当创建一个未初始化的矩阵时, 分配给矩阵的内存中有什么数值就赋值给了这个矩阵, 本质上是毫无意义的数据.torch.rand()是以标准高斯分布进行初始化的(返回的是均匀分布的[0, 1))注意:torch.Size函数本质上返回的是一个tuple, 因此它支持一切元组的操作。注意:这里的矩阵我们是没有初始化的,只是创建了个五行三列的矩阵,值是自动给的。将tensor转换成ndarray。将ndarray转换成tensor。

2024-10-30 12:13:06 976

原创 【机器学习】——numpy教程

numpy是一个开源的Python库,也就是相当于Python中的列表,即多维数组。那么为什么有了列表,我们还需要使用numpy呢?numpy可以计算大型的多维数组和矩阵操作,他的计算能力更强,运行的速度更快。其实,Python中的列表,要想找到列表中对应的元素需要先通过寻找该元素的地址才可以访问到元素,因此,速度自然会慢一些。而Python中的numpy是存储在一片连续的地址空间上的,因此访问元素速度更快,类似于c++中的数组,物理空间是连续的。

2024-10-25 16:08:21 3259

原创 【人工智能】——matplotlib教程

matplotlib 是一个用于创建二维图表和数据可视化的 Python 库,它提供了一种类似于 MATLAB 的绘图接口。matplotlib 可以用来绘制线图、散点图、柱状图、饼图等各种类型的图表,并且支持对图表的各种属性进行自定义设置,以及添加文本、注释、图例等元素。第一步:创建画布plt.figure里面有两个参数,一个是figsize指定画布的大小(长和宽),一个是dpi指定画布的清新度第二步:绘制图像默认是折线图第三步:显示图像plt.show()示例:显示上海一周的天气情况。

2024-10-25 14:30:14 1153

原创 《MySQL数据库》day4 --索引和视图

索引是在数据库表的字段上添加的,是为了提高查询效率存在的一种机制。一张表的一个字段可以添加一个索引,当然,多个字段联合起来也可以添加索引。索引相当于一本书的目录,是为了缩小扫描范围而存在的一种机制。List item一页一页挨着找,直到找到为止,这种查找方式属于全字典扫描。效率比较低。先通过目录(索引)去定位一个大概的位置,然后直接定位到这个位置,做局域性扫描,缩小扫描的范围,快速的查找。这种查找方式属于通过索引检索,效率较高。例如 t_user 这张表2 lisi。

2024-10-14 15:35:16 1350

原创 《MySQL数据库》day3 -- 约束条件(非空、唯一性、主键、外键)、事务的四大特性(隔离性)

约束对应的英语单词:constraint在创建表的时候,我们可以给表中的字段加上一些约束,来保证这个表中数据的完整性、有效性!!!约束的作用就是为了保证:表中的数据有效!!一个事务其实就是一个完整的业务逻辑。是一个最小的工作单元。不可再分。什么是一个完整的业务逻辑?假设转账,从A账户向B账户中转账10000.将A账户的钱减去10000(update语句)将B账户的钱加上10000(update语句)这就是一个完整的业务逻辑。以上的操作是一个最小的工作单元,要么同时成功,要么同时失败,不可再分。

2024-03-26 18:07:50 1128

转载 《Django项目》day4 -- 部署nginx与对接acapp

【代码】《Django项目》day4 -- 部署nginx与对接acapp。

2024-03-26 16:45:55 456

原创 《Django项目》day1--配置docker、git、项目的创建

创建一个game文件夹,下面有很多文件,①admin.py:用来存储管理员页面(能够看到的数据库) ②model.py:用来定义各种数据库的表 ③tests.py:不用管,用不着 ④views.py:用来写视图、函数的 ⑤migration:系统自动生成,不用管 ⑥apps.py:只会用到一次,后面会说。我们所租的云服务器属于第二层,第一层是VMware下的终端,我们以后所管理的项目都应该在第三层。_ ,我们怎么管理呢?这时候,我们在网上上输入:自己的ip地址 + :8000 就可以登上自己的项目了,

2024-03-13 16:55:56 1144

原创 《MySQL数据库》day2--连接查询、子查询、union、limit、DML语句

从一张表中单独查询,称为单表查询。emp表和dept表联合起来查询数据,从emp表中取员工名字,从dept表中取部门名字。这种跨表查询,多张表联合起来查询数据,被称为连接查询。selectfromwheregroup byhavingorder bylimit执行顺序?

2024-03-09 14:29:15 1783

空空如也

空空如也

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

TA关注的人

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