Docker —— 隔离的基本操作(1)

Docker —— 隔离的基本操作(1)

    • 1. 用户和权限隔离
    • 2. 进程隔离
    • 3. 文件系统隔离
    • 4. 资源隔离(Cgroups)
    • 5. 网络隔离
    • 6. 安全增强(SELinux/AppArmor)
    • 7. 容器技术(Docker/LXC)
    • 总结
  • dd
    • 基本语法
    • 常见用途示例
      • 1. 磁盘/分区备份(克隆)
      • 2. 创建空文件(预分配空间)
      • 3. 销毁磁盘数据(安全擦除)
      • 4. 复制 ISO 到 U 盘(制作启动盘)
      • 5. 修改文件部分内容
      • 6. 测试磁盘读写速度
    • 注意事项
    • 总结
  • mkfs
    • 基本语法
    • 常见文件系统类型
      • `mkfs` 命令参数详解
      • 常见文件系统专用参数示例
        • 1. ext4 文件系统
        • 2. FAT/VFAT 文件系统
        • 3. XFS 文件系统
    • 常用操作示例
      • 1. 格式化分区为 ext4(Linux 常用)
      • 2. 格式化 U 盘为 FAT32(兼容 Windows/macOS)
      • 3. 格式化并启用 XFS(适合大文件)
      • 4. 检查设备后再格式化
    • 高级选项
      • 1. 调整 inode 数量(适用于大量小文件)
      • 2. 启用文件系统加密(ext4)
      • 3. 指定块大小(block size)
    • 注意事项
    • 总结
  • df
  • `df` 命令详解
    • 基本语法
    • 常用选项
    • 常用示例
    • 输出字段说明
    • 实用技巧
  • mount
  • `mount` 命令详解
    • 基本语法
    • 常用选项
    • 常用挂载选项 (`-o`)
    • 常用示例
    • `/etc/fstab` 文件格式
    • 卸载文件系统
    • 常见问题解决

我们之前已经了解了Docker技术架构演进的一个基本路线,如果还没有了解的小伙伴可以点击这里:

https://blog.csdn.net/qq_67693066/article/details/147678726

今天我们在学习Docker之前,我们先来了解一下操作系统自带的隔离,主要是要大家意识到,隔离并不是Docker的独家,操作系统自己早就实现了隔离,并且这些命令对于之后的Docker学习也是有帮助的。

Linux 操作系统通过多种机制实现进程、用户、文件系统、网络等资源的隔离,确保安全性和稳定性。以下是 Linux 的主要隔离技术及其实现方式:


1. 用户和权限隔离

Linux 使用 用户(User)和组(Group) 进行权限控制,确保不同用户只能访问授权资源:

  • uid(用户ID)和 gid(组ID):每个进程和文件都有所属用户和组。
  • chmodchown:控制文件访问权限(rwx)。
  • sudosu:限制普通用户执行特权操作。
  • /etc/passwd/etc/shadow:存储用户信息,密码加密存储。

示例:

# 查看当前用户信息
id
# 修改文件权限
chmod 600 /path/to/file  # 仅所有者可读写
chown user:group /path/to/file

2. 进程隔离

Linux 内核通过 命名空间(Namespaces) 实现进程间的隔离:

命名空间类型作用
PID进程ID 独立(不同命名空间的进程看不到彼此)
Mount (mnt)文件系统挂载点隔离
Network (net)独立网络栈(IP、端口、路由表等)
UTS主机名和域名隔离
IPC进程间通信(消息队列、共享内存等)隔离
User用户和组ID 隔离(容器内 root ≠ 宿主机 root)
Cgroup (cgroup)控制资源使用(CPU、内存等)

示例:查看进程的命名空间

ls -l /proc/$$/ns  # 查看当前进程的命名空间

3. 文件系统隔离

  • chroot:修改进程的根目录,限制其访问范围(早期容器技术)。
  • OverlayFS:联合文件系统(Docker 使用),实现分层存储。
  • mount --bind:挂载特定目录,实现文件访问控制。

示例:使用 chroot 创建隔离环境

# 创建一个简单的隔离环境
mkdir -p /jail/{bin,lib64}
cp /bin/bash /jail/bin/
cp /lib64/{ld-linux-x86-64.so.2,libc.so.6} /jail/lib64/
chroot /jail /bin/bash  # 进入隔离环境

4. 资源隔离(Cgroups)

Control Groups (cgroups) 限制进程的资源使用:

  • CPU:分配 CPU 时间片。
  • Memory:限制内存使用。
  • I/O:控制磁盘读写带宽。
  • Network:限制网络带宽。

示例:使用 cgroups v2 限制进程内存

# 创建 cgroup
mkdir /sys/fs/cgroup/memory/mycgroup
echo 100000000 > /sys/fs/cgroup/memory/mycgroup/memory.limit_in_bytes
# 将进程加入 cgroup
echo $$ > /sys/fs/cgroup/memory/mycgroup/cgroup.procs

5. 网络隔离

  • Network Namespace:每个容器/进程有独立的网络栈。
  • iptables/nftables:防火墙规则隔离流量。
  • veth 虚拟设备:连接不同网络命名空间。
  • bridge:虚拟交换机管理容器网络。

示例:创建网络命名空间

ip netns add mynetns  # 创建网络命名空间
ip netns exec mynetns ip a  # 在命名空间内执行命令

6. 安全增强(SELinux/AppArmor)

  • SELinux(Security-Enhanced Linux):强制访问控制(MAC),限制进程权限。
  • AppArmor:基于配置文件限制进程能力。

示例:查看 SELinux 状态

sestatus

7. 容器技术(Docker/LXC)

容器是上述隔离技术的组合:

  • Docker:使用 Namespaces + Cgroups + OverlayFS 实现轻量级虚拟化。
  • LXC:Linux 原生容器,直接调用内核功能。

示例:运行一个 Docker 容器

docker run -it --rm alpine sh

总结

隔离类型技术作用
用户隔离uid/gid, sudo限制用户权限
进程隔离Namespaces进程间资源隔离
文件系统隔离chroot, OverlayFS限制文件访问
资源隔离Cgroups限制 CPU、内存等
网络隔离Network Namespace, iptables独立网络环境
安全增强SELinux, AppArmor防止提权攻击
容器Docker, LXC综合隔离

我们今天主要来看进程隔离和文件隔离,但是在这之前,我们先了解几个命令:

dd

dd 是 Linux/Unix 系统中一个强大的 磁盘和文件操作工具,主要用于 数据复制、转换和备份。它可以直接访问设备文件,适用于磁盘克隆、创建镜像文件、数据擦除等场景。


基本语法

dd if=输入文件 of=输出文件 [选项]
  • if(input file):输入源(文件或设备,如 /dev/sda
  • of(output file):输出目标(文件或设备)
  • 其他常用选项
    • bs:块大小(默认 512B,建议设为 1M4K 提高效率)
    • count:复制的块数
    • skip:跳过输入文件开头的块
    • seek:跳过输出文件开头的块
    • status=progress:显示进度(GNU dd 支持)

常见用途示例

1. 磁盘/分区备份(克隆)

# 备份整个磁盘到镜像文件
sudo dd if=/dev/sda of=/backup/sda.img bs=4M status=progress# 恢复镜像到磁盘
sudo dd if=/backup/sda.img of=/dev/sda bs=4M status=progress
  • 适用场景:全盘备份、系统迁移。

2. 创建空文件(预分配空间)

# 创建一个 1GB 的空文件
dd if=/dev/zero of=testfile bs=1M count=1024
  • /dev/zero:提供空字符流。

我们来试试这个,这个比较方便:
在这里插入图片描述
我们打开testfile,写一行hello world:
在这里插入图片描述
然后我们可以将所有的小写字母转换成大写:

dd if=testfile of=testfile_2 conv=ucase

在这里插入图片描述

3. 销毁磁盘数据(安全擦除)

# 用零填充整个磁盘(不可恢复)
sudo dd if=/dev/zero of=/dev/sdb bs=4M status=progress# 随机数据填充(更安全)
sudo dd if=/dev/urandom of=/dev/sdb bs=4M status=progress
  • 注意:操作不可逆,务必确认目标设备!

4. 复制 ISO 到 U 盘(制作启动盘)

sudo dd if=ubuntu.iso of=/dev/sdb bs=4M status=progress conv=fsync
  • /dev/sdb 是 U 盘设备(用 lsblk 确认)。
  • conv=fsync:确保数据完全写入。

5. 修改文件部分内容

# 替换文件开头 1KB 为 0
dd if=/dev/zero of=file.bin bs=1K count=1 conv=notrunc
  • notrunc:不截断原文件,仅覆盖指定部分。

6. 测试磁盘读写速度

# 写入速度测试
dd if=/dev/zero of=./testfile bs=1G count=1 oflag=direct# 读取速度测试
dd if=./testfile of=/dev/null bs=1G count=1 iflag=direct
  • oflag=direct/iflag=direct:绕过缓存,测真实速度。

注意事项

  1. 谨慎操作

    • dd 直接操作设备,输入错误可能导致数据丢失!
    • 务必确认 ifof 参数(如误将 of=/dev/sda 写成 if=/dev/sda 会覆盖系统盘)。
  2. 进度查看

    • 较新版本的 dd 支持 status=progress
    • 旧版本可通过发送 USR1 信号查看进度:
      kill -USR1 $(pgrep ^dd)  # 另开终端执行
      
  3. 替代工具

    • pv:显示进度条(需安装):
      pv /dev/sda > sda.img
      
    • rsync:更安全的文件同步。

总结

用途命令示例
磁盘备份dd if=/dev/sda of=/backup/sda.img bs=4M status=progress
制作启动盘dd if=ubuntu.iso of=/dev/sdb bs=4M conv=fsync
安全擦除磁盘dd if=/dev/urandom of=/dev/sdb bs=4M status=progress
创建大文件dd if=/dev/zero of=largefile bs=1M count=1024
测试磁盘速度dd if=/dev/zero of=./testfile bs=1G count=1 oflag=direct

dd 的核心功能就是“从输入源(if)读取原始数据,原封不动地写入输出目标(of)”,像一个二进制搬运工。

mkfs

mkfs(Make Filesystem)是 Linux 中用于 创建文件系统 的命令,相当于对磁盘或分区进行“格式化”。它会在目标设备(如分区、磁盘、镜像文件)上写入文件系统的元数据,使其能够被操作系统识别和使用。


基本语法

mkfs [选项] 设备或文件

或通过指定文件系统类型:

mkfs.文件系统类型 [选项] 设备或文件

例如:

mkfs.ext4 /dev/sdb1  # 将 /dev/sdb1 格式化为 ext4
mkfs.vfat /dev/sdc1  # 格式化为 FAT32

常见文件系统类型

文件系统命令适用场景
ext4mkfs.ext4Linux 默认文件系统(推荐)
ext3mkfs.ext3旧版 Linux 兼容
ext2mkfs.ext2极简需求(无日志功能)
XFSmkfs.xfs大文件、高性能(企业级)
Btrfsmkfs.btrfs支持快照、压缩(现代文件系统)
FAT32mkfs.vfatU盘、跨平台(Windows/macOS/Linux)
NTFSmkfs.ntfsWindows 专用(需 ntfs-3g 包)

mkfs 命令参数详解

参数说明示例
-t fstype指定要创建的文件系统类型(如 ext3, ext4, xfs, vfat 等)mkfs -t ext4 /dev/sdb1
filesys目标设备文件名(如 /dev/sdb1)或镜像文件mkfs.ext4 /dev/sdb1
blocks指定文件系统的磁盘块数(一般自动计算,手动指定较少使用)mkfs.ext4 /dev/sdb1 204800(20万块)
-V详细模式(显示操作过程)mkfs -V -t ext4 /dev/sdb1
fs-options传递给具体文件系统的参数(需在 filesys 前指定)mkfs.ext4 -b 4096 /dev/sdb1

常见文件系统专用参数示例

1. ext4 文件系统
参数说明示例
-b block-size指定块大小(如 1024, 4096mkfs.ext4 -b 4096 /dev/sdb1
-L volume-label设置卷标mkfs.ext4 -L "mydata" /dev/sdb1
-m reserved-blocks-percent保留空间百分比(默认5%)mkfs.ext4 -m 1 /dev/sdb1(设为1%)
-O feature启用特性(如 encrypt, quotamkfs.ext4 -O encrypt /dev/sdb1
2. FAT/VFAT 文件系统
参数说明示例
-F fat-size指定 FAT 类型(12, 16, 32mkfs.vfat -F 32 /dev/sdc1
-I强制格式化整个设备(无分区表)mkfs.vfat -I /dev/sdd
3. XFS 文件系统
参数说明示例
-f强制覆盖现有文件系统mkfs.xfs -f /dev/sdb2
-d agcount=N设置分配组数量(性能调优)mkfs.xfs -d agcount=4 /dev/sdb2

常用操作示例

1. 格式化分区为 ext4(Linux 常用)

sudo mkfs.ext4 /dev/sdb1
  • 选项
    • -L:设置卷标(如 -L "mydata"
    • -m 0:减少保留空间(默认 5%,-m 0 设为 0% 以最大化可用空间)

我们将刚刚的testfile格式化为ext4格式:
在这里插入图片描述

2. 格式化 U 盘为 FAT32(兼容 Windows/macOS)

sudo mkfs.vfat -F 32 /dev/sdc1
  • -F 32:强制 FAT32 格式(默认可能格式化为 FAT16)

3. 格式化并启用 XFS(适合大文件)

sudo mkfs.xfs -f /dev/sdb2
  • -f:强制覆盖现有文件系统

4. 检查设备后再格式化

lsblk                     # 确认设备路径(如 /dev/sdb1)
sudo blkid /dev/sdb1      # 查看当前文件系统类型
sudo umount /dev/sdb1     # 先卸载(如果已挂载)
sudo mkfs.ext4 /dev/sdb1  # 再格式化

高级选项

1. 调整 inode 数量(适用于大量小文件)

sudo mkfs.ext4 -N 1000000 /dev/sdb1  # 分配 100 万个 inode

2. 启用文件系统加密(ext4)

sudo mkfs.ext4 -O encrypt /dev/sdb1

3. 指定块大小(block size)

sudo mkfs.ext4 -b 4096 /dev/sdb1  # 4KB 块(适合 SSD)

注意事项

  1. 数据会丢失!
    格式化会清空目标设备的所有数据,操作前务必确认设备路径。

  2. 必须先卸载分区

    sudo umount /dev/sdb1  # 卸载
    sudo mkfs.ext4 /dev/sdb1
    
  3. SSD 优化
    对 SSD 建议使用 ext4f2fs,并启用 TRIM:

    sudo mkfs.ext4 -E discard /dev/nvme0n1p1
    
  4. 修复误格式化
    如果误格式化,可尝试用 testdiskphotorec 恢复数据(但不保证成功)。


总结

操作命令示例
格式化 ext4sudo mkfs.ext4 /dev/sdb1
格式化 FAT32sudo mkfs.vfat -F 32 /dev/sdc1
强制覆盖现有文件系统sudo mkfs.xfs -f /dev/sdb2
设置卷标sudo mkfs.ext4 -L "mydata" /dev/sdb1
优化 SSDsudo mkfs.ext4 -E discard /dev/nvme0n1p1

df

df 命令详解

df (Disk Filesystem) 命令用于显示 Linux 系统中文件系统的磁盘空间使用情况。它可以显示所有已挂载文件系统的可用空间和已用空间。

基本语法

df [选项] [文件或目录]

常用选项

选项说明
-a显示所有文件系统,包括虚拟文件系统
-h以人类可读格式显示 (KB, MB, GB)
-H类似 -h,但以 1000 为换算单位而非 1024
-i显示 inode 使用情况而非块使用情况
-k以 KB 为单位显示
-l只显示本地文件系统
-P使用 POSIX 输出格式
-T显示文件系统类型
-t <类型>只显示指定类型的文件系统
-x <类型>排除指定类型的文件系统

常用示例

  1. 显示所有文件系统使用情况

    df
    
  2. 以人类可读格式显示

    df -h
    

    输出示例:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda1        20G  5.2G   14G  28% /
    tmpfs           1.9G     0  1.9G   0% /dev/shm
    
  3. 显示指定文件系统的使用情况

    df -h /dev/sda1
    
  4. 显示文件系统类型

    df -T
    
  5. 显示 inode 使用情况

    df -i
    
  6. 只显示 ext4 文件系统

    df -t ext4
    
  7. 排除特定文件系统类型

    df -x tmpfs
    

输出字段说明

字段说明
Filesystem文件系统对应的设备文件
Size文件系统总大小
Used已用空间
Avail可用空间
Use%使用百分比
Mounted on挂载点

实用技巧

  1. 快速查看磁盘使用情况

    df -h --output=source,size,used,avail,pcent,target
    
  2. 按使用百分比排序

    df -h | sort -k5 -n -r
    
  3. 监控特定挂载点

    watch -n 1 'df -h /home'
    
  4. 结合 grep 过滤结果

    df -h | grep -v tmpfs
    

这个命令比较简单,我们举一个简单的例子:
在这里插入图片描述

df 命令是 Linux 系统管理员监控磁盘使用情况的重要工具,经常与 du 命令配合使用来分析和解决磁盘空间问题。

mount

mount 命令详解

mount 命令用于挂载文件系统到 Linux 目录树中的指定挂载点。它是 Linux 系统管理中最基础且重要的命令之一。

基本语法

mount [-选项] [设备] [挂载点]
mount [-选项] [-t 文件系统类型] [-o 挂载选项] 设备 挂载点

常用选项

选项说明
-a挂载 /etc/fstab 中所有文件系统
-t指定文件系统类型 (ext4, ntfs, vfat 等)
-o指定挂载选项 (多个选项用逗号分隔)
-l显示已挂载设备及其标签
-v显示详细执行过程
-r以只读模式挂载
-w以读写模式挂载 (默认)

常用挂载选项 (-o)

选项说明
ro/rw只读/读写挂载
remount重新挂载已挂载的文件系统
noexec不允许执行二进制文件
nosuid忽略 suid/sgid 位
nodev不解释设备文件
sync/async同步/异步 I/O 操作
defaults使用默认选项 (rw, suid, dev, exec, auto, nouser, async)
user允许普通用户挂载
nouser只允许 root 挂载 (默认)
loop挂载镜像文件

常用示例

  1. 显示当前已挂载的文件系统

    mount
    

    mount -l
    
  2. 挂载设备到目录

    mount /dev/sdb1 /mnt/data
    

我们来试试:
在这里插入图片描述

  1. 指定文件系统类型挂载

    mount -t ext4 /dev/sdb1 /mnt/data
    
  2. 挂载 ISO 镜像文件

    mount -o loop ubuntu.iso /mnt/iso
    
  3. 挂载 USB 设备 (FAT32)

    mount -t vfat /dev/sdc1 /mnt/usb
    
  4. 挂载 Windows 共享 (CIFS/SMB)

    mount -t cifs //server/share /mnt/share -o username=user,password=pass
    
  5. 重新挂载为只读

    mount -o remount,ro /dev/sdb1
    
  6. 挂载所有 /etc/fstab 中的文件系统

    mount -a
    
  7. 挂载带特殊选项

    mount -o noexec,nosuid /dev/sdb1 /mnt/data
    

/etc/fstab 文件格式

/etc/fstab 文件用于定义自动挂载的文件系统,格式如下:

设备/UUID 挂载点 文件系统类型 挂载选项 dump fsck

示例:

/dev/sdb1 /mnt/data ext4 defaults 0 2
UUID=1234-5678 /mnt/usb vfat defaults 0 0

卸载文件系统

使用 umount 命令卸载:

umount /mnt/data

umount /dev/sdb1

常见问题解决

  1. 设备忙无法卸载

    fuser -vm /mnt/data  # 查看哪个进程在使用
    fuser -km /mnt/data  # 终止使用该挂载点的进程
    umount /mnt/data
    
  2. 挂载 NTFS 分区

    mount -t ntfs-3g /dev/sdb1 /mnt/ntfs
    
  3. 挂载时修复错误

    fsck /dev/sdb1
    mount /dev/sdb1 /mnt/data
    

mount 命令是 Linux 系统管理中不可或缺的工具,合理使用可以灵活管理各种存储设备和网络共享。

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

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

相关文章

PWN基础-ROP技术-ret2syscall突破NX保护

ROP&#xff08;Return-Oriented Programming&#xff0c;返回导向编程&#xff09;是一种利用程序已有代码片段来执行任意指令的攻击技术&#xff0c;常用于绕过现代系统的安全机制&#xff0c;尤其是不可执行栈&#xff08;NX&#xff09;。 常规检查一下&#xff1a; 32 位…

关于 js:2. 对象与原型链

一、对象 对象是&#xff1a; 键值对集合 所有非原始类型&#xff08;number、string、boolean、null、undefined、symbol、bigint&#xff09;都是对象 支持动态增删属性 每个对象都继承自 Object.prototype&#xff0c;具备原型链结构 1. 对象的创建方式 字面量方式&a…

AtCoder 第404场初级竞赛 A~E题解

A Not Found 【题目链接】 原题链接:A - Not Found 【考点】 枚举,数组计数法 【题目大意】 找到在26个字母中,未输出的一个字母,如果有多个,输出其中一个即可。 【解析】 遍历字符串,使用数组的记录对应字母的出现次数,最后遍历数组为0的下标,输出对应的字母即…

检测内存条好坏有工具,推荐几款内存检测工具

检测内存条的好坏其实很重要&#xff0c;这直接就关系到计算机是不是能够稳定的运行&#xff0c;也有一部分人就会关注内存检测的工具。你应该如何来选择的&#xff0c;不如看一下以下的这几个。 MemTest86是一个比较受到大家喜欢的内存检测工具&#xff0c;会支持各种类型&…

01Introduction

文本主题 关于协作式多智能体强化学习的简介 文章目录 文本主题一、MARL主要框架集中式训练与执行 (CTE)集中式训练分布式执行&#xff08;CTDE&#xff09;分布式训练与执行&#xff08;DTE&#xff09; 二、Dec-POMDPjoint policy V and Q 一、MARL主要框架 MARL当前主流的…

小程序问题(记录版)

1、样式不生效 在h5上生效 但是 小程序上没反应 解决办法&#xff1a;解除组件样式隔离 1、isolated 表示启用样式隔离&#xff0c;在自定义组件内外&#xff0c;使用 class 指定的样式将不会相互影响&#xff08;一般情况下的默认值&#xff09; 2、apply-shared 表示页面 wxs…

排列组合算法:解锁数据世界的魔法钥匙

在 C 算法的奇幻世界里&#xff0c;排列和组合算法就像是两把神奇的魔法钥匙&#xff0c;能够帮我们解锁数据世界中各种复杂问题的大门。今天&#xff0c;作为 C 算法小白的我&#xff0c;就带大家一起走进排列和组合算法的奇妙天地。 排列算法&#xff1a;创造所有可能的顺序…

深入探讨 UDP 协议与多线程 HTTP 服务器

深入探讨 UDP 协议与多线程 HTTP 服务器 一、UDP 协议&#xff1a;高效但“不羁”的传输使者 UDP 协议以其独特的特性在网络传输中占据一席之地&#xff0c;适用于对实时性要求高、能容忍少量数据丢失的场景。 1. UDP 的特点解析 无连接&#xff1a;无需提前建立连接&…

引用第三方自定义组件——微信小程序学习笔记

1. 使用 npm 安装第三方包 1.1 下载安装Node.js 工具 下载地址&#xff1a;Node.js — Download Node.js 1.2 安装 npm 包 在项目空白处右键弹出菜单&#xff0c;选择“在外部终端窗口打开”&#xff0c;打开命令行工具&#xff0c;输入以下指令&#xff1a; 1> 初始化:…

数字化转型是往哪转?怎么转?

写在前面 当下数字化转型的风还在吹&#xff0c;企业数字化转型过程中以数字化项目满足业务化需求&#xff0c;已有相关数字化平台的话&#xff0c;就搞大平台、大系统&#xff0c;解决数据孤岛。政府数字化转型亦是如此&#xff0c;某些省市发了系统优化整合的文&#xff0c;旨…

嵌入式学习--江协51单片机day2

今天学的不多&#xff0c;内容为&#xff1a;静态、动态数码管的控制&#xff0c;模块化编程和lcd1602调试工具 数码管的控制 由于内部电路的设计&#xff0c;数码管每次只能显示一个位置的一个数字&#xff0c;动态的实现是基于不同位置的闪烁频率高。 P2_4,P2_3,P2_2控制位…

《数据结构:二叉搜索树(Binary Search Tree)》

文章目录 :red_circle:一、二叉搜索树的概念:red_circle:二、二叉搜索树的性能分析:red_circle:三、二叉搜索树的操作&#xff08;一&#xff09;插入&#xff08;二&#xff09;查找&#xff08;三&#xff09;删除 :red_circle:四、二叉搜索树的实现代码&#xff08;一&#…

【Linux相关】实时查看Nvidia-smi使用情况

【Linux相关】 实时查看Nvidia-smi使用情况 文章目录 实时查看Nvidia-smi使用情况 实时查看Nvidia-smi使用情况 在本地终端执行下述语句 watch -n 1 nvidia-smi每一秒都会更新&#xff0c;将 1 改为其他数字可以满足不同需求

Kotlin密封类优化Android状态管理

Kotlin 的密封类&#xff08;Sealed Class&#xff09;确实是 Android 开发中管理复杂 UI 状态的利器。它通过类型安全的层次结构&#xff0c;让状态管理代码更加清晰简洁。让我们从实际开发场景出发&#xff0c;深入探讨其应用&#xff1a; 一、密封类核心优势 受限的类继承…

JavaWeb:SpringBootWeb快速入门

介绍 Spring SpringBoot 入门程序 需求 步骤 修改端口 1.新建application.yml #设置端口 server:port: 8081入门程序-分析 为什么main方法能启动web应用-内嵌tomcat 为什么tomcat能定位HelloController程序 请求先到DisPatcherServlet&#xff0c;根据路径转发 小结 1.…

Unity学习笔记二

文章目录 3D数学公共计算结构体Mathf常用成员三角函数 向量Vector3基本成员点乘叉乘插值运算 四元数引出基本概念Quaternion结构体成员四元数运算 更多的Mono延迟函数协同程序多线程相关协程概念辨析协程本体协程调度器 Resources资源动态加载特殊文件夹Resources同步加载Resou…

为什么Transformer推理需要做KV缓存

一、我们先来回忆一下在transformer中KV在哪里出现过&#xff0c;都有什么作用&#xff1f; α的计算过程&#xff1a; 这里引入三个向量&#xff1a; 图中的q为Query&#xff0c;用来匹配key值 图中的k为key,用来被Query匹配 图中的Value&#xff0c;是用来被进行加权平均的 由…

【大模型面试】大模型(LLMs)高频面题全面整理(★2025年5月最新版★)

【大模型面试】大模型&#xff08;LLMs&#xff09;高频面题全面整理&#xff08;★2025年5月最新版★&#xff09; &#x1f31f; 嗨&#xff0c;你好&#xff0c;我是 青松 &#xff01; &#x1f308; 自小刺头深草里&#xff0c;而今渐觉出蓬蒿。 本笔记适合大模型初学者和…

JAVA:使用 iTextPDF 处理 PDF 的技术详解

1、简述 iTextPDF 是一个功能强大的 Java PDF 库,可以用来创建、修改和处理 PDF 文档。通过它,我们可以完成如生成 PDF、读取 PDF 内容、添加水印、合并 PDF 等多种操作。本篇博客将详细介绍 iTextPDF 的使用方法,并提供一些实践样例,帮助开发者快速上手。 样例代码: htt…

模态与非模态窗口及使用时的数据交互

模态窗口使用exec()方法显示&#xff0c;会阻塞父窗口&#xff0c;直到对话框关闭&#xff1b; 非模态对话框允许同时操作主窗口和设置窗口&#xff0c;使用show()。 模态和非模态的主要区别在于用户能否与父窗口交互&#xff0c;非模态更适合需要频繁切换的场景。非模态窗口需…