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

xml重点笔记(尚学堂 3h)

XML:可扩展标记语言

主要内容(了解即可)

1.XML介绍

2.DTD

3.XSD

4.DOM解析

6.SAX解析

学习目标

image-20240916095028616

一. XML介绍

1.简介

XML(Extensible Markup Language) 可扩展标记语言,严格区分大小写

2.XML和HTML

XML是用来传输和存储数据的。

XML多用在框架的配置文件中

XML大多平台都支持,所以可以实现跨平台数据传输

HTML是用来显示数据的

3.XML的引入

XML的引入:

保存5个学生对象的信息(持久化保存)

A、保存数组/集合====>内存中当项目重启后我们保存到内存中数据就会丢失

B、使用IO流保存到文件中优点:实现数据的持久化保存缺点:保存数据比较麻烦,并且保存的对象值我们看不懂

C、使用XML进行数据的保存
[1]进行数据的存储(数据存储的功能就在这个阶段使用,以后不用xmL进行数据存储)
[2]在我们后期学习(javaEE/框架)中充当配置文件
D、数据库(最终数据存储位置)

4.语法

<元素名 属性名=“属性值”>文本内容</元素名>。

前后元素名相同,元素名自定义。

每个元素可以有0到多个属性,属性名自定义。

文本内容表示文字。

支持嵌套结构。

结束时元素名前有/。

5.语法要求

XML的语法和HTML语法是差不多的,但是比HTML要求更加严格。

1.元素正确嵌套

2.XML文件的第一行必须是xml声明

3.只能有一个根节点

4.严格区分大小写

5.结束标签必须包含/

6.属性值的设置必须被包围起来

7.XML认为换行标记也属于文本节点

8.<!---->注释。有的非官方资料认为这是注释节点。

<?xml version="1.0" encoding="utf-8"?> <!--文档头,声明版本和编码 -->
<students> <!--在xml中只可以定义一个根节点,并且是一个双标签--><student id="1"> <!--属性节点--><name>张三</name><age>12</age> <!--元素节点--><score>88</score><!-- 文本内容/文本值节点--></student><student id="2"><name>李四</name><age>13</age><score>99</score></student>
</students>

6.特殊符号

6.1 实体符号
字符实体特殊字符含义
&It<小于
&gt>大于
&amp&和号
&apos单引号
&quot"双引号
6.2 转义标签
<font style='color:blue'> <![CDATA[要打印内容]] </font>

二,小节实现案例-编写XML文件

1.需求

项目根路径下创建product.xml并存储下面信息。

根节点叫做products,里面包含3个product元素。每个元素里面又包含下面的元素及文本内容

image-20240916103934692

2.实现

<?xml version="1.0" encoding="utf-8" ?> <!--xml的文档声明-->
<products><product><id>P001</id><name>蜘蛛王皮鞋</name><price>268</price><color>黑色</color><size>42</size><num>500</num>
</product><!-- ... -->
</products>

三.DTD(约束)

1.简介

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

即约束XML文件中可以包含哪些元素、哪些属性、及元素个数和元素之间的关系和元素的顺序。

在包含DTD的XML文件中,如果XML内容不满足DTD要求,会提示错误。

2.分类

DTD的三种分类:

1.内部DTD

2.外部DTD

3.公共DTD

2.1内部DTD

直接在XML中编写DTD内容。不推荐。

  1. <!ELEMENT元素名(包含内容)>内容可以是其他标签,也可以是#PCDATA文本内容。
  2. <!ATTLIST元素名属性名CDATA内容控制>定义属性
  3. 内容控制可取值:
    1. #REQUIRED必须有这个属性
    2. #IMPLIED可以有也可以没有

​ 3. #FIXED“内容”必须取固定值

  1. (name,age,score)表示顺序必须是先name,后age,然后score

  2. student+表示student至少出现一次。括号内容的元素名都可以跟下面符号
    1.?表示子元素出现0次到1次(最多出现一次)

    2.+表示子元素至少出现一次(至少出现一次)

    3.*表示子元素可以出现0到多次(任意)

<?xml version="1.0" encoding="UTF-8"> <!--声明xm1文档头
<!-- 内部DTD约束 -->
<!--!DOCTYPE: 固定语法文档类型students: 自定义根标签名字[]: 存放子标签ELEMENT: 元素(标签)#PCDATA:元素是字符串类型#PCDATA(不能再有子元素,也不能为空)DTD中标签的顺序就是日后使用的顺序,不允许改变
-->
<!DOCTYPE students [<!-- 标签 --><!--(student): 只能有一对student标签(student?): 0~1次(student+): 至少1次(student*): 0~多次--><!ELEMENT students (student*)><!ELEMENT student (name, age, sex)><!ELEMENT name (#PCDATA)><!ELEMENT age (#PCDATA)><!ELEMENT SeX (#PCDATA)><!--属性--><!-- ATTLIST: 属性student: 哪个标签指定属性id: 指定的属性名CDATA: 属性控制#REQUIRED: 必须有#FIXED“值": 固定值#IMPLIED: 可有可无--><!ATTLIST student id CDATA #REQUIRED><!ATTLIST name class CDATA #FIXED"qwe"><!ATTLIST age test CDATA #IMPLIED>
]>
<students><student id="aa"><name class="qwe">张三</name><age test="aaa">18</age><sex></sex></student>
</students>
2.2外部DTD(项目配置文件来源于此!!!)

外部DTD是我们自己编写的DTD文件。通过引I入方式引I入DTD。

在外部创建一个xxx.dtd文件,文件内容和内部dtd[]中的内容相同。

1.新建dtd文件
<!ELEMENT students (student*)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name(#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT SeX(#PCDATA)>
<!ATTLIST student id CDATA #REQUIRED>
<!ATTLIST name class CDATA #FIXED "qwe">
<!ATTLIST age test CDATA #IMPLIED>
2.xml引入外部dtd文件
<?xml version="1.0" encoding="uTF-8" ?>
<!DOCTYPE students SYSTEM "aa.dtd">
<students><student id="aa"<name class="qwe">张三</name><age test="aaa">18</age><sex></sex></student>
</students>
2.3公共DTD

公共DTD是一些开源组织编写的DTD,并且已经发布到互联网中。
公共DTD语法:
< !DOCTYPE 根元素 PUBLIC “DTD标识名” “公用DTD的URI”>

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">

3, 总结

DTD是较简单的语法检查机制。整体语法较简单,功能较单一。
当需要对XML文件结构更新时,需要修改整个DTD文件,不够灵活。

四, XSD

1.简介

XSD(XML Schema Definition)XML模式定义。

属于DTD的升级版。完美的解决了DTD使用时不易扩展问题,并且提供了更强大功能。

2.定义XSD

新建xxx.xsd。

所有需要的元素,属性都需要被定义。

<!--声明xsd约束aa: 自定义名称(随意)schema: 约束(固定)
-->
<aa:schema xmlns:aa="http://www.w3.org/2001/XMLSchema"><!--aa:element: 标签name: 标签名--><aa:element name="students"><!--必须设置为复杂类型--><aa:complexType><!--在此标签中规范了标签的顺序<aa:sequence><!--引用其他标签 --><!--maxoccurs: 指定可以有多少个标签--><aa:element ref="student"maxoccurs="2"/></aa:sequence></aa:complexType></aa:element>
<aa:element name="student"><!--复杂类型可以指定 包含的标签 属性--><aa:complexType><aa:sequence><!--type: 值的类型--><aa:element name="name" type="aa:string"/><aa:element name="age" type="aa:int"/><aa:element name="sex" type="aa:boolean"/></aa:sequence><!--use:属性的设置required: 必须存在prohibited: 禁用optional: 可选的fixed="值": 固定值--><aa:attribute name="id" use="optional" fixed="aa"/></aa:complexType>
</aa:element>

3.引用xsd

<?xml version="1.0" encoding="uTF-8" ?>
<students xm1ns:xsi="http://www.w3.org/2001/xMLSchema-instance"xsi:noNamespaceSchemaLocation="s.xsd"><student id="aa"><name></name><age>11</age><sex>false</sex></student>
</students>

五.XML 解析

1.简介

在Java中提供了两种XML解析方式: DOM、SAX。

2.DOM解析

​ Document Object Model文档对象模型。把XML文件一次性加载到内存中,并转换为树状模型。然后一个节点一个节点的解析,这种解析方式效率较高,但是比较消耗内存,适用于小型XML文档。

image-20240916140617102

3.SAX(Spring)

SAX(SimpleAPIforXML)解析:是基于事件的解析,它是为了解决DOM解析的资源耗费而出现的。SAX在解析一份XML文档时,会依次出发文档开始、元素开始、元素结束、文档结束等事件,应用程序通过监听解析过程中所触发的事件即可获取XML文档的内容。该方式不需要事先调入整个文档,优势是占用资源少,内存消耗小,一般在解析数据量较大的文档是采用该方式。

六.DOM解析

1.简介

DOM解析所有API都是org.w3c包中。

使用DOM操作XML按照标准树状结构一层一层解析。

解析器是基于工厂设计模式的。当获取到文档对象后每个元素都是一个节点,然后操作节点对象。

在DOM解析时,每个换行符都是一个文本节点,所以一定要过滤掉换行。

image-20240916140952399

2.代码示例

以上面的students作为xml进行解析。

已知XML文件就三层结构,所以直接使用循环进行解析。如果XML文档结构比较深,此处需要使用递归。

public class TestDoM {public static void main(String[] args) throws Exception {parse();}//使用DoM解析XMLpublic static void parse() throws ParserConfigurationException, IoException, SAXException {//1.获取document构建 工厂对象DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//2.根据文档构建工厂获取文档构建对象/* 将xm1变为document* 手动的创建document**/  DocumentBuilder db = dbf.newDocumentBuilder();//3.使用文档构建对象,将xm1解析为document对象Document document = db.parse(new File("stu.xm1"));//4.根据标签名获取跟标签NodeList rootList = document.getElementsByTagName("students");//5.xm1中仅会存在一个跟标签,获取这个根标签Node root = rootList.item(0);System.out.print1n ("根节点名称: " + root.getNodeName();//6.获取标签所有的直接子节点NodeList chi1dNodes = root.getChi1dNodes();for (int i = 0; i < childNodes.getLength(); i++{//7.获取每一个子节点/**	    getNodeType(): 结点类型,常量*	  	1: 标签结点*	 	2: 属性结点*		3: 文本结点**/Node item = childNodes.item(i);if (item.getNodeType() == Node.ELEMENT_NODE) {System.out.println("子节点名称: " + item.getNodeName());//8.获取该结点的所有子节点NodeList childNodes1 = item.getChildNodes();发送forint j = 0; j < childNodes1.getLength(); j++) {Node item1 = childNodes1.item(j);if (item1.getNodeType() == Node.ELEMENT_NODE) {System.out.println("子节点名称: " + item1.getNodeName() + ":" + item1.getTextContent()));}}}}      }    }

七.使用DOM生成XML

1.简介

DOM生成XML时主要是创建节点。然后把节点添加到上层节点。

2.代码示例

public class TestDoM {public static void main(String[] args)throws Exception {transform();}//先构建文档,再将文档变为xmlpublic static void transform throws ParserConfigurationException, TransformerException, FileNotFoundException{//1.获取文档构建器工厂对象DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();//2.构建器工厂对象 获取 构建器对象DocumentBuilder db=dbf.newDocumentBuilder();//3.创建文档对象Document document=db.newDocument();//4.创建teachers标签Element teachers=document.createElement("teachers");//5.创建teacher标签Element teacher =document.createElement("teacher");teacher.setAttribute("id","tea");//设置属性//6.创建name标签Element name =document.createElement("name");name.setAttribute("class", "na"); // 设置属性name.setTextContent("zs");//7.创建age标签Element age = document.createElement("age");age.setTextContent("18");//8.创建sex标签Element sex = document.createElement("sex");sex.setTextContent("男");//9.设置标签之间的关系//添加teacher的子标签*teacher.appendchild(name);teacher.appendchild(age);teacher.appendchild(sex);}
}    

八.SAX解析

1.简介

SAX解析是基于事件模型完成的。所有的API都在org.Xml中。
SAX解析时也会识别换行为文本节点,这个坑一定躲避。

2.代码示例

public class TestSAX {public static void main(String[] args) throws Exception {parse();}public static void parse() throws Exception {//1.SAX解析器工厂对象SAXParserFactory spf = SAXParserFactory.newInstance();//2.基于工厂对象获取解析器对象SAXParser sp = spf.newSAxParser();//3.使用解析器解析xmlsp.parse(new File("java_day13/teacher.xm1"),new MyHandler());}public class MyHandler extends DefaultHandler {String name = null;@overridepublic void startDocument() throws SAXException {System.out.print1n("文档开始解析");}@overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {System.out.println("开始解析,标签名: " + qName);name = qName;}@Override}     
}

九, SAX生成

1.简介

SAX生成XML和手写XML比较相似。

也是在调用5个操作方法。

2.代码生成

public class TestSAX {public static void main(String[] args) throws Exception {parse();}public void transfom() throws TransformerConfigurationException, FileNotFoundExceptionSAxException {//1.创建转换器工厂SAXTransformerFactory stff =(SAXTransformerFactory) SAXTransformerFactory.newInstance();//2.根据工厂获取转换器/**传输*创建xml**/ TransformerHandler th = stff.newTransformerHandler();Transformer transformer = th.getTransformer();transformer.setOutputProperty(OutputKeys.INDENT,"yes");transformer.setOutputProperty(OutputKeys.ENcoDING,"utf-8");transformer.setoutputProperty("{http://xml.apache.org/xslt}indent-amount","2");th.setResult(new StreamResult(new FileoutputStream("stu.xml")));th.startElement(null,null,“students",null);AttributesImpl attributes = new AttributesImpl();attributes.addAttribute(nullnull,“id",null,“aa");th.startElement(nullnull"student",attributes);th.startElement(null, null, "name", null);char[] chars = "zs".tocharArray();th.characters(chars,0,chars.length);th.endElement(null, null, "name");th.startElement(null, null,"age", null1);char[] chars1 = "19".toCharArray();th.characters(chars1,0,chars1.1ength);th.endElement(null, null, "age");th.startElement(null, null, “sex", null);char[] chars2 ="男".tocharArray();th.characters(chars2,0,chars2.length);th.endelement(null, null,"sex");th.endElement(null,null,“student");th.endelement(null,null,“students");th.endDocument();}
}

相关文章:

xml重点笔记(尚学堂 3h)

XML:可扩展标记语言 主要内容(了解即可) 1.XML介绍 2.DTD 3.XSD 4.DOM解析 6.SAX解析 学习目标 一. XML介绍 1.简介 XML(Extensible Markup Language) 可扩展标记语言&#xff0c;严格区分大小写 2.XML和HTML XML是用来传输和存储数据的。 XML多用在框架的配置文件…...

爬虫代理API的全面解析:让数据抓取更高效

在大数据时代&#xff0c;网络爬虫已经成为收集和分析数据的重要工具。然而&#xff0c;频繁的请求会导致IP被封禁&#xff0c;这时候爬虫代理API就显得尤为重要。本文将详细介绍爬虫代理API的作用、优势及如何使用&#xff0c;帮助你更高效地进行数据抓取。 什么是爬虫代理AP…...

PCL 点云中的植被信息提取(C++详细过程版)

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接,首发于:2024年9月18日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 一、算法原理 1、原理概述 点云具有丰富的色彩信息,可以与植被指数结合使…...

requests-html的具体使用方法有哪些?

‌requests-html是一个功能强大的Python库&#xff0c;用于发送HTTP请求和解析HTML内容。它的使用方法包括安装库、基本使用、发送带有参数的请求、图片抓取实战案例、解析网页内容、执行JavaScript代码、使用CSS选择器来查找元素、继续跟踪链接并获取内容等。‌ ‌安装request…...

YOLOv9改进策略【卷积层】| AKConv: 具有任意采样形状和任意参数数量的卷积核

一、本文介绍 本文记录的是利用AKConv优化YOLOv9的目标检测网络模型。标准卷积操作的卷积运算局限于局部窗口&#xff0c;无法捕获其他位置的信息&#xff0c;且采样形状固定&#xff0c;无法适应不同数据集和位置中目标形状的变化。而AKConv旨在为卷积核提供任意数量的参数和…...

图神经网络池化方法

图神经网络池化方法 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 图神经网络池化方法前言一、扁平图池化二、分层图池化1.节点聚类池化2.节点丢弃池化 参考文献 前言 图池化操作根据其池化策略的差异&#xff…...

小琳AI课堂:确保大语言模型安全的八大策略--从数据隐私到用户教育

大家好&#xff0c;这里是小琳AI课堂。今天我们深入探讨如何保证大语言模型的安全&#xff0c;这可是关系到我们每个人哦&#xff01;&#x1f510; 首先&#xff0c;我们要明白&#xff0c;保证大语言模型的安全&#xff0c;需要从多个方面入手&#xff0c;确保模型在技术、法…...

Python 数学建模——高斯核密度估计

文章目录 前言原理代码实例scipy 实现seaborn 实现 前言 高斯核密度估计本是一种机器学习算法&#xff0c;在数学建模中也可以发挥作用。本文主要讨论用它来拟合变量的概率密度&#xff0c;获得概率密度函数 f ( x ) f(x) f(x)。 原理 已知一个连续型随机变量 X X X 的一系列…...

Flink+Spark相关记录

FlinkSpark相关记录 FlinkSQL Flink Streaming的一些点覆写RichSource、RichSink、RichMap 1.Source自动负载均衡&#xff0c;CDC源端加入一个全局调控的节点监控流量流速 2.Sink并发写入 3.Map与Iterator与增量迭代等用法关于Checkpoint几个用法 1.提交Commit至目的端数据库 2…...

2023 hnust 湖科大 毕业实习 报告+实习鉴定表

2023 hnust 湖科大 毕业实习 报告实习鉴定表 岗位 IT公司机房运维 实习报告 实习鉴定表 常见疑问 hnust 湖科大 毕业实习常见问题30问&#xff08;2021 年7月&#xff0c;V0.9&#xff09;-CSDN博客时间&#xff1a;大四开学第三四周毕业实习23年是企业&#xff08;黑马&am…...

ConflictingBeanDefinitionException | 运行SpringBoot项目时报错bean定义冲突解决方案

具体报错&#xff1a; Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name ‘CommissionMapperImpl’ for bean class [com.xxx.mapper.carrier.CommissionMapperImpl] conflicts with existing, non-co…...

如何切换淘宝最新镜像源(npm)【2024版】

在使用 Node.js 和 npm 进行开发时&#xff0c;大家通常会遇到 npm 源速度较慢的问题。特别是当你需要安装大量依赖时&#xff0c;npm 官方源的速度可能不尽如人意。幸运的是&#xff0c;淘宝提供了一个更快速的 npm 镜像源&#xff0c;可以让你更快地下载和安装包。本文将介绍…...

YoloV10改进策略:Block改进|PromptIR(NIPS‘2023)|轻量高效,即插即用|(适用于分类、分割、检测等多种场景)

文章目录 摘要代码详解如何在自己的论文中描述改进方法测试结果总结摘要 本文使用PromptIR框架中的PGM模块来改进YoloV10。PGM(Prompt Generation Module)模块是PromptIR框架中的一个重要组成部分,主要负责生成输入条件化的提示(prompts)。这些提示是一组可学习的参数,它…...

使用rust自制操作系统内核

一、系统简介 本操作系统是一个使用rust语言实现&#xff0c;基于32位的x86CPU的分时操作系统。 项目地址&#xff08;求star&#xff09;&#xff1a;GitHub - CaoGaorong/os-in-rust: 使用rust实现一个操作系统内核 详细文档&#xff1a;自制操作系统 语雀 1. 项目特性 …...

Flink难点和高阶面试题:Flink的状态管理机制如何保证数据处理的准确性和完整性

1 Flink状态管理机制核心要素 1.1 内置状态后端 在Apache Flink中,状态管理机制是确保数据处理准确性与完整性的关键环节。其核心在于灵活且高效的状态后端,这些后端负责在分布式环境中安全地存储和访问状态数据。Flink提供了多种内置状态后端,其中RocksDB和内存状态后端最…...

【激励广告带来的广告收入与用户留存率的双重提升】

激励广告带来的广告收入与用户留存率的双重提升 ) 随着移动应用市场的竞争加剧&#xff0c;如何通过广告变现成为众多开发者关注的焦点。其中&#xff0c;激励广告&#xff08;Rewarded Ads&#xff09;凭借其用户友好、互动性强等特点&#xff0c;逐渐成为开发者的首选。那些…...

指针和引用;内联函数和普通函数

1. 指针和引用 1.1 定义和性质区别 指针是一个变量&#xff0c;只不过这个变量存储的是一个地址&#xff0c;指向内存的一个存储单元&#xff1b;而引用跟原来的变量实质上是同一个东西&#xff0c;只不过是原变量的一个别名而已。可以有const指针&#xff0c;常量指针可以改…...

简单题67.二进制求和 (java)20240919

题目描述&#xff1a; Java&#xff1a; class Solution {public String addBinary(String a, String b) {StringBuilder result new StringBuilder();int i a.length()-1;int j b.length()-1;int carry 0; //记录进位信息while(i>0 || j>0 || carry!0){int sum ca…...

DDD的主要流程

DDD 开发流程分为模型的建立和模型的实现两大部分&#xff0c;接下来是具体的流程讲解以及流程图。 1. 模型的建立 捕获行为需求&#xff1a;在这一阶段&#xff0c;团队要识别系统中需要完成的任务、操作流程、功能需求以及每个功能由谁操作、会产生什么结果。我们可以通过 …...

linux驱动开发-设备树

设备树的历史背景 背景&#xff1a; 在早期的嵌入式系统中&#xff0c;硬件配置信息通常硬编码在内核源码中&#xff0c;这导致了内核代码的冗长和难以维护。 为了解决这个问题&#xff0c;设备树&#xff08;Device Tree&#xff09;被引入&#xff0c;使得硬件描述与内核代…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

Windows安装Miniconda

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