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

【Java Web学习笔记】5 - XML

项目代码

https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/xml

零、在线文档

XML系列教程

一、XML引出

1.为什么需要XML

1.需求1 :两个程序间进行数据通信?

2.需求2:给一台服务器,做一个配置文件,当服务器程序启动时,去读取它应当监听的端口号、还有连接数据库的用户名和密码

3.spring 中的ico配置文件,beans.xml mybatis XXXMapper.xml tomcat server.xml web.xml maven pom.xml

4.能存储复杂的数据关系

2.XML用于解决什么问题

1.解决程序间数据传输的问题:

比如qq之间的数据传送,用xmI格 式来传送数据,具有良好的可读性,可维护性。

2.xmI可以做配置文件(目前主要用法)

xmI文件做配置文件可以说非常的普遍,比如我们的tomcat服务器的server.xml,web.xml

3.xmI可以充当小型的数据库

xml文件做小型数据库,也是不错的选择,我们程序中可能用到的数据,如果放在数据库中读取不合适(因为你要增加维护数据库工作),可以考虑直接用xm来做小型数据库,而且直接读取文件显然要比读取数据库快

 3.案例

1.需求:使用idea创建students.xml(可拓展标记语言)存储多个学生信息

<?xml version="1.0" encoding="UTF-8" ?>
<!--1 xml :表示该文件的类型 xml2 version="1.0"版本3 encoding="UTF-8" 文件编码4. students: root元素/根元素, 程序员自己来定5. <student></student> 表示students一个子元素, 可以有多个6. id就是属性 name, age, gender 是student元素的子元素
-->
<students><student id="100"><name>jack</name><age>10</age><gender>男</gender></student><student id="200"><name>mary</name><age>18</age><gender>女</gender></student>
</students>

二、XML基本语法

1.基本语法

1、文档声明
2、元素
3、属性
4、注释
5、CDATIA区、特殊字符

2.XML语法 - 文档说明

<?xmI version="1.0" encoding="utf-8"?>

1、XML声明放在XML文档的第一行

2、XML声明由以下几个部分组成:

3、version -- 文档符合XML1.0规范,我们学习1.0

4、encoding -- 文档字符编码,比如"utf-8"

3.XML语法 - 元素

1.元素语法要求

        每个XML文档必须有且只有一一个根元素。

        根元素是一个完全包括文档中其他所有元素的元素。

        根元素的起始标记要放在所有其他元素的起始标记之前。

        根元素的结束标记要放在所有其他元素的结束标记之后。

<?xml version="1.0" encoding="utf-8" ?>
<!--1.每个XML文档必须有且只有一个根元素。2.根元素是一个完全包括文档中其他所有元素的元素。3.根元素的起始标记要放在所有其他元素的起始标记之前。4.根元素的结束标记要放在所有其他元素的结束标记之后5.XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签,一个标签有如下几种书写形式包含标签体:<a>www.sohu.cn</a>不含标签体的:<a></a>, 简写为:<a/>6.一个标签中也可以嵌套若干子标签。但所有标签必须合理的嵌套,绝对不允许交叉嵌套7. 叫法student 元素,节点,标签
-->
<students><student id="100"><name>jack</name><age>10</age><gender>男</gender></student><student id="200"><name>mary</name><age>18</age><gender>女</gender></student><school>清华大学</school><city/>
</students>

2. XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签,一个标签有如下几种书写形式,例如:

        包含标签体: <a>www.sohu.cn</a> >

        不含标签体的: <a>< :/a>简写为: <a/>

        一个标签中也可以嵌套若干子标签。但所有标签必须合理的嵌套,绝对不允许交叉嵌套,例如: <a>welcome to<b>www.sohu.org</a></b>

3.在很多时候,说标签、元素、节点是相同的意思

4. XML元素命名规则

        区分大小写,例如,<P>和<p>是两个不同的标记。

        不能以数字开头。

        不能包含空格。

        名称中间不能包含冒号(:)。

        如果标签单词需要间隔,建议使用下划线比如<book_title>hello< /book_ title>

4.XML语法 - 属性

1.属性介绍

        <Student ID="100" >

        < Name>TOM< / Name>

        </Student>

2.属性值用双引号(") 或单引号(')分隔(如果属性值中有',用"分隔;有",用'分隔)

3.一个元素可以有多个属性,它的基本格式为: <元素名属性名="属性值">

4.特定的属性名称在同-一个元素标记中只能出现--次

5.属性值不能包括&字符

<?xml version="1.0" encoding="utf-8" ?>
<!--1.属性值用双引号(")或单引号(')分隔(如果属性值中有',用"分隔;有",用'分隔)2.一个元素可以有多个属性,它的基本格式为:<元素名 属性名="属性值">3.特定的属性名称在同一个元素标记中只能出现一次4.属性值不能包括& 字符
-->
<students><!--举例:id='01' 也是正确写法如果属性值有" 则使用' 包括属性 比如 id="xxx'yyy"如果属性值有' 则使用" 包括属性 比如 id='xxx"yyy'属性名在同一个元素标记只能出现一次 <stduent id="01" id="03"> 错误的属性值不能包括& 字符 比如: <stduent id="0&1"> 是错误的--><student id="100"><name>jack</name><age>10</age><gender>男</gender></student><student id="200"><name>mary</name><age>18</age><gender>女</gender></student>
</students>

5.XML语法 - CDATA节

(注释同HTML)

有些内容不想让解析引擎执行,而是当作原始内容处理(即当做普通文本),可以使用CDATA包括起来,CDATA节中的所有字符都会被当作简单文本,而不是XML标记。

1.语法:

<![CDATA[

这里可以把你输入的字符原样显示,不会解析xmI

]]>

2.可以输入任意字符(除]]>外)

3.不能嵌套

<?xml version="1.0" encoding="utf-8"?>
<!--<![CDATA[这里可以把你输入的字符原样显示,不会解析 xml]]>
-->
<students><stduent id="01"><name>tom</name><gender>男</gender><age>18</age><!--举例说明:下面是一段js的代码片段. 直接放在<code></code>标签间,语法错误使用CDATA节来处理即可.<script data-compress=strip>function h(obj){obj.style.behavior='url(#default#homepage)';var a = obj.setHomePage('//www.baidu.com/');}</script>--></stduent><stduent id="02"><name>scott</name><gender>女</gender><age>17</age><code><!--如果希望把某些字符串,当做普通文本,使用CDATA包括 --><![CDATA[<script data-compress=strip>function h(obj){obj.style.behavior='url(#default#homepage)';var a = obj.setHomePage('//www.baidu.com/');}</script>]]><![CDATA[ 这里输入 ]]></code></stduent>
</students>

三、XML转义字符

1.对于一-些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理

<?xml version="1.0" encoding="utf-8" ?>
<!--对于一些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理比如 > < & ' ""
-->
<students><stduent id="01"><name>tom</name><gender>男</gender><age>28</age><!--使用转义字符表示一些特殊字符<resume>年龄<100 &版权</resume>--><resume>年龄&lt;10 &gt; &amp;</resume></stduent><stduent id="02"><name>scott</name><gender>女</gender><age>17</age></stduent>
</students>

小结

遵循如下规则的XML文档称为格式正规的XML文档

1、XML声明语句<?xml version= "1.0" encoding= "utf-8"?>

2、必须有且仅有一一个根元素

3、标记大小,区分大小写的。

4、属性值用引号

5、标记成对

6、空标记关闭

7、元素正确嵌套

四、DOM4J

dom4j 1.6.1 API API文档

1.XML解析技术的原理

1.不管是html文件还是xmI文件它们都是标记型文档,都可以使用w3c组织制定的dom技术来解析

2. document对象表示的是整个文档( 可以是html文档,也可以是xmI文档)

3.早期JDK为我们提供了两种xml解析技术DOM和Sax简介

1.dom解析技术是W3C组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。Java对dom技术解析也做了实现

2. sun公司在JDK5版本对dom解析技术进行升级: SAX ( Simple API for XML ) SAX 解析,它是以类似事件机制通过回调告诉用户当前正在解析的内容。是一行一-行的读取xml文件进行解析的。不会创建大量的dom对象。所以它在解析xmI的时候,在性能上优于Dom解析

3.这两种技术已经过时,知道有这两种技术即可

4.第三方的XML解析技术

1. jdom在dom基础上进行了封装

2. dom4j又对jdom进行了封装。

3. pull主要用在Android手机开发,是在跟sax非常类似都是事件机制解析xmIl文件

2.DOM4J介绍

1. Dom4j是一个简单、灵活的开放源代码的库(用于解析/处理XNL文件)。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。

2.与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些, 但它提供了比JDOM更好的灵活性。

3. Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j。

4.使用Dom4j开发,需下载dom4j相应的jar文件

3.获得Document对象的三种方式

开发dom4j要导入dom4j的包

1、读取XML文件,获得document对象

        SAXReader reader = new SAXReader( );//创建一个解析器

        Document document = reader.read(new File("src/ input.xml"));/ /XML Document

2、解析XML形式的文本,得到document对象。

        String, text = "<members> </ members> ";

        Document document = DocumentHelper.parseText(text);

3、主动创建document对象。

        Document document = DocumentHelper.createDocument( );//创建根节点.

        Element root = document.addElement("members");

4.应用实例 - 增删改查(主要是查)

DEBUG底层

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.jupiter.api.Test;import java.io.File;
import java.io.FileOutputStream;
import java.util.List;/*** @author 韩顺平* @version 1.0*/
public class Dom4j_ {/*** 演示如何加载xml文件*/@Testpublic void loadXML() throws DocumentException {//得到一个解析器SAXReader reader = new SAXReader();//老师的代码技巧->debug 看看document对象的属性//分析了document对象的底层结构Document document = reader.read(new File("src/students.xml"));System.out.println(document);}/*** 遍历所有的student信息*/@Testpublic void listStus() throws DocumentException {//得到一个解析器SAXReader reader = new SAXReader();//老师的代码技巧->debug 看看document对象的属性//分析了document对象的底层结构Document document = reader.read(new File("src/students.xml"));//1. 得到rootElement, 你是OOPElement rootElement = document.getRootElement();//2. 得到rootElement的student ElementsList<Element> students = rootElement.elements("student");//System.out.println(student.size());//2for (Element student : students) {//element就是Student元素/节点//获取Student元素 的name ElementElement name = student.element("name");Element age = student.element("age");Element resume = student.element("resume");Element gender = student.element("gender");System.out.println("学生信息= " + name.getText() + " " + age.getText() +" " + resume.getText() + " " + gender.getText());}}/*** 指定读取第一个学生的信息 更好的方式就是 dom4j+xpath*/@Testpublic void readOne() throws DocumentException {//得到一个解析器SAXReader reader = new SAXReader();//老师的代码技巧->debug 看看document对象的属性//分析了document对象的底层结构Document document = reader.read(new File("src/students.xml"));//1. 得到rootElementElement rootElement = document.getRootElement();//2. 获取第一个学生Element student = (Element) rootElement.elements("student").get(1);//3. 输出该信息System.out.println("该学生的信息= " + student.element("name").getText() + " " +student.element("age").getText() + " " + student.element("resume").getText() +student.element("gender").getText());//4. 获取student元素的属性System.out.println("id= " + student.attributeValue("id"));}/*** 加元素(要求: 添加一个学生到xml中) [不要求,使用少,了解]* @throws Exception*/@Testpublic void add() throws Exception {//1.得到解析器SAXReader saxReader = new SAXReader();//2.指定解析哪个xml文件Document document = saxReader.read(new File("src/students.xml"));//首先我们来创建一个学生节点对象Element newStu = DocumentHelper.createElement("student");Element newStu_name = DocumentHelper.createElement("name");//如何给元素添加属性newStu.addAttribute("id", "04");newStu_name.setText("宋江");//创建age元素Element newStu_age = DocumentHelper.createElement("age");newStu_age.setText("23");//创建resume元素Element newStu_intro = DocumentHelper.createElement("resume");newStu_intro.setText("梁山老大");//把三个子元素(节点)加到 newStu下newStu.add(newStu_name);newStu.add(newStu_age);newStu.add(newStu_intro);//再把newStu节点加到根元素document.getRootElement().add(newStu);//直接输出会出现中文乱码:OutputFormat output = OutputFormat.createPrettyPrint();output.setEncoding("utf-8");//输出的编码utf-8//把我们的xml文件更新// lets write to a file//new FileOutputStream(new File("src/myClass.xml"))//使用到io编程 FileOutputStream 就是文件字节输出流XMLWriter writer = new XMLWriter(new FileOutputStream(new File("src/students.xml")), output);writer.write(document);writer.close();}/*** //删除元素(要求:删除第一个学生) 使用少,了解* @throws Exception*/@Testpublic void del() throws Exception {//1.得到解析器SAXReader saxReader = new SAXReader();//2.指定解析哪个xml文件Document document = saxReader.read(new File("src/students.xml"));//找到该元素第一个学生Element stu = (Element) document.getRootElement().elements("student").get(2);//删除元素stu.getParent().remove(stu);
//        //删除元素的某个属性
//        stu.remove(stu.attribute("id"));//更新xml//直接输出会出现中文乱码:OutputFormat output = OutputFormat.createPrettyPrint();output.setEncoding("utf-8");//输出的编码utf-8//把我们的xml文件更新XMLWriter writer = new XMLWriter(new FileOutputStream(new File("src/students.xml")), output);writer.write(document);writer.close();System.out.println("删除成功~");}/*** //更新元素(要求把所有学生的年龄+3) 使用少,了解* @throws Exception*/@Testpublic void update() throws Exception {//1.得到解析器SAXReader saxReader = new SAXReader();//2.指定解析哪个xml文件Document document = saxReader.read(new File("src/students.xml"));//得到所有学生的年龄List<Element> students = document.getRootElement().elements("student");//遍历, 所有的学生元素的age+3for (Element student : students) {//取出年龄Element age = student.element("age");age.setText((Integer.parseInt(age.getText()) + 3) + "");}//更新//直接输出会出现中文乱码:OutputFormat output = OutputFormat.createPrettyPrint();output.setEncoding("utf-8");//输出的编码utf-8//把我们的xml文件更新XMLWriter writer = new XMLWriter(new FileOutputStream(new File("src/students.xml")), output);writer.write(document);writer.close();System.out.println("更新成功~");}
}

对应的XML文件

<?xml version="1.0" encoding="utf-8"?><students> <student id="01"> <name>小龙女</name>  <gender>女</gender>  <age>19</age>  <resume>古墓派掌门人</resume> </student>  <student id="02"> <name>欧阳锋</name>  <gender>男</gender>  <age>21</age>  <resume>白驼山,蛤蟆神功</resume> </student> 
</students>

5.课后作业

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.io.File;
import java.util.List;/*** @author 韩顺平* @version 1.0*/
public class Homework {public static void main(String[] args) throws DocumentException {//1.得到解析器SAXReader saxReader = new SAXReader();//2.指定解析哪个xml文件Document document = saxReader.read(new File("src/books.xml"));//3.遍历所有的book元素List<Element> books = document.getRootElement().elements("book");for (Element book : books) {//取出book元素的所有信息Element name = book.element("name");Element author = book.element("author");Element price = book.element("price");String id = book.attributeValue("id");//创建成Book对象Book book1 = new Book();book1.setId(Integer.parseInt(id));book1.setName(name.getText());book1.setPrice(Double.parseDouble(price.getText()));book1.setAuthor(author.getText());System.out.println("book1对象信息= " + book1);}}
}

相关文章:

【Java Web学习笔记】5 - XML

项目代码 https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/xml 零、在线文档 XML系列教程 一、XML引出 1.为什么需要XML 1.需求1 :两个程序间进行数据通信? 2.需求2:给一台服务器&#xff0c;做一个配置文件&#xff0c;当服务器程序启动时&#xff0c;去…...

在jupyter notebook中修改其他文件的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

如何在Android中旋转屏幕时避免重新绘制Activity

如何在Android中旋转屏幕时避免重新绘制Activity 在Android开发中&#xff0c;设备旋转通常导致当前活动&#xff08;Activity&#xff09;被销毁并重新创建&#xff0c;这可能导致用户界面重置和不必要的资源重新加载。然而&#xff0c;有时我们希望避免这种行为&#xff0c;…...

离线环境下安装python库(推荐pip download)

离线环境下安装python库&#xff08;推荐pip download&#xff09; 目录 1.需求 2.失败操作&#xff08;注意&#xff09; 3.成功操作 4.其它参考 1.需求 机器部署web系统环境后&#xff0c;就不可再次联网&#xff0c;所以升级python web后端&#xff0c;需要离线安装pyt…...

ubuntu16.04安装ROS+Gazebo

ubuntu16.04安装ROS参考文章 ros安装&#xff08;一键最简安装&#xff0c;吹爆鱼香ROS&#xff0c;请叫我鱼吹&#xff09; ROS篇——Ubuntu快速一键安装ROS或ROS2&#xff08;通用&#xff09; ubuntu安装ROS melodic(最新、超详细图文教程) 配置ubuntu以及安装ros2必要环…...

手动搭建koa+ts项目框架(路由篇)

文章目录 前言一、安装koa-router二、引入koa-router并使用三、优化路由配置总结如有启发&#xff0c;可点赞收藏哟~ 前言 本文基于手动搭建koats项目框架&#xff08;基础篇&#xff09;配置接口路由 一、安装koa-router npm i -S koa-router二、引入koa-router并使用 ./sr…...

c语言:文件操作(1)

前言&#xff1a;为什么要使用文件 使用文件可以让程序在不同运行之间保存和读取数据。这样可以实现持久化存储&#xff0c;即使程序关闭后数据也不会丢失。文件也可以用于数据交换&#xff0c;允许不同程序之间共享信息。在 C 语言中&#xff0c;文件还可以用于读取配置信息&…...

运筹学经典问题(三):最大流问题

问题描述 给定一个图网络 G ( V , E ) G(V, E) G(V,E)&#xff0c;网络中连边的权重代表最大容量&#xff0c;在这个图中找出从起点到终点流量最大的路径。 数学建模 集合&#xff1a; I I I&#xff1a;点的集合&#xff1b; E E E&#xff1a;边的集合。 常量&#x…...

裸机开发与Linux驱动开发的区别

一. 简介 裸机开发&#xff0c;即我们常说的不带系统的单片机开发。 Linux驱动开发&#xff0c;即带文件系统的Linux驱动的开发。 二. 裸机开发与Linux驱动开发的区别 1. 裸机开发 比较底层&#xff0c;跟寄存器打交道&#xff0c;有些 MCU提供了库。 2. Linux驱动开发…...

【蓝桥杯选拔赛真题75】Scratch行走的螃蟹 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析

目录 scratch行走的螃蟹 一、题目要求 编程实现 二、案例分析 1、角色分析...

小型洗衣机哪个牌子质量好?迷你洗衣机排名前十名

随着内衣洗衣机的流行&#xff0c;很多小伙伴在纠结该不该入手一款内衣洗衣机&#xff0c;专门来洗一些贴身衣物&#xff0c;答案是非常有必要的&#xff0c;因为我们现在市面上的大型洗衣机只能做清洁&#xff0c;无法对我们的贴身衣物进行一个高强度的清洁&#xff0c;而小小…...

MySQL_9.B-数索引

1.定义&#xff1a;B-树是一类树,包括B-树、B树、B*树等,是一棵自平衡的搜索树,它类似普通的平衡二叉树,不同的一点是B-树允许每个节点有更多的子节点. 2.B-数产生的原因 当数据量非常大时&#xff0c;内存不够用&#xff0c;大部分数据只能存放在磁盘上&#xff0c;只有需要的…...

ubuntu-更改镜像源-系统初始化-安装Clion-C++编译环境-Java安装

文章目录 1.镜像配置文件及更新2.安装java sdk并配置环境变量3.安装Clion4.总结 1.镜像配置文件及更新 将sources.list备份保存为sources.list.backup,以防止有需要的时候更换回来。 sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup sudo gedit /etc/apt/source…...

c语言-动态内存管理

文章目录 一、为什么会有动态内存管理二、申请内存函数1、malloc2、free3、calloc4、realloc 三、常见的动态内存的错误四、练习 一、为什么会有动态内存管理 1.我们一般的开辟空间方式&#xff1a; int a 0;//申请4个字节空间 int arr[10] { 0 };//申请40个字节空间2.这样…...

【JAVA杂货铺】一文带你走进面向对象编程的构造方法 | Java| 面向对象编程 | (中)

&#x1f308;个人主页: Aileen_0v0&#x1f525;系列专栏:Java学习系列专栏&#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 回顾 构造方法 this关键字 面试题 构造方法的类型 下节预告 代码块 &#x1f352;回顾 之前我们学习了什么是类 什么是…...

动态规划学习——通符串匹配,正则表达式

目录 ​编辑 一&#xff0c;通符串匹配 1.题目 2.题目接口 3&#xff0c;解题思路及其代码 二&#xff0c;正则表达 1.题目 2.题目接口 3.解题思路及其代码 三&#xff0c;交错字符串 1.题目 2&#xff0c;题目接口 3.解题思路及其代码 一&#xff0c;通符串匹配 1…...

【数据开发】Hive 多表join中的条件过滤与指定分区

1、条件过滤 left join 中 on 后面加条件 where 和 and 的区别 1、 on条件是在生成临时表时使用的条件&#xff0c;它不管and中的条件是否为真&#xff0c;都会保留左边表中的全部记录。2、where条件是在临时表生成好后&#xff0c;再对临时表进行过滤的条件。这时已经没有le…...

基于Java SSM框架实现高校人事管理系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现高校人事管理系统演示 JSP技术介绍 JSP技术本身是一种脚本语言&#xff0c;但它的功能是十分强大的&#xff0c;因为它可以使用所有的JAVA类。当它与JavaBeans 类进行结合时&#xff0c;它可以使显示逻辑和内容分开&#xff0c;这就极大的方便了用户的需…...

[C++] 模板进阶(非类型模板参数,特化,分离编译)

文章目录 1、非类型模板参数2、模板的特化2.1 什么是模板特化2.2 函数模板特化2.3 类模板的实例化2.3.1 全特化2.3.2 偏特化 3、模板分离编译3.1 什么是分离编译3.2 模板的分离编译3.3 解决方法 4、模板总结 1、非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即…...

C++ this指针

通常情况下&#xff0c;类的成员函数都只涉及一个对象&#xff0c;即调用它的对象。但有时候方法可能涉及到两个对象&#xff0c;在这种情况就需要使用到C的this指针。 class Stock { private: ... double total_val; ... public: double total() const {return total_val;} }…...

解决Sortable拖动el-table表头时,由于选择列造成的拖拽顺序错乱的bug

原因 由于我的表头是由数组循环遍历生成的&#xff0c;而选择列不在数组内&#xff0c;只能在循环外定义el-table-column&#xff0c;造成拖动时索引错乱错误代码 <el-tableheader-dragend"headerDragend"id"out-table":data"state.sliceTable&quo…...

Plantuml之类图语法介绍(十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…...

深入Docker命令行:探索常用命令和实用技巧

Docker命令行界面是每个容器开发者的得力工具。在这篇文章中&#xff0c;将深入探讨一系列常用的Docker命令&#xff0c;以及一些实用技巧&#xff0c;通过更丰富的示例代码&#xff0c;帮助大家更全面地理解和运用Docker命令行工具。 1. Docker基本命令 1.1 镜像操作 深入了…...

qt 容器QVector,QMap,QHash的常见使用与该迭代器的简单介绍

一. QVector容器是一个动态数组&#xff0c;可以容纳任意数量的元素,在相邻的内存中存储给定的数据类型作为一组数据,在QVector前部或中间位置插入元素都会导致内存中大量的数据元素移动,这使得操作速度会减慢.可使用迭代器对这组数据进行访问. 和其他的容器类型类似,QVector…...

两线制无源 4-20mA 回路供电隔离变送器

两线制无源 4-20mA 回路供电隔离变送器 一入一出两线制无源 4-20mA 回路供电隔离变送器 概述&#xff1a;JSD TAW-1001D-100L-F 系列隔离变送器是 4-20mA 两线制回路供电的电流隔离变送配电器,该隔离变送器采用电磁隔离技术,并通过输入端馈电方式,给输入端两线制仪器仪表设备供…...

强化学习优质博客记录(随缘更新)

杂记 速成深度强化学习的人可能陷入的几个误区(2023-03更新) DQN DQN表现稳定提升和收敛的技巧集锦 TRPO 如何看懂TRPO里所有的数学推导细节? PPO The 37 Implementation Details of Proximal Policy Optimization强化学习算法中&#xff0c;PPO算法是不是就是加了重要…...

RabbitMQ-hello

0. pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0…...

案例044:基于微信小程序的消防隐患在线举报系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…...

MES系统需要具备哪些性能方面的需求?

MES系统需要具备哪些“性能需求”&#xff1f;关于这个问题&#xff0c;我觉得有必要先和大家解释一下&#xff0c;到底什么是性能需求&#xff1f;性能需求在MES系统的作用是什么&#xff1f;讲明白了这2点&#xff0c;问题自然而然就解决了。 什么是性能需求&#xff1f; 通…...

数据在内存中的存储(整型篇)

1.辨析原码反码补码&#xff1a; 1.原码&#xff1a;有32位&#xff08;int类四个字节&#xff0c;一个字节八个比特位&#xff09;&#xff0c;第一位是符号位&#xff0c;0正1负&#xff0c;其余为二进制位。 2.计算一般是对原码进行计算&#xff0c;但在负数计算使用原码会导…...