- 博客(45)
- 收藏
- 关注
原创 Linux | UDP Socket 编程(C++ 基础demo)
与 TCP 相比,UDP 不保证数据的可靠传输,也不保证数据包的顺序,但它的开销小,传输速度快,适用于一些对实时性要求较高、对数据准确性要求相对较低的场景,如视频流、音频流、实时游戏等。字节序是指多字节数据在计算机内存中存储的顺序,分为大端字节序(Big Endian)和小端字节序(Little Endian)。大端字节序也称为网络字节序,在这种存储方式下,数据的高位字节存放在内存的低地址处,低位字节存放在内存的高地址处。小端字节序中,数据的低位字节存放在内存的低地址处,高位字节存放在内存的高地址处。
2025-02-24 00:26:29
1111
原创 设计模式 之 生产消费者模型 (C++)
生产消费者模型是一种强大的多线程编程模式,通过引入缓冲区和同步机制,实现了生产者和消费者之间的高效协作。在 C++ 中,我们可以使用标准库提供的互斥锁和条件变量来实现线程安全的生产消费者模型。在实际应用中,要根据具体需求合理设计缓冲区的大小和生产消费的逻辑,同时注意线程安全和线程结束的处理,以确保程序的稳定性和性能。希望本文能帮助你更好地理解和应用生产消费者模型。
2025-02-24 00:25:08
1269
原创 设计模式 之 建造者模式(C++)
建造者模式的核心在于将复杂对象的构建过程与其表示分离开来,使得同样的构建过程能够创建出不同的表示形式。简单来说,就是把对象的创建过程拆分成多个步骤,每个步骤由具体的建造者类负责完成,最后由指挥者类来协调这些步骤,从而完成对象的构建。
2025-02-20 19:36:02
1075
原创 设计模式 之 工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)(C++)
但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以考虑将一些相关的产品组成一个产品族(位于不同产品等级结构中功能相关联的产品组成的家族),由同一个工厂来统一生产,这就是抽象工厂模式的基本思想。本文将详细介绍 C++ 中的工厂模式,包括简单工厂模式、工厂方法模式和抽象工厂模式,并通过具体的例子帮助大家理解。简单工厂模式是工厂模式的基础版本,它定义了一个工厂类,该类可以根据传入的参数决定创建并返回哪种产品类的实例。
2025-02-20 14:31:56
1223
原创 MySQL | 库操作
数据库是存储和管理数据的核心组件,掌握数据库的基本操作是每个开发者的必备技能。本文以MySQL为例,详细介绍数据库的创建、字符集设置、校验规则、日常维护及备份恢复等操作,帮助读者轻松上手并深入理解MySQL数据库的管理技巧。)不区分大小写,但建议统一风格。例如,关键字小写,数据库名按需使用大小写(Linux系统下数据库名区分大小写)。:修改字符集不会自动转换已有数据,需手动调整表结构。用于包裹数据库名,避免与关键字冲突(如使用。校对规则按二进制比较,区分大小写。:MySQL关键字(如。校对规则忽略大小写,
2025-02-19 08:47:46
1214
原创 Linux | 进程控制(进程终止与进程等待)
当代码中输出的内容以\n结尾时,当代码运行到printf这条语句时,程序会直接输出内容,但是如果没有以\n结尾,那么就会先将内容存到缓冲区中,当程序结束前会冲刷缓冲,关闭流,然后就有打印输出的效果,也正因此会发现运行的时候是先等待了一秒钟,输出句子后程序马上结束,而不是先输出句子,等待一秒钟再结束程序。僵尸进程不占用CPU资源,但会占用进程表中的条目,如果系统中存在大量僵尸进程,可能会导致进程表耗尽,无法创建新的进程。在Linux中,进程等待是指一个进程(通常是父进程)等待其子进程终止并获取其退出状态。
2025-02-17 09:00:02
1352
原创 Linux | Linux中使用git进行代码托管
甲修改A文件,乙修改B文件,假设甲先修改了项目中的A文件后push到了远端仓库,此时乙再修改项目中的B文件,当乙add和commit成功然后在push代码的时候,会因为甲已经改变了A文件的内容,远端的A文件和乙本地的A文件不一致,因此push时候会冲突,这时候乙需要先执行。拉取仓库同步一下,然后再执行push操作(不需要再重新add和commit)拉取仓库同步一下,然后再执行push操作(不需要再重新add和commit)将当前目录所有未添加到暂存区的文件加入到暂存区。在克隆下来的目录下新建。
2025-02-16 15:58:27
226
原创 Linux | 进程相关概念(进程、进程状态、进程优先级、环境变量、进程地址空间)
将父进程的大部分属性拷贝过去(不在内的如pid、ppid),由于父子进程属于同一个程序,他们的代码是共用的,但是两个进程同时访问一个变量的时候会出现冲突问题,因此子进程会将它将要访问的数据做一份额外的拷贝,也就是子进程访问拷贝出来的数据,然后父子进程就有了属于各自的数据,对变量的操作也是独立的。 进程需要执行的时候,会被加入到运行队列中,并由调度器对队列进行调度,在CPU中执行运行的进程,无论是在运行中的还是在运行队列中的进程都是在R运行状态。因此每个进程都会有自己的PCB即。
2025-02-14 13:40:50
1507
原创 Linux | 文件描述符
在 Linux 系统里,文件描述符(File Descriptor)是一个非负整数,它是对文件或者 I/O 设备(如键盘、显示器等)的抽象表示。当进程打开一个现有文件或者创建一个新文件时,内核会为该进程分配一个文件描述符,进程通过这个文件描述符来对文件进行各种操作,例如读取、写入、关闭等。每个进程都有一个对应的文件描述符表,文件描述符就是该表的索引。标准输入(stdin:文件描述符为 0,通常关联键盘,用于读取用户输入。标准输出(stdout:文件描述符为 1,通常关联显示器,用于输出信息。
2025-02-12 15:46:35
1199
原创 Linux | 系统调用
在Linux系统中,系统调用是用户空间程序与内核进行交互的桥梁,用户程序通过系统调用请求内核提供的服务。下面将详细介绍。
2025-02-10 20:31:58
1635
1
原创 Linux | 自动化构建 —— make / Makefile
make是一个自动化构建工具,用于自动化编译和构建程序。它根据文件的修改时间和依赖关系,只重新编译那些需要更新的文件,从而节省编译时间,提高开发效率。make通过读取Makefile文件中的规则和指令来确定如何编译和构建程序。
2025-02-08 22:39:08
1755
原创 Linux | gcc 的基本使用
在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc把代码翻译成汇编语言。用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。这些是 GCC 编译器常用的命令和选项,根据你的需求,可以灵活使用它们来编译、优化、调试 C 语言程序,并管理库文件。汇编阶段是把编译阶段生成的“.s”文件转成目标文件 读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了。“.i”**文件为已经过预处理的C原始程序。
2025-02-05 21:50:12
1118
原创 C++ | 引用详解
引用是 C++中的一种类型,它为已存在的对象提供了一个别名。引用不是一个独立的对象,它必须在创建时被初始化,并且一旦初始化,它就一直绑定到那个特定的对象。引用的主要目的是提供一种更方便、更安全的方式来操作对象,避免不必要的复制和指针操作的复杂性。C++引用是一种强大的工具,它为我们提供了一种方便、高效的方式来操作对象。引用的主要特点包括必须初始化、与原始对象具有相同的内存地址、没有独立的存储空间以及在参数传递和返回值方面的高效性。与指针相比,引用具有更简单的语法和更安全的操作方式。
2024-09-19 21:47:58
2033
1
原创 Linux | 进程间通信:管道、消息队列、共享内存与信号量
数据传输:一个进程需要将它的数据发送给另一个进程。资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件,例如进程终止时要通知父进程。进程控制:有些进程希望完全控制另一个进程的执行,如调试进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。管道是从一个进程连接到另一个进程的一个数据流。在 Unix 系统中,管道的使用和文件一致,迎合了“Linux 一切皆文件思想”。共享内存区是最快的 IPC 形式。
2024-09-17 22:52:26
1970
3
原创 算法 | 基础排序算法:插入排序、选择排序、交换排序、归并排序
该博客系统阐述了排序算法的概念及运用。详细介绍了插入排序、选择排序、交换排序、归并排序等常见算法的原理与实现方式,分析了其时间复杂度、空间复杂度及稳定性,为深入理解排序算法提供了专业且全面的参考。
2024-09-13 21:45:13
1363
1
原创 Linux | 进程控制(上):进程终止(strerror函数、errno宏、_exit() 与 exit())
文本主要讲解Linux中的进程终止相关内容,包括退出码、strerror函数、errno宏、_exit()和exit()等内容
2024-09-12 21:15:58
1297
原创 前端基础 | HTML基础:HTML结构,HTML常见标签
文章主要讲解前端基础中的HTML基础,主要内容有HTML的结构,HTML的常见标签。
2024-09-08 19:45:37
1462
4
原创 C++ | 内存管理:new、delete运算符 & operator new、operator delete函数
本文详细讲解C++的内存管理相关内容,包含new、delete等运算符和operator new、operator delete函数等内容
2024-09-01 21:03:09
1182
原创 C++类和对象(总篇)
本文从类的定义开始讲起,包含类的实例化、this指针、构造函数、析构函数、拷贝构造函数、赋值运算符重载函数等默认函数,再到初始化列表和友元函数、友元类,内容详细全面,欢迎阅读
2024-08-26 20:02:00
2435
1
原创 C++类和对象(下):初始化列表、explicit关键字、友元函数、友元类
虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化, 构造函数体中的语句只能将其称为赋初值,而不能称作初始化。其中,对于引用成员变量和const修饰成员变量,必须在变量定义的时候(private中是对变量的声明)进行初始化,所以无法在函数体内进行初始化,但是可以通过初始化列表进行初始化。友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声 明,声明时需要加friend关键字。友元提供了一种突破封装的方式,有时提供了便利。
2024-08-25 16:11:24
1089
2
原创 Linux 进程 | 进程地址空间
当我们使用fork()函数生成一个子进程的时候,子进程会对将要访问的父进程的内容进行写时拷贝,但是会发现子进程和父进程对于同一个全局变量进行访问更改等操作的时候,这个变量的地址是不变的,也就是说同一个地址可能会有两个值,因为这里的地址并不是物理地址,而是虚拟地址(我们平时写程序用到的地址相关的内容一般都是虚拟地址)。在32位系统下的寻址空间是4GB。会发现前文所说的现象,同一个变量,子进程对其将要访问的变量进行写时拷贝,但是父子进程中的val确是同一个地址,因此这里的地址是虚拟地址而非物理地址。
2024-08-24 16:55:38
1212
2
原创 Linux 进程 | 进程优先级&进程的环境变量
本文主要内容为进程的优先级和进程的环境变量,其中含有查看进程、优先级概念、环境变量概念等详细内容
2024-08-23 20:31:19
1751
3
原创 Linux | vim编辑器的使用技巧:自动缩进、补全括号、光标定位、批量注释
文章重点列举了vim编辑器使用当中常用的一些技巧,有效提升写代码的效率。
2024-08-23 12:15:49
913
8
原创 Linux 进程 | 进程状态:获取状态、僵尸进程、孤儿进程
本文对linux进程状态进行详细讲解,包含Linux进程中的几种状态和获取状态信息、两种特殊状态的进程(僵尸进程和孤儿进程)
2024-08-20 22:12:06
1524
4
原创 Linux 进程 | 进程概念详解:冯诺依曼体系结构、进程基本概念、PCB、进程组织、fork()创建子进程、进程运行逻辑
文章对Linux的进程概念、运行逻辑从表层到底层进行详细分析,包含冯诺依曼体系结构、PCB、进程的概念、运行逻辑、子进程的创建等
2024-08-19 22:30:06
1228
1
原创 Linux:vim编辑器的基本使用
本文内容为vim编辑器的基本使用方法,包含三种常用模式和对应常用命令的讲解,便于快速上手vim编辑器,提升效率
2024-08-15 21:26:40
1225
8
原创 C++类和对象(中):构造函数、析构函数、拷贝构造、赋值运算符重载
本文接着讲类的默认成员函数,其中详解构造函数、析构函数、拷贝构造、赋值重载。
2024-08-12 18:26:06
1292
8
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人