01-15网络编程-XML

  • 网络编程
  • Web服务器
  • XML

网络编程

  1. 项目架构:

C[Client] /S[Server- Service] -访问这个程序时用客户端

缺点:

1.用户需要单独安装客户端,

2.客户端升级了用于需要重新更新不能跨平台:

3.不同的操作系统都需要相应版本的程序

优点:

1.性能和安全性:客户端与服务器直接交互

B[Browser]/S[Server - Service] - 访问这个项目/程序的时候用浏览器

优点:

1.使用浏览器充当客户端,用户不需要单独安装,浏览器一般不用更新

2.都用的是浏览器

缺点:

1.客户端与服务器不直接交互,而是通过http协议网络交互,性能较差

  1. 网络编程

概念:网络编程,也被称为套接字编程,客户端和服务端必须要进行交互才能完成整个项目,前端后端需要进行交互(前端传输数据到后端,后端响应数据给前端),这个操作叫做网络编程

  1. 网络通信

ip地址:为实现网络中不同计算机之间的通信,每台计算器都必须有一个唯一的标识,那就是IP地址(公网IP)

port端口号:IP地址用于找到某一台计算机,但是计算机里面有很多程序,所以端口号用来找到这个计算机中的某个程序

//1. 同一台机器上不能有两个程序使用同一个端口,会冲突。例如Java中报错端口号冲突:Address already in use//2. 以后开发中最好记住我们用到过的常用软件的端口,避免我们知己设定端口的时候和他们冲突。例如tomcat-8080、mysql-3306、http协议-80(不用写出来)、https-443

网络协议:国际组织统一规定好的一套建立连接、数据传输的规则被称为网络通信协议,现目前所有的设备、程序之间通信都遵守此规则

// 设备之间进行网络通信,需要进行连接以及传输数据,那么就需要事先规定好通信规则,大家都遵守同一套规则才能建立连接// 广泛使用的是基于OSI网络参考模型进行改进的TCP/IP网络模型
应用层 ---> HTTPFTPSMTP等
传输层 ---> UDPTCP等
网络层 ---> IP等
数据链路和物理层 ---> 比特流等
// TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据// UDP(User Datagram Protocol):用户数据包协议特点:无连接、不可靠通信、通信效率高。适用于视频直播、语音通话、游戏等业务
/*
协议说明:1.通信双方之间无需建立连接,发送方并不知道接收方到底接收到没有,也不会管对方到底在不在线,数据发送之后有可能丢失,接收方接收到了也不返回确认,所以是不可靠协议
2.数据按照包的形式发送,一包数据包含:自己的IP、程序端口、目的地IP、程序端口和数据等等,数据一包限制在64KB之内,如果超过64KB那么会进行分包发送
*/// TCP(Transmission Control Protocol):传输控制协议特点:面向连接、可靠通信、通信效率相对UDP不高,适用于文件上传下载等业务
/*
协议说明:1.传输数据之前必须先获取连接,而且还提供数据确认和超时重传机制,确保数据的完整2.TCP主要靠三步实现可靠传输:三次握手建立连接,传输数据进行确认,四次挥手断开连接
*/// Http(Hyper Text Transfer Protocol):超文本传输协议规定了浏览器与服务器之间数据传输的规则(如何将数据进行包装)
/*
Http协议特点1. 基于TCP协议:面向连接,安全可靠
2. 基于请求、响应模型:一次请求对应一次响应
3. Http协议是无状态协议:无法在多次请求之间共享数据,每次请求、响应都是独立的。现在已经通过会话技术解决了Http无状态问题了请求数据包:请求行(请求方式,请求地址,协议)、请求头、请求体(post请求的参数就放在这里)请求行:请求方式GET + 请求资源路径/hello + 协议/版本HTTP/1.1。请求方式:常用GET、POST例如: GET /hello HTTP/1.1
请求头:格式为key:value形式,设置浏览器的一些自身信息和想要响应的形式响应数据包:响应行(协议、响应码200)、响应头、响应体(服务器响应给你的数据,html,图片,json...)
响应行:协议/版本-HTTP/1.1、响应状态码-200、状态码描述:OK例:HTTP/1.1 200
响应体:存储响应的数据,谷歌浏览器响应体在Preview/Response中:响应状态码:我们先主要认识四个状态码,其余的等后期用到了再去掌握- 200 ok 客户端请求成功
- 404 Not Found 请求资源不存在
- 400 Bad Request 请求语法错误,通常是参数类型错误
- 500 Internal Server Error 服务端发生不可预期的错误get请求与post请求的区别:get:1.get请求把请求参数放在地址栏2.get请求不安全3.数据大小有显示,大约4kb左右4.get请求只能进行url编码5.get请求可以被浏览器缓存post:1.post请求的参数被放在请求体中2.get请求较安全3.数据大小长度没有限制。4.post请求支持多种编码方式。5.post请求不能被浏览器缓存
*/

注意:IP地址用来区分计算机,端口号区分某个程序

3.1 DNS

概念:DNS服务器(Domain Name System Server)是互联网中的一种计算机服务器,用于解析域名并将其转换为相应的IP地址

当在浏览器输入一个域名时,其实计算器会先从本地host文件中去解析域名(本地文件中存储了一些常用的域名),如果没有就会去请求DNS服务器解析域名。而DNS服务器的作用就是帮助计算机和互联网用户将域名转换为对应的IP地址

Tomcat

概念:Tomcat是一个开源免费的web服务器,同时也是一个Servlet容器

1.安装 - 解压安装
2.目录结构
bin - 命令【启动,停止的命令】
conf - 配置信息
lib - jar包
logs - 日志
webapps - 保存项目的地方
3.开启tomcat
4.访问:http://可以省略掉 - 因为浏览器地址栏默认是是http://

完整的地址:
http://ip:port/项目名/资源名 - http://可以省略,如果port是80可以省略掉,如果项目名ROOT也可以省略掉,资源名是index也可以省略掉

默认端口号可以在conf里的server里面修改

XML(Extensible Markup Language)可扩展标记语言

  1. XML概述

1.1概念:通过标签为数据赋予意义的行为称为标记,为标记定义规则的语言叫做标记语言

1.2. XML与HTML区别

XML

  • 被设计用来传输和存储数据的
  • 旨在传输数据,现在更多被用于框架的配置文件格式,焦点是数据

HTML

HTML

  • 被设计用来显示数据的
  • 旨在显示信息,焦点是数据的外观
  1. XML作用

2.1. 传输数据

通过XML,可以在不兼容的系统之间交换数据,也可以在前后端之间交换数据,因为xml和json都是一种通用(很多语言都能解析xml拿到里面的数据)数据交换格式

注意:目前都是使用JSON格式进行数据交换

2.2. 持久化数据

程序中通过IO流将数据以XML格式存储到磁盘中进行持久化,不过现在更多的是将数据存储到数据库中

2.3. 框架配置文件

现在XML更多的是作为各大框架的配置文件,比如MyBatis、Spring框架,下图是MyBatis官网的配置文件示例

优点:

  1. 结构化数据:XML 允许定义具有层次结构的元素和属性,这使得数据更加清晰和易于理解。
  2. 易于阅读和编辑:XML 文档以纯文本格式存储,因此可以使用任何文本编辑器进行查看和编辑。
  3. 跨平台和语言独立:XML 是一种国际标准,可以在不同的操作系统、编程语言和应用程序之间进行交换和使用。
  4. 可扩展性:XML 支持自定义标签和属性,可以根据特定需求扩展配置文件的功能。
  5. 易于解析和解析库:许多编程语言提供了用于解析 XML 的库和工具,使得读取和写入 XML 配置文件变得相对容易。
  1. XML语法

3.1. XML声明

XML声明或文档声明并非是一种标签,其用于指明是什么文档、版本号和编码(除了XML还有HTML)

  • version:指定XML编码,XML从创建之初到目前都是1.0版本

  • encoding:避免中文乱码,所以指定编码为UTF-8

    注意:文档声明必须在XML文件的第一行,且每个XML文件必须有文档声明,XML文件必须以xml结尾

    <?xml version="1.0" encoding="UTF-8" ?>
    

3.2. 标签命名规则

  • 标签名称只能以字母或下划线开头
  • 标签名称中间不能有空格
  • 标签名称之间不能使用特殊字符

3.3. XML语法规则

  • XML中有且仅有一个根标签/元素:XML中的标签是以层级关系进行嵌套,内层如何嵌套都可以,但是外层必须有一个根标签

  • 必须有闭标签:

    • 第一种闭标签:此种标签无法编写文本以及其他标签,也被称为单标签 - xml基本没有,很少
    • 第二种闭标签:此种标签可以编写文本以及其他标签,也被称为双标签 - 开始标签与结束标签
  • 严格区分大小写:在XML中,标签的名称必须一致

  • 嵌套需要正确标签:在XML中可以进行标签嵌套,也就是双标签中定义标签

  • 文本内容和属性:在XML中,所有的标签也被称为元素。双标签中的内容称为文本。标签中可以进行属性定义,属性值必须加引号,多个属性以空格隔开

3.4. 转义字符

文本中使用特殊字符会报错,所以我们需要使用转义字符进行代替,也可以使用转义标签进行代替

< < 小于
> > 大于
& & 和号
’ ’ 单引号
" " 引号

转义标签,特殊符号会进行原样展示:<![CDATA[ 这是转义标签,特殊字符会进行原样展示 < > & '' "" ]]>

  1. XML约束

4.1. 概念:限制一个XML文件中标签、属性值、以及顺序等的使用,只能按照某种指定的规则书写

  • 在编写XML时有提示
  • 写错会报错

4.2.常见的约束有两种:

DTD约束(Document Type Definition) - 文档类型定义

优点:

1.可读性高

2.容易理解

创建方式一:内部引入

概念:在xml文件中编写DTD约束,只能当前xml文件有效,使用较少

<?xml version="1.0" encoding="UTF-8" ?>
<!--内部DTD约束1.!DOCTYPE:固定语法,表明文档类型,也就是声明DTD约束的标签2.students:自定义,表明根标签名称是什么,此处写什么XML标签的根标签就必须是什么3.[]:自定义子标签的地方1.!ELEMENT:指定标签或元素,在标签名称后面可以跟 ()去指定规则2.students (student+):意思是在students根标签中只能定义student标签1.(student):在students中必须有且仅有一个student标签2.(student?):在students中可以有0~1个student标签3.(student+):在students中至少有一个student标签4.(student*):在students中可以有0~*个student标签3.student (name+, age+, sex+):表示在student中有哪些标签,顺序就是子标签的编写顺序1.子标签也可以使用空?+*等规则,同样适用2.name (#PCDATA):指定标签不能再有子标签4.!ATTLIST:自定义,表名标签的属性是什么student id:指定student标签的属性名称为 idCDATA:指定属性的规则1.#REQUIRED:此属性必须写2.#FIXED "值":指定此属性的固定值,也可以不写,如果写就必须是固定值3.#IMPLIED:指定此属性的值可写可不写
-->
<!DOCTYPE students[<!ELEMENT students (student+)><!ELEMENT student (age+, sex+,name+)><!ELEMENT name (#PCDATA)><!ELEMENT age (#PCDATA)><!ELEMENT sex (#PCDATA)><!ATTLIST student id CDATA #REQUIRED><!ATTLIST name test1 CDATA #FIXED "100"><!ATTLIST sex test2 CDATA #IMPLIED>]>
<students><student id="1"><age>8</age><sex test2="99"></sex><name test1="100">张三</name></student>
</students>

创建方式二:外部引入

概念:外部引入就是将DTD约束定义在.DTD文件中,在xml文件中引入DTD文件

<?xml version="1.0" encoding="UTF-8" ?><!-- 外部引入SYSTEM:表示引入本地的dtd文件 -->
<!DOCTYPE students SYSTEM "xml-test-03.dtd">
<students><student id="1"><age>8</age><sex test2="99"></sex><name test1="100">张三</name></student>
</students>

注意:后面的学习的MyBatis框架就使用DTD约束,而且它引入的DTD文件是官方写好的,引入了线上的DTD文件

Schema约束(XML Schema Definition)- XML模型定义

优点:

1.一个XML文件中只能引用一个DTD约束,但是一个XML文件可以引用多个schema约束

缺点:

1.Schema约束比DTD约束功能更加强大,但是编写更加复杂

使用:

<?xml version="1.0" encoding="UTF-8" ?>
<studentsxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.itsource.cn"xsi:schemaLocation="http://www.itsource.cn xml-test-05.xsd"><student id="1"><name>Neuronet</name><age>18</age><sex></sex></student>
</students>

注意:后面的学习的Spring框架就使用Schema约束

  1. DOM模型(Document Object Mode)文档对象模型

5.1概念:当结构化文档XML/HTML加载到内存中会形成一个一个的对象,而且这些对象会根据文档的层级关系虚拟一个树型机构的DOM模型,帮助开发者进行解析(CRUD操作)

DDocument文档(XML文档) : 磁盘上面的xml文件
OObject对象(内存中对象) : 把xml文件封装成对象
MModel模型:xml文件与对象对应关系模型

5.2DOM关键字

Document文档文档对象,代表整个XML文档
Node节点Node节点,也叫做Node对象,一切都是节点:元素,属性,文本
Element元素元素/标签节点
Attribute属性属性节点
Text文本文本节点
  1. XML解析

6.1 概念:XML解析:就是在Java代码中通过一些技术去操作XML,因为通常来说我们都需要对XML的数据进行CRUD

6.2 XML解析四大技术

  • DOM解析:由W3C提供的接口,它将整个XML文档读入内存,构建一个DOM树来对各个节点进行操作。不仅可以对文档进行查询,还可以进行增删改。但对大型XML文件效果可能会不理想
  • SAX解析:SAX不用将整个文档加载到内存,基于事件驱动的API,他按照xml文件的顺序一步一步的来解析,解析速度快,但是无法对文档内容进行增删改
  • JDOM解析:JDOM既有树的遍历,又有SAX的java规则。JDOM是处理XML的纯JAVA-API,API大量使用了Collections类,且JDOM仅使用具体类而不使用接口
  • Dom4J解析:Dom4J是一个简单的开源库,用于处理XML、 XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM、SAX、JAXP。Dom4J是目前在XML解析方面是最优秀的,它合并了许多超出基本 XML 文档表示的功能,包括集成的 XPath 支持(直接通过路径表达式找到想要操作的节点 - 提高开发效率)、XML Schema 支持以及用于大文档或流化文档的基于事件的处理
// Dom4j并不属于Java自身的工具,是第三方的,那么在Java程序中如果要使用第三方的工具就必须引入第三方的依赖包,也就是Jar包
1.解压压缩包
2.找到后缀名是.jar的包
3.idea中新建一个lib文件夹
4.将jar包放入后右键Add as Library... 再ok

案例:需求1:遍历classes.xml获取所有学员的信息

@Test
public void test1() throws Exception{//将classes.xml加载到内存中SAXReader reader = new SAXReader();//相对路径从项目开始写Document document = reader.read("xml/classes.xml");//获取文档的根元素classesElement rootElement = document.getRootElement();//获取跟元素下所有的子元素List<Element> list = rootElement.elements(); //3个student//遍历for (Element student : list) {//获取每一个student的id属性值String id = student.attributeValue("id");System.out.println(id);//获取student的所有子元素List<Element> sons = student.elements();//遍历for (Element son : sons) {//获取子元素的文本String content = son.getTextTrim();System.out.println(content);}System.out.println("===============================");}
}

需求2:向xml中新增一个学员{“id”:4,“name”:“阿狸”,“age”:20,“address”,“动物园”}

@Test
public void test2() throws Exception{//将classes.xml加载到内存中SAXReader reader = new SAXReader();//相对路径从项目开始写Document document = reader.read("xml/classes.xml");//获取根元素Element classes = document.getRootElement();Element student = classes.addElement("student");student.addAttribute("id","4");student.addElement("name").setText("阿狸");student.addElement("age").setText("20");student.addElement("address").setText("动物园");OutputFormat format = OutputFormat.createPrettyPrint();XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("xml/classes.xml"), format);xmlWriter.write(document);xmlWriter.close();
}

需求3:修改xml中阿狸的年龄

@Test
public void test3() throws Exception{//将classes.xml加载到内存中SAXReader reader = new SAXReader();//相对路径从项目开始写Document document = reader.read("xml/classes.xml");//获取根元素Element classes = document.getRootElement();List<Element> elements = classes.elements();Element student = elements.get(3);Element age = student.element("age");age.setText("40");/*for (Element student : elements) {List<Element> sons = student.elements();//name,age,addressfor (Element son : sons) {if(son.getName().equals("name") && son.getText().equals("阿狸")){//获取当前元素的父元素【student】,再获取student里面的ageElement age = son.getParent().element("age");age.setText("30");break;}}}*/OutputFormat format = OutputFormat.createPrettyPrint();XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("xml/classes.xml"), format);xmlWriter.write(document);xmlWriter.close();
}

需求4:删除xml中的阿狸

@Test
public void test4() throws Exception{//将classes.xml加载到内存中SAXReader reader = new SAXReader();//相对路径从项目开始写Document document = reader.read("xml/classes.xml");//获取根元素Element classes = document.getRootElement();//获取根元素下所有的子元素List<Element> students = classes.elements();//遍历for (Element student : students) {//获取student元素下的name元素Element name = student.element("name");//name的内容是否是"阿狸"if(name.getText().equals("阿狸")){//通过根元素删除掉当前student元素classes.remove(student);}}//创建一个输出格式OutputFormat format = OutputFormat.createPrettyPrint();//再使用输出流将文档按照指定的格式输出XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("xml/classes.xml"), format);xmlWriter.write(document);xmlWriter.close();
}

课程总结

  1. C/S架构与B/S架构的区别

    C/S架构的需要安装软件,每次更新都需要重装,但是安全,效率高 B/S架构 不用单独安装,通过http协议交互,效率低

  2. 网络通信需要哪些角色:ip地址,port端口号,通信协议,域名,DNS服务器

  3. TCP与UDP区别

    TCP : 可靠 双向连接 效率低 UDP:不可靠 无连接 效率高

  4. Http协议是什么,有什么用

    基于TCP协议:面向连接,安全可靠

    一次请求,一次响应

    无状态协议:无法在多次请求之间共享数据,每次请求、响应都是独立的

  5. 请求数据包中有哪些内容,响应数据包由哪些内容

    请求数据包中:请求行(请求方式,请求地址,协议),请求头,请求体

    ​ 例: get/hello HTTP/1.1

    响应数据包: 响应行(协议、响应码200),响应头、响应体(服务器响应给你的数据,html,图片,json…)

  6. Get请求与Post请求的区别

    get请求的参数在地址栏会显示,不安全,请求的容量最多4kb,只能够使用url编码且可以被浏览器缓存

    post请求的参数在请求体中,安全,容量没有限制,随意编码,无法被缓存

  7. 常见的响应状态码有哪些,分别表示什么意思

    200 客户端请求成功

    404 指定资源找不到,但是服务器访问是成功了的

    400 请求参数错误

    500 后端数据错误

  8. IP地址与Port有什么用

    ip地址为了找到相对应的计算机 port为了找到启动哪个程序

  9. 域名有什么作用,域名解析流程

    作用:方便,好记

    流程:首先去本机localhost找这个域名,没有就发送到DNS服务器,解析后给你返回一个ip地址

  10. 常见的web服务器有哪些:weblog,websp…

    tomcat jetty

  11. Tomcat是什么

    Tomcat是一个开源免费的web服务器,同时也是一个Servlet容器

  12. Tomcat如何部署项目

    将项目文件拖进webapps

  13. XML解析方式有哪些,分别有什么特点

    DOM 将整个XML文档读入内存构建一个DOM树来对各个节点进行操作 对文档进行查询,还可以进行增删改 对大型XML文件效果可能会不理想

    SAX 不用将整个XML文档读入内存,解析速度快,但是无法对文档内容进行增删改

    JDOM JDOM既有树的遍历,又有SAX的java规则

    Dom4j Dom4J是一个简单的开源库,用于处理XML、 XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM、SAX、JAXP

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AtCoder abc336 A~D题解

A. 题目翻译&#xff1a; 对于正整数 X X X 级别的龙串&#xff0c; X X X 是长度为 ( X 3 ) (X3) (X3) 的字符串&#xff0c;由按此顺序排列的 o、n 和 g 的一次L、 X X X次出现形成。 你得到一个正整数 N N N。打印 N N N 级的龙串。 分析 按题目要求做即可……&am…

Openlayer【四】—— 控件

控件 控件是一个可见的小部件&#xff0c;其 DOM 元素位于 屏幕。它们可以涉及用户输入&#xff08;按钮&#xff09;&#xff0c;也可以仅供参考; 位置是使用 CSS 确定的。默认情况下&#xff0c;它们位于 容器&#xff0c;但可以使用 任何外部 DOM 元素。 其中ol/control是…

GO基础进阶篇 (十二)、反射

什么是反射 Go语言中的反射是指在程序运行时检查程序的结构&#xff0c;比如变量的类型、方法的签名等。Go语言的反射包是reflect。通过反射&#xff0c;你可以动态地检查类型信息、获取字段和方法、调用方法等。 反射可以在运行时动态获取变量的各种信息&#xff0c;比如变量…

linux系统nginx工具的一些应用

nginx高级应用 虚拟目录监控模块配置文件创建用户名密码客户端访问 限制传输速度&#xff08;服务层&#xff09; nginx配置文件中的每个语句要以 ; 结尾 虚拟目录 配置文件中的server块中编辑&#xff1a;location /test {alias /usr/share/nginx/html; //映射的是/usr…

定时器中断控制的独立式键盘扫描实验

#include<reg51.h> //包含51单片机寄存器定义的头文件 sbit S1P1^4; //将S1位定义为P1.4引脚 sbit S2P1^5; //将S2位定义为P1.5引脚 sbit S3P1^6; //将S3位定义为P1.6引脚 sbit S4P1^7; //将S4位定义为P1.7引脚 unsigned char keyval; /…

知识笔记(八十)———链式语句中join用法

join通常有下面几种类型&#xff0c;不同类型的join操作会影响返回的数据结果。 INNER JOIN: 等同于 JOIN&#xff08;默认的JOIN类型&#xff09;,如果表中有至少一个匹配&#xff0c;则返回行LEFT JOIN: 即使右表中没有匹配&#xff0c;也从左表返回所有的行RIGHT JOIN: 即使…

50天精通Golang(第18天)

web开发介绍、iris框架安装、HTTP请求和返回、Iris路由处理 一 Web项目开发介绍及实战项目介绍 1.1 引言 本系列课程我们将学些Golang语言中的Web开发框架Iris的相关知识和用法。通过本系列视频课程&#xff0c;大家能够从零到一经历一个完整项目的开发&#xff0c;并在课程…

[树莓派]给树莓派装pyinstaller环境

安装&#xff1a; sudo pip3 install pyinstaller 但是打包后会发现报错&#xff1a; Fatal error: PyInstaller does not include a pre-compiled bootloader for your platform. For more details and instructions how to build the bootloader see https://pyinstaller.…

Golang语言switch case

Golang语言使用switch语句可方便地对大量的值进行条件判断。 练习&#xff1a;判断文件类型,如果后缀名是.html输入text/html, 如果后缀名.css 输出text/css ,如果后缀名是.js 输出text/javascript Go语言规定每个switch只能有一个default分支。 extname : ".a"swit…

【栈】Leetcode 496 下一个更大元素I

【栈】Leetcode 496 下一个更大元素I 解法1 两个单调栈解法2 ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;------------------- 解法1 两个单调栈 两个栈进行操作&#xff0c;一个栈用来遍历寻找&#xff0c;一个栈用来保留 将nums2中的元素…

NLP论文阅读记录 - 2021 | WOS 利用 ParsBERT 和预训练 mT5 进行波斯语抽象文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.前提三.本文方法A. 序列到序列 ParsBERTB、mT5 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Leveraging ParsBERT and Pretrained …

1.6 面试经典150题 - 买卖股票的最佳时机

买卖股票的最佳时机 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易…

鸿蒙开发之组合手势

当我们需要支持多个手势的时候&#xff0c;可以通过GestureGroup来实现&#xff0c;如下实现了同时支持Tap和Pan手势 import Prompt from system.prompt Entry Component struct OfficialGestureGroupPage {State message: string Hello Worldbuild() {Column() {Column() {T…

STM32WL用户手册学习

介绍 STM32Cube是意法半导体的原创产品&#xff0c;通过减少开发工作量、时间和成本来显著提高开发人员的生产力。STM32Cube涵盖了整个STM32产品组合。 STM32Cube包括&#xff1a; 一套用户友好的软件开发工具&#xff0c;涵盖项目开发从设计到生产&#xff0c;其中&#xf…

算法第十九天-二叉搜索树节点最小距离

二叉搜索树节点最小距离 题目要求 解题思路 今天题目重点&#xff1a; 1.二叉搜索树&#xff08;BST&#xff09; 2.任意两个不同节点 遇到二叉搜索树&#xff0c;立即想到这句话&#xff1a;[二叉搜索树&#xff08;BST&#xff09;的中序遍历是有序的]。这是解决所有二叉搜…

1.1 面试经典 150 题-合并两个有序数组

合并两个有序数组 方法一&#xff1a;先合并再排序 class Solution:def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:"""Do not return anything, modify nums1 in-place instead."""# 先合并for i in range…

全网最细RocketMQ源码四:消息存储

看完上一章之后&#xff0c;有没有很好奇&#xff0c;生产者发送完消息之后&#xff0c;server是如何存储&#xff0c;这一章节就来学习 入口 SendMessageProcessor.processRequest private CompletableFuture<RemotingCommand> asyncSendMessage(ChannelHandlerCont…

【现代密码学】笔记5--伪随机置换(分组加密)《introduction to modern cryphtography》

【现代密码学】笔记5--伪随机置换&#xff08;分组加密&#xff09;《introduction to modern cryphtography》 写在最前面5 伪随机排列实践构造&#xff08;块密码/分组密码&#xff09; 写在最前面 主要在 哈工大密码学课程 张宇老师课件 的基础上学习记录笔记。 内容补充&…

pve虚拟机的改名和修改ID

PVE的虚拟机名字在web界面是无法修改id和名字的。要注意id和名字不能重。 在使用备份时就发现虚拟机是以虚拟机id作为维一标识&#xff0c;如果有多台pve节点&#xff0c;但共用同一个nfs目录备份或使用同一个pbs进行备份时就必须保障id的唯一性。这时可以使用这个方法来进行补…

MySQL使用通配符进行数据搜索以及过滤

目录 1.什么是通配符&#xff1f; 2.通配符之→百分号(%) 3.通配符之→下划线(_) 4.通配符使用注意事项 *本文涉及概念来源于图灵程序设计丛书&#xff0c;数据库系列——《MySQL必知必会》 1.什么是通配符&#xff1f; 通配符(wildcard) &#xff1a;用来匹配值的一部分…