自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SQL数据库(MySQL)

1、计算机的资源有限,不可能把数据全部存储在内存中,且内存掉电后数据会丢失,为了能让程序在关机重启后继续使用,必须把数据保存到磁盘的文件中。2、随着程序的功能越来越复杂、数据量越来越大,从文件中读写数据需要大量的重复性操作,从文件中读取出指定的数据需要复杂的逻辑。3、不同的程序它的访问文件的操作不同,就意味着读写文件的代码无法复用。4、所以程序员非常需要一个统一的快速的访问磁盘数据的工具。

2024-09-13 11:47:46 2175

原创 STL模板库

C++语言中提供一种自动生成代码的技术,这种技术可以让程序员在编程时不需要考虑数据类型,而专注思考业务逻辑和算法,程序员只需要编写好代码的整体框架,具体的数据类型由使用者提供,这就叫模板技术,也被称为泛型编程技术。T3 函数名(T1 arg1,T2,arg2)return ret;可以给未知的类型取任何名字,但约定俗成使用T。使用到了未知的类型来设计一种类(模板类在使用时,必须需要提供类型参数)。return ret;

2024-09-13 11:45:12 914

原创 C++(C++的文件I/O)

从宏观角度来说,异常处理就是当程序执行过程中出现了错误,以及对错误的处理方案。

2024-09-13 11:43:35 1204

原创 C++(虚构造与虚析构/类型信息运算符/强制类型转换)

如果父类的构造函数函数设计成虚函数并且被子类覆盖(如果虚函数没有被覆盖就设计的没有意义),当创建子类对象时,先调用父类的虚构造,但此时实际对象是子类对象,根据多态的特性此时会转而执行子类的构造(调用虚函数表中覆盖后的版本),但执行子类构造函数前需要先执行父类构造,这样就形成了死循环,所以构造函数不能设计成虚函数。专用于指针变量的类型转换,主要用于指针与指针的转换,指针与整数的转换,与其它的强制类型转换相比,它的自由度比较高,但也比较危险。cout << "我是Base类的func函数" << endl;

2024-09-13 11:42:37 763

原创 C++(继承/虚函数)

1、在解决一个问题之前,先考虑现有的类是否能解决部分问题,如果有则继承该类,在此基础上进行扩展,以缩短解决问题的目的,代码复用。2、在解决一个复杂庞大的问题时,把问题拆分成若干个小问题,每个小问题实现一个类去解决,最后把这若干个类通过继承进行汇总,达到解决问题的目的,这个方式可以降低问题的规模、难度,也方便团队分工、协作。成员有参数构造调用方法:构造函数(...):成员名(参数)​class Aint num;public:A(void)cout << "A的无参构造" << endl;

2024-09-13 11:40:56 1088

原创 C++(重载)

1、理解string类为什么可以使用运算符操作。2、理解什么是友元、哑元。3、熟练掌握输入、输出运算符的重载。4、复习减少内存碎片、内存泄漏的方法。

2024-09-13 11:36:50 695

原创 C++(this指针/常函数与常对象/拷贝构造函数/赋值函数/静态成员/静态成员函数/单列模式)

在成员函数的参数列表的末尾(小括号后面),用const修饰,这种成员就叫常函数。class 类名public:// 常函数返回值 函数名(参数列表) const在定义结构、联合、类对象时,使用const修饰,这种对象就叫常对象。const 类名 对象名;const 类名* 指针变量 = new 类名;是一种特殊构造函数,如果没有显式的实现,编译器就会自动生成。class 类名public:// 拷贝构造类名(const 类名& that)

2024-08-29 20:44:47 951

原创 C++(名字空间/面向对象/类和对象/构造函数和析构函数/const成员和初始化列表)

在C语言中定义的全局变量、函数、结构、联合、枚举、枚举值、宏都在全局作用域下,所以当项目比较庞大时,非常容易造成命名冲突(以模块名作前缀、后缀),所以C++中选择把全局作用域进行拆分成子作用域进行管理,这些子作用域就是作名字空间。把抽象结果(利用面向对象的思维模式,思考、观察出的结果),使用用C++的语法封装出一种类似结构的自定义数据类型(复合数据类型)。使用设计好的类(结构)这种数据类型,定义出的类变量在面向对象编程语言中被称为对象(结构变量),创建类对象的行为也被称为实例化对象。​int id。

2024-08-28 09:35:27 673

原创 C++(C++基础/同C的差异分析)

引用是一种取名机制,它可以给变量重新取一新的名字,所以引用也叫别名。

2024-08-26 16:47:02 860

原创 多文件编程和MakeFile脚本

Makefile脚本集合了程序的编译指令的文件,make是一个命令工具,当执行make命令时,它会自动读取Makefile中的编译指令并执行,会自动完成整个项目的自动化编译工作。

2024-08-20 09:11:25 452

原创 网络通信(基于UDP协议的Socket编程模型)

1、创建socket内核对象,内核创建完成后会返回它的描述符。1、创建socket内核对象,内核创建完成后会返回它的描述符。3、绑定(把本机地址与socket对象进行绑定)3、发送请求,根据接收者的地址发送数据。5、返回结果,按发送者的地址进行返回。4、接收请求,同时接收发送者的地址。2、准备接收者的地址(ip地址+端口号)4、接收结果,并接收返回者的地址。2、准备本机地址(ip地址+端口号)6、关闭Socket对象。5、关闭Socket对象。

2024-08-14 20:26:29 393

原创 网络通信(基于TCP/IP实现客户端/服务器的通信)

被连接者需要完成的任务(服务端):1、创建socket内核对象,内核创建完成后会返回它的描述符(该描述只是为了完成连接,三次握手)2、准备本机地址(ip地址+端口号)3、绑定(把本机地址与socket对象进行绑定)4、开启监听,并设置排队的队列长度5、等待连接,连接成功后,内核会再返回一个连接成功的Socket描述符,专门用来通信for(;;

2024-08-13 20:16:16 726

原创 网络通信(TCP/UDP协议 三次握手四次挥手 )

项较少,在数据传输过程中延迟小、数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保。数据报的长度是指包括报头和数据部分在内的总字节数。吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的。多媒体数据流,不产生任何额外的数据,即使知道有破坏的包也不进行重发。拆分,也不合并,而是保留这些报文的边界,由应用程序需要选择合适的报。将保持它首部和数据的检验和,这是一个端到端的检验和,目的是检测。信号)终止时,所有打开的描述符都被关闭,这也导致仍然打开的任何。

2024-08-13 20:09:50 917

原创 操作系统(线程管理-通过条件变量实现消费者与生产者模型)

也叫数据仓库,是生产者线程与消费者线程之间的数据缓冲区,用于平衡二者之间的生产速度与消耗速度不均衡的问题,通过缓冲区隔离生产者和消费者,与二者直连相比,避免相互等待,提高运行效率。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起,一般线程睡入条件变量,伴随着解锁动作,而线程从条件变量醒来时,伴随着加锁动作,如果加锁失败线程进入阻塞状态,而不是睡眠。注意:使用互斥锁配合条件变量实现的生产者与消费者模型,能够平衡生产与消费的时间不协调,并且可以最大限度的节约运行资源。2、等"条件成立"叫醒休眠的线程。

2024-08-13 20:01:49 889

原创 操作系统(线程管理)

线程是操作系统能内够进行运算、执行的最小单位,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。总结:线程是进程的一部分,是进程内负责执行的单位,进程是由资源单位(内存资源、信号处理方案、文件表)+执行单位组成,默认情况下进程内只有一个线程,但可以有多个。POSIX线程(POSIX Threads,常被缩写为pthread)是POSIX的线程标准,定义了创建和操纵线程的一套API。

2024-08-12 19:26:53 913

原创 操作系统(进程通信)

进程间通信(Interprocess communication 也叫IPC):指两个或多个进程之间进行数据交互的过程。X/Open国际联盟有限公司是一个欧洲基金会,它的建立是为了向UNIX环境提供标准,XSI是X/Open System Interface的缩写,也就是X/Open设计的系统接口。X/Open的主要的目标是促进对UNIX系统、接口、网络和应用的开放式系统协议的制定。它还促进在不同的UNIX环境之间的应用程序的互操作性,以及支持对电气电子工程师协会对UNIX的可移植操作系统接口规范。

2024-08-07 19:37:50 572

原创 操作系统(进程管理)

程序是存储在磁盘上的可执行文件,里面包含可执行的机器指令和数据的静态实体;进程是处于活跃状态的计算机程序,也就是正在运行中的程序一个运行中的程序,可能由多个进程组成,但至少要有一个进程,称为主进程,同时可以通过系统调用创建出若干个子进程同时进行任务一个程序也可以同时运行出若干个进程。

2024-08-06 19:06:58 543

原创 操作系统(信号处理)

当进程接收到消息后中止当前正在执行的任务,转而执行其它任务,等待其它任务执行完毕后再返回继续执行。这种执行模式称为中断,分为硬件中断和软件中断两种信号是UNIX、类UNIX以及其他POSIX兼容的系统中,为了完成不同进程之间通讯的一种方式。是一种软中断,是一种异步处理机制,用于提醒进程某个事件发生了,可能要去处理。

2024-08-02 17:01:19 1077

原创 操作系统(文件管理2)

硬链接文件没有自己inode和block,只是在不同的目录下复制了一份源文件的inode信息,可以通过该inode找到同一份源文件的block。

2024-08-01 20:30:29 296

原创 操作系统(文件管理)

由操作系统向应用程序提供的程序接口信息,本质上就是应用程序与操作系统之间交互的接口。操作系统的主要功能是为了管理硬件资源和为应用软件的开发人员提供一个良好的环境,使得应用程序具有更好的兼容性,为了达到这个目的,内核提供一套统一的具有一定功能的内核接口函数,称为系统调用\系统函数,以C语言函数的格式提供给用户操作系统负责把应用程序的请求传给内核,由内核调用具体内核功能完成所需请求,结束后把结果通过操作系统的接口函数的返回值传递给调用者。

2024-07-31 20:06:28 297

原创 操作系统(内存管理)

虚拟内存是操作系统对进行内存空间地址进行管理的一套精心设计的逻辑层面的内存空间概念在32位系统下,操作系统规定给每个启动的进程拥有4G大小虚拟内存,但是这4G的虚拟内存不能直接使用的,其实就是系统给进程画的饼,当进程真正要存储数据需要使用内存时,系统会把一部分虚拟内存与物理内存进行映射,必须进行映射后的虚拟内存才能正常使用如果非要使用没有映射过的虚拟内存,操作系统一定会在运行时产生段错误mmap、munmap底层不维护任何东西,只会返回映射后的内存首地址。

2024-07-30 19:18:22 839

原创 操作系统(系统简介、库文件、环境变量、编译器、系统特性)

诞生于1971年美国AT&T公司的贝尔实验室,主要开发者是丹尼斯.里奇、肯.汤普逊。该系统的主要特点是支持多用户、多任务,并支持多种处理器架构,同时具有高安全性、高可靠性、高稳定性,既可以构建大型关键业务系统的商业服务器,也可以构建面向移动终端、手持设备、可穿戴设备的嵌入式应用。

2024-07-29 20:56:08 729

原创 特殊补充(结构指针/柔性数组)

这样的结构变量不能直接写入文件中(因为对于结构成员指针是直接把存储的地址写入文件,是没有意义),并且这样的结构变量也不能直接赋值使用(因为会只拷贝地址,相当于两个变量共同指向同一块内存,称为浅拷贝,没意义)当结构中某类成员的数量不确定时,应该先设计一个结构成员指针,通过创建结构变量时,另外申请一块堆内存,并让该结构成员指针指向它,从而配合长度属性使用。柔型数组的原理是编译器巧妙地通过数组合法越界的手段来访问结构体后序多余的内存,因为柔型数组的内存与结构的内存一定是连续的。类型* 结构成员指针;

2024-07-26 16:12:46 343

原创 算法(排序算法)

排序的功能是将数据元素的任意序列,重新排列成按照关键字有序的序列它之所以重要是因为查找操作很重要,而有序的顺序表可以采用效率较高的二分查找(O(logN)),而无序的查找只能顺序查找(O(N)),而创建的二叉搜索树、平衡二叉树、堆的过程其实就是一个排序过程。

2024-07-25 19:38:56 633

原创 算法(查找算法---二分查找/索引查找/哈希表查找)

在一个数据序列中,查找某个数据是否存在或存在的位置,在实际开发过程中使用的频率非常高,例如对数据常见的操作有增、删、改、查,增加数据时需要查询新增加的数据是否重复,删除数据时需要先查询到数据所在位置再删除,修改数据时也需要先查询到被修改的数据在什么位置,查找算法在编程中重要性排列在第一位。

2024-07-24 18:52:10 893

原创 算法(初步)

对特定问题的求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。

2024-07-24 18:50:59 808

原创 数据结构(特殊二叉树-平衡二叉树)

待删除节点左右子树非空,则根据左右子树的高度,选择高的一边子树,如果是左子树高,选择左子树中的最大节点赋值给待删除节点,然后再左子树中继续删除该最大节点,相当于继续处理情况1或情况2;由于节点的位置要受到相互之间值的影响,并且在往平衡二叉树中添加节点或者删除节点前,二叉树本身是平衡的,所以只可能在最后操作的节点附近不满足平衡条件,因此需要在该过程中对该节点进行判断并调整。如果一个搜索二叉树呈现或接近单支状,它的查找效率很低,很接近链表,因此如果能让它平衡时,查找效率最高。待删除的节点是叶子节点,直接删除。

2024-07-23 18:51:15 998

原创 数据结构(特殊二叉树-堆结构(树))

大顶堆(大根堆):根节点的值比左右子树都大,同时左右子树都满足该规则小顶堆(小根堆):根节点的值比左右子树都小,同时左右子树都满足该规则堆结构是一种特殊的完全二叉树,它与堆内存是两种概念堆结构的根节点一定是整棵树中的最大值、最小值。

2024-07-22 19:39:53 267

原创 数据结构(特殊二叉树-线索二叉树)

链式二叉树中有很多的空指针,可以让这些空指针指向前一个节点\后一个节点,从而在有序遍历(中序遍历)二叉树时,不需要使用递归而通过循环即可以完成,并且效率要比递归快得多。首先需要有一颗搜索二叉树,然后通过中序遍历并生成线索,通过检查右子树是否为空来决定是否生成线索,让右子树指向下一个节点。bool lflag;// 左子树是否是线索 为真时,左子树是线索 指向前一个节点。bool rflag;// 右子树是否是线索 为真时,右子树是线索 指向下一个节点。

2024-07-22 19:38:53 385

原创 数据结构(二叉树-链式存储)

【代码】数据结构(二叉树-链式存储)

2024-07-22 19:36:17 103

原创 数据结构(二叉树-顺序存储)

【代码】数据结构(二叉树-顺序存储)

2024-07-22 19:35:15 86

原创 数据结构(树和二叉树)

树型结构是一种非线性的数据结构,它具有一个称为根节点(root node)的特殊节点,以及一些称为子节点(child nodes)的节点。每个节点可以有零个或多个子节点,但只能有一个父节点(parent node),除了根节点没有父节点。在树型结构中,节点之间的连接关系表示了它们之间的层次关系。树型结构常用于表示具有层次关系的数据,例如文件系统、组织结构、目录结构等。它提供了一种便捷的方式来组织和访问数据。

2024-07-22 19:33:52 749

原创 数据表(线性表--顺序队列(有无计数器))

【代码】数据表(线性表--顺序队列(有无计数器))

2024-07-19 20:30:02 295

原创 数据结构(线性表--链式队列)

【代码】数据结构(线性表--链式队列)

2024-07-19 20:28:30 87

原创 数据结构(功能受限的表-栈&队列)

栈和队列是两种重要的线性结构,从数据结构角度,他们都是线性表,特殊点在于它们的操作被限制,也就是所谓的功能受限,统称功能受限的线性表从数据类型角度,它们也可以是看成处理、管理数据的一种规则与栈结构相似的是,也只允许在端口处进行添加、删除操作,但是有两个端口,一个负责添加数据,称为入队,该端口称为队尾,另一个端口只负责删除数据,称为出队,该端口称为队头,属于一种先进先出结构,称为FIFO。

2024-07-19 20:26:21 652

原创 数据结构(线性表--链式栈)

【代码】数据结构(线性表--链式栈)

2024-07-18 20:00:56 92

原创 数据结构(线性表--顺序栈)

【代码】数据结构(线性表--顺序栈)

2024-07-18 19:59:57 77

原创 封装的通用链表(list.c/list.h/test_list.c)

【代码】封装的通用链表(list.c/list.h/test_list.c)

2024-07-18 19:49:22 306

原创 02 数据结构 ——链表(静态/循环/双向/LINUX内核链表)

Linux内核链表是一种通用的双向循环链表,面对通用的问题,Linux内核链表的节点干脆不存储任何数据域,只有指针域,节点只负责串联起每个节点,不负责存储数据。目的:根据结构体中某个成员的地址,能够计算出所在结构体的首地址,从而用户在设计Linux内核链表的节点时,不需要一定放在在数据的首位成员,增加可用性。在双向链表的基础上,让最后一个节点的next指向头节点,让头节点的prev指向最后一个节点,构成了双向循环链表。静态链表的节点存储在一段连续内存中,通过节点中称为游标的一个正整数来访问后继节点。

2024-07-17 20:14:06 453

原创 数据结构(线性表--单链表--不带头节点)

【代码】线性表——单链表——不带头节点。

2024-07-16 21:01:07 238

封装生产者与消费者模型(PCM)

封装生产者与消费者模型(PCM)

2024-08-16

空空如也

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

TA关注的人

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