操作系统期末|考研复习知识点汇总 - 持续更新

news2024/10/25 10:55:13

本文将根据个人学习进度对b站王道408课程以及题目考察的知识点进行整合,视频中详细的导图将会直接复用,并且将会对一些重点知识进行扩展以及一些思维导图的补充,目前第三章内容正在整理中……

一:计算机系统概述

1.1操作系统概念和功能

①:操作系统概念和功能

补充 :

有关系统调用应该注意的知识点
1:系统调用的目的请求系统的服务
2:区别系统调用和系统调用的调用
  1. 系统调用:这是指操作系统提供的接口,允许用户程序请求内核级功能。例如,open()read()write()等函数都是系统调用,它们直接与操作系统内核进行交互。(一定是在内核态)

  2. 系统调用的调用:这通常是指用户程序在代码中实际执行系统调用的过程。当用户程序调用某个系统调用函数时,这就是“系统调用的调用”。简单来说,它指的是在用户空间代码中执行某个系统调用的行为。(可能在内额)

②:操作系统的特征

 1.2操作系统的发展

Ⅰ:了解各系统的优缺点,以及诞生的主要目标是什么

Ⅱ:优缺点对比 

 1.3操作系统的的运行机制

  ①:中断和异常 

Ⅰ:有关中断的扩展 
有关中断的知识补充
常见的内中断非法操作码 缺页 除0 运算溢出
中断向量表中断向量表用于帮助CPU自检,在OS初始化过程中由BIOS(硬件)生成,可由OS进行扩展和初始化
中断与内核态联系使操作系统由用户态转内核态的过程都是由硬件完成的,中断只是引发该操作的原因之一,当程序出现"中断异常"硬件将操作系统转为内核态后,执行对应的中断程序。因此:中断处理程序属于OS程序,运行在核心态,但是被中断程序可以是用户程序
外部中断
  1. 硬件中断:通常由外部设备发起,常见的硬件中断类型包括:

    • 定时器(时钟)中断:由系统定时器产生,用于操作系统调度等操作。
    • I/O中断:外部设备(如键盘、鼠标、网络适配器、磁盘驱动器等)发出的中断信号,表示设备准备好进行数据传输。
    • 电源管理中断:用于处理电源状态的变化,比如休眠或唤醒。
  2. 外部信号中断:来自于外部信号源的中断,如:

    • 按键中断:当按下某键时,发送中断信号给处理器。
    • 外部传感器中断:如温度传感器、光传感器等,产生中断以通知处理器。
  3. 异常中断:有些外部条件(如过载、故障)会引发异常中断,应用程序需要相应的处理。

  4. 网络中断:网络接口卡(NIC)接收到数据包时会产生的中断。

外部中断与OS的联系
  1. 中断处理机制:外部中断是由外部设备(如键盘、鼠标、网络设备等)产生的信号,用于通知CPU某个事件的发生。操作系统需要实现中断处理机制,来响应这些中断,并进行相应的处理。

  2. 上下文切换当外部中断发生时,当前正在执行的程序会被挂起,操作系统会保存当前程序的上下文信息(例如:通用寄存器,中断屏蔽字,PC由隐指令保存,TLB,PSW和Cache以及中断程序的中断点由硬件保存,然后转而运行中断处理程序。处理完中断后,操作系统会恢复先前的程序状态,继续执行。这一过程称为上下文切换。

  3. 设备驱动程序:外部中断通常与设备驱动程序相关联。当外设需要CPU的服务时,会产生中断请求,操作系统通过设备驱动程序来管理和响应这些中断,实现对硬件设备的控制。

  4. 实时性与调度:外部中断的处理时间和优先级会影响操作系统的调度策略。在实时操作系统中,外部中断可能需要立即响应,以保证系统的实时性能。

  5. 资源管理操作系统需要协调和管理多个外部设备的中断请求,确保系统的稳定性和数据的一致性。例如,同一时间内可能会有多个设备产生中断,操作系统需要合理调度这些中断的处理顺序。

总结来说,外部中断是操作系统与硬件设备之间的桥梁,通过高效的中断处理机制,操作系统可以及时响应外部事件,保障系统的正常运行和各个程序的有效执行。

Ⅱ:中断程序与子程序比较
比较点中断程序子程序调用
触发机制由硬件设备或系统事件自动触发由程序员显式调用
控制流会中断当前执行的程序,转而执行中断处理在程序中显式地调用,并在返回后继续执行
优先级通常具有较高的优先级,需要快速响应优先级取决于程序的结构和逻辑
执行环境通常处于内核模式或特权级别执行通常在用户模式下执行
保存状态中断时需要保存当前执行上下文,以便恢复函数调用时保存返回地址和局部变量
调用返回中断处理完成后,需要恢复到之前的状态子程序完成后,通过返回指令返回调用点
目的处理异步事件、硬件信号、异常等代码复用、模块化、逻辑分离
执行次数通常是偶发的,取决于外部事件的发生可以多次调用,取决于程序逻辑
运行时影响可能影响整个系统的响应和性能只影响调用该子程序的程序逻辑
程序计数器(PC)需要保护PC和PSW内容,由中断隐指令完成需要保护PC内容,由CALL指令完成

②:系统调用  

Ⅰ:系统调用的调用与子程序调用比较

表格

特性子程序调用系统调用
定义在程序内部调用的模块或函数程序请求操作系统提供服务的机制
执行环境用户空间用户空间与内核空间之间
性能执行速度较快执行速度较慢
安全性相对较高较低,可能导致安全漏洞
参数传递通过栈、寄存器、全局变量等方式传递通常通过特定寄存器或内存缓冲区
使用场景代码重用、模块化设计获取系统资源,如文件、进程管理等
上下文切换无需(同一进程内调用)需要(从用户态切换到内核态)
返回值处理直接返回通过特定机制返回(如errno)

1.4操作系统体系结构

①:宏内核与微内核的对比

  1. 定义与架构

    • 宏内核:所有操作系统服务(如进程管理、内存管理、设备驱动等)都在内核空间中运行,提供高效的系统调用和资源管理。
    • 微内核:仅保留最基本的功能(如进程间通信、基本的内存管理),其他服务(如文件系统、网络协议等)在用户空间中运行。
  2. 优缺点对比

    • 宏内核
      • 优点:性能较高,系统调用开销小,适合高性能需求的环境。
      • 缺点:内核复杂度高,易出现稳定性和安全性问题。
    • 微内核
      • 优点:内核简单,易于维护和扩展,系统稳定性和安全性较高。
      • 缺点:性能较低,用户空间与内核空间的频繁切换可能导致开销增加。
  3. 应用场景

    • 宏内核通常用于需要高性能和低延迟的系统,如实时操作系统。
    • 微内核适合于需要高可靠性和安全性的系统,如嵌入式系统和分布式系统。
  4. 实例

    • 常见的宏内核操作系统有Linux和Windows。
    • 常见的微内核操作系统有Minix和QNX。
  5. 设计哲学

    • 宏内核强调高效的资源管理和快速的系统调用。
    • 微内核则强调模块化和灵活性,允许不同服务独立运行

②:常见操作系统结构

常见操作系统结构
宏内核Windows IOS macoS Linux
微内核谷歌Fuchsia 华为鸿蒙OS

③:各体系结构特征,优缺点对比

1.5操作系统引导 

Ⅰ:操作系统引导概念:

操作系统引导(Booting)是指计算机从关闭状态或重启状态释放硬件并加载操作系统的过程。这个过程通常分为几个步骤,涉及硬件初始化、加载操作系统内核以及最终交接控制权给操作系统。

Ⅱ:磁盘数据 
  1. 引导扇区(Boot Sector):

    • BIOS引导扇区(MBR):通常位于硬盘的第一个扇区,负责引导磁盘上的操作系统。MBR包含了引导程序及分区表。
    • GPT引导:在使用GUID分区表(GPT)时,系统会有一个EFI系统分区(ESP),其中包含EFI引导程序。
  2. 操作系统内核:

    • 操作系统的核心文件,负责管理硬件资源和提供接口给应用程序。这个内核文件通常位于某个特定的目录下(如 /boot、C:\Windows\System32 等)。
  3. 引导配置文件:

    • 包含引导参数和设置,比如 GRUB 和 LILO 的配置文件。在 Windows 系统中,有引导管理器(Boot Manager,通常为 BCD 文件)来配置引导选项。
  4. 驱动程序:

    • 磁盘上还存放着硬件驱动程序,它们在引导过程中被加载,以便更好地管理外部设备。
Ⅲ:引导过程

  1. 开机自检(POST):

    • 开机时,BIOS(或UEFI)会进行自检,检测计算机硬件是否正常,例如内存、硬盘、显卡等。
  2. 加载引导程序:

    • 完成自检后,BIOS会查找引导设备(通常是硬盘、USB或CD/DVD),读取引导扇区(MBR或GPT)中的引导程序,并将其加载到内存中。
  3. 引导加载程序的执行:

    • MBR引导程序会找到并加载操作系统的引导加载器(如GRUB、LILO、Windows Boot Manager等)。这些引导加载器会根据配置文件,引导特定的操作系统内核。
  4. 加载操作系统内核:

    • 引导加载器开始加载操作系统的内核文件到内存,同时调用相应的初始化程序。这一阶段还可能会加载必要的驱动程序。
  5. 硬件初始化:

    • 内核启动后会进行进一步的硬件初始化,包括设置进程管理、内存管理、文件系统和设备驱动等。
  6. 用户空间的启动:

    • 完成所有初始化后,内核会启动第一个用户进程(在Linux中通常是initsystemd,在Windows中是smss.exe),此进程将负责启动系统中的其他服务和用户界面。

1.6虚拟机

Ⅰ:了解两类虚拟机区别

二:进程与线程

2.1:进程

①:进程的概念,组成,特征

2.2:调度

2.3:进程同步和互斥

2.4:死锁

①:死锁的概念

 ②:死锁的处理策略

 

1:静态策略 预防死锁

                重点:关于死锁定理定位是用于处理检测死锁的方法。

                此处是根据死锁定理,预防任意一个条件以达到无法发生死锁的目的

死锁定理
互斥条件对于必须使用的资源的争抢才会导致死锁

SPOOLing技术将独占设备改造为逻辑上共享资源

(例: 给打印机添加输出队列,将进程请求挂载到队列上,依次处理,在逻辑上看各个进程都申请到打印资源,从而进行后续操作)

缺点:可改造的资源有限,不是所有互斥资源都能共享
不可剥夺进程获得的资源在未使用完之前,不可被剥夺,只能主动释放方案一:当一个进程申请新的资源得不到满足时,需要将已有资源全部释放,待以后需要重新申请缺点:(长时间得不到某个资源可能会导致饥饿)
方案二:当某个进程需要资源被其他资源占用,由OS协助,强行剥夺该资源缺点:(反复申请会增加开销, 释放资源可能会导致前一阶段的工作失效,实现难度大,只适用于易保存和恢复状态的资源)
请求并保持进程已拥有至少一个资源,但新的资源请求不通过且已拥有的资源不释放静态分配方法(一次性分配策略):运行前一次性申请完全部资源才运行 

缺点:

1:各个资源需要运行的时间不一,被申请后可能长时间处于空闲状态,降低系统资源利用率和吞吐量

2:如果有大量单资源需求的进程,那么多资源需要的进程很容易导致饥饿

循环等待存在一个进程资源的循环等待链顺序资源分配法:给资源按序分配序号,每个进程只有先申请到所需的小序号资源,才能申请大序号资源

缺点:

1:新增资源需要重新分配编号

2:实际应用顺序与编号递增顺序不一致,可能会导致资源浪费(例如:扫描仪为3号资源,打印机为1号资源,某个进程需要先使用扫描仪再使用打印机,那么在申请到扫描仪之前,打印机一直处于空闲且被占用的状态)

3:必须按照规定次序申请资源,用户编程麻烦(代码逻辑要先申请扫描仪后打印机,不同系统的资源编号可能导致不同的顺序)

 2:动态策略: 避免死锁

Ⅰ: 安全序列和安全态:

进程按照特定顺序给进程分配资源,就不会发生死锁,则该顺序组成的序列称为安全序列

 例   {P8 P1 P9 …… Pn}

当前状态能找到一个安全序列就是安全态,反之为不安全态(此状态可能会发生死锁)

Ⅱ:银行家算法

核心思想:根据此次资源分配是否会导致系统进入不安全态来决定是否进行此次资源分配

有关银行家算法应该注意的知识点 

        注1 : 有m个同类资源,n个进程,每个进程最多申请k个资源时采用银行家算法分配资源,

        只要保证最大需求量小于等于m就一定有一个安全序列,保证各进程最大需求量之和小于m +          n个就不会发生死锁(极端情况n - 1个进程申请了1个资源,1个进程申请了m个资源)

         注2: 银行家算法虽然会通过检测是否存在安全序列来判断申请资源的请求是否合法,但是           安全序列并不是唯一的,也不是固定的,它只是一种可执行方案,而非一种必须遵循的规               则,因此它不需要限制用户申请资源的顺序且它不能用于判断系统是否进入死锁状态        ·

 3:死锁的检测和解除 - 允许死锁发生

Ⅰ:死锁的解除
死锁的解除
资源剥夺法挂起部分死锁进程,剥夺其资源分配给其他死锁进程会导致饥饿
撤销进程法(终止进程法)强制撤销部分甚至全部死锁进程,并剥夺其资源导致先前工作功亏一篑,代价大
进程回退法让一个或多个进程回退到可以避免死锁的时间节点需要OS记录进程历史信息设置还原点,难度大

4:死锁的解决策略总结 
预防死锁的策略

共享化资源

资源全分配策略:在请求资源时,任务必须一次性请求并获取所需的所有资源,否则不分配任何资源

优先级策略:为资源分配设定优先级,确保高优先级的进程能够获得其所需资源,从而降低低优先级进程引发死锁的可能性。

序列化:对于资源的请求和释放,确保进程按照一定顺序请求资源。

避免死锁的策略

银行家算法:根据进程的最大需求和可用资源判断资源分配是否会导致安全状态,进而避免不安全的资源分配

资源预分配法:要求进程在开始执行之前申请所需的全部资源,没有足够的资源时,进程无法开始执行

总资源分配顺序:对资源进行全局排序,所有进程按照固定顺序请求资源,从而保障没有循环等待发生。

检测死锁的策略

资源分配图法:资源分配图是一个有向图,用于表示某时刻系统资源和进程之间的状态,其中,有向边包括进程指向资源的申请边,资源指向进程的分配边,圆圈节点表示进程,矩形框表示资源,其中的圆点表示资源数

时间戳法:为每个进程分配一个时间戳,基于进程的等待和持有资源的时间,判断是否存在死锁。

死锁检测算法:定期运行死锁检测算法,检查当前资源分配情况,识别系统中的死锁并采取相应的措施,例如回收被某些进程持有的资源
5:死锁中的数据结构 
Ⅰ:资源有向图
  • 定义:资源有向图是一种图形表示方式,其中节点表示进程和资源,边表示资源的请求和分配。
    • 从资源节点到进程节点的边表示进程对该资源的请求。
    • 从进程节点到资源节点的边表示资源被某个进程持有。
  • 用途:资源有向图用于检测死锁。一旦图中存在环路,就说明系统可能已发生死锁。
Ⅱ:前驱图(也称用于数据流分析的前驱图)
  • 定义:前驱图用于表示某一进程的状态和依赖关系。通常在操作系统中,前驱图的节点表示进程的状态,边表示状态之间的转换。
  • 用途:在避免死锁和资源调度中,可以使用前驱图来跟踪进程的状态,确保进程之间的依赖关系不会导致循环等待。
Ⅲ:安全图
  • 定义:安全图用于表示系统的安全状态,即可以成功完成的进程序列。通常在银行家算法中使用。
  • 用途:确保在给定的资源分配下,系统始终处于安全状态,如果系统进入不安全状态,则可能会发生死锁。

 ③:死锁中应当注意知识点

使用信号量进行控制的方法能确保互斥访问,但不能完全避免死锁最简单的例子,A B 进程都需要C D资源A - C , B - D;两者都被阻塞
Ⅰ:哲学家问题解决死锁的破坏条件
  1. 控制可拿筷子的人数:循环等待

  2. 控制拿筷子顺序:循坏等待

  3. 同时检查2只筷子:保持并等待条件

Ⅱ:区分循坏等待和保持并等待条件
  1. 互斥条件:至少有一个资源必须处于非共享状态,即某个资源(在这个案例中是筷子)只能被一个哲学家使用。

  2. 保持并等待条件:一个哲学家持有至少一根筷子(资源),但正在等待另一根筷子。这意味着他并不释放已经持有的资源。

  3. 不抢占条件:已经分配给哲学家的资源(筷子)在他们完成使用前,不会被其他哲学家抢占。

  4. 循环等待条件:存在一个哲学家形成一个循环,彼此间都在等待对方持有的筷子

1. 判断是否破坏了循环等待条件
  • 破坏循环等待:要解决循环等待,可以通过对资源的分配顺序进行调整或规定资源请求的优先级。具体方法包括:
    • 资源请求顺序:对资源进行排序,要求所有进程以固定的顺序请求资源。这样可以防止形成环路。
    • 撤销某些进程:直接终止某些进程,使得资源的占用关系不再形成环路。
  • 如何判断:检查解决策略是否改变了资源的分配方式,是否确保资源总是被请求而不会形成环路。如果策略明确规定了资源的请求顺序或限制了进程的资源请求,那么这就是破坏了循环等待条件。
2. 判断是否破坏了保持并等待条件
  • 破坏保持并等待:要破坏保持并等待条件,通常的做法是:

    • 主动释放资源:在进程请求新资源时,强制其释放当前持有的资源。这意味着一个进程在请求其他资源时,如果已经持有资源,就必须首先释放它们。
    • 非持久性分配:要求所有资源在请求时必须一次性申请到所有需要的资源,进程不能在持有某些资源的情况下再请求新的资源。
  • 如何判断:检查解决策略是否要求进程在请求新的资源之前释放已持有的所有资源。如果是,那么该策略就破坏了保持并等待条件。

Ⅲ:进程的执行严格遵循优先级并不能破坏死锁定理的条件
  • 例高优先进程用完时间片,下处理机后,低优先级进程将高优先级进程所需资源占用
Ⅳ:信号量在特殊情况下避免死锁的发生
在单行线问题中,由于信号量的控制,双方进程无法同时进入行道中,发生在道中相遇,都无法通过的情况,此时无死锁发生

三:内存管理

3.1:内存管理方式

①:内存的基础知识

②:内存管理概念

③:覆盖与交换

Ⅰ:覆盖技术

 Ⅱ:交换技术
 Ⅲ:覆盖与交换的区别(理解概念选择题常考)

④:内存空间分配与回收

Ⅰ:连续分配管理方式
1:单一连续分配方式

2:固定分区分配

3:动态分区分配 

Ⅱ:非连续分配管理方式

⑤:动态分区分配算法

1:首次适应算法

2:最佳适应算法

3:最坏适应算法

4:邻近适应算法

5:动态分区分配算法对比

⑥:基本分页存储管理概念

⑦:基本地址变换机构

⑧:具有块表的地址变换机构

⑨:两级页表

⑩:基本分段存储管理

⑪:段页式管理方式

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

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

相关文章

解锁PDF权限密码

目录 背景: 定义与功能: 过程: 主要功能: 使用方式: 使用限制: 注意事项: 总结: 背景: 前段时间自己设置了PDF文件的许可口令,忘了口令导致自己无法编辑内容等,这…

7、Nodes.js包管理工具

四、包管理工具 4.1 npm(Node Package Manager) Node.js官方内置的包管理工具。 命令行下打以下命令: npm -v如果返回版本号,则说明npm可以正常使用 4.1.1npm初始化 #在包所在目录下执行以下命令 npm init #正常初始化,手动…

docker基础使用创建固定硬盘大小为40G的虚拟机

在docker中创建的服务器,匹配出容器id,服务器ip,服务器核数,服务器内存,服务器硬盘空间 for i in $(docker ps | grep -aiE web | awk {print $1});do echo $i; docker inspect $i|grep -aiE ipaddr|tail -1|grep -ai…

Spring Boot 依赖注入为 null 问题

目录 问题 省流 代码复现 TestService TestAspect TestController 源码分析 AbstractAutoProxyCreator CglibAopProxy Enhancer 问题 工作中,在负责的模块里使用 DubboService 注解注册了一个 dubbo 接口,给定时任务模块去调用。在自我调试阶…

使用Bert+BiLSTM+CRF训练 NER任务

使用的数据集在这里E-Commercial NER Dataset / 电商NER数据集_数据集-阿里云天池 针对面向电商的命名实体识别研究,我们通过爬取搜集了淘宝商品文本的标题,并标注了4大类,9小类的实体类别。具体类型及实体数量如下 针对面向电商的命名实体…

解决:如何在opencv中得到与matlab立体标定一样的矫正图?(python版opencv)

目的:采用一样的标定参数,matlab中和opencv中的立体矫正图像是一样的吗?不一样的话怎么让它们一样? 结论:不一样。后文为解决方案。 原因:注意matlab的标定结果在matlab中的用法和在opencv中的用法不一样&a…

OpenCv-01

使用opencv对图像进行一些简单的处理 首先知道自己的工作目录 import os cwdos.getcwd() 命名一张图片 my_imagelenna.png 获得图片路径 image_pathos.path.join(cwd,my_image) import cv2 imagecv2.imread(my_image) #imread()函数将图片转换为ndarray数组 image.sh…

大数据新视界 --大数据大厂之 Snowflake 在大数据云存储和处理中的应用探索

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

探索华为云DataArts Insight:数据智能的新引擎

在快速发展的数字化时代,数据已经成为企业最宝贵的资产。如何有效地管理和利用这些数据,以实现商业价值,是每个企业需要面对的重要挑战。华为云DataArts Insight平台应运而生,作为一款强大的数据智能解决方案,它帮助企…

STANFORD SR570 斯坦福 SR570 前置放大器

斯坦福(Stanford)STANFORD SR570前置放大器,作为音频与电子测量领域的璀璨明珠,以其无与伦比的性能与精湛的工艺,赢得了全球专业人士的广泛赞誉。这款前置放大器不仅是技术的集大成者,更是艺术与科学的完美…

论文学习 | 《电动汽车锂离子电池健康状态估计及寿命预测方法研究》

Hi,大家好,我是半亩花海。本文主要对上述论文《电动汽车锂离子电池健康状态估计及寿命预测方法研究》进行学习与阅读总结,便于后续科研进一步学习(纯小白自读汇总版)。总体感觉这篇有点偏向数理方面,不过后…

【动手学深度学习】8.2. 文本预处理(个人向笔记)

本节将解析文本的常见预处理步骤包括:将文本作为字符串加载到内存中。将字符串拆分为词元(如单词和字符)。建立一个词表,将拆分的词元映射到数字索引。将文本转换为数字索引序列,方便模型操作。 1. 读取数据集 我们下…

leetcode-73-矩阵置零

题解: 1、获取矩阵的行数M与列数N; 2、 代码实现:

yolo目标检测和姿态识别和目标追踪

要检测摄像头画面中有多少人,人一排排坐着,像教室那样。由于摄像头高度和角度的原因,有的人会被遮挡。 yolo v5 首先需要下载yolo v5官方代码,可以克隆或下载主分支的代码,或者下载release中发布的。 简单说一下环境…

【python实战】利用代理ip爬取Alibaba海外版数据

引言 在跨境电商的业务场景中,数据采集是分析市场、了解竞争对手以及优化经营策略的重要环节。然而,随着越来越多企业依赖数据驱动决策,许多跨境电商平台为了保护自身数据,采取了更严格的防护措施。这些平台通过屏蔽大陆IP地址或部…

Idea、VS Code 如何安装Fitten Code插件使用

简介 Fitten Code是由非十大模型驱动的AI编程助手,它可以自动生成代码,提升开发效率,帮您调试Bug,节省您的时间。还可以对话聊天,解决您编程碰到的问题。免费且支持80多种语言:Python、C、Javascript、Typ…

python实战(一)——iris鸢尾花数据集分类

一、任务背景 本文是python实战系列专栏的第一篇文章,我们将从分类开始由浅入深逐步学习如何使用python完成常规的机器学习/深度学习任务。iris数据集是经典的机器学习入门数据集,许多分类任务教程都会以这个数据集作为示例,它的数据量是150条…

No.21 笔记 | WEB安全 - 任意文件绕过详解 part 3

(一)空格绕过 原理 Windows系统将文件名中的空格视为空,但程序检测代码无法自动删除空格,使攻击者可借此绕过黑名单限制。基于黑名单验证的代码分析 代码未对上传文件的文件名进行去空格处理,存在安全隐患。相关代码逻…

【软考高级架构】关于分布式数据库缓存redis的知识要点汇总

一.分布式数据库的含义 分布式数据库缓存指的是在高并发的环境下,为了减轻数据库的压力和提高系统响应时间,在数据库系统和应用系统之间增加一个独立缓存系统。 二.常见的缓存技术 (1)MemCache: Memcache是一个高性能的分布式的内…

openlayers 封装加载本地geojson数据 - vue3

Geojson数据是矢量数据,主要是点、线、面数据集合 Geojson数据获取:DataV.GeoAtlas地理小工具系列 实现代码如下: import {ref,toRaw} from vue; import { Vector as VectorLayer } from ol/layer.js; import { Vector as VectorSource } fr…