云原生基础设施指南:精通 Kubernetes 核心与高级用法
1. 云原生的诞生
随着互联网规模的不断增长,以及企业对敏捷开发、快速交付和高可用性的需求日益增强,传统的单体架构逐渐暴露出局限性,难以满足现代业务对动态扩展和高效迭代的要求。为此,云原生应运而生。
云原生是为云计算时代量身打造的一种应用开发理念与技术体系,其目标是充分利用云计算的弹性、扩展性和自动化能力,帮助企业构建敏捷、高可用、弹性扩展的系统。传统架构在灵活性、扩展性和效率方面的不足,催生了云原生的诞生,而其核心技术——容器化、微服务架构、自动化部署等,彻底改变了软件开发和交付的方式。
值得注意的是,云原生并非简单地将传统应用“迁移到云上”,而是从设计之初就“为云而生”。它让开发流程更快、部署更敏捷、运维更高效,能够帮助企业充分发挥云计算的优势,如按需分配资源和动态扩展能力,从而快速响应市场变化。无论是科技巨头还是初创公司,都在通过云原生实现技术与业务的跨越式发展。
云原生不仅仅是一种技术,而是现代化应用开发的一种理念和方法论。它以容器化、微服务、DevOps 和自动化为核心,目的是充分利用云计算的弹性和高效性,帮助企业快速适应市场变化,提高开发效率和系统可靠性。
云原生的本质是:“为云而生”,拥抱云计算的动态性和分布式特性,以实现更敏捷、更可靠的软件交付。
学习云原生,让你掌握未来软件开发的核心技能,摆脱传统架构的束缚,成为技术浪潮中的先行者。这不仅是对技术的升级,更是对未来的投资。
2. 云原生概述
2.1 云原生核心要素
云原生主要由以下四个核心要素构成:
- 微服务
- 将单体应用拆分为多个小而独立的服务,支持独立开发和部署。
- 提高了系统的灵活性和可扩展性。
- 容器
- 提供一致的运行环境,便于部署和迁移。
- Docker 是容器化的代表工具。
- DevOps
- 通过文化、实践和工具,实现开发与运维的协作,缩短交付周期。
- 强调自动化流程和持续监控。
- 持续交付
- 将软件的发布、部署等环节自动化,确保快速、安全的功能更新。
- 将软件的发布、部署等环节自动化,确保快速、安全的功能更新。
2.2 应用场景
云原生应用的实际应用场景有很多,以下是一些常见的例子:
微服务架构:云原生应用通常采用微服务架构,将应用程序划分为一组独立的服务,每个服务可以独立部署和扩展。这种架构使得应用程序更加灵活和可靠。
容器化:云原生应用通常使用容器技术进行部署,这使得应用程序可以轻松地在不同的环境中运行,无论是本地还是云环境。
持续集成和持续部署(CI/CD):云原生应用通常采用CI/CD流程,可以实现自动化的代码构建、测试和部署,从而加快软件交付速度。
DevOps文化:云原生应用鼓励开发和运维团队密切合作,共同参与整个应用程序的生命周期。
自动化和可伸缩性:云原生应用通常具有高度的自动化和可伸缩性,可以根据需求自动扩展或缩减资源。
容错和高可用性:云原生应用通常设计为具有容错能力和高可用性,即使某个组件发生故障,整个应用程序也能继续运行。
云服务集成:云原生应用可以轻松地与云提供商提供的各种服务集成,例如数据库、消息队列、存储等。
3. Kubernetes的诞生
在云原生的四大要素中,无论是 微服务 的拆分与独立部署,容器 的标准化交付,还是 DevOps 的自动化流程以及 持续交付 所需的敏捷实践,都需要一种高度自动化、灵活扩展的基础设施支持。
云原生的核心是将应用程序设计成云环境的原生应用,即在系统设计之初,就考虑到应用程序将运行在云环境中,并以后不会脱离云环境独立运行!
正是在这种背景下,Kubernetes 应运而生。作为一个开源的容器编排平台,Kubernetes 专注于解决云原生应用在部署、扩展和管理上的复杂性。它通过自动化容器化应用的部署与运维,为开发者和运维人员提供了统一的工具,使云原生理念从理论走向了实践。
Kubernetes(K8s)是实现云原生架构的核心基础设施之一,也是云原生生态的基石。它负责管理容器化应用的部署、运行和扩展,与云原生理念紧密结合。
1. Kubernetes 是云原生的核心支柱
云原生的四个核心原则是 容器化、动态调度、服务网格 和 声明式 API。Kubernetes 通过其特性全面支持这些原则:
- 容器化:Kubernetes 管理和运行容器化的应用程序,如 Docker 容器。
- 动态调度:Kubernetes 自动将工作负载分配到最佳节点上,实现资源的高效利用。
- 服务网格:通过扩展组件(如 Istio)提供服务通信、监控和安全功能。
- 声明式 API:Kubernetes 使用声明式配置,让用户定义目标状态,Kubernetes 自动实现。
2. 云原生的基础设施
云原生应用需要一系列关键功能,比如服务发现、负载均衡、配置管理等。传统架构中,这些功能由独立的第三方组件提供,而在云原生中,这些功能往往由 Kubernetes 和云平台直接内置或扩展支持:
2.1 服务发现和负载均衡
- 传统方式:依赖 Nacos、Eureka 等服务发现工具和独立负载均衡器。
- Kubernetes 方式:通过
Service
和Ingress
提供服务发现和负载均衡功能。kube-dns
或CoreDNS
实现服务名称解析。Service
支持集群内的负载均衡。Ingress
提供基于 HTTP/HTTPS 的外部访问路由。
2.2 配置和密钥管理
- 传统方式:依赖 Consul、Spring Cloud Config 等。
- Kubernetes 方式:
ConfigMap
:用于存储和管理应用的配置信息。Secret
:用于存储敏感信息(如密码、密钥),并安全地挂载到容器。
2.3 弹性伸缩和自愈能力
- 传统方式:需要开发自定义的弹性扩展脚本和监控工具。
- Kubernetes 方式:
Horizontal Pod Autoscaler (HPA)
:基于 CPU/内存使用率自动扩展 Pod。Vertical Pod Autoscaler (VPA)
:自动调整 Pod 的资源分配。ReplicaSet
和Deployment
:保证所需的 Pod 数量运行,并在 Pod 失败时自动恢复。
2.4 日志和监控
- 传统方式:独立部署 ELK Stack 或 Prometheus。
- Kubernetes 方式:
- 日志采集通过 Sidecar 容器或 Fluentd 集成。
- 监控通过 Prometheus 和 Kubernetes 的
Metrics Server
。
3. 云原生与 Kubernetes 的协作
Kubernetes 是云原生应用的运行和管理平台,它本身也支持云平台的特性。例如:
- 与云存储整合:Kubernetes 的
PersistentVolume
可以直接使用云服务(如 AWS S3、阿里云 OSS)。 - 与云负载均衡整合:Kubernetes 的
LoadBalancer
类型服务可以调用云平台的负载均衡器(如 ELB、SLB)。 - 与云安全整合:Kubernetes 支持使用云平台的密钥管理服务(如 AWS KMS、阿里云 KMS)。
4. Kubernetes 是云原生生态的基础
Kubernetes 是云原生计算基金会(CNCF)的核心项目,很多云原生工具和技术都是围绕 Kubernetes 构建的,比如:
- 服务网格:Istio、Linkerd
- 持续交付:ArgoCD、Flux
- 容器运行时:containerd、CRI-O
- 云原生存储:Rook、OpenEBS
通过 Kubernetes,这些工具可以更好地协同工作,为云原生应用提供全面的支持。
4.Kubernetes 核心架构
Kubernetes 采用控制平面(Control Plane) 和节点(Node) 的架构来协调资源管理和任务调度。
-
控制平面:
控制平面是 Kubernetes 的“大脑”,负责管理集群的所有操作,包括资源分配、状态维护、调度和策略执行。主要组件包括:- API Server:集群的入口点,处理外部请求并分发至其他组件。
- Scheduler:负责将 Pod 分配到合适的节点。
- Controller Manager:维护集群的期望状态,例如处理副本数量、重启失败的 Pod。
- etcd:保存所有集群数据的键值存储。
-
节点:
节点是集群的执行单元,负责实际运行工作负载。每个节点上运行以下关键组件:- kubelet:与控制平面通信,接收指令并管理 Pod 生命周期。
- kube-proxy:管理网络规则,处理服务之间的通信和负载均衡。
- 容器运行时:例如 Docker 或 containerd,负责容器的运行。
详细的kubenetes核心架构介绍可以参考学习:kubernetes核心架构
5.Kubernetes核心概念
以下是 Kubernetes 的八个核心概念的介绍,并配合 YAML 文件展示如何定义和使用这些组件。
1 资源与对象
- 资源和对象的关系:
- Kubernetes 中一切皆资源(类似于 Linux 一切皆文件,Java 一切皆对象)。
- 对象是资源的实例,是持久化的实体,如具体的 Pod 或 Service。
- 控制平面负责资源和对象的定义、调度和维护。
- API Server 提供统一的入口,供用户通过 CLI 或编程接口创建、修改、删除资源对象。
- Controller Manager 通过控制器调节实际状态与期望状态的差异。
- 节点(Node)则是运行这些对象的执行环境。
2 对象规约与状态
- 规约(Spec):
- 描述对象的期望状态,是对象创建时的核心配置。
- 控制平面通过调度器(Scheduler)解析规约,将资源分配给合适的节点。
- 状态(Status):
- 反映对象的实际运行状态,由 Kubernetes 自动维护。
- 节点报告实际状态(如 Pod 的健康状况)给控制平面的 API Server,控制器根据差异做出调整。
- 例如:如果 Pod 异常退出,控制器会通过节点反馈状态,启动新的 Pod 实例。
即:Spec是用户定义的期望状态,而Status则是系统维护的实际运行状态,控制平面持续调节Spec和Status,确保二者尽可能保持一致。
3 资源的分类
-
元空间(Metadata): 是 Kubernetes 中每个资源的基础描述信息,包含名称(Name)、标签(Labels)、注解(Annotations)等,用于标识和管理资源。它是资源的“身份”和“注解”,便于查询、分类和操作。
-
集群(Cluster): 是 Kubernetes 的运行环境,包含多个节点和控制平面组件。集群统一管理所有资源,并通过调度和自动化能力实现高效的应用部署与运行。
-
命名空间(Namespace): 是集群内的逻辑隔离机制,用于将资源划分到不同的范围。它允许在一个集群中运行多个团队或项目,避免资源命名冲突并提供访问权限控制。
- 用于对资源进行逻辑隔离。
- 同一命名空间内的资源可以通信,跨命名空间则默认隔离。
- 控制平面通过 API Server 管理命名空间的边界规则,确保隔离性。
4 Pod
- Pod 是 Kubernetes 的最小部署单元。
- Pod 中的容器共享网络和存储。
- 一个 Pod 通常包含一个容器,但也可以包含多个紧耦合的容器。
- 节点是 Pod 的实际运行环境,kubelet 负责在节点上启动和管理 Pod 的生命周期。
- 副本(Replica):
- 基于 Pod 模板(PodTemplate)创建的多个实例,用于确保高可用性和负载分担。
- 控制平面通过调度器决定将 Pod 副本部署到哪些节点。
下面给出一个yaml示例定义一个Pod
apiVersion: v1
kind: Pod
metadata:name: example-pod
spec:containers:- name: nginximage: nginx:1.21ports:- containerPort: 80
5 高级控制器
5.1 Deployment 和 ReplicaSet
- ReplicaSet
- 确保指定数量的 Pod 副本始终运行。
- 通过标签选择器(Label Selector)管理 Pod。
- 控制平面通过 ReplicaSet 控制器动态调整副本数量。
- Deployment
- 是 ReplicaSet 的封装,支持滚动更新和版本回滚。
- 部署无状态应用的首选工具。
- 控制平面负责管理滚动更新的步骤,节点则执行更新的具体操作。
下面给出一个yaml示例定义Deployment
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80
5.2 StatefulSet
- 管理有状态应用。
- 提供稳定的 Pod 标识、持久存储和有序部署。
- 适合数据库等需要稳定网络标识的场景。
- 控制平面确保 Pod 按预定义顺序启动或删除,节点负责提供持久化存储的挂载和网络连接。
下面给出一个yaml示例定义StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:name: web
spec:selector:matchLabels:app: nginx # 必须匹配 .spec.template.metadata.labelsserviceName: "nginx"replicas: 3 # 默认值是 1minReadySeconds: 10 # 默认值是 0template:metadata:labels:app: nginx # 必须匹配 .spec.selector.matchLabelsspec:terminationGracePeriodSeconds: 10containers:- name: nginximage: registry.k8s.io/nginx-slim:0.24ports:- containerPort: 80name: webvolumeMounts:- name: wwwmountPath: /usr/share/nginx/htmlvolumeClaimTemplates:- metadata:name: wwwspec:accessModes: [ "ReadWriteOnce" ]storageClassName: "my-storage-class"resources:requests:storage: 1Gi
5.3 DaemonSet
DaemonSet 是 Kubernetes 中的一种控制器,确保集群中每个节点(或指定节点)都运行一个特定的 Pod 副本。DaemonSet 常用于部署需要与每个节点交互的系统级服务,例如日志收集器(如 Fluentd)、监控代理(如 Prometheus Node Exporter)或网络组件(如 CNI 插件)。当有新节点加入集群时,DaemonSet 会自动在其上创建对应的 Pod 副本,确保服务的一致性和覆盖性。此外,DaemonSet 支持动态更新,通过滚动更新机制可以逐步替换所有节点上的 Pod 副本。
DaemonSet 的一些典型用法:
- 在每个节点上运行集群守护进程
- 在每个节点上运行日志收集守护进程
- 在每个节点上运行监控守护进程
下面给出一个yaml示例定义DaemonSet
apiVersion: apps/v1
kind: DaemonSet
metadata:name: fluentd-elasticsearchnamespace: kube-systemlabels:k8s-app: fluentd-logging
spec:selector:matchLabels:name: fluentd-elasticsearchtemplate:metadata:labels:name: fluentd-elasticsearchspec:tolerations:# 这些容忍度设置是为了让该守护进程集在控制平面节点上运行# 如果你不希望自己的控制平面节点运行 Pod,可以删除它们- key: node-role.kubernetes.io/control-planeoperator: Existseffect: NoSchedule- key: node-role.kubernetes.io/masteroperator: Existseffect: NoSchedulecontainers:- name: fluentd-elasticsearchimage: quay.io/fluentd_elasticsearch/fluentd:v2.5.2resources:limits:memory: 200Mirequests:cpu: 100mmemory: 200MivolumeMounts:- name: varlogmountPath: /var/log# 可能需要设置较高的优先级类以确保 DaemonSet Pod 可以抢占正在运行的 Pod# priorityClassName: importantterminationGracePeriodSeconds: 30volumes:- name: varloghostPath:path: /var/log
6. Job 和 CronJob
- Job:
- 运行一次性任务,直至完成为止。适合任务型负载,如数据处理。
- 控制平面负责调度任务,节点执行具体计算任务。
下面给出一个yaml示例定义Job
apiVersion: batch/v1
kind: Job
metadata:name: example-job
spec:template:spec:containers:- name: example-containerimage: busyboxcommand: ["echo", "Hello, Kubernetes!"]restartPolicy: Never
- CronJob:
- 定时执行任务,类似于 Unix 的 crontab。用于周期性操作,如备份和报告生成。
- 控制平面根据时间规则触发任务调度,节点按要求运行任务。
下面给出一个yaml示例定义CronJob
apiVersion: batch/v1
kind: CronJob
metadata:name: example-cronjob
spec:schedule: "*/1 * * * *"jobTemplate:spec:template:spec:containers:- name: example-containerimage: busyboxcommand: ["date"]restartPolicy: OnFailure
7. Service
- Service 是 Pod 的访问入口。
- 提供服务发现和负载均衡功能。
- 通过标签选择器管理 Pod,确保请求被分配到正确的实例。
- 控制平面动态维护 Pod 的 Endpoint 列表,节点通过 kube-proxy 处理负载均衡和转发规则。
下面给出一个yaml示例定义Service
apiVersion: v1
kind: Service
metadata:name: example-service
spec:selector:app: exampleports:- protocol: TCPport: 80targetPort: 80
8. Ingress
- Ingress 是 HTTP(S) 路由的入口。
- 定义外部请求如何访问集群内部的服务。
- 需要与 Ingress Controller 配合使用,支持域名和路径路由规则。
- 控制平面与 Ingress Controller 协同管理路由规则,节点实现流量转发至对应的 Service。
工作流程
- 用户通过域名或路径发起请求。
- Ingress Controller 拦截请求,根据定义的规则将其转发到相应的 Service。
- Service 将请求路由到后端 Pod。
下面给出一个yaml示例定义Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: example-ingress
spec:rules:- host: example.comhttp:paths:- path: /pathType: Prefixbackend:service:name: example-serviceport:number: 80
9.数据卷
在 Kubernetes 中,ConfigMap、Downward API 和 Secret 是三种主要的配置和数据管理方式,帮助应用程序以灵活、安全和标准化的方式管理配置和运行时信息。
ConfigMap 用于存储非敏感的配置信息,例如应用程序的配置文件、环境变量或命令行参数。
特点
- 支持存储键值对或整个配置文件内容。
- 数据可通过环境变量、命令行参数或挂载为文件的方式供 Pod 使用。
- 非加密,适用于非敏感数据。
Downward API 提供运行时信息(如 Pod 名称、Namespace、资源请求限制等)给容器使用。
特点
- 提供关于 Pod 和容器的元信息。
- 通过环境变量或挂载为文件供 Pod 使用。
- 无需事先创建对象,直接基于 Pod 元数据。
Secret 用于存储敏感信息,例如密码、API 密钥或证书。
特点
- 数据加密存储于
etcd
中(Base64 编码,非真正加密)。 - 提供更高的安全性,适用于敏感信息。
- 数据可通过环境变量或挂载为文件供 Pod 使用。
云原生通过微服务、容器、DevOps 和持续交付实现敏捷开发和稳定运行,Kubernetes 是实现这一目标的核心技术。通过了解 Kubernetes 的资源模型、控制器和网络组件,可以帮助企业构建高效、灵活和可扩展的云原生应用。
相关文章:
云原生基础设施指南:精通 Kubernetes 核心与高级用法
1. 云原生的诞生 随着互联网规模的不断增长,以及企业对敏捷开发、快速交付和高可用性的需求日益增强,传统的单体架构逐渐暴露出局限性,难以满足现代业务对动态扩展和高效迭代的要求。为此,云原生应运而生。 云原生是为云计算时代…...
Pyinstaller使用指南以及遇到的问题
一、在cmd命令行执行安装pyinstaller工具 pip install pyinstaller 二、在命令行中执行打包命令即可 格式如下: pyinstaller [opts] yourprogram.py 参数含义 -F 指定打包后只生成一个exe格式的文件(建议写上这个参数) -D –onedir 创建一个目录,包含…...
美图撕掉蔡文胜标签
卖掉比特币的美图不投机了。 作者|周立青 编辑|杨舟 12月5日,比特币突破10万美元大关,曾花费1亿美元购入虚拟货币的美图宣布已出售所有加密货币。 美图在港交所发布公告称,自2024年11月起,公司已开始出售其持有的加密货币&…...
【Spring】IoC和DI,控制反转,Bean对象的获取方式
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:什么是IoC 1:什么是容器 2:什么是IoC 二:IoC应用…...
【015】对文件进行压缩_#py
对文件进行压缩 1. 下载7z软件2. 调用exe文件3. 压缩和分卷压缩4. 完整代码 1. 下载7z软件 从官网下载https://www.7-zip.org/软件。 2. 调用exe文件 主要是通过 subprocess 调用对应的command的命令。 subprocess.run(command, checkTrue)其中 command 的应包含7z软件的ex…...
OD C卷【智能成绩表】
题目 小明来到某学校当老师,需要将学生按考试总分或单科分数进行排名。 输入描述: 第一行输入学生人数n、科目数量m; 0<n<100; 0<m<10 第二行输入m个科目名称,以空格分开;科目只由英文字母构成,长度不超过…...
开源架构与云计算的传奇融合
开源架构与云计算的传奇融合 一、引言二、开源架构与云计算的卓越优势(一)成本效益惊世骇俗(二)灵活性与可扩展性无与伦比(三)社区支持与创新活力爆棚 三、震撼应用案例剖析(一)容器…...
【SpringBoot-事件监听】
文章目录 1. 定义事件2. 创建监听器3. 发布事件注意事项 在Spring Boot中,事件监听是一种常用的机制,用于在应用程序的不同部分之间进行松耦合的通信。Spring Boot基于Spring框架,因此它继承了Spring的事件发布和监听机制。以下是如何在Sprin…...
【docker】springboot 服务提交至docker
准备docker (不是docker hub或者harbor,就是可以运行docker run的服务),首先确保docker已经安装。 本文以linux下举例说明: systemctl stats docker ● docker.service - Docker Application Container EngineLoaded…...
Facebook广告突然无消耗?原因解析与解决方案。
在Facebook广告投放中,广告突然无消耗是很多广告主都会遇到的难题。这种情况不仅浪费时间,还可能导致营销活动停滞,影响业务发展。那么,广告无消耗的原因是什么?又该如何解决呢? 一、Facebook广告无消耗的…...
05 在 Linux 使用 AXI DMA
DMA简介 DMA 是一种采用硬件实现存储器与存储器之间或存储器与外设之间直接进行高速数据传输的技术,传输过程无需 CPU 参与(但是CPU需要提前配置传输规则),可以大大减轻 CPU 的负担。 DMA 存储传输的过程如下: CPU 向…...
android AIDL ipc binder转换
一. 概述 众所周知AIDL并不是所有的数据类型都可以传输。 可以传输的类型包括: 1.原生类型 2.String 3. CharSequence 4. List 5.Map 6. Binder 7. Parcelable 容器类 parcelable传输的时候会分解成成员,数组item的方式,传输完成后再进行…...
【docker】12. Docker Volume(存储卷)
什么是存储卷? 存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。这就意味着,当我们在容器中的这个目录下写入数据时,容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录。 在宿主机上…...
1. 机器学习基本知识(4)——机器学习测试和验证
1.6 测试和验证 了解模型对新实例的泛化能力的唯一方法是在新实例上进行实际尝试。 一种方法是将模型部署到生产环境并监控其性能。 这种方法很有效,但如果模型非常糟糕,你的用户就会抱怨,所以这显然不是最好的方法。 更好的选择是将数…...
生成式AI概览与详解
1. 生成式AI概览:什么是大模型,大模型应用场景(文生文,多模态) 生成式AI(Generative AI)是指通过机器学习模型生成新的数据或内容的人工智能技术。生成式AI可以生成文本、图像、音频、视频等多种…...
软件项目标书参考,合同拟制,开发合同制定,开发协议,标书整体技术方案,实施方案,通用套用方案,业务流程,技术架构,数据库架构全资料下载(原件)
1、终止合同协议书 2、项目合作协议 3、合同交底纪要 4、合同管理台账 软件资料清单列表部分文档清单:工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单&…...
C++ extern “C“ 用法
extern “C” 由于c中需要支持函数重载,所以c和c中对同一个函数经过编译后生成的函数名是不相同的 extern “C” 的主要作用就是为了实现c代码能够调用其他 c 语言代码。 1(不常用) //告诉编译器 show() 函数按c语言的方式进行编译和链接 extern "C" voi…...
Node.js(v16.13.2版本)安装及环境配置教程
一、进入官网地址下载安装包 https://nodejs.org/zh-cn/download/ 选择对应你系统的Node.js版本,这里我选择的是Windows系统、64位(v16.13.2版本) 下载后的zip文件 二、解压文件到nodejs,并打开文件夹nodejs,复制解压…...
父组件调用子组件的方法
父组件 在父组件中调用子组件的sayHello()函数 <template><div><button click"getChild(wendu)">触发子组件方法wendu</button><button click"getChild(shidu)">触发子组件方法shidu</button><el-dialog v-model…...
运维排错系列:Excel上传失败,在剪切板有大量信息。是否保存其内容...
问题点 在导入 Excel 数据到 SAP 的时候,某些时刻系统会出现如下的弹窗。 上载 excel 文件时,您会收到错误:“剪贴板上有大量信息。XXX” Microsoft Office Excel 的弹出窗口显示以下信息: 剪贴板上存在大量信息。是否保留其内容…...
【自学】Vues基础
学习目录 Vues基础本地应用网络应用综合应用 工具的准备 我个人比较喜欢使用HTMLDROWNER,学习资料推荐使用VC,仅供选择吧 前置知识 HTMLCSSJSAJAX:这个是学习资料博主推荐的 个人感觉认真学好HTMLCSSJS理解vues基础很容易上手 官方网址…...
ubuntu 7z解压rar文件报错:unsupported method message
问题说明 最近项目需要支持线上上传rar格式,7z来解压缩入库。开发测试过程中发现使用以下命令解压报错, 7z x FileImportTest01.rar -p"123456" -o/home/download -y文件目录内容已列出,但无法解压文件!!! 仔细检查命令没有问题…...
C语言基础六:循环结构及面试上机题
Day06:循环结构 定义 代码的重复执行,就叫做循环 循环的分类 无限循环:其实就是死循环,程序设计中尽量避免无限循环。程序中的无限循环必须可控。有限循环:循环限定循环次数或者循环的条件。 循环的构成 循环条件循环体 当型循环的实现…...
【蓝桥杯每日一题】技能升级
技能升级 2024-12-10 蓝桥杯每日一题 技能升级 二分 题目大意 一个角色有 N 种可以增加攻击力的技能,对于第 i 个技能首次升级可以提升 A i A_i Ai 点攻击力,随后的每次升级增加的攻击力都会减少 B i B_i Bi 。升级 ⌈ A i B i ⌉ \lceil \frac{A…...
C++作业4
1、思维导图 2、Person和Stu的拷贝构造和拷贝赋值函数 #include <iostream> using namespace std; class Person {string name;int *age; public:Person():age(new int(23)){cout << "Person的无参构造" << endl;}//初始化列表 :成员属性1(值),成…...
密码学——密码学基础、散列函数与数字签名
1.密码学概述 是信息安全的基础和核心,是防范各种安全威胁的重要手段,信息安全的许多相关知识都与密码学相关。 密码学发展 密码学是一门古老而又年轻的学科 ,几千年以前就存在,至今仍在发展演进。地位非常重要甚至起决定性作用…...
鹦鹉的饮食偏好:探索多彩的食物世界
鹦鹉,作为聪明且迷人的鸟类,其饮食习性一直是鸟类爱好者关注的焦点。了解鹦鹉喜欢吃什么食物,对于确保它们的健康与幸福至关重要。 鹦鹉的食物种类丰富多样,首先是各类种子与谷物。例如,葵花籽富含脂肪和蛋白质&#…...
AtCoder Beginner Contest 383
C - Humidifier 3 Description 一个 h w h \times w hw 的网格,每个格子可能是墙、空地或者城堡。 一个格子是好的,当且仅当从至少一个城堡出发,走不超过 d d d 步能到达。(只能上下左右走,不能穿墙)&…...
HALCON算子函数 Filter(过滤)(1)
Arithmetic图像算数处理 abs_diff_image:计算两个图像的绝对差别;abs_image:计算一个图像的绝对值(模数);add_image:使两个图像相加;div_image:使两个图像相除ÿ…...
哈希知识详解
目录 一、哈希 二、哈希函数 1、直接定值法 2、除留余数法 三、哈希冲突 四、哈希冲突解决 1、闭散列(开放定值法) 闭散列代码 2、哈希桶 哈希桶的结构 查找方法 插入方法 删除方法 析构 迭代器 完整哈希桶代码 五、通过哈希桶封装 unordered_map 和 unordered_set 一、…...
分库分表基本概念讲解
一、基本概念 产生背景 在数据爆炸的年代,单表数据达到千万级别,甚至过亿的量,都是很常见的情景。这时候再对数据库进行操作就是非常吃力的事情了,select个半天都出不来数据,这时候业务已经难以维系。不得已…...
【DRAM存储器四十二】LPDDR5介绍--LPDDR5的bank架构还能配,为什么8B模式只支持BL32?
👉个人主页:highman110 👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 参考资料:《某LPDDR5数据手册》 、《JESD209-5C》 目录 BG mode 16B mode 8B mode...
ubuntu 新建脚本shell并增加图标 双击应用实现python运行
1.使用nano创建shell脚本文件 需要在终端窗口中输入“nano”以打开文本编辑器。 nano 在创建脚本文件前,我们要了解脚本文件是如何运行的: 直接运行:直接在终端直接输入需要运行的脚本文件名称,系统或用缺省版本的shell运行脚…...
【0x0006】HCI_Disconnect命令详解
目录 一、命令概述 二、命令格式和参数说明 2.1. HCI_Disconnect 命令格式 2.2. Connection_Handle 2.3. Reason 三、返回事件说明 3.1. HCI_Command_Status 事件 3.2. HCI_Disconnection_Complete事件 3.3. HCI_LE_CIS_Established事件(针对CIS) 四、事件执行流程…...
【C语言练习(5)—回文数判断】
C语言练习(5) 文章目录 C语言练习(5)前言问题问题解析结果总结 前言 通过回文数练习,巩固数字取余和取商如何写代码 问题 输入一个五位数判断是否为回文数? 问题解析 回文数是指正读反读都一样的整数。…...
【全连接神经网络】核心步骤及其缺陷
前向传播 计算公式(其中一种) x1/x2:输入值,一般是神经网络上一层的输出或者输入数据本身,上图中表示两个节点w11 w13:权重,在神经网络中,权重是学习的参数,表示每个输入…...
【Vulkan入门】11-CreateCommandBuffer
[TOC]目录 先叨叨 先叠个甲,我个人都觉得本篇有点灌水的嫌疑。 到上篇为止,已经创建好了Pipeline。接下来就是要给Pipeline发指令进行渲染了。 从一开始就不断强调,发给Vulkan的指令要通过Queue发送给Device。命令不是一条一条推到Queue中的…...
Redis原理—4.核心原理摘要
大纲(9870字) 1.Redis服务器的Socket网络连接建立 2.Redis多路复用监听与文件事件模型 3.基于队列串行化的文件事件处理机制 4.完整的Redis Server网络通信流程 5.Redis串行化单线程模型为什么能高并发 6.Redis内核级请求处理流程与原理 7.Redis通信协议与内核级请求数据…...
面向对象系统的分析和设计
来源:《设计模式精解-GOF23种设计模式解析》 作者:k_eckel k_eckels mindview - 博客园 (cnblogs.com) --------- 面向对象系统的分析和设计实际上追求的就是两点: (1)高内聚 (2)低耦合 …...
单片机:实现交通信号灯(附带源码)
使用单片机实现交通信号灯控制系统是一个经典的嵌入式系统应用。这个项目可以帮助你理解如何通过单片机控制不同颜色的LED灯、处理时间控制、以及输入输出的基本操作。通过这个项目,你将掌握如何设计交通信号灯的时序控制、如何实现定时控制交通灯的切换、以及如何与…...
小白如何学习看懂CAD图纸?
首先,你需要了解CAD图纸的基本构成,包括图例、尺寸标注、比例等等。接着,你可以通过一些专业的书籍、在线课程或视频教程来逐步学习如何识别和理解这些元素。但建议不要学的太复杂了。 掌握基本概念: 坐标系:了解CAD…...
HarmonyOS-高级(一)
文章目录 一次开发、多端部署自由流转 🏡作者主页:点击! 🤖HarmonyOS专栏:点击! ⏰️创作时间:2024年12月09日12点19分 一次开发、多端部署 布局能力 自适应布局 拉伸能力均分能力占比能力缩放…...
Datawhale AI 冬令营(第一期)定制你的第一个专属模型-学习笔记
最近我报名参加了Datawhale组织的主题为“动手学系列,人人都能应用的AI”的Datawhale AI冬令营(第一期)。 本次学习一共12天,从12月10日-12月21日,学习会包含【跑通速通手册】,【学习大模型微调&数据集…...
群控系统服务端开发模式-应用开发-登录退出发送邮件
一、登录成功发送邮件 在根目录下app文件夹下controller文件夹下common文件夹下,修改Login.php,代码如下 <?php /*** 登录退出操作* User: 龙哥三年风水* Date: 2024/10/29* Time: 15:53*/ namespace app\controller\common; use app\controller\Em…...
app-2 App 应用抓包之 Postern+Charles
一、前言 本篇是基于 Postern Charles 方式对安卓应用数据包进行抓取。可以抓取到市面上大多数的app数据包。 二、环境准备 postern:postern下载地址 charles:Charles 4.5.6 中文版(便携免安装).rar 提取码:6d8f 三、配置及抓包测试 3.…...
cnocr配置及训练测试
cnocr配置及训练测试 1,相关链接2,已有模型调用测试(1)下载相关模型(2)Cnstd文本检测模型(3)模型调用解析脚本 3,自定义数据集训练测试(1)标签转换…...
【优选算法 前缀和】前缀和算法模板详解:一维前缀 & 与二维前缀和
一维前缀和 题目解析 算法原理 解法一:暴力解法 简单模拟,读完题意有 q 次询问,给哪两个数,就求哪段区间的和并且返回,这样的做法,时间复杂度为O(N*q),这个时间复杂度会超时…...
【记录】用JUnit 4的@Test注解时报错java.lang.NullPointerException的原因与解决方法
项目场景: 在练习黑马点评的逻辑过期解决缓存击穿时,编写了一个预热缓存数据的单元测试 SpringBootTest public class HmDianPingApplicationTests {Resourceprivate ShopServiceImpl shopService;Testpublic void testSaveShop() throws InterruptedE…...
Transformer入门(6)Transformer编码器的前馈网络、加法和归一化模块
文章目录 7.前馈网络8.加法和归一化组件9.组合所有编码器组件构成完整编码器 7.前馈网络 编码器块中的前馈网络子层如下图所示: 图1.32 – 编码器块 前馈网络由两个带有ReLU激活函数的全连接层组成。全连接层(Fully Connected Layer)有时也…...
(七)腾讯cloudstudio+Stable-Diffusion-webui AI绘画教程-安装Stable-Diffusion-WebUI
一、说明 本文选择安装stable-diffusion-webui最新版本 cloud studio 免费版最大的问题是空间不足,我晚上上传时超过了硬盘大小,直接不能启动,没办法,删除,又建了一个工作空间 二、安装 1、打开终端 2、配置Git代理…...