当前位置: 首页 > news >正文

操作系统-笔记-第三章-内存管理

🌸章节汇总 

一、第一章——操作系统的概念

二、第二章——【进程】

二、第二章——【线程】​编辑

二、第二章——【进程调度】

二、第二章——【进程同步与互斥】

二、第二章——【锁】

三、第三章——内存管理

四、第四章——文件管理

五、第五章——输入输出管理

​​​​​​​🚀 学习心得

目录

三、第三章——内存管理

1、内存的基础知识

(1.1)程序装入(三种)——绝对装入

(1.2)程序装入(三种)——可重定位装入

(1.3)程序装入(三种)——动态重定位

(2)程序——exe的由来

(3)程序——链接方法

(4)总结

2、内存管理的概念

(1)内存空间的分配和回收

(2)内存空间的拓展(比如:虚拟内存等)

(3)地址转换(逻辑地址-物理地址)

(4)内存保护

3、内存——覆盖与交换

(1)覆盖技术(已经out了)

(2)交换技术

(3)交换技术——对应的问题

(4)总结(考选择题)

4、连续分配管理方式

(1)单一连续分配

(2)固定分区分配

(3)动态分区分配

(4)总结

5、动态分区分配——算法(详细讲解)

(1)首次适应算法(第一次)

(2)最佳适应算法(从小到大)

(3)最坏适应算法(从大到小)

(4)临近适应算法(从大到小)

(5)总结(优缺点)

6、基本分页存储——概念

(1)页框——物理块——内存块——物理页面

(2)逻辑地址-结构【页号+页内偏移量】

(3)总结——概念

(4)重点——地址变换过程(五步)

(5)重点——例题

(6)重点——页表(如何存储在内存中)

(7)总结——地址变换

7、快表(TLB)

(1)查询过程——1(先快表,再慢表,最后内存)

(2)查询过程——2(同时查找-快表-慢表)

(3)局部性原理

(4)总结 (TLB和高速缓存有区别!!!)

8、两级页表(开始套娃啦)

(1)从一级—二级—偏移量(转到物理地址)

(2)单级页表

(3)细节重点

(4)总结

9、段页式管理方式

(1)段表

(2)查询段表——顺序

(3)分段 & 分页 【对比】

(4)总结

10、虚拟内存

(1)传统存储管理方式——特征、缺点

(2)虚拟内存——定义、特征

(3)如何实现——虚拟内存

(4)总结

11、请求页面——管理方式

(1)缺页中断(内中断)

(2)地址变换

(3)总结

12、页面置换算法

(1)最佳置换算法(无法实现)

(2)先进先出算法(绝对公平——Belady异常)

(3)最近最久未使用置换算法(LRU)

(4)时钟页面置换算法(CLOCK & NRU)

(5)时钟页面置换算法——改进型

(6)总结(要会手推——页面替换)

12、页面分配策略、抖动、工作集

(1)工作集模型(清华教程)

 (2)驻留集——分配策略【王道】

(3)何时调入页面(亡羊补牢 or 未雨绸缪)

(4)在哪里调入?(经典加一层)

(5)抖动现象

(6)工作集(拓展-考试貌似不考~)

(7)总结

13、内存映射文件

(1)方便程序员——访问文件数据

(2)共享数据——同时访问一个文件

(3)总结(关于磁盘的IO,操作系统是专业滴!)


三、第三章——内存管理

1、内存的基础知识

相关知识点

逻辑地址——相对地址

物理地址——绝对地址

(1.1)程序装入(三种)——绝对装入

灵活性差,已经被淘汰了~

(1.2)程序装入(三种)——可重定位装入

在装入时——会转换好地址~(写死了物理地址,不能移动咯!)

(1.3)程序装入(三种)——动态重定位

现在使用方法——可以动态修改,灵活移动,动态申请空间…

(2)程序——exe的由来

1.    编写源代码:首先,您需要使用文本编辑器编写C语言源代码文件,通常以.c为扩展名。

2.    编译源代码:接下来,您需要使用C编译器将源代码编译为机器可以执行的目标代码。这个过程称为编译。编译器会对源代码进行词法分析、语法分析和语义分析,并生成相应的目标代码文件(通常以.obj为扩展名)。

3.  链接目标代码:在生成目标代码后,您需要使用链接器将目标代码与所需的库文件进行链接,以创建最终的可执行文件。链接器会解决函数和变量引用之间的依赖关系,并将目标代码转换为可执行文件的格式。最终生成的可执行文件通常以.exe(对于Windows系统)或无扩展名(对于Linux系统)为扩展名。

4.    运行可执行文件:一旦可执行文件生成成功,您可以直接执行它。

(3)程序——链接方法

(4)总结

2、内存管理的概念

(1)内存空间的分配和回收

如何分配?如何回收?还有哪些空闲?这么多位置,应该分配哪一块?

(2)内存空间的拓展(比如:虚拟内存等)

内存不够用,如何临时拓展?

(3)地址转换(逻辑地址-物理地址)

地址转换功能

(4)内存保护

如何让各进程之间,拥有自己的地皮,互不影响!

3、内存——覆盖与交换

(1)覆盖技术(已经out了)

程序员来完成——编程麻烦(out)

(2)交换技术

把暂时不需要的进程——拿到外存

(3)交换技术——对应的问题

(4)总结(考选择题)

4、连续分配管理方式

(1)单一连续分配

无外部碎片——但:有内部碎片【内存利用率低】

(2)固定分区分配

把用户空间——划分多个分区~

无外部碎片——但又内部碎片,内存利用率低

 

(3)动态分区分配

没有内部碎片,但有外部碎片!

(不过可以通过【拼凑】等方式,来解决【外部碎片】)

(4)总结

5、动态分区分配——算法(详细讲解)

(1)首次适应算法(第一次)

从头到尾,按顺序扫描!

找到第一个满足的空间,就放进去~

(2)最佳适应算法(从小到大)

这个是强迫症!——必须安排连续的空间(产生难以利用的小碎片)

额外创建一个——空闲分区链表——用来记录空闲空间的大小(从小到大排序!)

每次安排完后,都需要【维护该表】(数据更新,重新排序)

(3)最坏适应算法(从大到小)

和最佳相反——空间排序【从大到小】

缺点——如果来个了“大进程”——可能没有足够大的连续空间给他!

(4)临近适应算法(从大到小)

从小到大的【循环链表】

开销小【空间换时间】——但是——大分区容易被用完~

(5)总结(优缺点)

6、基本分页存储——概念

(1)页框——物理块——内存块——物理页面

Page Frame —— 页框(标准点)

物理块号——页帧号——内存块号

页表——存储【逻辑地址】与【物理地址】的映射关系

如何计算——页表的大小(根据内存大小推算)【具体步骤——看左下角】

页号不占空间!!!——数组索引【这个页表——类似于一维数组~】

为了计算机计算——页面大小用2的【整数幂】

在计算机网络那里类似,计算也是这样,要方便得多~

(2)逻辑地址-结构【页号+页内偏移量】

(3)总结——概念

(4)重点——地址变换过程(五步)

文字说明版本——五步骤

(5)重点——例题

如何将【逻辑地址】——转为【物理地址】

(6)重点——页表(如何存储在内存中)

计算机组成原理——也有讲哟~~~

页表——存放在内存当中——也称为(慢表)

计算页表项——占多少位(最好是2的次方!)实际应用中——方便计算!

(7)总结——地址变换

7、快表(TLB)

查询快表——不需要访存(快表是高速缓存)

(1)查询过程——1(先快表,再慢表,最后内存)

(2)查询过程——2(同时查找-快表-慢表)

(3)局部性原理

(4)总结 (TLB和高速缓存有区别!!!)

普通的Cache会存放各种数据

但是——TLB——只存放页表项的副本!!!

8、两级页表(开始套娃啦)

记住——加一层的解决方式——可以多次套娃!!!(可以不止两层哟~)

(1)从一级—二级—偏移量(转到物理地址)

(2)单级页表

(3)细节重点

条件:40位逻辑地址——知道物理块的大小(4KB)——页表的每一项的大小(4B)

①地址偏移量需要多少位?

总共40位,一个物理块有4KB,(2^12位)——采用2进制表示偏移量:需12位

②还是剩下多少位——用来表示各级页表?40-12 = 28

③怎么分各级页表?随便分?(题目限制:各级页表的大小不能超过一个内存块!

④那么请问一个物理块可以容纳多少页表项?——2^12 / 4 = 2^10

每一级页表的大小不能超过物理块的大小!——那么只能按照内存块最大位数来分咯~

28 分为 10 – 10 – 8 (3级,一级:2^10,二级:2^10,三级:2^8)

当然,可以再分多级也可以啦~(只不过会有更多碎片!)

比如: 28分为 ——7,7,7,7(4级,每级2^7这么大)

详细结题——如下图:

(4)总结

9、段页式管理方式

(1)段表

段号——也可以隐含【类似数组的索引,是隐含的~】

(2)查询段表——顺序

分段中——每个长度不一样!!!

一定要越界检查!!!(段号是否越界?段内地址是否合法?)

(3)分段 & 分页 【对比】

分页——用户不可见——提高利用率——地址空间【一维——映射的物理地址】

分段——用户可见——满足用户需求——地址空间【二维——段名+段内地址】

分页——长度固定——更容易共享&保护

分段——长度不固定——

(4)总结

段表和页表——都存储在内存中——可以成为慢表

他们都可以再往上封装一层——即为:【快表】——加快CPU的查询效率!!!

(注意:这些术语只是方便我们理解,是前人们的智慧结晶~不要被这些术语锁死!)

快表为什么叫快表?因为他快!他在Cache里面,造价高…等等原因!

10、虚拟内存

(1)传统存储管理方式——特征、缺点

一次性——全部放入内存(太大了,可不行!)

驻留性——暂时用不上的(留着内存中,消耗了资源)

(2)虚拟内存——定义、特征

多次性、对换性、虚拟性

(3)如何实现——虚拟内存

【内存的页面】的【换入换出】(怎么实现)?

(4)总结

虚拟内存——是高速缓存技术的拓展!

既然你内存查询,都分了多个级别(Cache里面有三级)(内存里面就再分个级别吧~)

注意:计算机组成原理——在Cache章节,说明Cache的换入和换出!

为什么计算机组成原理那里只介绍了Cache的替换算法呢?

因为,【Cache替换的实现是由【硬件】完成的!

在这里,【内存】由操作系统来管理,自然需要操作系统(系统软件)来实现啊!

虚拟内存是计算机系统中的一种技术,用于将磁盘空间作为辅助内存来扩展主存(RAM)的容量。

它允许操作系统将部分数据移动到磁盘上,并在需要时将其还原回主存。

虚拟内存的设计目的是提供比物理内存更大的地址空间,以及更灵活的内存管理。

虚拟内存与高速缓存是不同的概念。

高速缓存是一种位于处理器和主存之间的存储器层次结构,用于加快对常用数据的访问速度。

而虚拟内存是一种通过存储器映射技术实现的内存扩展机制,用于增加可用的地址空间。

关于计算机组成原理中只介绍了Cache的替换算法而没有涉及虚拟内存的解释,可能是因为计算机组成原理的重点是硬件层面的设计和实现。

因此,在讲解Cache时主要侧重于硬件层面的实现细节,如替换算法、缓存一致性、写策略等。

而虚拟内存的管理是由操作系统来完成的,属于系统软件的范畴,因此在计算机组成原理这门课程中可能没有过多介绍。

需要注意的是,虚拟内存和Cache是不同层次的存储器技术,各自有不同的设计原理和实现方法。虚拟内存的管理涉及到操作系统的内存管理模块,而Cache的管理则由硬件电路来完成。

11、请求页面——管理方式

(1)缺页中断(内中断)

没有需要的页——产生中断

如果有空闲块——直接占用(没有的话,使用页面置换算法~)

(2)地址变换

(3)总结

12、页面置换算法

(1)最佳置换算法(无法实现)

这个是——理想算法(实际应用中,无法实现)

因为——他需要提前知道后面需要访问的页面是什么!(很显然,不能做到)

(2)先进先出算法(绝对公平——Belady异常)

性能差——注意——Belady异常!(随着访问次数增多,缺页次数反而减少!)

(3)最近最久未使用置换算法(LRU)

适用于局部性好的(性能好)——需要硬件支持,开销大

(4)时钟页面置换算法(CLOCK & NRU)

扫描的过程——像一个时钟——不断计数(访问位为:0 / 1)

最近未用算法

最坏情况——扫两轮(一圈多一点)

(5)时钟页面置换算法——改进型

会筛选4轮!(最坏情况下,要转3圈多一点)

1、未访问、未修改

2、未访问、已修改

3、已访问、未修改

4、已访问、已修改

(注意:访问的权利大!排在最后!)

(6)总结(要会手推——页面替换)

PS:并不止这些算法,还有其他替换算法哟~

比如——随机替换算法(和猴子排序类似的有趣,哈哈哈~)

最不常用算法(LFU)——考虑的是访问次数 or 频率

12、页面分配策略、抖动、工作集

(1)工作集模型(清华教程)

工作集——内存的区间(大小)——我觉得成为【工作间还挺好~】

【你活动的空间太大了,不太好】

【你活动的空间太小了,也不太好~】

当你经常卡壳(说明你活动空间小,需要增多活动空间)

当你不卡壳(说明你活得很滋润,浪费了一些空间,需要给你减少空间!)

资本家看了都流泪(┭┮﹏┭┮)~

 

 

 

 

 (2)驻留集——分配策略【王道】

1、开始给你分配固定的大小工作空间

2、动态给你调整(调整又分为内部调整、外部调整)

内部调整(局部)——把你进程内部的物理块变为工作区间

外部调整(全局)——把外部空间(空闲)物理块给你

(3)何时调入页面(亡羊补牢 or 未雨绸缪)

先调入?还是缺了再调入?(具体场景,具体分析~)

(4)在哪里调入?(经典加一层)

在外存中,再套一层(对换区)

方便页面置换(换出来的页面就放到“对换区”)

(5)抖动现象

物理块不够时,频繁访问页面——导致(频繁出现“缺页中断”)

(6)工作集(拓展-考试貌似不考~)

工作集 ≠ 驻留集

驻留集——给定的工作空间

工作集——在工作空间里(加了一个窗口,也就是时间间隔)

因此——驻留集 > 工作集

(7)总结

13、内存映射文件

(1)方便程序员——访问文件数据

传统方式——程序员手动写read、write方法,很麻烦

优化方式——操作系统为我们完成对外存的读和写(相当于操作系统封装了一层~)

我们就可以像——操作C语言那样,完成指定的读入和写入啦~

(2)共享数据——同时访问一个文件

参考Windows上的.txt文件(并不是互斥的哟~)

  1. 我可以用【记事本】打开~
  2. 我还可以用【VsCode】打开~

(3)总结(关于磁盘的IO,操作系统是专业滴!)

什么时候读,什么时候写(可以让操作系统来完成~)这方面的性能可以让操作系统来优化

程序员就可以放开手脚做其他的事情啦~

(当然,对应强迫症的工程师,可以自己来控制和考虑啦~)

相关文章:

操作系统-笔记-第三章-内存管理

🌸章节汇总 一、第一章——操作系统的概念 二、第二章——【进程】 二、第二章——【线程】​编辑 二、第二章——【进程调度】 二、第二章——【进程同步与互斥】 二、第二章——【锁】 三、第三章——内存管理 四、第四章——文件管理 五、第五章——输入输出管理…...

详解单体架构和微服务(概念,优缺点和区别)

单体架构和微服务 单体架构和微服务架构区别?为什么要用微服务架构? 单体架构的整个系统是一个War包,即war包走天下。微服务架构的项目是很多个war包(一个子系统一个)。 单体架构的优点: 架构简单开发测试部署简单…...

储能运行约束的Matlab建模方法

最近一段时间有很多人问我最优潮流计算中储能系统的建模方法。部分朋友的问题我回复了,有些没有回消息的,我就不再一一回复了,在这里我写一篇博客统一介绍一下。 1.储能系统介绍 首先,让【GPT】简单介绍一下储能系统:…...

微信小程序 车牌号输入组件

概述 一个小组件,用于方便用户输入车牌号码 详细 概述 有时候我们开发过程中会遇到需要用户输入车牌号的情况,让客户通过自带键盘输入,体验不好且容易出错,例如车牌号是不能输入O和I的,因此需要有一个自定义的键盘…...

Bootstrap Blazor 实战动态表单组件

1.新建工程 源码 新建工程b18ValidateForm,使用 nuget.org 进行 BootstrapBlazor 组件安装, Chart 库,字体. 将项目添加到解决方案中 dotnet new blazorserver -o b18ValidateForm dotnet add b06chart package BootstrapBlazor dotnet add b06chart package BootstrapBlazo…...

Elasticsearch 集成---Spark Streaming 框架集成

一.Spark Streaming 框架介绍 Spark Streaming 是 Spark core API 的扩展,支持实时数据流的处理,并且具有可扩展, 高吞吐量,容错的特点。 数据可以从许多来源获取,如 Kafka , Flume , Kin…...

Kotlin 中的 协程 基础篇

一、什么叫协程 协程可以称为轻量级线程,线程代码块; 二、GlobalScope 协程 CoroutineScope (协程作用域) 的上下文中通过 launch、async 等构造器来启动。GlobalScope ,即全局作用域内启动了一个新的协程,这意味这该协程的生命周期只受整…...

SQL事务

事务的概念: 事务是在数据库上按照一定的逻辑顺序执行的任务序列,既可以由用户手动执行,也可以由某种数据库程序自动执行。事务就是一些SQL语句组(每条单独的SQL语句也算一个事务),其中事务中的SQL…...

关于flutter中 initState() 与 setState() 用法

initState()函数是在组件渲染之前执行的。在Flutter中,initState()是StatefulWidget的生命周期方法之一,在调用build()方法之前被调用。当创建一个StatefulWidget并将其添加到组件树中时,Flutter会实例化该组件的状态对象,并在调用…...

智能电话机器人是如何自主学习的

电话机器人主要通过语音识别和针对语意的理解识别客户所说的内容,针对性的回答问题,为企业高效筛选意向客户。除了电话机器人语音识别之外,电话机器人能够自主学习,不断完善产品知识及话术等,是它智能的另一种体现。那…...

【Rust】Rust学习 第十八章模式用来匹配值的结构

模式是 Rust 中特殊的语法,它用来匹配类型中的结构,无论类型是简单还是复杂。结合使用模式和 match 表达式以及其他结构可以提供更多对程序控制流的支配权。模式由如下一些内容组合而成: 字面值解构的数组、枚举、结构体或者元组变量通配符占…...

我的学习笔记:数据处理

数据清洗 对数据进行处理和加工,以使其适合分析和建模。数据清洗包括去除重复数据、填补缺失值、处理异常值和转换数据格式等操作,以提高数据的可靠性和准确性,避免数据分析时出现偏差,提高决策的准确性。 数据去重:通…...

GB28181国标平台测试软件NTV-GBC(包含服务器和模拟客户端)

GB28181国标平台测试软件NTV-GBC用于对GB28181国标平台进行测试(测试用例需要服务器软件,服务器软件可以是任何标准的国标平台,我们测试使用的是NTV-GBS),软件实现了设备注册、注销、目录查询,消息订阅、INVITE&#x…...

云原生:重塑企业的技术疆界

云原生技术正在重新塑造我们对软件开发、部署和运维的理解。这些技术带来了灵活性、可扩展性以及在复杂环境中保证稳定性的可能性,这些都是企业在云原生场景中比较关注的问题。本文将主要聚焦于云原生场景,探讨其影响和作用。 云原生的定义 云原生计算基…...

华为星闪,一项将 “ 更稳 WiFi ” 和 “ 更好蓝牙 ” 融合起来的通信标准

兼顾多用途和专业化的 AI 大模型、移除安卓代码的 HarmonyOS NEXT 、给折叠屏应用提供适配方向的《 折叠屏/平板应用体验评估标准 》。。。 不过除了这些比较贴近我们普通用户,容易讲清楚的东西,华为还官宣了一个大家可能没注意的黑科技: 星…...

IDEA创建Mybatis格式XML文件

设置位置:File | Settings | Editor | File and Code Templates 选择Files,点击号 Name中输入xml模板名(名称自行决定),后缀名extension输入xml(固定) 内容处输入Mybatis的xml文件模板内容&…...

二叉树中的最大路径和-递归

路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root…...

Python if-else 速记

文章目录 在 Python 中使用三元运算符作为 if-else 速记总结 编程中经常使用速记符号来简化我们的工作。 速记符号是一种可以更简洁、更省时省力地完成工作的方法。 本文将讨论 Python 中使用的速记符号作为 if-else 语句的快捷方式。 在 Python 中使用三元运算符作为 if-else…...

Python使用内置的json模块来处理JSON数据

目录 1、解释说明: 2、使用示例: 3、注意事项: 1、解释说明: 在Python中,我们可以使用内置的json模块来处理JSON数据。这个模块提供了四个主要的函数:dumps、loads、dump、load。 - dumps:将…...

亿赛通电子文档安全管理系统 RCE漏洞

亿赛通电子文档安全管理系统 RCE漏洞 一、 产品简介二、 漏洞概述三、 复现环境四、 漏洞复现小龙POC检测: 五、 修复建议 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失…...

信息安全面试题合集

0x00 前言 本篇会记录一些可能会遇到的面试题,持续更新 0x01 Web SQL注入 sql注入常见的闭合方式有哪些?Mysql5.0上下sql注入有什么区别?SQL注入空格被过滤,有什么绕过方式?过滤了逗号,有什么绕过方式&…...

vue 简单实验 自定义组件 传参数 props

1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"todo-list-app"><todo-item v-bind:todo"todo1"></todo-item> </div> <script> const ListR…...

目标检测笔记(十一):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)

文章目录 背景代码结果 背景 由于我们在做项目的时候可能会涉及到某个指定区域进行目标检测或者人脸识别等任务&#xff0c;所以这篇博客是为了探究如何在传统目标检测的基础上来结合特定区域进行检测&#xff0c;以OpenCV自带的包为例。 一般来说有两种方式实现区域指定&…...

PID直观感受简述

0、仿真控制框图 1、增加p的作用&#xff08;增加响应&#xff09;P 2、增加I的作用&#xff08;消除稳差&#xff09;PI 3、增加D的作用&#xff08;抑制波动&#xff09;PID 加入对噪声很敏 4、综合比对...

Tomcat运行后localhost:8080访问自己编写的网页

主要是注意项目结构&#xff0c;home.html放在src/resources/templates下的home.html下&#xff0c;application.properties可以不做任何配置。还有就是关于web包的位置&#xff0c;作者一开始将web包与tabtab包平行&#xff0c;访问8080出现了此类报错&#xff1a; Whitelabel…...

传感网应用开发1+X实训室建方案

一、概述 1.1建设背景 从院校实际教学情况与人才培养计划为出发点&#xff0c;贯彻传感网应用开发1X实训室职业技能等级标准&#xff0c;充分考虑传感网应用开发1X实训室从业人员的职业发展路径与成长路径&#xff0c;以职业素养、职业技能、知识水平为主要框架结构&#xff…...

PDF校对:让您的文件无瑕疵

无论您是企业家、学生、教育者还是作家&#xff0c;我们都知道&#xff0c;提交或发布一个充满错误的PDF文件可能会给您的声誉或品牌带来严重损害。这就是为什么PDF校对如此关键的原因。现在&#xff0c;让我们深入了解PDF校对的重要性&#xff0c;以及如何确保您的文件尽可能完…...

SpringBoot--解决空字符串转枚举异常

原文网址&#xff1a;SpringBoot--解决空字符串转枚举异常_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何解决Java的SpringBoot中空字符串转枚举时报错的问题。 问题复现 org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot d…...

Redis的常用数据类型详解

Redis是一个开源的、基于内存的数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息代理。Redis支持多种数据类型&#xff0c;包括字符串、列表、集合、有序集合、散列等。理解这些数据类型的特性和使用方式&#xff0c;对于充分利用Redis的能力至关重要。以下是对Redis…...

jpa里IdentityGenerator和IncrementGenerator的区别

IdentityGenerator 和 IncrementGenerator 的区别 IdentityGenerator 和 IncrementGenerator 都是 JPA 中可用的主键生成策略&#xff08;GenerationType&#xff09;之一。它们的区别如下&#xff1a; IdentityGenerator: IDENTITY 主键生成策略利用数据库自动生成的主键。在…...

基于element UI 实现 table 列 拖拽

问题描述 在开发中遇到一个需求&#xff0c;即实现table列的拖拽&#xff0c;但是调研发现&#xff0c;大部分是基于sorttable.js这个包实现的&#xff0c;但是通过实际应用&#xff0c;发现sorttable.js用在操作element table 组件中并不是很舒服&#xff0c;总会莫名其妙的冒…...

(GPT、GEE)遥感云大数据、洪涝灾害监测、红树林遥感制图、河道轮廓监测、洪涝灾害监测、GRACE重力卫星、源遥感影像

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…...

vue中实现将页面或者div内容导出为pdf格式

将Vue单页面转成pdf并下载 步骤1&#xff1a;下载对应的库 npm install html2canvas;npm install jspdf --save 步骤2&#xff1a;创建一个htmlToPdf.js的js文件, 然后在main.js中全局引用一下&#xff0c;编写如下代码&#xff1a; // htmlToPdf.js // 导出页面为PDF格式 …...

Ubuntu 配置国内源

配置国内源 因为众所周知的原因&#xff0c;国外的很多网站在国内是访问不了或者访问极慢的&#xff0c;这其中就包括了Ubuntu的官方源。 所以&#xff0c;想要流畅的使用apt安装应用&#xff0c;就需要配置国内源的镜像。 市面上Ubuntu的国内镜像源非常多&#xff0c;比较有…...

分布式核心知识

文章目录 前言一、分布式中的远程调用1.1RESTful接口1.2RPC协议1.3区别与联系 二、分布式中的CAP原理 前言 关于分布式核心知识详解 一、分布式中的远程调用 在微服务架构中&#xff0c;通常存在多个服务之间的远程调用的需求。远程调用通常包含两个部分&#xff1a;序列化和通…...

【JMeter】常用线程组设置策略

目录 一、前言 二、单场景基准测试 1.介绍 2.线程组设计 3.测试结果 三、单场景并发测试 1.介绍 2.线程组设计 3.测试结果 四、单场景容量/爬坡测试 1.介绍 2.线程组设计 3.测试结果 五、混合场景容量/并发测试 1.介绍 六、稳定性测试 1.介绍 2.线程组设计 …...

【数据结构】回溯算法公式化解题 leetcode经典题目带刷:全排列、组合、子集

目录 回溯算法一、什么是回溯算法1、基本思想&#xff1a;2、一般步骤&#xff1a; 二、题目带练1、全排列2、组合3、子集 三、公式总结 回溯算法 一、什么是回溯算法 回溯算法&#xff08;Backtracking Algorithm&#xff09;是一种解决组合问题、排列问题、选择问题等一类问…...

WPF基础入门-Class3-WPF数据模板

WPF基础入门 Class3&#xff1a;WPF数据模板 1、先在cs文件中定义一些数据 public partial class Class_4 : Window{public Class_4(){InitializeComponent();List<Color> test new List<Color>();test.Add(new Color() { Code "Yellow", Name &qu…...

js将搜索的关键字加颜色

js将搜索的关键字加颜色 使用正则匹配关键字并加入span标签&#xff0c;页面渲染时使用v-html渲染即可 // 文本框内容 let searchCont 测试;const reg new RegExp((${searchCont.value}), g); let data 图片保存测试A; data data.replace(reg, <span style"color:…...

Docker安装Oracle数据库打开、链接速度很慢

问题&#xff1a; 使用Docker安装Oracle数据库打开、链接速度很慢&#xff0c;明显的在在转圈严重影响效率。 解决&#xff1a; 排查到DNS时&#xff0c;发现宿主机DNS配置清空后&#xff0c;通过JDBC连接目标Oracle数据库速度很快 进入容器中进行测试&#xff0c;发现清空DNS…...

学生分班查询系统的创建与使用指南

开学季&#xff0c;负责分班工作的老师们又面临一个难题&#xff1a;如何公布分班结果&#xff1f;将结果放在学校官网上可能会让很多无关人员看到&#xff0c;而不放则会导致家长们纷纷打电话来询问。那么&#xff0c;有没有一种方法可以让家长们自行查看分班结果呢&#xff1…...

全套解决方案:基于pytorch、transformers的中文NLP训练框架,支持大模型训练和文本生成,快速上手,海量训练数据!

全套解决方案&#xff1a;基于pytorch、transformers的中文NLP训练框架&#xff0c;支持大模型训练和文本生成&#xff0c;快速上手&#xff0c;海量训练数据&#xff01; 1.简介 目标&#xff1a;基于pytorch、transformers做中文领域的nlp开箱即用的训练框架&#xff0c;提…...

ffmpeg

文章目录 libavcodec实现 libavformat实现libavfilter实现 libswscale实现对比libavfilter图像处理libswscale vs libyuvlibavutil 命令行工具ffmpeg例子 ffprobe例子 FFmpeg 是一个由 C 语言编写的开源跨平台音视频处理工具集&#xff0c;它具有模块化的架构。下面是 FFmpeg 的…...

CH03_代码的坏味道(下)

循环语句&#xff08;Loops&#xff09; 从最早的编程语言开始&#xff0c;循环就一直是程序设计的核心要素。如今&#xff0c;函数作为一等公民已经得到了广泛的支持&#xff0c;因此我们可以使用以管道取代循环&#xff08;231&#xff09;管道操作&#xff08;如filter和ma…...

journal日志导致服务器磁盘满

背景 ubuntu 18.04服务器磁盘突然100% 一查/var/log/journal目录占了14G 清理 要清理 journal 日志&#xff0c;可以使用以下步骤&#xff1a; 运行以下命令来查看 journal 日志的使用情况&#xff1a; journalctl --disk-usage这将显示 journal 日志的当前使用情况&#x…...

“Go程序员面试笔试宝典”复习便签

一.逃逸分析 1.1逃逸分析是什么&#xff1f; 逃逸分析&#xff0c;主要是Go编译器用来决定变量分配在堆或者栈的手段。 区分于C/C手动管理内存分配&#xff0c;Go将这些工作交给了编译器。 1.2逃逸分析有什么作用 解放程序员。程序员不需要手动指定指针分配内存。 灵活的…...

数组的度(指数组里任一元素出现频数的最大值)

题目&#xff1a; 给定一个非空且只包含非负数的整数数组 nums&#xff0c;数组的 度 的定义是指数组里任一元素出现频数的最大值。 你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组&#xff0c;返回其长度。 示例 1&#xff1a; 输入&#xff1a;nums …...

scala array类型参数

在Scala中&#xff0c;数组&#xff08;Array&#xff09;是一种用于存储相同类型元素的数据结构。数组可以用于保存基本数据类型和自定义数据类型的元素。当定义数组类型参数时&#xff0c;您通常是在函数、类或方法签名中使用它们。以下是一些有关Scala数组类型参数的示例&am…...

构建 NodeJS 影院预订微服务并使用 docker 部署(03/4)

一、说明 构建一个微服务的电影网站&#xff0c;需要Docker、NodeJS、MongoDB&#xff0c;这样的案例您见过吗&#xff1f;如果对此有兴趣&#xff0c;您就继续往下看吧。 你好社区&#xff0c;这是&#x1f3f0;“构建 NodeJS 影院微服务”系列的第三篇文章。本系列文章演示了…...

html写一个向flask_socketio发送消息和接收消息并显示在页面上

以下是一个简单的HTML页面&#xff0c;它包含一个输入框、一个发送按钮和一个显示区域。用户可以在输入框中输入消息&#xff0c;点击发送按钮&#xff0c;然后这个消息会被发送到 Flask-SocketIO 服务器。当服务器回应消息时&#xff0c;它会在页面的显示区域显示出来。 <…...