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

Linux 配置与管理 SWAP(虚拟内存)

Linux 配置与管理 SWAP(虚拟内存)

    • 一、作用
    • 二、创建交换文件(以创建一个2GB的交换文件为例)
      • 1. 创建交换文件
      • 2. 设置文件权限
        • 2.1. **关于 `sudo chmod 600 /root/swapfile` 是否一定要执行**
        • 2.2. **关于其他用户启动是否没权限用到交换分区**
      • 3. 将文件格式化为交换文件
      • 4. 启用交换文件
      • 5. (可选)设置开机自动挂载
      • 6. 验证交换区
    • 三、创建交换分区(假设已经有一个未分区的磁盘空间,例如`/dev/sdb1`)
      • 1. 格式化分区为交换分区
      • 2. 启用交换分区
      • 3. (可选)设置开机自动挂载
    • 四、交换文件和交换分区的作用
      • (一)共同作用
      • (二)交换文件的特殊作用
      • (三)交换分区的特殊作用
    • 五、交换文件和交换分区的区别
      • (一)存储形式
      • (二)创建和管理方式
      • (三)空间管理
    • 六、删除交换文件的步骤:
      • (一)、关闭交换文件
      • (二)、删除交换文件
      • (三)、(可选)从`/etc/fstab`中移除相关条目
    • 七、交换文件可以清空,但需要遵循一定的步骤:
      • (一)、关闭交换文件
      • (二)、清空交换文件内容
      • (三)、重新启用交换文件(可选)
    • 八、 **是否设置swap**

以下以Linux系统为例说明配置swap(交换空间)的步骤、命令及作用:

一、作用

  1. 缓解内存不足
    • 当系统的物理内存(RAM)不够用的时候,将一些不常用的内存数据临时存放到swap空间,从而为当前运行的程序腾出物理内存。例如,当同时运行多个大型应用程序,如数据库服务器、图形处理软件等,物理内存可能会被耗尽,swap空间就可以作为一种补充。
  2. 休眠功能支持
    • 在支持休眠功能的系统中,系统会将当前的内存状态保存到swap分区,以便在唤醒时能够快速恢复到之前的状态。

二、创建交换文件(以创建一个2GB的交换文件为例)

1. 创建交换文件

  • 使用dd命令创建一个指定大小的文件。例如:
sudo dd if=/dev/zero of=/root/swapfile bs=1M count=16384
  • 这里的if=/dev/zero表示输入文件为/dev/zero(一个特殊的设备文件,用于提供无限的空字符流),of=/root/swapfile表示输出文件为/swapfile(即将创建的交换文件),bs = 1M表示块大小为1兆字节,count = 2048表示总共创建16384个块,这样就创建了一个16GB(1M * 16384)的文件。
    在这里插入图片描述

2. 设置文件权限

  • 交换文件需要设置合适的权限,一般设置为只有根用户(root)可读写:
sudo chmod 600 /root/swapfile
  • 数字600表示文件所有者(root)具有读写权限(6:读权限4 + 写权限2),而所属组和其他用户没有任何权限(0)。
    在这里插入图片描述
2.1. 关于 sudo chmod 600 /root/swapfile 是否一定要执行
  • 从安全性角度
    • 在创建交换文件(/swapfile)时,执行 sudo chmod 600 /swapfile 是一个良好的安全实践,但不是绝对必须执行的操作。这个命令将交换文件的权限设置为只有文件所有者(通常是 root)具有读写权限,其他用户没有任何权限。这样做可以防止普通用户对交换文件进行意外的修改或者读取其中可能包含的敏感信息(虽然交换文件中的数据是内存数据交换过来的,但仍然可能包含一些未加密的机密信息)。
  • 从系统功能角度
    • 如果不执行这个命令,系统仍然可以使用交换文件来进行内存交换操作。交换文件的主要功能是作为虚拟内存的一部分,由操作系统内核来管理内存数据的交换,内核具有足够的权限来操作交换文件,与交换文件的用户权限设置关系不大。
2.2. 关于其他用户启动是否没权限用到交换分区
  • 实际情况
    • 其他用户不需要直接对交换文件(/swapfile)有特定的权限来使用交换分区。交换分区(或交换文件)的使用是由操作系统内核统一管理的。当系统内存不足时,内核会将内存中的数据交换到交换文件中,这个过程是内核级别的操作,与普通用户对交换文件的权限无关。普通用户在运行程序时,不需要关心交换文件的权限,他们只需要操作系统能够正常管理内存,包括在需要时使用交换文件来扩展虚拟内存。
  • 举例说明
    • 假设在一个多用户的Linux系统中,有用户 user1user2,如果交换文件 /swapfile 的权限被设置为 600,当 user1user2 运行各自的程序时,如 user1 运行一个占用大量内存的文本编辑程序,user2 运行一个数据库客户端程序。如果系统内存不足,内核会自动将这两个用户程序中暂时不使用的内存数据交换到 /swapfile 中,即使这两个用户对 /swapfile 没有直接的读写权限。

3. 将文件格式化为交换文件

  • 使用mkswap命令将文件格式化为交换文件格式:
sudo mkswap /root/swapfile
  • 这个命令会在/root/swapfile上创建交换文件系统。
    在这里插入图片描述

4. 启用交换文件

  • 使用swapon命令启用交换文件:
sudo swapon /root/swapfile
  • 执行这个命令后,系统就开始使用/root/swapfile作为交换空间了。
    在这里插入图片描述

5. (可选)设置开机自动挂载

  • 编辑/etc/fstab文件,添加以下一行:
echo "/root/swapfile swap swap defaults 0 0" >> /etc/fstab
  • 这样在系统启动时就会自动挂载交换文件。
    在这里插入图片描述

6. 验证交换区

free -g

在这里插入图片描述

三、创建交换分区(假设已经有一个未分区的磁盘空间,例如/dev/sdb1

1. 格式化分区为交换分区

  • 使用mkswap命令:
sudo mkswap /dev/sdb1
  • 这会将/dev/sdb1格式化为交换分区。

2. 启用交换分区

  • 使用swapon命令:
sudo swapon /dev/sdb1

3. (可选)设置开机自动挂载

  • 编辑/etc/fstab文件,添加以下一行:
/dev/sdb1 none swap sw 0 0

四、交换文件和交换分区的作用

(一)共同作用

  1. 内存扩展
    • 当系统物理内存(RAM)资源紧张时,交换文件和交换分区都能提供额外的“虚拟内存”空间。例如,在一个同时运行多个应用程序(如浏览器打开多个标签页、办公软件、多媒体播放器等)的Linux系统中,如果物理内存即将耗尽,系统会将一些暂时不使用的内存数据转移到交换空间(无论是交换文件还是交换分区),从而为正在运行的关键程序腾出物理内存,保证系统不会因为内存不足而崩溃。
  2. 支持系统休眠功能
    • 在支持休眠功能的操作系统中,交换文件或交换分区用于保存系统休眠前的内存状态。当系统从休眠状态恢复时,可以从交换空间中读取之前保存的内存数据,快速恢复到休眠前的运行状态。

(二)交换文件的特殊作用

  1. 灵活性
    • 交换文件可以方便地创建、调整大小或删除,不需要对磁盘进行重新分区操作。例如,在一个已经安装好操作系统并且磁盘分区布局固定的服务器上,如果发现需要增加交换空间,可以直接创建一个交换文件,而不用担心破坏现有的分区结构。这对于磁盘空间管理和系统配置的动态调整非常有用。

(三)交换分区的特殊作用

  1. 性能优势(在某些情况下)
    • 交换分区在一些情况下可能具有更好的性能。因为它是一个独立的磁盘分区,磁盘I/O操作可能会更高效。例如,在一些对磁盘I/O性能要求较高的服务器环境中,如果交换空间的使用较为频繁,使用专门的交换分区可能会减少磁盘寻道时间等开销,相比于交换文件可能会有一定的性能提升。
  2. 传统兼容性
    • 在一些较老的操作系统或者特定的系统安装和配置场景下,交换分区是一种传统的、被广泛支持的交换空间设置方式。例如,在一些嵌入式Linux系统或者基于传统BIOS的系统安装中,交换分区可能是默认或者更受推荐的交换空间设置方式。

五、交换文件和交换分区的区别

(一)存储形式

  1. 交换文件
    • 交换文件是一个普通的文件,存储在现有的文件系统中。例如,在Linux系统中,可以创建在ext4xfs等文件系统的目录下。它的大小可以像普通文件一样进行灵活调整,只要所在的文件系统有足够的可用空间。
  2. 交换分区
    • 交换分区是磁盘上一个独立的分区,在磁盘分区表中有专门的记录。它具有自己独立的分区格式(专门用于交换空间的格式),与文件系统分区(如ext4用于存储普通文件和目录的分区)是分开的。

(二)创建和管理方式

  1. 交换文件
    • 创建交换文件相对简单,只需要使用命令(如dd命令创建指定大小的文件,mkswap命令格式化文件为交换文件格式,swapon命令启用交换文件),不需要对磁盘进行重新分区操作。调整大小也可以通过一些文件操作命令来实现(虽然可能需要一些额外的步骤,如先禁用交换文件,调整大小后再重新启用)。
  2. 交换分区
    • 创建交换分区需要对磁盘进行分区操作,这通常需要使用磁盘分区工具(如fdiskparted等)。在分区创建后,再使用mkswap命令格式化分区为交换分区格式,最后用swapon命令启用。调整交换分区的大小相对复杂,可能需要重新分区、移动数据等操作,并且有一定的风险,如果操作不当可能会导致数据丢失。

(三)空间管理

  1. 交换文件
    • 交换文件的空间管理依赖于所在的文件系统。如果所在文件系统的可用空间不足,可能无法创建足够大的交换文件或者无法调整交换文件的大小。例如,如果/分区(假设交换文件创建在/分区下)只剩下1GB的可用空间,就无法创建一个2GB的交换文件。
  2. 交换分区
    • 交换分区有自己独立的空间,不受其他文件系统分区的影响。只要磁盘有未分配的空间,就可以创建合适大小的交换分区,并且在创建后其空间是固定的(除非重新分区调整),不会受到其他分区文件操作的影响。

六、删除交换文件的步骤:

(一)、关闭交换文件

  1. 查看正在使用的交换文件或分区
    • 在Linux系统中,可以使用swapon -s命令查看当前正在使用的交换空间(包括交换文件和交换分区)。例如:
    swapon -s
    
    • 该命令会输出类似如下的结果:
    Filename                Type        Size    Used    Priority
    /swapfile               file        2097148 0       -1
    
    • 这里显示了交换文件/swapfile的相关信息,如类型为file,大小为2097148(以KB为单位,这里是2GB)等。
  2. 关闭交换文件
    • 如果要删除交换文件,首先需要使用swapoff命令关闭它。假设交换文件是/swapfile,执行以下命令:
    sudo swapoff /swapfile
    

(二)、删除交换文件

  1. 删除文件本身
    • 在关闭交换文件后,可以使用rm命令删除交换文件。例如:
    sudo rm /swapfile
    
    • 这样就删除了交换文件。

(三)、(可选)从/etc/fstab中移除相关条目

  1. 编辑/etc/fstab文件
    • 如果之前在/etc/fstab文件中添加了自动挂载交换文件的条目(例如/swapfile none swap sw 0 0),需要编辑/etc/fstab文件并删除该条目。可以使用文本编辑器(如vinano)来编辑。例如,使用nano编辑:
    sudo nano /etc/fstab
    
    • 在文件中找到并删除关于交换文件的那一行,然后保存并退出(在nano中按Ctrl + O保存,按Ctrl+X退出)。

七、交换文件可以清空,但需要遵循一定的步骤:

(一)、关闭交换文件

  1. 查看交换文件使用情况
    • 在Linux系统中,可以使用swapon -s命令查看当前正在使用的交换空间(包括交换文件)。例如:
    swapon -s
    
    • 这会显示类似如下的结果(如果存在交换文件的话):
    Filename                Type        Size    Used    Priority
    /swapfile               file        2097148 102400   -1
    
    • 这里展示了交换文件的名称(/swapfile)、类型(file)、大小(以KB为单位,这里是2GB)、已使用的空间(102400KB)等信息。
  2. 关闭交换文件
    • 使用swapoff命令关闭交换文件。假设交换文件为/swapfile,执行以下命令:
    sudo swapoff /swapfile
    

(二)、清空交换文件内容

  1. 覆盖交换文件内容
    • 一种方法是使用dd命令将交换文件内容覆盖为零。例如:
    sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
    
    • 这里的if=/dev/zero表示输入为全零的设备文件,of=/swapfile表示输出到交换文件,bs = 1M是块大小为1兆字节,count = 2048表示总共2048个块(假设交换文件大小为2GB)。这样就将交换文件的内容清空了。

(三)、重新启用交换文件(可选)

  1. 重新格式化交换文件(如果需要)
    • 在某些情况下,可能需要重新格式化交换文件。可以使用mkswap命令:
    sudo mkswap /swapfile
    
  2. 重新启用交换文件
    • 使用swapon命令重新启用交换文件:
    sudo swapon /swapfile
    

需要注意的是,在清空交换文件之前,确保系统有足够的物理内存来处理正在运行的程序,因为清空交换文件可能会导致系统在重新启用交换文件之前,可利用的虚拟内存减少。

八、 是否设置swap

  1. 需要设置swap的情况

    • 内存有限的系统
      • 对于物理内存较小的系统,如早期的嵌入式设备或者一些配置较低的服务器(例如只有1 - 2GB物理内存),设置swap是很有必要的。例如,在运行一些基本的服务器应用程序(如轻量级的Web服务器、DNS服务器等)时,可能会偶尔遇到内存压力,swap可以提供额外的虚拟内存来防止系统因内存不足而崩溃。
    • 运行多种应用的系统
      • 如果系统需要同时运行多种不同类型的应用程序,尤其是当这些应用程序的内存使用模式难以精确预测时。例如,在一个同时运行办公软件、数据库客户端和一些后台监控程序的桌面系统中,不同应用程序的内存需求可能会在不同时间达到峰值。swap可以在物理内存紧张时作为缓冲,确保系统的稳定运行。
    • 支持休眠功能的系统
      • 对于需要支持休眠功能的桌面系统或笔记本电脑,swap分区是必需的。在系统休眠时,内存中的数据会被保存到swap分区中,当系统唤醒时再从swap分区恢复到内存。例如,在Windows系统中,休眠功能依赖于类似swap分区(页面文件)的机制,在Linux系统中同样需要swap分区来实现休眠功能。
  • 可以不设置swap的情况
    • 内存充足且可预测的系统
      • 在拥有大容量物理内存(如数十GB甚至数百GB)并且应用程序的内存使用模式非常稳定、可预测的系统中,可以考虑不设置swap。例如,在一些专门用于内存数据库(如Redis集群,并且为其分配了足够的物理内存)的服务器中,由于Redis会尽量使用内存来提高性能,并且内存分配是可精确控制的,如果系统有足够的冗余内存,不设置swap可以避免因磁盘I/O带来的性能损失。
    • 对性能要求极高的内存密集型系统
      • 对于一些对性能要求极高的内存密集型应用场景,如高性能计算(HPC)集群中的计算节点,这些节点主要用于运行大规模的数值模拟、基因测序等计算任务,需要尽可能减少磁盘I/O对计算性能的影响。如果系统已经配备了足够的物理内存来满足任务需求,不设置swap可以提高系统的整体性能。
  1. 设置swap大小及配置规则
    • 根据物理内存大小确定
      • 小容量物理内存(1 - 4GB)
        • 如果物理内存较小,如1 - 4GB,可以按照传统的1.5 - 2倍物理内存来设置swap大小。例如,对于2GB物理内存的系统,可以设置3 - 4GB的swap。这样可以在内存不足时提供相对充足的虚拟内存支持,确保系统能够正常运行一些基本的应用程序。
      • 中等容量物理内存(4 - 16GB)
        • 对于4 - 16GB物理内存的系统,可以设置1 - 1.5倍物理内存大小的swap。例如,对于8GB物理内存的系统,可以设置8 - 12GB的swap。在这种情况下,系统有一定的物理内存基础,不需要过大的swap来补充,但仍然需要一定的虚拟内存来应对偶尔的内存压力。
      • 大容量物理内存(16GB以上)
        • 当物理内存达到16GB或更多时,可以根据系统的具体需求灵活设置swap大小。如果系统运行的应用程序内存使用相对稳定,可能只需要设置较小的swap,如4 - 8GB,甚至可以更小。但如果系统运行多种复杂的应用程序或者需要支持休眠功能等,可能需要设置相对较大的swap,如8 - 16GB。
    • 根据应用程序需求确定
      • 内存需求波动大的应用
        • 如果系统运行的应用程序内存需求波动较大,如视频编辑软件(在导入、编辑和渲染不同阶段内存需求差异很大)或者一些企业级的ERP系统(在不同业务流程操作时内存需求变化明显),需要设置相对较大的swap。例如,对于运行视频编辑软件的系统,即使有8GB物理内存,可能也需要设置8 - 12GB的swap来应对渲染等内存需求高峰阶段。
      • 内存需求稳定的应用
        • 对于内存需求非常稳定的应用程序,如一些简单的网络监控工具或者静态Web服务器,在有足够物理内存的情况下,可以设置较小的swap。例如,对于运行简单网络监控工具的系统,即使有4GB物理内存,可能只需要设置1 - 2GB的swap。

是否设置swap以及设置多大的swap需要综合考虑系统的物理内存大小、应用程序的内存使用特性、系统功能需求(如休眠)等多方面因素。

相关文章:

Linux 配置与管理 SWAP(虚拟内存)

Linux 配置与管理 SWAP(虚拟内存) 一、作用二、创建交换文件(以创建一个2GB的交换文件为例)1. 创建交换文件2. 设置文件权限2.1. **关于 sudo chmod 600 /root/swapfile 是否一定要执行**2.2. **关于其他用户启动是否没权限用到交换分区** 3.…...

yolo自动化项目实例解析(七)自建UI--工具栏选项

在上一章我们基本实现了关于预览窗口的显示,现在我们主要完善一下工具栏菜单按键 一、添加工具栏ui 1、配置文件读取 我们后面要改的东西越来越多了,先加个变量文件方便我们后面调用 下面我们使用的config.get意思是从./datas/setting.ini文件中读取关键…...

贝锐洋葱头浏览器随时随地访问教务系统,轻松搞定选课

教育网的“拥堵”早已是老生常谈,学生数量庞大、上网时间集中、带宽有限,导致网络速度慢。尤其是从外部网络访问教育网时,更是因为跨运营商的缘故变得缓慢。 而学校内网也是类似的情况,课余时间和上课时间的网络使用情况差别巨大…...

django drf to_internal_value

使用场景 用于将接收到的输入转换为内部可用的数据形式; 例子 to_internal_value主要在反序列化时用到,其作用处理API请求携带的数据,对其进行验证并转化为Python的数据类型。 假如我们的API客户端通过请求提交了额外的数据,比…...

map(lambda x: x[0], sorted(count.items(), key=lambda x: (-x[1], x[0]))[:n])

被解析的代码行 map(lambda x: x[0], sorted(count.items(), keylambda x: (-x[1], x[0]))[:n])假设的输入 假设我们有以下的 count 字典,其中包括一些字符串及其对应的计数: count {apple: 3,banana: 1,orange: 2,grape: 2 }1. count.items() 首先…...

灰度重心法求取图像重心

1 概述 灰度重心法(Gray-scale Center of Mass Method)是一种在图像处理和计算机视觉中常用的方法。这种方法主要用于确定图像中物体的质心或重心位置,特别是在灰度图像中。 灰度重心法的基本思想是,根据图像中每个像素的灰度值及其位置信息来计算一个加权重心,这个重心…...

Go Mail设置指南:如何提升发送邮件效率?

Go Mail使用技巧与配置教程?如何用Go Mail实现发信? 随着工作负载的增加,如何高效地发送和管理邮件成为了许多职场人士面临的挑战。AokSend将为您提供一份详细的Go Mail设置指南,帮助您提升发送邮件的效率,让您的邮件…...

kali的tplmap使用报错解决

问题 当我们直接使用kali下的tplmap时报错了。 Tplmap 0.5 Automatic Server-Side Template Injection Detection and Exploitation Tool Testing if GET parameter name is injectable Exiting: module collections has no attribute Mapping 这是因为tplmap要求的版本…...

DAY16||513.找树左下角的值 |路径总和|从中序与后序遍历序列构造二叉树

513.找树左下角的值 题目:513. 找树左下角的值 - 力扣(LeetCode) 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: […...

使用jQuery处理Ajax

使用jQuery处理Ajax HTTP协议 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议 设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法 所有的WWW文件都必须遵守这个标准 一次HTTP操作称为一个事务&am…...

uni-app App版本更新

效果图: 前言 在移动应用开发中,确保用户能够及时更新到最新版本是非常重要的。本文将介绍如何在 uni-app 中实现 App 整包更新功能,并提供相关代码示例以帮助理解。 代码实现 2.1 引入模块 首先,我们需要引入用于处理更新的模块…...

Python Web 与低代码/无代码平台的深度融合

Python Web 与低代码/无代码平台的深度融合 目录 🚀 低代码与无代码平台的兴起🔗 Python 与低代码平台集成🌐 低代码开发的最佳实践📊 数据集成与自动化 1. 🚀 低代码与无代码平台的兴起 低代码和无代码平台的出现&…...

js 如何监听 body 内容是否改变

如果您想监听body内容的变化,并作出响应,可以使用MutationObserver。以下是一个简单的例子,它会在body内容变化时在控制台输出一条消息: // 创建一个观察者对象 const observer new MutationObserver(function(mutations, obser…...

python: 数字类型的一些函数

len(str) round(x, d) 对x进行四舍五入保留小数点后d位 round(3.45,1) 即 3.5 pow(x, y) # x的y次幂. x ** y pow(x, y[,z]) # 幂余 ( x ** y) % z print(pow(3, pow(3, 99), 10000)) #4587 浮点数…...

MapReduce学习与理解

MapReduce为google分布式三驾马车之一。分别为《The Google File System》、《MapReduce: Simplified Data Processing on Large Clusters》、《Bigtable: A Distributed Storage System for Structured Data》。三遍论文奠定了分布式存储和计算的基础。本篇文章来说说mapreduc…...

Animal objDog = new Dog()和 Dog objDog = new Dog()的区别

文章目录 1、Animal objDog new Dog()和 Dog objDog new Dog()的区别1. **对象类型(引用类型)**2. **调用和可用成员**3. **示例代码来说明**使用示例总结 2、Animal objDog new Dog();不能调用dog的方法和属性是为什么?原因解析解决方法小…...

springboot引入netty

配置类 import cn.hutool.core.thread.ThreadUtil; import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.PooledByteBufAllocator; import io.netty.channel.*; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChanne…...

PWM基础与信号控制

1. 什么是PWM? PWM(Pulse Width Modulation,脉宽调制)是一种通过改变信号的占空比来控制电压输出的技术。简单来说,PWM信号由一系列高低电平组成,通过调节高电平持续的时间比例,可以控制信号的…...

nvm,一款nodejs版本管理工具

背景 在工作中,我们可能同时在进行2个或者多个不同的项目开发,每个项目的需求不同,进而不同项目必须依赖不同版本的NodeJS运行环境,这种情况下,对于维护多个版本的node将会是一件非常麻烦的事情,nvm就是为…...

数据处理与统计分析篇-day11-RFM模型案例

会员价值度模型介绍 会员价值度用来评估用户的价值情况,是区分会员价值的重要模型和参考依据,也是衡量不同营销效果的关键指标之一。 价值度模型一般基于交易行为产生,衡量的是有实体转化价值的行为。常用的价值度模型是RFM RFM模型是根据…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

线程同步:确保多线程程序的安全与高效!

全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

02.运算符

目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...