3.1存储系统基本概念

news2024/11/26 8:26:17

文章目录

  • 一、引子
  • 二、存储器的层次化结构
    • 1.层次化结构
      • (1)金字塔
      • (2)案例
      • (3)Cache
      • (4)寄存器
      • (5)辅存和外存
    • 2.速度与价格举例
      • (1)主存和Cache层
      • (2)辅存
      • (3)外存
  • 三、存储器的分类
    • 1.按照层次分类
    • 2.按照存储介质分类
    • 3.按照存取方式分类
      • (1)指明读写地址
      • (2)指明读写内容
    • 4.按照信息的可更改性分类
    • 5.按照信息的可保存性分类
  • 四、存储器的性能指标
  • 五、知识回顾

一、引子

这一章节,我们要探讨二进制数据在计算机内部如何存储的。

第一章说过,现代计算机的结构大致是这样的:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yGQvWcH7-1674541864199)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124103737045.png)]

其中,主机中有一个很重要的部件:主存储器。也就是我们熟悉的内存。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zIy3iDuJ-1674541864202)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124103822077.png)]

看一下实际生活中的主存和辅存:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A2EluhHI-1674541864203)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124103940468.png)]

可以发现,主存和辅存的容量是不一样的,主存会更小一点。

为什么主存、辅存的存储容量差异这么大?除了存储容量之外,它们之间还有没有速度差异呢?

还有,除了主存和辅存之外,还有没有其他的用于存储数据的存储器呢?

接下来我们一一探讨上述问题。

二、存储器的层次化结构

1.层次化结构

(1)金字塔

在下面的图中,越靠近上层的速度越快,容量越小、造价越高。

上面的华为手机主存是8GB,由于主存靠近上层,所以主存速度比较快。还有一个机身存储,也就是辅存容量是128GB,只不过手机里面的辅存一般不是磁盘。

可以明显看见,辅存的容量比主存大;当然,辅存的读写速度也更慢。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Nb32cGn-1674541864204)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124105905435.png)]


(2)案例

📑举例

手机里面的APP啥的存储在辅存里面,但是辅存读写速度比较慢,因此CPU不能直接和辅存进行数据交互。

因为CPU处理数据速度很快,如果让快速的CPU去直接读取慢速的辅存里面的数据,CPU就会被辅存拖累。

如果我们要启动微信,需要将微信的程序先从辅存调入到主存(就是平时我们启动微信会有一个地球和小人的界面,加载一会儿)。当微信的数据放入主存之后,CPU就可以开始运行相关的代码,这样就可以使用微信了。

如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dVIlmd10-1674541864204)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124105830477.png)]

辅存中的数据要调入主存后才能被CPU访问

CPU可以直接从主存读数据;也可以直接向主存写数据。

如果大家之前学过操作系统的话,就知道主存和辅存之间的数据交换是由硬件+操作系统来实现的。操作系统需要负责实现页面置换算法,根据页面置换算法,可以决定要把哪些数据从主存换送到外存。


(3)Cache

在主存之上,还有一个Cache高速缓冲存储器。

虽然主存的读写速度已经很快了,但是主存的速度依然跟不上CPU的运算速度。为了缓解这种速度矛盾,通常计算机硬件会把当前有可能会经常访问的代码数据从主存里面复制一份,存放进Cache里面,然后CPU可以直接读取Cache里面的副本数据。

主存的数据可以放到Cache中,CPU可以直接往Cache中写数据或者读数据,Cache里面被更改的数据也会被写入主存。

举个例子,假如现在你用微信和家人进行视频聊天,那么接下来,微信中处理视频聊天的那一段代码可能会被频繁使用。我们就可以将处理视频聊天的那一段代码从主存复制一份到Cache中。

第一个图中,可以看到,Cache是更靠近上层的存储层,因此Cache的读写访问速度会更快。

那么,CPU直接访问Cache里面有关视频聊天相关的代码,就可以比直接访问主存要快很多。这样就可以保证视频聊天的过程可以更加流畅。

添加Cache层主要是为了缓解CPU和主存之间的速度矛盾。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IxXEZgu6-1674541864205)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124112752823.png)]

主存和Cache之间的数据交换,通常是由硬件自动完成的。

主存-辅存:实现了虚拟存储系统,应用程序员所看到的主存容量可以比他看到的实际容量要大得多。解决了主存容量不够的问题

Cache-主存解决了主存与CPU速度不匹配的问题。由硬件自动完成,对所有程序员都是透明的。


(4)寄存器

接下来,再往Cache上面看,最接近CPU的是寄存器

第一章提过很多次寄存器,比如ACC累加寄存器、MQ乘商寄存器。寄存器的读写速度又要比Cache快得多。

所以,CPU在进行加减乘除相关的运算的时候,会将操作数先放入寄存器里面。

CPU里面包含的寄存器数量很有限,有可能只有几十个寄存器。


(5)辅存和外存

再往下看,辅存这一层,大家都很熟悉。

比如机械硬盘(磁盘)就属于辅存。

另外,像磁带、光盘、U盘之类的属于外存

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3DFWLvn1-1674541864206)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124112935535.png)]


2.速度与价格举例

💰速度与价格

看一下下面三星内存条的介绍:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-elH1cdnV-1674541864206)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124113147792.png)]

(1)主存和Cache层

这里的Memory就是指三星内存条:(可以看到读写速度,还有复制速度)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v6AwKfEh-1674541864207)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124113654122.png)]

当这个内存条和Intel的I5配合工作的时候,内存读速度可以达到三万七千多MB/s。

可以看到,这个内存条只有8GB大小:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RyLAJuqb-1674541864207)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124114004240.png)]

除了内存之外,还有Cache层。

大家可以去查一下,各种CPU的型号里面,会介绍它的高速缓存,也就是Cache的容量大小是多少。

比如这里的i5处理器,Cache容量只有12MB,比内存容量要小的多。

如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K7gErhhQ-1674541864208)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124114307276.png)]

现代的Cache层也是分层的。比如这里的i5处理器分为L1、L2、L3这三层,越靠近上层速度越快,容量越小。

通过这个图的数据也能看到,就算是最低的L3,速度也比内存快很多(内存40GB/s左右,而L3是200GB/s左右)。

如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ik1uvJaK-1674541864208)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124114559844.png)]

虽然在CPU内部的Cache层,它的存储容量很小,但是它的读写速度非常快,比主存快得多。

为什么Cache层的容量这么小?这是为了控制硬件的开发成本。

在同等容量的情况下,Cache容量的成本要比内存高得多。所以,Cache的容量注定不能很大。

主存和Cache层都可以直接被CPU访问。

(2)辅存

看一下如下的机械硬盘,价格和刚才的内存差不多,但是容量可以达到1TB,比内存的8GB大的多。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j8mXDL3B-1674541864209)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124115834064.png)]

同等容量的情况下,显然,辅存的造价比内存低得多。

这里给出的是SATA接口的极限速度,并不是机械硬盘可以达到的速度。这个机械硬盘实际能够达到的读写速度可能只有100MB/s左右,比内存慢了很多很多。

早期的辅存都采用机械硬盘,现代大多电脑都采用SSD固态硬盘作为辅存。看一下下面的某固态硬盘,550块钱可以买到500GB的固态硬盘,读写速度可以达到500MB/s,比原来的机械硬盘要快得多。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hOE5bDn3-1674541864209)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124120317516.png)]

由于固态硬盘的读写速度比机械硬盘快得多,所以,如果电脑的系统安装在固态硬盘里面会比安装在机械硬盘里面启动速度快得多。

开机就是要把系统相关的数据从辅存读入到主存,辅存速度越快,读入的速度也就越快,开机的速度也就越快。

(3)外存

看一下如下的光盘,每一片可以存储25GB数据。也很便宜。

外存制造成本比辅存又要低得多。速度也要比辅存更慢。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3kHLMfup-1674541864209)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124120358611.png)]

三、存储器的分类

1.按照层次分类

上面已经说过了这个金字塔:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6ToG6xnJ-1674541864210)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124121510729.png)]

需要重点关注中间三层高速缓存、主存和辅存。

高速缓存和主存可以直接被CPU读写。

而辅存里面的数据只有调入到主存之后,才可以被CPU访问。

2.按照存储介质分类

无论是什么存储器,终究还是用来存放二进制数据0、1的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3CdifZTZ-1674541864210)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124122025923.png)]

那么,根据存储二进制位的存储介质不同,可以对存储器进行这样的分类:

①半导体存储器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sBV1lNyW-1674541864211)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124122136666.png)]

用半导体器件存储0、1数据。

这一类的存储器读写速度一般较快。

②磁表面存储器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9llzJMST-1674541864211)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124122306294.png)]

③光存储器

比如光盘、DVD等。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7f62oYuk-1674541864211)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124122424463.png)]

3.按照存取方式分类

(1)指明读写地址

①随机存取存储器(RAM)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lypMSBBK-1674541864211)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124122858576.png)]

之前说过,所有的存储器都是分为一个一个的存储单元,每个存储的单元会有各自的地址编号。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lYUOCZAB-1674541864212)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124122837209.png)]

对于RAM,我们要读取任意位置的存储单元,所需要的读写时间都是相同的。

读写速度并不会因为存储单元的物理位置而改变。

比如内存条,就是一种随机存取存储器。

②顺序存取存储器(SAM)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4chEkeNV-1674541864212)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124122938549.png)]

复读机里面放的磁带就是一种顺序存取存储器。

复读机或者录音机会有一个磁头,来读写磁带里面存放的数据。比如磁头指在中间位置,当轮轴转动,磁条会划过读写磁头,就会读出里面的数据。

如果读写磁头想要读取磁带后半部分的数据,那么就需要让磁带一直转动至后。

③直接存取存储器(DAM)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j6Q2m7pK-1674541864213)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124123544773.png)]

比如机械硬盘(磁盘),就是一种直接存取存储器。

磁头B会前后移动,移动到想要读取的区域。(有点随机存取的意思)如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w8eLTYQ8-1674541864213)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124123716758.png)]

然后中间的马达(中间白色区域),会带动磁盘旋转。

当想要读写的数据划过磁头下方的时候,磁头就可以进行相应的读写。(有点顺序存取的意思)如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VyL2jW2s-1674541864213)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124123851028.png)]

DAM比SAM快,但是比RAM慢。

注:后面两种存储器(SAM和DAM)读写某个存储单元所需时间与存储单元的物理地址有关。所以又叫做串行访问存储器

(2)指明读写内容

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iGU44yFL-1674541864214)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124124304376.png)]

RAM、SAM、DAM是指定数据的存储地址,然后直接去那个地址读或者写。(按照地址访问)

CAM可以指明想要找的数据内容是什么,根据内容去查找存储位置。(按照内容访问)

4.按照信息的可更改性分类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MFtoSmB1-1674541864214)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124124827001.png)]

5.按照信息的可保存性分类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pn4E4kHO-1674541864215)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124125448559.png)]

主存里面的数据在断电之后会消失,手机在没电关机之后,再开机会很慢。因为之前手机正在运行的操作系统、各种软件的数据本来存放在主存里面,断电之后,主存里面的数据被清空了。所以开机之后,需要重新把数据从辅存调入主存。

手机系统或者电脑系统安装在辅存里面,断电之后依然存在。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KmhkIttw-1674541864215)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124125459795.png)]

四、存储器的性能指标

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9JNqpcMP-1674541864216)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124131627964.png)]

MDR数据寄存器的位数反映了存储字长;MAR位数反映了存储字数是多少。相乘就是存储容量。

单位成本指每一个比特位需要付出的金钱成本。比如之前的内存8GB,259块钱。8GB是64Gbit,所以单位成本就是259/64Gbit。

每一个存储周期可以读或者写一个存储字这么多数据。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vS7VLj49-1674541864216)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124142519869.png)]


存储周期又可以划分为存取时间和恢复时间。

存取时间和存取周期是不一样的。如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-la2M7PV6-1674541864216)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230124142410684.png)]

每次读或者写的数据,需要花费存取时间这么长时间。在这一次读或者写之后,存储器需要一段恢复时间才能再进行下一次的读或者写。

所以经过单独的一次读或者写,只需要 存取时间Ta这么长的时间。但如果需要进行连续多次读写,那么多次读写之间至少需要存取周期Tm这么长的时间间隔,因为还需要留有一段恢复时间。

五、知识回顾

在这里插入图片描述


请添加图片描述

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

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

相关文章

智障税品牌种草收割流

1.量化量化这一块我后续应该不更新了,因为目前我接触的都是赚钱层次的了发出去都是砸自己的饭碗目前我在8个交易所都是市商费率有需要费率的可以合作我在跑的策略为:套利、高频、预测《赚麻》当你有了顶级费率和速度,什么策略都可以赚钱2.引流…

88.【员工管理系统-springBoot】

SpringBoot(十三)、员工管理系统SpringBoot1.准备工作(1).导入我们所需要的环境依赖(2).首页的Controller与View (静态资源Thymeleaf接管)2.国际化(1).设置字符编码为UTF-8(2).添加文件资源目录 i18n(3).注册国际化实现(4).国际化的实现 index.html(5).英文与汉文的交互(6).在s…

[QMT]08-从本地行情数据解析历史K线信息

用python解析QMT本地数据获取本地行情数据get_local_data(field_list[], stock_code[], period1d, start_time, end_time, count-1,dividend_typenone, fill_dataTrue, data_dirdata_dir)释义从本地数据文件获取行情数据,用于快速批量获取历史部分的行情数据参数fie…

谈谈线程安全问题及其解决方法

本文讲述一下线程的安全问题及解决方法。 一 线程安全问题举例说明 在电影院售票的场景,假使有100张票待售,有3个窗口在售票,如图所示: 三个窗口都卖出票1,一个票被卖了3次,多线程访问共享数据“票”&am…

【代码阅读】MSC-VO

MSC-VO是ICRA2022的一篇点线视觉SLAM论文,本身是在ORBSLAM2的基础上改进的,改进的部分在于为SLAM系统引入了线段,并且使用了曼哈顿坐标系与结构化约束进行优化,之前看过的论文记录可以参考链接,年前把线段匹配和均匀化…

CMake的介绍

1.示例代码其实都非常简单,直接使用 GCC 编译器编译即可,连 Makefile 都不需要。在实际的项目中, 一个工程中可能包含几十、成百甚至上千个源文件, 这些源文件按照其类型、功能、模块分别放置在不同的目录中;面对这样的…

Kafka-生产者分区

一、分区的好处 便于合理使用存储资源,每个Partition在一个Broker上存储,可以把海量的数据按照分区切割成一块一块数据存储在多台Broker上。合理控制分区的任务,可以实现负载均衡的效果。提高并行度,生产者可以以分区为单位发送数…

Git自学日记

添加暂存区 git add 提交本地库 git commit -m “日志信息” 修改文件 vim 修改文件名 按i进入编辑模式 按esc退出编辑摸模式 :wq 保存更改 历史版本 git reflog 查看版本信息 git log 查看版本详细信息 版本穿梭 git reset --hard 版本号 分支操作 创建分支: git br…

【数据结构】7.1 查找的基本概念

文章目录1. 查找表2. 关键字3. 查找4. 动态查找表和静态查找表5. 平均查找长度1. 查找表 问题:在哪里找? 答:在一个新的数据结构查找表上面找。 查找表: 查找表是由同一类型的数据元素(或记录)构成的集合…

操作系统真相还原_第5章第3节:加载内核(ELF格式分析)

文章目录用C语言写内核(例)二进制程序的运行方法ELF格式的二进制文件ELF文件格式数据类型ELF header的结构Elf32_Phdr的结构ELF文件实例分析将内核载入内存当前的OS信息当前内存规划源码boot.incmbr.sloader.s内核编译并写入硬盘用C语言写内核(例) 源码: int func…

图像处理 手写体英文字母的目标检测与识别 实验报告

获取本实验的项目代码和实验报告&#xff0c;请>点击此处< [0] 摘要 近年来&#xff0c;随着python的迅速崛起&#xff0c;人工智能、图像识别、计算机视觉等新兴学科变得火热起来。Python的发展也伴随着它的各种衍生库、衍生编辑器的发展&#xff0c;其中OpenCV是比较经…

恶意代码分析实战 7 WinDbg

配置WinDbg双机调试。 下载Windbg&#xff08;WDK&#xff09;。 事实上你自己的win10上应该会自带。 配置WinXP虚拟机的boot.ini 改成如图所示的样子 修改主机上Windb的属性。 修改成如图所示&#xff1a; 启动WinXP选择调试状态&#xff0c;启动Windbg即可开始调试。 7.…

【JavaWeb】JavaScript基础语法(下)

✨哈喽&#xff0c;进来的小伙伴们&#xff0c;你们好耶&#xff01;✨ &#x1f6f0;️&#x1f6f0;️系列专栏:【JavaWeb】 ✈️✈️本篇内容:JavaScript基础语法(上)&#xff01; &#x1f680;&#x1f680;代码托管平台github&#xff1a;JavaWeb代码存放仓库&#xff01…

程序员的自我修养第七章——动态链接

继续更新《程序员的自我修养》这个系列&#xff0c;主要是夏天没把它看完&#xff0c;补上遗憾。本篇来自书中第七章。 再说动态链接前&#xff0c;我们先阐明为什么要动态链接&#xff1a; 动态链接的产生来自静态链接的局限性。随着静态链接的发展&#xff0c;其限制也越来越…

zookeeper可视化工具

参考资料&#xff1a; 参考网址 使用过程&#xff1a; 首先打开网址&#xff0c;将资源克隆下来解压压缩包 打开压缩目录下 startup.bat ,填入对应地ip即可&#xff08;记得优先启动zookeeper&#xff0c;否则会报错&#xff09;

我的1周年创作纪念日

机缘 我目前还是一名六年级小学生&#xff0c;下半年便升入初中了。 我是在2021年上半年&#xff08;我四年级下期时&#xff09;开始学习C的。后来我自己想做一些小游戏&#xff0c;便经常要在百度上搜索&#xff0c;后来就发现CSDN中的内容比较全面&#xff0c;便加入了CSD…

MacOS下在Pycharm中配置Pyqt5工具(2023年新版教程)

前提&#xff1a;使用Anaconda的包管理工具进行管理。创建environment&#xff0c;然后在该Environment上进行下载操作&#xff01;&#xff01;&#xff01;一、安装相关模块安装pyqt5、pyqt5-tools两个基础包&#xff0c;命令如下&#xff1a;pip install -i https://pypi.tu…

CSS文本与字体(文本格式化/对齐/装饰/转换/间距/阴影/字体/样式/大小/简写属性)

目录 文本颜色 文本颜色和背景色 文本对齐 文本方向 垂直对齐 文字装饰 文本转换 文字缩进 字母间距 行高 字间距 空白 文本阴影 所有 CSS 文本属性 字体选择很重要 通用字体族 Serif 和 Sans-serif 字体之间的区别 一些字体的例子 CSS font-family 属性 字…

vue-countTo不兼容vue3解决方案

我们想要做一个数值增长的过度效果可以使用vue-count-to 官网的地址&#xff1a;https://www.npmjs.com/package/vue-count-to 官网的截图 vue2的使用方式 cnpm install -S vue-count-to在main.js import vueCountTo from "vue-count-to"; Vue.component("C…

【JavaEE】如何开始基础的Servlet编程(基于Tomcat服务器)

如何开始最简单的Servlet编程&#xff1f;&#xff08;基于Tomcat服务器&#xff09;知道了如何借助Tomcat开始进行最简单的Servlet编程后&#xff0c;我们就可以进一步完善功能制作一个基础的网站了。在此之前我们先了解一下Servlet的生命周期。Servlet的生命周期初始化init -…