中国建设银行网站下载安装/网站创建公司
Linux Filesystem Management
- 1 文件系统是什么
- 2 文件系统的组成
- 3 inode详解
- 1. inode到底是什么
- 2. inode的内容
- 3. inode的大小
- 4. inode的号码
- 5. 硬链接
- 6. 软链接
- 4 存储区域
- 5 常见文件系统的类型
- 1. 根文件系统
- 2. 虚拟文件系统
- 3. 真文件系统
- 4. 伪文件系统
- 5. 网络文件系统
1 文件系统是什么
操作系统中负责管理和存储 文件信息的软件机构称为文件管理系统,简称文件系统。
通常文件系统是用于存储和组织文件的一种机制,便于对文件进行方便的查找与访问。文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。
它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。
随着文件种类的增多,扩增了更多的文件系统,为了对各种文件系统进行统一的管理与组织。
文件系统的基本数据单位是文件,它主要是对磁盘上面的文件进行组织管理,组织的方式不同,形成的文件系统也会不同。
2 文件系统的组成
在Linux中,一切皆文件,不仅普通的文件和目录,块设备、管道、socket等等,都是由文件系统管理的。在Linux中的文件系统会给每个文件分配两个数据结构:索引节点(index node)
和目录项(directory entry)
,它们都主要是被用来记录文件的元信息和目录层次结构。
- inode,索引节点,用来记录文件的元信息,比如inode编号、文件大小、访问权限、创建时间、修改时间、数据在磁盘的位置等。索引节点是文件的唯一标识,它们之间一一对应,也同样都是被存储在硬盘当中,索引节点也是会占用磁盘的存储空间的。
- dentry,
目录项
,用来记录文件的名字,索引节点指针以及与其他目录项的层级关联关系。多个目录项关联起来,就会形成目录结构,但是它与索引节点不相同的是,目录项是由内核维护的一个数据结构,不是存放在磁盘中,而是缓存在内存里面
。目录项包括文件名和inode节点号。 - inode映射表:inode bitmap:位图:记录着哪些inode使用了,哪些没有使用。
- block映射表:block bitmap:记录着哪些block使用了,哪些没有使用。
其中,目录也是文件,也是用索引节点唯一标识,和普通文件不同的是,普通文件在磁盘里面保存着的是文件数据,而目录文件在磁盘里面保存子目录或者文件。
目录和目录项分别指的是什么?
目录是一个文件,它是被持久化的存储在磁盘里面,而目录项是内核中的一个数据结构,缓存在内存里面。
如果查询目录就会频繁的从磁盘读取,效率会很低,所以内核就会把已经读过的目录用目录项这个数据结构先缓存在内存里面,等到下次读取到相同的目录的时候,就只需要从内存里面去读取,这样就大大提升了文件系统的效率。
3 inode详解
1. inode到底是什么
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector
)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block
)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。
文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode
,中文译名为"索引节点"。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
2. inode的内容
inode包含文件的元信息,具体来说,
- 文件的
字节数
- 文件拥有者的
User ID
- 文件的
Group ID
- 文件的读、写、执行
权限
- 文件的
时间戳
,共有三个:
ctime指inode上一次变动的时间
mtime指文件内容上一次变动的时间
atime指文件上一次打开的时间。链接数
,即有多少文件名指向这个inode- 文件数据
block的位置
可以用stat命令,查看某个文件的inode信息:
[root@dbc-server-554 zabbix]# stat zabbix_svr.batFile: ‘zabbix_svr.bat’Size: 1284 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 2047802 Links: 1
Access: (0744/-rwxr--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2023-02-13 17:21:32.333045796 +0800
Modify: 2023-02-13 17:21:24.964098992 +0800
Change: 2023-02-13 17:21:24.976098905 +0800Birth: -
3. inode的大小
inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。
每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在磁盘格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。
查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令;
[root@dbc-server-554 zabbix]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 980823 500 980323 1% /dev
tmpfs 985192 1 985191 1% /dev/shm
tmpfs 985192 932 984260 1% /run
tmpfs 985192 16 985176 1% /sys/fs/cgroup
/dev/mapper/centos-root 26214400 783278 25431122 3% /
/dev/mapper/DBCVG-DBCLV 244195328 1615546 242579782 1% /mnt/DBC_Data
/dev/sda2 524288 31 524257 1% /boot
/dev/sda1 0 0 0 - /boot/efi
/dev/mapper/centos-home 189169664 11452 189158212 1% /home
tmpfs 985192 1 985191 1% /run/user/0
tmpfs 985192 8 985184 1% /run/user/42
4. inode的号码
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
Unix/linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。
表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:
首先,系统找到这个文件名对应的inode号码;
其次,通过inode号码,获取inode信息;
最后,根据inode信息,找到文件数据所在的block,读出数据。
使用ls -i命令,可以看到文件名对应的inode号码
[root@dbc-server-554 zabbix]# ls -il
total 24
2047779 -rw-r--r-- 1 root root 8243 Feb 14 17:20 CA_500.xml
2047106 -rw-r--r-- 1 root root 5183 Feb 14 17:17 CA_mediawebhook_441_500.rar
2047802 -rwxr--r-- 1 root root 1284 Feb 13 17:21 zabbix_svr.bat
5. 硬链接
一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。
ln命令可以创建硬链接:
运行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做"链接数",记录指向该inode的文件名总数,这时就会增加1。
6. 软链接
除了硬链接以外,还有一种特殊情况。
文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。
这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:“No such file or directory”。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接数"不会因此发生变化。
ln -s命令可以创建软链接,
ln -s [OPTION]... TARGET... DIRECTORY
硬链接和软链接
A为文件
① 软连接B指向文件A,如果A删除,则B失效,此处再一次强调了软连接为符号链接,即不指向实际文件
② 硬链接B指向文件inode,如果A删除,B仍可使用
4 存储区域
当磁盘进行格式化的时候,会被分成三个存储区域,分别为超级块、索引节点、数据块区。
- 超级块:superblock,用来存储文件系统的详细信息,包括inode/block的总量、使用量、剩余量(块个数、块大小、空闲块等),以及文件系统的格式。
- 索引节点区:用来存储索引节点。
- 数据块区:用来存储文件或目录数据。
我们不可能把超级块和索引节点区全部加载到内存在,这样内存是撑不住的,所以只有当需要使用的时候,才会将它加载进内存,它们加载进入内存的时机是不同的。
- 超级块:当文件系统挂载时进入内存当中;
- 索引节点区:当文件系统被访问时进入内存中。
5 常见文件系统的类型
linux中文件系统可以粗略分为:
1. 根文件系统
根文件系统(rootfs)是内核启动时所 mount(挂载)的第一个文件系统,内核代码映像文件保存在根文件系中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。
根文件系统的根目录/下有很多子目录:
2. 虚拟文件系统
从上面的分类图中我们可以知道Linux中有很多文件系统,并且是共存的。那么在Linux中是怎么做到让一切都是文件呢?这是由于有一层虚拟文件系统软件抽象层的存在,这个软件抽象层为用户屏蔽了底层文件系统的差异,向上层提供了统一地访问接口。如图:
无论最下层的文件系统是什么,我们最上层的用户端尽管使用系统调用接口(open、write、read等)或glibc接口(fopen、fwrite、fread等)来操作就可访问文件系统里的文件,使得一切都是文件成为可能。
① VFS
VFS(Virtual Filesystem Switch)称为虚拟文件系统或虚拟文件系统转换,是一个内核软件层,在具体的文件系统之上抽象的一层,用来处理与Posix文件系统相关的所有调用,表现为能够给各种文件系统提供一个通用的接口,使上层的应用程序能够使用通用的接口访问不同文件系统,同时也为不同文件系统的通信提供了媒介。
VFS并不是一种实际的文件系统,它只存在于内存中,不存在任何外存空间,VFS在系统启动时建立,在系统关闭时消亡。
VFS由超级块、inode、dentry、vfsmount等结构来组成。
② VFS在linux架构中的位置
从用户的使用角度,Linux下的文件系统中宏观上主要分为三层:
1.上层的文件系统的系统调用(System-call )
2.虚拟文件系统VFS(Virtual File System)层
3.挂载到VFS中的各种实际文件系统
Linux系统的User使用GLIBC(POSIX标准、GUN C运行时库)作为应用程序的运行时库,然后通过操作系统,将其转换为系统调用SCI(system-call interface),SCI是操作系统内核定义的系统调用接口,这层抽象允许用户程序的I/O操作转换为内核的接口调用。
3. 真文件系统
真文件系统其实是实际存储设备的文件系统,挂载于EEPROM、 Nor FLASH、 NAND FLASH、 eMMC 等存储器中
Linux存在几十个文件系统类型:ext2,ext3,ext4,xfs,brtfs,zfs等等
真文件系统包括:
-
ext文件系统,扩展文件系统extended filesystem,使用虚拟目录来操作硬件设备,在物理设备上按定长块存储数据。采用index索引节点的系统来存放虚拟目录中所存储文件的信息,索引节点位每个物理设备创建一个单独的表(索引节点表)来存储这些文件信息,虚拟目录中每个文件在索引节点表中都有一个条目。ext中extended部分来自其跟踪的每个文件的额外数据,包括:文件名,文件大小,文件属主,属组,访问权限,指向存储文件的每个硬盘块上的指针。限制:文件不能好过2G
-
ext2文件系统是ext的扩展,在ext基础上增加了文件的创建时间,修改时间和最后访问时间,允许最大文件2TB,后期版本增加到32T。改变了文件在数据块中的存储方式,ext系统常见问题在文件写到物理设备,数据块分散在整个设备中(碎片化),需要更长的时候查找特定文件的块,降低了文件系统性能。ext2通过按组分配磁盘块来减轻碎片化。限制:容易因为系统崩溃或断电时损坏
-
日志文件系统为linux增加了一层安全性,他不再使用之前将数据直接写入存储设备再更新索引节点表的做法,而是先将文件的更改写到临时文件(日志,journal),在数据成功写到存储设备和索引节点表后,再删除对应的日志条目。如果写入时系统崩溃或断电,日志文件下次会读取日志文件并处理上次未写入的数据。linux有三种广泛的日志方法,包括:
数据模式:索引节点和文件都会被写入日志;丢失数据风险低,但性能差
有序模式:只有索引节点会被写入日志,文件数据成功写入后才删除;性能和安全取得折中
回写模式:只有索引节点会被写入日志,但不控制文件数据何时写入;丢数据风险高,但比不用日志好,性能好,安全性差 -
ext3文件系统采用和ext2相同的索引节点表结构,但给每个存储设备增加了一个日志文件,默认情况下,ext3使用有序模式的日志功能,可以修改为其他两种模式。限制:无法恢复误删文件,没有内建压缩功能,不支持加密文件
-
ext4文件系统是ext3的扩展,除了支持压缩,加密,还支持一个称为区段(extent)的特性。区段在存储设备上按块分配空间,但索引节点表只保存起始块位置,由于无需列出所有用来存储的文件中数据的数据块,可以在索引表中节省一些空间。还引入了块预分配技术,如果想在设备给一个要变大的文件预留空间,ext4可以为文件分配所需的块,而不仅仅是那些现在已经用到的块。用0填满预留数据块,不会分配给其他文件
-
ReiserFS文件系统支持回写日志模式,linux最快的日志文件系统之一,有两个有意思的特性:一是在线调整已有文件系统大小,二是尾部压缩技术(tailpacking),该技术将一个文件的数据填入另一个文件数据块的空白处
-
JFS文件系统采用有序日志方法,基于区段的文件分配
-
XFS日志文件系统采用回写日志模式,允许在线调整文件系统大小,但只能扩大不能缩小
-
写时复制文件系统 COW(copy-on-write),兼顾了安全性和性能,如果要修改数据,会使用科隆或写快照,修改过的数据不会直接覆盖当前数据,而是放入文件系统的另一个位置,即便修改已完成,也不会覆盖。
-
ZFS文件系统,COW是ZFS由Sun公司研发,用于opensolaris,由于没有使用GPL许可,所以无法成为linux默认文件系统
-
Btrfs文件系统(B树文件系统)在Reiser4上改进可靠性,因其稳定性、易用性及能够动态调整已挂载文件系统大小,成为最流行的文件系统,OpenSUSE将其作为默认文件系统
4. 伪文件系统
Linux内核提供了sysfs、procfs、devtmpfs等伪文件系统,伪文件系统存在于内存,不占用硬盘。以文件地形式向用户提供一些系统信息,用户读写这些文件就可以读取、修改系统的一些信息。
① procfs
procfs是 进程文件系统的缩写,包含一个伪文件系统(启动时动态生成的文件系统),用于通过内核访问进程信息。这个文件系统通常被挂载到 /proc 目录。
由于 /proc 不是一个真正的文件系统,它也就不占用存储空间,只是占用有限的内存。
/proc目录的内容如下:
[root@dbc-server-554 zabbix]# ls /proc/
1 16 20738 26 2981 3027 3273 34 377 517 680 82 903 97 iomem schedstat
10 1635 20739 27 2983 3029 3291 349 38 518 69 826 905 972 ioports scsi
10090 1658 21 2741 2985 3035 3292 35 39 519 693 827 906 977 ipmi self
10148 1686 21665 28 2986 3045 3295 351 4 52 696 830 908 9793 irq slabinfo
1025 1687 22 28180 2988 3049 3297 352 4043 520 7 831 909 990 kallsyms softirqs
10925 1688 2236 29 2991 3056 3298 353 41 521 717 838 913 acpi kcore stat
11 1689 2237 2948 2993 3057 3299 354 42 522 741 839 914 asound keys swaps
12 1690 2238 29532 2994 3063 33 355 43 523 742 84 932 buddyinfo key-users sys
13 1699 2239 2957 2995 3068 3302 356 4342 53 769 840 9329 bus kmsg sysrq-trigger
1324 17 2240 2958 2997 3070 3303 357 44 54 77 841 934 cgroups kpagecount sysvipc
1339 1700 2241 2965 2998 3091 3304 358 46 55 8 842 935 cmdline kpageflags timer_list
1349 1701 2242 2966 3000 31 3308 359 48 56 80 8421 936 consoles loadavg timer_stats
135 1763 2243 2967 3001 31159 3309 36 487 57 807 843 937 cpuinfo locks tty
1352 1779 2244 2969 3003 3132 3314 360 488 58 808 844 939 crypto mdstat uptime
1355 1790 2245 2970 3004 3149 3317 361 49 59 809 845 941 devices meminfo version
1356 18 23 2971 3005 3169 3320 362 499 6 81 870 942 diskstats misc vmallocinfo
1360 19 2399 2972 3006 32 3326 369 50 607 810 874 943 dma modules vmstat
1365 19029 24 2973 3007 325 3332 37 500 636 811 875 944 driver mounts zoneinfo
138 1968 2400 2974 3010 3250 3338 370 51 65 812 878 949 execdomains mtrr
14 2 2441 2975 3011 3253 3339 371 513 651 813 880 950 fb net
1423 20735 25 2976 3013 3255 3343 372 514 6522 814 8969 961 filesystems pagetypeinfo
1444 20736 2526 2978 3014 3258 3361 373 515 66 816 9 9629 fs partitions
15558 20737 2540 2980 3015 3269 3391 374 516 67 817 902 967 interrupts sched_debug
其中,这些以数字命名的文件夹就是与进程相关的部分,这些数字就是进程的PID号。
我们可以访问系统信息,如读取CPU相关信息:
[root@dbc-server-554 zabbix]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 60
model name : Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
stepping : 3
microcode : 0x28
cpu MHz : 800.024
cache size : 8192 KB
physical id : 0
siblings : 8
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm epb invpcid_single ssbd rsb_ctxsw ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts md_clear spec_ctrl intel_stibp flush_l1d
bogomips : 7195.84
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:...
查看内核支持的文件系统类型:
[root@dbc-server-554 zabbix]# cat /proc/filesystems
nodev sysfs
nodev rootfs
nodev ramfs
nodev bdev
nodev proc
nodev cgroup
nodev cpuset
nodev tmpfs
nodev devtmpfs
nodev debugfs
nodev securityfs
nodev sockfs
nodev dax
nodev bpf
nodev pipefs
nodev configfs
nodev devpts
nodev hugetlbfs
nodev autofs
nodev pstore
nodev efivarfs
nodev mqueuefuseblk
nodev fuse
nodev fusectlxfsext3ext2ext4vfat
nodev rpc_pipefs
nodev overlay
nodev binfmt_misc
② sysfs
sysfs是一个基于内存的文件系统,它的作用是将内核信息以文件的方式提供给用户程序使用。sysfs 文件系统被挂载在 /sys 挂载点上。/sys目录下的内容如:
[root@dbc-server-554 zabbix]# ls /sys/
block bus class dev devices firmware fs hypervisor kernel module power
sysfs 与 proc 相比有很多优点,最重要的莫过于设计上的清晰。sysfs 的设计原则是一个属性文件只做一件事情, sysfs 属性文件一般只有一个值,直接读取或写入。
整个 /proc/scsi目录在2.6内核中已被标记为过时(LEGACY),它的功能已经被相应的 /sys 属性文件所完全取代。新设计的内核机制应该尽量使用 sysfs 机制,而将 proc 保留给纯净的“进程文件系统”。
③ devtmpfs
devtmpfs 的功用是在 Linux 核心 启动早期建立一个初步的 /dev,令一般启动程序不用等待 udev(udev 是Linux kernel 2.6系列的设备管理器。它主要的功能是管理/dev目录底下的设备节点。),缩短 GNU/Linux 的开机时间。
在devtmpfs出现之前,/dev/下面的设备节点应该都是udev-daemon收到内核的事件后用mknod程序或者直接调mknod()系统调用创建出来的;现在基本上不走udev了,几乎所有的设备文件(比如/dev/sda1)都是内核直接创建的。
5. 网络文件系统
NFS(Network File System) ,即网络文件系统, 能使使用者访问网络上别处的文件就像在使用自己的计算机一样。其工作原理是使用客户端/服务器架构 :
服务器程序向其他计算机提供对文件系统的访问,其过程称为输出。NFS客户端程序对共享文件系统进行访问时,把它们从NFS服务器中“输送”出来。文件通常以块为单位进行传输。
相关文章:

CHAPTER 1 Linux Filesystem Management
Linux Filesystem Management1 文件系统是什么2 文件系统的组成3 inode详解1. inode到底是什么2. inode的内容3. inode的大小4. inode的号码5. 硬链接6. 软链接4 存储区域5 常见文件系统的类型1. 根文件系统2. 虚拟文件系统3. 真文件系统4. 伪文件系统5. 网络文件系统1 文件系统…...

RocketMQ架构篇 - 读写队列与生产者如何选择队列
读、写队列 创建主题时,可以指定 writeQueueNums(写队列的个数)、readQueueNums(读队列的个数)。生产者发送消息时,使用写队列的个数返回路由信息;消费者消费消息时,使用读队列的个…...

华为OD机试真题Python实现【通信误码】真题+解题思路+代码(20222023)
通信误码 题目 信号传播过程中会出现一些误码,不同的数字表示不同的误码 ID,取值范围为 1~65535,用一个数组记录误码出现的情况,每个误码出现的次数代表误码频度,请找出记录中包含频度最高误码的最小子数组长度。 🔥🔥🔥🔥🔥👉👉👉👉👉👉 华为OD…...

【单目3D目标检测】MonoDDE论文精读与代码解析
文章目录PrefacePros and ConsAbstractContributionsPreliminaryDirect depth estimationDepth from heightPespective-n-point(PnP)PipelineDiverse Depth EstimationsRobust Depth CombinationOutput distributionSelecting and combining reliable de…...

复习 Kotlin 从小白到大牛 第二版 笔记要点
4.2.2 常量和只读变量 常量和只读变量一旦初始化就不能再被修改。在kotlin中,声明常量是在标识符的前面加上val或const val 关键字。 1. val 声明的是运行时变量,在运行时进行初始化 2.const val 声明的是编译时常量,在编译时初始化 val …...

X264简介-Android使用(二)
X264简介-Android使用(二) 4、Ubuntu上安装ffmpeg: 检查更新本地软件包(如果未更新,reboot Vmware): sudo apt update sudo apt upgrade官网下载的source文件安装: http://ffmpe…...

【独家】华为OD机试 - 统计差异值大于相似值二元组个数(C 语言解题)
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...

掌握好Framework 才是王道~
现在面试对Android开发者的要求越来越高了!从最开始的阿里、头条、腾讯等大厂,到现在的互联网车企,面试总喜欢问道 Framework底层原理的相关问题 Android Framework的三大核心功能: 1、View.java:View工作原理,实现包…...

Codeforces Round 856 (Div. 2) A — C
Codeforces Round 856 (Div. 2) 文章目录A. Prefix and Suffix Array题目大意题目分析codeB. Not Dividing题目大意题目分析codeC. Scoring Subsequences题目大意题目分析codeA. Prefix and Suffix Array 题目大意 给出一个字符串所有的非空前后缀,判断原字符串是…...

2022年MathorCup数学建模B题无人仓的搬运机器人调度问题解题全过程文档加程序
2022年第十二届MathorCup高校数学建模 B题 无人仓的搬运机器人调度问题 原题再现 本题考虑在无人仓内的仓库管理问题之一,搬运机器人 AGV 的调度问题。更多的背景介绍请参看附件-背景介绍。对于无人仓来说,仓库的地图模型可以简化为图的数据结构。 仓库…...

开源项目的演进会遇到哪些“坑”?KubeVela 从发起到晋级 CNCF 孵化的全程回顾
作者:孙健波、曾庆国 点击查看:「开源人说」第五期《KubeVela:一场向应用交付标准的冲锋》 2023 年 2 月,**KubeVela [ 1] ** 经过全体 ToC 投票成功进入 CNCF Incubation,是云原生领域首个晋级孵化的面向应用的交付…...

MSDP实验配置
目录 配置MSDP 配置PIM SM协议 配置各PIM SM域内的静态RP 配置MSDP对等体 配置域内的MSDP对等体 AR8和AR9建立EBGP邻居 配置域间的MSDP对等体 进行实验验证 什么是MSDP MSDP(Multicast Source Discovery Protocol)组播源发现协议的简称 用来传递…...

惊!初中生也来卷了……
大家好,我是良许。 前两天在抖音直播的时候,突然来了一位不速之客…… 他自称是初中生,一开始我还有点不太相信,直到跟他连麦,听到他还略带一些稚嫩的声音,我才知道,他没有骗我…… 他说他想学…...

kafka相关配置介绍
kafka默认配置 每个kafka broker中配置文件server.properties默认必须配置的属性如下: broker.id0 num.network.threads2 num.io.threads8 socket.send.buffer.bytes1048576 socket.receive.buffer.bytes1048576 socket.request.max.bytes104857600 log.dirs/tmp/…...

【PyTorch】教程:torch.nn.Hardtanh
torch.nn.Hardtanh 原型 CLASS torch.nn.Hardtanh(min_val- 1.0, max_val1.0, inplaceFalse, min_valueNone, max_valueNone) 参数 min_val ([float]) – 线性区域的最小值,默认为 -1max_val ([float]) – 线性区域的最大值,默认为 1inplace ([bool]) …...

神垕古镇景区5A级十年都没有实现的三大主因
钧 瓷 内 参 第40期(总第371期) 2023年3月5日 神垕古镇景区5A级十年都没有实现的三大主因 这是2013年,禹州市市政府第一次提出创建5A级景区到今年三月份整整十年啊! 目前神垕古镇景区是4A级景区,5A级一直进行中&a…...

react函数组件常用的几个钩子函数useState、useEffect、useRef、useCallback
react框架react框架包括包括两大类:类组件函数组件。类组件构成:constructor自定义方法。调用方法通过this.方法名()。constructor(superstate)构造器里面必有super字段。render()方法里面写页面布局。函数组件构成:各种钩子函数return()方法…...

4N60-ASEMI高压MOS管4N60
编辑-Z 4N60在TO-220封装里的静态漏极源导通电阻(RDS(ON))为2.5Ω,是一款N沟道高压MOS管。4N60的最大脉冲正向电流ISM为16A,零栅极电压漏极电流(IDSS)为1uA,其工作时耐温度范围为-55~150摄氏度。4N60功耗(…...

现代神经网络(VGG),并用VGG16进行实战CIFAR10分类
专栏:神经网络复现目录 本章介绍的是现代神经网络的结构和复现,包括深度卷积神经网络(AlexNet),VGG,NiN,GoogleNet,残差网络(ResNet),稠密连接网络…...

Java代码弱点与修复之——Dereference null return value(间接引用空返回值)
弱点描述 Dereference null return value,间接引用空返回值。是Coverity Scan静态代码分析工具中的一个警告,表示代码中有对可能为空(null)的方法或函数返回值进行间接引用(Dereference)操作。 该类型的漏洞可能会导致 NullPointerException 异常,并且会导致程序崩溃或…...

【冲刺蓝桥杯的最后30天】day3
大家好😃,我是想要慢慢变得优秀的向阳🌞同学👨💻,断更了整整一年,又开始恢复CSDN更新,从今天开始更新备战蓝桥30天系列,一共30天,如果对你有帮助或者正在备…...

光伏发电嵌入式ARM工控机
随着智慧电力技术的不断发展和普及,越来越多的电力设备和系统需要采用先进的控制和监测技术来实现自动化管理和优化运行。其中,嵌入式 ARM 控制器技术在智慧电力领域中得到了广泛应用。同时,导轨安装也是该技术的重要应用场景之一。 导轨安装…...

推荐 7 个 Vue.js 插件,也许你的项目用的上(五)
当我们可以通过使用库轻松实现相同的结果时,为什么还要编写自定义功能?开发人员最好的朋友和救星就是这些第三方库。我相信一个好的项目会利用一些可用的最佳库。Vue.js 是创建用户界面的最佳 JavaScript 框架之一。这篇文章是关于 Vue.js 的优秀库系列的…...

1.1基于知识图谱的项目实战:优酷搜索泛查询意图优化
NLU的技术实现主要分为在线识别和离线数据挖掘两块。 1.在线识别 NLU的在线识别技术栈如下图所示,共由下述2个部分组成: 第一个部分是Slot Filling(成分分析),负责对query进行实体识别和槽位抽取;第二部分Inention Detection(意图识别),根据提取的槽位进行意图的判定(目…...

[java Spring JdbcTemplate配合mysql实现数据批量删除
之前的文章 java Spring JdbcTemplate配合mysql实现数据批量添加和文章java Spring JdbcTemplate配合mysql实现数据批量修改 先后讲解了 mysql数据库的批量添加和批量删除操作 会了这两个操作之后 批量删除就不要太简单 我们看到数据库 这里 我们用的是mysql工具 这里 我们有…...

uos 20 统信 fprintd 记录
uos 20 统信 fprintd 记录 sudo busctl deepin-authenticate.service /usr/lib/systemd/system/deepin-authenticate.service [Unit] DescriptionDeepin Authentication[Service] Typedbus BusNamecom.deepin.daemon.Authenticate ExecStart/usr/lib/deepin-authenticate/d…...

vue移动端h5,文本溢出显示省略号,且展示‘更多’按钮
问题: 元素宽度100%,宽度会随着浏览器缩放而变化。元素内文本超过4行时显示省略号,同时展示‘更多’按钮,点击更多按钮展示全部文本。如下图所示 超出四行显示省略号(…)的代码 .content{overflow:hidden;text-overflow: elli…...

php宝塔搭建部署实战兰空图床程序网站PHP源码
大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套Lsky Pro兰空图床程序网站PHP的源码。感兴趣的朋友可以自行下载学习。 技术架构 PHP8.0 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码,宝塔添加…...

软件测试面试:拿到一个产品(版本)如何开展测试?
产品提测后,如何开展测试? 我们都了解软件测试的执行流程,......提测-冒烟测试-详细测试-提交缺陷报告-回归测试,但软件测试并不总是线性过程,它甚至可能是螺旋结构,不断地试错,不断地迭代&…...

【Opencv项目实战】图像的像素值反转
文章目录一、项目思路二、算法详解2.1、获取图像信息2.2、新建模板2.3、图像通道顺序三、项目实战:彩图的像素值反转(方法一)四、项目实战:彩图的像素值反转(方法二)五、项目实战:彩图转换为灰图…...