深入探索 Kubernetes:从基础概念到实战运维

news/2025/1/7 7:13:47/文章来源:https://www.cnblogs.com/zhoutuo/p/18646996

前言:在当今数字化转型的浪潮中,Kubernetes 已然成为云原生应用部署与管理的核心力量。无论是初创企业寻求敏捷开发,还是大型企业应对复杂业务架构,掌握 Kubernetes 都能为你的技术之旅赋能。今天,就让我们一同深入 Kubernetes 的奇妙世界,揭开它神秘的面纱,从基础概念到实战运维,全方位领略其魅力。

一、Kubernetes 资源对象大揭秘

(一)Node:集群的基石

在 Kubernetes 集群里,Node 可是关键角色,它既可以是一台物理机,也能是虚拟机,是 Pod 运行的“栖息地”。为了保障对外提供服务的顺畅,每个 Node 上都精心部署了三个重要组件:

  • kubelet:它就像 Node 上的“管家”,负责管理和维护本节点上的 Pod,确保它们按照预定规划稳定运行。不仅如此,kubelet 还会定期与 api-server“沟通”,接收新的或修改后的 Pod 规范,同时密切监控节点的运行情况,把关键信息及时汇报给 api-server,保障集群整体的协调一致。
  • kube-proxy:堪称 Pod 的“网络卫士”,为 pod 对象提供网络代理与负载均衡服务。在集群内部,Pod 的动态变化频繁,kube-proxy 能巧妙地调整网络规则,让流量分配更加合理,确保服务的高效访问。
  • container-runtime:以大家熟悉的 docker-engine 为代表,它是容器的“动力引擎”,负责容器镜像的拉取、容器的创建、启动、停止等一系列关键操作,是容器得以在 Node 上运行的基础支撑。

(二)Pod:最小作战单元

Pod 作为 Kubernetes 集群中的最小调度单元,是运行容器的资源对象,每个 Pod 都有独一无二的 ID。有趣的是,它可以是一个容器的“独居小屋”,也能是多个紧密相关容器的“合租公寓”,一般情况下,为了便于管理,一个 Pod 中大多只运行一个容器。这些容器在 Pod 内共享网络命名空间、存储卷等资源,协同完成特定业务功能,是应用运行的基础载体。

(三)Service:Pod 的统一对外窗口

Service 是一种抽象的资源对象,定义了访问 Pod 的巧妙策略,也就是我们常说的服务发现机制。它就像一个“智能导航”,将一组相关的 Pod 封装起来,对外呈现为一个统一的入口地址和端口号。如此一来,外部应用无需操心 Pod 的具体分布和 IP 地址变化,只需通过 Service 提供的统一入口,就能便捷地访问 Pod 所提供的服务,极大地简化了应用间的交互流程。

(四)Ingress:集群的外部流量入口

Ingress 的作用至关重要,它如同集群的“前门卫士”,可以将外部的路由请求精准地转移到集群内部的 Service 上。在实际应用场景中,当我们需要对外暴露多个服务时,Ingress 能通过配置域名、路径等规则,灵活地将不同的外部请求导向相应的内部 Service,实现了集群内外流量的高效对接。

(五)ConfigMap、Secret:配置管理好帮手

  • ConfigMap:它是配置信息的“精准投递员”,能以键值对的形式,将配置文件巧妙地注入到 Pod 中。无论是环境变量、配置文件片段,还是其他配置细节,ConfigMap 都能轻松传递,实现应用与配置的解耦,方便我们随时调整应用的配置,而无需重新编译和部署。
  • Secret:作为敏感信息的“安全保险柜”,Secret 卷用于将密码、证书等敏感信息以高度安全的方式注入到 Pod 中。这样,我们就无需将这些敏感数据明文存储在镜像或配置文件中,有效降低了数据泄露风险,为应用的安全运行保驾护航。

(六)Volume:数据持久化的保障

Volume 可以说是集群数据持久化存储的“魔法口袋”,它能够将数据挂载到集群中的本地磁盘或者远程存储上。无论是临时存储需求,还是长期的数据保存,Volume 都能根据不同的存储卷类型,提供可靠的解决方案,确保即使 Pod 或容器出现出现故障、重启,数据依然安然无恙。

(七)Deployment:无状态应用的卓越指挥官

Deployment 在无状态应用的部署舞台上担任着“卓越指挥官”的角色。它可以将一个或多个 Pod 组合在一起,形成一支纪律严明的“部队”,并具备副本控制、滚动更新、自动扩缩容等一系列高级“战术”。通过它,我们能够轻松实现应用的无缝迁移,面对业务量的波动,自动调整资源,还能在更新出现问题时一键回滚,全方位保障无状态应用的稳定高效运行。

(八)StatefulSet:有状态应用的贴心管家

StatefulSet 则专注于管理有状态应用的工作负载 API 对象,是有状态应用的“贴心管家”。它不仅能管理基于相同容器定义的一组 Pod,还为每个 Pod 维护了一个固定的 ID,赋予它们序号和唯一性保证。当应用需要稳定、持久化存储,以及多个副本有序、优雅的部署、缩放与自动滚动升级时,StatefulSet 就能发挥其独特价值,确保有状态应用的可靠运行。

(九)Master 节点:集群的智慧中枢

Master 节点犹如集群的“智慧中枢”,掌控着整个集群的运行节奏,它主要包含以下几个关键组件:

  • kube-apiserver:作为集群对外沟通的“前沿网关”,它不仅提供了资源操作的唯一入口,还肩负着认证、授权、访问控制等重任,同时负责 API 的注册与发现。所有组件之间的通信往来,都必须经由它进行中转,确保了集群的安全性与规范性。
  • etcd:堪称集群的“智慧大脑”,这个高可用的键 - 值存储系统,精心守护着集群所有资源对象的状态信息。无论是 Pod 的动态增减,还是其运行状况的细微变化,etcd 都了如指掌,是集群数据的核心存储中枢。
  • controllerManager:宛如集群状态的“忠诚卫士”,时刻保持警惕,严密监控集群资源。一旦发现 Pod 出现故障,它会迅速响应,立即重启或调配新的 Pod,确保业务的连续性不受丝毫影响。
  • Scheduler:是资源的“精明调度师”,凭借对集群中所有节点资源使用情况的精准洞察,按照预定的智能调度策略,将 Pod 巧妙地分配到最合适的节点上运行,实现资源的最大化利用。

如果使用的是云服务器,还会有额外的“云助手”—— cloud-Controller-Manager,它能与云平台的 API 无缝对接,提供一致的管理接口,让用户在不同的云平台上运行和管理应用变得轻而易举。

二、Kubernetes 面试题全解析

(一)基础知识

1. Kubernetes 是什么及核心组件:

Kubernetes,简称 K8s,是一款开源的强大工具,专门致力于管理云平台中多个主机上运行的容器化应用。其目标明确,就是让容器化应用的部署变得简单高效,为我们提供了一套涵盖应用部署、规划、更新到维护的全方位机制。
它的核心组件各司其职:

  • etcd:为集群提供数据库服务,存储集群的状态信息,是集群运行的“数据基石”。
  • kube-apiserver:集群的“前沿网关”,不仅是资源操作的入口,还保障集群通信的安全与规范。
  • kube-controller-manager:维护集群状态的“忠诚卫士”,处理故障检测、自动扩展、滚动更新等关键任务。
  • cloud-controller-manager:云平台的“贴心联络员”,方便用户在云环境中管理应用。
  • kub-scheduler:资源的“精明调度师”,合理分配 Pod 到合适节点,优化资源利用。
  • kubelet:节点的“得力管家”,维护容器生命周期及节点资源管理。
  • kube-proxy:服务的“可靠保镖”,为 Service 提供网络代理与负载均衡。
  • container-runtime:容器的“动力引擎”,驱动容器的创建、运行与停止。

2. 关键资源对象概念用途:

  • Pod:最小部署单元,承载容器运行,可包含一个或只包含一个或多个关联容器,共享资源协同工作。
  • Node:Pod 的运行载体,物理或虚拟节点,接收 Master 分配的工作负载。
  • Deployment:管理无状态服务,实现多副本的无缝管控,保障应用高可用性。
  • Service:将 Pod 封装,提供统一入口,简化外部应用访问流程。
  • Label:给资源贴上智能标签,便于分类管理与精准追踪。
  • Annotation:为程序元素添加隐形附注,提供管理维护参考信息。

(二)资源定义与管理

1. 定义资源:Pod 资源定义是构建应用的基础环节。通过 YAML 文件,我们能精细指定 Pod 所需的 CPU、内存、存储等资源,还可设置资源请求(requests)和资源限制(limits),前者保障启动所需最小资源,后者控制运行最大资源量,辅助调度器合理分配集群资源。

2. 管理资源:

  • 资源配额:管理员为命名空间设定资源使用上限,防止资源滥用,保障集群稳定,涵盖对象数量与计算资源限制。
  • 自动扩展:Horizontal Pod Autoscaler(HPA)依据资源使用情况自动调整 Pod 数量,适应负载变化,优化资源配置。
  • 资源监控与告警:借助 Prometheus、Grafana 等工具实时监控资源,可视化展示并设告警阈值,及时发现处理问题。
  • 资源回收:通过删除 Pod 或命名空间,利用 Kubernetes 的垃圾回收机制释放闲置资源,提升资源利用率。

在 Kubernetes 中,资源定义与管理是动态持续的过程,需紧密结合应用与集群状态灵活调整,确保高效稳定运行。

(三)集群管理

  1. 部署配置步骤
  • 环境准备:挑选合适机器作为节点,确保满足 Kubernetes 运行要求,安装配置 Docker、etcd 等依赖软件。
  • 选择部署方式:根据需求与环境,在二进制包、源码、容器化等多种部署方式中抉择。
  • 配置网络:精心配置网络插件与 CNI 插件,保障节点间、Pod 间通信顺畅。
  • 初始化 Master 节点:运行 kubeadm init 命令,生成证书和配置文件,启动 Kubernetes API Server 等核心组件。
  • 加入 Node 节点:在 Node 节点运行 kubeadm join 命令,指定 Master 节点的地址和 token 等信息,融入集群。
  • 部署应用:利用 Deployment、Service 等资源对象部署管理应用。

配置集群时,还需兼顾存储、安全、监控等高级特性,依据官方文档与教程,结合实际灵活优化。

2. 高可用性与可扩展性理解:

  • 高可用性:即使部分组件故障,集群仍能正常运行,靠冗余部署与负载均衡实现。多 Master 与 Etcd 节点冗余备份,配合故障检测、自动扩缩容、滚动更新等机制,保障业务连续。
  • 可扩展性:能依业务需求灵活伸缩,靠资源调度与容器编排支撑。调整 Pod 副本、资源配额,借助自定义资源与扩展控制器,满足多样化发展。

(四)网络与安全

1. 网络通信处理:

  • 共享卷:Pod 内容器共享卷,生存期与 Pod 相同,方便数据交互。
  • 进程间通信:同一 Pod 容器共享命名空间与本地网络,通过 localhost 便捷通信。
  • Linux 虚拟以太网设备:同节点不同 Pod 借此组成以太网,实现二层通信。

2. 网络策略配置:

  • 了解概念:Kubernetes 网络策略定义 Pod 通信规则,限制访问,保障网络安全。
  • 定义策略:基于多维度条件创建策略,精准管控流量。
  • 应用策略:通过 kubectl 或 Kubernetes API 应用到命名空间。
  • 验证生效:测试 Pod 通信,确保策略按预期工作。

3. 安全 Pod 到 Pod 通信实现:

  • Service Account + RBAC:Pod 关联 Service Account 以特定身份操作,结合 RBAC 限制通信范围。
  • Network Policies:定义规则限制 Pod 通信,精细管控网络。
  • IPSec:借助第三方配置,在 IP 层加密认证通信。
  • 加密 Service 通信:配置 Service 启用 TLS,确保通信加密。
  • Istio 等 Service Mesh:提供丰富特性,全方位保障 Pod 间安全通信。
  • 加密的存储卷:存储敏感数据,挂载到 Pod 共享,防泄露。

实施安全措施要综合考虑加密、身份验证、授权、审计和监控,全方位保障集群网络安全。

(五)存储与持久化

1. 存储卷类型:

  • EmptyDir:临时存储,Pod 重启清空,适用于临时文件、缓存数据共享。
  • ConfigMap:传递配置信息,注入键值对,解耦应用与配置。
  • Secret:安全存储敏感信息,防明文泄露。
  • PersistentVolumeClaim (PVC):请求持久化存储,结合后端技术,保障数据持久。
  • NFS:挂载远程文件系统,实现跨节点共享。
  • HostPath:访问宿主机文件目录,便捷操作本地资源。

各类型适配不同类型适配不同场景,按需选用。

2. 实现持久化存储:

  • 创建PersistentVolume(PV):管理员或动态创建,描述存储详情,是集群资源。
  • 创建PersistentVolumeClaim(PVC):用户请求存储,绑定满足要求的 PV。
  • 创建StorageClass(可选):描述 PV“类”,辅助动态创建 PV。
  • Pod使用PVC:Pod 定义中请求 PVC,在运行时挂载匹配的 PV。
  • 动态卷供应(可选):启用时按需创建 PV,需配置存储供应者。
  • 数据持久化:PV 挂载后,Pod 如用本地存储,数据持久保存。
  • 数据备份和恢复:依存储系统功能定期备份恢复。

(六)部署和扩展

1. Deployment和ReplicaSet区别:

  • 功能:Deployment 基于 ReplicaSet 升级,支持声明式更新、滚动更新、回滚、暂停和恢复更新等高级功能;ReplicaSet 本身不支持滚动更新,如果需要更新 Pod 的定义,需要手动删除旧的 ReplicaSet 并创建一个新的。
  • 版本控制和回滚:Deployment 支持版本控制和回滚,可以轻松地回滚到之前的版本;ReplicaSet 不支持版本控制和回滚,如果更新出现问题,需要手动处理。

Deployment 更适合于需要更新管理、版本控制的复杂应用部署场景。

2. 滚动更新和回滚操作:

  • 滚动更新
    • 查看部署:用 kubectl get deployments 了解当前状态。
    • 更新镜像:用 kubectl set image deployment/[deployment_name] [container_name]=[new_image] 更换镜像。
    • 监控进度:用 kubectl rollout status deployment/[deployment_name] 跟踪状态。
  • 回滚操作
    • 查看历史:用 kubectl rollout history deployment/[deployment_name] 查看回滚历史。
    • 执行回滚:用 kubectl rollout undo deployment/[deployment_name] 回滚到上一个版本。如果需要回滚到指定版本,可以用 kubectl rollout undo deployment/[deployment_name] --to-revision=[revision] 命令,将[revision]替换为要回滚到的版本号。

这些步骤将帮助你在 Kubernetes 中实现应用的滚动更新和回滚,确保应用程序的稳定性和可用性。请注意,在执行这些操作之前,确保你已经正确配置了 Kubernetes 集群,并且有足够的权限来管理Deployment资源。

3. 自动扩展实现:实现应用的自动扩展,通常可以通过使用云计算平台提供的弹性伸缩服务(AS)和负载均衡服务(SLB)来实现。弹性伸缩服务是一种自动调整应用程序或服务规模的技术。在云计算环境中,当应用程序或服务的负荷增加时,弹性伸缩服务可以自动增加实例或服务器的数量,以应对更高的负荷;当负荷减少时,弹性伸缩服务可以自动减少实例或服务器的数量,以节省成本。负载均衡服务是一种用于分发网络流量和平衡负荷的技术。通过将流量分发到多个实例或服务器上,负载均衡服务能够有效地提高应用程序或服务的性能和可靠性。在实践中,负载均衡服务和弹性伸缩服务通常是结合使用的。通过将弹性伸缩服务与负载均衡服务集成在一起,可以更轻松地管理和扩展应用程序或只管理和扩展应用程序或服务。

(七)日志收集管理工具 API

1. 监控集群性能健康:

  • Kubernetes节点监控:包括节点的 CPU、内存、磁盘、网络等指标。可以使用工具如 Prometheus、Grafana 等进行实时监控和可视化展示。
  • 内部系统组件监控:如 kube-scheduler、kube-controller-manager、kubedns/coredns 等组件的详细运行状态。可以使用 Kubernetes 自带的 metrics API 或者第三方工具如 Heapster、metrics-server 等进行监控。
  • Pod和容器监控:包括 Pod 的状态、资源使用情况、日志等。可以使用工具如 cAdvisor、Docker Stats 等进行监控。
  • 网络监控:包括集群内部网络、节点间网络、Pod 间网络等。可以使用工具如 Network Policy、Calico、Flannel 等进行监控。
  • 集群资源监控:包括 CPU、内存、存储等资源的使用情况。可以使用 Kubernetes 自带的 Resource Quota 或者第三方工具如 QuotaGuard 等进行监控。

2. 描述一下Prometheus和Grafana在Kubernetes监控中的作用:

  • kubectl logs:这是最基本的日志收集工具,用于获取Pod中容器的日志。通过kubectl logs命令,可以查看正在运行的容器的实时日志,也可以查看已经停止的容器的历史日志。
  • Fluentd:Fluentd是一个开源的数据收集器,可以统一收集并处理多种来源的日志数据。在Kubernetes中,Fluentd可以作为DaemonSet运行在每个节点上,收集并聚合节点的日志数据,然后发送到指定的存储后端进行处理和分析。
  • Elasticsearch, Logstash, Kibana (ELK) Stack:ELK Stack是一个开源的日志管理和分析解决方案,可以用于收集、存储、搜索、分析和可视化日志数据。在Kubernetes中,可以通过部署ELK Stack的容器化版本,实现日志的集中管理和分析。
  • Prometheus:Prometheus是一个开源的监控和告警工具,可以用于收集和管理Kubernetes集群中的指标数据,包括Pod的日志数据。通过Prometheus,可以实现实时的日志监控和告警。
    此外,Kubernetes还提供了一些API用于日志收集和管理,例如:
  • Container Runtime Interface (CRI):CRI是Kubernetes中容器运行时的接口,用于与容器运行时进行交互。通过CRI,可以获取容器的日志数据。
  • Logging API:Kubernetes的Logging API可以用于获取和管理集群中的日志数据。通过Logging API,可以编写自定义的日志收集器,实现灵活的日志收集和管理策略。

(八)高级概念

1. 请解释Kubernetes中的资源配额和限制:

资源配额(Resource Quota)是管理员为每个命名空间设置的资源使用上限,以保障不同团队或项目的资源分配,防止某个团队或项目过度使用资源,影响其他团队或项目的正常运行。资源配额可以限制对象数量,也可以限制计算资源。
资源限制(Resource Limits)主要包括Requests和Limits两种。Requests是容器启动所需的资源数量,确保节点上有足够的资源来启动容器。Limits是容器运行时可以使用的最大资源数量,防止容器使用超过设定值的资源。

2. 如何在Kubernetes中实现多租户管理?:

在Kubernetes中,实现多租户管理的一种常见方法是通过使用命名空间(Namespace)。命名空间是Kubernetes中的一个抽象概念,它允许将集群资源进行逻辑上的划分。这样,不同的租户可以在各自的命名空间中管理自己的资源,从而实现多租户管理。以下是使用Kubernetes进行多租户管理的一些基本步骤:

创建命名空间:管理员可以为每个租户创建一个独立的命名空间。每个命名空间都可以被视为一个独立的逻辑分区,允许租户在其中管理和部署自己的资源。

分配资源配额:通过资源配额(Resource Quota),管理员可以限制每个命名空间中可以使用的资源数量。这有助于确保不同租户之间的资源使用不会相互干扰,从而维护集群的稳定性和公平性.

部署应用:租户可以在自己的命名空间中自由部署应用,并利用Kubernetes提供的API进行应用的管理和维护。每个租户的应用和资源都封装在自己的命名空间中,互不影响.

访问控制:通过角色(Role)和角色绑定(RoleBinding),管理员可以为每个租户设置适当的访问权限。这样可以确保租户只能访问和管理自己的资源,而无法访问其他租户的资源,从而实现资源的安全隔离.

此外,Kubernetes还提供了其他多租户管理方案,例如使用租户专用的网络插件来实现网络隔离,或者使用租户特定的存储类来实现存储资源的隔离等。具体选择哪种方案取决于租户的具体需求以及集群的架构设计。
需要注意的是,多租户管理也带来了一些挑战,例如如何确保不同租户之间的隔离性、如何公平地分配集群资源、如何有效管理和监控多个租户等。因此,在实施多租户管理时,需要综合考虑各种因素,并采取相应的措施来确保系统的稳定性和安全性。

(九)假设你在生产环境中遇到了资源瓶颈,你将如何优化Kubernetes集群的性能?

诊断瓶颈原因

  • 资源使用分析:使用 kubectl top 命令查看节点和Pod的资源使用情况,识别出CPU、内存或存储资源使用过高的节点或Pod.
  • Pod状态检查:检查Pod的描述信息,查看是否有频繁重启或崩溃的容器,这可能是资源不足或其他问题的迹象.
  • 节点状态分析:通过 kubectl describe node <node-name> 查看节点事件和状态,了解是否存在节点级别的问题,如硬件故障或配置错误.
  • 监控工具应用:利用Prometheus、Grafana等监控工具,分析集群和应用的性能指标,识别出具体的瓶颈所在,如请求延迟、资源争用等.

调整资源分配

  • 资源请求和限制:对于资源使用过高的Pod,适当增加资源请求(requests)和限制(limits),确保它们有足够的资源运行,避免资源争用.
  • 节点扩展和升级:如果节点资源不足,可以考虑添加更多节点,或者升级现有节点的硬件配置,以提升集群的整体资源容量.
  • 动态资源调整:使用垂直Pod自动扩展器(Vertical Pod Autoscaler),根据Pod的资源使用情况动态调整Pod的资源分配,实现资源的自动优化.

优化Pod调度

  • 调度约束和规则:使用适当的调度约束和亲和性规则,确保Pod被调度到合适的节点上,例如根据节点的硬件特性、资源利用率或区域偏好进行调度.
  • 节点选择和布局优化:利用节点选择器(Node Selector)、反亲和性(Anti-Affinity)或拓扑扩展约束(Topology Spread Constraints),优化Pod的布局,避免资源集中导致的瓶颈.

存储优化

  • 存储解决方案升级:如果存储是瓶颈,考虑使用更高性能的存储解决方案,如将HDD替换为NVMe SSD,以提升存储的读写速度.
  • 存储资源管理:使用持久卷(Persistent Volume)和持久卷声明(Persistent Volume Claim)来管理存储资源,确保Pod能够高效地访问所需的存储.
  • 存储性能优化:对于IO密集型应用,可以考虑使用存储类(StorageClass)和存储卷快照(Volume Snapshot)来优化存储性能和可靠性,提高数据访问效率.

网络优化

  • 网络带宽和延迟检查:检查网络带宽和延迟,确保集群内部和集群与外部之间的通信顺畅,避免网络瓶颈影响应用性能.
  • 网络策略应用:使用网络策略(Network Policy)来限制不必要的网络通信,提高网络安全性,减少无效的网络流量.
  • 高性能网络插件选择:考虑使用高性能的网络插件或容器网络解决方案,如Calico、Flannel或Cilium,提升网络的转发效率和稳定性.

集群配置优化

  • API服务器配置调整:调整Kubernetes集群的配置参数,如API服务器的QPS和Burst限制,以优化集群的响应速度和吞吐量,提升集群的处理能力.
  • 网络代理优化:优化kube-proxy的配置,选择适当的代理模式(如iptables或ipvs)以提高网络转发效率,降低网络延迟.
  • 资源清理和维护:监控集群的日志和事件,定期清理旧的或不再需要的资源,避免资源浪费,保持集群的整洁和高效.

应用层优化

  • 应用性能优化:对应用本身进行优化,如代码级别的优化、缓存策略、数据库连接池管理等,提升应用的运行效率和性能.
  • 容器镜像和版本管理:使用适当的容器镜像和版本,确保应用能够高效运行,避免因镜像问题导致的性能瓶颈.
  • 自动扩展应用:利用微服务架构和容器编排工具(如Kubernetes)提供的自动扩展功能,根据负载动态调整服务的实例数量,实现应用的弹性伸缩.

持续监控和调优

  • 监控和告警机制:建立完善的监控和告警机制,及时发现和解决性能问题,确保集群的稳定运行.
  • 性能分析和调优:定期进行性能分析和调优,保持集群的高可用性和高效性,不断提升集群的性能表现.
  • 学习和应用最佳实践:利用社区和最佳实践资源,不断学习和应用新的优化策略和技术,跟上技术的发展步伐,持续提升集群的性能和稳定性.

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

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

相关文章

Python 将html格式书签转为excel

1.导出html格式书签2.对数据做处理 提取 <a></a> 标签 可以用vscode正则替换 <a></a> 标签的ICON属性ICON=".*"3.安装python pip替换成清华镜像 4.描述问题生成代码 import pandas as pd from bs4 import BeautifulSoup from datetime i…

UML之发现用例

用例是最简单的UML元素,用例图是最简单的UML图,但它也可能是UML中最有用的元素之一。尽管我们用包将工作分解为工作包、团队任务或单项任务,也就是说包是组织UML中的各种图及元素的工具。但是用例图可以帮助我们确定任务,以及应当如何将它们分组并确定工作范围。 每个用例都…

遗留了很久的功能终于搞定/QTreeWidget自定义节点/添加删除修改分组

一、前言说明 这个功能看起来简单,实际上也确实简单,以前没搞的时候还以为很难,难点就是如何存储这个任意层级的树状列表信息,近期大环境经济很差,刚好有空把这个功能搞定,其实二维表格的方式存储这种任意层级树结构就可以,就是子节点需要指定父节点,父节点为空表示顶层…

2025年正在重塑行业的10款AI代理工具

序言:本文的作者列出来的这10款AI代理工具是您认可的吗? 作为一名深入AI开发领域超过十年的开发者,我见过无数工具声称要颠覆我们构建AI代理的方式。有些工具确实实现了夸下的海口——但更多的则没有。 经过几个月的亲身测试以及与同行开发者的讨论,我整理出了一份2025年真…

[cause]: TypeError: e_.createContext is not a function (Next.js 15)

开发 Next.js 项目遇到报错: [cause]: TypeError: e_.createContext is not a function 出现这个报错的原因是在 Next.js 项目中,在 Server Component 中使用了MUI组件,但是MUI组件没有做 SSR 适配就会导致这个报错。 解决办法 解决办法就是在文件顶部添加 use client 声明…

golang自带的死锁检测并非银弹

网上总是能看到有人说go自带了死锁检测,只要有死锁发生runtime就能检测到并及时报错退出,因此go不会被死锁问题困扰。 这说明了口口相传知识的有效性是日常值得怀疑的,同时也再一次证明了没有银弹这句话的含金量。 这个说法的杀伤力在于它虽然不对,但也不是全错,真真假假很…

2025多校冲刺省选模拟赛2

2025多校冲刺省选模拟赛2\(T1\) A. aw \(10pts/20pts\)部分分\(10 \sim 20pts\) :枚举每一种定向方案,略带卡常。点击查看代码 const int p=998244353; struct node {int nxt,to; }e[200010]; int head[100010],dis[1010][1010],a[100010],b[100010],g[2][100010],cnt=0; b…

jamovi 2.6 (Linux, macOS, Windows) - 统计软件

jamovi 2.6 (Linux, macOS, Windows) - 统计软件jamovi 2.6 (Linux, macOS, Windows) - 统计软件 open statistical software 请访问原文直链:https://sysin.org/blog/jamovi/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.orgjamovi适用于桌面和云的开放式统计软…

读数据保护:工作负载的可恢复性26商用数据备份方案

商用数据备份方案1. 备份简史 1.1. 20世纪80年代中期大家都还没有意识到,运行着商用UNIX操作系统的大型工作环境里,应该配备一款商用的备份软件或某种自动的磁带系统 1.2. 1993年备份工作全都是通过shell脚本与cron job形式的计划任务来实现的1.2.1. 脚本总是假定服务器中需要…

OpenCV和OpenVX有什么联系和区别

OpenCV和OpenVX有什么联系和区别 联系和区别是:OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库。OpenVX 实现了跨平台加速处理,OpenVX在嵌入式和实时性系统中,可以更好地发挥它的优势,在某些场合配合OpenCV的强大功能,可以实现更好的效果。…

SPIR-V生态系统概述

SPIR-V生态系统SPIR-V生态系统,如图1-42所示。图1-42 SPIR-V生态系统 1.4.2 OpenVX路线图OpenVX路线图,如图1-43所示。图1-43 OpenVX路线图 OpenVX跨供应商视觉与推理 基于图形的高级抽象实现可移植、高效的视觉处理。 1)处理器供应商创建、优化和发布优化OpenVX的驱动程序。…

4本书推荐《智能汽车传感器:原理设计应用》、《AI芯片开发核心技术详解》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…