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

【Linux】APT 密钥管理迁移指南:有效解决 apt-key 弃用警告

引言

随着 Debian 11 和 Ubuntu 22.04 版本的推出,APT 的密钥管理方式发生了重大的变化。apt-key 命令被正式弃用,新的密钥管理机制要求使用 /etc/apt/keyrings//etc/apt/trusted.gpg.d/ 来存储和管理密钥。这一变化对管理员和普通用户来说至关重要,特别是当通过 apt updateapt upgrade 执行系统更新时,可能会遇到关于 apt-key 弃用的警告信息。

本博客将详细讲解如何处理 apt-key 弃用警告,如何迁移到新的密钥管理方法,同时提供具体的命令、步骤和解释,帮助大家更好地理解这一变更。

过渡步骤概览

当您遇到 apt-key 弃用的警告时,通常是因为系统中存在使用 apt-key 添加的密钥。为了应对这种情况,需要进行以下操作:

  1. 确定哪些密钥存储在 /etc/apt/trusted.gpg 文件中
  2. 删除过时的密钥,避免产生警告信息。
  3. 安装并配置替代的密钥,使用新的密钥存储路径 /etc/apt/keyrings//etc/apt/trusted.gpg.d/

目录

  • 引言
  • 一、apt-key 弃用警告解析
    • 1.1 发生了什么?
    • 1.2 为什么要迁移?
    • 1.3 新的密钥管理方式
  • 二、迁移密钥管理的步骤
    • 2.1 查找和删除密钥
      • 2.1.1 查找已存储的密钥
      • 2.1.2 删除不需要的密钥
    • 2.2 获取新的密钥并添加
      • 2.2.1 从官方网站获取 GPG 密钥
      • 2.2.2 使用 `wget` 或 `curl` 下载 GPG 密钥
      • 2.2.3 设置文件权限
    • 2.3 使用 `Signed-By` 选项
    • 2.4 验证密钥是否有效
    • 2.5 完成迁移
  • 三、完整示例:迁移密钥管理密钥
  • 四、迁移流程图
  • 总结

一、apt-key 弃用警告解析

1.1 发生了什么?

在 Ubuntu 22.04 或 Debian 11 中,执行 apt updateapt upgrade 时,可能会出现类似的警告信息:

W: https://updates.example.com/desktop/apt/dists/xenial/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.

这条警告的核心信息是:apt-key 命令已经不再推荐使用,并逐步被淘汰。原因在于传统的 apt-key 机制存在安全隐患,并且不符合现代 Linux 系统的密钥管理要求。为了增强系统的安全性和灵活性,APT 引导用户迁移到新的密钥管理方法。

1.2 为什么要迁移?

apt-key 被弃用的原因主要有以下几点:

  • 安全问题apt-key 将所有密钥存储在单个文件中(如 /etc/apt/trusted.gpg),这使得密钥容易受到篡改或丢失的风险。
  • 缺乏灵活性:它无法细粒度地管理每个软件源的独立密钥,尤其是在需要管理多个源时不够方便。
  • 新的标准:推荐使用/etc/apt/keyrings//etc/apt/trusted.gpg.d/ 目录来管理密钥,增强了安全性和可维护性。

这些问题促使了新的密钥管理方式的出现,它可以提高系统的安全性和灵活性,更好地满足现代化需求。

1.3 新的密钥管理方式

新的密钥管理方法建议将密钥文件存储在 /etc/apt/keyrings//etc/apt/trusted.gpg.d/ 目录,并通过 APT 配置文件中的 Signed-By 选项来指定每个软件源的密钥。这样做有几个优点:

  • 独立管理:每个存储库可以使用单独的密钥,避免了 apt-key 所带来的密钥泄露风险。
  • 增强安全性:通过将密钥存储在专用的目录下,密钥管理变得更加安全,且每个密钥的使用场景更加清晰。
  • 灵活性提升:可以更精细地管理每个软件源的认证,提高密钥管理的灵活性。

二、迁移密钥管理的步骤

2.1 查找和删除密钥

首先,检查当前系统中的所有密钥,并删除不再需要的密钥。

2.1.1 查找已存储的密钥

使用 apt-key list 命令查看系统中存储的所有密钥:

$ sudo apt-key list

此命令会显示当前存储在 /etc/apt/trusted.gpg 文件和 /etc/apt/trusted.gpg.d/ 目录中的所有 GPG 密钥。输出信息包括密钥的 ID、相关的仓库以及该密钥的创建日期等信息。

输出示例:

Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8))./etc/apt/trusted.gpg
--------------------
pub   rsa4096 2025-01-20 [SC]A9D4 7D52 12F0 E256 1D84 0C32 A63A 9211 3F6A 6E32
uid           [ unknown] Example <support@example.com>
sub   rsa4096 2025-01-20 [E]pub   rsa4096 2025-01-20 [SC]A4B6 2D8F 8F54 6B7A 5E88 7F16 24B2 A562 54D6 5F76
uid           [ unknown] Google Inc. (Linux Packages Signing Authority) <linux-packages-keymaster@google.com>
sub   rsa4096 2025-01-20 [S] [expires: 2028-01-19]

这些密钥是用来验证各个软件源包的。可以看到,密钥文件中包含多个软件源的密钥,如 Example 和 Google 等。

2.1.2 删除不需要的密钥

可以使用 apt-key del 命令删除不再需要的 GPG 密钥,指定要删除的密钥标识符(通常是一组四位数的十六进制数字)。例如,删除与 Example 相关的密钥,可以执行以下命令:

sudo apt-key del A9D4 7D52 12F0 E256 1D84 0C32 A63A 9211 3F6A 6E32

请根据实际情况替换命令中的密钥标识符删除不需要的密钥。删除密钥后,相关存储库将无法使用此密钥进行认证。如果仍需访问该存储库,必须为其添加新的密钥。

2.2 获取新的密钥并添加

获取和安装新的 GPG 密钥是确保从外部软件源安装软件包时,保持系统安全的一个重要步骤。密钥的获取方法会根据应用程序的不同而有所不同,取决于具体的应用程序。

以下是详细的操作步骤和示例:

2.2.1 从官方网站获取 GPG 密钥

大多数应用程序会在其官方网站提供用于验证软件包的 GPG 密钥,以便验证软件包的完整性和真实性。可以使用 wgetcurl 命令从应用程序的官方网站下载 GPG 密钥。

2.2.2 使用 wgetcurl 下载 GPG 密钥

首先,假设要安装一个应用程序,比如 MyApp,并且该应用程序提供了 GPG 密钥。可以从其官方网站下载密钥。

使用 wget 下载密钥:

wget -qO - https://myapp.example.com/repo/myapp.gpg | sudo tee /etc/apt/keyrings/myapp.gpg

解释:

  • -qO -wget 将以安静模式下载文件并将其输出到标准输出(即终端)。
  • https://myapp.example.com/repo/myapp.gpg:这是应用程序的 GPG 密钥文件的 URL。
  • sudo tee /etc/apt/keyrings/myapp.gpgtee 命令会将密钥保存到 /etc/apt/keyrings/ 目录中。

使用 curl 下载密钥:

curl -fsSL https://myapp.example.com/repo/myapp.gpg | sudo tee /etc/apt/keyrings/myapp.gpg

解释:

  • -fsSLcurl 的选项,确保下载时不显示进度信息、若失败则不输出错误信息,并且支持 SSL。
  • https://myapp.example.com/repo/myapp.gpg:GPG 密钥文件的 URL。
  • sudo tee /etc/apt/keyrings/myapp.gpg:保存密钥到 /etc/apt/keyrings/ 目录。

2.2.3 设置文件权限

确保密钥文件的权限安全,以防止其他用户篡改密钥。

sudo chown root:root /etc/apt/keyrings/myapp.gpg
sudo chmod 644 /etc/apt/keyrings/myapp.gpg
  • chown root:root:确保密钥文件属于 root 用户和 root 用户组。
  • chmod 644:确保文件具有适当的权限,使得只有 root 用户能够修改,其他用户可以读取。

2.3 使用 Signed-By 选项

为确保每个软件源使用正确的密钥,可以将密钥存放在 /etc/apt/keyrings/ 目录,并通过 Signed-By 选项在 APT 配置文件 /etc/apt/sources.list/etc/apt/sources.list.d/ 文件中指定密钥。这样可以提高密钥管理的精确性和安全性。

例如,假设 MyApp 提供了一个软件源,可以将其添加到 APT 的源列表中并使用 Signed-By 指定密钥:

echo "deb [signed-by=/etc/apt/keyrings/myapp.gpg] https://myapp.example.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/myapp.list

解释:

  • deb [signed-by=/etc/apt/keyrings/myapp.gpg] https://myapp.example.com/debian/ stable main:将 MyApp 的软件源添加到 APT 源列表中,并使用 Signed-By 选项指定 GPG 密钥的路径。
  • deb [signed-by=/etc/apt/keyrings/myapp.gpg]:指定软件源使用 /etc/apt/keyrings/myapp.gpg 作为 GPG 密钥。
  • https://myapp.example.com/debian/ stable main:添加 MyApp 的软件源。

2.4 验证密钥是否有效

要确保密钥已正确配置并生效,可以使用以下命令查看 /etc/apt/keyrings/ 目录下的文件列表:

ls -l /etc/apt/keyrings/

输出应该类似于:

-rw-r--r-- 1 root root 7821 Sep  2 10:55 myapp.gpg

如果看到类似的输出,说明密钥已经正确配置。这些文件代表着不同软件包源的密钥文件。

2.5 完成迁移

完成上述步骤后,可以运行 apt update 命令来检查迁移是否成功。一旦密钥迁移完成,系统将不再显示关于 apt-key 弃用的警告。

sudo apt update

如果一切顺利,更新过程将顺利完成,而不会再显示弃用的警告或错误信息。

三、完整示例:迁移密钥管理密钥

以下示例展示了如何添加 MyApp 软件源并确保其安全性。操作步骤包括下载 GPG 密钥、配置软件源、设置文件权限、并最终安装所需的软件包。

操作步骤概览:

  1. 查找 GPG 密钥:使用 sudo apt-key list 命令查看系统中存储的 GPG 密钥。
  2. 删除不需要的 GPG 密钥:使用 sudo apt-key del 命令删除不需要的密钥。
  3. 下载 GPG 密钥:通过 wgetcurl 命令下载 GPG 密钥。
  4. 存储密钥:将密钥存储到 /etc/apt/keyrings/ 目录。
  5. 设置文件权限:确保密钥文件的权限安全。
  6. 配置 APT 使用密钥:在软件源配置文件中使用 Signed-By 选项指定密钥路径。
  7. 安装软件包:更新软件包列表并安装所需的软件包。

具体步骤:
假设要安装 MyApp,并且该应用程序的 GPG 密钥和软件源都提供了。以下是完整的操作步骤:

  1. 查找系统中已有的 GPG 密钥
sudo apt-key list
  1. 删除不需要的 GPG 密钥

    如果 myapp 密钥的标识符是 A9D4 7D52 12F0 E256 1D84 0C32 A63A 9211 3F6A 6E32,删除命令如下:

    sudo apt-key del A9D4 7D52 12F0 E256 1D84 0C32 A63A 9211 3F6A 6E32
    
  2. 下载 GPG 密钥并保存到 /etc/apt/keyrings/ 目录:

    wget -qO - https://myapp.example.com/repo/myapp.gpg | sudo tee /etc/apt/keyrings/myapp.gpg
    
  3. 设置密钥文件的权限:

    sudo chown root:root /etc/apt/keyrings/myapp.gpg
    sudo chmod 644 /etc/apt/keyrings/myapp.gpg
    
  4. 配置 APT添加软件源并指定 GPG 密钥:

    echo "deb [signed-by=/etc/apt/keyrings/myapp.gpg] https://myapp.example.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/myapp.list
    
  5. 更新软件包列表并安装应用程序:

    sudo apt update
    sudo apt install myapp
    

四、迁移流程图

为了帮助大家更好地理解迁移过程,下面提供了一个流程图,简明扼要地展示了迁移步骤:

CSDN @ 2136
旧的 GPG 密钥存储
删除不必要的旧密钥
获取新的 GPG 密钥
将密钥添加到 APT 配置文件中
验证密钥是否有效
完成迁移, 避免 apt-key 弃用警告
CSDN @ 2136

图解说明

  1. 旧的 GPG 密钥存储:首先,使用 apt-key list 列出当前密钥,确定哪些是过时的或不再需要的。
  2. 删除旧密钥:通过 apt-key del 命令删除不再需要的密钥。
  3. 获取新的 GPG 密钥:根据不同的应用程序或软件源,获取并下载新的 GPG 密钥。
  4. 添加密钥到指定位置:将新的密钥存储到 /etc/apt/trusted.gpg.d/etc/apt/keyrings/ 目录。
  5. 验证密钥有效性:检查密钥是否已正确添加,确保 APT 使用新的密钥进行包验证。
  6. 完成迁移:完成所有步骤后,运行 apt update 检查迁移结果,APT 将不会再显示弃用警告。

总结

通过迁移 apt-key 的密钥管理方式,可以更安全地管理系统的存储库和软件包源,避免将来因 apt-key 被废弃而导致的兼容性问题。通过这篇博客的步骤和示例,应该能够顺利完成密钥的迁移,并确保系统能够继续顺利地进行软件包更新。

对于未来的版本,APT 可能会继续改进密钥管理方式,因此保持系统的更新和对新技术的适应将帮助你保持系统的安全性和稳定性。

在实际操作中,现在可以使用 apt update 而不会遇到与废弃密钥配置相关的警告或错误。需要注意的是,用户应当根据新的要求调整依赖于 apt-key 的旧安装方法,改用将密钥安装到 /etc/apt/trusted.gpg.d//etc/apt/keyrings/ 目录下的方式,并根据需要使用 gpg 来管理密钥。

如果你觉得这篇文章对你有帮助,请留言讨论或分享给更多需要的人!


相关文章:

【Linux】APT 密钥管理迁移指南:有效解决 apt-key 弃用警告

引言 随着 Debian 11 和 Ubuntu 22.04 版本的推出&#xff0c;APT 的密钥管理方式发生了重大的变化。apt-key 命令被正式弃用&#xff0c;新的密钥管理机制要求使用 /etc/apt/keyrings/ 或 /etc/apt/trusted.gpg.d/ 来存储和管理密钥。这一变化对管理员和普通用户来说至关重要…...

洛谷P1143 进制转换

题目链接&#xff1a;P1143 进制转换 - 洛谷 | 计算机科学教育新生态 题目难度&#xff1a;普及— 解题思路&#xff1a;本题先将输入的数转为10进制&#xff0c;然后取模&#xff0c;最后倒着输出就好了&#xff0c;最后直接上代码 #include<bits/stdc.h> using namespa…...

99.12 金融难点通俗解释:毛利率

目录 0. 承前1. 简述2. 比喻&#xff1a;冰淇淋店赚钱2.1 第一步&#xff1a;准备材料2.2 第二步&#xff1a;卖冰淇淋2.3 第三步&#xff1a;计算毛利率 3. 生活中的例子3.1 好的毛利率3.2 一般的毛利率3.3 差的毛利率 4. 小朋友要注意4.1 毛利率高不一定好4.2 毛利率低不一定…...

HUMANITY’S LAST EXAM (HLE) 综述:人工智能领域的“最终考试”

论文地址&#xff1a;Humanity’s Last Exam 1. 背景与动机 随着大型语言模型&#xff08;LLMs&#xff09;能力的飞速发展&#xff0c;其在数学、编程、生物等领域的任务表现已超越人类。为了系统地衡量这些能力&#xff0c;LLMs 需要接受基准测试&#xff08;Benchmarks&…...

C++从入门到实战(二)C++命名空间

C从入门到实战&#xff08;二&#xff09;C命名空间 前言一、C的第一个程序二、命名空间&#xff08;一&#xff09;为什么需要命名空间&#xff08;二&#xff09;定义命名空间&#xff08;三&#xff09;使用命名空间1.通过命名空间限定符&#xff1a;2.使用 using 声明&…...

C# OpenCV机器视觉:实现农作物病害检测

在酷热难耐的夏日&#xff0c;阳光似火舌般舔舐大地。阿强惬意地躺在老家院子摇椅上&#xff0c;哼着小曲&#xff0c;手边放着一碗冰镇西瓜&#xff0c;头顶大槐树宛如巨大遮阳伞&#xff0c;洒下斑驳阴凉。他本想趁假期回老家放松&#xff0c;远离城市喧嚣与代码 “纠缠”。 …...

开源软件协议介绍

一、可以闭源使用/不具传染性的协议 允许商业使用和分发 1、BSD&#xff1a;详细介绍 2、LGPL许可证&#xff1a;详细介绍 3、MPL2.0&#xff1a;详细介绍 二、具有传染性/使用后需要开源自身软件的协议 不建议商业使用 1、GPL许可证&#xff1a;详细介绍...

CLion开发Qt桌面

IDE&#xff1a;CLion Qt Qt版本&#xff1a;5.12 学习正点原子的嵌入式Linux开发板时&#xff0c;使用Qt Creator写代码不是很方便&#xff0c;遂尝试使用CLion搭建Qt开发环境。 一、CLion的Qt环境搭建 1&#xff0c;配置工具链 找到Qt的安装目录&#xff0c;此处为E:\Tools\…...

09_异步加载_单例模式_常量类配置_不可销毁

1.首先在 资源加载服务层ResSvc.cs中添加 自定义异步加载函数 using UnityEngine; using UnityEngine.SceneManagement; //异步加载 命名空间 //功能 : 资源加载服务 public class ResSvc : MonoBehaviour{public void InitSvc(){Debug.Log("Init ResSvc...");}//自定…...

士的宁(strychnine)的生物合成-文献精读104

Biosynthesis of strychnine 士的宁&#xff08;strychnine&#xff09; 又名 番木鳖碱 的生物合成 摘要 士的宁&#xff08;番木鳖碱&#xff09;是一种天然产物&#xff0c;通过分离、结构阐明和合成努力&#xff0c;塑造了有机化学领域。目前&#xff0c;士的宁因其强大的…...

【开源免费】基于Vue和SpringBoot的常规应急物资管理系统(附论文)

本文项目编号 T 159 &#xff0c;文末自助获取源码 \color{red}{T159&#xff0c;文末自助获取源码} T159&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

(Java版本)基于JAVA的网络通讯系统设计与实现-毕业设计

源码 论文 下载地址&#xff1a; ​​​​c​​​​​​c基于JAVA的网络通讯系统设计与实现(源码系统论文&#xff09;https://download.csdn.net/download/weixin_39682092/90299782https://download.csdn.net/download/weixin_39682092/90299782 第1章 绪论 1.1 课题选择的…...

ray.rllib 入门实践-2:配置算法

前言&#xff1a; ray.rllib的算法配置方式有多种&#xff0c;网上的不同教程各不相同&#xff0c;有的互不兼容&#xff0c;本文汇总罗列了多种算法配置方式&#xff0c;给出推荐&#xff0c;并在最后给出可运行代码。 四种配置方式 方法1 import os from ray.rllib.algori…...

2025-01学习笔记

1.SpEL 第一次知道它的全称 Spring Expression Language&#xff08;SpEL&#xff09; Value("${my.property}") private String myProperty; Value("#{2 * 3}") private int computedValue; 2.逃逸分析 逃逸分析&#xff1a;当一个对象在方法中被定…...

多线程执行大批量数据查询

// 创建一个固定大小的线程池ExecutorService executorService Executors.newFixedThreadPool(5);// 创建多个查询任务List<Callable<List<ShopCompareBase>>> tasks new ArrayList<>();//查询门店 切割,分成十份List<List<String>> sho…...

ChatGPT高效处理图片技巧使用详解

ChatGPT&#xff0c;作为OpenAI开发的预训练语言模型&#xff0c;主要用于生成自然语言文本的任务。然而&#xff0c;通过一些技巧和策略&#xff0c;我们可以将ChatGPT与图像处理模型结合&#xff0c;实现一定程度上的图像优化和处理。本文将详细介绍如何使用ChatGPT高效处理图…...

leetcode——相交链表(java)

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&…...

RubyFPV开源代码之系统简介

RubyFPV开源代码之系统简介 1. 源由2. 工程架构3. 特性介绍&#xff08;软件&#xff09;3.1 特性亮点3.2 数字优势3.3 使用功能 4. DEMO推荐&#xff08;硬件&#xff09;4.1 天空端4.2 地面端4.3 按键硬件Raspberry PiRadxa 3W/E/C 5. 软件设计6. 参考资料 1. 源由 RubyFPV以…...

麦田物语学习笔记:创建TransitionManager控制人物场景切换

基本流程 制作场景之间的切换 1.代码思路 (1)为了实现不同场景切换,并且保持当前的persistentScene一直存在,则需要一个Manager去控制场景的加载和卸载,并且在加载每一个场景之后,都要将当前的场景Set Active Scene,保证其为激活的场景,在卸载的时候也可以方便调用当前激活的场…...

后端SpringBoot学习项目-用户管理-增删改查-service层

仓库地址 在初版代码中&#xff0c;已经实现了基础的增删改查。 但是&#xff0c;逻辑处理都放在Controller层中并没有分为Service层&#xff0c;所以&#xff0c;代码升级时候必须补充上去。 代码结构 升级后的代码结构有所变化。 --common 公共插件 --controller…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》

近日&#xff0c;嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》&#xff0c;海云安高敏捷信创白盒&#xff08;SCAP&#xff09;成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天&#xff0c;网络安全已成为企业生存与发展的核心基石&#xff0c;为了解…...