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

操作系统之EXT文件系统

1.理解硬件

1.1磁盘、服务器、机柜、机房

机械磁盘是计算机中唯一的一个机械设备

  • 磁盘--- 外设
  • 容量大,价格便宜
1.1.1光盘 
 1.1.2服务器

1.1.3机房

1.2磁盘的物理结构

1.3磁盘的存储结构

 一个盘片又两个面

每个面都有一个磁头

磁头沿着盘面的半径移动

 

1.3.1 CHS地址定位 

CHS(Cylinder   Head  Sector):柱面,磁头,扇区定位法:

  • 确定哪一个磁头------找到在哪一个盘面
  • 确定磁头位置---------找到在哪一个柱面
  • 磁盘旋转---------------找到在哪一个磁道
项目说明
扇区(Sector)磁盘读写的最小单位,常为 512 字节
磁头数(Heads)每个盘片有上下两面,每面一个磁头 → 磁头数 = 盘片数 × 2
磁道数(Tracks)从盘片外圈向内编号(0 开始),最内圈用于停靠磁头,不存数据
柱面数(Cylinders)同一半径上的多面磁道构成一个柱面,柱面数 = 每面磁道数
每道扇区数每条磁道被等分成若干扇区,每道的扇区数相同
圆盘数(Platters)磁盘中的物理盘片数量
磁盘容量磁盘容量 = 磁头数 × 柱面数 × 每道扇区数 × 每扇区字节数
补充说明磁头安装在传动臂上,共进退(即所有磁头同时定位到相同柱面)

1.4磁盘的逻辑结构

1.4.1 理解过程

 

磁带上面可以存储数据,我们可以把磁带“拉直”,形成线性结构

 那么磁盘本质上虽然是硬质的,但是逻辑上我们可以把磁盘想象成为卷在一起的磁带,那么磁盘的逻辑存储结构我们也可以类似于:

这样每一个扇区,就有了一个线性地址(其实就是数组下标),这种地址叫做LBA 

 1.4.2磁盘真实过程

 

 每一个盘面上相同磁道构成柱面

某一盘面磁道展开:

 某一盘面展开:

 磁盘展开图:

 1.4.3LBA地址定位

 将磁盘转变为一维数组:

所以,每一个扇区都有一个下标,我们叫做LBA(Logical Block Address)地址,其实就是线性地址。所以怎么计算得到这个LBA地址呢? 

 

LBA地址转成CHS地址,CHS如何转换成为LBA地址。谁做啊??磁盘自己来做!固件(硬件电路,伺服系统)

1.5 CHS&&LBA地址

1.5.1 CHS转LBA
  • 磁头数*每磁道扇区数=柱面扇区数
  • LBA=柱面扇区数*柱面号C+磁头号H*每磁道扇区数+扇区号S-1
  • 扇区号S通常从1开始,柱面号和磁头号通常从0开始
  • 总柱面,磁头数,扇区总数等信息开局由磁盘加载到内存
1.5.2 LBA转CHS 
  • C=LBA / 柱面扇区数(磁头数*每磁道扇区数)
  • H=LBA % 柱面扇区数 / 每磁道扇区数
  • S=LBA % 每磁道扇区数+1

2.文件系统 

2.1块

其实硬盘是典型的“块”设备,操作系统读取硬盘数据的时候,其实是不会一个个扇区地读取,这样
效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。 

硬盘的每个分区是被划分为一个个的”块”。一个”块”的大小是由格式化的时候确定的,并且不可
以更改,最常见的是4KB,即连续八个扇区组成一个 ”块”。”块”是文件存取的最小单位。 

  • 磁盘就是一个三维数组,我们把它看待成为一个"一维数组",数组下标就是LBA,每个元素都是扇区
  • 每个扇区都有LBA,那么8个扇区一个块,每一个块的地址我们也能算出来。
  • 知道LBA:块号 = LBA/8
  • 知道块号:LAB=块号*8 + n. (n是块内第几个扇区)

 2.2分区

其实磁盘是可以被分成多个分区(partition)的,以Windows观点来看,你可能会有一块磁盘并且将它分区成C,D,E盘。那个C,D,E就是分区。分区从实质上说就是对硬盘的一种格式化。但是Linux的设备都是以文件形式存在,那是怎么分区的呢?

柱面是分区的最小单位,我们可以利用参考柱面号码的方式来进行分区,其本质就是设置每个区的起始柱面和结束柱面号码。 此时我们可以将硬盘上的柱面(分区)进行平铺,将其想象成一个大的平面,如下图所示:

 

 2.3节点

  • Linux下文件的存储是属性和内容分离存储的
  • Linux下,保存文件属性的集合叫做inode,一个文件,一个inode,inode内有一个唯一的标识符,叫做inode号

📌 再次注意:

  • 文件名属性并未纳入到inode数据结构内部
  • inode的大小一般是128字节或者256,我们后面统一128字节
  • 任何文件的内容大小可以不同,但是属性大小一定是相同的 

 3.ext2文件系统

 3.1 BLOCK GROUP

ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组
成。政府管理各区的例子

3.1.1 SuperBlock(超级块)

存放文件系统本身的结构信息,描述整个分区的文件系统信息。记录的信息主要有:bolck 和inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了

 

3.1.2 GDT(块组描述符) 

块组描述符表,描述块组属性信息,整个分区分成多个块组就对应有多少个块组描述符。每个块组描述符存储一个块组 的描述信息,如在这个块组中从哪里开始是inode Table,从哪里开始是Data
Blocks,空闲的inode和数据块还有多少个等等。块组描述符在每个块组的开头都有一份拷贝。

/*
* 块组描述符(Block Group Descriptor)结构体
* 用于描述 ext2 文件系统中每个块组的元数据信息
*/
struct ext2_group_desc
{__le32 bg_block_bitmap;        /* 块位图所在的块号,用于管理该组的磁盘块分配情况 */__le32 bg_inode_bitmap;        /* inode位图所在的块号,用于管理该组的inode分配情况 */__le32 bg_inode_table;         /* inode表的起始块号,包含该组所有inode的详细信息 */__le16 bg_free_blocks_count;   /* 该组中未使用的块数量 */__le16 bg_free_inodes_count;   /* 该组中未使用的inode数量 */__le16 bg_used_dirs_count;     /* 该组中已使用的目录数量(目录inode数量) */__le16 bg_pad;                 /* 保留字段,用于内存对齐 */__le32 bg_reserved[3];         /* 保留字段,将来扩展使用 */
};

 

3.1.3 GlockBitmap(块位图)

Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用 

3.1.4 inodeBitmap(inode位图)

每个bit表示一个inode是否空闲可用。 

 3.1.5 inodeTabke(节点表)
  • 存放文件属性 如 文件大小,所有者,最近修改时间等
  • 当前分组所有Inode属性的集合
  • inode编号以分区为单位,整体划分,不可跨分区 

 3.1.6 Date Blocks(数据块)
  • 数据区:存放文件内容,也就是一个一个的Block。根据不同的文件类型有以下几种情况:对于普通文件,文件的数据存储在数据块中。
  • 对于目录,该目录下的所有文件名和目录名存储在所在目录的数据块中,除了文件名外,ls -l命令看到的其它信息保存在该文件的inode中。
  • Block 号按照分区划分,不可跨分区

3.2 inode和blocks的映射关系

 

 通过inode进行的实例:

touch text.c
ls -li 

  1. 存储属性
    1. 通过inodeBitmap找到空闲的(inodeTabke)节点位置,例如此时的节点为236466,内核把文件信息记录其中。
  2. 存储数据
    1. 根据GlockBitmap(块位图)来找到空闲的数据磁盘,例如此时空闲的块为300,500,800
  3. 记录分配情况
    • 内盘在inode中记录使用的块列表
  4. 添加文件名到目录
    • 新的文件名text.c。linux如何在当前的目录中记录这个文件?内核将入口(263466,text.c)添加到目录文件。文件名和inode之间的对应关系将文件名和文件的内容及属性连接起来。

3.3目录与文件名与inode

  •  目录也是文件,但是磁盘上没有目录的概念,只有文件属性+文件内容的概念。
  •  目录的属性不用多说,内容保存的是:文件名和Inode号的映射关系
  • 所以,访问文件,必须打开当前目录,根据文件名,获得对应的inode号,然后进行文件访问
  • 所以,访问文件必须要知道当前工作目录,本质是必须能打开当前工作目录文件,查看目录文件的内容! 

3.4路径解析与dentry

问题1:Linux磁盘中,存在真正的目录吗?
        答案:不存在,只有文件。只保存文件属性+文件内容
问题2:访问任何文件,都要从/目录开始进行路径解析?
        答案:原则上是,但是这样太慢,所以Linux会缓存历史路径结构
问题3:Linux目录的概念,怎么产生的?
        答案:打开的文件是目录的话,由OS自己在内存中进行路径维护
Linux中,在内核中维护树状路径结构的内核结构体叫做: struct dentry 

注意:

  • 每个文件其实都要有对应的dentry结构,包括普通文件。这样所有被打开的文件,就可以在内存中形成整个树形结构
  • 整个树形节点也同时会隶属于LRU(Least Recently Used,最近最少使用)结构中,进行节点淘汰
  • 整个树形节点也同时会隶属于Hash,方便快速查找
  • 更重要的是,这个树形结构,整体构成了Linux的路径缓存结构,打开访问任何文件,都在先在这棵树下根据路径进行查找,找到就返回属性inode和内容,没找到就从磁盘加载路径,添加dentry结构,缓存新路径 

 3.5挂载

注:请翻看课堂代码 

我们已经能够根据inode号在指定分区找文件了,也已经能根据目录文件内容,找指定的inode了,在指定的分区内,我们可以为所欲为了。可是:
问题:inode不是不能跨分区吗?Linux不是可以有多个分区吗?我怎么知道我在哪一个分区??? 

dd if=/dev/zero of=./disk.img bs=1M count=5 
mkfs.ext4 disk.img 
mkdir /mnt/mydisk

4.软硬链接

4.1硬链接

硬链接并非单独的真实文件,他和原来的a.out 都是inode

  • aba和a.out的链接状态完全相同,他们被称为指向文件的硬链接。内核记录了这个连接数,inode263466 的硬连接数为2。
  • 我们在删除文件时干了两件事情:1.在目录中将对应的记录删除,2.将硬连接数-1,如果为0,则将对应的磁盘释放。 
 4.2软链接

软链接的本质就是windows的快捷方式,他是真实的单独文件因为他的inode和连接的文件相同。

相关文章:

操作系统之EXT文件系统

1.理解硬件 1.1磁盘、服务器、机柜、机房 机械磁盘是计算机中唯一的一个机械设备 磁盘--- 外设慢容量大,价格便宜 1.1.1光盘 1.1.2服务器 1.1.3机房 1.2磁盘的物理结构 1.3磁盘的存储结构 一个盘片又两个面 每个面都有一个磁头 磁头沿着盘面的半径移动 1.3.1…...

继MCP、A2A之上的“AG-UI”协议横空出世,人机交互迈入新纪元

第一章:AI交互的进化与挑战 1.1 从命令行到智能交互 人工智能的发展历程中,人机交互的方式经历了多次变革。早期的AI系统依赖命令行输入,用户需通过特定指令与机器沟通。随着自然语言处理技术的进步,语音助手和聊天机器人逐渐普…...

Java大厂面试:从Web框架到微服务技术的场景化提问与解析

Java大厂面试:从Web框架到微服务技术的场景化提问与解析 场景: 某知名互联网大厂的面试现场。面试官一脸严肃,对面坐着搞笑的程序员谢飞机。以下是他们的对话: 第一轮:Web框架基础与数据库操作 面试官:谢…...

最新缺陷检测模型:EPSC-YOLO(YOLOV9改进)

目录 引言:工业缺陷检测的挑战与突破 一、EPSC-YOLO整体架构解析 二、核心模块技术解析 1. EMA多尺度注意力模块:让模型"看得更全面" 2. PyConv金字塔卷积:多尺度特征提取利器 3. CISBA模块:通道-空间注意力再进化 4. Soft-NMS:更智能的重叠框处理 三、实…...

leetcode hot100刷题日记——2.字母异位词分组

涉及知识点:vector、哈希表 解答我的解答的时间复杂度分析我的解答的空间复杂度分析复习:排序算法的时间复杂度 和第一题需要的知识点相同,所以知识点复习可见 link1《leetcode hot100刷题日记——1.两数之和》 解题思路:是字母异位词的字符…...

elementUI 单选框存在多个互斥的选项中选择的场景

使用 el-radio-group 来使用单选框组&#xff0c;代码如下&#xff1a; <el-radio-group input"valueChangeHandler" v-model"featureForm.type"><el-radio name"feature" label"feature">业务对象</el-radio><…...

基于区块链技术的智能汽车诊断与性能分析

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 钝感力的“钝”&#xff0c;不是木讷、迟钝&#xff0c;而是直面困境的韧劲和耐力&#xff0c;是面对外界…...

基于区块链技术的供应链溯源系统:重塑信任与透明度

在当今全球化的商业环境中&#xff0c;供应链的复杂性不断增加&#xff0c;产品从原材料采购到最终交付消费者手中的过程涉及多个环节和众多参与者。然而&#xff0c;传统供应链管理面临着诸多挑战&#xff0c;如信息不透明、数据易篡改、追溯困难等&#xff0c;这些挑战不仅影…...

基于OpenCV的实时文档扫描与矫正技术

文章目录 引言一、系统概述二、核心代码解析1. 导入必要库2. 辅助函数定义3. 坐标点排序函数4. 透视变换函数5. 主程序流程 三、完整代码四、结语 引言 在日常工作和学习中&#xff0c;我们经常需要将纸质文档数字化。手动拍摄文档照片常常会出现角度倾斜、透视变形等问题&…...

基于STM32F103与Marvell88W8686的WIFI无线监控视频传输系统研发(论文)

基于STM32F103与Marvell88W8686的WIFI无线监控视频传输系统研发 中文摘要 在当今社会信息化进程不断加速的时代背景下&#xff0c;众多领域对于监控系统的需求日益增长&#xff0c;像车内安全监控、电梯运行监控等场景都离不开监控系统的支持。过去&#xff0c;不少领域普遍采用…...

华为云Astro中各种变量与参数的区别与用法

目录 🧠 华为云 Astro 各类变量与参数详解 🧩 一、变量与参数的核心作用是什么? 🖼️ 二、整体分类与结构图 📘 三、逐一详细解析 + 类比说明 + 使用建议 🔹 1. 输入参数(Input Parameter) 🔹 2. 输出参数(Output Parameter) 🔹 3. 变量(本地变量)…...

数字人技术的核心:AI与动作捕捉的双引擎驱动(210)

**摘要&#xff1a;**数字人技术从静态建模迈向动态交互&#xff0c;AI与动作捕捉技术的深度融合推动其智能化发展。尽管面临表情僵硬、动作脱节、交互机械等技术瓶颈&#xff0c;但通过多模态融合技术、轻量化动捕方案等创新&#xff0c;数字人正逐步实现自然交互与情感表达。…...

华为云Astro轻应用创建业务对象(BO)的概念梳理

目录 一、业务对象(BO)是什么?——【详细概念解释】 二、形象理解业务对象(BO) 🍱 类比方式: 📦 举个具体例子:以做一个“智能烟雾报警系统”应用 三、为什么使用BO很重要? 四、小结: 一、业务对象(BO)是什么?——【详细概念解释】 在华为云Astro轻应用…...

MySQL开发规范

目录 一、建表规约 二、索引规约 三、SQL语句 四、 ORM映射 一、建表规约 强制&#xff1a; 1、表达是与否概念的字段&#xff0c;必须使用is_xxx的方式命名&#xff08;PoJo中不加is前缀&#xff09;&#xff0c;数据类型是unsigned tinyint&#xff08;1表示是&#xf…...

K8s入门教程(一)

Kubernetes(K8s)入门教程:从零开始掌握容器编排 目录 Kubernetes(K8s)入门教程:从零开始掌握容器编排 1. Kubernetes 简介 1.1 什么是 Kubernetes? 1.2 核心功能 2. 环境搭建与 Minikube 安装 2.1 安装 Minikube 安装步骤(以 macOS 为例): 安装 kubectl(Kub…...

k8s备份namespace

在 Kubernetes 中备份 Namespace 有多种方法&#xff0c;以下是几种常见的备份方式&#xff1a; 1.使用 kubectl 命令备份 通过 kubectl 命令可以导出指定 Namespace 中的资源&#xff0c;生成 YAML 文件进行备份。 备份所有资源&#xff1a; kubectl -n <namespace> ge…...

前端动画库 Anime.js 的V4 版本,兼容 Vue、React

前端动画库 Anime.js 更新了 V4 版本&#xff0c;并对其官网进行了全面更新&#xff0c;增加了许多令人惊艳的效果&#xff0c;尤其是时间轴动画效果&#xff0c;让开发者可以更精确地控制动画节奏。 这一版本的发布不仅带来了全新的模块化 API 和显著的性能提升&#xff0c;还…...

OpenHarmony外设驱动使用 (四),Face_auth

OpenHarmony外设驱动使用 &#xff08;四&#xff09; Face_auth 概述 功能简介 人脸识别功能是端侧设备不可或缺的一部分&#xff0c;为设备提供一种用户认证能力&#xff0c;可应用于设备解锁、支付、应用登录等身份认证场景。它是基于人的脸部特征信息进行身份识别的一种…...

【Java ee初阶】jvm(1)

一、JVM Java虚拟机 面试中相关的问题有三块&#xff1a; 1.JVM内存区域划分 2.JVM的类加载机制 3.JVM的垃圾回收机制 JDK、JRE 和 JVM 的关系 JDK&#xff08;Java Development Kit&#xff09;是 Java 开发工具包&#xff0c;包含了编写、编译和调试 Java 程序所需的所…...

【Java ee初阶】jvm(2)

类加载机制&#xff1a; JVM从最开始的读取.class文件&#xff0c;到最终构造完成 类 对象的整个过程&#xff0c;也就是把 类 从硬盘 加载到内存中的机制。 Java的类加载机制主要分为五个步骤&#xff1a;加载、验证、准备、解析和初始化。 步骤一 加载&#xff08;Loading…...

Django 项目创建全攻略

目录 一、环境准备​ 1. 安装 Python​ 2. 安装虚拟环境&#xff08;可选但推荐&#xff09;​ 3. 安装 Django​ 二、创建 Django 项目​ 1. 使用命令创建项目​ 2. 运行开发服务器​ 三、创建 Django 应用​ 1. 创建应用​ 2. 注册应用​ 四、配置项目​ 1. 数据…...

windows11 安装好后右键没有 git bash 命令

win键 R 键&#xff0c;输出 regedit&#xff0c;打开注册表 找到 \HKEY_CLASSES_ROOT\Directory\Background\shell 新建项 git-bash 然后在 git-bash 下在新建项 Command&#xff0c;默认值设为 "C:\Program Files\Git\git-bash.exe" --cd"%v." 在 …...

Java八股文——Java基础篇

目录 1、你是怎样理解OOP面向对象2、重载和重写的区别3、接口与抽象类的区别4、深拷贝与浅拷贝的理解5、sleep和wait区别主要区别 6、什么是自动拆装箱&#xff0c;int和Integer有什么区别自动拆装箱int和Integer的区别Integer缓存机制 7、和equals区别String特殊情况 8、Strin…...

蓝桥杯19682 完全背包

问题描述 有 N 件物品和一个体积为 M 的背包。第 i 个物品的体积为 vi​&#xff0c;价值为 wi​。每件物品可以使用无限次。 请问可以通过什么样的方式选择物品&#xff0c;使得物品总体积不超过 M 的情况下总价值最大&#xff0c;输出这个最大价值即可。 输入格式 第一行…...

2025年- H27-Lc135- 239.滑动窗口最大值(自定义双端队列)---java版

1.题目描述 2.思路 &#xff08;1&#xff09;双端队列可以移除最左边的元素&#xff0c;也可以移除最右边的元素&#xff08;两端移除&#xff09; &#xff08;2&#xff09;在最右边插入元素&#xff08;右边加入&#xff09; &#xff08;3&#xff09;队列单调性&#xf…...

EKS 工作节点的集群网络架构

AWS EKS&#xff08;弹性 Kubernetes 服务&#xff09;是亚马逊提供的托管 Kubernetes 服务&#xff0c;一旦配置完成&#xff0c;即可像变魔术一样运行。但这通常是 EKS 的默认设置。如果您打算根据组织的设计、合规性标准和隐私要求进行自定义&#xff0c;该怎么办&#xff1…...

【技海登峰】Kafka漫谈系列(十一)SpringBoot整合Kafka之消费者Consumer

【技海登峰】Kafka漫谈系列(十一)SpringBoot整合Kafka之消费者Consumer spring-kafka官方文档: https://docs.spring.io/spring-kafka/docs/2.8.10/reference/pdf/spring-kafka-reference.pdf KafkaTemplate API: https://docs.spring.io/spring-kafka/api/org/springframe…...

Python字符串格式化(一):三种经典格式化方法

文章目录 一、% operator&#xff1a;C语言风格的初代格式化方案&#xff08;Python 2.0引入&#xff09;1. 语法核心&#xff1a;占位符与类型码2. 进阶用法&#xff1a;格式修饰符3. 致命缺陷&#xff1a;类型严格匹配的陷阱4. 适用场景&#xff1a;旧代码维护的兼容性选择 二…...

浅谈无服务器WebSocket的优势

实际上&#xff0c;一个实用的解决方案是将构建业务关键型实时平台的复杂性卸载到专门的云服务中。 完全托管的无服务器 WebSocket 解决方案为事件驱动的消息传递提供了基础结构;它使底层基础设施成为一种商品。客户端使用提供程序服务发送/接收低延迟消息&#xff0c;并专注于…...

10.7 LangChain v0.3架构大升级:模块化设计+多阶段混合检索,开发效率飙升3倍!

LangChain v0.3 技术生态与未来发展 关键词:LangChain Chains, Agents 架构, Retrieval Strategy, LangGraph, 模块化设计 3. LangChain 项目:Chains, Agents, Retrieval Strategy LangChain v0.3 通过 Chains-Agents-Retrieval 三位一体的技术栈,构建起完整的大模型应用开…...

GLPK(GNU线性规划工具包)中建模语言MathProg的使用

GNU MathProg是一种用于描述线性数学规划模型的建模语言。用GNU MathProg语言编写的模型描述由一组语句和数据块组成。 在MathProg中&#xff0c;模型以集合、参数、变量、约束和目标(sets, parameters, variables, constraints, objectives称为模型对象)的形式进行描述。 在Ma…...

系统思考:IT企业项目困境分析

最近遇到一家快速发展的IT技术公司&#xff0c;遭遇了项目进度滞后、团队沟通不畅和资源分配不合理等一系列挑战。虽然他们拥有一支技术强大的团队&#xff0c;但在项目管理和团队协作上却显得力不从心。结果&#xff0c;多个项目超预算、交期延迟&#xff0c;客户满意度直线下…...

计算机网络 - 2.基础协议

1.TCP协议 1.TCP(Transmission Control Protocol):传输控制协议2.TCP协议是一种面向连接的、可靠的、 基于字节流的传输层通信协议 1.面向连接:两个使用TCP协议的应用(通常一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接2.可靠的 1.数据传输之前都要建立…...

go语法大赏

前些日子单机房稳定性下降&#xff0c;找了好一会才找到真正的原因。这里面涉及到不少go语法细节&#xff0c;正好大家一起看一下。 一、仿真代码 这是仿真之后的代码 package mainimport ("fmt""go.uber.org/atomic""time" )type StopSignal…...

运行vscode编辑器源码

距离上次二次开发vscode已经是三年前的事了&#xff0c;当时是1.60.0版本&#xff0c;目前vscode已升级到了1.99.2版本&#xff0c;里面改动很大&#xff0c;最近下载下来了新版源码跑起来看看 准备node、python 源码里面node版本做了限制 2025-01-27 09:53:00.450 [info] Fo…...

ShenNiusModularity项目源码学习(26:ShenNius.Admin.Mvc项目分析-11)

本文学习并分析ShenNiusModularity项目中商城系统模块的小程序用户页面、用户收货地址页面。 1、小程序用户页面 小程序用户页面用于检索、浏览使用商城系统的用户数据&#xff08;保存在shop_appuser表内&#xff0c;系统用户保存在sys_user表内&#xff09;&#xff0c;该页…...

C#中的成员常量:编译时的静态魔法

在C#编程中&#xff0c;常量(const)是一个强大而特殊的语言特性&#xff0c;特别是当它们作为类的成员时。本文将深入探讨成员常量的特性、使用场景以及与静态量的区别。 成员常量的基本特性 成员常量是声明在类内部的常量&#xff0c;具有以下核心特点&#xff1a; 声明位置…...

C# 深入理解类(成员常量)

成员常量 成员常量类似前一章所述的局部常量&#xff0c;只是它们被声明在类声明中而不是方法内&#xff0c;如下面的 示例&#xff1a; 与局部常量类似&#xff0c;用于初始化成员肯量的值在编译时必须是可计算的&#xff0c;而且通常是一个预定 义简单类型或由它们组成的表达…...

服务端HttpServletRequest、HttpServletResponse、HttpSession

一、概述 在JavaWeb 开发中&#xff0c;获取客户端传递的参数至关重要。http请求是客户端向服务端发起数据传输协议&#xff0c;主要包含包含请求行、请求头、空行和请求体四个部分&#xff0c;在这四部分中分别携带客户端传递到服务端的数据。常见的http请求方式有get、post、…...

有哪些GIF图片转换的开源工具

以下是关于GIF图片转换的开源工具的详细总结,涵盖功能特点、适用场景及用户评价: 1. FFmpeg 功能特点: 作为开源命令行工具,FFmpeg支持视频转GIF、调整帧率、分辨率、截取片段等操作,可通过脚本批量处理。适用场景: 适合开发者或技术用户进行高效批处理,常用于服务器端自…...

Vue.js教学第五章:计算属性与侦听器详解

Vue.js 之计算属性与侦听器详解 一、计算属性 (一)概念 计算属性(Computed Properties)是 Vue.js 中的一个核心概念。它允许我们基于一个或多个数据属性来定义一个新的属性,该属性的值会根据其依赖的数据属性的变化而自动更新。这就好像是一个 “智能” 属性,它的值不是…...

第三章:UI 系统架构拆解与动态界面管理实录

还记得我们第二章刚跑通主场景&#xff0c;那时候是不是觉得“终于见到界面了”&#xff1f;但请等等&#xff0c;你看到的只是冰山一角&#xff0c;下面藏着的是 UIManager 的地狱之门。 本章我们将深入探讨&#xff1a; UI 界面如何加载&#xff08;Prefab 动态加载机制&…...

第四章:WebSocket 通信机制全解与客户端发包实录

如果你以为一个游戏启动后只靠本地逻辑运转&#xff0c;那你真是低估了网络通信的存在感。在互动组件项目里&#xff0c;WebSocket 才是真正的灵魂通道——UI 再好看&#xff0c;没包发出去也等于白搭。 本章我们深入讲解 WebSocket 在安卓前端项目中的应用&#xff0c;从封装结…...

pnpm项目内网迁移

pnpm项目内网迁移 文章目录 pnpm项目内网迁移0.前言1.基础环境安装2.构建pnpm离线安装包3.使用pnpm重新安装项目依赖4.项目迁移参考链接&#xff1a; 0.前言 要将一个依赖pnpm的项目迁移到内网离线环境下进行开发。 1.基础环境安装 要保证NodeJS版本一致&#xff0c;否则执行…...

C++23 放宽范围适配器以允许仅移动类型(P2494R2)

文章目录 引言背景与动机提案内容与实现细节提案 P2494R2实现细节编译器支持 对开发者的影响提高灵活性简化代码向后兼容性 示例代码总结 引言 C23 标准中引入了许多重要的改进&#xff0c;其中一项值得关注的特性是放宽范围适配器&#xff08;range adaptors&#xff09;以允…...

[ctfshow web入门] web119

信息收集 import requestsurl "http://51a7e437-2e66-4742-bbfe-e4cce44e360b.challenge.ctf.show/" for i in range(255):data {"code": f"{chr(i)}"}response requests.post(url, datadata)# print(len(response.text))# print(response.t…...

vector--OJ3

链接: [link](链接: link) class Solution { public: vector<string> str{ "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };void CB(string& …...

第6章 实战案例:基于 STEVAL-IDB011V1 板级 CI/CD 全流程

在前五章中,我们完成了嵌入式 CI/CD 从环境搭建、编译自动化、测试自动化、发布分发到监控回归的全技术链条。本章将以 STEVAL-IDB011V1(搭载 BlueNRG-355)评估板为实战载体,手把手演示如何在 GitLab CI(或 Jenkins)上,构建一条从 Git Push → 编译 → 测试 → 刷写 → …...

逆变器的输出外特性分析

VSG 并网状态下&#xff0c;考虑到弱电网下线路阻抗不能忽略&#xff0c;VSG 的功率传输模型可以表示为 VSG 的输出电压经过线路阻抗后串联至电网&#xff08;考虑滤波电感&#xff0c;且忽略滤波电容作用&#xff09;。设 U 为 VSG 输出电压的幅值&#xff0c;Ug为电网电压的幅…...

如何给PSCAD添加库文件

1、点击Options 2、选择蓝色的选项 3、查看Intel(R) Visual Fortran Compiler XE 的版本 4、打开原文件的Library 5、打开 6、点击这个文件的右键 7、然后选择第一项project setting 9、先把第8步中link里面原有的路径删除&#xff0c;再点browes[A1] &#xff0c;然后选择 [A…...