自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL详细安装、配置过程,多图,详解

本文适合centos7环境下安装mysql,在安装和卸载过程中,都在root用户下完成。

2024-05-20 23:47:33 750

原创 C++下的内存管理

malloc不方便解决动态申请的自定义类型对象的初始化问题。单个空间开辟int main()//创建一个A类型的对象,为这个对象开辟一块空间//malloc 只是开辟了空间//new 在开辟空间的同时进行了调用构造函数,进行了初始化free(p1);delete p2;return 0;多个int main()A aa1(1);A aa2(2);A aa3(3);

2024-05-19 23:10:28 621

原创 const成员、友元成员、static成员

将const修饰的成员函数称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明再该成员函数中,不能对类的任何成员进行修改。友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加。内部类是外部类的友元类,内部类可以通过外部类的对象参数来访问外部类中的所有成员,但是外部类不是内部类的友元。这两个默认成员函数一般不用重新定义,编译器默认会生成。如果C是B的友元,B是A的友元,则不能说明C是A的友元。

2024-05-18 22:53:31 877

原创 运算符重载:赋值、判断

此时用户再在类外自己实现一个全局的赋值运算符重载,就和编译器在类中生成的默认值运算符重载冲突了,所以赋值运算符重载只能是类的成员函数。C++为了增强代码的可读性,引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名以及参数列表,其返回值类型与参数列表与普通的函数类似。先判断两个参数是否是同一个对象,如果是则直接返回第一个对象,如果不是则将第二个参数的成员变量依次赋值给第一个参数的成员变量,然后返回第一个参数的引用。根拷贝构造的行为类似,内置类型值拷贝,自定义类型调用它的赋值。

2024-05-15 23:40:34 870

原创 默认成员函数:析构、深浅拷贝

s2使用s1拷贝构造,而Stack中没有显式定义的拷贝构造函数,此时编译器默认生成了一个拷贝构造函数,默认的拷贝构造函数是按照值拷贝的方式进行拷贝的,即将s1中的成员变量存储的值原封不动的赋值给了s2中的成员变量,拷贝结束之后,s2中的成员变量指向了和s1成员变量指向的同一片空间。当程序结束的时候,s2先销毁,s1后销毁,s2先调用析构函数对这片申请的空间进行了析构,然后s1销毁,此时s1并不知道这片内存空间已经销毁了,再次对这片空间进行了析构,此时就会崩溃。对象的栈帧的开辟和销毁都是由编译器进行的。

2024-05-14 23:21:03 739

原创 默认成员函数:构造

构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证每个数据成员都有一个合格的初始值,并且在对象整个声明周期中只调用一次。构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并不是开空间创建对象,而是初始化对象。如果成员都是自定义类型,或者声明时给了缺省值,可以考虑让编译器自己生成构造函数。默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。任何类在上面都不写时,编译器会自动生成六个默认成员函数。

2024-05-12 23:34:58 959

原创 基础I/O:文件系统调用接口

参数标志必须包括以下访问结点之一:O_RDONLY、O_WRONLY、O_RDWR.着三种方式分别表示只读、只读或读/写文件。在操作系统提供了类似open这种调用接口的情况下,C语言仍然对其进行了封装,主要原因是为了保证程序的可移植性和跨平台性。在files_struct数组当中,找到当前没有被使用的最小的一个下标,做为新打开的文件描述符。在实际的运行之后,本应该打印在显示器上的数据,却写入到了。系列的函数,都是对系统调用的二次封装,方便二次开发。都属于系统提供的接口,系统调用接口。

2024-05-11 21:54:12 546

原创 基础I/O:C文件、系统文件I/O

一定的时间的段内,系统中存在多个和进程,也可能同时存在更多的被打开的文件,操作系统OS需要对这个多个被进程打开的文件进行管理,先描述、再组织。内核中一定要有描述被打开文件的结构体,并且用其定义对象。在C语言中,以w的方式也就是以只写的方式打开文件,如果文件存在,则先将文件清空之后,再进行写入。如果文件不存在,则先创建一个文件,再进行写入。在linux中,输出重定向,每次写入的时候都会先清空文件,再写入,如果文件不存在则新建一个文件。

2024-05-10 22:58:55 411 1

原创 类和对象以及this指针详解

类体:由成员函数和成员变量组成一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主题,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。定义方式方式一声明和定义全部放在类体中成员函数如果在类中定义,编译器可能会将其党曾内联函数处理public:public:char* _sex;int _age;方式二类声明放在.h文件中,成员函数定义放在.cpp文件中。

2024-05-07 08:24:40 574

原创 Linux详解:简单实现shell

简单实现shell

2024-05-05 20:55:45 69

原创 Linux详解:进程等待

子进程退出,父进程不进行回收的话,就可能造成僵尸进程,进而造成内存泄露

2024-04-29 23:00:45 1101 1

原创 Linux详解:进程终止、错误码

每个退出码都可以转化成为相对应的退出错误描述。

2024-04-28 21:11:07 443

原创 Linux详解:进程创建

当这个进程进行fork 的时候,创建了一个子进程,此时子进程的pcb是继承于父进程,所以子进程的虚拟内存以及页表以及映射的物理内存等信息都是相同的,所以此时父子进程的虚拟内存是相同的,页表映射的数据段和代码段的物理内存也是相同的,当有一方进行数据修改的时候,进行写入的时候,为了双方互不影响,会给试图进行写入的一方拷贝一份代码块,将页表映射的代码块映射到拷贝的物理内存的地址处,然后再进行写入。在linux 中fork函数,它从已经存在的进程中创建一个新的进程,新进程为子进程,而原进程为父进程。

2024-04-27 22:12:19 1220

原创 Linux环境变量

所有的环境变量默认情况下保存在磁盘文件中读取到的,读取到内存中,形成了shell中的环境变量,关闭shell就删除了所有内存中的环境变量,再次创建登录时再次从磁盘文件中读取。PATH环境变量修改之后,可以通过重新启动shell软件,可以重新初始化PATH环境变量。环境变量具有全局属性,环境变量会被所有的子进程包括孙子进程进行继承。定义变量的本质,就是开辟空间,在运行期间我们的程序也能开辟空间。系统的环境变量,本质上就是系统自己开辟空间,给它名字和内容即可。环境变量,一般是系统内置的具有特殊用途的变量。

2024-04-26 23:17:13 224

原创 Linux进程详解:进程优先级,调度算法,进程特性

在系统当中查找一个最合适调度的进程的时间复杂度是一个常数,不随着进程的增多而导致时间成本增加,我们称之为进程调度O(1)算法!当活动队列上的进程运行完毕之后,只需要交换active指针和expire指针的内容,就相当于具有了一批新的活动进程。优先级较高的进程,优先得到资源,后续还有很多的进程产生,导致常规的进程很难享受到CPU资源。可是活动队列上的进程会越来越少,过期队列上的进程会越来越多,因为进程时间片到期时一直都存在的。Linux优先级是可以被修改的,Linux的优先级的范围。,一共40个优先等级。

2024-04-25 21:32:19 837

原创 Linux进程详解三:进程状态

当一个进程在cpu的运行队列中,先时运行状态,但是这个进程需要的硬件资源还没有准备好,例如从键盘中读取数据,此时还没有读取到,此时操作系统会将这个进程从cpu的运行队列中拿下来,链入到键盘硬件相对应的排队队列中,并将这个进程的状态设置为阻塞状态,当进程从键盘中获取足够的资源的时候,操作系统再将这个进程拿到CPU的运行队列中重新进行排队。当父进程比子进程提前结束,父进程会被他的父进程bash回收,此时父进程被回收后,子进程就变成了孤儿,此时子进程会被1号进程领养,1号进程就是系统进程。如果父进程不读取呢。

2024-04-24 23:05:56 1201

原创 Linux进程详解二:创建、状态、进程排队

当父进程中过的代码执行到fork的时候,进入fork的内部函数中,fork的内部函数中首先创建一个子进程然后将父进程的部分属性继承到新创建的子进程中,将父进程对应的代码数据与子进程进行共享,此时子进程已经创建完成了,但是fork函数还没有执行完成,fork需要进行return返回,此时父进程和子进程已经同时存在了,所以fork的return被执行了两次,一次在父进程中,一次在子进程中。因为父子关系中,父亲只能有一个,而儿子可以有多个,对于儿子来说,他的父亲是唯一存在的,所有用儿子找父亲很明确。

2024-04-23 23:01:03 1031

原创 Linux进程详解一

用户要获取到进程的标示符,也就是pcb中的信息的时候,必须要调用系统调用,因为pcb在操作系统的内核中,用户不可以越过操作系统直接获取数据。Linux会将进程的相关信息,在/proc目录下,以一个目录的形式存放,这个进程的所有属性都存放在这个目录下面。所有对进程的控制和操作,都只和进程的PCB有关,和进程的可执行程序没有关系。几乎所有的独立的指令也是程序,所有在执行指令的时候也要变成进程。我们在命令行中启动的所有的程序,产生的进程都是bash的子进程。一般在Linux中,所有普通进程都有其对应的父进程。

2024-04-22 23:37:04 583

原创 计算机体系结构

在一台计算机中,有着多种设备,输入设备,输出设备,存储设备,CPU,这些设备的速度不同,有的速度很快,有的速度很慢,在不存在内存的情况下,计算机的效率取决于这些设备中速度最慢的设备。设备之间的数据流动,本质上时设备之间进行数据的来回拷贝,拷贝的整体速度,是决定计算机效率的重要指标。水桶的最大存储容量,不取决于木桶最长的边,取决于最短的。多核,一个CPU中存在一个控制器多个运算器。

2024-04-21 22:20:34 172

原创 Linux下:gcc/g++调试工具gdb

程序的发布方式有两种,debug模式和release模式Linux gcc/g++出来的二进制程序,默认是release模式gdb mybin。

2024-04-21 22:19:06 334

原创 git工具简单使用

远端仓库相当于对本地仓库的一个备份,push的时候相当于将本地仓库与远端仓库进行同步。将暂存区中的文件数据,提交到本地仓库中,形成历史修改记录,历史版本。查看当前暂存区,本地仓库,远端仓库的区别。git commit 本地提交。.git目录 本地仓库的意思。git push 远端提交。

2024-04-20 23:55:56 376

原创 Make/Makefile详解

Linux项目自动化构建工具。

2024-04-20 23:54:44 839

原创 动静态库详解

动静态库的区别:静态库在链接时需要拷贝到源文件中,动态库不需要。允许你拷贝的库就是静态库,允许你关联的库就是动态库。动态链接必须存在动态库,静态链接必须存在静态库。ldd命令可以查看一个可执行程序所依赖的库文件。默认是不安装静态库,只默认安装动态库。

2024-04-19 18:18:35 385

原创 GCC/G++详解

头文件展开是指,在预处理的时候,将头文件里面的内容拷贝到源文件中。C语言源文件可以使用gcc和g++编译(优先选择gcc)通过给编译一起传递不同的宏值,来进行对代码的动态裁剪。C++源文件只能使用g++进行编译。

2024-04-19 18:16:56 407

原创 vim使用指南:指令、配置、插件、异常

vim的本质是一个编辑器,是一种多模式的编辑器,只能进行读写操作,不能进行编译

2024-04-18 20:01:53 1185

原创 什么是yum、以及yum源

yum是Linux预装的一个指令,搜索、下载、安装对应的软件。手机上有应用商店,yum就相当于Linux中的应用商店。

2024-04-18 19:59:40 549 1

原创 Linux下:指令的理解、本质、shell

Linux下一切皆文件!!!

2024-04-17 21:46:27 1233

原创 Linux下的权限:论老流氓root的存在

root是何等的流氓,捂脸

2024-04-17 21:42:09 1224

原创 深入理解快速排序算法

快速排序的基本思想是通过一个划分操作,将待排序的数组分成左右两部分,其中一部分的所有数据都比另一部分的所有数据要小,然后再递归地对这两部分数据分别进行快速排序。正如代码示例中所展示的,这种方法避免了递归带来的栈溢出的风险,尤其在处理极端不平衡的数据时更显得稳健。它的核心在于选择一个“基准值”,并围绕这个基准值重新排列序列,使得左边的元素都不大于基准值,右边的元素都不小于基准值。前后指针法使用两个指针,一个指向数组的开始,称为“前指针”,另一个从前指针的下一个位置开始,称为“后指针”。

2024-04-16 18:01:28 840

原创 深入理解插入排序:直接插入排序与希尔排序

希尔排序是由Donald Shell于1959年提出的,它是直接插入排序的一种高效改进版本。希尔排序通过引入“间隔”概念来允许交换远距离的元素,从而使数组中的元素能够更快地达到正确的位置。直接插入排序是一种简单的排序方法,它的工作方式如下:从未排序的序列中取出一个元素,将其插入到已排序序列的正确位置,以保持已排序序列的有序性。直接插入排序因其简洁而广泛用于教学和简单应用,而希尔排序则以其改进的效率适用于更复杂的场景。在选择排序算法时,应综合考虑数据的规模、预期的效率以及实现的复杂度。

2024-04-16 17:54:40 1019

原创 Linux:常用指令

常用指令

2024-04-15 20:47:01 1029

原创 CentOS 中的 Make 和 Makefile:Linux 构建工具的深入解析

Make 是一个命令行工具,它自动化了编译和构建过程,确保软件构建的正确性和高效性。它读取名为 Makefile 的文件,这个文件定义了一系列的构建规则和依赖关系。Make 和 Makefile 是 Linux 开发中不可或缺的工具,特别是在 CentOS 这样的企业级发行版中。通过精确控制编译过程,它们帮助开发者确保构建的可重复性和高效性。掌握它们的使用不仅可以提高开发效率,还可以帮助维护复杂的项目结构。

2024-04-15 20:36:25 1357 1

原创 我的编程与创作历程:512天从C语言到Linux

在过去的512天里,我从一个对编程充满好奇的学生成长为了一个拥有59篇博客和1728名粉丝(虽然可能大部分都不是活的)的技术博客作者。我的成长之路从C语言开始,经过数据结构的深入学习,再到C++和Linux的探索。在这个旅程中,我不仅提升了自身的技术能力,也通过我的博客与全世界的开发者分享和交流。

2024-04-14 19:43:16 425

原创 深入理解GCC/G++在CentOS上的应用

GCC/G++是灵活的编译器,支持多种编程语言,主要是C和C++。理解如何编译这两种语言的源文件至关重要。

2024-04-14 19:27:28 1116

原创 CentOS 和 GCC/G++:Linux 的强大组合

CentOS与GCC/G++的组合为Linux开发者提供了一个强大、稳定且免费的平台,无论是学习、开发还是部署,都是非常理想的选择。这种组合保证了你可以在一个稳定的环境中使用最先进的编译技术,无疑,这对于追求高效和高质量的开发工作来说是一个巨大的加分项。

2024-04-14 19:19:49 790

原创 Vim:强大的文本编辑器

Vim,代表 Vi IMproved,是一款高效的文本编辑器,广泛用于编程和各种文本编辑任务。与其他IDE(集成开发环境)如Visual Studio不同,Vim本质上是一个编辑器,它专注于提供强大的文本编辑功能,不直接支持编译或调试,但可以通过插件扩展其功能。虽然它不是一个集成开发环境,但通过插件可以接近IDE的功能,特别是对于喜欢键盘操作的用户,Vim提供了无与伦比的快速操作体验。插件来增强Vim的功能。这个插件提供了代码高亮、代码折叠、错误检查等特性,使得Vim在处理C++项目时更加高效。

2024-04-12 20:25:12 759

原创 YUM:Linux 下的软件包管理神器

YUM 是一个开源的软件包管理器,它允许用户从指定的服务器自动安装、升级、配置及删除软件包。YUM 通过使用 RPM 包管理格式,简化了对软件包的依赖性处理和整个系统的管理工作。

2024-04-12 20:17:58 349

原创 拥抱Linux,拥抱开源,拥抱未来

Linux是我们这个时代的技术奇迹和文化象征。它不仅改变了软件和互联网的面貌,也正在影响和塑造我们的社会和文明。Linux代表了技术的力量、开源的精神、协作的文化、创新的动力。拥抱Linux,就是拥抱一个更加开放、自由、平等、协作的世界。拥抱开源,就是拥抱一种新的文明形态和价值观。拥抱未来,就是拥抱无限的可能性和创造力。让我们携手并肩,一起为Linux的生态和发展贡献自己的力量。让我们传承和发扬Linux的精神和文化,让技术成为推动社会进步的力量。让我们一起开启人类文明的新篇章,一起创造更加美好的未来。

2024-04-11 22:25:35 612

原创 Linux生态系统:探索Linux的开源世界

Linux不仅仅是一个操作系统,更是一种文化、一种生态、一种精神。它代表了开源、自由、协作、共享的理念,吸引了全球无数的开发者和用户。Linux的生态系统涵盖了操作系统、开源软件、云计算、物联网等多个领域,正在不断地创新和演进。

2024-04-11 22:24:18 760

原创 Linux生态系统:探索Linux的开源世界

Linux不仅仅是一个操作系统,更是一种文化、一种生态、一种精神。它代表了开源、自由、协作、共享的理念,吸引了全球无数的开发者和用户。Linux的生态系统涵盖了操作系统、开源软件、云计算、物联网等多个领域,正在不断地创新和演进。

2024-04-10 21:54:54 695

Linux源码2.6.11.7版本

linux_2.6.11.7版本,源码

2024-04-21

C++标准库STL源码

SGI STL是Silicon Graphics Inc.(简称SGI)公司开发的标准模板库(Standard Template Library)的一个版本。它是C++标准库的一个重要实现,对STL的发展和推广产生了重大影响。 SGI STL的源码是开源的,其设计和实现体现了诸多优秀的编程思想和技巧。下面是对SGI STL源码的一些关键特点和描述:泛型编程、算法与容器的分离、迭代器、函数对象等。 SGI STL的源码是学习和理解STL实现原理的宝贵资源。它展示了如何使用C++的语言特性和编程技巧来设计和实现高效、灵活、可重用的组件。通过研究SGI STL的源码,可以深入理解STL的内部工作机制,提高编程技能和设计能力。 需要注意的是,虽然SGI STL对STL的发展产生了重大影响,但它并非C++标准库的唯一实现。不同的编译器和标准库实现可能会有所差异,但总体上遵循了STL的设计原则和接口规范。

2024-03-24

猜数字游戏-java-gui图形化界面

这个java代码实现了一个简单的猜数字游戏,包括了游戏状态管理、倒计时、输入验证和结果显示等功能,并通过 Swing 库创建了友好的图形用户界面。 大学生作业,课设等。

2024-03-24

空空如也

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

TA关注的人

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