yml文件上传并映射到实体类
文章目录
- 功能背景
- 功能需要
- 前端开发
- 组件选用
- 组件嵌套和参数绑定
- 上传逻辑示例
- 后端开发
- 接收逻辑
- 解析逻辑
- 省流
- 纯手动实现(不建议)
功能背景
开发一个配置文件解析功能,需要兼容老版本的配置文件。
功能需要
- 前端:两个配置文件分别上传
- 后端:配置文件解析、分版本匹配、配置文件映射到实体类
前端开发
组件选用
选用element-plus的el-pload组件进行上传控制,核心组件代码为:
<el-uploadv-model:file-list="fileListModel":on-remove="handleRemove":before-remove="beforeRemove":limit="1":on-exceed="handleExceed":auto-upload="false"class="upload-location"accept=".yml,.yaml"
/>
核心参数说明:
属性 | 作用 |
---|---|
v-model:file-list | 绑定上传文件列表 |
:on-remove | 文件移除时触发的回调函数,移除文件是组件自发的,此处绑的是你想在触发该逻辑时做的操作 |
:before-remove | 文件移除前触发的函数,此处我绑定了一个确认弹框 |
:limit="1" | 限制最多上传 1 个文件 |
:on-exceed | 超出文件数量限制时的回调,我绑了个提示框 |
:auto-upload="false" | 不自动上传,手动触发上传,因为我要一次提交两个不同的配置文件 |
class="upload-location" | 设置样式类 |
accept=".yml,.yaml" | 限制可上传的文件类型,此处我设置的是yaml类型 |
组件嵌套和参数绑定
此处我选择以el-upload组件为核心,将涉及的提示操作等封装成一个自定义组件。在父组件中使用两次该子组件,
并通过defineModel 实现父组件和子组件间值的双向绑定。
el-upload需要绑定的类型为UploadFile数组,即
子组件:const fileListModel = defineModel<UploadFile[]>("fileList");
父组件:const fileList = ref<any[]>([]);
绑定:v-model:file-list="fileList"
UploadFile参数为:
export interface UploadFile {uid: number | stringname: stringstatus?: 'ready' | 'uploading' | 'success' | 'fail'size?: numberpercentage?: numberraw?: Fileresponse?: anyurl?: stringtype?: string
}
其中raw为我们需要向后端传递的数据部分。
上传逻辑示例
const formData = new FormData()
//实际需要进行判空,此处只写核心部分
formData.append('file1', fileList1.value[0].raw)
formData.append('file2', fileList2.value[0].raw)
axios.post('/api/upload', formData, {headers: {'Content-Type': 'multipart/form-data'}
}).then(res => {console.log('上传成功:', res.data)
}).catch(err => {console.error('上传失败:', err)
})
后端开发
接收逻辑
@PostMapping("/upload")
public R uploadTask(@RequestParam(value = "file1", required = false) MultipartFile file1,@RequestParam(value = "file2", required = true) MultipartFile file2,@RequestParam(value = "groupId", required = true) Integer groupId) {if (file2 == null || groupId == null) {return R.fail("IMPORT_NOT_EXIST_PARAMS");}if (file1 != null) {return paramService.importTaskParams(file1, file2, groupId);} else {return paramService.importTaskParams(file2, groupId);}
}
解析逻辑
单纯的解析yaml文件并映射比较简单,无非将传入的文件内容使用YAMLMapper解析一下,但本任务有一个要求:
- 兼容之前的yml配置文件写法
注:
之前的配置文件使用了 Spring Boot 提供的“松散绑定(Relaxed Binding)”机制,这是直接上传yaml文件并解析无法直接办到的,由此延伸出几点需求:
- 支持单字符串向数组类型的映射(即支持a,b,c,d写法);
- 支持单字符串向枚举类型忽略大小写的映射;
- 中划线和驼峰类型双兼容(即既能解析中划线写法的配置文件,又能解析驼峰写法的配置文件)
- 16进制单字符向char类型的映射
省流
手动调用 Spring Boot 提供的绑定工具,不必自己实现。
高效实现:
try ( InputStream inputStream = multipartFile.getInputStream()){// 1. 读取 YAML 文件Yaml yaml = new Yaml();//假设没有上层需要排除Map<String, Object> yamlMap = yaml.load(inputStream);// 2. 平铺嵌套结构(嵌套结构必须用)Map<String, Object> flatMap = flattenMap(yamlMap, null);// 3. 构造 PropertySource(Spring Boot Binder 需要它)PropertySource<?> propertySource = new MapPropertySource("customYaml", flatMap);StandardEnvironment env = new StandardEnvironment();env.getPropertySources().addFirst(propertySource);// 4. 使用 Binder 绑定Binder binder = Binder.get(env);return binder.bind("", Bindable.of(YourConfig.class)).orElseThrow(() -> new RuntimeException("Binding failed"));} catch (Exception e) {e.printStackTrace();}
辅助方法:
// 将嵌套结构扁平化成 "a.b.c" 格式,只有这样才能处理子级别的中划线映射驼峰private Map<String, Object> flattenMap(Map<String, Object> source, String parentKey) {Map<String, Object> result = new HashMap<>();for (Map.Entry<String, Object> entry : source.entrySet()) {String key = (parentKey != null ? parentKey + "." : "") + entry.getKey();Object value = entry.getValue();if (value instanceof Map) {result.putAll(flattenMap((Map<String, Object>) value, key));} else {result.put(key, value);}}return result;}
纯手动实现(不建议)
- 单字符串向数组类型的映射
- 重写set方法,使得数组类型属性可接受非数组类型参数。
- 单字符串向枚举类型忽略大小写的映射
- 手写模糊获取方法,并在set方法中调用 。
- 中划线和驼峰类型双兼容
- 重构映射逻辑,在映射之前加一段处理,即将原本的中划线名字修改为驼峰,这样就可和实体类中的属性实现匹配,具体实现为:
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.deser.BeanDeserializer;
import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.node.ObjectNode;import java.io.IOException;
import java.util.HashMap;
import java.util.Map;public class FlexibleObjectMapper extends ObjectMapper {public FlexibleObjectMapper() {// 注册自定义模块用于字段名转换SimpleModule module = new SimpleModule();module.setDeserializerModifier(new BeanDeserializerModifier() {@Overridepublic JsonDeserializer<?> modifyDeserializer(DeserializationConfig config,BeanDescription beanDesc,JsonDeserializer<?> deserializer) {if (deserializer instanceof BeanDeserializer) {return new FlexibleCaseDeserializer((BeanDeserializer) deserializer);}return deserializer;}});this.registerModule(module);}private static class FlexibleCaseDeserializer extends BeanDeserializer {public FlexibleCaseDeserializer(BeanDeserializer base) {super(base);}@Overridepublic Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {//在原逻辑之前加一段处理,即将原本的中划线名字修改为驼峰,这样就可和实体类中的属性实现匹配JsonNode tree = p.getCodec().readTree(p);if (tree.isObject()) {ObjectNode objNode = (ObjectNode) tree;Map<String, JsonNode> newFields = new HashMap<>();objNode.fields().forEachRemaining(entry -> {String fieldName = entry.getKey();String camelCase = toCamelCase(fieldName);newFields.put(camelCase, entry.getValue());});objNode.removeAll();newFields.forEach(objNode::set);JsonParser newParser = objNode.traverse(p.getCodec());newParser.nextToken(); // advance to START_OBJECT//回到原逻辑return super.deserialize(newParser, ctxt);}return super.deserialize(p, ctxt);}private String toCamelCase(String s) {if (!s.contains("_")) return s;StringBuilder sb = new StringBuilder();boolean upper = false;for (char c : s.toCharArray()) {if (c == '_') {upper = true;} else {sb.append(upper ? Character.toUpperCase(c) : c);upper = false;}}return sb.toString();}}
}
- 16进制单字符向char类型的映射
- 自定义反序列化逻辑,指定格式字符串向字符的处理。
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;import java.io.IOException;public class CharDeserializer extends JsonDeserializer<Character> {@Overridepublic Character deserialize(JsonParser jsonParser, DeserializationContext context)throws IOException {String text = jsonParser.getText().trim();// 支持 \u 或 u 开头的十六进制 Unicode 字符if (text.startsWith("\\u") || text.startsWith("u")) {text = text.substring(text.indexOf('u') + 1);try {int code = Integer.parseInt(text, 16);return (char) code;} catch (NumberFormatException e) {throw new IOException("Invalid hexadecimal character: " + text);}}throw new IOException("Empty character string");}
}
相关文章:
yml文件上传并映射到实体类
文章目录 功能背景功能需要前端开发组件选用组件嵌套和参数绑定上传逻辑示例 后端开发接收逻辑解析逻辑省流纯手动实现(不建议) 功能背景 开发一个配置文件解析功能,需要兼容老版本的配置文件。 功能需要 前端:两个配置文件分别…...
What are the advantages of our neural network inference framework?
What are the advantages of our neural network inference framework? 1. Background2. What are the advantages of our neural network inference framework?References 1. Background Let me introduce /ˌɪntrəˈdjuːs/ the background /ˈbkɡraʊnd/ first. Today…...
猿辅导集团推首个教育AI范式小猿AI 聚焦家校应用场景发布3款新品
近两年,通用大模型呈爆发式发展,垂类AI遭遇“技术平替”危机。 4月15日,猿辅导集团在“小猿AI暨智能硬件战略发布会”上,正式推出首个教育AI范式——“小猿AI”,并发布覆盖家校两端的“软件应用智能终端通识课程”三位…...
10【模块学习】LCD1602(二):6路温度显示+实时时钟
项目:6路温度显示实时时钟 1、6路温度显示①TempMenu.c文件的代码②TempMenu.h文件的代码③main.c文件的代码④Timer.c文件的代码⑤Delay.c文件的代码⑥Key.c文件的代码 2、实时时钟显示①BeiJingTime.c文件的代码②BeiJingTime.h文件的代码③main.c文件的代码如下④…...
Embedding在RAG中的核心作用及其几何类比-来自DeepSeek
1. 核心概念映射 Embedding的本质:将文本、图像等非结构化数据转化为高维空间中的坐标点(向量),例如: 句子A → 向量 [0.2, -1.5, 3.0, ..., 0.7](假设维度为768) 句子B → 向量 [0.3, -1.4, 2…...
前端快速入门——JavaScript函数、DOM
1.JavaScript函数 函数是一段可重复使用的代码块,它接受输入(参数)、执行特定任务,并返回输出。 <scricpt>function add(a,b){return ab;}let cadd(5,10);console.log(c); </script>2.JavaScript事件 JavaScript绑定事件的方法࿱…...
AOSP14 Launcher3——最近任务TaskViewSimulator详解
前言:TaskViewSimulator 这个类在最近任务中起到了一个非常重要的作用。 从字面意思上理解,这个单词是由TaskViewSimulator组合而来,字面意思就是TaskView的模拟器,顾名思义,就是一个用来模拟TaskView的类。 为什么要模…...
层次式架构核心:中间层的功能、优势与技术选型全解析
层次式架构中的中间层是整个架构的核心枢纽,承担着多种重要职责,在功能实现、优势体现以及技术选型等方面都有丰富的内容,以下为你详细介绍: 一、功能 1.业务逻辑处理 复杂规则运算:在许多企业级应用中,…...
MySQL主从同步原理及面试回答
1. 什么是主从结构 主从复制、读写分离(分库)解决的是访问的压力 2. Mysql主从复制的原理 Mysql主从复制的核心是binlog日志文件(二进制日志文件) 二进制日志(BINLOG)记录了所有的 DDL(数据定…...
利用quartus的DDS函数信号发生器设计
一、功能要求 采用数字频率合成(Direct Digital FrequencySynthesis,简称DDS)设计制作一个波形发生器,仿真后,在DE2-115开发板上实践。 要求: 1、利用DDS技术合成正弦波和方波; 2、输出信号的…...
2.1 腾讯校招通关指南-算法与数据结构
2.1腾讯校招算法与数据结构通关攻略:高频题型真题拆解实战技巧 在腾讯技术岗面试中,算法与数据结构是占比30%的核心考核项,直接决定了面试通过率的「生死线」。本文结合腾讯近三年校招真题,拆解4大高频题型的解题套路、专项训练方…...
数据一致性的守护神:深入Spring声明式事务管理 (@Transactional)
在前面几篇文章中,我们一路打怪升级,掌握了Spring IoC/DI、Bean管理、AOP,并用JdbcTemplate和Spring Data JPA简化了数据库访问。我们的代码越来越简洁、高效。但想象一下这个场景: 用户A向用户B转账100元。这至少需要两个数据库…...
神经网络复习
1 机器学习 1.1 定义 机器学习是人工智能的一个分支领域,它致力于让计算机系统能够自动从数据中学习规律,并利用这些规律对新的数据进行预测或决策,而无需显式地编写针对特定任务的规则。 1.2 分类 全监督学习 全监督学习是指在训练模型时…...
从代码学习深度学习 - 自注意力和位置编码 PyTorch 版
这里写自定义目录标题 前言一、自注意力:Transformer 的核心1.1 多头注意力机制的实现1.2 缩放点积注意力1.3 掩码和序列处理1.4 自注意力示例二、位置编码:为序列添加位置信息2.1 位置编码的实现2.2 可视化位置编码总结前言 深度学习近年来在自然语言处理、计算机视觉等领域…...
Web前端开发——图像与多媒体文件(上)
学习目标: 优秀的商业网站往往通过为页面添加大量的图像、声音、视频、动画等多媒体信息来丰富网站的内容,吸引更多网络访问者的关注。目前大型商业网站非常注重对Web前端开发技术的研究,通过组合各类前端开发技术来改善用户体验和增加用户互…...
C#核心学习(三)常见的泛型数据结构类(1)List和Dictionary
前面我们刚刚学习了,什么是泛型。今天我们就来看看C#中有哪些,常见的泛型数据结构,今天要介绍的是List,和Dictionary。 引言 在C#编程中,泛型集合是高效管理数据的核心工具。List<T>和Dictionary<TKey, TValue>作为两…...
运行时数据区
运行时数据区 Java 虚拟机在运行 Java 程序过程中管理的内存区域称之为运行时数据区,运行时数据区负责管理 JVM 使用到的内存,例如创建对象和销毁对象。 程序计数器 程序计数器又叫 PC 寄存器,每个线程都会通过程序计数器记录当前要执行的字…...
union all 关联查询
UNION ALL 并非用于表的关联查询,而是用于将多个 SELECT 语句的结果集合并成一个结果集。它会保留所有重复的行,不像 UNION 会去除重复行。下面为你提供几种使用 UNION ALL 的场景示例。 示例表结构 假设存在两个表 sales_2024 和 sales_2025ÿ…...
npm ERR! vue-admin-beautiful@1.0.0 dev: `vue-cli-service serve` 问题解决
笔者在跑实习公司的前端时,老是报这个错,并且网上(csdn)并没有好的解决方法,于是这篇文章就诞生了。[吐槽一下]:小公司的实习生干的活是真的多啊。。。 解决方案 依赖有些包装不上,换个源就行了,这里采用…...
玩转Docker | 使用Docker部署Xnote笔记工具
玩转Docker | 使用Docker部署Xnote笔记工具 前言一、Xnote介绍Xnote简介1.2 Xnote特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署Xnote服务下载镜像编辑配置文件编辑部署文件创建容器检查容器状态检查服务端口安全设置四、访问Xnote服务访问Xnote首页…...
TDengine 与其他时序数据库对比:InfluxDB/TimescaleDB 选型指南(二)
四、应用场景分析 (一)TDengine 适用场景 TDengine 适用于对写入性能和存储效率要求极高的物联网设备数据采集场景。在一个拥有数百万个传感器的智能工厂中,每个传感器每秒都会产生多条数据,TDengine 能够高效地处理这些高并发的…...
ARM Cortex汇编宏定义
在ARM架构(尤其是Cortex-M系列MCU)的汇编中,**宏定义(Macro)**用于复用代码片段,支持参数化编程,简化重复逻辑(如寄存器操作、循环、条件判断等)。以下是ARM汇编宏定义的核心语法、用法及示例: 一、宏定义的基本语法 使用 MACRO 和 MEND 伪指令包裹宏体,通过 参数…...
【含文档+PPT+源码】基于Python心理健康管理系统
项目视频介绍: 毕业作品心理健康管理系统 课程简介: 本课程演示的是一款基于Python心理健康管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含:项目源码、项目文档、数据库脚本、软…...
Dockerfile项目实战-单阶段构建Vue2项目
单阶段构建镜像-Vue2项目 1 项目层级目录 以下是项目的基本目录结构: 2 Node版本 博主的Windows电脑安装了v14.18.3的node.js版本,所以直接使用本机电脑生成项目,然后拷到了 Centos 7 里面 # 查看本机node版本 node -v3 创建Vue2项目 …...
大数据驱动的供应链透明化:从数据孤岛到智能协同
大数据驱动的供应链透明化:从数据孤岛到智能协同 在全球化供应链环境下,透明化不仅是一种企业责任,更是提高效率、降低成本和增强供应链韧性的关键举措。然而,传统供应链体系因数据孤岛、信息滞后、信任缺失等问题,常常导致生产过剩、库存积压、资源浪费,甚至供应链断裂…...
第四篇:[特殊字符] 深入理解MyBatis[特殊字符] 掌握MyBatis Generator ——入门与实战
引言 什么是 MyBatis Generator? MyBatis Generator (MBG) 是一个代码生成工具,专为 MyBatis 框架设计。它可以根据数据库表结构自动生成 Java 实体类、Mapper 接口、Mapper XML 文件以及 Example 类。通过使用 MBG,开发者可以显著减少编写…...
LeetCode算法题(Go语言实现)_48
题目 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回 直到单元格中…...
ESP-ADF外设子系统深度解析:esp_peripherals组件架构与核心设计(核心API详解之单个外设管理)
目录 单个外设管理APIesp_periph_createesp_periph_set_functionesp_periph_startesp_periph_stopesp_periph_set_dataesp_periph_get_dataesp_periph_get_stateesp_periph_get_idesp_periph_set_idesp_periph_initesp_periph_runesp_periph_destroy 单个外设管理API esp_peri…...
基于vue2+ElementUI的el-tree封装一个带搜索的树形组件
需求 实现一个如图带搜索框的下拉树形组件。 解决方案 利用el-inputel-tree实现自定义带搜索的下拉树形组件。 具体实现步骤 1、创建TreeSelect组件 <template><div class"tree-select-wrapper" v-clickoutside"handleClose"><el-inpu…...
G2学习打卡
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 DCGAN实践 import torch, random, random, os import torch.nn as nn import torch.nn.parallel import torch.optim as optim import torch.utils.data im…...
【广州华锐互动】汽车生产引入数字孪生系统,优化生产流程,提升汽车产品质量
数字孪生系统的应用为企业带来了生产流程的革命性变革。以汽车制造企业为例,该企业在生产过程中引入数字孪生系统,实现了生产流程的全面优化和产品质量的显著提升 。 在生产流程优化方面,数字孪生系统对汽车生产线进行了全方位的模拟和实时…...
从Gradio App创建Discord Bot/Slack Bot/Website Widget(2)——从Gradio App创建Slack Bot
从Gradio App创建Discord Bot/Slack Bot/Website Widget(2)——从Gradio App创建Slack Bot 本篇摘要18. 从Gradio App创建Discord Bot/Slack Bot/Website Widget18.2 从Gradio App创建Slack Bot18.2.1 运作原理及前置条件1. 运作原理2. 前置条件 18.2.2 …...
基于STM32G474的SPI获取MT6816编码器绝对角度配置指南
前言:最近上手使用了一款编码器芯片,也是先艰难阅读了一下全英文版本的编码器的规格手册,然后通过SPI读取了一下绝对值角度。虽然发现使用起来还是挺简单的,但使用后还是会产生一个对其原理层面的好奇,比如磁编码器内部…...
深入学习ReentrantLock
ReentrantLock 0. 前言:为什么需要 ReentrantLock?1. 基础概念与核心特性1.1 什么是 ReentrantLock?1.2 ReentrantLock vs. synchronized1.3 核心特性详解1.3.1 可重入性 (Reentrancy)1.3.2 公平性选择 (Fairness Choice)1.3.3 可中断获取锁 …...
Spring Boot 集成金蝶 API 演示
✨ Spring Boot 集成金蝶 API 演示:登录 / 注销 Cookie 保存 本文将通过 Spring Boot 完整实现一套金蝶接口集成模型,包括: ✅ 普通登录✅ AppSecret 登录✅ 注销✅ Cookie 保存与复用 📅 项目结构 src/ ├── controller/ │…...
适用于 HAL 的 AIDL
目录 设计初衷 注意 编写AIDLHAL接口 查找AIDLHAL接口 扩展接口 将现有HAL从HIDL转换为AIDL AIDL与HIDL之间的主要差异 针对HAL的供应商测试套件(VTS)测试 Android 11 中引入了在 Android 中使用 AIDL 实现 HAL 的功能, 从而可以在不使用 HIDL 的情况下实现 Android 的部分…...
49、Spring Boot 详细讲义(六)(SpringBoot2.x整合Mybatis实现CURD操作和分页查询详细项目文档)
项目文档:银行借据信息CURD操作和分页查询 一、项目概述 1. 项目简介 本项目旨在使用Spring Boot框架整合MyBatis连接Mysql数据库实现借据信息的增加、删除、修改和查询功能,同时支持分页查询,并提供对应的Restful风格的接口。 2.环境准备 2.1.工具和软件准备 JDK(建议…...
C# 运行web项目
1、web项目直接点击顶部运行...
GPU服务器声音很响可以怎么处理
当GPU服务器运行时噪音过大,通常是由于高负载下散热风扇高速运转所致。以下是分步骤的解决方案,帮助您有效降低噪音并保持设备稳定运行: 一、排查噪音来源 定位声源 • 使用 声级计 或手机分贝检测APP,确定最大噪音位置࿰…...
Java如何选择ojdbc驱动
如何选择ojdbc驱动? 取决于短板。 如果JDK版本高,数据库版本低,根据Oracle数据库版本选择。如果JDK版本低,数据库版本高,根据Java版本选择。 Oracle官网OJDBC驱动和受支持的JDK版本 23ai 21c 19c 驱动类型选择 oj…...
【微思就业推荐 】T岗位-北京,福州,厦门等地
到微思学习,免费推荐就业!学员内推! 原创 厦门微思网络 2025年04月 有哪些大公司在招OCP认证人才? 有哪些大公司在招聘拥有HCIE认证的人才 ① 委托单位:润欣商业管理(厦门)有限公司 央企-华润资产的子公司 岗位&am…...
Linux 命令全解析:从零开始掌握 Linux 命令行
Linux 作为一款强大的开源操作系统,广泛应用于服务器、嵌入式系统以及超级计算机领域。掌握 Linux 命令行技能,是每一位开发者和系统管理员的必备能力。本文将从基础开始,为你详细介绍常用的 Linux 命令,以及它们的使用场景和示例…...
2025年4月份生活有感
今天在5000B培训的下午,一起入所来的小伙伴,有个申请了深圳大学的博士,已录取。哎,想起了当年申博时候信心和决心不足,导致后面匆匆的拿了offer去工作。看到同事的选择还是非常羡慕,想到自己5月份的婚礼&am…...
鸿蒙系统开发状态更新字段区别对比
在鸿蒙系统开发中,状态管理是构建响应式UI的核心机制,主要通过装饰器(Decorators)实现字段的状态观测与更新。根据鸿蒙的版本(V1稳定版和V2试用版),支持的装饰器及其特性有所不同。以下是主要状…...
CEPH OSD_SLOW_PING_TIME_FRONT/BACK 警告处理
ceph config set mgr mon_warn_on_slow_ping_time 2000说明:mon_warn_on_slow_ping_time 该值默认为0,那么只要 osd 心跳超过 mon_warn_on_slow_ping_ratio of osd_heartbeat_grace. 也就是超过 mon_warn_on_slow_ping_ratio和mon_warn_on_slow_ping_rat…...
HTML应用指南:利用POST请求获取全国小菜园门店位置信息
小菜园作为一家以徽菜为主的快餐品牌,自2013年成立以来,凭借其独特的烹饪理念和精致的东方口味菜品,在中国市场上迅速崛起。该品牌强调少油少盐、减少调味品使用,旨在传承并发扬徽州风味的独特魅力。这种健康且不失美味的烹饪方式…...
Python在去中心化物联网中的应用:数据安全、智能合约与边缘计算的融合
Python在去中心化物联网中的应用:数据安全、智能合约与边缘计算的融合 在万物互联的时代,传统物联网(IoT)架构依赖于集中式服务器来管理数据、设备互联与身份认证。然而,随着设备数量激增,中心化架构的可扩展性、安全性和隐私问题逐渐暴露。去中心化物联网(DeIoT)通过…...
CEPH配置优化建议
一、硬件配置优化 磁盘选择: SSD 与 HDD 搭配:使用 SSD 作为 OSD 日志盘(Journal)或元数据存储,HDD 作为数据盘。推荐 SSD 与 HDD 的比例为 1:3~5,具体根据业务负载调整。 RAID 禁用:避免使用硬…...
深度学习入门:神经网络的学习
目录 1 从数据中学习1.1 数据驱动1.2 训练数据和测试数据 2损失函数2.1 均方误差2.2 交叉熵误差2.3 mini-batch学习2.4 mini-batch版交叉熵误差的实现2.5 为何要设定损失函数 3 数值微分3.1 数值微分3.3 偏导数 4 梯度4.1 梯度法4.2 神经网络的梯度 5 学习算法的实现5.1 2层神经…...
机器学习_决策树
决策树的特点 可以处理非线性的问题可解释强,没有θ模型简单,模型预测效率高 if else不容易显示的使用函数表达,不可微 决策树的生成和预测 生成:通过大量数据生成一颗非常好的树,用这棵树来预测新来的数据。 预测&…...