Linux文件系统的体系结构是一个对复杂系统进行抽象化的有趣例子。通过使用一组通用的API函数,Linux就可以在多种存储设备上支持多种文件系统,这使得它拥有了与其他操作系统和谐共存的能力。

 

文件系统概述

文件是文件系统中最核心的概念,Linux中文件的概念并不局限于普通的磁盘文件,而是指由字节序列构成的信息载体,I/O设备、socket等也被包括在内。

因为有了文件的存在,所以需要衍生出文件系统去进行组织和管理文件,而为了支持各种各样不同的文件系统,所以有了虚拟文件系统的出现。

文件系统是一种对存储设备上的文件、数据进行存储与组织的机制。这个定义中的关键词有两个——“存储设备”和“存储与组织的机制”。“存储设备”包括硬盘、光盘、Flash、网络存储设备及其他存储设备,而文件系统给出了这些存储设备上数据的意义(网络协议规定了互联网上数据的意义,从这个角度来说,文件系统也可以被看作一个协议)。“存储与组织的机制”的目的是易于查询和存取文件。

Linux已经可以支持数十种文件系统,而且这些不同的文件系统可以共存于系统中,它们之间的关系并不是相互对立的,而是会经常进行文件与数据移动的,因此必须有一种统一的“语言”去支持它们的这种交流,虚拟文件系统就扮演了这个角色。

虚拟文件系统通过在各种具体的文件系统上建立一个抽象层,屏蔽了不同文件系统间的差异,通过虚拟文件系统分层架构(见下图),我们在对文件进行操作时,便不需要去关心相关文件所在的具体文件系统细节。

分层架构使得底层的操作细节被屏蔽,用户应用程序进行文件操作时,只需要考虑使用哪个系统调用,而不需要考虑操作的是位于哪个文件系统中的文件。

通过系统调用层,我们可以在不同的文件系统之间复制和移动数据,正是虚拟文件系统使得这种跨越不同存储设备和不同文件系统的操作成为了可能。

虚拟文件系统之所以能够衔接各种各样的文件系统,是因为它提供了一个通用的文件系统模型,该模型能够表示Linux支持的所有文件系统,包括了我们能够想到的一个文件系统应该具有的功能和行为。

虚拟文件系统提供的通用文件系统模型在内核中具体表现为一系列的抽象接口和数据结构,每个具体的文件系统都必须实现这些接口,并在组织结构上与该模型保持一致,如它们必须都支持像文件和目录这样的概念,也支持像创建文件和删除文件这样的操作。

我们可以把虚拟文件系统比作各种文件系统所共同推出的负责对外交流的“傀儡”,它本身没有实际的实施权,所有的决策实施都要通过躲在背后的每个具体文件系统来完成,正所谓每一个成功的虚拟文件系统背后都有很多个默默支持它的具体文件系统。

虚拟文件系统采用了面向对象的设计思路,将一系列概念抽象出来作为对象而存在,它们包含数据的也包含了操作这些数据的方法。当然,这些对象只能用数据结构来表示,而不可能超出C语言的范畴,不过即使在C++语言里面数据结构和类的区别也仅仅在于数据结构的成员默认公有,类的成员默认私有。

虚拟文件系统主要有如下4个对象类型。

· 超级块(Super Block)。

超级块对象代表一个已安装的文件系统,用于存储该文件系统的有关信息,如文件系统的类型、大小、状态等。对基于磁盘的文件系统,这类对象通常存放在磁盘的特定扇区上。对于并非基于磁盘的文件系统(如基于内存的文件系统sysfs),它们会现场创建超级块对象并将其保存在内存中。

· 索引节点(Inode)。

索引节点对象代表存储设备上的一个实际的物理文件,用于存储该文件的有关信息。Linux将文件的相关信息(如访问权限、大小、创建时间等)与文件本身区分开。文件的相关信息又被称为文件的元数据。

· 目录项(Dentry)。

目录项对象描述了文件系统的层次结构,一个路径的各个组成部分,不管是目录(虚拟文件系统将目录当作文件来处理)还是普通的文件,都是一个目录项对象。例如,打开文件/home/test/test.c时,内核将为目录home、test和文件test.c都创建一个目录项对象。

· 文件。

文件对象代表已经被进程打开的文件,主要用于建立进程和文件之间的对应关系。它由open()系统调用创建,由close()系统调用销毁,当且仅当进程访问文件期间存在于内存之中。同一个物理文件可能存在多个对应的文件对象,但其对应的索引节点对象却是唯一的。

 

Btrfs

相对来说,文件系统似乎是内核中比较稳定的部分,多年来从ext2、ext3到ext4。在很多人心里,几乎成了Linux文件系统的代名词。

但是随着我们对文件系统有更多的了解后,会发现很多用户都认为ext4只是一个过渡,Btrfs才是未来Linux文件系统里的“真命天子”,包括ext4的作者Theodore Tso也在盛赞Btrfs,并认为Btrfs将成为下一代Linux标准文件系统。Facebook甚至挖来了Btrfs的核心开发者,在内部大量的部署Btrfs。

1)B-Tree

Btrfs文件系统中所有的元数据都由B-Tree管理,可以说B-Tree是Btrfs的核心。B-Tree带来的好处主要在于可以进行高效的查找、插入和删除操作。

不妨先看看ext2/3中元数据管理的实现方式。妨碍ext2/3扩展性的一个问题来自其目录的组织方式。作为一种特殊的文件,目录在ext2/3中的内容是一张线性表格。例如,一个目录中包含4个文件,分别是“home”“usr”“oldfile”“sbin”,如果需要在该目录中查找“sbin”,则需要对该目录中的所有文件进行遍历,直至找到sbin为止。

在文件个数有限的情况下,这是一种比较直观的设计,但随着目录下文件容量的增加,这种遍历查找文件的方式耗费的时间将呈线性增长。为了解决这个问题,ext3设计者于2003年开发了目录索引技术,使用的数据结构就是B-Tree。如果同一目录下的文件容量超过2KB,则索引节点中的i_data域就会指向一个特殊的block,其中存储了目录索引B-Tree。B-Tree的查找效率高于线性表,但为同一个元数据设计两种数据结构总是不太方便的,而且文件系统中还有很多其他的元数据,所以用统一的B-Tree进行管理是非常自然的。Btrfs内部所有的元数据就是采用了B-Tree进行管理,在文件系统的超级块中,有指针指向这些B-Tree的根。

B-Tree这种数据结构常常被用于实现文件系统及数据库索引。我们知道磁盘I/O是非常昂贵的操作,所以操作系统采用预读的方式对此做了优化:每一次I/O时,不仅仅将当前磁盘地址的数据加载到内存,还会将相邻的数据也加载到内存缓冲区中。这主要是基于局部预读的原理:当访问一个地址数据的时候,与其相邻的数据很快也会被访问到。

数据库索引存储在磁盘上,索引的大小随着表中数据量的增长而增长,可以达到几GB甚至更多。因此当我们利用索引进行查询的时候,不可能把索引全部加载到内存中,只能逐一加载每个磁盘页。假设每次磁盘I/O读取一页,每个磁盘页对应了索引树上的一个节点。那么相对于二叉树性能来说,使用B-Tree来实现索引的关键因素就是磁盘I/O的次数。

例如,对于如图2所示的4阶二叉树,如果查找0010,则整个过程需要进行4次I/O,树的高度和磁盘I/O的次数都是4,所以在最坏的情况下磁盘I/O的次数是由树的高度来决定的。由此来看,减少磁盘I/O的次数就是要压缩树的高度,使树从“瘦高”尽量变得“矮胖”,所以B-Tree就在这样的背景下诞生了。

对于一个m阶的B-Tree来说,必须满足以下几个条件:每个节点最多拥有m颗子树;根节点至少有2颗子树;分支节点至少拥有m/2颗子树(除根节点和叶子节点外都是分支节点);所有叶子节点都在同一层上,每个节点最多可以有m-1个Key,并且以升序排列。

例如,对于如图3-4所示的3阶B-Tree,如果查找0021的话,需要进行3次I/O。相同数量的Key在B-Tree中生成的节点要远远少于二叉树中的节点,相差的节点数量就等同于磁盘I/O的次数。这样达到一定数量后,性能的差异就显现出来了。

2)基于extent的文件存储

在ext2文件系统中,数据块都是被单独管理的,inode中保存有指向数据块的指针,文件占用了多少个数据块,索引节点里面就有多少个指针(多级)。想象一下对于一个大小为1GB的文件,4KB的块大小,就需要(1024×1024)/4=262 144个数据块,即需要262 144个指针,这些指针需要在创建文件的时候进行初始化,在删除文件的时候进行回收,极大地影响了性能。

而现在很多文件系统包括ext4、Btrfs都支持extent功能,用extent取代block来管理磁盘,能有效地减少元数据开销。extent由一些连续的block组成,由起始的block加上长度进行定义。

简单来说,extent就是数据块的集合,以前一次分配一个数据块,现在可以一次分配一个extent,里面包含很多数据块,同时索引节点里面只需要分配指向extent的指针就可以了,这大大减少了指针的数量和层级,提高了操作大文件的性能。

3)动态索引节点分配

在ext2/3/4系列的文件系统中,索引节点的数量都是固定的,如果存储很多小文件的话,就有可能造成索引节点已经用完,但磁盘还有很多剩余的空间无法被使用的情况。不过它也有一个好处,就是磁盘一旦损坏,恢复起来要相对简单,因为数据在磁盘上的布局是相对固定的。

为了解决磁盘剩余空间无法被使用的问题,需要对索引节点进行动态分配:每一个索引节点作为B-Tree中的一个节点,用户可以无限制地任意插入新的索引节点,索引节点的物理存储位置是动态分配的,所以Btrfs没有对文件个数进行限制。

4)针对固态硬盘做的优化

固态硬盘采用闪存技术,内部没有磁盘、磁头等机械装置,读/写速率得到大幅提升。闪存不同于硬盘驱动器,在写数据之前必须先执行擦除操作,对擦除进行操作的次数也有一定的限制,因此,为了延长Flash的使用寿命,应该将写操作平均到整个Flash上。

Btrfs是少数有专门针对固态硬盘进行优化的文件系统,这些不仅能提高固态硬盘的使用寿命,而且能提高读/写性能。用户可以使用mount参数对固态硬盘做特殊优化处理。

5)支持元数据和数据的校验

例如,block A中存放的数据为0x55,但读取出来的数据变成了0x54,因为读取操作并未报错,所以这种错误不能被上层软件察觉。解决这个问题的方法是保存数据的校验和,在读取数据后检查校验和,如果不符合,便知道数据出现了错误。校验和技术保证了数据的可靠性,避免了Silent Corruption现象(这种错误一般无法被立即检测出来,而是应用在后续访问数据的过程中,才发现数据已经出错,这种很难在数据发生错误那一刻被检查出来的错误,就称为静默数据破坏,即Silent Data Corruption)。

ext2/3对磁盘完全信任,所以没有采用校验和技术。但不幸的是,磁盘的错误始终存在,不仅是廉价的IDE硬盘,就连昂贵的磁盘阵列也会存在Silent Corruption问题。而且随着存储网络的发展,即使数据从磁盘读取正确,也很难确保其能够安全地穿越网络设备。

Btrfs在读取数据的同时会读取相应的校验和,如果最终从磁盘读取出来的数据和校验和不相同,Btrfs会先尝试读取数据的镜像备份,如果数据没有镜像备份,则Btrfs将返回错误。数据在写入磁盘之前,Btrfs会计算相应的校验和,然后将校验和与数据同时写入磁盘。

Btrfs采用crc32算法计算校验和,为了提高效率,Btrfs将写数据和校验和的工作分别用不同的内核线程并行执行。

6)支持写时复制

文件系统中的写时复制是指在对数据进行修改的时候,不会直接在原来的数据位置上进行操作,而是找一个新的位置进行修改,优点是一旦系统突然断电,重启之后将不需要做fsck。Btrfs文件系统采用写时复制及事务机制保证了数据的一致性。

对Btrfs来说,所谓的写时复制,是指每次将数据写入磁盘时,先将更新的数据写入一个新的block,当新数据写入成功之后,再更新相关的数据结构指向新block。写时复制只能保证单一数据更新的原子性,但文件系统中很多操作需要更新多个不同的元数据,如创建文件时需要创建一个新的索引节点、增加一个目录项等,任何一个步骤出错,文件就不能被创建成功,因此可以将类似创建文件这样的一个完整操作过程定义为一个事务。

7)子分区subvolume

把文件系统的一部分配置为一个完整的被称为subvolume的子文件系统。通过subvolume,一个大的文件系统可以被划分为多个子文件系统,这些子文件系统共享底层的存储设备,在需要时便从底层设备中分配磁盘空间,过程类似于分配内存的malloc()函数。这种模型里,底层的存储设备可以作为存储池。这种模型有很多优点,如可以充分利用磁盘的带宽、可以简化磁盘空间的管理等。

所谓充分利用磁盘的带宽,是指文件系统可以共享底层的磁盘,做到并行的读/写;所谓简化管理,是相对于LVM等卷管理软件而言的。采用存储池模型,每个文件系统的大小都可以自动调节。而使用LVM时,如果一个文件系统的空间不够了,该文件系统并不能自动使用其他磁盘设备上的空闲空间,必须要使用LVM的管理命令手动调节。

subvolume可以作为根目录,挂载到任意挂载点。假如管理员只希望用户访问文件系统的一部分,如希望用户只能访问/var/test/下面的内容,而不能访问/var/目录下的其他内容,那么便可以将/var/test做成一个subvolume。/var/test的这个subvolume便是一个完整的文件系统,可以用mount命令挂载。如果挂载到/test目录下,给用户访问/test的权限,那么用户便只能访问/var/test下面的内容。

8)软件磁盘阵列

磁盘阵列技术有很多非常吸引人的特性,如用户可以将多个廉价的IDE磁盘组合为RAID0阵列,从而变成一个大容量的磁盘;RAID1和更高级的磁盘阵列配置还提供了数据冗余保护,使存储在磁盘中的数据更加安全。Btrfs很好地支持了软件磁盘阵列,包括RAID0、RAID1和RAID10。

9)压缩

Btrfs内置了压缩功能。通常将数据写入磁盘之前进行压缩会占用很多的CPU时间,这必然会降低文件系统的读/写效率。但随着硬件技术的发展,CPU处理时间和磁盘I/O时间的差距不断加大,在某些情况下,花费一定的CPU时间和占用一定的内存,能大大减少磁盘I/O的数量,这反而能够提高整体的效率。

例如,一个文件在不经过压缩的情况下需要进行100次磁盘I/O。但花费少量CPU时间进行压缩后,只需要进行10次磁盘I/O就可以将压缩后的文件写入磁盘。在这种情况下,I/O效率反而提高了。当然,这取决于压缩率。目前Btrfs已经能够支持zlib、LZO与zstd等方式进行压缩。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 大学中的3大阴暗面, 一般人根本想象不到

    在很多人的想象中,大学是一个非常完美的地方。的确,对于大多数学生来说,大学是一个充满了美好回忆场景。 不过,有阳光就会有阴影,再好的大学里,也会有一些肮脏的事情发生。下面我们就来说说大学中那些少见,但的确存在的黑暗面。 (1)保研路 保研路对于很多人来说已经不…...

    2024/4/28 4:40:56
  2. 比特币的走势

    眼看币王就要冲击万元大关,这时不知从那个角落里就传来一条消息:美国证券交易委员会(SEC)美国证券交易委员会(SEC)和商品期货交易委员会将举行会议。在这次会议中,讨论的重点是以太币和瑞波币的监管状况。这是一条多么无聊的消息,且不说消息的真假,SEC对数字货币的调查…...

    2024/4/28 4:02:11
  3. Linux,让你的项目跑在Linux上

    引言 1.1开发环境平时大家大多是在windows或者Mac操作系统下去编写代码进行开发,在开发环境中安装大量的软件,这样会导致环境的稳定性和安全性降低1.2生产环境是将程序原型在此环境中,供用户去使用.这个环境是有专业的人员去维护,一般是没有权限去操作生产环境的.1.3测试环境一…...

    2024/4/8 23:49:59
  4. 2020最新 腾讯云数据库团队:SQL Server 数据加密功能解析

    数据加密是数据库被破解、物理介质被盗、备份被窃取的最后一道防线;数据加密,一方面解决数据被窃取安全问题,另一方面有关法律要求强制加密数据;SQL Server 的数据加密相较于其他数据库,功能相对完善,加密方法较多。通常来讲,数据加密分为对称加密和非对称加密。对称加密…...

    2024/4/28 6:24:46
  5. 融跃小课堂:上海CFA报名条件是什么?

    CFA作为一项国际级考试,其证书在全球金融范围可有着极高的含金量,然而有不少考生会担心,由于证书含金量较高,其考试也会比较难。到底CFA考试难不难?融跃下面为你详细讲解! 一、报名条件不难达到 其实,CFA考试并没有大家所想象那样那么难,尤其是在报名条件方面,CFA考试…...

    2024/4/8 0:38:03
  6. 职场黑暗

    1月份的时候,参加一个事业单位考试,考试前一天被朋友告知已经内定人选了,明天就是走一个过场,但是因为刚出社会,想着多一场考试也是能够增加一次经验的,抱着群演的心态就去参加笔试和面试了(笔试面试共同进行)。结果很意外的是,过了3天,成绩出来(没有公示,是朋友弄…...

    2024/4/16 13:04:55
  7. 七个关键心理学(3)

    本来想自己总结下,发现有篇文章写的也很详细,可以自行观看。 32思维模型:过度自信一行为金融学四大研究成果之一 下面摘自心理学:关于人性的5个真相,你知道的越早越好第3个的描述。 一项心理学调查表明,超过90%的人都相信自己比50%的人都聪明。我们总会认为我们知道的比实…...

    2024/4/28 7:17:41
  8. 查找_折半查找(C语言)

    折半查找 1.查找原理折半查找(Binary Search)也称二分查找,是一种效率较高的查找方法,但是折半查找有局限性,它只适用于顺序存储结构的有序表查找过程:从表的中间位置开始,判断与给定的值是否相等,若相等则查找成功,若不相等,根据中间值的大小,将查找范围缩小一半到…...

    2024/4/11 7:31:39
  9. 自己理解的tcp的三次握手和四次挥手

    ...

    2024/4/10 14:10:30
  10. linux系统文件目录结构说明

    /bin :普通用户使用的命令,在C7中迁移至/usr/bin下 /bin/ls /bin/date /sbin :管理员使用的命令,在C7中迁移至/usr/sbin下 /sbin/service /dev :设备文件 /dev/sda /dev/sda1 /dev/zero /dev/null /root :root用户的家目录 /home :普通用户的家目录 /proc :虚拟的文件…...

    2024/4/26 14:04:27
  11. flink之检查点(checkpoint)和保存点(savepoint)的区别

    一、检查点:检查点屏障跟普通记录一样。它们由算子处理,但并不参与计算,而是会触发与检查点相关的行为。会在算子之间流动。当读取输入流的数据源遇到检查点屏障时,它将其在输入流中的位置保存到稳定存储中。如果输入流来自消息传输系统(Kafka 或 MapR Streams),这个位置…...

    2024/4/26 21:36:23
  12. 初识jenkins

    1.在jenkins官方网站下载https://jenkins.io/zh/关于jenkins的war包或者压缩包。 https://www.yiibai.com/jenkins/jenkins_installation.html 2.安装jdk(oracle官网) 配置环境变量 系统变量→新建JAVA_HOME变量,jdk的路径。 Path变量→编辑%JAVA_HOME%\bin;%JAVA_HOME%\jre…...

    2024/4/18 16:37:08
  13. @Data注解使用后get set报错解决方法

    @Data注解使用后get set报错解决方法参考文章: (1)@Data注解使用后get set报错解决方法 (2)https://www.cnblogs.com/lijinshan950823/p/9373408.html 备忘一下。...

    2024/4/13 7:05:42
  14. 类的定义及其调用

    phoneuse为主函数类 phone为应用类 应该放在同一个learnone包下下 每一个类前加上前缀 package learnone;phone应用类 public class phone {String brand;String type;float price;public void call() {System.out.println("拨打电话");}public void message() {Syst…...

    2024/4/24 16:01:27
  15. 2020最新 腾讯云服务器安装宝塔面板建网站全过程(图文教程)

    腾讯云服务器如何安装宝塔面板?宝塔面板支持LAMP/LNMP/网站/FTP/数据库等可视化功能,服务器安装宝塔面板的用户越来越多,码笔记以腾讯云服务器为例来说说腾讯云服务器安装宝塔面板的教程:腾讯云服务器安装宝塔主机面板首先你得拥有一台腾讯云服务器(腾讯云限时秒杀)码笔记…...

    2024/4/11 21:25:34
  16. Github上这5款非常好用的开源 Docker 工具,京东、华为都在用

    前言Docker 社区已经创建了许多开源工具,它们能帮我们处理各种用例。作者在本文中推荐了 5 款认为最有用的 Docker 工具,分别是 Watchtower(自动更新 Docker 容器)、docker-gc(容器和镜像的垃圾回收)、docker-slim(容器瘦身)、 rocker:突破 Dockerfile 的限制,以及 c…...

    2024/4/24 5:25:49
  17. Hyperledger Fabric 2.2实战记录(一)

    安装Hyperledger Fabric 2.2后执行以下操作一、搭建基础网络1.生成证书素材cd ~/work/example/organizations/vim crypto-config.yaml OrdererOrgs:- Name: OrdererOrgDomain: example.com #此处是根域名不是orderer.example.comSpecs:- Hostname: ordererPeerOrgs:- Name: Or…...

    2024/4/12 18:25:35
  18. 2020最新 腾讯云轻量应用服务器Lighthouse(三分钟详解)

    腾讯云推出轻量应用服务器(Lighthouse),腾讯云轻量服务器基于简单易用原则适用于云计算新手、中小企业和独立开发者,Lighthouse可用于部署博客系统、小程序、主机管理、电商外贸类Web应用等,码笔记分享腾讯云服务器官方发布的轻量应用服务器Lighthouse详解:正在上传…重新…...

    2024/4/25 3:04:56
  19. 卡尔曼滤波

    6+# 一级标题 x^=[p,u]T\hat{\textbf{x}}=[p, u]^Tx^=[p,u]T,状态量为车辆的位置ppp和速度uuu, x^=\hat{\textbf{x}}=x^=为对状态量伴随着噪声的预测。 对位置和速度预测的协方差矩阵为: Cov(xk)=Pk=[∑pp∑pv∑vp∑vv](3)Cov(\textbf{x}_k)=\textbf{P}_k= \left[\begin{mat…...

    2024/4/8 23:49:47
  20. 网络安全学习第四篇【服务器远程管理】

    telnet和远程桌面连接的区别telnet 提供了纯字符界面的连接到远端主机的一个终端联接。而远程桌面则是连接到远端桌面的,是图形界面。相同点是两者都提供了远程访问其他主机的机制,而不同也非常明显,一个是纯字符命令行方式的,另一个则是提供了完整桌面的图形界面。另外,两…...

    2024/4/19 21:38:53

最新文章

  1. 【氮化镓】p-GaN HEMTs空穴陷阱低温冻结效应

    这篇文章是关于低温条件下p-GaN高电子迁移率晶体管(HEMTs)栅极漏电的研究。文章通过电容深能级瞬态谱(C-DLTS)测试和理论模型分析,探讨了空穴陷阱对栅极漏电电流的影响。以下是对文章的总结: 摘要&#xf…...

    2024/4/28 8:33:15
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. AR-Net网络(图像篡改检测)

    AR-Net网络 摘要AbstractAR-Net1. 文献摘要2. 研究背景3. 创新点4. AR-Net 网络架构5. 实验6. 结论总结 摘要 AR-Net使用自适应注意力机制来融合位置和通道维度的特征,使网络能够充分利用不同维度的被篡改特征,此外,AR-Net 改进了预测掩模&a…...

    2024/4/24 5:15:19
  4. wordpress给指定ID分类添加特定的字段

    要在WordPress中为不同的分类添加特定的字段,您可以使用自定义字段(Custom Fields)功能。以下是一种方法,通过编写自定义的函数来实现。 首先,您需要创建一个自定义的函数来添加特定的字段。您可以在WordPress主题的f…...

    2024/4/27 14:55:26
  5. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义:dp[i][j]表示当背包容量为j,用前i个物品是否正好可以将背包填满&#xff…...

    2024/4/28 4:04:40
  6. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/4/27 3:39:11
  7. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon,直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件,我们讨论Spring负载均衡以Spring Cloud2020之后版本为主,学习Spring Cloud LoadBalance,暂不讨论Ribbon…...

    2024/4/27 12:24:35
  8. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,…...

    2024/4/27 12:24:46
  9. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…...

    2024/4/27 3:39:08
  10. 【Objective-C】Objective-C汇总

    方法定义 参考:https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/4/27 3:39:07
  11. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】🌏题目描述🌏输入格…...

    2024/4/27 3:39:07
  12. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/4/27 12:44:49
  13. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕,各大品牌纷纷晒出优异的成绩单,摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称,在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁,多个平台数据都表现出极度异常…...

    2024/4/27 21:08:20
  14. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令,这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/4/26 22:35:59
  15. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b,我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边, b b b 同理,则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/4/27 18:40:35
  16. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息,并安装一些有助于配置官方 NGINX 软件包仓库的软件包: apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/4/28 4:14:21
  17. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限(ROW FORMAT)配置标准HQL为: ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/4/27 13:52:15
  18. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中,传感器和控制器产生大量周…...

    2024/4/27 13:38:13
  19. --max-old-space-size=8192报错

    vue项目运行时,如果经常运行慢,崩溃停止服务,报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中,通过JavaScript使用内存时只能使用部分内存(64位系统&…...

    2024/4/27 1:03:20
  20. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞,例如可以被劫持的合法软件(例如浏览器或 Web 应用程序插件)中的错误。 恶意软件渗透可能会造成灾难性的后果,包括数据被盗、勒索或网…...

    2024/4/27 3:22:12
  21. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧! 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象…...

    2024/4/27 22:51:49
  22. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错,但存在一个缺陷:无法禁止通过实例化多个对象来创建多名总统: President One, Two, Three; 由于复制构造函数是私有的,其中每个对象都是不可复制的,但您的目…...

    2024/4/28 7:31:46
  23. python django 小程序图书借阅源码

    开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图&#xff0…...

    2024/4/28 8:32:05
  24. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/4/27 20:28:35
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57