自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++红黑树

/ 节点的颜色// 红黑树节点的定义{}// 节点的左孩子// 节点的右孩子// 节点的双亲(红黑树需要旋转,为了实现简单给出该字段)// 节点的值域// 节点的颜色在修复过程中,我们始终关注一个当前节点(通常记为ZN或current),它就是新插入的节点或修复过程中向上传递的节点。P(Parent):Z的父节点。GP的父节点(Z的祖父)。U(Uncle):P的兄弟节点(Z的叔叔)。(修复过程的核心是处理P和U的关系)在所有的修复操作之后,必须确保根节点是黑色的(性质2)。

2025-08-27 13:22:16 1067

原创 map/set

1. set是按照一定次序存储元素的容器2. 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。3. 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。4. set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。

2025-08-25 20:06:53 1192

原创 网络层及数据链路层

主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称.域名使用 . 连接com: 一级域名. 表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等.baidu: 二级域名, 公司名.www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议.

2025-08-24 10:42:12 748

原创 c++AVL树

{}// 该节点的左孩子// 该节点的右孩子// 该节点的双亲T _data;int _bf;// 该节点的平衡因子假如以pParent为根的子树不平衡,即pParent的平衡因子为2或者-2,分以下情况考虑1. pParent的平衡因子为2,说明pParent的右子树高,设pParent的右子树的根为pSubR当pSubR的平衡因子为1时,执行左单旋当pSubR的平衡因子为-1时,执行右左双旋。

2025-08-22 13:10:11 1342

原创 网络传输层

网络中应用层只对用户发来的数据进行协议处理:报文和报文分开、反序列化变成结构化数据、根据协议对数据做处理、把数据写给操作系统,之后发多少怎么发什么时候发都由操作系统决定。

2025-08-21 20:36:33 984

原创 http/https

加密就是把 明⽂ (要传输的信息)进⾏⼀系列变换, ⽣成 密⽂ .解密就是把 密⽂ 再进⾏⼀系列变换, 还原成 明⽂ .在这个加密和解密的过程中, 往往需要⼀个或者多个中间的数据, 辅助进⾏这个过程, 这样的数据称为 密钥 (正确发⾳ yue 四声, 不过⼤家平时都读作 yao 四声)在互联⽹上, 明⽂传输是⽐较危险的事情!!!HTTPS 就是在 HTTP 的基础上进⾏了加密, 进⼀步的来保证⽤⼾的信息安全~cookie:内存、文件防止黑客:session+cooki。

2025-08-20 21:53:06 947

原创 TCP程序

回环地址(通常是。

2025-08-12 10:44:06 1018

原创 linux初识网络及UDP简单程序

发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出;接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存;因此,网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高地址.TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节.不管这台主机是大端机还是小端机, 都会按照这个TCP/IP规定的网络字节序来发送/接收数据;如果当前发送主机是小端, 就需要先将数据转成大端;否则就忽略, 直接发送即可;

2025-07-22 13:56:46 1213 1

原创 线程安全的单例模式与读者写者问题

大佬们针对一些经典的常见的场景, 给定了一些对应的解决方案, 这个就是设计模式。

2025-07-07 11:32:14 1059

原创 二叉搜索树

二叉搜索树是一棵二叉树,其中每个节点都满足:左子树中所有节点的值小于该节点的值右子树中所有节点的值大于该节点的值左右子树也分别是二叉搜索树。

2025-07-06 23:23:44 1240

原创 Linux线程同步与互斥

死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资 源而处于的一种永久等待状态。简单来说就是两个线程都申请到了锁又同时申请对方的锁导致阻塞的问题。

2025-06-27 12:13:55 1369

原创 Linux线程概念和控制

线程<=执行流<=进程Linux中的线程模拟进程实现(线程就是轻量级进程)与独立的进程相比,线程创建和销毁的开销较小,因为它们共享相同的内存空间和资源。线程是进程内的执行分支,线程的执行粒度比进程要细(只需要运行一部分代码)我们认为线程是操作系统调度的基本单位(进程内部执行流资源)进程:承担分配系统资源的实体(分给线程)Linux中用进程的内核数据结构模拟线程在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程。

2025-06-24 16:47:28 847

原创 Linux进程信号

无论哪种产生方式,最终一定是操作系统发送给操作系统的,因为操作系统是进程的管理者。

2025-06-20 23:35:27 1253

原创 进程间通信

管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”key(在内核中具有唯一性,能够让不同进程进行唯一性标识)来保证不同进程看到同一个共享内存,知道这个共享内存存不存在,链表结构管理,遍历发现没有相同的key就创建。

2025-06-19 20:21:22 1046

原创 Linux文件系统

记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息,Super Block的信息被破坏,可以说整个文件系统结构就被破坏了。软链接是一个独立的文件,具有独立的inode,也有独立的数据块,他的数据块里保存的是指向文件的路径(相当于Windows的快捷方式),不保存inode(保存inode要做路径解析)硬盘的每个分区是被划分为⼀个个的”块”。

2025-06-15 23:11:59 2206

原创 C++继承和多态

基类是 private ,这种情况下,无论以何种方式继承,对于基类私有的部分在子类中都是不可见的,这里的不可见指的是无法访问,但仍然继承下来了,只是无法使用而已。但是可以通过父类提供的方法进行间接的访问和使用。如图:(Print 方法在上图父类中有写)如图:对于父类私有成员,子类无论哪种继承都无法访问,对于父类其他成员,继承后被哪种访问限定符修饰取决于父类成员访问限定符和继承方式中权限小的那一个。

2025-06-14 23:45:46 2702

原创 Linux基础io

打开文件的方式open:pathname: 要打开或创建的⽬标⽂件flags: 打开⽂件时,可以传⼊多个参数选项,⽤下⾯的⼀个或者多个常量进⾏“或”运算,构成flags。参数: O_RDONLY: 只读打开O_WRONLY: 只写打开O_RDWR : 读,写打开这三个常量,必须指定⼀个且只能指定⼀个O_CREAT : 若⽂件不存在,则创建它。

2025-06-11 22:16:37 1120

原创 Linux进程控制

waitpid和wait函数中的status参数是一个非常重要的整型变量,它存储了子进程的退出状态信息。wait和waitpid,都有一个status参数,该参数是一个输出型参数,由操作系统填充。如果传递NULL,表示不关心子进程的退出状态信息。否则,操作系统会根据该参数,将子进程的退出信息反馈给父进程。status不能简单的当作整形来看待,可以当作位图来看待,具体细节如下图(只研究status低16比特 位):次低八位:代表退出状态低八位:是否出现异常问题(低八位显示是否core dump)

2025-06-09 14:39:13 2282

原创 进程地址空间

让进程以统一视角看待内存:不用每个PCB均保存物理地址,只用修改页表即可优势说明编程简单进程使用统一的虚拟地址,无需处理物理内存细节。隔离与安全进程间内存完全隔离,权限可控。动态内存管理按需分配物理内存,支持共享、COW、内存映射等高级特性。硬件透明兼容不同硬件架构,MMU/TLB 加速地址转换。通过虚拟地址空间,操作系统在保证性能的同时,为进程提供了安全、灵活、易用的内存抽象。

2025-06-08 11:39:07 1139

原创 什么是环境变量

环境变量是Linux系统中用于存储系统和工作环境信息的动态值,它们影响系统进程和程序的行为。我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但 是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数 如: 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。

2025-06-07 21:56:38 1262

原创 linux进程状态与优先级

进程当前的活动行为(如运行、等待、停止等)。进程对系统资源的占用情况(如CPU、I/O设备等)。进程是否可被调度(即能否被CPU执行)。意义调度依据操作系统通过状态决定哪个进程应该获得CPU资源(例如,优先调度R状态的进程)。资源管理区分进程是否占用资源(如D状态进程可能阻塞I/O设备)。生命周期控制明确进程从创建到终止的完整轨迹(如新建→运行→终止→僵尸)。问题诊断通过状态可快速定位异常(如僵尸进程、长时间D状态)。

2025-06-05 23:18:33 933

原创 Linux进程

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。课本上称之为PCB(process control block)在Linux中描述进程的结构体叫做task_struct。task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。

2025-06-05 13:39:40 1121

原创 反向迭代器

反向迭代器是C++标准库提供的一种适配器,它允许我们以相反的顺序遍历容器。将递增操作转换为递减操作,将递减操作转换为递增操作,使容器看起来像是被反转了一样定义在<iterator>头文件中,适用于所有双向迭代器以上的容器,不改变原容器内容,只是改变遍历顺序,与普通迭代器有对应关系。

2025-06-04 09:57:18 393

原创 模板的介绍

class 类模板名// 类内成员定义一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链 接起来形成单一的可执行文件的过程称为分离编译模式。C++模板在编译时需要看到完整的定义,而不能像普通函数/类那样将声明和实现分离到.h和.cpp文件中。这是因为:模板不是实际代码,而是代码生成的"模具"编译器在使用模板的每个编译单元都需要看到完整定义才能实例化优点:简单直接,保证所有使用模板的地方都能看到完整定义缺点:可能增加编译时间,暴露实现细节。

2025-06-03 23:48:14 1359

原创 容器适配器

1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定 的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。

2025-06-02 21:11:14 835

原创 Linux环境基础开发工具使用

工程是需要被清理的 ,像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行, 不过,我们可以显示要make执行。在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而 没有定义函数的实现,那么,是在哪里实“printf”函数的呢?,不存盘强制退出vim)

2025-06-01 23:20:34 905

原创 List模拟实现

List底层是双向链表结构,在任意位置插入、删除效率更高,但不支持任意位置的随机访问,需要遍历,list还需要一些额外的空间,以保存每个节点的相关联信息(对于存储类型较小元素的大list来说这可能是一个重要的因素)

2025-06-01 12:39:16 1278

原创 Linux权限

添加一个aaa的用户删除一个aaa用户这个命令会删除/etc/group和文件中的用户信息,但不会删除用户的家目录和邮件目录此时家目录下没有aaa用户创建出来的用户是不可以使用sudo操作的,需要进行加入白名单操作退出时当前文件为只读,wq!强制退出即可在 Linux 系统中,每个文件和目录都有拥有者和所属组,并有各自的权限拥有者(User):拥有文件的用户,一般是文件的创建者。所属组(Group):多个用户可以属于同一个组,组内用户共享权限。

2025-05-30 23:36:19 838

原创 vector

迭代器底层实际就是一个指针,或者是对指针进行了 封装,迭代器失效,实际就是迭代器底层对应指针所指向的 空间被销毁了,而使用一块已经被释放的空间,造成的后果是程序崩溃(即如果继续使用已经失效的迭代器, 程序可能会崩溃)。对于vector会引起其底层空间改变的操作,都有可能是迭代器失效: resize、reserve、insert、assign、 push_back等。具有连续性,可用下标访问,vector使用动态分配数组来存储它的元素,通过insert与pop函数来实现动态变化。一、什么是vector。

2025-05-29 22:22:30 493

空空如也

空空如也

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

TA关注的人

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