泷羽sec学习打卡-云技术基础1-docker

embedded/2024/11/19 12:00:26/

声明
学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负


关于云技术基础的那些事儿-Base1

    • 一、云技术基础
      • 什么是云架构?
      • 什么是云服务?
      • 什么是云分类?
      • 共享责任模型
      • 云架构使用什么技术?
      • 集成部署有什么作用?
      • 云设计模式由有哪些?
      • 安全控制有哪些方式?
      • 容器与云
    • 搭建属于自己的容器--Docker
      • 什么是docker呢?
      • 为什么不用kail搭建docker容器
      • 在 Ubuntu 上安装docker有哪些方式呢?
        • 1、 前置条件
        • 2、卸载旧版本
        • 3、开始安装 Docker
    • 如何使用apt安装docker呢?
      • 使用 APT 安装(推荐方式)
      • 通过 .deb 包手动安装
      • 使用脚本自动安装 Docker
      • 测试docker是否安装成功
      • 在Ubuntu中安装加速器
      • 容器的真相
      • Linux中的命名空间详解
      • docker中有命名空间吗?docke用什么配置文件限制访问呢?
    • 实践是检验真理的唯一标准


在过去,搭建一个应用程序可真是个大工程。得去购买服务器,租赁机房,进行安装、上架,还得拧螺丝、接网线。但如今,情况大不相同啦。现在很多基础设施都已经云化了。我们可以直接找像阿里云、腾讯云这样的云服务器厂家,购买一些云服务器,短短几分钟就能申请下来。基于这些云服务器,我们可以轻松地进行各种各样的应用部署。

一、云技术基础

什么是云架构?

不管是防御系统还过是进攻系统,强大的底层技术基础都是必不可少的。

从防御的角度来看,只有了解底层技术,我们才能知道如何构建防御体系。从进攻的角度讲,了解底层技术才能发现漏洞并开发出漏洞利用的方法。所以呢,攻击者和防御者都必须清楚对方的运作方式。

以前构建系统的时候,需要购买设备、租用数据中心机柜,然后搭建基础设施。随着处理器的不断进化,虚拟机出现了。它能把一台机器的资源分成多台机器来使用,提高了资源利用率,变得更加灵活可拓展,实现了从裸机基础设施到虚拟化基础设施的转变。接着,容器化技术登场,进一步提高了效率,实现了服务器、网络和存储的虚拟交付。现在,我们把最新一代的基础设施称为“云”,它可不是单一的技术哦,而是众多技术的集合。

什么是云服务?

云是一种 IT 基础设施系统,它将资源的创建抽象在容错、地理分布和可扩展的物理基础设施之上。并以服务器的形式按需求交付能力,非常易于使用,可以自动创建服务器、存储、网络等等。云基础架构必须稳定,不能频繁出现中断。地理分布的云基础设施能够提高容错能力,而且云必须能够快速扩展,以满足各种需求。

有很多公有云服务商,比如 Amazon Web Services(AWS)、Azure、Google(GCP),还有华为云、腾讯云、阿里云等等。组织可以使用 OpenStack 等工具在自己的数据中心搭建私有云,或者一部分业务运行在私有云中,一部分运行在公有云中。

什么是云分类?

  1. 基础设施即服务(IaaS):就像提供建筑材料和工具,让你可以自己搭建房子。
  2. 平台即服务(PaaS):类似有了基本框架的房子,你只需进行装修和布置。
  3. 软件即服务(SaaS):直接给你一个装修好可以直接入住的房子。

共享责任模型

云服务在提供容错和扩展的同时,也在不同层面增加了安全性的模糊性。如果是 AWS 程序漏洞导致大量数据泄露,AWS 不承担责任。但如果 AWS 数据中心物理安全遭到破坏,客户数据被盗取,AWS 就得承担责任。

云架构使用什么技术?

  1. 虚拟化:把一台机器的资源分成多台虚拟机器,多台裸机汇集形成资源集群,隔离资源的使用,灵活且可扩展资源池。它抽象了硬件安装过程,但仍有改进空间,并非专为云而生。技术栈的灵活性和可定制性提升,促使了容器的出现。
  2. 容器容器就像一个个独立的小空间,允许开发人员与堆栈各部分灵活交互,实现按需生成服务,提高网络抽象程度,方便应用迁移扩展,更高效地使用资源。系统管理和网络工程可以外包给其他公司。云是多种技术的集合。
  3. 组件选择:确定架构(这很难改),选择绑定或非绑定组件,可以自己开发、用开源的或者购买。云原生组件是为分布式系统设计的,CNCF 认证不是必须的,要安全编码,部分是开源的。
  4. 基础设施即代码(IaC):包括引导介质(Packer)、安装系统(Terraform)、自动配置(Ansible)、状态强制(Monit)。

集成部署有什么作用?

使用持续集成和持续交付(CICD)管道来构建环境,包括测试、测量和扫描代码更改的自动化测试和部署(GitOps)。要做到有弹性可靠,即任何单点故障都有故障转移或其他机制,让业务能持续提供(这叫冗余)。全球负载均衡(GSLB,比如智能 DNS、GTM)能解决客户单访问的单点故障隐患。还要平衡控制,控制保护系统免受漏洞和内部攻击的组件,应平衡控制和可用性。

云设计模式由有哪些?

云架构设计不必从头开始,采用已检验的设计模式是最佳选择。

  1. 微服务架构:为松散耦合、模块化服务而设计,微服务协同工作完成整体服务。每个服务都可以独立修改代码和重用,提高系统整体弹性和容错。大多数云利用微服务架构,云原生应用被构建充当微服务,便于水平扩展。安全优势是每个微服务应用强化、隔离,单一服务漏洞对整体系统影响小。缺点是调试更复杂,需要跨不同服务跟踪事务;性能可能有短板。
  2. 零信任架构:对资源的每个请求都需要验证来源已授权,然后授权短期访问(用令牌)。实现零信任架构的一种常见方法是 Open ID Connect(OIDC)联盟访问。授权处于活动状态时可以访问任何联合内服务。密码重置是针对零信任架构的常见攻击方式。

安全控制有哪些方式?

  1. 网络控制:传统架构用防火墙实现网络控制,云环境网络抽象为 SDN、SD WAN。SDN 可以对不同的接口(如 API 或 GUI)设置网络规则。通过 mTLS 不仅能加密流量,还能对客户端进行身份验证,有证书才能访问微服务。不正确的访问管理可导致权限提升,甚至破坏整个基础设施。现代访问管理系统多使用令牌进行访问控制,提供对服务的短时访问权。JWT 通常用于访问云端资源,伪造和破解密码是常见攻击手段。另一种类型的权限控制机制是强制访问控制 MAC。
  2. 身份管理:企业通常用 AD、LDAP 进行身份管理。AWS IAM 是身份和访问管理的公共云服务。Google 联盟认证 OIDC 经常用于 2FA。云身份提供者(IdP)作为真实身份来源,是更安全的解决方案,比如 Azure AD。

容器与云

虚拟化中每个 VM 需要运行自己的操作系统,大大增加了总体开销。容器化是更现代的架构,容器共享内核与硬件,更快、更小、更高效。容器是对虚拟化的补充,而非取代。容器的系统开销更小,可以进一步分离应用组件,比如搜索、登录、查询、订单功能分开。容器使用映像作为模板生成,映像相当于计算机硬盘。容器使用不同发行版文件加载内核,运行容器

搭建属于自己的容器–Docker

这里的我选择使用ubuntu搭建docker容器

docker_47">什么是docker呢?

Docker 是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

以下是 Docker 的一些关键特性和概念:

容器化(Containerization)
Docker 使用容器来隔离应用和环境,这与传统的虚拟化技术不同,容器共享宿主机的操作系统内核,但提供隔离的用户空间。
镜像(Images):
Docker 镜像是一个轻量级、可执行的软件包,包含了运行应用所需的代码、运行时、系统工具、系统库和设置。镜像是创建 Docker 容器的基础。
容器(Containers)
容器是镜像的运行实例。容器可以被创建、启动、停止、删除等。每个容器都是独立的,并且与其他容器隔离。
Dockerfile:
Dockerfile 是一个文本文件,包含了一系列的指令和参数,用于自动构建 Docker 镜像。
Docker 客户端和守护进程:
Docker 使用客户端-守护进程架构。Docker 守护进程(dockerd)运行在宿主机上,管理 Docker 对象,如镜像、容器、网络和卷。Docker 客户端(docker)是用户用来与守护进程交互的命令行工具。
Docker 仓库(Registries):
Docker 仓库用于存放 Docker 镜像。最知名的公共仓库是 Docker Hub,用户可以上传(push)和下载(pull)镜像。企业也可以搭建私有仓库。
Docker 网络(Networking)
Docker 提供了网络功能,允许容器之间以及容器与外部世界之间进行通信。Docker 支持多种网络配置,包括桥接网络、覆盖网络和自定义网络。
Docker 卷(Volumes)
Docker 卷是一种数据持久化机制,允许数据在容器之间共享,以及在容器和宿主机之间共享。卷独立于容器的生命周期,即使容器被删除,卷中的数据也不会丢失。
Docker Compose:
Docker Compose 是一个工具,用于定义和运行多容器 Docker 应用程序。使用 YAML 文件来配置应用程序的服务,然后使用一个简单的命令 docker-compose up 来启动和停止所有服务。
安全性:
Docker 提供了多种安全特性,包括内核能力、AppArmor、Seccomp、用户命名空间等,以确保容器的安全性。
可移植性:
Docker 容器可以在多种环境中运行,包括物理机、虚拟机、数据中心和云平台。
轻量级:
由于容器共享宿主机的内核,因此启动速度快,资源占用少。

docker_76">为什么不用kail搭建docker容器

因为kail是secure的系统,镜像很大,工具众多,ubuntu系统稳定,但是容器还是得centos7真正的稳定,后面我将搭建一些网恋避险的网站,使用就是云服务器中的centos7。这个嘛就后续分享,现在我们继续搭建docker容器,后续咱学习Kubernetes 容器,Podman容器容器有很多,咱会其中几个即可,就像数据库一样,学到就用到。

docker_78">在 Ubuntu 上安装docker有哪些方式呢?

在 Ubuntu 上生成 CentOS 7 容器,可以使用 Docker 这个流行的容器化工具。步骤如下:
注意:如果时用的虚拟机记得网卡选择桥接,不然就需要配置dns,比较繁琐,

1、 前置条件

操作系统要求
Docker 支持以下版本的 Ubuntu 64 位操作系统:

  • Ubuntu Jammy 22.04 (LTS)
  • Ubuntu Impish 21.10
  • Ubuntu Focal 20.04 (LTS)
  • Ubuntu Bionic 18.04 (LTS)
  • CPU 架构要求:x86_64 (或 amd64), armhf, arm64, 和 s390x 均支持 Docker 安装。
2、卸载旧版本

如果你之前安装过老版本的 Docker , 请先执行如下面命令卸载:

sudo apt-get remove docker docker-engine docker.io containerd runc

这里我未安装,所以也就不存咋卸载一说
在这里插入图片描述

3、开始安装 Docker

Ubuntu 支持如下几种方法安装 Docker:
通过 apt 安装,后续升级更方便(推荐方法);
手动下载 .deb 包安装,完全手动管理升级;
使用脚本自动安装 Docker, 适用于测试、开发环境中;
一般来说,选择使用apt安装方便且实用快捷

docker_103">如何使用apt安装docker呢?

使用 APT 安装(推荐方式)

1、更新 apt 包索引:

sudo apt-get update

在这里插入图片描述
2、由于 apt 源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们需要添加使用 HTTPS 传输的软件包以及 CA 证书。

sudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg \lsb-release

在这里插入图片描述

注意:这里安装的时候若是在终端中安装,那不需要换行符\,若是通过vim编辑后执行,则需要换行,额外空间yes即可
3、为了确认所下载软件包的合法性,需要添加 Docker 的 GPG 密钥,为了确保下载速度,走的国内源,注释的为国外源

sudo mkdir -p /etc/apt/keyrings
# 国内源
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 官方源
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

这里我选择用国内源,国外的源下载太慢了,当然也可以直接编辑源为一个vim文件进行执行
在这里插入图片描述
设置国内镜像源:你可以配置 Docker 使用国内的镜像源,比如阿里云的镜像源,以加速镜像的拉取。创建或编辑 /etc/docker/daemon.json 文件
具体的源url如下:
注意:这里的源文件时是非常重要的,其他源可能报错无法访问,毕竟ubuntu的服务器在国外。ubuntu比较坑,没有vim
使用命令:apt install vim
在这里插入图片描述
是不是不想手动敲,学会信息收集,ubuntu是无法从主机复制路径的噢,相信大家会信息收集到解决方式的,winscp,vm tools也可以。

在这里插入图片描述

再次强调,没有源,是无法访问docker 的hello world镜像的噢
4、向 sources.list 中添加 Docker 软件源

echo \"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 官方源
#  echo \
#   "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
#   $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

在这里插入图片描述
5、安装 Docker
更新 apt 软件包索引,安装最新版本的 Docker Engine、containerd 和 Docker Compose:

 sudo apt-get updatesudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

在这里插入图片描述
在这里插入图片描述
选择yes即可
在这里插入图片描述
到这里也就安装完成了
在这里插入图片描述
注意: 运行 apt-get update 报 GPG 错误?
​ 你默认的 umask 可能设置不正确,导致无法检测到 repo 的公钥文件。运行以下命令,然后再次尝试更新 apt 索引:sudo chmod a+r /etc/apt/keyrings/docker.gpg

6、如何安装指定版本的 Docker ?
要想安装特定版本的 Docker, 需要先获取 repo 中可用的版本号,然后再安装:

apt-cache madison docker-ce
docker-ce | 5:20.10.16~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:20.10.15~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:20.10.14~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:20.10.13~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages

第二列中显示的即为版本号,如5:20.10.163-0ubuntu-jammy.

sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io docker-compose-plugin

通过 .deb 包手动安装

如果你无法通过 apt 安装 Docker, 还可以手动下载指定版本的 .deb 包来安装。注意,每次升级时,同样需要下载一个新的 .deb 包。

1、访问 https://download.docker.com/linux/ubuntu/dists/ , 选择你的 Ubuntu 版本,然后进入 pool/stable/, 选择对应的 CPU 架构: amd64、 armhf、arm64s390x,下载.deb 安装包。
安装 Docker, 将下面的路径更改为你下载的 .deb 包路径:

sudo dpkg -i /path/to/package.deb

使用脚本自动安装 Docker

在测试或开发环境中, Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,Ubuntu 系统上可以使用这套脚本安装,另外可以通过 --mirror 选项使用国内源进行安装:

curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun

若你想安装测试版的 Docker, 可以从 test.docker.com 获取脚本后再执行它:

$ curl -fsSL test.docker.com -o get-docker.sh

执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker 的稳定(stable)版本安装在 Ubuntu 系统中。

docker_204">测试docker是否安装成功

1、启动 Docker

# 设置 Docker 服务开机自动启动
sudo systemctl enable docker
# 启动 Docker 服务
sudo systemctl start docker

2、建立 Docker 用户组
默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。
出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。

sudo groupadd docker
  • 将当前用户加入 docker 组:
sudo usermod -aG docker $USER

在这里插入图片描述

  • 验证 Docker 是否安装成功
    运行 Docker 并打印 hello-world:
sudo docker run hello-world

在这里插入图片描述
此命令会下载测试镜像,并基于此镜像运行容器,然后在打印 hello-world 后退出容器。若成功打印信息,表示 Docker 安装成功。

当然docker的使用还未真正开始
具体的使用手册,大家可以学习如下
:学会使用docker

在Ubuntu中安装加速器

  1. 安装/升级 Docker 客户端
    推荐安装 1.10.0 以上版本的 Docker 客户端,参考文档 docker-ce
  2. 配置镜像加速器
    针对 Docker 客户端版本大于 1.10.0 的用户
    您可以通过修改 daemon 配置文件 /etc/docker/daemon.json 来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

创建 Apache 容器后台运行:“docker container run -d --rm -p 8080:80 httpd”。

在这里插入图片描述

常用命令:

在这里插入图片描述

  • docker exe -it 899 /bin/bash”:进入特定容器
    首先需要知道容器id:
    列出所有容器(包括未运行的): docker ps -a
    在这里插入图片描述
    列出正在运行的容器docker ps
    在这里插入图片描述
    进入特定 docker exec -it [id] /bin/bash
    通过docker ps 就可以获取到容器的id
    在这里插入图片描述
    容器还有很多的命令,容器docker的命令很多,大家自行学习和了解,也可以在官方文档上进行学习
    容器要学的东西很多,一时半会是写不完的,咱现在就先了解下,后面慢慢再来系统的学习docker
    Podman 是 Docker 的替代产品,无守护进程。
  • sudo podman run -d --r-m --network host httpd”:运行容器
  • podman pod create --name wha”:创建空 pod。
  • podman run -d --pod wha httpd”:在 pod 中运行容器
  • podman run -pod wha -it alpine/curl /bin/asho”:在 pod 中运行可找东西的工具并互动。

大部分容器化过程都采用开放容器计划(OCI)标准,所以 Podman 和 Docker 可互操作。

容器的真相

Linux 没有单一被称为“容器”的特性。实际上,“容器”是阻止进程访问其他进程和资源的特性组合,发生在内核级别,可以控制其限制级别。
容器的历史:

  • 197x 年代引入 chroot,可以指示进程的新根目录,但不完美。命名空间可实现每个进程分离网络、进程和其他命名空间。
  • 1999 年 FreeBSD 发布 Jails,在 chroot 之上提供更多限制(Linux 不支持)。
  • 2002 年引入命名空间,分离内核资源。
  • 2006 年谷歌引入进程容器,后被称为 cgroup,可限制特定进程的内存和 CPU 资源。结合 cgroup 和命名空间发布了 Linux 容器(LXC)项目。

Linux 中有八种用户命名空间:挂载、进程 ID、网络、进程间通信、UTS、用户 ID、控制组、时间、syslog。

Linux中的命名空间详解

在Linux操作系统中,命名空间(namespaces)是一种内核级别的特性,用于将系统资源隔离开来,使得在不同命名空间中的进程看到不同的系统视图。Linux提供了多种类型的命名空间,每种都隔离了不同的系统资源。以下是一些常用的Linux命名空间:

Mount Namespace(挂载命名空间)

用于隔离文件系统挂载点。在不同的挂载命名空间中,可以有不同的挂载点和文件系统结构。
UTS Namespace(UNIX Time-Sharing System Namespace)

用于隔离网络主机名和域名。在不同的UTS命名空间中,可以有不同的主机名和NIS域名。
IPC Namespace(进程间通信命名空间)

用于隔离进程间通信设施,如System V IPC、POSIX消息队列等。
Network Namespace(网络命名空间)

用于隔离网络设备、网络栈、端口等网络资源。在不同的网络命名空间中,可以有不同的网络配置和网络接口。
PID Namespace(进程ID命名空间)

用于隔离进程编号。在不同的PID命名空间中,进程ID是独立的,一个进程在不同的命名空间中可以有不同的PID。
User Namespace(用户命名空间)

用于隔离用户和组ID。在不同的用户命名空间中,可以有不同的用户和组ID映射。
Cgroup Namespace(控制组命名空间)

用于隔离控制组层次结构,允许对资源进行更细粒度的控制。
Time Namespace(时间命名空间)

用于隔离系统时间。在不同的时间命名空间中,可以有不同的时钟和定时器。
Signal Namespace(信号命名空间)

用于隔离信号的发送和接收。

dockerdocke_323">docker中有命名空间吗?docke用什么配置文件限制访问呢?

Docker 默认不使用用户命名空间。为防止特权内核调用,它使用内核 capabilities 和 seccomp 配置文件限制访问。Linux 有特权或非特权进程。非特权进程有正确权限可写入系统文件,特权进程几乎无所不能。当非特权用户只需要特殊权限时,可使用 Capabilities。Linux 将一些系统级任务分组为 40 多个类别,称为 Capabilities。
常见 Capabilities:

  • CAP_CHOWN:允许进程修改文件所有者。
  • CAP_NET_ADMIN:对网络配置执行管理任务。
  • CAP_NET_BIND_SERVICE:允许绑定低于 1024 的端口。
  • CAP_NET_RAW:允许使用 RAW 套接字。
  • CAP_SYS_ADMIN:“根”权限(危险),启用过多功能集。
  • CAP_SYS_BOOT:允许重新启动主机。
  • CAP_SYS_MODULE:允许加载和卸载内核模块。
  • CAP_SYS_TIME:允许进程设置系统时钟。
  • CAP_SYS_CHROOT:允许使用 chroot。
  • CAP_AUDIT_WRITE:允许写入内核审计日志。
    提升工具权限有隐患,可能被恶意用户利用,破坏系统、窃取敏感信息或完全控制整个系统。

通过docker中的内核capabilities ,我们知道一般来说docker中都是非特权的进程,不同的进程执行也是需要排队的,故提升权限是很重要的,可以使用常见的Capabilities参数进行提权。这不仅仅在渗透中很有用,在实际搭建靶场和网站时也是非常有用的。

实践是检验真理的唯一标准


http://www.ppmy.cn/embedded/138759.html

相关文章

GSMA eUICC 远程配置架构技术规范笔记 (SGP.02 v3.2)

## GSMA eUICC 远程配置架构技术规范笔记 (SGP.02 v3.2) ### 1. 概述 **目的&#xff1a;** 为难以接触的机器对机器设备中的嵌入式 UICC (eUICC) 提供远程配置和管理的技术解决方案&#xff0c;确保不同运营商、设备和网络基础设施供应商之间的全球互操作性。 **目标受众&…

03-axios常用的请求方法、axios错误处理

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

华为ID机试 -- 分糖果 E100

题目描述 小明从糖果盒中随意抓一把糖果&#xff0c;每次小明会取出一半的糖果分给同学们。 当糖果不能 平均分配只时&#xff0c;小明可以选择从糖果盒中(假设盒中糖果足够)取出一个糖果或放回一个糖果。 小明最少需要多少次(取出、放回和平均分配均记一次)&#xff0c;能将…

ChatGPT:编程的 “蜜糖” 还是 “砒霜”?告别依赖,拥抱自主编程的秘籍在此!

在当今编程界&#xff0c;ChatGPT 就像一颗耀眼却又颇具争议的新星&#xff0c;它对编程有着不可忽视的影响。但这影响就像一把双刃剑&#xff0c;使用不当&#xff0c;就可能让我们在编程之路上“受伤”。 一、过度依赖 ChatGPT 编程&#xff1a;黑暗深渊里的重重危机 1、个…

室内定位论文精华-无人机与机器人在地下与室内环境中的自主导航与定位新技术

天文导航算法在低成本视觉系统中的应用 关键词 天文导航;自主无人机;GNSS拒止环境;稳定成像系统;星图识别;姿态估计;位置估算 研究问题 现代无人驾驶飞行器(UAV)中,很少使用天文学导航技术。传统的天文学导航依赖于稳定的成像系统,这不仅体积大且重量重,难以满足…

arkUI:设置随机颜色背景

arkUI&#xff1a;设置随机颜色背景 1 主要内容说明2 相关内容2.1 设置随机颜色背景2.1.1 源码1的相关说明2.1.2 源码1 &#xff08;设置随机颜色背景&#xff09;2.1.3 源码1运行效果 3.结语4.定位日期 1 主要内容说明 本文代码实现了一个展示随机颜色的页面&#xff0c;主要…

kubeadm安装k8s

kubeadm安装k8s 环境配置 主节点 k8s-master :4核8G、40GB硬盘、CentOS7.9 从节点 k8s-node1: 4核8G、40GB硬盘、CentOS7.9 从节点 k8s-node2: 4核8G、40GB硬盘、CentOS7.9 初始化配置 关闭selinux、swap # 关闭 Selinux:防止服务可能无法启动(企业中基本上都会选择关闭)…

【鸿蒙开发】第十九章 Media媒体服务 --- 音频播放和录制

目录 1 AVPlayer音频播放 1.1 开发步骤及注意事项 1.2 完整示例 2 SoundPool音频播放 2.1 开发步骤及注意事项 2.2 完整示例 3 AVRecorder音频录制 3.1 开发步骤及注意事项 3.2 完整示例 4 音视频元数据获取 4.1 开发步骤及注意事项 4.2 完整示例 1 AVPlayer音频播…