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

Docker和K8s面试题

1.Docker底层依托于linux怎么实现资源隔离的?

基于Namespace的视图隔离:Docker利用Linux命名空间(Namespace)来实现不同容器之间的隔离。每个容器都运行在自己的一组命名空间中、包括PID(进程)、网络、挂载点、IPC(进程间通信)等。这样容器中的进程只能看到自己所在命名空间内的进程、而不会影响其他容器中的进程。

基于cgroups的资源隔离:cgroups是Linux内核的一个功能、允许在进程组之间分配、限制和优先处理系统资源、如CPU、内存和磁盘I/O。它们提供了一种机制、用于管理和隔离进程集合的资源使用、有助于资源限制、工作负载隔离以及在不同进程组之间进行资源优先处理。

在这里插入图片描述

2.Docker的工作原理是什么

docker是一个Client-Server结构的系统、docker守护进程运行在宿主机上、守护进程从客户端接受命令并管理运行在主机上的容器。容器是一个运行时环境、这就是我们说的集装箱。

3.Docker的组成包含哪几大部分

一个完整的Docker有以下几个部分组成:
docker client:客户端、为用户提供一系列可执行命令、用户用这些命令实现跟docker daemon交互

docker daemon:守护进程、一般在宿主主机后台运行、等待接收来自客户端的请求消息;

docker image:镜像、镜像run之后就生成为docker容器

docker container:容器、一个系统级别的服务、拥有自己的IP和系统目录结构。运行容器前需要本地存在对应的镜像、如果本地不存在该镜像则就去镜像仓库下载。

docker 使用客户端-服务器(C/S)架构模式、使用远程api来管理和创建docker容器。docker 容器通过docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

4.Docker与传统虚拟机的区别什么?

传统虚拟机是需要安装整个操作系统的、然后再在上面安装业务应用、启动应用、通常需要几分钟去启动应用。而docker是直接使用镜像来运行业务容器的。传统虚拟机自带一个完整操作系统、而容器本身不带完整操作系统、容器的基础镜像实际上只包含了操作系统的核心依赖库和配置文件等必要组件。Docker 容器本质上只是个自带独立运行环境的特殊进程、底层用的其实是宿主机

Docker需要的资源更少。Docker在操作系统级别进行虚拟化、Docker容器和内核交互、几乎没有性能损耗,而虚拟机运行着整个操作系统、占用物理机的资源就比较多;

Docker更轻量:Docker的架构可以共用一个内核与其应用程序库、所占内存极小。同样的硬件环境、Docker运行的镜像数远多于虚拟机数量、对系统的利用率非常高;

与虚拟机相比:Docker隔离性更弱、Docker属于进程之间的隔离、虚拟机可实现系统级别隔离

Docker的安全性也更弱、Docker的租户root和宿主机root相同、一旦容器内的用户从普通用户权限提升为root权限、它就直接具备了宿主机的root权限,进而可进行无限制的操作。虚拟机租户root权限和宿主机的root虚拟机权限是分离的、并且虚拟机利用如intel的VT-d和VT-x等硬件隔离技术、这种技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式的硬件隔离;

Docker的集中化管理工具还不算成熟、各种虚拟化技术都有成熟的管理工具。比如:VMWare vCenter提供完备的虚拟机管理能力

Docker对业务的高可用支持是通过快速重新部署实现的、虚拟化具备负载均衡,高可用、容错、迁移和数据保护等经过生产实践检验的成熟保障机制、VMware可承诺虚拟机99.999%高可用、保证业务连续性

虚拟化创建是分钟级别的、Docker容器创建是秒级别的、Docker的快速迭代性,决定了无论是开发、测试、部署都可以节省大量时间;

虚拟机可以通过镜像实现环境交付的一致性、但镜像分发无法体系化、Docker在Dockerfile中记录了容器构建过程、可在集群中实现快速分发和快速部署。

总结:

传统虚拟机是需要安装整个操作系统的、然后再在上面安装业务应用、启动应用、通常需要几分钟去启动应用。而docker是直接使用镜像来运行业务容器的。传统虚拟机自带一个完整操作系统、而容器本身不带完整操作系统、容器的基础镜像实际上只包含了操作系统的核心依赖库和配置文件等必要组件。Docker 容器本质上只是个自带独立运行环境的特殊进程、底层用的其实是宿主机

Docker资源占用少,启动速度快,隔离性更弱但安全性更高。

Docker的集中化管理工具不成熟,但创建和部署速度快。

5.Docker技术的三大核心概念是什么?

镜像:镜像是一种轻量级、可执行的独立软件包、它包含运行某个软件所需的所有内容、我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等)、这个打包好的运行环境就是image镜像文件

容器:容器是基于镜像创建的、是镜像运行起来之后的一个实例、容器才是真正运行业务程序的地方。如果把镜像比作程序里面的类、那么容器就是对象。

镜像仓库:存放镜像的地方、研发工程师打包好镜像之后需要把镜像上传到镜像仓库中去、然后就可以运行有仓库权限的人拉取镜像来运行容器了

6.简单描述一下Dockerfile的整个构建镜像过程

首先创建一个目录用于存放应用程序以及构建过程中使用到的各个文件等

然后在这个目录下创建一个Dockerfile文件、一般建议Dockerfile的文件名就是Dockerfile

编写Dockerfile文件、编写指令,如使用FROM指令指定基础镜像、COPY指令复制文件、RUN指令指定要运行的命令、ENV设置环境变量、EXPOSE指定容器要暴露的端口、WORKDIR设置当前工作目录、CMD容器启动时运行命令、等等指令构建镜像;

Dockerfile编写完成就可以构建镜像了、使用 docker build -t 镜像名:tag .命令来构建镜像、最后一个点是表示当前目录、docker会默认寻找当前目录下的Dockerfile文件来构建镜像。如果不使用默认、可以使用-f 参数来指定dockerfile文件、如:docker build -t 镜像名:tag -f /xx/xxx/Dockerfile;

使用 docker build 命令构建之后、docker就会将当前目录下所有的文件发送给docker daemon、顺序执行Dockerfile文件里的指令、在这过程中会生成临时容器、在临时容器里面安装RUN指定的命令、安装成功后、docker底层会使用类似于docker commit 命令来将容器保存为镜像、然后删除临时容器、以此类推、一层层的构建镜像、运行临时容器安装软件、直到最后的镜像构建成功

总结:简单描述一下Dockerfile的整个构建镜像过程

创建目录和Dockerfile文件。

编写Dockerfile指令,如FROM、COPY、RUN、ENV、EXPOSE、WORKDIR、CMD。

使用docker build命令构建镜像。

使用docker run命令运行容器。

7.Dockerfile构建镜像出现异常如何排查?

首先Dockerfile是一层一层的构建镜像、期间会产生一个或多个临时容器、构建过程中其实就是在临时容器里面安装应用、如果因为临时容器安装应用出现异常导致镜像构建失败、这时容器虽然被清理掉了、但是期间构建的中间镜像还在、那么我们可以根据异常时上一层已经构建好的临时镜像、将临时镜像运行为容器、然后在容器里面运行安装命令找出具体的异常

总结:

Dockerfile是一层一层构建镜像、期间会产生临时容器。

如果构建失败、可以查看上一层构建好的临时镜像、运行容器并检查具体异常。

8.Dockerfile的基本指令有哪些?

FROM 指定基础镜像(必须为第一个指令、因为需要指定使用哪个基础镜像来构建镜像);

MAINTAINER 设置镜像作者相关信息,如作者名字、日期、邮件、联系方式等;

COPY 复制文件到镜像

ADD 复制文件到镜像(ADD 与 COPY 的区别在于、ADD 会自动解压tar、zip、tgz、xz等归档文件、而 COPY 不会。同时 ADD 指令还可以接一个url下载文件地址、一般建议使用COPY复制文件即可、文件在宿主机上是什么样子复制到镜像里面就是什么样子这样子这样比较好);

ENV 设置环境变量

EXPOSE 暴露容器进程的端口、仅仅是提示别人容器使用的哪个端口、没有过多作用

VOLUME 数据卷持久化、挂载一个目录

WORKDIR 设置工作目录、如果目录不在、则会自动创建目录

RUN 在容器中运行命令、RUN 指令会创建新的镜像层、RUN 指令经常被用于安装软件包

CMD 指定容器启动时默认运行哪些命令、如果有多个 CMD、则只有最后一个生效。另外CMD 指令可以被 docker run 之后的参数替换

ENTRYPOINT 指定容器启动时运行哪些命令、如果有多个 ENTRYPOINT、则只有最后一个生效。另外如果 Dockerfile中同时存在 CMD 和 ENTRYPOINT、那么 CMD 或 docker run 之后的参数将被当做参数传递给 ENTRYPOINT

总结:Dockerfile的基本指令有哪些?

FROM:指定基础镜像。

MAINTAINER:设置镜像作者信息。

COPY:复制文件到镜像。

ADD:复制文件并解压。

ENV:设置环境变量。

EXPOSE:暴露容器端口。

VOLUME:数据卷持久化。

WORKDIR:设置工作目录。

RUN:在容器中运行命令。

CMD:指定容器启动时默认运行命令。

ENTRYPOINT:指定容器启动时运行命令。

9.如何进入容器?使用哪个命令

进入容器有两种方法:使用docker attach或docker exec命令进入容器。

docker attach是attach到容器启动命令的终端。

docker exec是在容器内启动一个新的TTY终端。

🌟🌟🌟K8s面试题😊😊😊😊

10.什么是k8s?说出你的理解

K8s是kubernetes的简称、其本质是一个开源的容器编排系统、主要用于管理容器化的应用、其目标是让部署容器化的应用简单并且高效(powerful)。Kubernetes提供了应用部署、规划、更新、维护的一种机制。

说简单点:K8s就是一个编排容器的系统、一个它可以管理容器应用全生命周期的工具、从创建应用、应用的部署、应用提供服务、扩容缩容应用、应用更新、都非常的方便、而且还可以做到故障自愈

所以K8s是一个非常强大的容器编排系统

11.k8s中命名空间的作用是什么?

namespace是kubernetes系统中的一种非常重要的资源,namespace的主要作用是用来实现多套环境的资源隔离、或者说是多租户的资源隔离。

k8s通过将集群内部的资源分配到不同的namespace中、可以形成逻辑上的隔离、以方便不同的资源进行隔离使用和管理。不同的命名空间可以存在同名的资源、命名空间为资源提供了一个作用域

可以通过k8s的授权机制、将不同的namespace交给不同的租户进行管理、这样就实现了多租户的资源隔离、还可以结合集群的资源配额机制、限定不同的租户能占用的资源、例如CPU使用量、内存使用量等等来实现租户可用资源的管理

12.Pod是什么?

在kubernetes的世界中、k8s并不直接处理容器、而是使用多个容器共存的理念、这组容器就叫做Pod。

Pod是k8s中可以创建和管理的最小单元、是资源对象模型中由用户创建或部署的最小资源对象模型。其他的资源对象都是用来支撑pod对象功能的、比如pod控制器就是用来管理pod对象的、service或者ingress资源对象是用来暴露pod引用对象的、persistentvolume资源是为pod提供存储等等。

参考面试回答:

简而言之k8s不会直接处理容器、而是pod,Pod是k8s中可以创建和管理的最小单元、也是基本单元。包含一个或多个容器、这些容器共享网络和存储资源。

13.Pod的原理是什么?

在微服务的概念里、一般的一个容器会被设计为运行一个进程、除非进程本身产生了进程。

这样由于不能将多个进程聚集在同一个单独的容器中、所以需要一种更高级的结构将容器绑定在一起、并将它们作为一个单元进行管理。这就是k8s中pod的背后原理

Pod是一种结构为运行一个或多个进程、需要更高级的结构将容器绑定在一起进行管理。

14.Pod有什么特点?

每个pod就像一个独立的逻辑机器、k8s会为每个pod分配一个集群内部唯一的IP地址、所以每个pod都拥有自己的IP地址、主机名、进程等

一个pod可以包含1个或多个容器,1个容器一般被设计成只运行1个进程,1个pod只可能运行在单个节点上,即不可能1个pod跨节点运行,pod的生命周期是短暂,也就是说pod可能随时被消亡(如节点异常,pod异常等情况);

每一个pod都有一个特殊的被称为“根容器”的pause容器、也称init容器,pause容器对应的镜像属于K8s平台的一部分、除了pause容器,每个pod还包含一个或多个跑业务相关组件的应用容器;

一个pod中的容器共享network命名空间

一个pod里的多个容器共享pod IP,这就意味着1个pod里面的多个容器的进程所占用的端口不能相同,否则在这个pod里面就会产生端口冲突;既然每个pod都有自己的IP和端口空间,那么对不同的两个pod来说就不可能存在端口冲突;

应该将应用程序组织到多个pod中,而每个pod只包含紧密相关的组件或进程;

pod是K8s中扩容、缩容的基本单位、也就是说K8s中扩容缩容是针对pod而言而非容器

15.pause容器作用是什么

每个pod里运行着一个特殊的被称之为pause的容器,也称根容器,而其他容器则称为业务容器;创建pause容器主要是为了为业务容器提供Linux命名空间、共享基础:包括pid、icp、net等,以及启动init进程,并收割僵尸进程

这些业务容器共享pause容器的网络命名空间和volume挂载卷,当pod被创建时,pod首先会创建pause容器、从而把其他业务容器加入pause容器,从而让所有业务容器都在同一个命名空间中,这样可以实现网络共享。pod还可以共享存储,在pod级别引入数据卷volume,业务容器都可以挂载这个数据卷从而实现持久化存储。

16.Pod的重启策略有哪些?

pod重启容器策略是指针对pod内所有容器的重启策略、不是重启pod、其可以通过restartPolicy字段配置pod重启容器的策略。如下:

Always:当容器终止退出后、总是重启容器、默认策略就是Always

OnFailure:当容器异常退出、退出状态码非0时、才重启容器。

Never:当容器终止退出、不管退出状态码是什么、从不重启容器。

17.Pod的镜像拉取策略有哪几种?

pod镜像拉取策略可以通过imagePullPolicy字段配置镜像拉取策略、主要有3中镜像拉取策略。如下:

IfNotPresent:默认值、镜像在node节点宿主机上不存在时才拉取。

Always:总是重新拉取、即每次创建pod都会重新从镜像仓库拉取一次镜像。

Never:永远不会主动拉取镜像、仅使用本地镜像、需要你手动拉取镜像到node节点、如果node节点不存在镜像则pod启动失败

18.简单讲一下Pod创建过程

用户通过kubectl或其他api客户端工具提交需要创建的pod信息给apiserver

apiserver验证客户端的用户权限信息,验证通过开始处理创建请求生成pod对象信息、并将信息存入etcd,然后返回确认信息给客户端

apiserver开始反馈etcd中pod对象的变化,其他组件使用watch机制跟踪apiserver上的变动;

scheduler发现有新的pod对象要创建,开始调用内部算法机制为pod分配最佳的主机,并将结果信息更新至apiserver;

node节点上的kubelet通过watch机制跟踪apiserver发现有pod调度到本节点,尝试调用docker启动容器,并将结果反馈apiserver;

apiserver将收到的pod状态信息存入etcd中。

至此整个pod调度完成、创建完毕。

19.简单描述一下pod的终止过程

用户向apiserver发送删除pod对象的命令

apiserver中的pod对象信息会随着时间的推移而更新、在宽限期内(默认30s)、pod被视为dead

将pod标记为terminating状态

kubelet在监控到pod对象为terminating状态了就会启动pod关闭过程

endpoint控制器监控到pod对象的关闭行为时将其从所有匹配到此endpoint的server资源endpoint列表中删除

如果当前pod对象定义了PreStop钩子处理器、则在其被标记为terminating后会同步的方式启动执行;

pod对象中的容器进程收到停止信息;

宽限期结束后、若pod中还存在运行的进程、那么pod对象会收到立即终止的信息

kubelet请求apiserver将此pod资源的宽限期设置为0从而完成删除操作、此时pod对用户已不可见。

20.Pod的生命周期有哪几种

pod生命周期有5种状态(也称5种相位)如下:

Pending(挂起):API server已经创建pod、但是该pod还有一个或多个容器的镜像没有创建、包括正在下载镜像的过程

Running(运行中):Pod内所有的容器已经创建、且至少有一个容器处于运行状态、正在启动或正在重启状态

Succeeded(成功):Pod内所有容器均已退出、且不会再重启

Failed(失败):Pod内所有容器均已退出,且至少有一个容器为退出失败状态

Unknown(未知):某于某种原因apiserver无法获取该pod的状态、可能由于网络通行问题导致

相关文章:

Docker和K8s面试题

1.Docker底层依托于linux怎么实现资源隔离的? 基于Namespace的视图隔离:Docker利用Linux命名空间(Namespace)来实现不同容器之间的隔离。每个容器都运行在自己的一组命名空间中、包括PID(进程)、网络、挂载…...

shell--数组、正则表达式RE

1.数组 1.1定义 什么是数组? 数组也是一种变量,常规变量只能保存一个值,数组可以保存多个值 1.2 分类 普通数组:只能用整数作为数组的索引--0 下标 有序数组(普通数组):(index)索引(为整数,从0开始) 关联数组:可以使用字符串作为数组的索引 1.3 普通数组 引用: ec…...

java 使用 POI 为 word 文档自动生成书签

poi 版本&#xff1a;4.1.0 <properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><…...

redis+lua+固定窗口实现分布式限流

用key的过期时间替代固定窗口的时间戳 -- KEYS[1]: 限流的key -- ARGV[1]: 限流窗口大小&#xff08;秒&#xff09; -- ARGV[2]: 限流阈值local key KEYS[1] local window tonumber(ARGV[1]) local limit tonumber(ARGV[2])-- 尝试获取当前计数 local current redis.call…...

什么是SQL92标准,有什么特点和影响?

一、SQL92简介 SQL92标准是1992年由美国国家标准协会&#xff08;ANSI&#xff09;和国际标准化组织&#xff08;ISO&#xff09;联合制定的数据库语言标准&#xff0c;正式名称为"SQL&#xff1a;1992"或ISO/IEC 9075:1992。他是关系型数据库管理系统&#xff08;R…...

Flink Checkpoint 与实时任务高可用保障机制实战

在实时数仓体系中,数据一致性和任务稳定性是核心保障。本文围绕 Flink Checkpoint 机制,深入讲解高可用保障的最佳实践和工程实现。 一、业务背景与痛点 在金融风控、营销实时推荐、智能监控等场景中,实时数仓的每一条数据都至关重要。常见的业务痛点包括: 断点恢复困难:…...

WebRtc08:WebRtc信令服务器实现

如何使用socket.io发送消息 发送消息 // 给本次连接发送消息 socket.emit()// 给某个房间内所有人发送消息 io.in(room).emit()// 除了自己以外&#xff0c;给某个房间的所有人发消息 socket.to(room).emit();// 除本连接外&#xff0c;给所有人发消息 socket.broadcast.emit…...

基于 SpringBoot 与 Redis 的缓存预热案例

文章目录 “缓存预热” 是什么&#xff1f;项目环境搭建创建数据访问层预热数据到 Redis 中创建缓存服务类测试缓存预热 “缓存预热” 是什么&#xff1f; 缓存预热是一种优化策略&#xff0c;在系统启动或者流量高峰来临之前&#xff0c;将一些经常访问的数据提前加载到缓存中…...

Python对比两张CAD图并标记差异的解决方案

以下是使用Python对比两张CAD图并标记差异的解决方案&#xff0c;结合图像处理和CAD结构分析&#xff1a; 一、环境准备与库选择 图像处理库&#xff1a;使用OpenCV进行图像差异检测、颜色空间转换和轮廓分析。CAD解析库&#xff1a;若为DXF格式&#xff0c;使用ezdxf解析实体…...

LINUX427 冒险位 粘滞位 chmod 权限

为什么不同用户能查看的文件夹不同 思索 是因为不同文件夹的权限不同吗&#xff1f;感觉不是 权限不就是只有rwx权限吗&#xff1f; o 对对对 和0GU有关 O 组内的其他用户应该 O是其他用户 不是组内用户 文件创建应该设置了r权限 但是root为什么看到的好像不一样 root 这些…...

10 DPSK原始对话记录

10 DPSK原始对话记录 前言 编程之余,在 Vscode 的 Cline 插件界面中和 ai (dpsk v3-0324) 聊起了天,得到了一个有意思的回答。就像ai有自我意识一样。在此记录。 实际对话内容 时间范围:2025-04-27 23:37:22 - 23:44:17 对话模式:PLAN MODE [23:37:22] 用户提问 “你…...

实现一个瀑布流布局

1、纯CSS实现 实现方式&#xff1a;借助column-count属性来创建 4 列的布局&#xff0c;并使用 column-gap 设置列间距。每个 .img-container 使用 break-inside: avoid 来防止图片被分割。 来看一下完整的代码&#xff1a; <!DOCTYPE html> <html lang"en&qu…...

Linux:进程间通信->共享内存

1. 共享内存的概念 System V共享内存&#xff0c;是一个高效的进程间通信IPC机制&#xff0c;允许多个进程共享同一块物理内存区实现快速的数据交换。如下图所示 这两个进程分别通过页表映射到这一块共享内存中 2. 共享内存的函数 shmget 功能&#xff1a; 创建新的共享内存…...

《Crawl4AI 爬虫工具部署配置全攻略》

《Crawl4AI 爬虫工具部署配置全攻略》 摘要 &#xff1a;在数据驱动的智能时代&#xff0c;高效爬虫工具是获取信息的关键。本文将为你详细解析 Crawl4AI 的安装配置全流程&#xff0c;从基础设置到进阶优化&#xff0c;再到生产环境部署&#xff0c;结合实用技巧与常见问题解…...

spring框架学习(下)

这章节讲的主要是spring在生产Bean对象时的过程 Spring实例化对象的基本流程 1、解析bean.xml 2、封装成BeanDifinition类 3、存放到BeanDIfinitionMap里 4、从BeanDIfinitionMap遍历得到bean 5、将bean存放到SingletonObjects 6、调用getBean方法得到bean 以下是简易的…...

进程与线程-----C语言经典题目(8)

一.什么是进程 定义&#xff1a; 进程指的是程序在操作系统内的一次执行过程。它不只是程序代码&#xff0c;还涵盖了程序运行时的各类资源与状态信息。包括创建、调度、消亡。 进程的状态&#xff08;ps -aux&#xff09;&#xff1a; 就绪状态&#xff1a;进程已经…...

lstm用电量预测+网页可视化大屏

视频教学: 训练结果: 详细代码: import pandas as pd import numpy as np from sklearn.preprocessing import MinMaxScaler from sklearn.model_selection import train_test_split from tensorflow.keras.models import Sequential from tensorflow.keras.layers impo…...

linux blueZ 第六篇:嵌入式与工业级应用案例——在 Raspberry Pi、Yocto 与 Buildroot 上裁剪 BlueZ 并落地实战

本篇面向嵌入式与工业级应用场景,深入讲解如何在各类 Linux 构建系统(Raspberry Pi OS、Yocto、Buildroot)中裁剪、交叉编译与集成 BlueZ,以及在工业网关、资产追踪与蓝牙 Mesh 等典型方案中的落地实例与注意要点,帮助你打造稳定、可维护、低功耗的嵌入式蓝牙产品。 目录 …...

Dev控件RadioGroup 如何设置一排有N个显示或分为几行

1.5个选项 全部横排显示&#xff0c;则Columns 5 2.5个选项 每行分两个&#xff0c;则有三行&#xff0c;则Columns 2...

AOSP Android14 Launcher3——Launcher的状态介绍LauncherState类

Launcher3中有一个跟Launcher状态相关的类&#xff0c;叫LauncherState LauncherState 是 Launcher3 中定义各种用户界面状态的抽象基类。你可以把它想象成一个状态机&#xff0c;定义了 Launcher 可能处于的不同视觉和交互模式&#xff0c;例如主屏幕、所有应用列表、最近任务…...

Redis 笔记(三)-Redis 基本知识及五大数据类型

一、redis 基本知识 redis 默认有 16个 数据库&#xff0c;config get databases 查看数据库数量 127.0.0.1:6379> config get databases # 查看数据库数量 1) "databases" 2) "16"默认使用的是第 0个 16 个数据库为&#xff1a;DB 0 ~ DB 15&am…...

Linux——线程(2)线程互斥(锁)

知识回顾 在学习本篇内容前&#xff0c;我们需要先回顾一下几个概念。 临界资源&#xff1a;多线程执行流共享的资源就叫做临界资源 临界区&#xff1a;每个线程内部&#xff0c;访问临界资源的代码&#xff0c;就叫做临界区 互斥&#xff1a;任何时刻&#xff0c;互斥保证有…...

深度解析:具身AI机器人领域最全资源指南(含人形机器人,多足机器人,灵巧手等精选资源)

&#x1f4a1; 你是否在寻找具身人工智能&#xff08;Embodied AI&#xff09;领域的研究资源&#xff1f;是否希望有一个系统性的资源集合来加速你的研究&#xff1f;今天给大家推荐一个重磅项目&#xff01; &#x1f31f; 为什么需要这个项目&#xff1f; 具身人工智能是一…...

组件之间的信息传递的四种方法!!【vue3 前端】

迎万难 赢万难&#xff01; 目录 1. 使用 defineProps 传递数据&#xff1a;2. 使用。defineEmits 发送事件&#xff1a;3. 使用 Provide / Inject&#xff1a;4. 使用状态管理&#xff08;如 Pinia&#xff09;&#xff1a; 1. 使用 defineProps 传递数据&#xff1a; 父组件…...

单片机学习笔记9.数码管

0到99计数 &#xff0c;段选共阴极 ;0到99计数 ORG 0000H LJMP MAIN ORG 000BH LJMP TIMER0_ISR ORG 0100H; 定义位选控制位 DISPLAY_SELECT BIT 20H.0MAIN:; 定时器 0 初始化MOV TMOD, #01H ; 设置定时器 0 为模式 1MOV TH0, #3CH ; 定时器 0 高 8 位初值&#xff0c;定时 …...

Go 语言 核心知识点

Go 语言&#xff08;Golang&#xff09;是由 Google 开发的一种静态类型、编译型语言&#xff0c;设计目标是高效、简洁、并发友好。它借鉴了 C 语言的性能优势&#xff0c;同时引入了现代语言的特性&#xff08;如垃圾回收、并发原语&#xff09;&#xff0c;并摒弃了传统面向…...

【C++ 类和数据抽象】消息处理示例(2)

目录 一、消息处理系统的核心价值 1.1 现代软件架构中的消息驱动 1.2 消息处理系统的关键组件 二、消息处理系统概述 三、Message类设计 3.1 成员变量 3.2. 成员函数 3.3. 私有辅助函数 四、Folder类设计 五、代码实现 六、数据抽象在消息处理系统中的应用 七、总结…...

kafka 中消费者 groupId 是什么

&#x1f4da; 什么是 groupId&#xff1f; groupId 是 Kafka 里消费者组&#xff08;Consumer Group&#xff09;的唯一标识。 同一个 groupId 的消费者&#xff0c;一起共享消费&#xff0c;一条消息只给组内一个消费者处理。不同 groupId 的消费者组&#xff0c;各自独立消…...

单相交直交变频电路设计——matlab仿真+4500字word报告

微♥“电击小子程高兴的MATLAB小屋”获取巨额优惠 1.模型简介 硬件电路采用Altium designer设计&#xff0c;仿真采用Matlab软件 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2018Rb&#xff09;软件。建议采用matlab2018Rb及以上版本打开。&#xff08;若需要其他…...

Python中的协程(Coroutine)

Python中的协程&#xff08;Coroutine&#xff09; 是一种轻量级的异步执行单元&#xff0c;主要用于解决IO密集型任务的性能问题。Python 3.5引入了 async/await 语法&#xff0c;使得协程变得简洁且易于使用。协程的核心是通过事件循环&#xff08;Event Loop&#xff09; 来…...

【QT】QT多线程

QT多线程 1.涉及到类和方法示例代码&#xff1a;未重写run函数 2.使用思路3.常用方法4.示例代码1&#xff1a;重写线程run函数现象&#xff1a; 5.示例代码2&#xff1a;多线程显示切换图片&#xff0c;使用公有方法现象&#xff1a; 1.涉及到类和方法 类&#xff1a;QThread 示…...

基于深度学习的医疗诊断辅助系统设计

标题:基于深度学习的医疗诊断辅助系统设计 内容:1.摘要 随着医疗数据的爆炸式增长和深度学习技术的飞速发展&#xff0c;开发基于深度学习的医疗诊断辅助系统具有重要的现实意义。本研究的目的在于设计一个高效、准确的医疗诊断辅助系统&#xff0c;以辅助医生进行更精准的诊断…...

C++ RAII

RAII&#xff08;Resource Acquisition Is Initialization&#xff0c;资源获取即初始化&#xff09;是 C 编程中的核心设计理念&#xff0c;用于管理资源的分配和释放。它通过将资源的生命周期绑定到对象的生命周期&#xff0c;利用 C 的自动对象管理机制&#xff08;主要是栈…...

Linux进程学习【环境变量】进程优先级

进程优先级的基本概念 在 Linux 中&#xff0c;每个进程都有一个优先级&#xff0c;操作系统根据这个优先级来决定进程的执行顺序。优先级越高&#xff0c;进程的执行就越频繁。通常&#xff0c;进程优先级是由以下两个部分构成&#xff1a; 静态优先级&#xff08;PRI&#x…...

Leetcode:283. 移动零

题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0]…...

BIOES 标签的含义

BIOES 标签的含义 ​B (Begin) 表示一个实体的开始。例如&#xff0c;在句子 “北京是中国的首都” 中&#xff0c;“北京” 作为地点实体的开头&#xff0c;首字会被标注为 B-LOC&#xff0c;后续字可能标注为 I-LOC。 ​I (Inside) 表示一个实体的中间或内部部分。例如&a…...

mAh 与 Wh:电量单位的深度解析

1. 基础定义与物理意义 1.1 mAh&#xff08;毫安时&#xff09; 定义&#xff1a;表示电池以毫安&#xff08;mA&#xff09;为单位的电流持续放电 1 小时的电荷量。1 mAh1 mA1 h3.6 C(库仑&#xff0c;电荷单位)局限性&#xff1a;仅反映电池存储的电荷量&#xff0c;未考虑电…...

安卓屏播放语音失败,报错TextToSpeech: speak failed: not bound to TTS engine

最近碰到一个很棘手的问题&#xff0c;无缘无故&#xff0c;之前在Android9.0跑得好好的程序&#xff0c;升级安装系统到Android13后&#xff0c;就发现之前能放的语音&#xff0c;现在放不了了&#xff0c;真是头大&#xff0c;所以我摸索着尝试解决&#xff0c;且看我的解决过…...

C语言学习之结构体

在C语言中&#xff0c;我们已经学了好几种类型的数据。比如整型int、char、short等&#xff0c;浮点型double、float等。但是这些都是基本数据类型&#xff0c;而这些数据类型应用在实际编程里显然是不够用的。比如我们没有办法用一旦数据类型来定义一个”人“的属性。因此这里…...

layui获取无法获取表单数据,data.field一直为空

form.on(submit(*), function(data){console.log(data.field) //当前容器的全部表单字段&#xff0c;名值对形式&#xff1a;{name: value}return false; //阻止表单跳转。如果需要表单跳转&#xff0c;去掉这段即可。}); console.log(data.field)一直显示为空&#xff0…...

「Mac畅玩AIGC与多模态02」部署篇01 - 在 Mac 上部署 Ollama + Open WebUI

一、概述 本篇介绍如何在 macOS 环境下本地部署 Ollama 推理服务,并通过 Open WebUI 实现可视化交互界面。该流程无需 CUDA 或专用驱动,适用于 M 系列或 Intel 芯片的 Mac,便于快速测试本地大语言模型能力。 二、部署流程 1. 环境准备 安装 Homebrew(如尚未安装):/bin…...

量子力学:量子通信

量子通信是利用量子力学原理对信息进行编码、传输和处理的新型通信方式&#xff0c;以下是其详细介绍及业界发展现状&#xff1a; 基本原理 量子叠加态 &#xff1a;量子系统可以处于多个状态的叠加&#xff0c;如光子的偏振方向可以同时处于水平和垂直方向的叠加态&#xff…...

《大型网站技术架构-核心原理与案例分析》笔记

:::info &#x1f4a1; 根据 遗忘曲线&#xff1a;如果没有记录和回顾&#xff0c;6天后便会忘记75%的内容 读书笔记正是帮助你记录和回顾的工具&#xff0c;不必拘泥于形式&#xff0c;其核心是&#xff1a;记录、翻看、思考::: 书名大型网站技术架构-核心原理与案例分析作者…...

log4cpp进阶指南

&#x1f4dd; log4cpp进阶指南 1. 按天切割日志 log4cpp 默认是按文件大小来切割日志的。为了按天切割日志&#xff0c;通常需要自己进行时间判断并手动处理日志文件的切割。 1.1 解决方案 虽然 RollingFileAppender 只支持按大小切割&#xff0c;但你可以使用以下策略&…...

树莓派超全系列教程文档--(43)树莓派内核简介及更新

树莓派内核简介及更新 简介更新 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 简介 Raspberry Pi 内核是 托管在 GitHub 上&#xff1b;更新滞后于上游 Linux内核。上游内核持续更新&#xff0c;而 Raspberry Pi 则将 Linux 内核的长期版本整合…...

第二章、在Windows上部署Dify:从修仙小说到赛博飞升的硬核指南

第1章:安装 wsl (Windows Subsystem for Linux) 上一章我们聊了什么是Dify,这一章我们讲一下怎么才能用Dify。 使用Dify就需要我们在本地部署Dify; 部署Dify就需要用到”Docker“; 要想使用“Docter”就需要用到wsl。 那什么是wsl呢?简单来说就是让你的电脑拥有另一个叫…...

淘宝商品主图标题api接口

1、输入淘宝商品id或者链接&#xff0c;点查询 2、查询淘宝商品主图&#xff0c;商品标题&#xff0c;商品价格&#xff0c;卖家旺旺 3、支持api接口...

小结:BFD

*BFD&#xff08;双向转发检测&#xff0c;Bidirectional Forwarding Detection&#xff09;是一种快速、轻量级的故障检测机制&#xff0c;用于检测网络中两点之间的连通性。它广泛应用于各种场景 1. 检测 IP 链路 应用场景&#xff1a; BFD 用于检测两台设备之间的 IP 层连…...

收藏按钮变色问题

1.问题描述 无论是否收藏&#xff0c;收藏按钮都显示黄色&#xff0c;但点击收藏按钮后却能发生颜色变化 2.解决思路 经过调试发现isCollected返回的是整个对象&#xff0c;因此在store的方法里面找到了相应的函数进行修改使得isCollected返回相应的值 修改前&#xff1a; 修…...

小程序发布后,不能强更的情况下,怎么通知到用户需要去更新?

哈喽&#xff0c;我想和大家分享一下我在开发记账小程序时遇到的一个问题&#xff0c;以及我找到的解决办法。 这个记账小程序从一开始&#xff0c;我就特别在意用户的隐私&#xff0c;所以把记账数据都存到了本地缓存里&#xff0c;还做了个手动备份的功能。但系统嘛&#xf…...