YML学习
讲解YML使用场景、语法和解析
- 1.基础知识
- 1.1 什么是YML
- 1.2 YML优点
- 1.3 YML使用场景
- 2.YML语法
- 2.1 基础语法
- 2.2 字面量数据类型
- 2.2.1 字符串
- 2.2.2 NULL
- 2.4.5 时间戳(timestamp)
- 2.3 对象\MAP类型
- 2.4 数组/List/Set
- 2.4.1 值为基础类型
- 2.4.2 值为对象
- 2.4.3 多维数组
- 2.4.4 复杂类型
- 2.5 显示类型
- 2.6 引用和复用
- 3.YML解析
- 3.1准备工作
- 3.1 spring解析
- 3.1.1 Environment注解
- 3.1.2 YamlPropertiesFactoryBean
- 3.2 SnakeYml组件
- 3.2.1 pom依赖
- 3.2.2 解析yml文件到map
- 3.2.3 解析yml到vo对象
- 3.2.4 vo生成yml格式字符串
- 3.3 jackson组件
- 3.3.1 pom依赖
- 3.3.2 解析yml文件到map
- 3.3.3 解析yml到vo对象
- 4.总结
- 4.1 XML、JSON、YAML
- 4.2 易错点
1.基础知识
1.1 什么是YML
YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:”Yet Another Markup Language”(仍是一种标记语言)。
YAML是一个类似 XML、JSON 的标记性语言。YAML 强调以数据为中心,并不是以标识语言为重点。因而 YAML 本身的定义比较简单,号称“一种人性化的数据格式语言”。
1.2 YML优点
- YAML是一种非常简单的基于文本的人类可读的语言,用于在人和计算机之间交换数据。
- YAML是不是一种编程语言。它主要用于存储配置信息。
- YAML 的缩进就像 Python 的缩进一样优雅。
- YAML 还减少了 JSON 和 XML 文件中的大部分“噪音”格式,例如引号、方括号和大括号
1.3 YML使用场景
yml主要用于软件配置,大有替代properties、XML、JSON的趋势,主要其格式简洁易懂
2.YML语法
2.1 基础语法
先看yml示例:
person:name: 蒋增奎gender: 男spring:profiles: devdatasource:url: jdbc:mysql://127.0.01/banchengbang_springbootusername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driver
对比json
spring:{profiles:"dev",datasource:{url:"jdbc:mysql://127.0.01/banchengbang_springboot",username:"root",password:"root",driver-class-name:"com.mysql.jdbc.Driver"}
}
对比java,和java对象之间的关系更接近
private String profiles;
private Datasource datasource;
- 使用缩进表示层级关系。 | json使用花括号{}
- 缩进时不允许使用 Tab 键,只允许使用空格。
- 缩进的空格数不重要,但同级元素必须左侧对齐。
- 大小写敏感
- key:value键值对模式 |和json一样
- 内容如字符串,不需要加""
与json区别
- 大小写敏感 (json 里也是大小写敏感的)
- 使用缩进表示层级关系 (json 中使用 {} 表示层级)
- "#"表示注释 (json 不允许写注释, yaml 写的配置文件要比 json 方便很多)
- key : val 值之前必须有空格
- 多个key-val组合,不需要加逗号","
总结:比json少{},逗号,多缩进和值前空格
YAML 支持以下三种数据结构:
- 对象:键值对的集合
- 数组:一组按次序排列的值
- 字面量:单个的、不可拆分的值
2.2 字面量数据类型
- 字面量是指单个的,不可拆分的值,例如:数字、字符串、布尔值、以及日期等。
- 在 YAML 中,使用“key:[空格]value”的形式表示一对键值对(空格不能省略), 如 url:
www.biancheng.net。 - 字面量直接写在键值对的“value”中即可,且默认情况下字符串是不需要使用单引号或双引号的。
示例:
name: 蒋增奎 #姓名
isMan: true # 男士
birth: 2023-12-01 #出身日期
weight: 80.5
height: 172
parent: ~ # ~ 表示null
2.2.1 字符串
字符串可以加单引号或双引号或者没有引号。
quoted: - 'single quoted string'- "double quoted strings"- withoout quoted string
都是合法的,等价于json
{"quoted": ["single quoted string","double quoted strings","withoout quoted string"]
}
多行文本
字符串比较多的时候,更好的展示,选择单行/多行文本展示,用| 前缀。
例如,配置 GitHub Actions 时候运行一些命令:
# Multiline strings start with |
execute: |npm cinpm buildnpm test
等价json
{"execute": "npm ci\nnpm build\nnpm test\n"
}
2.2.2 NULL
YAML 声明空值有以下几种方法:
manager: null
blank:
tilde: ~
title: null
~: null key
等同json
{"manager": null,"blank": null,"tilde": null,"title": null,"null": "null key"
}
2.4.5 时间戳(timestamp)
时间戳表示单个时间点。它使用符号形式 ISO8601。如果未添加时区,则假定该时区为 UTC。要描述日期格式,可以省略时间部分。在这种情况下,时间默认为00:00:00Z。请参见下面示例中的用法。
time: 2020-12-07T01:02:59:34.02Z
timestamp: 2020-12-07T01:02:59:34.02 +05:30
datetime: 2020-12-07T01:02:59:34.02+05:30
notimezone: 2020-12-07T01:02:59:34.02
date: 2020-12-07
但实际转化有点问题
2.3 对象\MAP类型
使用缩进表示对象与属性的层级关系。
写法1:推荐
key1: value1
key2: value2
写法2:不推荐,除非比较深的嵌套。感觉有点像json数据
key: {key1: value1, key2: value2, …}
website: name: baiduurl: www.baidu.com
或者
website: {name: baidu,url: www.baidu.com}
2.4 数组/List/Set
2.4.1 值为基础类型
写法1:推荐
YAML 使用“-”表示数组中的元素,注意:- 后面也要加空格
pets:- cat- dog- pig
写法2:这种也推荐,比较简化
用[]表示 key: [value1,value2]
pets: [cat,dog,pig]
2.4.2 值为对象
如果值一个对象如:
# java 代码:
private List<Dog> lists;#yml数据
lists:- name: 可乐age: 2 #注意前面没有 - 哦- name: 卷毛age: 3
或者:
lists: - {name: 可乐,age: 2}- {name: 卷毛,age: 3}
或者:
lists: [{name: 可乐,age: 2},{name: 卷毛,age: 3}]
2.4.3 多维数组
-- A- B- C
-- D- E- F
结果:[["A", "B", "C"],["D", "E", "F"]]
2.4.4 复杂类型
有对象,有数组、基本数据类型
name: zhangsanage: 30pets:-dog-cat-pigcar:name: QQchild:name: zhangxiaosanage: 2
java代码
public class Person {private String lastName;private Integer age;private Boolean boss;private Date birth;private Map<String,Object> maps;private List<Dog> lists;private Dog dog;private String[] arr;
}
public class Dog {private String name;private Integer age;
}
对应的yml填充数据
person:boss: falsemaps:k1: v1k2: 14lists:- name: d1age: 2- name: d2age: 3- {name: d3,age: 4}birth: 2017/12/15dog:name: p_dogage: 15age: 13last-name: 张三arr: [s1,s2,s3]
2.5 显示类型
默认情况下,YAML 会自动推断数据类型,就像 TypeScript 的类型推断一样,但是当你需要你也可以使用 标签(tags)显示指定类型,比如整数类型 两个英文感叹号 !! 再加上 int 就变成了一个整数 tag ——!!int。
# The following value should be an int, no matter what:
should-be-int: !!int 3.2# Parse any value to string:
should-be-string: !!str 30.25# I need the next value to be boolean:
should-be-boolean: !!bool yes!!com.jsoft.po.Company
address: 天府大道
boss: {birth: !!date '2023-12-13', id: 1, name: 蒋增奎, weight: 78.78}
creat_date: 2000-12-31
id: 1
name: 雪州科技
users:- {birth: !!timestamp'2023-12-13T01:10:32.464Z', id: 2, name: 张三丰, weight: !!float '89'}- {birth: !!timestamp '2023-12-13T01:10:32.464Z', id: 3, name: 张无忌, weight: !!float '100'}
2.6 引用和复用
YML值相互引用的基本语法如下:
key:&anchor
value other_key:anchor
在上面的例子中,key是一个YML键,&anchor是一个锚点,value是一个值。
通过在其他地方使用anchor来引用这个值。
database:host: &db_host localhost #给key[host]取一个别名prot: &db_port 3306username: &db_username rootpwd: &db_pwd 11111development:database:host: *db_host # *别名,引用别名对应的值 这里就是localhost prot: *db_portusername: *db_usernamepwd: *db_pwd
实际效果如下
development:database:host: localhostprot: 3306username: rootpwd: 11111development:database:host: localhostprot: 3306username: rootpwd: 11111
复用大节点
basic: &common #这个basic节点时可复用的sex: 男city: 女user:name: 蒋增奎<<: *common
等价于
basic: &common #这个basic节点时可复用的sex: 男city: 女user:name: 蒋增奎sex: 男city: 女
& 用来建立锚点(defaults),<< 表示合并到当前数据,* 用来引用锚点。注意只是复用这个节点的数据,这个节点不会复用过来
3.YML解析
3.1准备工作
准备两个vo类
public class Company {private Long id;private String name;private String address;private User boss;private List<User> users;.......
}
public class User {private Long id;private String name;private Date birth;private BigDecimal weight;
...
}
3.1 spring解析
3.1.1 Environment注解
在Spring中有一个类Environment,它可以被认为是当前应用程序正在运行的环境,它继承了PropertyResolver接口,因此可以作为一个属性解析器使用。先创建一个yml文件,属性如下:
person:name: hydragender: maleage: 18
使用起来也非常简单,直接使用@Autowired就可以注入到要使用的类中,然后调用它的getProperty()方法就可以根据属性名称取出对应的值了。
@RestController
public class EnvironmentController {@Autowiredprivate Environment environment; //注入@GetMapping("envTest")private void getEnv(){System.out.println(environment.getProperty("person.name")); //通过key获取System.out.println(environment.getProperty("person.gender"));Integer autoClose = environment.getProperty("person.age", Integer.class); //类型转化System.out.println(autoClose);String defaultValue = environment.getProperty("person.other", String.class, "defaultValue");//类型转化System.out.println(defaultValue);}
}
3.1.2 YamlPropertiesFactoryBean
在Spring中还可以使用YamlPropertiesFactoryBean来读取自定义配置的yml文件,而不用再被拘束于application.yml及其激活的其他配置文件。
在使用过程中,只需要通过setResources()方法设置自定义yml配置文件的存储路径,再通过getObject()方法获取Properties对象,后续就可以通过它获取具体的属性,下面看一个例子:
@GetMapping("fcTest")
public void ymlProFctest(){YamlPropertiesFactoryBean yamlProFb = new YamlPropertiesFactoryBean();yamlProFb.setResources(new ClassPathResource("application2.yml"));Properties properties = yamlProFb.getObject();System.out.println(properties.get("person2.name"));System.out.println(properties.get("person2.gender"));System.out.println(properties.toString());
}
3.2 SnakeYml组件
前面介绍的几种方式,在Spring环境下无需引入其他依赖就可以完成的,接下来要介绍的SnakeYml在使用前需要引入依赖,但是同时也可以脱离Spring环境单独使用。先引入依赖坐标:
3.2.1 pom依赖
<!-- https://mvnrepository.com/artifact/org.yaml/snakeyaml -->
<dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId><version>1.30</version>
</dependency>
3.2.2 解析yml文件到map
test.yml
id: 10
title: 钢铁是怎么炼成的
price: 35
author:firstName: 蒋lastName: 增奎tel: 13688006645
解析:
Yaml yaml=new Yaml();
1.返回的是一个map对象:map<key,value>
Map<String, Object> map=yaml).load(inputStream);
2.返回的是一个VO对象
VO vo=yaml).load(inputStream,VO.class);
@Testpublic void t2() {Yaml yaml=new Yaml();Map<String, Object> map =yaml.load(getClass().getClassLoader().getResourceAsStream("test.yml"));//System.out.println(map);for (Map.Entry<String, Object> entry : map.entrySet()) {System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());}//获得基础类型String title=(String)map.get("title");System.out.println("title->"+title+";id->"+map.get("id")+";price->"+map.get("price"));//获得对象Map<String, Object> author =(Map)map.get("author");//获得对象的子属性String lastName=(String) author.get("lastName");System.out.println("lastName="+lastName);}
效果
key = id, value = 10
key = title, value = 钢铁是怎么炼成的
key = price, value = 35
key = author, value = {firstName=蒋, lastName=增奎, tel=13688006645}
title->钢铁是怎么炼成的;id->10;price->35
lastName=增奎
3.2.3 解析yml到vo对象
把上一个步骤生成字符串,保存到company.yml文件,放置到类的根目录下
代码:
@Testpublic void t2(){Yaml yaml=new Yaml();Company Company =yaml.loadAs(getClass().getClassLoader().getResourceAsStream("company.yml"), Company.class);System.out.println(Company.toString());}
效果
Company{
id=1, name='雪州科技', address='天府大道', boss=User{id=1,
name='蒋增奎', birth=Tue Dec 12 22:32:36 CST 2023, weight=78.78},
users=[User{id=2, name='张三丰', birth=Tue Dec 12 22:32:36 CST 2023, weight=89},User{id=3, name='张无忌', birth=Tue Dec 12 22:32:36 CST 2023, weight=100}]}
3.2.4 vo生成yml格式字符串
public class TestDemo {/*** vo生成yml格式字符串*/@Testpublic void t1() {Company company=getGS();Yaml yaml = new Yaml();StringWriter sw = new StringWriter();yaml.dump(company, sw);System.out.println(sw.toString());}public Company getGS(){Company gs=new Company();gs.setAddress("天府大道");gs.setBoss(new User(1l,"蒋增奎",new Date(), new BigDecimal("78.78")));gs.setId(1l);gs.setName("雪州科技");List<User> users=new ArrayList<>();users.add(new User(2l,"张三丰",new Date(), new BigDecimal("89")));users.add(new User(3l,"张无忌",new Date(), new BigDecimal("100")));gs.setUsers(users);return gs;}
}
执行效果:
!!com.jsoft.po.Company
address: 天府大道
boss: {birth: !!timestamp '2023-12-12T23:37:08.209Z', id: 1, name: 蒋增奎, weight: 78.78}
id: 1
name: 雪州科技
users:
- {birth: !!timestamp '2023-12-12T23:37:08.211Z', id: 2, name: 张三丰, weight: !!float '89'}
- {birth: !!timestamp '2023-12-12T23:37:08.211Z', id: 3, name: 张无忌, weight: !!float '100'}
3.3 jackson组件
jackson不仅可以解析json,也支持yml
3.3.1 pom依赖
<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-yaml</artifactId><version>2.12.3</version></dependency>
3.3.2 解析yml文件到map
test.yml
id: 10
title: 钢铁是怎么炼成的
price: 35
author:firstName: 蒋lastName: 增奎tel: 13688006645
java代码
@Testpublic void t4() throws IOException {ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());InputStream input=this.getClass().getClassLoader().getResourceAsStream("test.yml");Map<String,Object> map = objectMapper.readValue(input, Map.class);for (Map.Entry<String, Object> entry : map.entrySet()) {System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());}//获得基础类型String title=(String)map.get("title");System.out.println("title->"+title+";id->"+map.get("id")+";price->"+map.get("price"));//获得对象Map<String, Object> author =(Map)map.get("author");//获得对象的子属性String lastName=(String) author.get("lastName");System.out.println("lastName="+lastName);}
效果
key = id, value = 10
key = title, value = 钢铁是怎么炼成的
key = price, value = 35
key = author, value = {firstName=蒋, lastName=增奎, tel=13688006645}
title->钢铁是怎么炼成的;id->10;price->35
lastName=增奎
3.3.3 解析yml到vo对象
把上一个步骤生成字符串,保存到company.yml文件,放置到类的根目录下
代码:
@Testpublic void t5() throws IOException {ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());InputStream input=this.getClass().getClassLoader().getResourceAsStream("company.yml");Company Company = objectMapper.readValue(input, Company.class);System.out.println(Company.toString());}
效果
Company{
id=1, name='雪州科技', address='天府大道', boss=User{id=1,
name='蒋增奎', birth=Tue Dec 12 22:32:36 CST 2023, weight=78.78},
users=[User{id=2, name='张三丰', birth=Tue Dec 12 22:32:36 CST 2023, weight=89},User{id=3, name='张无忌', birth=Tue Dec 12 22:32:36 CST 2023, weight=100}]}
4.总结
4.1 XML、JSON、YAML
看下图,从左往右是 XML、JSON、YAML 文件,JSON 通过 {} 和 [] 等简化了 XML,变得更加直观,但是当嵌套过深 XML 需要找结尾标签,JSON 需要找结尾的 },无论 XML 还是 JSON 都需要找结尾标记,很不直观,但 YAML 直接做的比 JSON 更加激进,连符号都没了,立体结构也变得扁平了,更加符合人类阅读习惯。
4.2 易错点
Java
public class Person {private String name;private String tel;//-----}
对应yml
name : jzk
tel : 13688006635
错误:
person:name : jzktel : 13688006635
不要因为缩进把java类名也写入,和json一样,yml只和对象的属性值有关,和类无关
相关文章:
YML学习
讲解YML使用场景、语法和解析 1.基础知识1.1 什么是YML1.2 YML优点1.3 YML使用场景 2.YML语法2.1 基础语法2.2 字面量数据类型2.2.1 字符串2.2.2 NULL2.4.5 时间戳(timestamp) 2.3 对象\MAP类型2.4 数组/List/Set2.4.1 值为基础类型2.4.2 值为对象2.4.3 …...
华为HCIP认证H12-821题库下
26、6.交换技术核心知识 (单选题)某交换机运行RSTP协议,其相关配置信息如图所示,请根据命令配置情况指出对于Instance 1,该交换机的角色是: A、根交换机 B、非根交换机 C、交换机 D、无法判断 正确答案是&…...

01--二分查找
一. 初识算法 1.1 什么是算法? 在数学和计算机科学领域,算法是一系列有限的严谨指令,通常用于解决一类特定问题或执行计算 不正式的说,算法就是任何定义优良的计算过程:接收一些值作为输入,在有限的时间…...

初识大数据应用,一文掌握大数据知识文集(1)
文章目录 🏆初识大数据应用知识🔎一、初识大数据应用知识(1)🍁 01、请用Java实现非递归二分查询?🍁 02、是客户端还是Namenode决定输入的分片?🍁 03、mapred.job.tracker命令的作用?…...

Kafka生产问题总结及性能优化实践
1、消息丢失情况 消息发送端: (1)acks0: 表示producer不需要等待任何broker确认收到消息的回复,就可以继续发送下一条消息。性能最高,但是最容易丢消息。大数据统计报表场景,对性能要求很高&am…...

[MySQL]数据库原理2,Server,DataBase,Connection,latin1、UTF-8,gb2312,Encoding,Default Collation——喵喵期末不挂科
希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…...
【算法集训】基础数据结构:十、矩阵
矩阵其实就是二维数组,这些题目在9日集训中已经做过,这里做的方法大致相同。 第一题 1351. 统计有序矩阵中的负数 int countNegatives(int** grid, int gridSize, int* gridColSize) {int r gridSize;int c gridColSize[0];int ret 0;for(int i 0;…...

python排序算法 直接插入排序法和折半插入排序法
最近需要使用到一些排序算法,今天主要使针对直接插入排序和折半插入排序进行讲解。 首先是直接插入排序,其排序过程主要是,针对A[a1,a2,a3,a4,a5....an],从排序的序列头部起始位置开始,将其也就是a1视为只有一个元素的…...

【flutter对抗】blutter使用+ACTF习题
最新的能很好反编译flutter程序的项目 1、安装 git clone https://github.com/worawit/blutter --depth1 然后我直接将对应的两个压缩包下载下来(通过浏览器手动下载) 不再通过python的代码来下载,之前一直卡在这个地方。 如果读者可以正…...

OpenHarmony 如何去除系统锁屏应用
前言 OpenHarmony源码版本:4.0release / 3.2 release 开发板:DAYU / rk3568 一、3.2版本去除锁屏应用 在源码根目录下:productdefine/common/inherit/rich.json 中删除screenlock_mgr组件的编译配置,在rich.json文件中搜索th…...

Python - 搭建 Flask 服务实现图像、视频修复需求
目录 一.引言 二.服务构建 1.主函数 upload_gif 2.文件接收 3.专属目录 4.图像修复 5.gif2mp4 6.mp42gif 7.图像返回 三.服务测试 1.服务启动 2.服务调用 四.总结 一.引言 前面我们介绍了如何使用 Real-ESRGAN 进行图像增强并在原始格式 jpeg、jpg、mp4 的基础上…...
C#基础——构造函数、析构函数
C#基础——构造函数、析构函数 1、构造函数 构造函数是一种特殊的方法,用于在创建类的实例时进行初始化操作。构造函数与类同名,并且没有返回类型。 构造函数在对象创建时自动调用,可以用来设置对象的初始状态、分配内存、初始化字段等操作…...

jmeter 如何循环使用接口返回的多值?
有同学在用jmeter做接口测试的时候,经常会遇到这样一种情况: 就是一个接口请求返回了多个值,然后下一个接口想循环使用前一个接口的返回值。 这种要怎么做呢? 有一定基础的人,可能第一反应就是先提取前一个接口返回…...

VLAN 详解一(VLAN 基本原理及 VLAN 划分原则)
VLAN 详解一(VLAN 基本原理及 VLAN 划分原则) 在早期的交换网络中,网络中只有 PC、终端和交换机,当某台主机发送一个广播帧或未知单播帧时,该数据帧会被泛洪,甚至传递到整个广播域。而广播域越大ÿ…...
Android - 分区存储 MediaStore、SAF
官方页面 参考文章 一、概念 分区存储(Scoped Storage)的推出是针对 APP 访问外部存储的行为(乱建乱获取文件和文件夹)进行规范和限制,以减少混乱使得用户能更好的控制自己的文件。 公有目录被分为两大类:…...
Shiro框架权限控制
首先去通过配置类的用户认证,在用户认证完成后,进行用户授权,用户通过授权之后再跳转其他的界面时,会进行一个验证,当前账号是否有权限。 前端权限控制显示的原理 在前端中,通常使用用户的角色或权限信息来…...

centOS7 安装tailscale并启用子网路由
1、在centOS7上安装Tailscale客户端 #安装命令所在官网位置:https://tailscale.com/download/linux #具体命令为: curl -fsSL https://tailscale.com/install.sh | sh #命令执行后如下图所示2、设置允许IP转发和IP伪装。 安装后,您可以启动…...
spring 项目中如何处理跨越cors问题
1.使用 CrossOrigin 注解 作用于controller 方法上 示例如下 RestController RequestMapping("/account") public class AccountController {CrossOriginGetMapping("/{id}")public Account retrieve(PathVariable Long id) {// ...}DeleteMapping(&quo…...
importlib --- import 的实现
3.1 新版功能. 源代码 Lib/importlib/__init__.py 概述 importlib 包具有三重目标。 一是在 Python 源代码中提供 import 语句的实现(并且因此而扩展 __import__() 函数)。 这提供了一个可移植到任何 Python 解释器的 import 实现。 与使用 Python 以…...

【PyTorch】现代卷积神经网络
文章目录 1. 理论介绍1.1. 深度卷积神经网络(AlexNet)1.1.1. 概述1.1.2. 模型设计 1.2. 使用块的网络(VGG)1.3. 网络中的网络(NiN)1.4. 含并行连结的网络(GoogLeNet)1.5. 批量规范化…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...

Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...