【一起来学kubernetes】17、Configmap使用详解
- 前言
- 概述
- 核心特性
- 创建 ConfigMap
- 使用 ConfigMap
- 1. **环境变量**
- 2. **Volume 挂载**
- 3. **命令行参数**
- 更新与热重载
- Docker容器中Java服务使用Configmap
- **一、通过环境变量注入**
- **步骤说明**
- **示例配置**
- **二、通过 Volume 挂载配置文件**
- **步骤说明**
- **示例配置**
- **三、动态刷新配置(高级场景)**
- **实现原理**
- **Spring Boot 示例(热更新)**
- **四、最佳实践**
- **五、常见问题排查**
- 典型应用场景
- 安全与权限
- 最佳实践
- 常见问题
- 总结
- 拓展
前言
在上一篇文章中,我们主要介绍了k8s中针对定时任务的批处理任务的资源:CronJob 和 一次性批处理任务的资源 : Job; 在进行任务处理的过程中,不可或缺的一个东西就是配置,接下来我们就把k8s中用于配置配置信息的工具Configmap进行一个深入的介绍
概述
ConfigMap 是 Kubernetes 中用于存储和管理配置数据的资源对象,允许你在不修改容器镜像的情况下,动态注入配置信息到 Pod 中。其核心思想是将配置与应用程序代码解耦,提升灵活性和可维护性。
核心特性
• 键值对存储:配置数据以 key-value
形式存储,便于灵活读取。
• 多 Pod 共享:单个 ConfigMap 可被多个 Pod 或服务共享。
• 动态更新:支持配置热更新(依赖 Volume 类型及 Kubernetes 版本)。
• 非敏感数据:适用于存储明文配置(如日志级别、超时设置),敏感数据应使用 Secrets。
创建 ConfigMap
方式 1:通过 YAML 文件定义
apiVersion: v1
kind: ConfigMap
metadata:name: app-config # 唯一标识符namespace: default # 可选命名空间
data:db-host: localhostdb-port: "5432"log-level: info
方式 2:通过 kubectl
命令
kubectl create configmap app-config \--from-file=db.conf \--from-literal=log-level=debug
• --from-file
:从文件加载键值对(文件名作为 key)。
• --from-literal
:直接指定键值对。
方式 3:通过 API 创建
使用 curl
或客户端库直接调用 Kubernetes API。
使用 ConfigMap
ConfigMap 可通过以下三种方式注入 Pod:
1. 环境变量
在 Pod 的 env
字段中引用 ConfigMap:
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: my-appenv:- name: DB_HOSTvalueFrom:configMapKeyRef:name: app-config # ConfigMap 名称key: db-host # 对应的键
2. Volume 挂载
将 ConfigMap 挂载为目录或文件:
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:volumes:- name: config-volumeconfigMap:name: app-configcontainers:- name: my-containerimage: my-appvolumeMounts:- name: config-volumemountPath: /etc/config # 挂载到容器内的目录
• 挂载后,容器内 /etc/config
目录下会生成以 key
命名的文件(如 db-host
)。
3. 命令行参数
在容器启动命令中动态替换参数:
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: my-appargs:- "-db-host=${DB_HOST}"- "-log-level=${LOG_LEVEL}"env:- name: DB_HOSTvalueFrom:configMapKeyRef:name: app-configkey: db-host- name: LOG_LEVELvalueFrom:configMapKeyRef:name: app-configkey: log-level
更新与热重载
• 手动更新:修改 ConfigMap 后,新 Pod 会自动获取最新配置,旧 Pod 需等待调度器重新调度。
• 热更新:若使用 volumeMounts
挂载 ConfigMap,部分 Volume 类型(如 emptyDir
)支持热更新,但需确保容器进程主动监听文件变化。
Docker容器中Java服务使用Configmap
在 Kubernetes Pod 中运行的 Docker 容器内的 Java 服务可以通过以下两种主要方式使用 ConfigMap 配置的变量:
一、通过环境变量注入
步骤说明
-
在 Kubernetes Pod 中配置环境变量
在 Pod 的env
字段中引用 ConfigMap 的键值对,Kubernetes 会将这些值注入为容器环境变量。 -
在 Java 代码中读取环境变量
使用System.getenv()
或框架提供的配置绑定功能(如 Spring Boot 的@Value
)获取变量值。
示例配置
Kubernetes Pod YAML
apiVersion: v1
kind: Pod
metadata:name: java-app
spec:containers:- name: java-containerimage: your-java-imageenv:- name: DB_HOSTvalueFrom:configMapKeyRef:name: app-config # ConfigMap 名称key: db-host # ConfigMap 中的键- name: DB_PORTvalueFrom:configMapKeyRef:name: app-configkey: db-port
Java 代码读取(原生方式)
public class ConfigExample {public static void main(String[] args) {String dbHost = System.getenv("DB_HOST"); // 从环境变量读取int dbPort = Integer.parseInt(System.getenv("DB_PORT"));System.out.println("Connecting to DB: " + dbHost + ":" + dbPort);}
}
Java 代码读取(Spring Boot 方式)
@Configuration
public class AppConfig {@Value("${DB_HOST}")private String dbHost;@Value("${DB_PORT}")private int dbPort;// Getter 和业务逻辑
}
• 关键点:确保 Spring Boot 的 application.properties
或 application.yml
中未定义同名属性,否则会覆盖环境变量。
二、通过 Volume 挂载配置文件
步骤说明
-
将 ConfigMap 挂载为目录
在 Pod 中定义 Volume,并将 ConfigMap 挂载到容器内的目录(如/app/config
)。 -
Java 服务读取配置文件
假设 ConfigMap 中的键值对对应配置文件内容(如application.yml
),Java 服务直接读取该文件。
示例配置
Kubernetes Pod YAML
apiVersion: v1
kind: Pod
metadata:name: java-app
spec:volumes:- name: config-volumeconfigMap:name: app-config # ConfigMap 名称containers:- name: java-containerimage: your-java-imagevolumeMounts:- name: config-volumemountPath: /app/config # 挂载到容器内的目录
ConfigMap 数据结构
# app-config ConfigMap
data:application.yml: |db:host: localhostport: 5432log:level: info
Java 代码读取配置文件
public class ConfigLoader {public static void loadConfig(String filePath) {try (InputStream inputStream = new FileInputStream(filePath)) {Yaml yaml = new Yaml(new Constructor(Config.class));Config config = yaml.load(inputStream);System.out.println("DB Host: " + config.getDb().getHost());} catch (IOException e) {e.printStackTrace();}}
}// 配置类映射 YAML 结构
class Config {private Db db;private Log log;// Getter 和 Setter
}class Db {private String host;private int port;// Getter 和 Setter
}class Log {private String level;// Getter 和 Setter
}
三、动态刷新配置(高级场景)
实现原理
-
基于文件监听的热更新
• 将 ConfigMap 挂载为 Volume,并监控配置文件变化(如 Spring Boot 的spring.cloud.config监视
)。
• 需容器内进程主动监听文件变动(如 Spring Boot 的@RefreshScope
)。 -
使用 Kubernetes ConfigMap 事件监听
• 通过客户端库监听 ConfigMap 变更事件,动态更新应用配置(适用于自定义框架)。
Spring Boot 示例(热更新)
# application.yml
spring:cloud:config:monitor:enabled: truepoll-interval: 5s
@RestController
@RefreshScope
public class DynamicConfigController {@Value("${db.host}")private String dbHost;@GetMapping("/config")public String getDbHost() {return dbHost;}
}
• 依赖:需添加 spring-cloud-starter-config
和 spring-boot-starter-actuator
依赖。
四、最佳实践
-
优先选择环境变量
• 简单直接,适合键值对较少的配置(如数据库地址、开关标志)。
• 与 Kubernetes 生态无缝集成,无需额外代码。 -
文件挂载适合复杂配置
• 当配置结构复杂(如多层级 JSON/YAML)时,将 ConfigMap 映射为配置文件更易管理。
• 需确保容器内有文件解析逻辑。 -
结合 Secrets 处理敏感数据
• 使用Secrets
存储密码、API 密钥等敏感信息,避免硬编码。 -
配置版本化管理
• 通过 Git 或 ConfigMap 的data
字段版本历史跟踪变更。
五、常见问题排查
Q1: ConfigMap 变量未生效?
• 检查 Pod 日志:kubectl logs <pod-name> -c java-container
。
• 确认 ConfigMap 名称和键名拼写一致。
• 若使用文件挂载,验证挂载路径是否正确(如 /app/config
)。
Q2: 如何调试环境变量?
• 在 Pod 中运行命令查看环境变量:
kubectl exec <pod-name> -c java-container -- printenv | grep DB_
通过以上方法,Java 服务可以灵活地集成 Kubernetes ConfigMap,实现配置与代码的解耦,提升部署和维护效率。
典型应用场景
- 数据库配置:存储主机、端口、用户名、密码(非敏感部分)。
- API 密钥:管理第三方服务的访问令牌(需结合 Secrets)。
- 环境变量:动态调整日志级别、超时时间等运行时参数。
- 模板配置:注入 Nginx/Redis 配置文件内容。
安全与权限
• RBAC 控制:通过 kubectl auth can-i
或 YAML 中的 roles
/rolebindings
限制 ConfigMap 的访问权限。
• 敏感数据:避免存储密码等机密信息,改用 Secrets(加密存储)。
• 命名空间隔离:ConfigMap 默认作用域为当前命名空间,跨命名空间访问需显式指定。
最佳实践
- 命名规范:使用
configmap/<应用>-<环境>
(如configmap/web-prod
)。 - 分层配置:将复杂配置拆分为多个 ConfigMap,按需组合。
- 版本控制:结合 Git 管理 ConfigMap 的变更历史。
- 监控日志:通过
kubectl describe configmap
查看变更记录。 - 文档化:记录 ConfigMap 中各键值的含义及默认值。
常见问题
Q1: ConfigMap 更新后 Pod 未生效?
A: 确保 Pod 使用了正确的 ConfigMap 名称,并检查是否通过 volumeMounts
挂载。对于热更新,需确认容器进程支持文件变更监听(如 Node.js 的 fs.watch
)。
Q2: 如何加密 ConfigMap 数据?
A: Kubernetes 不原生支持加密 ConfigMap,但可通过以下方式实现:
• 使用 Secrets 存储加密数据。
• 在部署前对值进行 Base64 编码,部署后再解码(牺牲可读性)。
总结
ConfigMap 是 Kubernetes 中不可或缺的配置管理工具,通过解耦配置与代码,显著提升了部署和维护的效率。合理使用 ConfigMap 结合 Secrets、RBAC 和自动化工具(如 Helm),可以构建 robust 的云原生应用架构。
拓展
【一起来学kubernetes】15、Job使用详解
【一起来学kubernetes】14、StatefulSet使用详解
相关文章:
【一起来学kubernetes】17、Configmap使用详解
前言概述核心特性创建 ConfigMap使用 ConfigMap1. **环境变量**2. **Volume 挂载**3. **命令行参数** 更新与热重载Docker容器中Java服务使用Configmap**一、通过环境变量注入****步骤说明****示例配置** **二、通过 Volume 挂载配置文件****步骤说明****示例配置** **三、动态…...
QT程序双击可执行文件运行方法
1、qt编译选择release模式 在pro文件添加:QMAKE_LFLAGS -no-pie 2、cmake编译qt界面程序 在CMakeLists.txt文件中添加: set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -no-pie") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -no-pie")注意 …...
【css酷炫效果】实现鱼群游动动态效果
【css酷炫效果】实现小鱼游动动态效果 缘创作背景css代码创建div容器引入jquery引入鱼群js完整代码效果图成品资源下载链接:点击下载 缘 在开发系统功能的时候,无意间看到了小鱼游动特效,感觉很有意思,就在网上找了相关教程,分享给大家。 创作背景 刚看到csdn出活动了…...
【GNN】GAT
消息传递 层数越多,聚合更多的消息...
Prims region.Views 为null
原因: 导航未完成或异步问题 解决方式:使用回调确认导航完成后再操作视图 _regionManager.RequestNavigate("MonitorRegion", "MonitorView", nps, navigationResult > {if (navigationResult.Result true){var region _regio…...
在windows10系统上安装docker,然后在容器中运行GPU版本的Pytorch,并使用vscode连接该容器
一 . 安装Docker Desktop 首先打开网址https://docs.docker.com/desktop/install/windows-install/ 下载完后,双击下面的exe文件进行安装,默认情况下,Docker Desktop 安装在C:\Program Files\Docker\Docker 出现提示时,请确保…...
WPS 搭配 Zotero 插件使用
安装Zotero后,Word自动引入了插件,但WPS却没有,做为WPS的重度用户,这是不行的。 解决方案: 1.找到 Zotero.dotm 一般在安装目录下, 2.然后复制到WPS的startup下 我的目录是:C:\Users\lianq…...
卷积神经网络 - 卷积层(具体例子)
为了更一步学习卷积神经网络之卷积层,本文我们来通过几个个例子来加深理解。 一、灰度图像和彩色图像的关于特征映射的例子 下面我们通过2个例子来形象说明卷积层中“特征映射”的概念,一个针对灰度图像,一个针对彩色图像。 例子 1&#x…...
新造车不再比拼排名,恰是曲终人散时,剩者为王
据称新能源汽车周销量不再发布,这可能也预示着新造车终于到了给出答案的时候了,新造车企业前三强已基本确立,其余那些落后的车企已很难有突围的机会,而特斯拉无疑是其中的最大赢家。 3月份第一周的数据显示,销量最高的…...
学有所得-Deepin linux操作系统在安装nvidia显卡驱动后的问题修复
目标: 装有deepin V20.9的移动硬盘在系统启动后无法进入图形化界面,修复系统。 背景: 为了方便随时随地开发研究,又不破坏笔记本电脑原装的正版操作系统,在一个朗科(容量50&…...
【QT:网络编程】
网络编程的本质就是在编写应用层代码。需要传输层支持。而传输层的协议有UDP、TCP等 使用QT网络编程的API,需要在.pro文件中添加network模块,而QT中的控件和其他内容都是包含在QtCore模块中的(默认添加) QT为什么要划分模块&…...
基于srpingboot高校智慧校园教学管理服务平台的设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...
分布式事务3PC解决了2PC哪些问题?
三阶段提交(3PC,Three-Phase Commit) 是对 二阶段提交(2PC,Two-Phase Commit) 的改进,旨在解决 2PC 的一些固有缺陷,特别是在分布式系统中的容错性和性能问题。以下是 3PC 比 2PC 更好的原因及其优势的详细分析: 1. 二阶段提交(2PC)的问题 2PC 是一种经典的分布式事…...
Dify 使用 - 创建 翻译 工作流
文章目录 1、选择 模板2、设置 和 基本使用3、运行应用 1、选择 模板 2、设置 和 基本使用 翻译模板 自带了系统提示词,你也可以修改 3、运行应用 右上角 点击 发布 – 更新,运行应用,就可以在新的对话界面中使用此功能 2025-03-18&#x…...
集成学习(上):Bagging集成方法
一、什么是集成学习? 在机器学习的世界里,没有哪个模型是完美无缺的。就像古希腊神话中的"盲人摸象",单个模型往往只能捕捉到数据特征的某个侧面。但当我们把多个模型的智慧集合起来,就能像拼图一样还原出完整的真相&a…...
c盘清理宝藏小工具
引言 在数字化时代,电脑的存储空间和系统性能直接影响着我们的工作效率和用户体验。C盘作为系统盘,常常因为文件堆积、缓存冗余等问题变得臃肿不堪,导致电脑运行缓慢。为了解决这一问题,我最近试用了一款名为“小番茄C盘清理”的…...
QT多媒体播放器类:QMediaPlayer
QMediaPlayer 是 Qt Multimedia 模块中的核心类,用于播放音频和视频媒体文件。它支持本地文件、网络流媒体以及实时数据源,具备播放控制、状态管理、元数据访问等功能。QMediaPlayer的基本用法可能包括设置媒体源、控制播放(播放、暂停、停止…...
Java动态代理模式深度解析
1. 动态代理基础 1.1 核心组件 Proxy 类:动态生成代理对象的工厂类,核心方法为 newProxyInstance()。 InvocationHandler 接口:代理逻辑的处理器,所有方法调用会转发到其 invoke() 方法。 1.2 实现步骤 定义接口:代…...
【WRF模拟】垂直层设置/与观测数据对比
【WRF模拟】垂直层设置/与观测数据对比 WRF 中 有关垂直层的namelist变量1. 主要垂直层设置参数2. 详细解释3. 典型设置示例WRF 输出的垂直剖面数据与观测数据进行比较WRF 采用 地形跟随坐标(terrain-following coordinate)WRF 输出的垂直剖面数据与观测数据进行比较参考WRF …...
植物知识分享论坛毕设
1.这四个文件直接是什么关系?各自都是什么作用?他们之间是如何联系的? 关系与联系 UserController.java 负责接收外部请求,调用 UserService.java 里的方法来处理业务, 而 UserService.java 又会调用 UserMapper.jav…...
可视化图解算法:链表中倒数(最后)k个结点
1. 题目 描述 输入一个长度为 n 的链表,设链表中的元素的值为ai ,返回该链表中倒数第k个节点。 如果该链表长度小于k,请返回一个长度为 0 的链表。 数据范围:0≤n≤105,0 ≤ai≤109,0 ≤k≤109 要求&am…...
qt下载和安装教程国内源下载地址
qt不断在更新中,目前qt6日渐成熟,先前我们到官方下载或者国内镜像直接可以下载到exe文件安装,但是最近几年qt官方似乎在逐渐关闭旧版本下载通道,列为不推荐下载。但是qt5以其广泛使用和稳定性,以及积累大量代码使得qt5…...
html5表格实战-跨行跨列
效果如图 代码如图...
使用OBS进行webRTC推流参考
参考腾讯云官方文档: 云直播 OBS WebRTC 推流_腾讯云 说明非常详细,分为通过WHIP和OBS插件的形式进行推流。 注意:通过OBS插件的形式进行推流需要使用较低的版本,文档里有说明,需要仔细阅读。...
Rockchip --- 图像时延优化
通过配置wait-line,即图像采集多少行后提前输出buffer给ISP,而无需等待图像全部采集完毕。一般设置为图像采集一半后提前输出buffer给ISP (一)VICAP提前输出 Video Input CAPture是用于图像采集和处理的子系统 1. 通过dts配置 …...
微软 LIDA 库:基于大模型的自动化数据分析与可视化
微软 LIDA 库:基于大模型的自动化数据分析与可视化 一、核心架构与 LLM 交互流程 #mermaid-svg-UzSwZNKPlgrJUpej {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-UzSwZNKPlgrJUpej .error-icon{fill:#5…...
java-正则表达式-集合-泛型
正则表达式 正则表达式到底是什么东西? 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。 http://tool.oschina.net/r…...
力扣刷题994. 腐烂的橘子
994. 腐烂的橘子 - 力扣(LeetCode) 使用bfs,先遍历所有的橘子,统计所有的橘子数量,然后把腐烂的橘子放入队列当中,然后进行bfs遍历,套用bfs的模版,但是每一次出队的橘子(…...
Kubernetes的Service详解
一、Service介绍 在 kubernetes 中, pod 是应用程序的载体,我们可以通过 pod 的 ip 来访问应用程序,但是 pod 的 ip 地址不是固定的,这也就意味着不方便直接采用pod 的 ip 对服务进行访问。 为了解决这个问题,kuberne…...
Linux目录理解
前言 最近在复习linux,发现有些目录总是忘记内容,发现有些还是得从原义和实际例子去理解会记忆深刻些。以下是个人的一些理解 Linux目录 常见的Linux下的目录如下: 1. 根目录 / (Root Directory) 英文含义:/ 是文件系统的根…...
vue中js简单创建一个事件中心/中间件/eventBus
vue中js简单创建一个事件中心/中间件/eventBus 目录结构如下: eventBus.js class eventBus {constructor() {this.events {};}// 监听事件on(event, callback) {if (!this.events[event]) {this.events[event] [];}this.events[event].push(callback);}// 发射…...
1~2 课程简介+ESP32-IDF环境搭建(虚拟机Linux环境下)
哔站“宸芯IOT”视频链接 一、课程内容介绍 1.什么是ESP32 ESP32是集成2.4GHz Wi-Fi和蓝牙双模的单芯片方案,具有超高的射频性能、稳定性、通用性和可靠性,以及超低的功耗,满足不同的功耗需求,适用于各种应用场景。ESP32是ESP8…...
Linux系统移植篇(十一)Linux 内核启动流程
要分析 Linux 启动流程,同样需要先编译一下 Linux 源码,因为有很多文件是需要编译才 会生成的。首先分析 Linux 内核的连接脚本文件 arch/arm/kernel/vmlinux.lds,通过链接脚本可以 找到 Linux 内核的第一行程序是从哪里执行的。vmlinux.lds …...
React19源码系列之Hooks(useId)
useId的介绍 https://zh-hans.react.dev/reference/react/useId useId 是 React 18 引入的一个新 Hook,主要用于生成全局唯一的 ID。在开发中,我们经常需要为元素(如表单元素、模态框等)生成唯一 ID,以便在 JavaScri…...
深度学习-149-langchain之如何不使用with_structured_output()从模型中返回结构化数据
文章目录 1 不使用with_structured_output()方法1.1 问题背景1.2 输出解析器1.3 远程deepseek大模型API2 基于提示词2.1 直接使用提示词2.2 少样本提示词3 直接提示和解析模型输出3.1 使用PydanticOutputParser3.1.1 构建解析器3.1.2 构建提示模板3.1.3 调用大模型3.1.4 调用链…...
SAP DOI EXCEL应用
【应用场景】采用DOI方式打开填充EXCEL数据 *&---------------------------------------------------------------------* *& 包含 ZFI1009R_TOP *&---------------------------------------------------------------------* TABLES:bkpf,bseg. D…...
RS485电路设计注意事项
(一)RS485的电平标准: RS485用缆线两端的电压差值来表示传递信号,逻辑“1”以两线间的电压差为2V~6V标识,逻辑“0”以两线间的电压差为-2V~-6V标识。由此可见,接口信号电平较低,不易损坏接口电路…...
Git 回退操作详解:带示例的“小白”指南
前言 在日常开发中,我们难免会遇到: 改错代码:推送之前才发现某些行根本就不该动提交错误:commit 信息打错、提交到错误分支想回到之前版本:测试时发现之前版本是好的,需要回去查看 这就需要用到 Git 的…...
PyQt5库 各种导入项的作用
from PyQt5.QtCore import QIODevice, QSharedMemory, pyqtSignal 这行代码是从 PyQt5 库中导入了几个类和信号,用于开发桌面应用程序。下面是每个导入项的详细解释: QIODevice: QIODevice 是 PyQt5 中的一个类,提供了对输入输出设备的抽象…...
Git下载安装(保姆教程)
目录 1、Git下载 2、Git安装(windows版) (1)启动安装程序 (2)阅读许可协议 (3)选择安装路径 (4)选择组件 (5)选择开始菜单文件夹…...
关系数据库设计理论
目录 一、数据依赖——重点 (1)平凡依赖/非平凡函数依赖 (2)完全/部分函数依赖 (3)传递函数依赖 二、范式(NF) (1)第一范式 (2)…...
图解LLM智能体(LLM Agents):构建与运作机制的全面解析
LLM智能体:构建与运作机制 LLM智能体(LLM Agents)正在迅速普及,似乎逐渐取代了我们熟悉的传统对话式LLM。这些令人惊叹的能力并非凭空而来,而是需要多个组件协同工作。 本文包含超过60张定制插图,将深入探讨LLM智能体的领域、其核心组件以及多智能体框架的工作原理。 文…...
Anaconda 入门指南
Anaconda 入门指南 一、下载安装 Anaconda 1、下载地址:Anaconda 推荐下载 python3 版本, 毕竟未来 python2 是要停止维护的。 2、安装 Anaconda 按照安装程序提示一步步安装就好了, 安装完成之后会多几个应用: Anaconda Navigtor :用于管…...
YOLOv11小白的进击之路(九)创新YOLO11损失函数之NWD损失函数源码解读
之前的博客也有对YOLO11的损失函数进行过源码分析,可以参考:YOLOv11小白的进击之路(六)创新YOLO的iou及损失函数时的源码分析_yolov11的损失函数是什么-CSDN博客最近在做小目标检测的时候注意到了NWD损失函数,这里对其…...
【c++】内存序 和 内存一致性模型
c 11 中为了支持并发,定义了内存序和内存一致性模型。这个概念听起来非常高深,好像是在多线程编程领域浸淫多年之后的神级程序员才能搞明白,并用明白的东西。 本文尝试用最简单的方式说清楚这个概念。因为这个概念真的超级简单,大…...
力扣128. 最长连续序列 || 452. 用最少数量的箭引爆气球
最长连续列 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 输入:nums [100,4,200,1,3,2] 输出:4 解释&…...
从零开始写C++3D游戏引擎(开发环境VS2022+OpenGL)之十一点二五 光照贴图(lighting maps)的实现 细嚼慢咽逐条读代码系列
写在篇前的话 作为一个曾经在代码堆里面苦苦挣扎的萌新,困惑的事情在于库,各种依赖,包换文件,链接库,纠结于代码的作用意义。尤其在3D引擎开发的问题上,很多人都被各种困难给阻拦,放弃了在3D渲染,3D游戏引擎上大涨鸿图的机会。 当然关于3D游戏引擎的教程已经汗牛充栋…...
优先级队列(PriorityQueue)_1_模拟实现优先级队列
1、概念 前面介绍过队列,队列是一种先进先出(FIFO)的数据结构 ,但有些情况下, 操作的数据可能带有优先级,一般出队 列时,可能需要优先级高的元素先出队列 ,这时候,使用队列显然不合适了。 在这种…...
java后端怎么写好根据角色控制查询不同数据,
z总的思路,先把不带查询条件的包含角色控制场景(比如:总公司经理角色可以查看所有数据,但是暂存的话只能查自己暂存的,分公司,只能查自己所属分公司的,)的所有数据查出来 例如查询的…...
《量子比特:AI复杂算法破局的关键力量》
在科技飞速发展的今天,人工智能(AI)与量子计算成为了推动人类进步的两大引擎。而量子比特,作为量子计算的基石,正逐渐展现出其在实现复杂AI算法时相较于传统比特的独特优势,为AI领域带来了前所未有的变革潜…...