containerd系统级学习大纲

news2024/11/29 2:53:33

文章目录

      • 1 理解Containerd的背景和架构 📚
        • 1.1 历史背景 🕰️
        • 1.2 架构细节 🔧
      • 2 设置开发环境 🛠️
      • 3 源码分析 🔍
      • 4 深入核心功能
        • 4.1 容器生命周期管理
        • 4.2 镜像管理
        • 4.3 网络管理
        • 4.4 存储与快照
        • 4.5 插件系统
      • 5 贡献代码
      • 6 高级话题
      • 7 案例研究和实战演练

1 理解Containerd的背景和架构 📚

1.1 历史背景 🕰️

Containerd 起源于 Docker,最初作为 Docker 的一个内部组件在 2016 年被引入,主要负责容器的生命周期管理。随着容器技术的普及和容器化应用的需求增加,对容器管理工具的要求也随之升高。这促使 Containerd 向一个更加模块化、轻量级且安全的容器运行时环境演变。

2017 年,Containerd 被捐赠给 Cloud Native Computing FoundationCNCF),并作为独立的开源项目继续发展,这标志着它从 Docker 的一个内部组件成长为容器技术生态中的重要角色🌟。

1.2 架构细节 🔧

Containerd 的架构设计旨在提供一个高度模块化和可扩展的容器运行时环境,支持容器的全生命周期管理。主要包括以下几个方面:

  1. 客户端与服务端通信Containerd 通过 gRPCGoogle Remote Procedure Call)协议实现客户端与服务端之间的通信。gRPC 是一种高性能的通用 RPC 框架,它支持多种编程语言,使得 Containerd 能够提供灵活且高效的远程过程调用解决方案📡。

  2. 容器运行时Containerd 内置了 runc,一个符合 OCIOpen Container Initiative)标准的轻量级容器运行时,用于直接在操作系统上运行容器。runc 的设计和实现保证了容器的标准化和兼容性📦。

  3. 镜像管理Containerd 提供镜像拉取、存储和分发的能力,支持 OCI 镜像规范。这意味着 Containerd 可以与 Docker 镜像仓库以及其他兼容 OCI 标准的镜像仓库交互🔄。

  4. 存储和快照管理Containerd 利用快照机制来管理容器的文件系统状态,支持层次化存储和增量更新。这提高了容器镜像和文件系统的管理效率和性能💾。

  5. 插件系统Containerd 设计了一套插件系统,以支持功能的扩展和定制。通过插件,Containerd 可以集成额外的存储、网络或其他资源管理功能,从而增强其灵活性和适应性🔌。

Containerd 的设计哲学是提供一种简单、稳定和高效的容器运行时解决方案,支持广泛的容器生态系统需求,包括云原生应用、微服务架构和容器编排平台等🌐。

2 设置开发环境 🛠️

  1. 环境配置:设置正确的Go版本和必要的工具,如Protobuf编译器。确保你安装了正确版本的Go,以便与containerd兼容。使用go version命令检查当前Go版本。对于Protobuf,你需要安装protoc编译器以及相关的Go插件,以生成gRPC代码。

  2. 理解Makefile:分析Makefile中的任务,了解如何构建和测试containerdMakefile提供了多个目标任务,如build(构建containerd二进制文件)、test(运行测试用例)等。通过执行make <任务名>命令,可以轻松地运行这些任务。例如,make build将构建项目,make test将运行所有测试。

在设置开发环境时,确保遵循containerd的官方文档,并安装所有必需的依赖项。这将帮助你更顺畅地开始containerd的开发和贡献。

3 源码分析 🔍

  1. 主程序入口

    • 文件路径:cmd/containerd/main.go
    • 分析重点:程序的启动流程和初始化服务。这个文件会创建和启动 containerd 的主要服务,如事件监听器、网络接口等。
    • 📌 详细内容:从 main.go 开始,可以看到 containerd 如何设置日志级别、加载配置文件,并初始化各种核心模块,如控制台、快照服务等。
  2. 初始化和配置加载

    • 文件路径:cmd/containerd/command/main.go
    • 分析重点:如何处理配置文件和初始化 containerd 的核心组件。
    • 📌 详细内容:这部分代码负责解析命令行参数,加载并解析配置文件。需要注意的是,containerd 如何将配置文件映射到其内部结构,并且基于这些配置初始化服务和插件。
  3. 服务注册与启动

    • 目录路径:services
    • 分析重点:各种服务的注册机制和启动流程,特别是如何与 gRPC 服务器交互。
    • 📌 详细内容:在 services 目录中,每个服务如镜像服务、容器服务等都有独立的目录和初始化代码。关键是理解这些服务如何注册到 containerd 主进程,并且如何启动服务监听事件或请求。特别是 server.go 文件,它展示了 gRPC 服务器的启动过程和服务注册逻辑。
  4. 额外分析点

    • 插件架构containerd 采用插件化设计,理解其插件系统如何工作对于深入理解 containerd 极为重要。
    • 网络和存储:考虑到 containerd 在容器生命周期中管理网络和存储,探究这部分的源码会提供对其核心功能更深入的理解。

在深入分析 containerd 源码时,关注这些组件如何协同工作来支持容器的运行时环境是非常重要的。每个部分都是理解整个 containerd 系统的关键,而且通过阅读和理解这些代码可以帮助你更好地把握 containerd 的设计和实现逻辑。

4 深入核心功能

4.1 容器生命周期管理

在深入containerd的容器生命周期管理细节时,开发人员需要关注以下内容,其中包括了重点、难点以及底层相关的知识点:

  1. 创建与管理

    • runtime目录下,containerd支持不同的运行时版本(如v1, v2),这些版本对容器的创建、执行、停止和删除等操作有着不同的实现机制。
    • 🚀 重点:深入理解v2运行时如何通过shim进程为每个容器提供隔离的执行环境,以及这一机制如何促进了容器的高效管理。
    • 🧩 难点containerd与底层系统资源(例如cgroups, namespaces)的交互机制,这对于实现资源隔离和限制非常关键。
  2. 监控与事件

    • events目录下实现了containerd处理容器事件和状态更改的机制。
    • 🚀 重点:理解containerd是如何监控容器状态变化,并通过事件系统通知上层应用的。这对于实现高效的状态监控和响应机制至关重要。
    • 🧩 难点:如何自定义事件监听器和处理器,以及如何将这些组件有效地集成进现有的监控系统。
  3. 底层相关知识点

    • gRPC接口containerd使用gRPC协议与上层应用程序通信,管理容器的生命周期。理解gRPC接口的使用对于开发与containerd交云的应用至关重要。
    • 镜像管理containerd负责容器镜像的存储、检索和管理。了解这一过程对于优化容器的构建和部署流程非常有帮助。
    • 网络和存储containerd还管理容器的网络配置和存储挂载。深入这些部分,了解如何配置和优化容器的网络通信和数据持久化。

通过聚焦这些核心功能、难点和底层知识点,开发人员可以获得对containerd容器生命周期管理的全面理解,进而高效地使用和扩展containerd以满足特定的应用需求。

4.2 镜像管理
  1. 拉取流程

    • 通信与同步:开发人员需要理解containerd如何通过remotes目录与不同的镜像仓库进行通信和同步镜像数据。这包括了解镜像仓库的认证机制,如OAuth2或Basic Auth,并且能够处理与私有仓库的加密通信。
    • 🚀 重点:熟悉containerd使用gRPC接口与镜像仓库通信的过程,包括如何发起和管理镜像拉取请求。
    • 🧩 难点:处理与各种镜像仓库(包括私有仓库)的认证和通信,可能需要对不同仓库特定的认证机制有深入的了解。
  2. 镜像存储

    • metadatacontent目录:深入这两个目录了解镜像数据的存储和管理方式是关键。metadata负责存储镜像的元数据,而content则负责实际的层文件(layer files)和快照(snapshot)。
    • 🚀 重点:理解content store的工作原理,包括如何存储镜像层和如何使用快照驱动(snapshotter)来管理容器的文件系统状态。
    • 🧩 难点:镜像数据的优化处理,包括数据去重和层文件的合并。这些操作对于构建高效的镜像存储方案来说至关重要。
  3. 底层相关知识点

    • gRPC接口:深入理解containerd如何通过gRPC接口与外部服务交互,对于有效管理镜像拉取、存储和删除操作至关重要。这包括了解gRPC接口的设计和使用方式。
    • OCI镜像格式:熟悉Open Container Initiative(OCI)规范对镜像格式、标签和层的定义是必要的。这有助于确保处理的镜像符合行业标准,提高了与其他工具和平台的兼容性。
    • 快照技术:掌握快照技术对于高效管理容器的文件系统状态非常重要。这包括理解快照如何工作,以及如何利用它们来优化容器的启动时间和运行效率。

通过深入这些关键领域,开发人员不仅能有效管理containerd中的镜像,还能根据需要对其进行扩展或优化,满足不同的业务需求。

4.3 网络管理
  1. 网络接口和插件:分析pkg/cri/server中的网络管理代码,了解containerd是如何集成CNI并管理容器网络的。

  2. CNI插件集成containerd通过CNI(容器网络接口)插件集成,为容器提供网络功能。🚀重点在于理解CNI插件的配置和工作机制,以及如何在containerd中正确配置和使用这些插件。

  3. 网络配置和管理:开发人员需要熟悉如何配置网络接口、创建网桥、设置IP地址和路由规则等。🛠️难点可能包括网络隔离、流量控制和跨主机容器通信的实现。

  4. 网络隔离与安全:容器网络的隔离性和安全性是至关重要的。开发人员需要了解如何使用网络命名空间、防火墙规则和其他机制来保证网络的隔离和安全。🔒重点在于理解containerd是如何利用Linux的网络命名空间(namespace)和iptables等工具来实现这些功能的。

  5. 底层网络技术:对于底层网络技术的了解也非常重要,比如VxLANOverlay网络、SDN等技术。🧠知识点涉及了解这些技术是如何支持容器网络的扩展性和灵活性,以及它们与containerd的集成方式。

  6. 性能优化:网络性能对于容器化应用非常关键。了解如何监控和优化容器网络性能,比如减少网络延迟、提高吞吐量等,是开发人员需要关注的。⚡难点在于诊断网络瓶颈和实施有效的优化措施。

  7. 故障排查:在容器网络管理中,能够有效地诊断和解决网络问题是一个重要的能力。开发人员需要掌握使用诸如ipbridgeiptablesLinux网络工具进行故障排查的技能。🔍重点在于快速定位问题并采取相应的解决方案。

通过深入理解这些内容,开发人员能够更有效地管理containerd中的容器网络,确保网络的稳定性和高性能,同时满足安全和隔离的需求。

4.4 存储与快照

containerd的存储与快照管理中,开发人员需要关注以下内容,这些内容对于理解和操作containerd的存储机制至关重要:

  1. 层和快照管理:如你所述,已经探讨了在snapshots目录下,快照管理的具体实现,包括快照的创建、复用和合并机制。📂重点在于理解不同快照之间的依赖关系以及如何高效地管理这些快照来优化存储使用。

  2. 持久化数据存储containerd将其持久化数据存储在/var/lib/containerd目录中,这包括content(内容)、snapshots(快照)、metadata(元数据)和runtime(运行时数据)。🔍重点是理解这些组件如何相互作用,以及如何维护和管理这些数据。

  3. 镜像存储和分发containerd负责容器镜像的存储、检索和管理。这涉及到与镜像仓库的通信、镜像的拉取和存储、以及本地镜像缓存的管理。🚚难点在于处理网络问题、镜像验证和加速镜像拉取的策略。

  4. 内容寻址存储containerd使用内容寻址方式存储镜像和其他数据,这意味着每个对象都通过其内容的哈希值进行标识。这种方法提高了数据的完整性和安全性。💡知识点包括理解内容寻址的原理和实际应用。

  5. 垃圾收集:随着容器和镜像的创建和删除,containerd需要有效管理磁盘空间,防止无用数据占用过多空间。开发人员需要了解containerd的垃圾收集机制,包括何时和如何触发垃圾收集。🗑️重点是理解垃圾收集的策略和配置方法。

  6. 存储驱动和插件containerd支持多种存储驱动和插件,允许开发人员根据特定的环境和需求选择最适合的存储解决方案。🔌难点是了解不同存储驱动的优缺点,并根据实际需要选择合适的存储后端。

通过细致地了解以上各点,开发人员不仅能够更好地管理和优化containerd的存储与快照,还能确保容器运行的高效和稳定,同时满足安全和性能的要求。

4.5 插件系统

containerd 的插件系统是其架构的核心部分,它提供了极大的灵活性和可扩展性。以下是containerd插件系统的进一步细节描述,以及开发人员在使用或开发插件时应关注的重点内容。

  1. 插件的定位和功能containerd的插件系统旨在提升容器运行时的模块化和可扩展性。插件可以视为containerd中的独立功能模块,负责特定任务,例如运行时管理、存储操作、网络配置等。🎯

  2. 插件类型

    • Runtime V2 插件:关注容器运行时环境的设置和管理,是containerd架构中的核心插件类型之一,允许开发者替换或扩展默认的容器运行时逻辑。🔌
    • Proxy 插件:作为代理层存在,允许请求转发到其他服务或处理流程,常用于集成外部服务如网络插件或安全检查服务。🔗
    • 内置插件:这些插件通常是containerd核心功能的一部分,如内容管理和快照管理,确保了containerd的基本操作如镜像拉取和容器快照管理。🛠️
  3. 插件的开发和集成:开发新插件或将现有插件集成到containerd中,要求开发者理解插件API和containerd的内部工作机制。这需要开发者不仅具备深入的Go语言知识,还需要对containerd的架构和插件接口有清晰的理解。💻

  4. 插件的意义:插件极大地提升了containerd的灵活性和功能性,使得开发者可以根据需要定制和扩展containerd的功能。通过插件,可以在不修改核心代码的情况下增加新特性或改进现有功能。🌟

  5. 安全性和性能考虑:开发或集成插件时,需特别注意其对containerd整体性能的影响及可能引入的安全隐患。高效且安全的插件不仅可以提升containerd的性能,还可以确保容器环境的安全稳定。🔒

  6. 社区和生态containerd拥有活跃的开发社区,许多功能强大的插件都是由社区贡献的。参与社区不仅可以了解最新的插件开发动态,还可以与其他开发者交流插件开发的经验和技巧。🌱

通过深入了解containerd的插件系统及各种插件类型,开发人员可以更好地利用这些插件来扩展和优化容器运行时环境。在适当的地方加入自己开发的插件或集成优秀的社区插件,可以极大地提升容器应用的性能和安全性。

5 贡献代码

  1. 代码审查和社区参与:深入了解通过git和GitHub进行代码审查的流程,参与到containerd的开源社区中,贡献代码和文档。🔍这是构建高质量软件的关键步骤,也是加深对containerd理解的好机会。

  2. 贡献点发现:通过分析开放的Issues和Pull Requests,找到可以贡献的地方,特别是对新手友好的任务。🎯这有助于快速融入社区,同时对项目作出有意义的贡献。

  3. 理解containerd架构和设计:深入了解containerd的架构和设计原理,包括其核心组件如何协同工作。🏗️这对于贡献高质量的代码和功能至关重要。

  4. 参与设计讨论和技术选型:积极参与社区的设计讨论和技术选型过程。💡这不仅能帮助你对containerd有更深入的理解,也是展示你专业知识的好机会。

  5. 编写和改进文档:对于开源项目而言,文档同样重要。编写、改进containerd的文档,使新用户更易于上手,也是一种重要的贡献。📝良好的文档可以极大地提高项目的可用性和可访问性。

  6. 关注性能和安全性:在贡献代码时,特别关注性能优化和安全性改进。🔐这些改进对于维持containerd作为顶级容器运行时的地位至关重要。

  7. 社区支持和帮助:在社区论坛、聊天室提供支持,帮助解答其他开发者和用户的疑问。🤝这种互助精神是开源社区的核心,能够促进社区的健康发展。

  8. 推广containerd:通过博客文章、演讲和教程等方式推广containerd,分享你的经验和最佳实践。🌟这不仅能提升自己的影响力,也有助于扩大containerd的用户基础。

通过参与上述活动,你不仅能对containerd作出直接的贡献,也能在过程中学习和成长,成为社区中的一员。

6 高级话题

  1. 性能优化:使用工具如pprof进行性能分析,找出瓶颈并探索优化策略。开发人员应关注容器启动时间、运行时性能、资源消耗等指标。性能优化是一个持续的过程,需要开发人员不断地评估和调整。🚀

  2. 安全加固:研究containerd中实现的安全特性,如如何使用命名空间隔离,SELinux策略的支持,以及Seccomp策略的应用。这要求开发人员深入理解Linux安全机制和容器隔离技术。安全是永远的热点和难点,需要开发人员持续关注和学习。🔒

  3. 高级网络配置:掌握containerd如何与CNI(容器网络接口)集成,实现高级网络配置和管理。开发人员需要了解网络命名空间、虚拟网络设备等底层网络技术。网络配置对于容器间的通信和隔离至关重要。🌐

  4. 存储管理:深入理解containerd的存储驱动和镜像管理。这包括但不限于镜像层的合并、存储优化策略和数据卷管理。存储是容器技术中的核心组成部分,开发人员需要关注数据的持久化和高效存取。💾

  5. 插件机制:了解containerd的插件架构,包括如何开发和集成自定义插件。这对于扩展containerd的功能非常关键。插件机制允许开发人员根据具体需求添加新的功能,是containerd灵活性的关键所在。🔌

  6. 容器安全扫描:研究如何集成安全扫描工具,自动检测容器镜像中的漏洞。开发人员需要关注最新的安全漏洞和修复策略,以保障容器应用的安全。这是维护容器应用安全的重要手段。🔍

为了进一步完善containerd案例研究和实战演练,我们可以在已有的基础上增加以下几个方向,并详细说明开发人员需要关注的内容、重点和难点,以及底层相关的知识点。同时,我们会在合适的地方加入emoji以增强表达。

7 案例研究和实战演练

  1. 重要Pull Request分析:选择并分析影响深远的Pull Request,理解containerd项目发展的关键决策。这要求开发人员不仅要能读懂代码,还要理解背后的设计理念和项目方向。🔍

  2. 特性开发和改进:实际开发一个小的功能或改进现有功能,以加深对containerd源码的理解和熟悉。这个过程中,深入理解containerd的架构和代码风格是关键。💡

  3. 容器镜像优化实战:探索如何优化容器镜像,减少镜像大小,提高容器启动速度和安全性。这包括学习各种容器镜像构建技术和最佳实践。镜像优化是提高容器应用效率的重要手段。🚀

  4. 故障排查与性能调优:通过实际案例学习如何排查containerd运行时遇到的问题,包括性能瓶颈、网络问题等。这要求开发人员具备强大的问题解决能力和对系统性能的深刻理解。🔧

  5. 集成和自动化测试:实践如何为containerd贡献的新特性或修复编写集成测试和自动化测试。测试是确保代码质量和功能正常的关键步骤。🧪

  6. CRI实现和扩展:研究containerd如何作为Kubernetes的容器运行时接口(CRI)实现,以及如何扩展以支持更多特性或优化性能。理解CRI对于在Kubernetes环境下有效使用containerd至关重要。🌐

开发人员在深入containerd的案例研究和实战演练时,需要具备扎实的编程基础、对容器技术的深入理解、以及强大的问题解决能力。同时,对于每一个高级话题,都需要持续学习和实践,以不断提高自己的技术水平和解决问题的能力。

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

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

相关文章

2024/3/29打卡 填充——贪心

目录 题目 思路 代码 先来说下什么时候使用贪心和动态规划&#xff1a; 一个题目当寻找答案的过程中有大约 2的指数级&#xff08; 2^n&#xff09;个方案的时候&#xff0c;可以考虑用贪心和动态规划问题&#xff08;其实&#xff0c;我现在还不知道什么时候用 dfs 和 动态…

投稿指南【NO.15】SCI期刊推荐

写在前面&#xff1a;SCI论文发表是我国高校机构与基地评估、成果评奖、项目立项、人才培养等方面的重要考核指标&#xff0c;更不要要说关系到我们个人的毕业、晋升和前途。SCI含金量之高&#xff0c;要是读研读博科研工作期间能发表&#xff0c;将对直博、找工作、国奖申请、…

node.js的常用命令

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

c++----list模拟实现

目录 1. list的基本介绍 2. list的基本使用 2.1 list的构造 用法示例 2.2 list迭代器 用法示例 2.3. list容量&#xff08;capacity&#xff09;与访问&#xff08;access) 用法示例 2.4 list modifiers 用法示例 2.5 list的迭代器失效 3.list的模拟实现 3.1…

【PythonGIS】Python实现批量导出面矢量要素(单个多面矢量->多个单面矢量)

可怜的我周六还在工作&#xff0c;已经很久没更新过博客了&#xff0c;今天正好有空就和大家分享一下。今天给大家带来的是使用Python将包含多个面要素/线要素的矢量批量导出单个要素的矢量&#xff0c;即一个要素一个矢量文件。之前写过多个矢量文件合并成一个矢量文件的博文&…

【C++STL详解(二)】——string类模拟实现

目录 前言 一、接口总览 二、默认成员函数 1.构造函数 2.拷贝构造 写法一&#xff1a;传统写法 写法二&#xff1a;现代写法&#xff08;复用构造函数&#xff09; 3.赋值构造 写法一&#xff1a;传统写法 写法二&#xff1a;现代写法(复用拷贝构造) 4.析构函数 三、…

武汉星起航:引领跨境电商新纪元,助力卖家实现全球业务飞跃

在全球化的时代背景下&#xff0c;越来越多的中国卖家正选择跨境电商作为他们拓展国际市场的重要途径。然而&#xff0c;对于许多新手卖家而言&#xff0c;如何进入海外市场、如何运营店铺、如何推广产品&#xff0c;都是一道道难以逾越的难题。在这个关键时刻&#xff0c;武汉…

智慧公厕:改变城市生活的革命性基础设施

在现代城市的高品质生活要求背景下&#xff0c;公共厕所成为了不可或缺的基础设施。然而&#xff0c;传统的公厕在服务质量、管理效率方面存在一定的问题。为了提供更好的公厕服务&#xff0c;智慧公厕应运而生。通过智能化的管理模式&#xff0c;智慧公厕实现了公厕使用与管理…

【并发编程】线程的基础概念

一、基础概念 1.1 进程与线程A 什么是进程&#xff1f; 进程是指运行中的程序。 比如我们使用钉钉&#xff0c;浏览器&#xff0c;需要启动这个程序&#xff0c;操作系统会给这个程序分配一定的资源&#xff08;占用内存资源&#xff09;。 什么线程&#xff1f; 线程是CP…

【Java八股面试系列】数据库(总结市面所有数据库知识点)

文章目录 索引索引是什么聚簇&非聚簇索引索引的实现方式HashBTree&#xff08;多路平衡二叉树&#xff09;两种实现方式区别 引申红黑树红黑树和AVL树的区别最大堆和最小堆 索引的优劣优点劣势 索引的使用索引失效的时候 事务特性事务并发问题隔离级别 锁锁的分类行锁表锁意…

udpflood是一种什么攻击,如何防御?

一、定义 UDPFlood攻击是一种利用UDP协议进行的拒绝服务&#xff08;DoS&#xff09;攻击&#xff0c;攻击者通过发送大量的UDP数据包来占用目标系统的网络带宽和资源&#xff0c;从而使系统无法正常响应合法用户的请求。 二、攻击方式 1. UDP协议特点&#xff1a; UDP协议是一…

【详解】运算放大器工作原理及其在信号处理中的核心作用

什么是运算放大器 运算放大器&#xff08;简称“运放”&#xff09;是一种放大倍数非常高的电路单元。在实际电路中&#xff0c;它常常与反馈网络一起组成一定的功能模块。它是一种带有特殊耦合电路和反馈的放大器。输出信号可以是输入信号的加法、减法、微分和积分等数学运算…

最大连续子序列和求值

文章预览&#xff1a; 题目算法遍历枚举代码如下 优化版本代码如下 陈越姥姥题目代码 题目 最大连续子序列求和&#xff0c;什么是连续最大子序列&#xff0c;先简单来说一个数组int a[]{-9,1,-10,2,3,4,-2,5,6,-2,-3}; 那它的连续最大子序列是2,3,4,-2,5,6 是18&#xff0c;就…

首页HF粗排模型优化

[work rus_env]$ pwd /home/work/xx/du-rus/offline-tools/du_rus/rus_env [work rus_env]$ python buildenv_rus.py 5a0e771e938a486df3b8b3e1cde1a39c2006882d 5f3241963a3e39a8e1eae05d7075fc5b9278a7c7 打开日志级别 [workxx conf]$ vim /home/work/xx/du-rus/du_rus_…

线程中的核心操作

线程中的核心操作 1:start()2:中断(终止)一个线程2.1:自己定义线程结束的代码2.1.1 存在的问题 2.2:使用Thread提供的interrupt()方法和isInterrupted()2.2.1 继续执行2.2.2 立即结束2.2.3 打印异常信息,再立即结束2.2.1 继续执行 22三级目录 1:start() start() 真正的创建线程…

LeetCode Python - 80. 删除有序数组中的重复项 II

目录 题目描述解法运行结果 题目描述 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O…

奔赴智慧医院建设浪潮,迈瑞创新产品亮相中国医学装备大会

3月28日&#xff0c;第32届中国医学装备大会暨2024医学装备展览会在重庆顺利开展。迈瑞医疗以“助力医院高质量发展&#xff0c;共建智慧医院生态”为主题参展&#xff0c;多款核心零部件、创新产品及智慧医疗生态集体亮相。 满足需求&#xff0c;推动智慧医院建设提速 迈瑞医疗…

天下三分明月夜,独有快慢指针法(链表面试题篇)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

什么是CVE? CVE漏洞应该如何防护?

CVE&#xff08;Common Vulnerabilities and Exposures&#xff09;的全称是公共漏洞和暴露&#xff0c;是公开披露的网络安全漏洞列表。IT人员、安全研究人员查阅CVE获取漏洞的详细信息&#xff0c;进而根据漏洞评分确定漏洞解决的优先级。 在CVE中&#xff0c;每个漏洞按CVE-…

Type-C一分二快充线智能分配方案

随着移动设备的普及和快充技术的迅猛发展&#xff0c;Type-C接口已成为众多手机、平板和笔记本电脑的标配。然而&#xff0c;在日常使用中&#xff0c;我们经常会遇到需要同时为多个设备充电的情况。这时&#xff0c;Type-C一分二快充线就显得尤为重要。为了更好地满足用户的充…