文件系统的由来

启蒙篇

文件的由来

  • 磁盘上保存的是一对十六进制的数据,如何切分数据形成不同的文件,也就是如何确定一个文件的起始和终止位置?
  • 将相关数据打包在一起形成一个文件,比如从什么位置开始到什么位置结束,是一张图片、一段文字、一个视频
  • 还需要为每一个打包文件配置一个 FCB,类似PCB
  • FCB保存在磁盘,记录文件的名字、文件的起始位置、文件的终止位置等信息
  • 通过文件的名字  匹配 FCB中符合的文件,通过名字作为检索,查询文件的相关信息,比如文件的存储位置

目录的由来

  • 每个文件 都有 与之对应的FCB  
  • 将FCB的集合重新打包成一个文件,形成目录文件(其他文件的档案袋),其他文件叫做普通文件,比如 图片、视频、文档
  • 操作系统启动的时候,将目录文件读取到内存,就可以使用户看到文件结构

文件管理逻辑图

  • 文件系统由文件和目录两个部分组成
  • 文件:逻辑结构  数据怎么组织?如何打包?
  • 目录:物理结构  组织好的数据如何保存?
  • 数据 打包 形成文件
  • FCB 打包 形成目录
  • 物理结构:组织好的数据如何存储?

闲聊文件系统

  • 操作系统、文件系统和存储器都有很多类型
  • 通常讲win、linux具有那种文件系统的方法和原理
  • 操作系统:unix 、 linux 、 windows 、 android 、 ios  、macos
  • 文件系统:ext 、NTFS(win)  、APFS(MAC)、 FAT 、YFFS、JFFS
  • 存储器:硬盘类 、光盘类 、磁带类、flash类 (固态硬盘、U盘、云盘)
  • 文件系统的基本构成 = 文件 +  目录;使得磁盘数据保存、管理、搜索更加便捷化和人性化

 

基础篇

文件的逻辑结构和物理结构

  • 逻辑结构:文件是由不同的十六进制数据组成的,每个数据都有指定的位置,如果数据的位置打乱了,就不可以表示先前的数据,文件就没有意义。比如删除文件的一部分,使文件损坏。
  • 物理结构:将磁盘进行切割,分成很多块,每一块散列存储在磁盘
  • 使用的时候,将物理结构按照逻辑顺序拼接在一起就形成了正确的逻辑结构,就可以还原原本的文件

文件系统的逻辑结构(数据是如何组织起来的)

文件的逻辑结构

  • 有结构文件:记录式文件:格式多样化(描述信息,比如位置信息等等)、内容多样化(字体的颜色大小)、便于搜索查询
  • 有结构文件 比如excel,即使只记录一个字母,但是需要记录大量的相关信息,因此文件会很大
  • 无结构文件:流式文件 ,比如txt,仅仅可以按照顺序简单记录每一个字符;
  • *并不是所有文件的所有内容都是可视化的
  • 流式文件特征:1,简单顺序,以字节为单位记录每一个数据;2,由于没有结构,搜索的时候只可以穷举搜索,适用性很差;3,适用于对基本信息单位操作(修改操作)不多的文件,比如源代码、目标代码文件、图片

有结构文件的数据组织:

  • 1,数据项:最低级的数据组织形式,文件的细胞,每个的数据项的长度不一样。数据项是最小单元,word的数据单元是单个字,excel的数据单元是单个表格
  • 2,记录:一组有意义的数据项的组合,关键字,唯一标识一个记录,每个记录的长度都可能不一样
  • 3,文件:文件系统中最大的数据单位
  • 知识点准备
  • 1,抽象化 ,以记录为最小单位
  • 2,抽象化后的定长记录(不够标准定长的数据就补长)和变长记录(每个记录的长度不一样)的表示
  • 3,定长(直接访问或者顺序访问)和变长记录(顺序访问)方式的查询(变长需要有一个字节来记录数据的长度)

顺序文件

  • 分为1,串结构(时间排序,往表格里面输入的先后顺序)定长和变长 ;2,顺序结构(关键字排序,按照成绩排序)分为定长和变长
  • 特点:1,对顺序文件的记录做增加删除比较困难,需要移动和重新排序;2,只有顺序文件可以保存在磁带上;3,定长记录的顺序文件比变长记录的顺序文件查找快

索引文件

  • 原因,变长文件查询比较麻烦,只可以使用顺序查找的方式进行查询。对变长记录的顺序文件进行改进,使其可以直接访问/顺序访问(索引表)
  • 索引表 是定长的,利用直接访问的优势
  • 索引表:索引号(排序的位号) 、 记录长度(配合第三个参数) 和记录指针     索引表是附文件,将索引表拼接在主文件(变长顺序存储)的前面,就形成了索引文件
  • 特点:1,通过索引表查询记录很快;2,索引表会导致文件大小的增加,因为拼接了索引表

索引顺序文件

  • 分组 ,索引表记录键值和逻辑地址,逻辑地址是指向不同分组的第一个逻辑地址
  • N个记录分为根号N 组,平均查询根号N次
  • 增加索引表多占了空间,但是提高了存取速度
  • 组间索引 组内顺序
  • 同组无序,组间有序

Hash文件

  • 直接文件 = 散列文件 = HASH文件 = 哈希文件
  • 散列文件存取文件的速度很快,但是会引发冲突 -> 数据结构 Hash查找
  • Hash(记录) = 记录应该保存的位置(物理位置) 
  • 好的hash函数会减少冲突的次数,但是冲突不会避免

目录文件的逻辑结构(PCB是如何组织起来的?)

文件控制FCB

  • FCB保存在磁盘上 ,记录文件的相关信息
  • FCB 记录 文件名、逻辑结构、物理结构、文件类型(目录类型还是普通文件)、文件大小、磁盘位置(物理位置)、控制信号(文件保护,文件的权限)、计数信息(文件共享)
  • 多个FCB排列组合变成了目录结构
  • FCB数量有限,文件的数量有限

索引节点inode

  • 过程:将FCB分解,目录文件只保留文件的名字,除了文件名字之外的信息打包形成的块,简称inode
  • 拆解的原因:原版的FCB太大,导致目录文件的很大,电脑查询文件的时候,需要将目录文件调入内存,导致内存的消耗变大。其次,读取大的目录文件的时候,磁盘访问次数也会变多,导致文件查询速度很慢,瘦身之后的FCB就克服了这个缺点
  • 节点表 记录所有inode,查询的时候,需要通过文件名字查询FCB,找到对应的inode,再到节点表查询inode里面查询物理位置
  • 节点表保存在磁盘,瘦身版FCB(文件名+inode号)时读入内存,不用的时候存储在磁盘
  • 索引节点:编号递增且唯一。每个索引节点唯一关联一个目录文件或者普通文件(inode代替先前的原版PCB成为文件的档案袋)
  • inode数量有限,操作系统安装的时候就已经确定了
  • 这种方式适用于Unix系统

目录结构

单级目录结构

  • FCB连续,每个FCB对应一个文件,没有文件夹的概念
  • 目录基本操作
  • 1,检索文件
  • 2,创建文件,先申请FCB,再分配内存空间
  • 3,删除文件,先回收磁盘块,再删除FCB
  • 4,移动文件,(没有目录层级的概念,复制剪贴)
  • 特点
  • 1,实现按名存取,但是不可以重名
  • 2,检索文件很慢
  • 3,不适用于多用户操作系统,(用户空间隔离,彼此文件不可见)
  • 4,没有文件夹

两级目录结构

  • 针对单级目录的优化
  • 实现了多用户,但是灵活性不够,不可以对文件进行分类管理
  • 相关FCB都相联,比如不同用户的FCB相联,同一用户的不同文件的FCB相联
  • 区分了用户,但是用户进入自己的文件夹下,和单级目录结构一致,只有文件,没有层级结构

多级目录结构

  • 改进两级目录,解决不可以对文件进行分类的问题
  • 特点
  • 1,更好的对文件进行分类管理,树形目录层次清晰、分类清晰
  • 2,磁盘启动次数多 因为按照树形结构,从上到下,每一级分别读入内存进行查询(按块读取)(一块就启动一次)

无环图目录结构

  • 树形目录结构 + 有向边 = 无环图目录
  • 被多条有向边指向的目录文件,就是被共享的文件
  • 设计的目的是为了共享 
  • 有向边 由硬链接/软连接 实现

文件共享

  • 文件共享 的原因:1,单机  节约空间,只保留一个副本(缺点,牵一发动全身,个人修改对别人影响很大);2,联网  互联网发展的必然性 C/S 模型 ,不同用户访问同一文件

硬链接共享

  • 云盘共享数据 ,接收别人共享的文件,保存到我的云盘,本质是添加inode号,使得多个用户关联同一份文件,inode号指向文件
  • 需要添加计数信息参数,删除文件,就是删除关联inode的信息,同时减少计数
  • 只有当文件的计数为0,代表这个文件不再被使用,删除文件,回收inode
  • inode通过物理地址直接找到文件的存储位置,速度很快

软连接共享

  • link类型文件,文件内 存有共享文件的路径,因此会增加磁盘访问的次数
  • 可能引起错误(新的文件和旧的文件同名的时候)
  • linux的软连接模式 和 windows的创建快捷方式相似
  • 软连接,通过文件的层级目录找到文件,仅仅依靠目录层级和文件的名字作为索引

文件保护

  • 文件保护是通过索引节点inode和文件控制块FCB一起使用实现的
  • 文件保护的原因 ,防止共享文件被未经过批准的用户随意修改和破坏
  • 文件保护的方式
  • 1,口令:FCB添加口令,口令匹配才可以通过,防止随意存取
  • 2,加密:对文件的数据进行加密,即使获取文件,也无法解密数据;缺点:需要使用对应的加解密文件,需要耗费时间
  • 3,访问控制:不同角色拥有不同的权限,设置访问控制表。这个一般Unix使用比较多,对文件分为拥有者、组、其他,分别对应读、写、执行三种权限
  • 口令和访问控制,都是在FCB的控制信息里面添加内容

文件系统的物理结构

文件的实现(物理结构)

文件物理结构学习逻辑图

  • 文件保存到磁盘 -> 最小单位为块(4kb、1kb)块设备
  • 问题
  • 1,存在哪?文件的分配方式
  • 2,哪可存?磁盘存储空间的管理

文件的分配方式

  • 连续分配
  • 思想:文件分配一组连续的磁盘块
  • 特点:
  • 1,顺序访问  直接访问(起始地址 + 每一块的大小 * 数据块数)
  • 2,外部碎片多,内部碎片少
  • 3,适合长度固定的文件的(比如图片、视频)
  • 磁盘块的顺序很重要,需要从指定位置读取指定大小的文件内容;存文件的时候,也需要顺序存放
  • FCB表格 : 文件的名字、存储的起始位置、文件的长度

  • 链接分配 分为 隐式链接分配 和 显式链接分配;解决内部碎片的问题
  • 隐式链接分配 
  • 思想:顺藤摸瓜 / 做记号;  像链表一样,把不连续的空间碎片,链接在一起;每一个块的后面记录下一个存储的位置信息
  • 特点:可以顺序访问,不可以直接访问;稳定性不好(如果中间数据损坏,就无法衔接下一个文件,造成文件的损坏)
  • FCB里边的物理结构,会确定文件的类型是连续分配、隐式链接分配、显式链接分配等,按照对应的规则,读取目录文件
  • FCB  隐式链接分配的目录文件记录 文件的名字、起始位置和结束位置
  • 因为有链接的存在,假设链接占据2b,每个块存储(4kb - 2b)大小的内存

  • 显式链接分配
  • 解决隐式链接分配不稳定的问题(中间断裂)
  • 思想:先存再读,整个磁盘设置一张表,记录每个磁盘块的分配情况,该表叫做FAT
  • 查询FAT,防止中间层数据断裂
  • 特点:FAT表占用空间比较大,磁盘无所谓,但是内存卡会浪费很大的空间

 单级索引分配

  • 思想:为每个文件都建立一个索引表,记录该文件的磁盘块分配顺序
  • 将索引表记录在一个磁盘块,FCB的索引填写 索引表的存储磁盘号
  • 索引表:文件的名字、索引(索引表记录磁盘块的分配顺序,索引记录索引表所在的磁盘位置)
  • 文件读取的时候,现根据文件的名字,读取索引表的;将索引表读入内存之后,根据索引表依次读取文件
  • FCB的物理结构会记录 模式  单级索引
  • 特点:可以直接访问,但是索引表占据了磁盘的空间,文件很大,需要的索引表也会很多

多级索引分配

  • 解决索引块长度不一致,使索引表变成一个变长文件,不利于直接访问的问题,再次构建索引表
  • 8M文件占据多少空间? 8Mb + 3* 4kb

 

混合索引

  • 直接索引、单级索引、二级索引、三级索引等同时使用
  • 条件:盘块4kb大小、盘块号4B大小
  • 问:混合索引最大支持的文件大小?4TB + 4GB + 4MB + 4kb
  • 3GB文件实际需要占用多大的空间? 好复杂 
  • 一个盘块可存 4kb/4B = 1k 个盘块号
  • 直接索引:4kb
  • 单级索引:1k * 4kb = 4MB
  • 二级索引:1k *1k * 4kb = 4GB
  • 三级索引:1k * 1k *1k *4kb = 4TB
  • 文件的索引顺序 依次是 直接、单级、二级、三级

存储空间管理

空闲表法

  • 解决哪里可以存?
  • 空闲盘块表:序号 、 第一个空闲的盘块号、 空闲数量;主要用于连续分配
  •  分配:分配算法,如首次适应、最佳适应、最坏适应、邻临适应、循环首次适应
  • 回收:合并问题,(删除)
  • 存在哪里?

空闲链表法

  • 空闲盘块链:盘块号+下一节点指针
  • 空闲盘区链:首个盘块号 盘区大小 下一个盘区指针
  • 数据结构里面的链表,还是单链表

位示图法

  • 由0和1 组成,1代表存储数据,0代表没有存储数据

成组链表法

  • 一组一组形成链表,就是成组链表法
  • 并不详细  回收和分配

目录的实现(物理结构)

线性链表

  • 目录文件 依次查询(线性链表)
  • 例题
  • 有一个文件系统,根目录常驻内存,如图所示,文件目录采用链接结构,每个目录下最多放80个目录或者文件(称为下级文件),每个磁盘块最多放10个文件目录项,如果下级目录是目录文件,则上级目录指向该目录文件的第一块磁盘。假设目录结构中第一块文件按照从左向右的顺序排列,... 表示有其他文件或者目录
  • 问题:k文件 最少 或者 最多 查询几次磁盘
  • 文件 文件夹 都是文件
  • 最多查询 8 次,采用链接表的方式存储,需要根据头结点 到 尾节点 依次查询
  • 每次 读取数据 都需要启动磁盘

哈希表

  • 考的少
  • 利用文件的名字进行哈希运算,得到文件的存储位置

层次结构

为什么要分层?

  • 每一层各司其职(下层为上层服务)
  • 高内聚 低耦合
  • 利于修改代码。推行版本的更新 和 便于移植

具体内容

  • 从下往上
  • 设备(硬件):磁盘、flash、光盘等等
  • 设备管理模块(软件):驱动程序 (读写控制磁盘等)
  • 物理文件系统:存在哪里?物理结构,文件的分配方式
  • 辅助分配模块:哪里可存?磁盘存储空间管理
  • 逻辑文件系统:文件以及目录的逻辑构成
  • 存取控制模块:文件的保护
  • 文件目录系统:根据文件的名字来搜索FCB
  • 用户接口:GUI、命令行、系统调用(API)
  • 用户 普通用户 程序员

磁盘的组织和管理

磁盘的结构

  • 扇区,一圈扇区围成的同心圆环叫一条磁道
  • 圆环就是磁道从外往里命名
  • 盘面  圆形的物理结构
  • 多个圆形的盘面 相垂直的部分 构成 柱面,柱面号 和 磁道号 一致
  • 约靠近扇区的圆心,扇区的密度越大
  • 通过柱面号 盘面号和扇区号唯一确定一个扇区

磁盘的读写

  • 相关概念:
  • n:跨越的磁道数
  • m:磁盘的固定参数,是常数;移动一条磁道的耗时
  • s:磁臂启动时间,也是常数
  • r:转速;单位 转/秒 
  • b:扇区字节数
  • N:一条磁道字节数

磁盘的一次读写时间 大概值(期望数值/平均数值)

  • 一次读写时间:期望值/平均值 Ta = 需找时间 Ts + 延迟时间 Tr + 传输时间Tt
  • 寻找时间:磁头跳转磁道的时间,也就是寻找柱面号 (也是磁道号,多块盘的磁道组织在一起构成柱面);m 磁盘的固定参数,是常数,平均移动一条磁道的耗时;s 磁臂启动时间,也是常数,需要给磁臂充电,然后才有能量进行磁道之间的切换
  • 延迟时间:磁道确定之后,磁头还需要等待目标扇区的到来,扇区旋转;期望值,Tr = 1/2r 
  • 延迟时间推导:转速 一般是固定的,一般是7200转/分钟  7200/60=120转/s  每转一圈 1/r 秒,每个扇区用 1/r(x+1)秒;磁头移动之后,定位的第一个扇区是随机的,计为A,该磁道的每一个扇区都可能是目标扇区,成为目标扇区的几率是 p = 1/(x+1)  则,Tr = 1/2r
  • 传输时间:传输时间是在延迟时间的基础上来看的,Tt = b / rN                       
  • 磁头掠过所有的扇区,怎么只读一个扇区?磁头电子开关,如果不开启,读取的数据是无效的
  • 减少Ts:优化寻道顺序 -> 磁盘的调度算法
  • 减少Tr:盘面错位编号 和 扇区交替编号 ;增大转速
  • 减少Tt:增大转速,如果磁盘确定,则无法优化

磁盘调度算法

FCFS算法

  • 先到先服务

SSTF算法 最短寻找时间优先算法:磁头优先向最近的请求磁道移动

  • 坏处  容易造成两边的饥饿
  • 只有左边完成之后,才会到右边

 

SCAN算法 = 电梯算法

  • 根据初 ,优先向当前磁头位置最近的磁道移动,直到遇到边界才可以折返
  • 如果没有指出方向,按照 从小 到 大的次序访问,即一般向右访问
  • 利于两端的磁道的访问请求(折返,相当于接替访问两次)

进化版-> LOOK算法 到最远请求则折返

  • 题目中,没有特别说明是普通SCAN,则默认是改进型SCAN算法(即LOOK算法)
  • 区别在于,不直到遇到边界才折返

CSCAN算法和CLOOK算法  循环扫描算法,从头跑,不折返

  • CSCAN算法 根据初始磁头方向,确定一个单方向,优先向偏离磁头当前位最近的磁道移动,直到遇到边界才重头跑(不是往返跑)
  • 克服了SCAN算法,利于两端磁道请求的问题
  • CSCAN算法

  • CLOOK算法

 

减少延迟时间

  • 交叉编译:同盘扇区交叉编号;不同盘面错位命名
  • 扇区 = 头 + 数据 + 尾;如果按照顺序进行编号,处理第一个头尾的过程中,因为磁盘的转动,会错过第二个扇区,如果想读取第二个扇区的数据,需要循环一周,浪费时间,因此采用交叉编号
  • 通过交叉编号,可以很好衔接 同盘面同磁盘的连续扇区

系统安装的过程

  • 低级格式化 -> 扇区 = 头 + 数据 + 尾
  • 磁盘分区(多个柱面构成一个分区);主分区 C;逻辑分区:D E
  • 第一个0开始的分区 不会分给C盘,而是装载了MBR,主要引导程序和分区表;分区表记录每一个逻辑分区和主分区 的
  • 首先将安装系统的主分区标记位活动分区,在主分区安装OS 同时安装FS,

磁盘的管理

  • 系统安装过程
  • 1,低级格式化 -> 把盘面分成扇区,(分成柱面号、盘面号和扇区号),每个扇区都有头和尾确定扇区的开始和结束
  • 2,磁盘分区,(多个柱面构成一个分区),主分区 装入引导程序 和 分区表(分区表记录不同C盘、D盘等分区的信息),确定活动分区,也就是操作系统安装的盘
  • 3,主分区安装OS操作系统,同时安装文件系统,每个分区可以安装不同的文件系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

英语口语 week13 Wednesday

英语文章 Despite his extraordinary success in writing fairy tales,Hans Christian Andersen preferred to living in a way of simplicity and frugality. He often wore an old hat when he went out. One day, a well-dressed man stopped Andersen on the street, inte…

操作系统 IO管理

学什么? I/O input / output 输入:鼠标 键盘 手柄 触摸屏 摄像头 MTC 扫描仪输出:显示器 打印机 耳机 音响 既是输入也是输出:光驱 网卡 磁盘 U盘硬件:设备如何把数据返回到PC机,但是不同种类的设…

c++面向对象高级编程 学习九 pointer-like classes

c的class设计出来有两种形式,一种像指针,一种像函数 智能指针里包含普通指针,要写 * 和 -> 的函数 sp->method(); //sp-> 经 T* operator*() const 函数,得到px //由于 箭头符号(->)作用下去…

const int *a和int*const a 的区别详解

补充知识 “const int i”与“int const i”之间的区别对变量来说,const 关键字可以限定一个变量的值不允许改变,从而保护被修饰的东西,防止意外修改,在一定程度上可以提高程序的安全性和可靠性。 代码 const int * int i1 10…

c++面向对象高级编程 学习十 function-like classes

本节是设计一个class,使它的行为像一个函数。 如果一个东西能接受小括号()操作符,那么这个东西就称之为函数,或像函数的东西。 下图为三个函数对()的重载,这三个类均为像函数的类,它们可接受()操作符, 标…

英语口语 Week14 Monday

英语文章 Thailand, a country in Southeast Asia with an area of about 514,000 square kilometers, has been increasingly prosperous in its tourism industry in the past few decades. Its capital is Bangkok and its major languages are Thai, Chinese and English.…

c++面向对象高级编程 学习十一 类模板、函数模板、成员模板

namespace经验谈&#xff1a; 团队中函数或类的名字可能会冲突&#xff0c;因此使用namespace进行区分。 类模板&#xff1a; template<typename T> 函数模板&#xff1a; template<class T>&#xff0c;此处class可改成typename 函数模板在使用的时候&#xff0…

操作系统面试 总结

以下文章来源于程序员cxuan &#xff0c;作者cxuan 原文链接什么是操作系统 操作系统是管理硬件和软件的一种应用程序。操作系统是运行在计算机上最重要的一种软件&#xff0c;它管理计算机的资源和进程以及所有的硬件和软件。它为计算机硬件和软件提供了一种中间层&#xff…

英语口语week 14 Thursday

英语文章 A couple decided to go out to celebrate their wedding anniversary, so they called a babysitter. When the babysitter arrived, the two children had already been asleep. The babysitter soon got bored and went to the kitchen where she blended some wh…

c++面向对象高级编程 学习十二 模板

模板特化&#xff1a; 模板是一种泛化的形式&#xff0c;特化是将参数类型进行指定&#xff0c;写出特化的版本&#xff0c;当在调用下图cout<<hash()(1000);的时候&#xff0c;由于特化中有struct hash{ }的版本&#xff0c;因此会直接调用特化部分。 模板偏特化&…

英语口语 week14 Friday

英语文章 Shopping is taking place every second. However, the prices of the same goods may differ from store to store. A name-brand dress may cost several hundred pounds at a boutique, but only half the price in a discount store or a big chain store. Moreo…

数据结构 树

定义 树是节点的优先集合度&#xff1a;孩子的数量&#xff0c;度为0 就是终端节点&#xff0c;不为零就是根节点有序树&#xff1a;有顺序&#xff0c;不可以替换无序树&#xff1a;无顺序&#xff0c;可以替换深度 和 树的深度相反&#xff0c;第一层深度为1 树的深度为 3 二…

英语口语 Week15 TuesDay

英语文章 One day, when Bella was doing sports in the school yard, the squirrel fled out of her sleeve. Threading its way through a considerable number of people, the squirrel disappeared in the distance After a sequence of movements, it hopped onto the ar…

c++面向对象高级编程 学习十四 引用

文章目录referencereference的常见用途reference 变量有三种形式&#xff1a;值&#xff0c;指针&#xff0c;引用 int x0; //值 int* p&x;//指向整型的指针&#xff0c;地址&#xff0c;指针在之后的程序中可以指向其他变量 int& rx;//引用&#xff0c;此处表示 r代…

google浏览器 隐藏功能开启

网址 chrome://flags/ 1&#xff0c;多线程下载 2&#xff0c;暗黑模式3&#xff0c;标签缩略图4&#xff0c;PWA 渐进式web应用 网页即应用5&#xff0c;阅读模式&#xff0c;排除广告&#xff0c;点击阅读模式去除干扰chrome://net-internals6&#xff0c;解决有问题的代理IP…

英语口语Week 15 Wednesday

英语文章 Accomplishing the task assigned by the teacher; Julia rushed out. Squatting at the gate and playing with the squirrel, Bella waved at the sight of Julia and yelled out here" . Julia ran quickly towards them, pointed at the squirrel and asked…

c++面向对象高级编程 学习十五 组合继承关系下的构造和析构

文章目录继承关系组合关系继承和组合继承关系 构造由内而外&#xff0c;析构由外而内&#xff0c;内即是父类 组合关系 A拥有B&#xff0c; 构造由内而外&#xff0c;析构由外而内&#xff0c;内即是B 继承和组合 构造和析构顺序如图&#xff1a;

英语口语Week16 Wednesday

英语文章 Recently my friend received a gift from her boyfriend - a very expensive bracelet. But the substance of her response left us in astonishment - she didn’t attend to the exquisiteness(of the gift and wanted to return it to him In terms of salary, …

C++ 查漏补缺

特性关系 C语言面向过程C面向过程 面向对象(封装 继承 多态)C具备C语言的全部特性的基础上&#xff0c;并且支持更多新的特性 内存泄露 申请内存&#xff0c;没有释放申请 malloc new释放 free deleteProcessExplorer查看内存是否释放 代码移植 将生成的exe运行在别的平台&…

c++面向对象高级编程 学习十六 vptr和vtbl

当一个类中有一个或多个虚函数时&#xff0c;内存中会多一个虚指针&#xff08;vptr&#xff0c;virtual pointer&#xff09;&#xff0c;指向一个虚表&#xff08;vtbl&#xff0c;virtual table&#xff09; 父类有虚函数&#xff0c;则子类一定有虚函数 在下图示意图中&a…