【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 :表示该文件的类型 xml
    2 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

https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/xml 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文件
     */
    @Test
    public 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信息
     */
    @Test
    public void listStus() throws DocumentException {
        //得到一个解析器
        SAXReader reader = new SAXReader();
        //老师的代码技巧->debug 看看document对象的属性
        //分析了document对象的底层结构
        Document document = reader.read(new File("src/students.xml"));

        //1. 得到rootElement, 你是OOP
        Element rootElement = document.getRootElement();
        //2. 得到rootElement的student Elements
        List<Element> students = rootElement.elements("student");
        //System.out.println(student.size());//2
        for (Element student : students) {//element就是Student元素/节点
            //获取Student元素 的name Element
            Element 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
     */
    @Test
    public void readOne() throws DocumentException {

        //得到一个解析器
        SAXReader reader = new SAXReader();
        //老师的代码技巧->debug 看看document对象的属性
        //分析了document对象的底层结构
        Document document = reader.read(new File("src/students.xml"));

        //1. 得到rootElement
        Element 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
     */
    @Test
    public 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
     */
    @Test
    public 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
     */
    @Test
    public 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+3
        for (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);
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/220682.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【AntDB 数据库】国产数据库发展之信创政策的加持

由于我国在信息技术领域起步较晚&#xff0c;国内大量的市场份额被国际IT巨头占据&#xff0c;甚至长期处于被垄断的地位&#xff0c;这也给了某些国家妄图通过挑起科技、贸易摩擦制衡我国发展的机会。为了解决可能存在的安全风险&#xff0c;在重要信息系统、关键基础设施中使…

linux-进程退出

进程终止 进程终止进程终止原因 进程返回值echo $?exit()和_exit() 父进程获取进程退出码wait()方法waitpid()方法获取子进程的退出码&#xff08;status&#xff09; 进程的非阻塞等待(WNOHANG)问题 进程终止 进程终止原因 进程终止原因有三种情况。 代码运行完毕&#xf…

【多线程】-- 12 线程协作之生产者消费者问题及解决办法

多线程 9 线程协作 “生产者消费者问题” ——并非二十三种设计模式之一 9.1 生产者消费者问题 “线程通信” 应用场景&#xff1a;生产者和消费者问题 假设仓库中只能存放一件产品&#xff0c;生产者将生产出来的产品放入仓库&#xff0c;消费者将仓库中产品取走消费如果…

linux 服务的JDK安装

1.jdk安装 1.1 jdk下载 官网下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/ 这里我使用的是rpm的方式&#xff0c;所以下载rpm的包。如下图&#xff1a;1.2 jdk的安装 下载完成后&#xff0c;会有一个以rpm结尾的包&#xff0c;例如&#xff1a;jd…

【恋上数据结构】哈夫曼树学习笔记

哈夫曼树 哈夫曼编码&#xff08;Huffman Coding&#xff09; 哈夫曼编码&#xff0c;又称为霍夫曼编码&#xff0c;它是现代压缩算法的基础 假设要把字符串 [ABBBCCCCCCCCDDDDDDEE] 转成二进制编码进行传输。 可以转成 ASCII 编码 (6569&#xff0c;10000011000101) &…

牛客算法题【HJ96 表示数字】golang实现

题目 HJ96 表示数字 golang实现 package mainimport ("fmt""unicode" )func main() {s : ""var s_o stringvar char_pre, r runefor {n, _ : fmt.Scan(&s)if n 0 {break} else {for _, r range s {if unicode.IsDigit(r) {if !unicode.…

前端模拟新闻列表ajax请求 mocky

效果图&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title> </head><style>ul {display: flex;flex-wrap: wrap;justify-content: space-between;}ul::after{content: ;width: 30%;}a…

L1-004:计算摄氏温度

题目描述 给定一个华氏温度F&#xff0c;本题要求编写程序&#xff0c;计算对应的摄氏温度C。计算公式&#xff1a;C5(F−32)/9。题目保证输入与输出均在整型范围内。 输入格式&#xff1a;输入在一行中给出一个华氏温度。 输出格式&#xff1a;在一行中按照格式“Celsius C”…

创建vue3数学符号选择器(vue3+elementPlus+ts)

本文包含两种效果&#xff1a; 效果一&#xff1a;数学符号只能选择一次&#xff0c;选中的数学符号高亮 效果二&#xff1a;相同的数学符号可以选择多次&#xff0c;当前选中的数学符号高亮 首先创建math.ts定义常见数学符号数组 : export const symbols [{ id: 1, value: …

数据结构与算法-D2D3线性表之顺序表

线性表&#xff1a;包含若干数据元素的一个线性序列&#xff0c;特征如下&#xff1a; 1&#xff09;对非空表&#xff0c;a0是表头&#xff0c;无前驱&#xff1b; 2&#xff09;an-1是表尾&#xff0c;无后继&#xff1b; 3&#xff09;其他元素仅且仅有一个前驱&#xff0c;…

CSS面经(未完待续)

1. CSS选择器及其优先级 !important > 行内样式 > id选择器 > 类/伪类/属性选择器 > 标签/伪元素选择器 > 子/后台选择器 > *通配符 2. 重排和重绘是什么&#xff1f;浏览器的渲染机制是什么&#xff1f; 重排(回流)&#xff1a;当增加或删除dom节点&…

Centos7上安装Redis

第一步&#xff1a;安装Redis依赖 yum install -y gcc tcl //需要使用管理员权限第二步&#xff1a;下载上传安装包并解压 下载地址redis中文官网 上传成功后解压 输入tar -zxvf &#xff08;redis版本&#xff09;,即可解压成功 进入redis目录&#xff0c;运行编译命令&am…

人工智能学习3(特征变换:特征数值化)

编译工具&#xff1a;PyCharm 有些编译工具不用写print可以直接将数据打印出来&#xff0c;pycharm需要写print才会打印出来。 文章目录 编译工具&#xff1a;PyCharm 概念1.特征类型分类型二值型顺序型数值型 2.特征数值化练习13.特征数值化练习24.特征二值化使用sklearn库自…

信号是怎么搞到电磁波上面去的呢?

在之前的文章中&#xff0c;我们曾多次讲到电磁波的美妙&#xff0c;但是有了电磁波就可以通信了吗&#xff1f; No&#xff0c;我们要把信息加载到电磁波上&#xff0c;这个电磁波就可以作为信息的载体来工作了。可是信号是怎么加载到电磁波上的呢&#xff1f; 今天我们一起…

Javafx实现浏览器

浏览器是一种计算机程序&#xff0c;主要用于显示互联网上的网页。通过浏览器&#xff0c;用户可以访问各种网站、搜索引擎、在线应用程序、社交媒体等。常见的浏览器包括Google Chrome、Mozilla Firefox、Safari、Microsoft Edge、Opera等。浏览器的功能不仅限于浏览网页&…

无线网卡填坑记

没想到我安装无线网卡这么波澜起伏~ 起因 近来刚在电脑上玩完了 Dishonored 2&#xff0c;紧接着继续着我的刺客信条之旅。总是觉得键盘鼠标玩起来不爽&#xff0c;还是手柄玩这种游戏才舒服。突然&#xff0c;灵光一现&#xff0c;我想到正好有闲置的 Switch 掌机没怎么玩&am…

【代码随想录】算法训练计划39

dp 1、62. 不同路径 题目&#xff1a; 求路径方案多少个 思路&#xff1a; 这道题就有点dp了哈 func uniquePaths(m int, n int) int {//dp&#xff0c;写过,代表的是多少种// 初始化dp : make([][]int, m)for i : range dp {dp[i] make([]int, n)dp[i][0] 1 // 代表到…

【数据结构】图<简单认识图>

对于下面的内容&#xff0c;大家着重观察和理解图即可&#xff0c;可以直接绕过一些文字性的概念&#xff0c;对图有一个大概的认识。 图 简单认识图图的定义有向图和无向图完全图无向完全图有向完全图 图的基本存储结构邻接矩阵存储邻接矩阵的优点 网络的邻接矩阵邻接表无向图…

看懂lscpu的输出

文章目录 1. lscpu1.1 Architecture1.2 逻辑核心数1.3 缓存1.4 CPU型号1.5 NUMA架构1.5.1 CPU多核架构1.5.2 多CPU Socket架构 2. cat /proc/cpuinfo2.1 关键字段 1. lscpu 通过lscpu查看当前系统的CPU信息。 [hadoopserver3 ~]$ lscpuArchitecture: x86_64 …

混音编曲软件tudio One 6.5.1 保姆级安装教程

根据软件大数据显示De-Esser驯服人声嘶嘶声和其他高频声音&#xff0c;和其他 Studio One 中新的去实体插件一样高效且直观易用&#xff0c;使用“收听”按钮查找有问题的频率&#xff0c;然后使用相关的旋钮和 S-Mon 功能拨入 S-Reduce 量即可。实际上我们可以这样讲工作流和协…