自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++总结

同一个指令有多种形态编译时多态:函数重载,运算符重载,函数模板,类模板(vector<xxx>)运行时多态:基于 类继承(public)+虚函数+函数覆盖,通过父类指针\引用指向子类对象,并且调用被覆盖的虚函数,形成多态。

2024-10-24 09:50:33 940

原创 Linux基础与C语言总结

是数据类型 定义指针变量 是整数 代表内存编号(地址) 每个地址对应一个字节的内存,指针变量可以通过解引用运算符来访问他指向的内存数据,访问的字节数取决于指针的类型(char/short/int...)二义性:当使用宏的环境,参数等发生变化时,宏的运算规则也可能随之变化,这种现象称为二义性解决方法:通过给宏的每个参数和宏整体都加括号来避免二义性#define和typedef的区别:替换 重定义INT num;//普通类型使用时没有任何区别//p1是指针,p2,p3不是。

2024-10-12 15:08:00 1254

原创 自主封装线程池(threadpool)

由主线程预先开启出来若干个子线程,如果仓库中有sockfd,通过线程同步由某个子线程获取到sockfd,从而与对应的客户端通信,如果客户端断开连接后,那么重新去仓库获取新的sockfd,如仓库空虚,则休眠等待 ​。负责连接客户端的主线程,当有客户端连接成功后,把连接上的sockfd存入仓库 ​。使用队列结构,消费者从队头获取数据,因此队头要加互斥量,生产者从队尾放入数据。

2024-09-30 13:54:16 363

原创 C++智能指针

shared_ptr而引入的一种智能指针,它指向一个由shared_ptr管理的对象而不影响该对象的生命周期,也就是说将一个weak_ptr指向一个shared_ptr对象,引用计数器不会+1, 而且离开时都不会改变该对象的引用计数,只有当最后一个shared_ptr离开该对象才会销毁 ​ weak_ptr更像是shared_ptr的一个助手,而不是独立的智能指针 ​ 因此当发生shared_ptr的。产生死锁时,可以把其中一个类的shared_ptr成员变量改为weak_ptr,即可避免产生死锁。

2024-09-30 13:43:33 365

原创 MySQL数据库

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

2024-09-19 19:11:44 3268

原创 C++介绍07

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

2024-09-19 18:59:11 937

原创 C++介绍06

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

2024-09-19 16:06:13 1192

原创 C++介绍05

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

2024-09-19 16:04:44 1315

原创 C++介绍04

给类对象优先重载成员运算符函数时,必须要在类的内部实现,当无法修改对象的源码时,也就无法在结构、联合、类的内部增加成员运算符函数,又想给类对象增加运行符函数,这种情况只能定义全局的运算符函数,把运算对象都作为参数传递给运算符函数。1、cin、cout是标准库中具有输入、输出功能的类对象,它的类名叫istream、ostream,当我们想给某种类对象增加输入、输出的功能时,就需要实现 >>、<<运算符函数对于该类对象的支持,也就是重载输入、输出运算符。除了上述函数,其他函数可以被定义为全局函数或友元函数。

2024-09-19 16:02:29 1160

原创 C++介绍03

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

2024-09-06 16:43:03 988

原创 C++介绍02

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

2024-09-06 09:48:23 942

原创 C++介绍01

引用是一种取名机制,它可以给变量重新取一新的名字,所以引用也叫别名。C语言与C++语言的区别有哪些?1、Hello代码的区别2、数据类型的区别基本类型、复合类型3、函数的区别函数重载、形参默认值、内联函数4、堆内存管理的区别(malloc、free与new、delete的区别)5、函数传参的区别,指针和引用6、类型转换。

2024-09-03 10:07:29 2110

原创 多文件编程与Makefile脚本

Makefile脚本集合了程序的编译指令的文件,make是一个命令工具,当执行make命令时,它会自动读取Makefile中的编译指令并执行,会自动完成整个项目的自动化编译工作。1、使用Makefile的好处节约编译时间记录文件的依赖关系自动执行编译过程2、Makefile的原理在命令行执行make命令(make是安装在操作系统上的读取、解析、执行Makefile的工具)。make命令会读取当前目录下的makefile、Makefile文件中的内容,解析里面的编译目标。

2024-08-20 09:11:26 1037

原创 Socket通信

Socket是封装了TCP/IP协议簇的系统API接口,这使得程序员无需关注协议本身,直接使用socket提供的接口与不同主机间的进程互联通信。目前市面上主流的操作系统都采用这套机制进制网络通信,所以不同种类的操作系统,使用不同的编程语言,只要调用操作系统提供的Socket接口,都能进行网络通信。

2024-08-14 20:14:51 1106

原创 Linux线程同步

多个线程互相等待对方资源,在得到所需要的资源之前都不会释放自己的资源,然后造成循环等待的现象,称为死锁。

2024-08-12 18:42:08 892

原创 Linux线程管理

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

2024-08-12 14:39:59 1057

原创 宏函数与普通函数的区别及优缺点

宏函数不是真正的函数,而是带参数的宏替换,只是使用方法像函数而已。在代码中使用宏函数,预处理时会经历两次替换,第一次把宏函数替换成它后面的一串代码、表达式,第二次把宏函数中的参数替换到表达式中。#define 宏名(a,b,c,...) a+b*c函数就是一段具有某一项功能的代码,它是C语言中管理代码的最小单位,把具有某项功能的若干行代码封装在函数中方便管理代码且方便重复调用。

2024-08-11 14:18:49 321

原创 Linux进程通信

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

2024-08-10 14:46:46 701

原创 Linux进程管理

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

2024-08-07 18:36:37 701

原创 Linux信号处理

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

2024-08-05 09:32:06 747

原创 自主实现rm -rf指令

【代码】自主实现rm -rf指令。

2024-08-05 09:25:37 244

原创 自主实现ls -al命令

F:在每个输出项后追加文件的类型标识符,具体含义:“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道FIFO,“=”表示sockets套接字。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等;-L:如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录;-f:此参数的效果和同时指定“aU”参数相同,并关闭“lst”参数的效果;-b:将文件中的不可输出的字符以反斜线“”加字符编码的方式输出;

2024-08-03 14:44:19 430

原创 Linux文件管理

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

2024-08-02 19:02:14 687

原创 Linux内存管理

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

2024-07-31 18:51:01 780

原创 Linux系统环境

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

2024-07-29 19:19:10 669

原创 算法-排序算法

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

2024-07-29 11:17:17 504

原创 数据结构-图

图是一种比较复杂的数据结构,在线性表中数据元素之间仅有线性关系,每个元素只有一个直接前驱和直接后继(元素之间只存在一对一关系),在树形结构中元素之间有着明显的层次关系,每一层的元素只能和下层的多个元素有关系(元素之间存在一对多关系),而在图形结构中,任意两个结点之间都可能有关系(元素之间存在多对多关系)。图中的数据元素被称为顶点,一般使用V表示图的顶点的有穷非空集合。两个顶点之间的关系记作<v,w>,表示能从顶点v到达顶点w,也就是v能到w,但w不一定能到v,我们称v为弧尾或初始点,称w为弧头或终端点。

2024-07-29 11:13:15 806

原创 高级C语言-指针

1、指针(pointer)是一种特殊的数据类型,使用它可以定义指针变量,简称指针。2、指针变量中存储的是内存的地址,是一种无符号的整数。3、通过指针变量中记录的内存地址,我们可以读取内存中所存储的数据,也可以向内存中写入数据。4、一般使用%p以十六进制格式显示内存地址。类型* 指针变量名;int* xxx_p;

2024-07-26 15:40:31 885

原创 结构指针与柔性数组

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

2024-07-26 14:31:10 333

原创 数据结构—树和二叉树

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

2024-07-22 18:36:57 584

原创 数据结构—线性表

在数据元素存在非空有限集中:存在唯一的一个被称为“第一个”的数据元素存在唯一的一个被称为“最后一个”的数据元素除了第一个外,集合中每个数据元素都只有一个前趋元素除了最后一个外,集合中每个数据元素都只有一个后继元素。

2024-07-20 12:00:02 636

原创 数据结构绪论

数据结构不是研究数值计算的这些是数学家应该研究的问题,它是研究计算机存储、组织数据的方式问题的学科,数据结构会影响算法的效率,合适的数据结构可以带来更高的运行或存储效率。1968年,美国的高纳德(Donald E. Knuth)教授《基本算法》,开创了数据结构课程体系的先河。程序设计 = 数据结构 + 算法凭借一句话获得图灵奖的Pascal之父——Nicklaus Wirth,让他获得图灵奖的这句话就是他提出的著名公式:“算法+数据结构=程序”。

2024-07-15 18:30:39 772

原创 C语言程序设计(完整版)

创建(从无到有)变量的语句同一个作用域,不可以定义同名的变量数据类型 变量名;在定义变量时可以初始化/初始值定义变量意味着创建分配内存 数据类型必须是明确的分配多少个内存,取决于 sizeof(数据类型)全局变量在全局作用域定义的存储在 全局数据区如果全局变量没有初始化 自动初始化为0局部变量在函数内部定义的普通局部变量(除了static) 存储在 栈区普通局部变量,如果没有初始化 垃圾值块变量块变量也可以称为局部变量在语句块中的定义的变量。

2024-07-06 15:01:36 2848

原创 Linux基础

1、UNIX系统由贝尔实验室研究员丹尼斯.里奇和肯.汤普逊合作开发,并顺便发明了C语言,现主要应用于各种大型服务器,如:电信、银行、各大公司的核心关键业务,苹果公司以它作为内核,推出了MacOS、iOS系统,该系统收费,质量比较高。2、Minix系统是UNIX精简版主要用于科学研究,Linux的作者林纳克纳.托瓦斯就是受了它的启发,引发了全世界的程序员一起完善了Linux系统。

2023-12-05 10:26:24 1037 1

空空如也

空空如也

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

TA关注的人

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