自定义博客皮肤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)
  • 收藏
  • 关注

原创 计算机网络初识

d. 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;3. 协议再设计的时候,就是被层状划分的(网络协议也是层状的)。问:只要俩台相互通信的计算机之间,提前沟通好协议就行了嘛?问:如何让这些不同厂商之间生产的计算机能够相互顺畅的通信。答:不是的,存在多种因素,例如,方言例子。计算机之间的传输媒介是光信号和电信号,

2024-03-19 19:15:14 270

原创 Linux--多线程

答:结构体struct page里面有大量变量。4kB大小的内存,然后通过一个数组。

2023-12-30 21:32:04 334

原创 进程的信号

本质:用户调用系统接口 -> 执行os对应的系统调用代码 -> os提取参数,或者设置特定的数值 -> os向目标进程写消息 -> 修改对应进程的信号标记位-> 进程后续会处理信号-> 执行对应的处理动作。答:什么信号(位图中哪一个比特位),是否产生(1,产生 0,没有)---进程中的位图结构,os只要将信号写入到进程pcb内部的位图结构中。c. 信号产生是随机的,进程这时候可能正在执行任务,所以进程的后续处理,可能不是立即处理。d. 信号会临时的记录下对应的信号,方便后续(合适的时候)进行处理。

2023-12-25 14:18:24 843

原创 进程间通信

因为进程运行具有独立性,所以进程间通信难度是比较大的,进程间要想通信,首先要让不同的进程看到同一份资源(特定的结构组织的),这个资源不属于任何一个进程,而是被进程共享的。管道是Unix中最古老的进程间通信的形式,我们把一个进程连接到另一个进程的一个数据流称之为管道,具有一种单向通信的方式。c. POSIX进程间通信:消息队列,共享内存,信号量,互斥量,条件变量,读写锁。4. 管道是基于文件的,文件的生命周期随进程,管道的声明周期是随进程的。总结:匿名管道用于具有血缘关系的进程进行通信,常用于父子进程。

2023-12-21 14:36:39 35

原创 Linux_基础IO

6. Linux下一切皆文件,站在系统的角度,能够被input读取,或者能够被output写出的设备就叫做文件,狭义文件:普通磁盘文件,广义文件:显示器,磁盘,网卡,声卡,显卡,几乎所有外设。b. 语言具有跨平台性,每个平台都有自己的操作系统,要让一种语言在不同的平台都能实现,实现方式:把所有平台的文件系统调用代码进行封装,条件编译,动态裁剪。a. 调用系统接口成本高,而且需要有一定程度对操作系统的理解,语言提供的文件类访问接口,本质是对操作系统的接口进行封装,使用比较简单。

2023-11-18 17:34:40 54

原创 LInux进程控制

给子进程分配对应的内核数据,必须子进程自己独有,因为进程具有对立性,理论上,子进程也要有自己的数据和代码,可是一般而言,子进程没有加载的过程,所有子进程只能和共用父进程的代码和数据,代码是只读的,可是数据却是可写的,所以必须得分离。答:可能拷贝的一些数据子进程根本就不会用到,即便是使用了,可能也只是读取。问:fork之后,父子进程代码共享的是fork之后的还是父进程所有的代码?面试题:请你描述一下,fork创建子进程,操作系统都做了什么?问:OS为何要选择写时拷贝的技术,对父子进程分离?

2023-11-12 15:20:22 40

原创 Linux进程概念

答:一个设备传输数据的快慢,不是由传输最快的存储单元决定,而是由传输最慢的存储单元决定的,例子(木桶原理),存储器可以和软件相互配合,因此在CPU访问存储器(内存)之前,操作系统可以提前把CPU要访问的数据,从输入设备存储到内存中,这样就可以提高效率。答:一个叫做进程控制块的数据结构,可以理解为进程属性的集合,实际上就是一个struct结构体,里面包含着进程的所有属性数据和前一个前PCB结构和后一个PCB结构的指针。答:先描述,在组织。操作系统的原理:先描述,再执行(例子:校长管理学生)

2023-11-04 16:33:50 39

原创 Linux基础开发工具

配置vim:curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh。文件编译:[yht@Aassion lesson6]$ gcc -S test.i -o test.s。文件汇编:[yht@Aassion lesson6]$ gcc -c test.s -o test.o。a.命令模式(默认打开):输入i 进入编辑模式;输入shift +;

2023-10-31 21:05:24 49

原创 Linux权限

答:目录起始权限是从777开始,文件起始权限是从666开始,umask,权限掩码,凡是在umask中出现的权限,都不应该在最终权限中出现,最终权限=起始权限 & (~umask)。目的:当多个用户共享一个目录,需要在该目录下,进行读写,创建删除文件,只能删除自身,而不能删除其他用户。chmod u+/-rxw xxx 表示u对xxx文件进行+/-权限。chmod g+/-rxw xxx 表示g对xxx文件进行+/-权限。Linux下创建文件对应的文件类型和权限:-rw-rw-r--

2023-10-31 12:00:17 27

原创 Linux的常见指令及使用方法

echo "abcd" > file.txt 打印abcd到file.txt文件中,file可以是不存在的文件,把原本应该显示到显示器的内容写入到文件中。小知识点:a. /home/yht/105/lesson 第一个/ : 表示根目录 / : 路径分隔符。b. Linux整个目录结构实际上是一颗多叉树结构 :a. 目录(路上节点) b. 文件/空目录(叶子节点)date +%Y/%m/%d-%H/%M/%S 自己控制时间的打印方式。

2023-10-30 15:52:51 48 1

原创 C++map/set user

有英文单词与其对应的中文含义,而且,英文单词与其中文含义是一一对应的关系,即通过该应。也是用来存储数据的,与序列式容器(list,vector,string)不同的是,其。:通过空间配置器来申请底层空间,不需要用户传递,除非用户不想使用标准库提供的。该单词,在词典中就可以找到与其对应的中文含义。作为其底层结果,容器中的元素是一个有序的序列。T : set中存放元素的类型,实际在底层存储。中的元素进行迭代时,可以得到一个有序的序列。,但是可以从容器中插入或删除它们。来比较的,缺省情况下按照小于来比。

2023-06-19 14:51:17 52

原创 C++搜索二叉树(二叉搜索树)

在二叉搜索树中检索该单词是否存在,存在则拼写正确,不存在则拼写错误。、从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。、最多查找高度次(h),走到到空,还没找到,这个值不存在。,统计成功后,给定单词就可快速找到其出现的次数,,通过英文可以快速找到与其对应的中文,英。2.2 往树中插入一个值 (思想同查找)以词库中所有单词集合中的每个单词作为。,或者是具有以下性质的二叉树。2.3 删除树中的一个数。,构建一棵二叉搜索树。文单词与其对应的中文。

2023-06-17 18:01:33 96

原创 C++三大特性之多态

b. 协变,基类与派生类虚函数的返回值不同,但必须基类返回值类型是基类类型的返回值或者引用,派生类返回值类型是派生类类型的返回值或者引用,而且基类和派生类返回值类型,可以不是自身类型,但返回类必须构成父子关系,才能构成协变。解释:不加virtual不构成多态,编译链接时确定地址,运行时call函数地址,没有虚表,调用的是A对象的析构函数,加virtual构成多态,运行时去虚函数表里面找,call函数地址,调用的时重写的B对象的析构函数。多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。

2023-06-10 13:24:05 64

原创 数据结构八大排序算法,排序只会冒泡排序?进来我教你

元素集合越接近有序,直接插入排序算法的时间效率越高。希尔排序法又称缩小增量法。,它是一种稳定的排序算法。

2023-06-03 20:25:44 77

原创 C++三大特性之继承

派生类自身的成员,内置类型不处理,自定义类型调用它的默认构造,继承基类的成员,如果有默认构造函数,自动调用,没有则需要在初始化列表显示调用基类的构造函数初始化。实际上面的表格我们进行一下总结会发现,基类的私有成员在子类都是不可见。成员在派生类中是不能被访问,如果基类成员不想在类外直接被访问,但需要在派生类中能访问,就定义为protected。派生类的拷贝构造函数必须调用基类的拷贝构造完成基类的拷贝初始化。继承下来的成员都只能在派生类的类里面使用,实际中扩展维护性不强。,增加功能,这样产生新的类,称派生类。

2023-06-03 17:35:32 64

原创 STL的stack,queue和priority_queue

是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行 元素的插入与提取操作。优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,

2023-06-01 15:58:43 33

原创 C++STL之list

的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。器失效的,只有在删除时才会失效,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响。是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。迭代到该位置,在这段位置上迭代需要线性的时间开销;最大的缺陷是不支持任意位置的随机访问,比如:要访问。在插入元素时,要给所有的迭代器重新赋值,因为插入。迭代器失效即迭代器所指向的节点的无效,即该节。

2023-06-01 12:11:19 188

原创 二叉树的结构和基本操作

以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是。:若一个节点含有子节点,则这个节点称为其子节点的父节点;:一个节点含有的子树的根节点称为该节点的子节点;:一棵树中,最大的节点的度称为树的度;:一个节点含有的子树的个数称为该节点的度;:具有相同父节点的节点互称为兄弟节点;:从根到该节点所经分支上的所有节点;:树中节点的最大层次;:双亲在同一层的节点互为堂兄弟;,根节点没有前驱结点 除根节点外,)棵互不相交的树的集合称为森林。:从根开始定义起,根为第。个或多个后继 因此,

2023-05-30 17:49:47 50

原创 C++中vector类的用法介绍,迭代器失效和底层实现

一 思想:尾插1,2,3,4四个数据,找到为3数据的下标,然后插入一个数据30,没插入之前 vector对象v1的容量为4,插入之后需要扩容,v1的指针指向了新开辟的空间,之前指针指向的那块区域已经被释放,pos指针指向的是已经释放的空间,所以用pos指针访问和在pos指针前插入数据就是非法访问。二 思想:vector是一段连续的物理空间,删除一个数后,后面的空间会向前移动,这时候如果it++,就会跑到删除这个数地址的后俩位。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。

2023-05-25 12:50:17 287

原创 图解创建堆和堆排序(超详细)

下面我们给出一个数组,这个数组逻辑上可以看做一颗完全二叉树,但是还不是一个堆,现在我们通过算 法,把它构建成一个堆。根节点左右子树不是堆,我们怎么调整呢?现在我们给出一个数组,逻辑上看做一颗完全二叉树。我们通过从根节点开始的向下调整算法可以把它调整 成一个小堆。普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。使用顺序结构的数组来存储。

2023-05-19 20:37:31 1899 1

原创 C++中string类的用法介绍及底层实现

string是C++标准库的一个重要组成部分,主要用于字符串处理,可以使用输入输出流的方式直接进行string操作,也可以通过文件等手段进行string操作,同时,C++的算法库堆string类也有着很好的支持,并且string类还和C语言的字符串之间有着良好的接口。的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP。C++标准库string类中一些常见接口。结尾的一些字符的集合,为了操作方便,2.1string类构造函数。

2023-05-14 14:38:52 619

原创 C++模板介绍(简洁易懂)

在编译器编译阶段,对于模板函数的使用,编译器需要根据传入的实参类型来推演生成对应类型的函数以供 调用。比如:当用double类型使用函数模板时,编译器通过对实参类型的推演,将T确定为double类型,然 后产生一份专门处理double类型的代码,对于字符类型也是如此。函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定 类型版本。1. 一个非模板函数可以和一个同名的函数模板同时存在,而且该函数模板还可以被实例化为这个非模板函 数。如何实现一个通用的交换函数呢?

2023-05-06 21:45:01 112

原创 内存管理(C/C++)

2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口 创建共享共享内存,做进程间通信。4. 数据段--存储全局数据和静态数据。5. 代码段--可执行的代码/只读常量。1. 栈又叫堆栈--非静态局部变量/函数参数/返回值等等,栈是向下增长的。3. 堆用于程序运行时动态内存分配,堆是可以上增长的。

2023-05-05 12:44:36 32

原创 友元 内部类 匿名对象 Static

比如上述Time类和Date类,在Time类中声明Date类为其友元类,那么可以在Date类中直接 访问Time类的私有成员变量,但想在Time类中访问Date类中私有的成员变量则不行。内部类是一个独立的类, 它不属于外部类,更不能通过外部类的对象去访问内部类的成员。注意:内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访 问外部类中的所有成员。友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在 类的内部声明,声明时需要加friend关键字。

2023-05-04 20:32:31 50

原创 类的六个默认成员函数(C++)

6. 关于编译器生成的默认成员函数,很多人会有疑惑:不实现构造函数的情况下,编译器会 生成默认的构造函数。内置类型就是语言提供的数据类 型,如:int/char...,自定义类型就是我们使用class/struct/union等自己定义的类型,看看 下面的程序,就会发现编译器生成默认的构造函数会对自定类型成员_t调用的它的默认成员 函数。构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证 每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次。

2023-04-27 17:52:10 331

原创 C++类与对象

1. 类是对对象进行描述的,是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没 有分配实际的内存空间来存储它;C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏 的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量” 的操作,都是通过该指针去访问。结构体中只能定义存放数据的结构,操作数据的方法不能放在结构体中,即数据和操作数据 的方式是分离开的,而且实现上相当复杂一点,涉及到大量指针操作,稍不注意可能就会出错。

2023-04-27 11:42:37 63 1

原创 C++入门(补充c语言不足之处)

1. 实际项目通常是由多个头文件和多个源文件构成,而通过C语言阶段学习的编译链接,我们 可以知道,【当前a.cpp中调用了b.cpp中定义的Add函数时】,编译后链接前,a.o的目标 文件中没有Add的函数地址,因为Add是在b.cpp中定义的,所以Add的地址在b.o中。以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直 接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效 率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就更低。

2023-04-26 21:45:16 71

原创 c++命名空间(弥补c缺陷)

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存 在于全局作用域中,可能会导致很多冲突。: 如果一个项目是由多个人一起负责,可能会出现定义的变量或者函数名字相同等等的困扰,这时候如果要改名字的话,会花费不小的代价。定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。c.同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。,namespace关键字的出现就是针对这种问题的。

2023-04-17 21:14:09 108 1

原创 算法的时间复杂度和空间复杂度

一 个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知 道。实例5: 基本操作执行最好1次,最坏O(logN)次,时间复杂度为 O(logN) ps:logN在算法分析中表 示是底 数为2,对数为N。空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。实例4: 基本操作执行最好N次,最坏执行了(N*(N+1)/2次,通过推导大O阶方法+时间复杂度一般 看最坏,时间复杂度为 O(N^2)空间复杂度为O(N)

2023-04-16 17:52:00 69 3

空空如也

空空如也

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

TA关注的人

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