QA

news2024/12/22 23:46:45

1.
这是什么意思? label_viz[:,:,::-1]

这段代码看起来像是Python中处理图像的代码片段。让我来为您解释一下:

1. `label_viz`:这可能是一个二维数组(通常是NumPy数组),代表图像上的标签或类别信息的可视化表示。

2. `[:,:,::-1]`:这是一个数组切片的表达方式。让我逐步解释这个切片的含义:

   - 第一个冒号 `:`:表示选择数组的所有行。
   - 第二个冒号 `:`:表示选择数组的所有列。
   - `::-1`:这是一个步长为-1的切片,它会将选定的行和列倒序排列。在这个上下文中,通常用于颜色通道的倒转。

综合起来,`label_viz[:,:,::-1]` 的意思是,对 `label_viz` 数组进行切片操作,保留所有行和列,并将颜色通道进行颠倒,这通常用于在处理彩色图像时进行通道调整,以便正确地显示图像。

 2.
conda 删除环境命令

要使用conda删除环境,您可以使用以下命令:
 

conda env remove --name <environment_name>

在上面的命令中,将 `<environment_name>` 替换为您要删除的环境的名称。请注意,删除环境将永久删除该环境及其包含的所有包和文件,所以请谨慎操作。

另外,如果您希望同时删除环境的所有文件(包括存储的文件、缓存等),可以使用以下命令:

conda env remove --name <environment_name> --all

同样,请确保在删除环境之前做好备份和确认,以免丢失重要数据。

3.
 mim install mmengine 报错 KeyError: 'pkg_resources'

使用pip安装

pip install mmengine

依据:

安装 — mmengine 0.8.4 文档

4.
linux中安装 git

apt命令前添加sudo,以管理员权限运行该命令。在终端中输入以下命令:

sudo apt install git
5.  
jupyter notebook 生成新内核

运行以下命令:

python -m ipykernel install --user --name=myenv --display-name "My Environment"

其中 myenv 是您虚拟环境的名称,"My Environment" 是您想要为内核显示的名称。

6.
mim install mmcv 报错

依据:

安装 MMCV — mmcv 2.0.0 文档

根据系统类型、CUDA版本、PyTorch版本及MMCV选择相应安装命令。

python -c 'import torch;print(torch.__version__);print(torch.version.cuda)'
7. 
!wget https://zihao-openmmlab.obs.cn-east-3.myhuaweicloud.com/20220713-mmdetection/images/street_uk.jpeg -P data 是什么意思?

这个命令是使用 `wget` 工具从特定 URL 下载文件,并将其保存到指定目录中。

具体解释如下:

- `wget`: 是一个用于从网络下载文件的命令行工具。
- `https://zihao-openmmlab.obs.cn-east-3.myhuaweicloud.com/20220713-mmdetection/images/street_uk.jpeg`: 这是要下载的文件的 URL,即图片的地址。
- `-P data`: 这是指定下载文件保存路径的参数。`-P` 后面跟着要保存的目录的路径,这里是 `data` 目录。下载后的文件将保存在 `data` 目录中。

所以,这个命令的意思是从给定的 URL 下载一张名为 `street_uk.jpeg` 的图片,并将其保存在当前工作目录下的 `data` 子目录中。如果该目录不存在,`wget` 会自动创建它。

8.
result.pred_sem_seg.data.cpu()这是什么意思?

这段代码看起来像是在处理 PyTorch 中的结果对象。让我来为您解释一下:

1. `result`:这可能是一个包含模型预测结果的对象。通常在深度学习框架中,模型预测的结果会被存储在一个对象中,以便进一步处理和分析。

2. `result.pred_sem_seg`:这是从 `result` 对象中获取名为 `pred_sem_seg` 的属性或字段。这可能是一个包含语义分割预测结果的张量。

3. `.data`:在 PyTorch 中,通过 `.data` 属性可以访问张量的底层数据。这个属性通常用于获取张量的 NumPy 数组表示。

4. `.cpu()`:这是一个方法调用,它将张量从 GPU 转移到 CPU 上。这是因为在处理深度学习模型时,数据通常存储在 GPU 上以加快计算速度。`.cpu()` 方法用于将数据从 GPU 返回到 CPU。

综合起来,`result.pred_sem_seg.data.cpu()` 的意思是,从 `result` 对象中获取 `pred_sem_seg` 属性的底层数据,然后将这些数据从 GPU 移动到 CPU。通常情况下,这是为了将预测结果以 NumPy 数组的形式在 CPU 上进行进一步处理、可视化或保存。

9. 
git clone https://github.com/open-mmlab/mmcv.git && cd mmcv

这个命令是用于在命令行中从 GitHub 上克隆一个名为 `mmcv` 的代码库,并进入到该克隆的目录中。

具体来说:

- `git clone https://github.com/open-mmlab/mmcv.git`:这个部分使用 Git 工具来克隆名为 `mmcv` 的代码库。`https://github.com/open-mmlab/mmcv.git` 是该代码库的 URL。在执行这个命令后,Git 会将代码库的内容下载到您当前所在的目录中,并在本地创建一个 `mmcv` 的文件夹来存储代码。

- `&&`:这个符号用于在一个命令成功执行后立即执行下一个命令。

- `cd mmcv`:这个部分用于进入到刚刚克隆的 `mmcv` 代码库的目录中。`cd` 是进入目录的命令,`mmcv` 是目录的名称。

执行这个命令后,您将会在命令行中看到您的当前工作目录变为 `mmcv` 代码库的目录。您可以在这个目录下继续执行其他命令,例如构建、运行代码,或者修改代码库中的文件。

10.
docker build -t mmcv -f docker/release/Dockerfile .

这个命令是用于在 Docker 中构建一个名为 `mmcv` 的镜像,使用特定的 Dockerfile 进行构建。

具体来说:

- `docker build -t mmcv`:这个部分表示使用 Docker 构建一个镜像,并为该镜像指定一个名称为 `mmcv`。

- `-f docker/release/Dockerfile`:这个部分表示使用位于 `docker/release` 目录中的名为 `Dockerfile` 的文件作为构建镜像的配置文件。Dockerfile 是一种包含构建指令的文本文件,用于定义如何构建镜像。

- `.`:这个点表示构建的上下文路径,即 Docker 在构建过程中会将当前目录下的所有文件和文件夹添加到镜像中。

综合起来,这个命令会使用指定的 Dockerfile 构建一个名为 `mmcv` 的镜像,该镜像将会包含当前目录下的所有文件和文件夹。根据具体情况,这可能是为了构建一个包含 `mmcv` 库或相关项目的 Docker 镜像,以便在容器中运行或部署项目。

11.
docker build -t mmcv https://github.com/open-mmlab/mmcv.git#2.x:docker/release

这个命令是使用 Docker 构建一个名为 `mmcv` 的镜像,通过从 GitHub 上的 `open-mmlab/mmcv` 仓库的特定分支 `2.x` 中的 `docker/release` 目录获取构建配置。

具体来说:

- `docker build -t mmcv`:这个部分表示使用 Docker 构建一个名为 `mmcv` 的镜像。

- `https://github.com/open-mmlab/mmcv.git#2.x:docker/release`:这个部分表示从 GitHub 上的 `open-mmlab/mmcv` 仓库的 `2.x` 分支中的 `docker/release` 目录获取构建所需的配置。这是一个远程路径,Docker 会从这个路径中下载相关的文件来进行构建。

综合起来,这个命令会从指定的 GitHub 仓库分支的特定目录中获取构建配置,然后使用这些配置构建一个名为 `mmcv` 的 Docker 镜像。这通常用于从远程仓库中构建 Docker 镜像,以便在容器中运行或部署项目。

12.
docker image build -t mmcv -f docker/release/Dockerfile --build-arg MMCV=2.0.0rc1 .

这个命令是使用 Docker 构建一个名为 `mmcv` 的镜像,并传递了构建参数(build argument)。

具体来说:

- `docker image build -t mmcv`:这个部分表示使用 Docker 构建一个名为 `mmcv` 的镜像。

- `-f docker/release/Dockerfile`:这个部分表示使用位于 `docker/release` 目录中的名为 `Dockerfile` 的文件作为构建镜像的配置文件。

- `--build-arg MMCV=2.0.0rc1`:这个部分表示传递一个构建参数 `MMCV`,并将其设置为 `2.0.0rc1`。构建参数可以在 Dockerfile 中使用,用于在构建过程中进行条件判断或设置。

- `.`:这个点表示构建的上下文路径,即 Docker 在构建过程中会将当前目录下的所有文件和文件夹添加到镜像中。

综合起来,这个命令会使用指定的 Dockerfile 构建一个名为 `mmcv` 的镜像,同时传递了一个构建参数 `MMCV`,其值为 `2.0.0rc1`。这可以用于在构建过程中根据不同的参数进行定制化操作,例如在 Dockerfile 中根据构建参数来安装不同版本的软件包。

13.
docker build -t mmcv -f docker/release/Dockerfile \
        --build-arg PYTORCH=1.11.0 \
        --build-arg CUDA=11.3 \
        --build-arg CUDNN=8 \
        --build-arg MMCV=2.0.0rc1 .

这个命令是使用 Docker 构建一个名为 `mmcv` 的镜像,并传递了一系列构建参数(build arguments)来定制构建过程中使用的软件版本。

具体来说:

- `docker build -t mmcv`:这个部分表示使用 Docker 构建一个名为 `mmcv` 的镜像。

- `-f docker/release/Dockerfile`:这个部分表示使用位于 `docker/release` 目录中的名为 `Dockerfile` 的文件作为构建镜像的配置文件。

- `--build-arg PYTORCH=1.11.0`:这个部分表示传递构建参数 `PYTORCH`,并将其设置为 `1.11.0`。这个参数可能用于在构建过程中安装特定版本的 PyTorch。

- `--build-arg CUDA=11.3`:这个部分表示传递构建参数 `CUDA`,并将其设置为 `11.3`。这个参数可能用于在构建过程中指定使用的 CUDA 版本。

- `--build-arg CUDNN=8`:这个部分表示传递构建参数 `CUDNN`,并将其设置为 `8`。这个参数可能用于在构建过程中指定使用的 CuDNN 版本。

- `--build-arg MMCV=2.0.0rc1`:这个部分表示传递构建参数 `MMCV`,并将其设置为 `2.0.0rc1`。这个参数可能用于在构建过程中指定使用的 MMCV 版本。

- `.`:这个点表示构建的上下文路径,即 Docker 在构建过程中会将当前目录下的所有文件和文件夹添加到镜像中。

综合起来,这个命令会使用指定的 Dockerfile 构建一个名为 `mmcv` 的镜像,并根据传递的构建参数来定制镜像中使用的软件版本。这使得您可以根据需要定制化不同的构建配置,以满足特定的环境需求。

14.
!pip install -v -e .是什么意思?

这个命令是使用 `pip` 安装一个包,并以“可编辑”(editable)模式进行安装。这通常在开发过程中非常有用,因为它允许您在本地修改包的源代码,并立即看到更改的效果,而无需重新安装。

具体来说:

- `pip install`: 这是用于安装 Python 包的 `pip` 命令。

- `-v`: 这个选项表示启用详细模式(verbose mode),会显示更详细的安装过程和信息。

- `-e .`: 这个选项表示以“可编辑”模式安装当前目录中的包。也就是说,它会将当前目录中的包作为一个包的源代码安装,并将其链接到系统的 Python 包目录中,使您可以在本地修改源代码,而不需要重新安装包。

综合起来,`pip install -v -e .` 命令的意思是以详细模式安装当前目录中的包,并将其安装为“可编辑”模式,以便您可以随时修改源代码并在本地生效,而不需要重新安装包。这在开发过程中非常有用,因为它加快了迭代和测试代码的速度。

15.
import os
os.chdir('mmsegmentation')

使用 os 模块改变当前工作目录(current working directory)为 'mmsegmentation' 目录。

意味着在后续代码中执行文件操作、导入模块等时,会基于 'mmsegmentation' 目录进行。这在需要在特定目录下执行操作的情况下是很有用的。

16.
# 创建 checkpoint 文件夹,用于存放预训练模型权重文件
os.mkdir('checkpoint')
17.
import torch
print(torch.__version__)
print(torch.version.cuda)  查看torch版本和cuda版本

18.
conda list 查看当前环境下的包目录
19. 
MMCV 是一个面向计算机视觉的基础库,它提供了以下功能:
  • 图像和视频处理

  • 图像和标注结果可视化

  • 图像变换

  • 多种 CNN 网络结构

  • 高质量实现的常见 CUDA 算子

20.
MMEngine 是一个基于 PyTorch 实现的,用于训练深度学习模型的基础库,支持在 Linux、Windows、macOS 上运行。它具有如下三个特性:
  1. 通用且强大的执行器

    • 支持用少量代码训练不同的任务,例如仅使用 80 行代码就可以训练 ImageNet(原始 PyTorch 示例需要 400 行)。

    • 轻松兼容流行的算法库(如 TIMM、TorchVision 和 Detectron2)中的模型。

  2. 接口统一的开放架构

    • 使用统一的接口处理不同的算法任务,例如,实现一个方法并应用于所有的兼容性模型。

    • 上下游的对接更加统一便捷,在为上层算法库提供统一抽象的同时,支持多种后端设备。目前 MMEngine 支持 Nvidia CUDA、Mac MPS、AMD、MLU 等设备进行模型训练。

  3. 可定制的训练流程

    • 定义了“乐高”式的训练流程。

    • 提供了丰富的组件和策略。

    • 使用不同等级的 API 控制训练过程。

openmmlab-2 0-arch

 详细官网:介绍 — mmengine 0.8.4 文档

21.
设置Matplotlib中文字体
# # windows操作系统
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签 
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号
# Mac操作系统,参考 https://www.ngui.cc/51cto/show-727683.html
# 下载 simhei.ttf 字体文件
# !wget https://zihao-openmmlab.obs.cn-east-3.myhuaweicloud.com/20220716-mmclassification/dataset/SimHei.ttf
# Linux操作系统,例如 云GPU平台:https://featurize.cn/?s=d7ce99f842414bfcaea5662a97581bd1
# 如果遇到 SSL 相关报错,重新运行本代码块即可
!wget https://zihao-openmmlab.obs.cn-east-3.myhuaweicloud.com/20220716-mmclassification/dataset/SimHei.ttf -O /environment/miniconda3/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/SimHei.ttf
!rm -rf /home/featurize/.cache/matplotlib

import matplotlib 
import matplotlib.pyplot as plt
matplotlib.rc("font",family='SimHei') # 中文字体

将上面的 -O 中的目录改为自己对应的虚拟环境下一般在anaconda3中

plt.plot([1,2,3], [100,500,300])
plt.title('matplotlib中文字体测试', fontsize=25)
plt.xlabel('X轴', fontsize=15)
plt.ylabel('Y轴', fontsize=15)
plt.show()

 22.

docker run --gpus all --shm-size=8g -it mmengine是什么意思?

这个命令是在 Docker 容器中运行一个名为 `mmengine` 的镜像,并设置了一些容器运行时的选项。

具体来说:

- `docker run`: 这是用于在 Docker 中运行容器的命令。

- `--gpus all`: 这个选项表示将所有可用的 GPU 分配给容器。这适用于使用 GPU 加速的任务,让容器可以利用 GPU 资源进行计算。

- `--shm-size=8g`: 这个选项表示设置容器的共享内存大小为 8GB。共享内存是容器中用于进程间通信的一种机制,该选项允许您为容器中的进程分配一定的共享内存空间。

- `-it`: 这些选项用于分配一个交互式的终端(terminal)并将标准输入(stdin)连接到容器中,使您可以在容器内部与其进行交互。

- `mmengine`: 这是要运行的容器的名称,可能是一个事先构建好的 Docker 镜像。

综合起来,`docker run --gpus all --shm-size=8g -it mmengine` 命令的意思是在一个新的 Docker 容器中运行名为 `mmengine` 的镜像,分配所有可用的 GPU 资源,并设置共享内存大小为 8GB。同时,它会为容器分配一个交互式的终端,使您可以与容器进行交互。这通常用于在容器中执行需要 GPU 加速的任务,并在容器内部进行交互操作。

22.
源码安装
# 如果克隆代码仓库的速度过慢,可以从 https://gitee.com/open-mmlab/mmengine.git 克隆
git clone https://github.com/open-mmlab/mmengine.git
cd mmengine
pip install -e . -v
23.
从Model Zoo中选择预训练语义分割模型的config文件和checkpoint权重文件

Model Zoo:GitHub - open-mmlab/mmsegmentation: OpenMMLab Semantic Segmentation Toolbox and Benchmark.

注意,config文件和checkpoint文件是一一对应的

  • Segformer算法,Cityscpaes数据集预训练模型

configs/segformer/segformer_mit-b5_8xb1-160k_cityscapes-1024x1024.py

https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_8x1_1024x1024_160k_cityscapes/segformer_mit-b5_8x1_1024x1024_160k_cityscapes_20211206_072934-87a052ec.pth

https://github.com/open-mmlab/mmsegmentation/blob/main/configs/segformer/segformer_mit-b5_8xb1-160k_cityscapes-1024x1024.py

https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_8x1_1024x1024_160k_cityscapes/segformer_mit-b5_8x1_1024x1024_160k_cityscapes_20211206_072934-87a052ec.pth

预训练模型是pth文件

24.
!python demo/image_demo.py \ 
    data/street_uk.jpeg \ 
    configs/segformer/segformer_mit-b5_8xb1-160k_cityscapes-1024x1024.py \ 
    https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_8x1_1024x1024_160k_cityscapes/segformer_mit-b5_8x1_1024x1024_160k_cityscapes_20211206_072934-87a052ec.pth \
     --out-file outputs/B1_uk_segformer.jpg \
     --device cuda:0 \
     --opacity 0.5
这是什么意思?

这个命令是运行一个 Python 脚本来进行图像分割的演示,使用了 MMsegmentation 库来执行操作。具体来说,这个命令是运行 `image_demo.py` 脚本,传递了一系列参数来指定输入图像、配置文件、预训练模型、设备等信息。

让我逐一解释每个参数的含义:

- `demo/image_demo.py`: 这是要运行的 Python 脚本的路径,相对于当前工作目录。

- `data/street_uk.jpeg`: 这是要进行图像分割的输入图像的路径。

- `configs/segformer/segformer_mit-b5_8xb1-160k_cityscapes-1024x1024.py`: 这是 MMsegmentation 的配置文件,指定了图像分割模型的设置和参数。

- `https://download.openmmlab.com/mmsegmentation/v0.5/segformer/segformer_mit-b5_8x1_1024x1024_160k_cityscapes/segformer_mit-b5_8x1_1024x1024_160k_cityscapes_20211206_072934-87a052ec.pth`: 这是预训练模型的下载链接。

- `--out-file outputs/B1_uk_segformer.jpg`: 这个参数指定了输出图像的保存路径和文件名。

- `--device cuda:0`: 这个参数指定了使用的计算设备,这里是使用 GPU(CUDA)设备编号为 0。

- `--opacity 0.5`: 这个参数指定了绘制分割结果时使用的透明度。

综合起来,这个命令的意思是运行一个 Python 脚本来对输入图像进行分割,使用指定的配置文件和预训练模型,将结果保存在输出图像中。该过程会在 GPU 设备上执行,并且分割结果会绘制在原始图像上,透明度为 0.5。这通常用于演示图像分割模型在特定图像上的效果。

25.
segformer_mit-b5_8xb2-160k_ade20k-640x640.py 这个命名是什么意思?

`segformer_mit-b5_8xb2-160k_ade20k-640x640.py` 是一个文件名,通常用于指代一个深度学习模型的配置文件。这个文件名中包含了一些关键信息,让人可以了解这个配置文件是用于哪种模型、数据集、训练设置等。

让我来解释这个文件名的各部分含义:

- `segformer_mit-b5`: 这部分表示使用的分割模型的名称,可能是某个模型的名称或标识符。

- `8xb2`: 这部分可能表示训练的 batch size 和 GPU 数量。在这里,`8xb2` 可能表示每个训练批次(batch)包含 2 个样本,同时使用 8 个 GPU 进行训练。

- `160k`: 这部分可能表示训练的迭代次数。在这里,`160k` 可能表示训练进行了 160,000 次迭代。

- `ade20k`: 这部分可能表示使用的数据集。在这里,`ade20k` 可能表示使用 ADE20K 数据集进行训练。

- `640x640`: 这部分可能表示输入图像的大小。在这里,`640x640` 可能表示输入图像的尺寸为 640x640 像素。

综合起来,这个文件名中包含了模型名称、训练设置、数据集和输入图像大小等信息,让人可以在一定程度上了解这个配置文件的作用和用途。这种命名方式通常用于深度学习框架中的配置文件,以便更好地管理和区分不同的模型和训练设置。

26.
 
seg_map = pred_mask.astype('uint8')

seg_img = Image.fromarray(seg_map).convert('P')

seg_img.putpalette(np.array(palette, dtype=np.uint8))
什么意思?

这段代码是用于将预测的分割掩码转换成彩色分割图像,然后将分割图像添加调色板(palette),以便在显示或保存时可以正确地显示分割类别的颜色。

让我逐步解释每一步:

1. `seg_map = pred_mask.astype('uint8')`:这一步将预测的分割掩码 `pred_mask` 转换为无符号8位整数(uint8)类型。这可能是为了确保像素值在0到255之间。

2. `seg_img = Image.fromarray(seg_map).convert('P')`:这一步使用 `Image.fromarray()` 函数将转换后的分割掩码数组转换为一个 `P` 模式的图像,其中 `P` 表示调色板(palette)模式。在调色板模式下,每个像素值对应一个调色板索引,而不是直接的颜色值。

3. `seg_img.putpalette(np.array(palette, dtype=np.uint8))`:这一步使用 `putpalette()` 方法为图像添加调色板。`palette` 是一个颜色映射表,它将分割类别与颜色之间建立了联系。`np.array(palette, dtype=np.uint8)` 将颜色映射表转换为无符号8位整数数组,以便用于图像的调色板。

综合起来,这段代码的目的是将预测的分割掩码转换为彩色的分割图像,并将每个分割类别映射到特定的颜色,以便于可视化分割结果。这在分割任务中常用于将掩码可视化为彩色的分割效果图。

27.
patches = [mpatches.Patch(color=np.array(palette[i])/255., label=classes[i]) for i in range(len(classes))]
plt.legend(handles=patches, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0., fontsize='large') 是什么意思?

这段代码是用于在 Matplotlib 图中添加图例(legend),以便将颜色与类别名称进行对应,从而解释图中的颜色所代表的含义。

让我逐步解释每一步:

1. `patches = [mpatches.Patch(color=np.array(palette[i])/255., label=classes[i]) for i in range(len(classes))]`:这一步创建了一个列表 `patches`,其中每个元素都是一个 `mpatches.Patch` 对象。这些对象表示图例中的每个条目,每个条目的颜色和标签都与特定的类别相关。`np.array(palette[i])/255.` 将调色板中的颜色值除以 255,以确保颜色值在0到1之间。

2. `plt.legend(handles=patches, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0., fontsize='large')`:这一步使用 `plt.legend()` 函数在图中添加图例。`handles` 参数传递了要在图例中显示的条目列表,即上面创建的 `patches` 列表。`bbox_to_anchor` 参数设置图例的位置,`(1.05, 1)` 表示将图例放置在右上角。`loc` 参数设置图例的位置相对于 `bbox_to_anchor`,`borderaxespad` 参数设置图例与图的边框之间的间隔。`fontsize` 参数设置图例文本的字体大小。

综合起来,这段代码的目的是在 Matplotlib 图中添加一个图例,以解释图中的颜色与类别的对应关系。图例中的每个条目都由一个颜色块和相应的类别名称组成,使得图中的颜色可以与特定类别进行对应和解释。这在可视化分类或分割结果时非常有用,可以让观众明确地了解不同颜色所代表的类别信息。

 

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

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

相关文章

线程面试题-1

看的博客里面总结的线程的八股文 1、线程安全的集合有哪些&#xff1f;线程不安全的呢&#xff1f; 线程安全的&#xff1a; Hashtable&#xff1a;比HashMap多了个线程安全。 ConcurrentHashMap:是一种高效但是线程安全的集合。 Vector&#xff1a;比Arraylist多了个同步化…

Ubuntu本地快速搭建web小游戏网站,并使用内网穿透将其发布到公网上

文章目录 前言1. 本地环境服务搭建2. 局域网测试访问3. 内网穿透3.1 ubuntu本地安装cpolar内网穿透3.2 创建隧道3.3 测试公网访问 4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名4.3 测试访问公网固定二级子域名 前言 网&#xff1a;我们通常说的是互联网&am…

SpringBoot中乐观锁的实现 (精简demo)

使用场景: 当要更新一条数据时&#xff0c;希望这条数据没有被别人更新&#xff0c;也就是说实现线程安全的数据更新 1. 数据库新增version字段, int类型, 默认值为0 2. 引入依赖 <!--mybatis拦截器--> <dependency><groupId>com.baomidou</groupId>&…

Nginx使用keepalived配置VIP

VIP常用于负载均衡的高可用&#xff0c;使用VIP可以给多个主机绑定一个IP&#xff0c;这样&#xff0c;当某个负载应用挂了之后&#xff0c;可以自动切到另一个负载。 我这里是在k8s环境中做的测试&#xff0c;集群中有6个节点&#xff0c;我给140和141两个节点配置VIP。 1. 安…

【leetcode 力扣刷题】移除链表元素 多种解法

移除链表元素的多种解法 203. 移除链表元素解法①&#xff1a;头节点单独判断解法②&#xff1a;虚拟头节点解法③&#xff1a;递归 203. 移除链表元素 题目链接&#xff1a;203.移除链表元素 题目内容&#xff1a; 理解题意&#xff1a;就是单纯的删除链表中所有值等于给定的…

Java【HTTP】什么是 Cookie 和 Session? 如何理解这两种机制的区别和作用?

文章目录 前言一、Cookie1, 什么是 Cookie2, Cookie 从哪里来3, Cookie 到哪里去4, Cookie 有什么用 二、Session1, 什么是 Session2, 理解 Session 三、Cookie 和 Session 的区别总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; …

并查集 size 的优化(并查集 size 的优化)

目录 并查集 size 的优化 Java 实例代码 UnionFind3.java 文件代码&#xff1a; 并查集 size 的优化 按照上一小节的思路&#xff0c;我们把如下图所示的并查集&#xff0c;进行 union(4,9) 操作。 合并操作后的结构为&#xff1a; 可以发现&#xff0c;这个结构的树的层相对…

juc概述和Lock接口

目录 一、什么是JUC 1、JUC概述 2、进程与线程 3、线程的状态 4、wait/sleep 的区别 5、并发与并行 6、管程 7、用户线程和守护线程 二、Lock接口 1、Synchronized 使用synchronized实现售票案例 使用synchronized实现增减变量操作 2、什么是 Lock 买票例子使用lo…

如何选择 DCDC 降压型开关电源的电感

选择合适的电感是开关电源电路设计的关键之一。本文将帮助您理解电感值和电路性能之间的关系。 降压转换器&#xff08;buck converter&#xff09;&#xff0c;也称为降压转换器(step-down converter)&#xff0c;是一种开关模式稳压器&#xff08;voltage regulator&#xf…

Mac常见恶意软件再现,办公应用程序潜藏风险如何防范?

Mac电脑正受到臭名昭著的XLoader恶意软件的新变种的攻击&#xff0c;该恶意软件已被重写为在最好的MacBook上本地运行。 虽然XLoader至少从2015年开始出现&#xff0c;但在2021年发现macOS变体之前&#xff0c;它主要用于针对Windows PC。然而&#xff0c;该版本是作为Java程序…

win10系统rust串口通信实现

一、用cargo创建新工程 命令&#xff1a;cargo new comport use std::env; use std::{thread, time}; use serialport::{DataBits, StopBits, Parity, FlowControl}; use std::io::{self, Read, Write}; use std::time::Duration;fn main() -> io::Result<()> {let m…

CSS中的display属性有哪些值?它们的作用?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS display 属性的不同取值和作用1. block2. inline3. inline-block4. none5. flex6. grid7. table、table-row、table-cell8. list-item9. inline-table、table-caption、table-column 等 ⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#x…

Pika Labs - 用AI工具生成短视频大片

今天我要跟大家分享如何用AI工具1分钟内生成一个短视频大片&#xff0c;效果完全不输影视大V。 只需要用一句话就可以生成视频&#xff0c;或者用一张图就能生成视频&#xff0c;这就是最新推出的AI工具Pika Labs&#xff01;被网友誉为“全球最优秀的文本生成视频AI”。 目前…

SharedPreferences详解及其ANR解决方案

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、使用四、原理五、存在的问题六、优…

Android动态添加和删除控件/布局

一、引言 最近在研究RecyclerView二级列表的使用方法&#xff0c;需要实现的效果如下。 然后查了一些博客&#xff0c;觉得实现方式太过复杂&#xff0c;而且这种方式也不是特别受推荐&#xff0c;所以请教了别人&#xff0c;得到了一种感觉还不错的实现方式。实现的思路为&…

【LeetCode-经典面试150题-day9]

目录 36.有效的数独 54.螺旋矩阵 48.旋转图像 73.矩阵置零 36.有效的数独 题意&#xff1a; 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1…

huggingface datasets离线加载文件的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Sim/circuit10

通过观察可知&#xff0c;在a、b同时为0或1时&#xff0c;state的值改变 state的值可以改变q的输出&#xff0c;1为ab的同或&#xff0c;0为异或 利用assign q进行输出 module top_module (input clk,input a,input b,output q,output state );always(posedge clk)if(a&…

【TypeScript】元组

元组&#xff08;Tuple&#xff09;是 TypeScript 中的一种特殊数据类型&#xff0c;它允许你定义一个固定数量和类型的元素组合。元组可以包含不同类型的数据&#xff0c;每个数据的类型在元组中都是固定的。以下是 TypeScript 中元组的基本用法和特点&#xff1a; // 声明一…

Win系统下安装Linux双系统教程

软件下载 软件&#xff1a;Linux版本&#xff1a;18.0.4语言&#xff1a;简体中文大小&#xff1a;1.82G安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①丨百度网盘&#xff1a;1.ubuntu18.0.4下载链接&#xf…