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

【Linux系统】—— 冯诺依曼体系结构与操作系统初理解

【Linux系统】—— 冯诺依曼体系结构与操作系统初理解

  • 1 冯诺依曼体系结构
    • 1.1 基本概念理解
    • 1.2 CPU只和内存打交道
    • 1.3 为什么冯诺依曼是这种结构
    • 1.4 理解数据流动
  • 2 操作系统
    • 2.1 什么是操作系统
    • 2.2 设计OS的目的
    • 2.3 操作系统小知识点
    • 2.4 如何理解"管理"
    • 2.5 系统调用和库函数

1 冯诺依曼体系结构

  我们的计算机是由硬件构成的,但各种硬件如:显示器、键盘、网卡、磁盘等硬件设备并不是杂乱无法揉在一起就能成为计算机的,所有的计算机都需要按照一定的组织结构将所有的硬件划分在一起,而当前最常见的计算机组织结构就是冯诺依曼体系结构

在这里插入图片描述

  

1.1 基本概念理解

对上图各个部分的介绍

  • 输入设备:
      键盘、鼠标、话筒、摄像头、网卡、磁盘……

  • 输出设备:
      显示器、磁盘、网卡、打印机……

  • CPU(中央处理器):主要由运算器控制器组成。
    运算器主要是用来进行运算的,我们所做的运算主要分为两种:算术运算(加减乘除)和逻辑运算(真假、位运算)
    控制器主要是用来控制CPU去取指令、分析指令、执行指令等工作

  • 存储器:现阶段理解存储器就是内存

  
其他概念介绍:

  • 外设: 输入输出设备我们统称为外设。外设需要做的是:将输入设备的数据读到内存里,将内存中的数据输出到外设中。
      磁盘和网卡比较特殊,他们既是输入设备又是输出设备。网卡因为网络我们还没学习,暂时先不做介绍。

  • IO: 之前我们写C/C++程序进行文件读取时,读文件就是将磁盘中的文件读到内存里,写文件就是将内存中的文件写到磁盘中。我们将这种读写的动作称为 input/output,即IO。
      理解IO应站在内存的角度,输入设备把数据交给你(内存)就是input;你(内存)把数据给输出设备就是output

  

1.2 CPU只和内存打交道

  我们都知道,我们写的程序要运行,必须先将生成的可执行文件加载到内存中,那么程序运行之前放在哪里?
  答案是在磁盘
  程序本质就是一个文件,它就是我们编译好的,在特定路径下的二进制文件。

  为什么程序要运行必须先加载到内存中呢?
  上面的冯诺依曼体系结构图中,红色箭头表示数据的流动方向。从图中不难看出:CPU只能从内存中读写数据! 在数据层面上,CPU只认内存,压根不认什么输入输出设备。
  那我们的软件运行,是谁在运行我们的软件呢?正是CPU,是CPU执行我们的代码,访问我们的数据
  可是CPU无法读取外设,所以我们必须把程序加载到内存,如此才能被CPU访问到。
  这是由冯诺依曼体系结构规定的。

  在冯诺依曼体系结构中,数据的流动方向永远是:输入设备 -> 内存 -> CPU -> 内存 -> 输出设备
  但"流动"这个词太抽象,我们换句话:数据流动的本质是从一个设备 “拷贝” 到另一个设备

  所以可以推导出:冯诺依曼体系结构的效率取决于设备的"拷贝"效率决定

小结:
  CPU在数据层面,只和内存打交道;外设只和内存打交道。

  

1.3 为什么冯诺依曼是这种结构

  所以冯诺依曼为什么是上图的结构呢?可不可以不要内存,直接:输入设备 -> CPU ->输出设备 这种结构呢?

在这里插入图片描述

  
  这里给大家介绍一下存储分级,如图:

在这里插入图片描述

  在计算机世界中,存储这件事:如果它离CPU越(金字塔顶端),它的存储容量,但是它速度、也更;离CPU越远(金字塔低端),它的存储容量越小,但速度更慢,不过也更便宜。
  ps:我们可以在淘宝看看同等加钱分能买到多少G内存条和磁盘

  如果直接:输入设备 -> CPU ->输出设备 这种结构,就会有一个很大的问题:
  输入输出设备属于外设,它的运算效率相比于CPU特别低!虽然CPU的运算效率很快,但根据木桶效应,总体的运行效率就取决于外设。
  那我们能不能将我们的各种外设全部做成寄存器,这样运行效率不就高了吗。是可以的,只要你有钱,因为这时一台电脑的造价将无比恐怖

  为了在效率和成本之间找平衡,我们在计算机体系结构中引入了:寄存器(内存)
  有了内存,内存的运行效率本身相对较高,我们可以提前将数据从外设拷贝到内存,这样CPU可以直接从内存中读数据。
  这样,我们花少量的前就可以获得一台运算效率不错的计算机。现在的计算机本质上是性价比的产物。

  为什么冯诺依曼体系这么简单,却是目前计算机体系的主流结构?
  冯诺依曼的历史意义不在技术上,它的意义在于让平民百姓可以用较低的价格买入效率不错的计算机,百姓买得起全世界才有那么多网民,有了这么多网民才有了互联网。冯诺依曼体系的历史意义在于:它是构成互联网的必要条件。是历史选择了冯诺依曼体系

  

1.4 理解数据流动

  请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。

  既然两个人聊天是用电脑,那么本质就是两台冯诺依曼体系进行聊天
  首先,要聊天要先登录 QQ,登录 QQ 就是启动 QQ 这款软件,其本质就是将QQ的可执行程序加载到内存。你在键盘输入"你好",本质就是输入设备(键盘)中的数据流动到了内存。数据经过运算器处理(加密、封包)后写回内存,数据再从内存流动到输出设备(网卡)。
  网卡将数据交到网络,网络再将数据交到朋友的机器。这点我们以后详细学习
  朋友的输入设备(网卡)拿到数据,拷贝给内存(QQ的可执行已加载到内存),再交给CPU解密等;CPU处理完后交给内存,内存在将数据输出到输出设备(显示器)中。
  
  数据流动的本质是在冯诺依曼体系中进行数据流动

  
  

2 操作系统

2.1 什么是操作系统

  任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。操作系统是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序

  说人话:操作系统是一款进行软硬件管理的软件
  没错,操作系统自己本身是一款软件

  操作系统分为狭义上的操作系统和广义上的操作系统
  狭义:操作系统的内核
  内核的四大主要工作:进程管理、内存管理、文件管理、驱动管理
  广义:内核 + 其他程序(例如函数库、shell程序等等)

在这里插入图片描述

  后面若不加说明,操作系统指的是狭义上的操作系统及内核

  

2.2 设计OS的目的

在这里插入图片描述

计算机软硬件结构

  
  在计算机结构的最底层是各种硬件(网卡、磁盘等),各种硬件在逻辑上时按照冯诺依曼体系结构组织的。
  每一种硬件都对应有一个驱动程序(网卡有网卡驱动,硬盘有硬盘驱动),因为读取每一种设备的信息都有自己个性化的读取方式,所以访问各种硬件都要配上对应的驱动程序。具体现象比如:你插上鼠标,可以依然动不了,过了一两秒显示器上弹出某某驱动安装成功,这时再动鼠标才有反应。驱动程序大部分是由对应硬件厂商来提供的。

  在驱动程序之上则是操作系统。

  操作系统对下:要与硬件交互,管理所有的软硬件资源
  但操作系统管理硬件并不是目的,而是手段。
  操作系统的目的是,对上:为用户程序(应用程序)提供一个良好的执行环境

  比如我打个游戏,你总不能3分钟一黑屏5分钟一重启吧,操作系统你能不能把底层的软硬件资源管理好,不要让他出错,让我安心打游戏。

  小结:操作系统存在的目的是给用户提供服务的,一切以人为本
  

2.3 操作系统小知识点

  从上图中不难看出计算机软硬件体系结构(从硬件到用户整个过程)是层状结构!
  如何理解呢?
  层状结构在软件工程上体现出的特点是:高内聚低耦合
  高内聚:把相同功能相同逻辑的代码和数据放在同一层内部,比如操作系统内全是操作系统的代码数据
  低耦合:指的是层跟层之间只使用一些接口的方式来互相调用,在数据和逻辑层面没有强耦合
有了这样的设计特点,未来我想该某一层的数据或逻辑,其他层基本没有影响。比如我改操作系统,驱动和硬件都不用变。
  高内聚低耦合主要是为了方便代码后续的可维护性。可维护性简单来说就是一个模块我们修改了并不影响另一个模块,那个模块出问题就子啊那个模块找问题。

  计算机各种硬件在设计上也是高内聚低耦合的。
  一台计算机的各种硬件(CPU、磁盘、主板、网卡、显卡)都是由不同厂商提供的,我们想换某一个硬件随便换。这说明计算机设计在硬件上就是高内聚低耦合的


  
  操作系统不允许任何人直接访问操作系统内的各种代码和数据,我们要访问操作系统,必须使用系统调用 —— 其实就是函数,只不过是系统提供的
  用户要正确使用系统调用必须对操作系统有一定的了解。那使用起来成本不是很高?
  正是因为系统调用太麻烦了,所以有人给我们做了封装,给我们形成了一个库:比如 C标准库 、C++ 库

  所以我们平时的开发动作,在整个体系结构的最上层


  
  我们的程序,只要判断出它访问了硬件,那么它必须贯穿操作系统!

  我们之前用 printf 往显示器上打印,其本质是用户把数据写到了硬件,而我们是不可能直接绕过操作系统直接到硬件的,所以 printf 这个函数底层一定要封装系统调用,再通过操作系统访问对应驱动,才能把数据交到硬件上。
  所以我们之前的 scanf、printf 对各种文件的IO等等操作是要访问操作系统的

2.4 如何理解"管理"

  在整个计算机软硬件架构中,操作系统的定位是:⼀款纯正的“搞管理”的软件
  因此,要理解操作系统,就要先理解 “管理”
  为帮助小伙伴们更加深刻理解管理,我们举一个小例子。

  我们简化学校系统,认为整个学校只有校长(管理层)、辅导员(执行层)、学生(被管理层)。
  人类日常生活中做的事情就两种:决策和执行
  对老百姓来说,决策和执行是不分家的。决定明天不去上早8是决策,第二天睡到12点是执行
  但对一个管理体系来说,管理者最大的能力就是他有决策权,比如学校的校长。辅导员作为执行层时没有决策权的
  回过头看软硬件结构的下三层:操作系统是决策层(校长)、驱动层序是执行层(辅导员)、底层硬件是被管理层(学生)

  校长是如何管理生的呢?
  校长需要和学生见面吗?不需要!我们除了入学和毕业,就没见过校长。
  所以:要管理,管理者和被管理者可以不需要见面

  连面都不见,如何管理?
  见面并不是必要条件,见面只是为了获取你身上的相关数据。只要我有其他方式获得相关数据,就没必要见面。
  比如校长想给张三发奖学金,并不需要亲自去宿舍问张三成绩怎么样,只需要知道张三排名全校前十就可以
  所以,管理是通过数据进行管理

  不需要见面,如何拿到数据?
  所以校长和学生之间,必须要加一个人—— 辅导员。数据由辅导员帮忙获取。辅导员获取我们的信息,记录在教务系统当中,校长根据教务系统中的数据管理每一个学生。

  回过头,操作系统管理各种硬件并不需要和硬件接触,它管理硬件是通过数据进行管理的,而数据就是由驱动程序获取的


  
  数据要拿的有意义,总不能让辅导员统计今天学生穿什么颜色的衣服吧。
  校长给了辅导员一个Excel表格,让辅导员获取相关数据
  现在校长每天的工作由管理学生改为管理表格中的数据,基于数据做决策,比如校长看到表格中李四20门课挂科19门,直接将李四开除。

在这里插入图片描述


  
  但如果表格中的数据太多了呢?100名学生校长还管得过来,10万名呢?
  对学生的数据进行管理,本质不就是增删查改吗?可随着人越来越多,增删查改的负担越来越大。

  幸好,校长是计算机专业出生
  校长决定让计算机帮忙管理。
  校长发现,表格开头就是学生的各个属性,不同行之间大家的属性一样,只是具体的值不一样。
  在软件层面上如何把不同的属性集合在一起呢?
  结构体!(校长只会C语言,因为校长是操作系统,操作系统是由C语言写的)

struct student
{//姓名//年龄//籍贯//...
}

  这样我们就可以用这个结构体定义出上万个变量,每个变量都对应一个学生。
  可是上万个学生变量本身是独立的,如何对他们进行管理呢?
  数据结构!
  比如我们可以用链表将所有学生变量链接起来,当然也可以是其他结构。
  这样,校长对学生的管理工作就转化为了对链表的增删查改

  如此校长管理学生的工作我们称为:先描述,再组织
  即先用结构体将学生的属性描述起来,再用各种数据结构(如链表)将各个学生结点组织起来
  先描述,再组织可以完成现实世界对任何场景的建模。

  所以看完了上面的例子,操作系统是怎么管理硬件的?
  操作系统先对硬件进行描述,先定义一个结构体包含硬件的各种属性,每个硬件对应一个对象,再创建链表将各个对象链接起来。对应该的管理改为对链表中各个对象的增删查改。

  所以C++为什么要提供类的概念,为什么C++该提供STL?
  因为类解决的是先描述的问题;而STL是容器,本质是各种数据结构,容器解决的是再组织的问题

  任何面向对象的语言,都提供了类和容器!我们这个世界就是先描述再组织的世界。
  

2.5 系统调用和库函数

   操作系统要向上提供对应的服务,但是操作系统不相信任何用户或者人!
   操作系统不允许任何人直接访问操作系统内的各种代码和数据,我们要访问操作系统,必须使用系统调用 —— 其实就是函数,只不过是系统提供的

  这就是一个非常矛盾的地方:一个事物要给人提供服务,却不相信任何人
  现实中有没有类似的机构呢?要给人提供服务,却不相信任何人。
  银行!

在这里插入图片描述

  银行要给我们提供各种金融服务,却不信任任何人,不让任何人到它的金库去取钱。
  于是银行将自己封装起来,仅仅设置了各个窗口开放给用户,这个窗口就相当与操作系统的系统调用接口

  Linux / Windows / macos 等大部分操作系统都是用 C语言 写的,系统调用本质就是系统提供的函数 — C语言风格的函数。既然是函数,就要有函数参数和返回值。
  输入参数是用户给操作系统的,返回值是操作系统给用户的,所以系统调用的本质就是用户和系统之间进行数据交互。银行中我们要取钱,要先将银行卡等资料给窗口里的工作人员,这就是传参;银行在自己内部运作,再将结果返回给我们,我们拿到结果。
  这样操作系统与用户之间的耦合度就非常低,能达到既给用户提供服务,又不让用户访问的目的。

  但是,银行办一件事往往比较麻烦,有的老太太去银行存钱可能还不知道去银行要先取个号。所以银行在大堂中设置了工作人员来帮助人们完成相关手续。
  系统调用也同理,如果让小白直接访问系统调用那成本比较高,所以操作系统还给我们提供了各种库、外壳、指令,我们只需访问库、外壳等不懂操作系统也能将操作系统用起来了。
  这就是用户操作接口层,而我们用户就是再最上层做相应开发

总结:
  在开发角度,操作系统对外会表现为⼀个整体,但是会暴露自己的部分接⼝,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用
  系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。
  库函数和系统调用属于上下层的关系

  
  
  
  


  好啦,本期关于冯诺依曼体系结构与操作系统的知识就介绍到这里啦,希望本期博客能对你有所帮助。同时,如果有错误的地方请多多指正,让我们在 Linux 的学习路上一起进步!

相关文章:

【Linux系统】—— 冯诺依曼体系结构与操作系统初理解

【Linux系统】—— 冯诺依曼体系结构与操作系统初理解 1 冯诺依曼体系结构1.1 基本概念理解1.2 CPU只和内存打交道1.3 为什么冯诺依曼是这种结构1.4 理解数据流动 2 操作系统2.1 什么是操作系统2.2 设计OS的目的2.3 操作系统小知识点2.4 如何理解"管理"2.5 系统调用和…...

Android内存优化指南:从数据结构到5R法则的全面策略

目录 一、APP 内存限制 二、内存的三大问题 2.1、内存抖动(Memory Churn) 2.1.1 频繁创建短生命周期对象 2.1.2 系统API或第三方库的不合理使用 2.1.3 Handler使用不当 2.2、内存泄漏(Memory Leak) 2.2.1 静态变量持有Activity或Context引用 2.2.2 未取消的回调或…...

机器学习:线性回归,梯度下降,多元线性回归

线性回归模型 (Linear Regression Model) 梯度下降算法 (Gradient Descent Algorithm) 的数学公式 多元线性回归(Multiple Linear Regression)...

Linux上用C++和GCC开发程序实现两个不同MySQL实例下单个Schema稳定高效的数据迁移到其它MySQL实例

设计一个在Linux上运行的GCC C程序,同时连接三个不同的MySQL实例,其中两个实例中分别有两个Schema的表结构分别与第三实例中两个Schema个结构完全相同,同时复制两个实例中两个Schema里的所有表的数据到第三个实例中两个Schema里,使…...

RabbitMQ系列(一)架构解析

RabbitMQ 架构解析 RabbitMQ 是一个基于 AMQP 协议的开源消息中间件,其核心架构通过多组件协作实现高效、可靠的消息传递。以下是其核心组件与协作流程的详细说明: 一、核心组件与功能 Broker(消息代理服务器) RabbitMQ 服务端核…...

XSL 语言:XML 样式表的语言基础与应用

XSL 语言:XML 样式表的语言基础与应用 引言 XSL(Extensible Stylesheet Language)是一种专门用于XML文档样式的语言,它允许用户定义XML文档的格式、布局和外观。XSL是XML技术家族中的重要组成部分,与XML和XPATH等语言共同构成了处理和格式化XML文档的强大工具集。本文将…...

【计算机网络】常见tcp/udp对应的应用层协议,端口

TCP 和 UDP 对应的常见应用层协议 📌 基于 TCP 的应用层协议 协议全称用途默认端口HTTPHyperText Transfer Protocol超文本传输协议80HTTPSHTTP Secure加密的超文本传输协议443FTPFile Transfer Protocol文件传输协议(20 传输数据,21 控制连…...

ExpMoveFreeHandles函数分析和备用空闲表的关系

第一部分:ExpMoveFreeHandles和备用空闲表的关系 ULONG ExpMoveFreeHandles ( IN PHANDLE_TABLE HandleTable ) { ULONG OldValue, NewValue; ULONG Index, OldIndex, NewIndex, FreeSize; PHANDLE_TABLE_ENTRY Entry, FirstEntry; EXHAND…...

微服务学习(1):RabbitMQ的安装与简单应用

目录 RabbitMQ是什么 为什么要使用RabbitMQ RabbitMQ的安装 RabbitMQ架构及其对应概念 队列的主要作用 交换机的主要作用 RabbitMQ的应用 通过控制面板操作(实现收发消息) RabbitMQ是什么 RabbitMQ是一个开源的消息队列软件(消息代理…...

基于javaweb的SSM+Maven幼儿园管理系统设计和实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

企业级本地知识库部署指南(Windows优化版)

一、环境准备 1. 系统优化 # 启用WSL2(需Windows 10 2004或Windows 11) dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform …...

5. Nginx 负载均衡配置案例(附有详细截图说明++)

5. Nginx 负载均衡配置案例(附有详细截图说明) 文章目录 5. Nginx 负载均衡配置案例(附有详细截图说明)1. Nginx 负载均衡 配置实例3. 注意事项和避免的坑4. 文档: Nginx 的 upstream 配置技巧5. 最后: 1. Nginx 负载均衡 配置实例 需求说明/图解 windows 浏览器输…...

Redis---缓存穿透,雪崩,击穿

文章目录 缓存穿透什么是缓存穿透?缓存穿透情况的处理流程是怎样的?缓存穿透的解决办法缓存无效 key布隆过滤器 缓存雪崩什么是缓存雪崩?缓存雪崩的解决办法 缓存击穿什么是缓存击穿?缓存击穿的解决办法 区别对比 在如今的开发中&…...

计算机毕业设计SpringBoot+Vue.js人口老龄化社区服务与管理平台 (源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

【异地访问本地DeepSeek】Flask+内网穿透,轻松实现本地DeepSeek的远程访问

写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除! 文章目录 前言依赖Flask构建本地网页访问LM Studio 开启网址访问DeepSeek 调用模板Flask 访问本…...

Nacos + Dubbo3 实现微服务的Rpc调用

文章目录 概念整理基本概念概念助记前提RPC与HTTP类比RPC接口类的一些理解 实例代码主体结构父项目公共接口项目提供者项目项目结构POM文件实现配置文件实现公共接口实现程序入口配置启动项目检查是否可以注入到Nacos 消费者项目项目结构POM文件实现配置文件实现注册RPC服务类实…...

散户如何实现自动化交易下单——篇1:体系介绍与获取同花顺资金账户和持仓信息

一、为什么要实现自动化交易 在瞬息万变的金融市场中,越来越多的散户投资者开始尝试构建自己的交易策略:有人通过技术指标捕捉趋势突破,有人利用基本面分析挖掘低估标的,还有人设计出复杂的网格交易或均值回归模型。然而&a…...

基于Electron的应用程序安全测试基础 — 提取和分析.asar文件的案例研究

目录: 4.4. 案例研究 4.4.2. 情况描述 4.4.3. 信息收集 4.4.3.2. 检查隐藏目录(点目录)的可能性 4.4.3.3. 使用 DB Browser for SQLite 打开 .db 文件 4.4.3.4. 寻找加密算法 4.4.3.5. 找到加密算法 4.4.3.6. 理解加密流程 4.4.3.7. 找到“Ke…...

vue中computed方法使用;computed返回函数

文章目录 1.正常使用computed2.使用computed返回可传参的函数 1.正常使用computed 一般我们使用computed返回一个变量字段&#xff0c;这个字段会根据具体的某个变量计算得到 例如 <div>{{num}}--{{num10}}</div>let num ref(1) let num10 computed(()>{ret…...

大语言模型的评测

大语言模型评测是评估这些模型在各种任务和场景下的性能和能力的过程。 能力 1. 基准测试&#xff08;Benchmarking&#xff09; GLUE&#xff08;General Language Understanding Evaluation&#xff09;&#xff1a;包含多个自然语言处理任务&#xff0c;如文本分类、情感分…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...