Kubernetes入门:构建和管理容器化应用的强大工具

引言

在当今快速发展的科技领域中,容器化技术已经成为构建和管理应用程序的重要工具。随着应用程序规模的增长和复杂性的提高,传统的部署和管理方法已经无法满足日益增长的需求。因此,容器化技术的出现为软件开发和运维带来了全新的解决方案。

Kubernetes作为容器编排和管理平台的领导者,已经在业界广泛应用,并且成为了云原生应用开发的事实标准。其开源的本质、灵活的架构以及强大的功能使得它成为了大规模应用部署和管理的理想选择。

本文将深入探讨Kubernetes的各个方面,从基本概念到高级用法,以帮助读者全面了解和掌握这一强大工具。首先,我们将介绍Kubernetes的定义、核心概念以及与Docker等容器技术的关系。随后,我们将深入剖析Kubernetes的关键组件和工作原理,帮助读者建立起对其架构和功能的清晰认识。接着,我们将探讨Kubernetes的架构设计和最佳实践,以及如何开始在实际项目中应用它。最后,我们将介绍Kubernetes生态系统中的相关工具和平台,并展望其未来的发展趋势。

通过本文的阅读,读者将能够全面了解Kubernetes的优势、用法和最佳实践,从而更好地利用这一强大工具来构建和管理容器化应用,提升应用部署和管理的效率与可靠性。

第一部分:Kubernetes是什么?

定义和核心概念

Kubernetes(常简称为K8s)是一个开源的容器编排引擎,用于自动化部署、扩展和管理容器化应用程序。它允许开发人员轻松地构建、运行和扩展容器化应用,而无需担心底层基础设施的细节。

在Kubernetes中,容器被组织成逻辑单元称为Pods。Pods是一个或多个容器的组合,共享网络和存储资源,并且可以在同一主机上紧密协作。Kubernetes提供了丰富的API和工具,用于管理Pods以及它们之间的交流。

Kubernetes的主要功能

Kubernetes的主要功能包括:

  • 自动化部署:通过定义所需的状态和配置,Kubernetes能够自动化地部署应用程序,并确保它们始终处于所需状态。
  • 自动化扩展:根据应用程序的负载和需求,Kubernetes能够动态地扩展和缩小应用程序实例数量。
  • 服务发现和负载均衡:Kubernetes提供了内建的服务发现机制和负载均衡器,使得应用程序能够互相访问并平衡流量。
  • 自愈能力:Kubernetes能够监控应用程序的状态,并在出现故障或异常情况时自动恢复服务。

Kubernetes与Docker的关系

尽管Kubernetes和Docker都与容器相关,但它们解决的问题领域有所不同。

Docker是一种容器化技术,用于将应用程序及其依赖项打包到可移植的容器中。Docker提供了构建、发布和运行容器的工具和平台。

而Kubernetes则是一个容器编排引擎,专注于管理和协调大规模的容器部署。它提供了一种方式来管理多个Docker容器的部署、扩展和运行。

因此,可以将Docker视为创建和打包容器的工具,而Kubernetes则是管理和编排这些容器的平台。它们通常一起使用,但并不互相替代。

第二部分:Kubernetes的关键组件

Kubernetes的关键组件包括Master节点和Worker节点、Pod、Service、Volume、Namespace、Deployment和StatefulSet。让我们逐一了解它们。

Master节点和Worker节点

Kubernetes集群由两种类型的节点组成:Master节点和Worker节点。Master节点负责管理和控制整个集群的状态和配置,包括调度应用程序、管理节点间的通信、监控集群健康状态等。而Worker节点负责运行应用程序容器,接收Master节点的指令并执行相应的操作。

Pod:容器的逻辑宿主

Pod是Kubernetes中最小的部署单元,它可以包含一个或多个紧密关联的容器。这些容器共享网络和存储资源,并且可以在同一主机上高效地协作。Pod提供了一种逻辑宿主的概念,使得容器间的通信和数据共享变得简单且高效。

Service:稳定的网络接口

Service定义了一组Pods的稳定访问点,使得应用程序能够以统一的方式暴露和访问服务。通过Service,Kubernetes提供了内建的服务发现机制和负载均衡功能,使得应用程序能够可靠地进行通信,并且能够动态地适应集群中Pods的变化。

Volume:数据持久化存储

Volume提供了一种持久化存储数据的方式,使得应用程序能够在容器之间共享数据,并且能够在容器重启或迁移时保持数据的持久性。Kubernetes支持多种类型的Volume,包括本地存储、网络存储和云存储等,以满足不同应用场景下的需求。

Namespace:资源隔离

Namespace提供了一种逻辑隔离的机制,用于将集群中的资源进行分组和隔离。通过Namespace,可以将不同的应用程序或团队彼此隔离开来,以确保它们之间的资源不会相互干扰。这样可以有效地管理和组织集群中的资源,并且能够提高安全性和可管理性。

Deployment和StatefulSet:管理应用部署与更新

Deployment和StatefulSet是Kubernetes中用于管理应用部署和更新的控制器。Deployment适用于无状态的应用程序,它负责在集群中部署和扩展应用实例,并且能够实现滚动更新和回滚操作。而StatefulSet则适用于有状态的应用程序,它提供了一种有序部署和扩展应用实例的方式,并且能够确保每个实例的唯一性和稳定性。

第三部分:Kubernetes的工作原理

控制平面的职责

Kubernetes的控制平面负责管理整个集群的状态和配置。它包括以下几个关键组件:

  • API Server(API服务器):作为Kubernetes系统的入口,API服务器处理所有的REST请求,验证和配置集群的状态。

  • Scheduler(调度器):Scheduler负责将新创建的Pod调度到集群中的节点上。它考虑诸如资源需求、硬件约束和亲和性/反亲和性等因素,以确保高效的资源利用和应用性能。

  • Controller Manager(控制器管理器):Controller Manager运行多个控制器,监控集群的状态并作出相应的调整。例如,ReplicaSet控制器确保指定数量的Pod副本正在运行,而Node Controller负责管理节点的状态。

  • etcd:etcd是一个分布式键值存储,用于保存集群的状态信息和配置。它作为控制平面的持久化存储,确保集群中各个组件之间的数据一致性和可靠性。

节点上的Kubelet和容器运行时

Kubernetes集群中的每个节点都运行着Kubelet和容器运行时。

  • Kubelet:Kubelet是节点上的代理服务,负责管理节点上的Pod和容器。它与控制平面通信,接收来自API服务器的Pod定义,然后通过与容器运行时交互来创建、启动、停止和监视容器。

  • 容器运行时:容器运行时负责在节点上运行容器。Kubernetes支持多种容器运行时,如Docker、containerd和cri-o等。它们负责加载、运行和管理容器,并提供与Kubelet交互的接口。

服务发现和负载均衡

Kubernetes提供了内置的服务发现和负载均衡机制,使得应用程序能够轻松地相互通信,并确保负载在集群中均衡分布。

  • Service(服务):Service定义了一组Pod的逻辑集合,并为它们提供稳定的网络地址和端口。通过Service,应用程序可以通过服务名访问其他Pod,而无需了解其具体的IP地址和端口。

  • 负载均衡:Kubernetes通过内置的负载均衡器,自动将请求分发到后端Pod的多个实例中,以实现负载均衡。这种机制确保了应用程序的可靠性和可扩展性,同时提供了平滑的流量管理。

自动扩缩容和自愈能力

Kubernetes通过自动化的方式实现了应用程序的扩缩容和自愈能力,以应对动态的负载和故障情况。

  • 自动扩缩容:通过水平扩展机制,Kubernetes能够根据应用程序的负载情况自动增加或减少Pod的副本数量。这样可以确保应用程序始终具有足够的资源来处理流量,并在负载下降时节约资源成本。

  • 自愈能力:Kubernetes监视集群中的各个组件和应用程序,及时发现并处理故障。通过自动重启失败的容器、替换不可恢复的节点和重新调度受影响的Pod,Kubernetes确保了集群的高可用性和稳定性。

第四部分:Kubernetes的架构设计

Kubernetes的架构设计旨在提供高可用性、弹性和可扩展性,以满足大规模应用部署和管理的需求。

高可用性集群架构

Kubernetes采用主从架构设计,其中Master节点负责集群的控制和管理,而Worker节点负责运行应用程序容器。

  • Master节点:Master节点是集群的控制平面,包括API服务器、Scheduler、Controller Manager和etcd组件。它们通过选举和复制机制实现高可用性,确保即使部分组件故障,集群仍能继续正常工作。

  • Worker节点:Worker节点是集群的计算节点,负责运行应用程序容器。每个Worker节点上运行着Kubelet服务和容器运行时,它们与Master节点通信并执行集群的指令。

网络模型

Kubernetes采用了扁平的网络模型,即每个Pod都具有自己的IP地址,并且可以通过网络直接与其他Pod通信。这种设计简化了应用程序的网络配置,并提高了网络的可用性和可扩展性。

Kubernetes提供了多种网络插件和解决方案,如Flannel、Calico和Cilium等,用于实现集群内的网络通信和策略控制。

存储选项和PV/PVC机制

Kubernetes支持多种存储选项,包括本地存储、网络存储和云存储等。它提供了持久化卷(Persistent Volume)和持久化卷声明(Persistent Volume Claim)的抽象,用于管理存储资源的分配和使用。

通过PV/PVC机制,应用程序可以声明自己所需的存储资源,并由Kubernetes自动分配和管理。这使得应用程序能够在不同环境中保持一致的存储访问,并实现数据的持久化和迁移。

安全机制:RBAC、Secrets、Network Policy

Kubernetes提供了多层次的安全机制,以保护集群和应用程序的安全和隐私。

  • RBAC(基于角色的访问控制):RBAC允许管理员定义角色和权限,以控制用户和服务账户对集群资源的访问和操作。

  • Secrets(密钥和凭证):Secrets用于存储敏感信息,如密码、API密钥和证书等。它们被加密保存,并且只能以安全的方式传输到Pod中。

  • Network Policy(网络策略):Network Policy允许管理员定义网络规则,限制Pod之间的通信和访问。这有助于防止未经授权的访问和数据泄露。

通过这些安全机制,Kubernetes提供了完善的安全性保障,保护集群和应用程序免受潜在的安全威胁和攻击。

第五部分:如何开始使用Kubernetes

安装和配置Kubernetes集群

  1. 选择合适的安装方式:根据自己的需求和环境选择适合的安装方式,可以是本地环境、云服务提供商的托管服务或者自建的物理服务器。

  2. 使用现成的集群工具:Kubernetes提供了一些集群安装工具,如kubeadm、kops和minikube等,它们能够简化集群的安装和配置过程。

  3. 按照官方文档指引进行安装:Kubernetes官方文档提供了详细的安装指南,包括各种部署方式和平台的说明,可以根据指引逐步完成安装和配置。

kubectl:与集群交互的命令行工具

  1. 安装kubectl工具:kubectl是与Kubernetes集群交互的命令行工具,可以通过包管理器或官方发布的二进制文件进行安装。

  2. 配置kubectl环境:在安装完kubectl后,需要配置kubectl与集群的连接信息,包括API服务器的地址、认证凭证等。可以通过修改kubectl的配置文件或设置环境变量来完成配置。

基本的kubectl命令和操作

  1. 查看集群状态:使用kubectl命令可以查看集群的各种状态信息,如节点列表、Pod列表、服务列表等。

  2. 管理资源对象:kubectl支持对集群中的各种资源对象进行管理和操作,包括创建、删除、更新等操作。

  3. 调试和排查问题:kubectl提供了丰富的调试和排查命令,如查看Pod日志、执行命令进入容器、描述资源对象等,有助于定位和解决问题。

部署第一个应用

  1. 编写应用的Pod描述文件:首先需要编写一个Pod的描述文件,包括应用的镜像、端口映射等信息。

  2. 使用kubectl创建Pod:通过kubectl命令将Pod描述文件应用到集群中,创建并启动应用的Pod实例。

  3. 暴露服务:如果应用需要对外提供服务,可以通过Service对象暴露服务,使其能够被集群内外的其他组件访问。

  4. 验证应用状态:使用kubectl命令查看应用的状态和日志,确保应用正常运行。

通过以上步骤,你将能够快速上手使用Kubernetes,并成功部署第一个应用程序到集群中。随着对kubectl和Kubernetes的熟悉程度提高,你可以进一步探索更多的功能和操作。

第六部分:Kubernetes的生态系统

Kubernetes的生态系统是一个庞大而丰富的环境,涵盖了各种工具、平台和解决方案,为用户提供了丰富的功能和选择。

Helm:Kubernetes的包管理器

  1. 简化部署流程:Helm允许用户将Kubernetes应用打包成易于管理的Chart,并通过Helm进行安装、更新和卸载,大大简化了应用部署和管理的流程。

  2. 社区支持和丰富的Chart仓库:Helm拥有庞大的社区支持,用户可以在Helm Hub上找到数千个开源的Chart,涵盖了各种常见的应用程序和服务。

Prometheus和Grafana:监控Kubernetes集群

  1. Prometheus:作为一款开源的监控系统,Prometheus可以对Kubernetes集群进行全面的监控和警报,帮助用户了解集群的状态和性能指标。

  2. Grafana:Grafana是一个流行的开源数据可视化工具,与Prometheus集成后,可以创建漂亮而直观的监控仪表板,帮助用户更直观地理解集群的运行情况。

Istio:服务网格的实现

  1. 流量管理和控制:Istio提供了丰富的流量管理功能,包括流量路由、负载均衡和故障恢复,使得用户能够更灵活地控制服务之间的通信和流量。

  2. 安全性和可观察性:Istio提供了强大的安全性和可观察性功能,包括流量加密、访问控制和请求跟踪,帮助用户保护服务的安全性并进行故障排查。

Operator:自定义资源和控制器

  1. 自动化运维和管理:Operator是一种自定义的Kubernetes控制器,可以通过自定义资源定义和实现应用程序的自动化运维和管理,例如自动扩缩容、备份和恢复等操作。

  2. 生态系统的丰富性:Operator生态系统正在不断发展壮大,用户可以在Operator Hub上找到各种各样的Operator,覆盖了多个领域和应用场景。

其他相关工具和平台

除了上述提到的工具和平台外,Kubernetes的生态系统还涵盖了诸如CI/CD工具、日志管理系统、安全扫描工具等各种相关工具和平台,为用户提供了丰富的选择和解决方案。

Kubernetes的生态系统的不断发展和壮大为用户提供了更多的可能性和灵活性,使得用户能够更轻松地构建、部署和管理容器化应用。

第七部分:Kubernetes的最佳实践

Kubernetes作为一个复杂而强大的容器编排平台,有一些最佳实践可以帮助您更有效地利用它,并确保您的应用在生产环境中稳定运行。

应用容器化的建议

  1. 微服务化设计:将应用拆分为小型、可独立部署的微服务,这有助于降低单个组件的复杂性,提高可维护性和扩展性。

  2. 适当的容器镜像设计:精简容器镜像,减少不必要的依赖和组件,避免使用不安全或过期的软件包,提高容器的安全性和性能。

配置管理

  1. 使用配置文件:将应用的配置信息抽离为配置文件,避免将配置硬编码到容器镜像中,以便在不同环境中轻松部署和管理应用。

  2. 集中化配置管理:使用Kubernetes的ConfigMap和Secrets机制集中管理应用的配置信息,确保配置的安全性和一致性。

日志和监控策略

  1. 集中式日志收集:配置容器将日志输出到标准输出,并使用集中式日志收集工具(如Fluentd、ELK等)进行收集、存储和分析,以便进行故障排查和性能调优。

  2. 全面的监控:设置监控警报,监控应用的关键指标(如CPU、内存、网络流量等),及时发现和解决潜在的问题。

安全和合规性

  1. RBAC权限控制:使用Kubernetes的RBAC功能限制用户对集群资源的访问权限,确保只有授权的用户可以进行操作。

  2. 敏感信息管理:使用Kubernetes的Secrets机制存储和管理敏感信息(如密码、密钥等),确保敏感信息在集群中的安全存储和传输。

性能调优

  1. 合理的资源分配:根据应用的需求和负载情况,合理配置Pod的资源请求和限制,避免资源浪费和性能瓶颈。

  2. 水平扩展和自动化调整:使用Kubernetes的自动扩展机制(如Horizontal Pod Autoscaler)根据负载情况自动调整应用的副本数量,确保应用的稳定性和可扩展性。

通过遵循这些最佳实践,您可以更好地利用Kubernetes构建和管理容器化应用,并确保这些应用在生产环境中运行时稳定、安全且高效。

结语

在本文中,我们深入探讨了Kubernetes作为容器编排平台的重要性以及其在现代软件开发中的广泛应用。从Kubernetes的基本概念和核心功能开始,我们逐步介绍了其关键组件、工作原理、架构设计以及如何开始使用它构建和管理容器化应用。

Kubernetes不仅是一个强大的工具,更是一个生态系统,与各种相关工具和平台紧密集成,为用户提供了丰富的功能和服务。了解和熟练使用这些工具可以帮助您更好地利用Kubernetes,提高工作效率和应用性能。

最后,我们还介绍了一些Kubernetes的最佳实践,包括应用容器化的建议、配置管理、日志和监控策略、安全和合规性以及性能调优。遵循这些最佳实践可以帮助您更好地利用Kubernetes,并确保您的应用在生产环境中稳定、安全且高效地运行。

随着技术的不断发展和社区的持续推进,Kubernetes的未来将更加光明。我们鼓励您积极参与到Kubernetes社区中,学习最新的技术动态,分享您的经验和见解,共同推动Kubernetes生态系统的发展。

希望本文能够为您提供全面而清晰的Kubernetes入门指南,并为您在容器化应用的旅程中提供支持和帮助。感谢您的阅读!


通过参考资料中提供的官方文档、书籍、在线课程以及社区论坛和博客,您可以进一步深入学习和探索Kubernetes的世界。祝您在使用Kubernetes的过程中取得成功!

参考资料

  • 官方文档:Kubernetes官方文档提供了详细的指南、教程和示例,是学习和使用Kubernetes的首要参考资料。

  • 相关书籍和在线课程:有许多优秀的书籍和在线课程涵盖了Kubernetes的各个方面,例如《Kubernetes权威指南》、《Kubernetes in Action》等书籍以及Coursera、Udemy等在线学习平台上的课程。

  • 社区论坛和博客:Kubernetes拥有一个活跃的社区,许多社区论坛和博客提供了丰富的实践经验、故障排除技巧和最新动态,如Kubernetes官方论坛、Stack Overflow的Kubernetes标签、Medium上的Kubernetes专栏等。

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

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

相关文章

微服务demo(四)nacosfeigngateway

一、gateway使用: 1、集成方法 1.1、pom依赖: 建议:gateway模块的pom不要去继承父工程的pom,父工程的pom依赖太多,极大可能会导致运行报错,新建gateway子工程后,pom父类就采用默认的spring-b…

OSPF之单区域配置

文章目录 单区域配置项目背景项目分析拓扑图配置思路基础配置命令查看路由器接口IP地址信息OSPF配置 测试PC1与PC2互通查看OSPF邻居表修改OSPF路由器的router-id完美的OSPF配置命令写法常用查询命令 单区域配置 项目背景 企业内部存在多个部门,分别属于不同的网段…

揭秘谷歌Gemini Pro 1.5:如何免费体验处理超长对话的AI模型?

最近Google发布大模型API,让人有点想哭的那种。 他们发布了Gemini Pro,这个东西的免费key每分钟能调用60次! 想想看,这速度,比GPT-3.5以前的免费key快了30倍不止。 而且,更厉害的是,即使是Ge…

Linux log of erros

I) Linux command 1.1 to give the value, no need space after equality operator yes: num2“W3Cschool” no: num2 “W3Cschool” 1.2 true and false in Linux, which is contrary with C language In Linux: 0 true 1 false At C: 0 false 1 true 1.3 II) Linux Sh…

Redisson源码研究

Redisson源码研究 主要分析RedissonLock Override public boolean tryLock(long waitTime/** 等待时间**/, long leaseTime/** TTL时间 **/, TimeUnit unit/** 时间单位 **/) throws InterruptedException {long time unit.toMillis(waitTime);long current System.current…

vue+elementUI搭建动态表头的表格

前提:以下代码是vue2项目结合elementUi完成的 数据结构 后端传来的数据是两个list,一个表头的list,一个表格内容的list // 表头 headTableAtts: [{ columnLabel: 姓名, columnName: name },{ columnLabel: 年龄, columnName: age },{ colu…

【深耕 Python】Data Science with Python 数据科学(2)jupyter-lab和numpy数组

关于数据科学环境的建立,可以参考我的博客:【深耕 Python】Data Science with Python 数据科学(1)环境搭建 Jupyter代码片段1:简单数组的定义和排序 import numpy as np np.array([1, 2, 3]) a np.array([9, 6, 2, …

2549. 统计桌面上的不同数字

2549. 统计桌面上的不同数字 题目链接:2549. 统计桌面上的不同数字 代码如下: class Solution { public://参考:https://leetcode.cn/problems/count-distinct-numbers-on-board/solutions/2080589/shu-xue-o1-jie-by-endlesscheng-hucn// …

堆和栈的空间差异

先来一段这样的代码&#xff1a; #include <stdio.h> //堆和栈的差异 char* print_stack(){char c[100]"hhhhhhhhhhhhhhhhh";//这里c算是一个指针puts(c);char *p;pc;return p; } int main() {char *p;p print_stack();puts(p);return 0; } 执行之后的结果&…

中国象棋AI在线对弈游戏源码

源码介绍 这是一款html5小游戏&#xff0c;主要功能在于js&#xff0c;带一套皮肤、内置ai算法&#xff0c;有能力的可以自行修改。 源码截图 下载地址 链接&#xff1a;https://pan.baidu.com/s/1fYp1HWsd91nJOdX1M8RFtQ?pwdh2iz 提取码&#xff1a;h2iz

C#——系统学习(LINQ)

C#中的LINQ (Language Integrated Query) LINQ&#xff08;Language Integrated Query&#xff09;是C#中一项强大的功能&#xff0c;它将查询功能无缝集成到C#语言中&#xff0c;使得开发者能够以一致且简洁的方式处理各种数据源&#xff0c;如内存中的集合、数据库、XML文档…

Centos JDK1.8 下载安装

https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html 一 RPM包安装 rpm -ivh jdk-8u391-linux-x64.rpm /etc/profile export JAVA_HOME/usr/java/jdk1.8.0-x64 export PATH$JAVA_HOME/bin:$PATHsource /etc/profile二 tar.gz 包手动…

RabbitMQ基础笔记

视频链接&#xff1a;【黑马程序员RabbitMQ入门到实战教程】 文章目录 1.初识MQ1.1.同步调用1.2.异步调用1.3.技术选型 2.RabbitMQ2.1.安装2.1.1 Docker2.1.1 Linux2.1.1 Windows 2.2.收发消息2.2.1.交换机2.2.2.队列2.2.3.绑定关系2.2.4.发送消息 2.3.数据隔离2.3.1.用户管理2…

Arcgis获取乡镇矢量

现有全中国乡镇矢量边界&#xff08;2023年&#xff09;&#xff0c;如何获取其中的自己所需的子区域&#xff08;一个小镇&#xff09;呢&#xff1f; 可以先去查一下自己的镇代码&#xff0c;我查的是东马圈镇代码 打开分析工具-提取分析-筛选 刚刚记下了FID 验证一下&am…

vitepress builld报错

问题&#xff1a;build时报错&#xff1a;document/window is not defined。 背景&#xff1a;使用vitepress展示自定义的组件&#xff0c;之前build是没有问题了&#xff0c;由于新增了qr-code以及quill富文本组件&#xff0c;导致打包时报错。 原因&#xff1a;vitepress官…

Android上执行shell命令的总结

Android提供了两种执行shell命令的方法。 1.Runtime.getRuntime().exec(cmds) 2.ProcessBuilder(cmds) 两种方法背后的逻辑相同。都是创建一个新的进程&#xff0c;执行shell命令。本文以第一种方法为例。代码如下&#xff1a; public class RuntimeExcUtil {public static…

2060. 奶牛选美

2060. 奶牛选美 - AcWing题库 思路&#xff1a;只有两个连通块&#xff0c;先标记一个连通块。之后将这个连通块全部放入队列跑一个bfs即可。 #include <bits/stdc.h> using namespace std; const int N 121; int fx[] {0, 0, 1, -1}; int fy[] {1, -1, 0, 0}; bool…

在线随机密码生成器源码

纯HTML&#xff0c;该去的已去掉&#xff0c;该简化的简化&#xff0c;最高支持32位混合随机密码生成。 源码下载&#xff1a;在线随机密码生成器源码

算法之美:二叉堆原理剖析及堆应用案例讲解及实现

什么是堆 堆(Heap)是计算机科学中一类特殊的数据结构&#xff0c;通常是一个可以被看做一棵完全二叉树的数组对象。 完全二叉树 只有最下面两层节点的度可以小于2&#xff0c;并且最下层的叶节点集中在靠左连续的边界&#xff0c;只允许最后一层有空缺结点且空缺在右边&#x…

《科技创新与应用》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答&#xff1a; 问&#xff1a;《科技创新与应用》是什么级别期刊&#xff1f; 答&#xff1a;省级&#xff1b;主管单位&#xff1a;黑龙江省科学技术协会&#xff1b;主办单位&#xff1a;黑龙江省创联文化传媒有限公司 问&#xff1a;《科技创新与应用》是核心期刊…