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

Docker快速入门指南

🛠️ Docker 应用场景

Docker 是一个开源的平台,旨在简化应用程序的开发、部署和管理。它通过容器技术,将应用及其所有依赖打包在一个标准化的环境中,从而确保应用在不同环境中的一致性和可移植性。在 Python 爬虫的场景中,Docker 的应用尤为广泛,主要包括以下几个方面:

  1. 环境隔离:在开发爬虫应用时,Docker 可以帮助创建一个干净且一致的运行环境。通过 Docker 容器,可以确保爬虫应用在不同机器上的环境一致性,避免因环境差异导致的问题。

  2. 依赖管理:爬虫项目通常需要多个依赖库,如 requestsscrapybeautifulsoup4。Docker 可以将这些依赖打包在容器镜像中,从而简化依赖管理和版本控制。

  3. 快速部署:通过 Docker,可以快速构建和启动爬虫应用,减少手动配置的时间。只需定义好 Dockerfile,即可通过 Docker 自动化构建镜像并运行容器,快速实现应用的部署和运行。

  4. 跨平台兼容性:Docker 容器能够在不同的操作系统和硬件平台上运行,使得爬虫应用可以在开发、测试和生产环境中保持一致。Docker 的这一特性在多平台部署时尤为重要。

  5. 持续集成和交付:Docker 与 CI/CD 工具(如 Jenkins、GitLab CI)集成,使得爬虫项目可以实现自动化测试和部署。通过构建、测试和发布的自动化流程,提高开发效率和应用质量。

总结来说,Docker 在 Python 爬虫项目中的应用场景包括环境隔离、依赖管理、快速部署、跨平台兼容性和持续集成与交付,极大地提升了开发和运维的效率。

🔍 Docker 原理

Docker 基于容器技术,实现应用的轻量级虚拟化。其核心原理包括以下几个方面:

  1. 容器与镜像:Docker 容器是一个轻量级、可移植、独立的运行环境,其中包含了应用程序及其所有依赖。镜像是容器的蓝图,它定义了容器的文件系统结构和配置。通过镜像创建容器,容器可以在镜像的基础上进行运行和修改。

  2. 镜像分层:Docker 镜像采用分层结构,每一层都包含了一些文件和目录。镜像的每一层都是从前一层派生而来,从而实现了文件的重用和共享。分层结构使得镜像的构建和管理更加高效,并且可以通过增量更新减少存储和带宽的消耗。

  3. 隔离性:Docker 利用操作系统的内核特性(如 namespaces 和 cgroups)实现容器的隔离。Namespaces 提供了进程、网络、文件系统等资源的隔离,而 cgroups 控制了容器的资源使用限制。这种隔离确保了容器之间的安全性和独立性。

  4. 虚拟化与容器化:Docker 容器与传统的虚拟机不同,它不需要虚拟化整个操作系统,而是利用宿主操作系统的内核来运行多个容器。这样,容器启动速度更快,占用资源更少。

  5. Docker 引擎:Docker 引擎是 Docker 的核心组件,包括 Docker 守护进程、Docker 客户端和 Docker 注册表。Docker 守护进程负责管理容器的生命周期,Docker 客户端提供了与守护进程交互的命令行接口,而 Docker 注册表(如 Docker Hub)用于存储和分发 Docker 镜像。

通过这些原理,Docker 提供了高效的应用虚拟化和管理解决方案,使得应用的开发、部署和运行变得更加简便和可靠。

🚀 Docker 的特点与优势

Docker 的特点和优势主要体现在以下几个方面:

  1. 轻量级:Docker 容器不需要虚拟化整个操作系统,仅利用宿主机的操作系统内核,这使得 Docker 容器比虚拟机更轻量、启动更快。容器的资源消耗也比虚拟机低,适合大规模应用部署。

  2. 可移植性:Docker 容器包含了应用及其所有依赖,使得应用可以在不同的环境中保持一致性。这种可移植性大大简化了应用在开发、测试和生产环境中的迁移过程。

  3. 一致性:通过 Docker 的镜像管理,确保应用在不同环境中的一致性。镜像可以在开发环境、测试环境和生产环境中使用,避免了环境不一致带来的问题。

  4. 隔离性:Docker 容器提供了进程、网络和文件系统的隔离,使得应用可以在独立的环境中运行。这种隔离性有助于提高系统的安全性和稳定性,避免了不同应用之间的冲突。

  5. 可扩展性:Docker 提供了良好的可扩展性,可以轻松地创建、管理和扩展容器。结合 Docker Compose 和 Docker Swarm 等工具,可以实现复杂的容器编排和集群管理。

  6. 版本控制:Docker 镜像的版本控制功能允许用户管理镜像的不同版本,并在需要时回滚到先前的版本。这种功能对于持续集成和交付流程中的版本管理至关重要。

  7. 社区支持:Docker 拥有一个活跃的开源社区,提供了大量的文档、教程和工具。社区的支持使得 Docker 的学习和使用变得更加便捷。

通过以上特点和优势,Docker 在应用的开发、测试、部署和管理中发挥了重要作用,提升了开发效率和系统可靠性。

🏗️ Docker 架构讲解

Docker 的架构由以下几个主要组件构成:

  1. Docker 引擎:Docker 引擎是 Docker 的核心组件,负责容器的创建、管理和运行。Docker 引擎由 Docker 守护进程、Docker 客户端和 Docker API 组成。

    • Docker 守护进程dockerd):负责管理 Docker 容器的生命周期,包括镜像的拉取、容器的启动和停止。它监听 Docker 客户端的请求,并执行相应的操作。
    • Docker 客户端docker):提供了与 Docker 守护进程交互的命令行工具。用户通过 Docker 客户端发送命令来管理容器。
    • Docker API:提供了程序化的接口,使得用户可以通过 REST API 与 Docker 守护进程进行交互。
  2. 镜像:Docker 镜像是构建 Docker 容器的基础。镜像是一个包含应用程序及其所有依赖的只读文件系统。镜像分为多个层级,每一层都是对上一层的增量更新。

  3. 容器:Docker 容器是镜像的可执行实例。容器在运行时是一个独立的、可写的文件系统,并且与宿主操作系统进行隔离。容器提供了应用运行所需的环境和依赖。

  4. Docker 注册表:Docker 注册表是存储和分发 Docker 镜像的地方。Docker Hub 是 Docker 的官方公共注册表,用户可以在 Docker Hub 上查找、拉取和发布镜像。也可以设置私有注册表来管理公司内部的镜像。

  5. Docker Compose:Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过 docker-compose.yml 文件,可以定义应用的服务、网络和卷等配置,并通过 docker-compose 命令管理整个应用的生命周期。

  6. Docker Swarm:Docker Swarm 是 Docker 的原生集群管理工具,用于管理多主机的 Docker 容器。通过 Docker Swarm,可以将多个 Docker 主机组成一个集群,并在集群中部署和管理容器服务。

Docker 的架构设计使得应用的开发、部署和管理变得更加高效和灵活,支持各种规模的应用和复杂的系统需求。

⚙️ Docker 管理:启动、停止、状态查看

Docker 提供了一系列命令用于容器的管理,包括启动、停止和状态查看等操作。以下是常用的 Docker 管理命令及其用法:

  1. 启动容器:可以使用 docker run 命令启动一个新的容器实例。示例如下:

    docker run -d --name my_container my_image
    

    其中,-d 参数表示以后台模式运行容器,--name 参数指定容器的名称,my_image 是要运行的镜像名称。启动容器后,可以使用 docker ps 命令查看正在运行的容器列表。

  2. 停止容器:使用

docker stop 命令可以停止正在运行的容器。示例如下:

docker stop my_container

其中,my_container 是要停止的容器名称或 ID。停止容器后,容器会进入停止状态,但其数据仍然保留。

  1. 查看容器状态:可以使用 docker ps 命令查看正在运行的容器状态。示例如下:

    docker ps
    

    如果需要查看所有容器(包括停止的容器),可以使用 docker ps -a 命令。

  2. 重启容器:使用 docker restart 命令可以重启一个容器。示例如下:

    docker restart my_container
    

    该命令会先停止容器,然后重新启动容器。

  3. 删除容器:使用 docker rm 命令可以删除已停止的容器。示例如下:

    docker rm my_container
    

    如果需要删除正在运行的容器,可以先使用 docker stop 停止容器,然后再使用 docker rm 删除容器。

通过这些命令,用户可以方便地管理 Docker 容器的生命周期,进行容器的启动、停止、状态查看等操作。

🧩 Docker 镜像管理:搜索镜像

Docker 镜像管理是 Docker 使用中的一个重要部分,涉及镜像的搜索、下载、删除等操作。以下是关于 Docker 镜像管理的详细讲解:

  1. 搜索镜像:使用 docker search 命令可以在 Docker Hub 上搜索镜像。示例如下:

    docker search python
    

    该命令会在 Docker Hub 上搜索包含 python 关键字的镜像,并显示相关信息,如镜像名称、描述、星级等。

  2. 拉取镜像:使用 docker pull 命令可以从 Docker Hub 上拉取镜像到本地。示例如下:

    docker pull python:3.8
    

    该命令会从 Docker Hub 上拉取 python:3.8 镜像到本地。如果没有指定标签,则会拉取最新的镜像版本。

  3. 查看本地镜像:使用 docker images 命令可以查看本地的 Docker 镜像列表。示例如下:

    docker images
    

    该命令会显示本地镜像的名称、标签、镜像 ID、创建时间和大小等信息。

  4. 删除镜像:使用 docker rmi 命令可以删除本地的 Docker 镜像。示例如下:

    docker rmi python:3.8
    

    该命令会删除本地的 python:3.8 镜像。如果镜像被其他容器使用,则需要先删除相关容器才能删除镜像。

  5. 镜像管理实践:在实际使用中,管理镜像时需要注意镜像的版本控制和更新策略。可以通过定期清理未使用的镜像来节省存储空间,并保持镜像的更新,以确保使用最新的功能和安全修复。

通过这些镜像管理操作,用户可以高效地搜索、下载、查看和删除 Docker 镜像,从而更好地管理本地的镜像资源。

🗑️ Docker 镜像管理:本地镜像与删除

在 Docker 中,镜像管理包括了对本地镜像的操作,如查看、删除等。以下是 Docker 镜像管理中本地镜像处理的详细说明:

  1. 查看本地镜像:可以使用 docker images 命令查看本地存储的所有 Docker 镜像。示例如下:

    docker images
    

    该命令会列出所有本地镜像的详细信息,包括镜像名称、标签、镜像 ID、创建时间和大小等。如果需要按特定格式输出,可以使用 --format 选项进行自定义。

  2. 删除镜像:使用 docker rmi 命令删除本地镜像。示例如下:

    docker rmi my_image
    

    其中 my_image 是要删除的镜像名称或 ID。如果要删除多个镜像,可以在命令中列出多个镜像名称或 ID。例如:

    docker rmi my_image1 my_image2
    
  3. 删除未使用的镜像:使用 docker image prune 命令可以删除未被任何容器使用的镜像。示例如下:

    docker image prune
    

    该命令会交互式提示用户确认删除操作。要强制删除所有未使用的镜像,可以使用 -a 参数:

    docker image prune -a
    
  4. 镜像清理策略:在实际使用中,为了保持镜像的整洁,可以定期执行镜像清理操作。通过清理未使用的镜像,可以释放存储空间并提高 Docker 环境的效率。

  5. 镜像优化:为了优化镜像的大小和性能,可以在 Dockerfile 中使用多阶段构建(multi-stage builds)来减少最终镜像的体积。此外,选择合适的基础镜像和优化 Dockerfile 的构建步骤也是提升镜像性能的重要措施。

通过这些本地镜像管理操作,用户可以有效地管理和优化本地镜像资源,确保 Docker 环境的清洁和高效。

🧳 Docker 容器管理:暂停、恢复容器与移除

Docker 容器管理涉及对容器的操作,包括暂停、恢复和移除等操作。以下是这些操作的详细介绍:

  1. 暂停容器:使用 docker pause 命令可以暂停一个运行中的容器。暂停的容器会被冻结,容器内的进程会被挂起,但容器的状态和数据不会丢失。示例如下:

    docker pause my_container
    

    其中 my_container 是要暂停的容器名称或 ID。暂停容器可以用于临时停止容器的运行,而不丢失其当前状态。

  2. 恢复容器:使用 docker unpause 命令可以恢复一个被暂停的容器。恢复的容器会继续从暂停的位置运行。示例如下:

    docker unpause my_container
    

    通过该命令,可以使容器恢复到正常运行状态。

  3. 移除容器:使用 docker rm 命令可以删除一个已停止的容器。示例如下:

    docker rm my_container
    

    如果要删除正在运行的容器,需要先停止容器,然后再执行删除操作。也可以使用 docker rm -f 强制删除正在运行的容器:

    docker rm -f my_container
    
  4. 容器清理:为了保持 Docker 环境的整洁,可以定期清理不再需要的容器。使用 docker container prune 命令可以删除所有已停止的容器。示例如下:

    docker container prune
    

    该命令会交互式提示用户确认删除操作,并清理所有停止的容器。

  5. 容器管理策略:在实际操作中,建议使用合适的容器命名和标签策略,以便于容器的管理和识别。此外,可以结合 Docker Compose 和 Docker Swarm 等工具来管理多个容器和服务,提高容器管理的效率。

通过这些容器管理操作,用户可以灵活地管理 Docker 容器的生命周期,实现容器的暂停、恢复和删除操作。

📦 Dockerfile 核心指令与容器打包

Dockerfile 是定义 Docker 镜像的脚本文件,通过指定一系列指令来构建镜像。以下是 Dockerfile 核心指令的详细说明,以及如何创建和打包容器:

  1. FROM:指定基础镜像。每个 Dockerfile 都必须以 FROM 指令开始,指定要使用的基础镜像。例如:

    FROM python:3.8
    

    这条指令表示使用 Python 3.8 作为基础镜像。

  2. RUN:执行命令。RUN 指令用于在镜像中执行命令,例如安装软件包或更新系统。例如:

    RUN pip install requests
    

    该指令会在镜像中安装 requests 库。

  3. COPY:复制文件。COPY 指令用于将本地文件复制到镜像中的指定路径。例如:

    COPY my_script.py /app/
    

    该指令将本地的 my_script.py 文件复制到镜像的 /app/ 目录。

  4. WORKDIR:设置工作目录。WORKDIR

令用于设置容器启动时的工作目录。例如:

WORKDIR /app

该指令将工作目录设置为 /app

  1. CMD:指定容器启动时的默认命令。CMD 指令用于指定容器启动时执行的命令。例如:

    CMD ["python", "my_script.py"]
    

    该指令在容器启动时执行 python my_script.py

  2. ENTRYPOINT:设置容器的主程序。ENTRYPOINT 指令用于指定容器的主程序,并且该程序不能被 CMD 覆盖。例如:

    ENTRYPOINT ["python"]
    

    该指令将容器的主程序设置为 python

  3. EXPOSE:暴露端口。EXPOSE 指令用于声明容器在运行时监听的端口。例如:

    EXPOSE 80
    

    该指令声明容器会监听 80 端口。

  4. VOLUME:创建挂载点。VOLUME 指令用于创建一个挂载点,以便容器可以将数据存储到宿主机上。例如:

    VOLUME ["/data"]
    

    该指令创建了一个 /data 挂载点。

  5. USER:设置用户。USER 指令用于设置容器运行时的用户。例如:

    USER appuser
    

    该指令将容器的运行用户设置为 appuser

  6. ENV:设置环境变量。ENV 指令用于设置环境变量。例如:

    ENV APP_ENV=production
    

    该指令将环境变量 APP_ENV 设置为 production

  7. 构建镜像:通过 Dockerfile 构建镜像。使用 docker build 命令来构建镜像。例如:

    docker build -t my_image .
    

    该命令根据 Dockerfile 构建一个名为 my_image 的镜像。

  8. 打包容器:将容器打包成镜像后,可以将镜像推送到 Docker Hub 或其他镜像仓库中。使用 docker push 命令推送镜像。例如:

    docker push my_image
    

    该命令将本地的 my_image 镜像推送到镜像仓库中。

通过这些核心指令和操作,用户可以灵活地创建和打包 Docker 容器,定义镜像的构建过程,并将镜像分发到不同的环境中。

相关文章:

Docker快速入门指南

🛠️ Docker 应用场景 Docker 是一个开源的平台,旨在简化应用程序的开发、部署和管理。它通过容器技术,将应用及其所有依赖打包在一个标准化的环境中,从而确保应用在不同环境中的一致性和可移植性。在 Python 爬虫的场景中&#…...

VS Code中使用MSVC编译C++程序

前置条件 1. VS Code配置C开发环境 2. CMake安装 3. VS安装(MSVC编译器) 4. 环境变量配置(重要!!!) ​​​​使用msvc的cl工具编译程序,以及 “fatal error C1034: iostream: 不包括…...

四数之和(LeetCode)

题目 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff1a; 0 <…...

学习使用备份软件BorgBackup

Time Machine是官方提供的强大备份系统&#xff0c;它能够备份macOS系统的一切&#xff0c;包括文件、照片、网页纪录、帐号密码以及安装过的软件等。如果系统出了问题&#xff0c;使用”时光回溯“&#xff0c;系统就能回到任意记录点&#xff0c;用过的多说好&#xff01; B…...

Java 实现合并两个有序链表:递归与迭代

Java 实现合并两个有序链表&#xff1a;递归与迭代 在面试和算法题中&#xff0c;合并两个有序链表是一个经典问题。通过这个问题&#xff0c;不仅可以考察候选人的基础数据结构掌握情况&#xff0c;还能测试他们对递归和迭代等编程技巧的应用能力。 本文将讨论如何使用 Java…...

【每日刷题】Day98

【每日刷题】Day98 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 大数加法_牛客题霸_牛客网 (nowcoder.com) 2. 大数乘法_牛客题霸_牛客网 (nowcoder.com) 3. 扑克牌…...

51单片机-LED实验二

使用51单片机进行LED灯的实验&#xff0c;使用8个LED灯展示二进制数&#xff0c;使用独立按键控制二进制数的加法&#xff0c;每次按下独立按键K2&#xff0c;就让二进制数加一&#xff0c;定义了一个LedNum,表示二进制数&#xff0c;二进制数取反之后可以得到输出到LED端口的8…...

批发行业进销存-webview 读取NFC,会员卡 源码CyberWinApp-SAAS 本地化及未来之窗行业应用跨平台架构

一、混合应用开发 混合应用顾名思义就是网页html和原生APP共同作用的结果 好处在一既有web的跨平台优势&#xff08;安卓、苹果&#xff0c;电脑、国产电脑、平板电脑&#xff0c;自助机都能用&#xff09; 好处二可以离线使用&#xff0c;比较稳定 好处三可以与本地硬件交…...

博弈dp,CF 731E - Funny Game

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 731E - Funny Game 二、解题报告 1、思路分析 游戏规则其实就是交替取前缀和 考虑 f(i) 为 某人先手取前 i 个&#xff0c;最终能得到的最大分差 由于每人都是最佳发挥&#xff0c;所以有如下状态转移&am…...

基础知识:深入理解MongoDB、MySQL与Redis的应用与实践

基础知识&#xff1a;深入理解MongoDB、MySQL与Redis的应用与实践 在现代应用开发中&#xff0c;数据库系统的选择对于系统的性能、扩展性和维护性有着至关重要的影响。MongoDB、MySQL 和 Redis 是三种流行的数据库技术&#xff0c;它们各自有着独特的特点和适用场景。本文将详…...

Reids中List类型、Set类型、SortedSet类型的常用指令

List类型&#xff1a; Redis中的List类型与Java中的LinkedList类似&#xff0c;可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。 特征也与LinkedList类似&#xff1a; 有序元素可以重复插入和删除快查询速度一般 常用来存储一个有序数据&#xff0c…...

K8S Ingress 常用配置

目录 介绍ingress 安装 基本使用请查看域名重定向前后端分离配置默认证书配置指定证书配置白名单配置黑名单配置Annotations 配置ConfigMap 配置 匹配请求头速率限制限制客户端的最大连接数限制每秒钟段并发连接数限制每分钟段并发请求突发访问限制限制传输速度速率限制白名单 …...

【K8S】K8S架构及相关组件

文章目录 1 K8S总体架构2 相关组件2.1 控制面板组件2.2 节点组件2.3 附加组件 写在最后 1 K8S总体架构 K8S&#xff0c;全称Kubernetes&#xff0c;是一个开源的容器部署和管理平台&#xff0c;由Google开发&#xff0c;后捐献给云原生计算基金会&#xff08;CNCF&#xff09;…...

【MATLAB第108期】基于MATLAB的fast、vbsa、dynia、eet、glue、pawn、rsa敏感性分析模型合集(无目标函数)【更新中】

【MATLAB第108期】基于MATLAB的fast、vbsa、dynia、eet、glue、pawn、rsa敏感性分析模型合集&#xff08;无目标函数&#xff09;【更新中】 一、FAST&#xff08;Fourier Amplitude Sensitivity Test&#xff09; FAST&#xff08;Fourier Amplitude Sensitivity Test&#…...

【K8S】为什么需要Kubernetes?

文章目录 1 什么是Kubernetes&#xff1f;2 三种常见的应用部署方式2.1 传统部署2.2 虚拟化部署2.3 容器化部署 3 Kubernetes的特点写在最后 1 什么是Kubernetes&#xff1f; Kubernetes是 一个开源的&#xff0c;用于管理云平台中多个主机上的容器化应用&#xff0c;Kubernet…...

【Linux】Linux中查找字符串中的命令

在Linux中&#xff0c;查找字符串的命令通常使用grep。grep是一个强大的工具&#xff0c;用于在文件中搜索指定模式的字符串。以下是一些基本用法&#xff1a; 1.在文件中查找字符串 grep "字符串" 文件名例如&#xff0c;查找文件example.txt中包含“hello”的行&…...

最新HTML设计搜索表单

设计搜索表单 页眉中包含表单&#xff0c;表单中只需包含label和Input. 实现如下效果&#xff1a;文本框动态变宽效果 代码&#xff1a;6.2.4.设计搜索表单.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title></t…...

JavaScript constructor原型原型继承

constructor 在 JavaScript 中&#xff0c;构造函数是一种特殊的函数&#xff0c;使用 new 关键字来调用&#xff0c;用于创建对象实例。JavaScript 中的构造函数通常通过 function 关键字定义。 例如&#xff1a; function Person(name, age) {this.name name;this.age a…...

使用Python+moviepy保存截取视频画面

一、 使用VideoFileClip对象的的save_frame函数保存截取的第1帧画面 from moviepy.editor import * mvVideoFileClip(/home/Download/leaves.mp4) mv.save_frame(/home/Download/fst.jpg) # 默认保存截取的第1帧画面 二、 使用VideoFileClip对象的的save_frame函数保存截…...

【DOCKER】显示带UI的软件

1. Linux 1.1 宿主机开放X server权限 xhost 1.2 启动容器 docker run -it --rm --privilegedtrue --useru20 --workdir/home/u20 \ -e DISPLAYhost.docker.internal:0 u20:dev1.3 测试 # 安装测试软件 sudo apt-get -y install x11-apps# 显示测试程序 xclock2. Windows …...

Atcoder Beginner Contest 366

传送门 A - Election 2 时间限制&#xff1a;2秒 内存限制&#xff1a;1024MB 分数&#xff1a;100分 问题描述 在 AtCoder 市举行市长选举。候选人是 Takahashi 和 Aoki。 目前有 N 张有效选票投给了这两个候选人&#xff0c;并且计票正在进行中。这里&#xff0…...

【hexo博客问题】

windows下使用gitbash即可使用 其他bash会产生权限问题 npm install失败 $ npm install npm error code ENOENT npm error syscall open npm error path F:\pf_project\blog_pf\package.json npm error errno -4058 npm error enoent Could not read package.json: Error: E…...

用数组模拟栈和队列

栈 先进后出 //stk 表示定义的栈 //tt表示栈顶的下标 int stk[N], tt 0;//在栈顶上加入一个新的元素 stk[ tt] x;//弹出 tt --;//判断栈是否为空 if (tt > 0) 不为空 else empty//取出栈顶 stk[tt];1.题目 给定一个长度为 N 的整数数列&#xff0c;输出每个数左边第一个…...

Django内置后端和自定义后端

【图书介绍】《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战&#xff08;视频教学版&#xff09;》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) 5.2.3 内置…...

嵌入式人工智能(OpenCV-基于树莓派的人脸识别与入侵检测)

1、人脸识别 人脸识别是一种技术&#xff0c;通过检测、跟踪和识别人脸上的关键特征&#xff0c;以确认人脸的身份。它通常用于安保系统、身份验证、社交媒体和人机交互等领域。 人脸识别技术的基本原理是先通过图像处理和计算机视觉算法&#xff0c;提取人脸的特征点和特征描…...

如何选择适合的香港云服务器提供商?

稳定性和可靠性 确保提供商有高水平的服务器正常运行时间&#xff0c;并提供可靠的数据备份和恢复选项。 网络速度和延迟 选择能够提供快速和低延迟网络连接的服务商&#xff0c;尤其是对于目标用户位于中国大陆的企业而言。 客户支持 查看提供商是否提供24/7的客户支持&#x…...

安卓Android JAVA校招/实习面试合集:多线程、强软弱虚引用、进程、内存管理、Activity、Fragment......

本人今年&#xff08;2023年&#xff09;参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料。 整理成了面试系列&#xff0c;由于时间有限&#xff0c;每天整理一点&#xff0c;后续会陆续分享出来&a…...

Jeecgboot 字典值自动转化:DictAspect类方法改造,支持IPage、List、Object、Map类自动转化,附有源码

改造的是DictAspect类&#xff1a; 原来使用的 parseDictText(Object result)方法&#xff0c;针对返回对象为Result 的IPage的分页列表数据进行动态字典注入&#xff0c;当单个对象查询&#xff0c;列表查询&#xff0c;或者多个数据放到Map中时&#xff0c;就不会自动转化&am…...

DVWA DOM Based Cross Site Scripting (DOM型 XSS)

DVWA DOM Based Cross Site Scripting (DOM型 XSS) 文章目录 DVWA DOM Based Cross Site Scripting (DOM型 XSS)XSS跨站原理DOM型 LowMediumHighImpossible XSS跨站原理 当应用程序发送给浏览器的页面中包含用户提交的数据&#xff0c;但没有经过适当验证或转义时&#xff0c;就…...

LinkedList集合及迭代器的源码分析

一.介绍: 二.LinkedList集合特有的API: 三.迭代器的源码分析: package com.itheima.a03myarraylist;import java.util.ArrayList; import java.util.Iterator;public class A01_ArrayListDemo1 {public static void main(String[] args) {ArrayList<String> listnew Arr…...