一篇文章了解XML
一、什么是 XML?
XML 是一种结构化数据的标记语言,用来存储、传输和描述数据。
它和 HTML 很像,但它的标签是自定义的,不限定格式和外观,而是强调数据的结构和含义。
XML不是用来展示数据的,HTML是用来展示数据的。
示例:
<student><name>小明</name><age>20</age><major>计算机</major>
</student>
它表示一个学生,包含姓名、年龄和专业。这就叫结构化数据。
二、XML的作用
XML 数据格式最主要的功能就是:数据传输
XML 数据格式主要的用途又有哪些?
- 程序之间的数据传输通讯
- 配置文件 config.xml
- 存储数据,充当小型数据库 data.xml
规范数据格式,是数据具有结构性,易读易处理。
场景 | 说明 |
---|---|
配置文件 | 如 Spring 的 applicationContext.xml 、MyBatis 配置 |
数据存储 | 可用作小型数据库、日志、缓存数据 |
网络传输 | WebService(SOAP)以前就是基于 XML |
数据交换 | 不同系统之间用 XML 传数据(如银行系统) |
三、XML 的语法规则
基本结构:
<?xml version="1.0" encoding="UTF-8"?> <!-- XML 声明,非必需但推荐写 -->
<root><element>内容</element>
</root>
XML 的 6 个语法规则:
规则 | 说明 | 示例 |
---|---|---|
必须有根元素 | 整个文档必须有且只有一个根节点 | <root>...</root> |
标签成对出现 | 开始标签和结束标签必须配对 | <name>Tom</name> |
标签区分大小写 | <Name> ≠ <name> | 严格匹配 |
属性必须加引号 | 属性值必须用引号包裹 | <person gender="male"/> |
空标签可以简写 | 没有内容的标签可以自闭合 | <br /> |
不能有非法字符 | 如 < , & 不能直接出现在内容中 | 用 < , & |
XML 和 HTML 有哪些不一样?
1:HTML 标签不能自定义,XML 标签只能自定义;
2:HTML 语法要求不严格;XML 语法要求极其严格,必须是成对标签
3:xml 用来传输和存储数据,HTML 用来展示数据;
四、元素、属性、注释
4-1、元素(Element):
<book><title>XML 入门</title>
</book>
元素用于包裹信息,有开始和结束标签。
4-2、属性(Attribute):
<book title="XML 入门" price="59.8" />
属性是附加在标签上的键值对,用来表示额外信息。
属性的命名规则:
数字、字母、下划线;数字不能开头!
一般建议:数据用子元素,元数据用属性。
概念 | 解释 | 举例 |
---|---|---|
数据(Data) | 你真正关心的业务内容 | 姓名、年龄、价格、标题等 |
元数据(Metadata) | 对数据的描述或附加说明,不是数据本身 | id、类型、单位、语言、版本等 |
4-3、注释:
<!-- 这是一本书 -->
<book>...</book>
和 HTML 一样,注释用 <!-- -->
。
五、特殊字符使用实体转义
字符 | 实体写法 |
---|---|
< | < |
> | > |
& | & |
" | " |
' | ' |
六、CDATA
在 XML 中使用
<![CDATA[...]]>
是为了处理包含特殊字符或需要保留原始格式的内容。当你想在 XML 中保留“原样文本”,而不想让里面的字符被当作标签或实体解析时,就用 CDATA。
CDATA(不转义内容):
<![CDATA[ 你的原始文本 ]]>
⚠️ 限制:
-
不能嵌套 CDATA(你不能在 CDATA 里面再写
<![CDATA[
) -
不能包含
]]>
本身,否则解析器会当 CDATA 提前结束 -
CDATA 是 节点的文本内容,不能用于属性值(属性值必须转义)
示例:文本中有 <
,不能直接写
<message>2 < 5</message> <!-- ❌ 错误写法,会报错 -->
<message>2 < 5</message> <!-- ✅ 正确,但繁琐 -->
更好的写法:
<message><![CDATA[2 < 5]]></message>
七、DTD / XSD
格式正确的XML(Well Formed)是指XML的格式是正确的,可以被解析器正常读取。
而合法的XML是指,不但XML格式正确,而且它的数据结构可以被DTD或者XSD验证。
DTD文档可以指定一系列规则,例如:
- 根元素必须是
book
book
元素必须包含name
,author
等指定元素isbn
元素必须包含属性lang
- ...
如何验证XML文件的正确性呢?最简单的方式是通过浏览器验证。可以直接把XML文件拖拽到浏览器窗口,如果格式错误,浏览器会报错。
和结构类似的HTML不同,浏览器对HTML有一定的“容错性”,缺少关闭标签也可以被解析,但XML要求严格的格式,任何没有正确嵌套的标签都会导致错误。
XML是一个技术体系,除了我们经常用到的XML文档本身外,XML还支持:
特性 | 作用 | 举例用途 |
---|---|---|
✅ DTD / XSD | 验证 XML 结构是否合法 | 校验配置、数据格式 |
✅ XPath | 精确查找 XML 节点 | XML 查询、筛选数据 |
✅ XSLT | 转换 XML → HTML、XML、文本等 | 报表生成、网页渲染 |
✅ DOM / SAX | 解析 XML 文件(Java 常用) | 读写 XML 数据文件 |
✅ JAXB | Java 类 ↔ XML 的自动映射 | 配置加载、数据传输 |
实际上,XML的这些相关技术实现起来非常复杂,在实际应用中很少用到,通常了解一下就可以了。
八、XML 高级特性
总览:XML 的五大高级特性
特性 | 作用 | 举例用途 |
---|---|---|
✅ DTD / XSD | 验证 XML 结构是否合法 | 校验配置、数据格式 |
✅ XPath | 精确查找 XML 节点 | XML 查询、筛选数据 |
✅ XSLT | 转换 XML → HTML、XML、文本等 | 报表生成、网页渲染 |
✅ DOM / SAX | 解析 XML 文件(Java 常用) | 读写 XML 数据文件 |
✅ JAXB | Java 类 ↔ XML 的自动映射 | 配置加载、数据传输 |
8-1、DTD / XSD:验证 XML 的结构(结构约束)
为什么需要它?
你写了一个 XML 文档,比如:
<person><name>张三</name><age>20</age>
</person>
但你怎么知道:
-
有没有多写/漏写标签?
-
类型对不对?
-
标签顺序是否正确?
就需要用 DTD(Document Type Definition)或 XSD(XML Schema) 来定义**“这份 XML 应该长什么样”**。
1、DTD 示例:
<!DOCTYPE person [<!ELEMENT person (name, age)><!ELEMENT name (#PCDATA)><!ELEMENT age (#PCDATA)>
]>
用于说明:
-
person
标签下有name
和age
-
内容是文本
2、XSD 示例(更强大,支持类型):
<xs:element name="age" type="xs:integer"/>
XSD 支持:
-
数字、字符串、日期等类型
-
可选/必填字段
-
枚举值、正则表达式
8-2、XPath:XML 中的路径语言
类似 HTML 中的 CSS Selector
如果你有这样一份 XML:
<students><student><name>小明</name><age>20</age></student>
</students>
你可以用 XPath 表达式精准查找:
XPath | 含义 | 返回内容 |
---|---|---|
/students/student/name | 根节点开始查找 name | 小明 |
//name | 所有叫 name 的元素 | 小明 |
//student[age>18] | 年龄大于 18 的学生 | student 节点 |
XPath 广泛用于:XML 查询引擎、XSLT 过滤器、Selenium 网页爬虫等
8-3、XSLT:XML 转换工具
把一份 XML 转换成另一份 XML、HTML 或纯文本,像是“模板引擎”。
应用场景:
-
把 XML 转为 HTML 页面(用于新闻站点、商品列表等)
-
把数据格式从 A 转为 B(跨平台转换)
-
生成报表、文档
示例:把 XML 转成 HTML 列表
原始 XML:
<books><book><title>Java基础</title><price>59.8</price></book>
</books>
XSLT 文件:
<xsl:template match="book"><li><xsl:value-of select="title"/> - ¥<xsl:value-of select="price"/></li>
</xsl:template>
最终生成:
<li>Java基础 - ¥59.8</li>
8-4、DOM / SAX:XML 文件解析方式(Java 中常见)
因为XML是一种树形结构的文档,它有两种标准的解析API:
- DOM:一次性读取XML,并在内存中表示为树形结构;
- SAX:以流的形式读取XML,使用事件回调。
1、DOM(Document Object Model)
-
一次性读取整棵 XML 树结构进内存
-
优点:操作灵活、结构清晰
-
缺点:大文件占内存高
DOM模型就是把XML结构作为一个树形结构处理,从根节点开始,每个节点都可以包含任意个子节点。
示例:
<?xml version="1.0" encoding="UTF-8" ?>
<book id="1"><name>Java核心技术</name><author>Cay S. Horstmann</author><isbn lang="CN">1234567</isbn><tags><tag>Java</tag><tag>Network</tag></tags><pubDate/>
</book>
注意到最顶层的document代表XML文档,它是真正的“根”,而<book>
虽然是根元素,但它是document
的一个子节点。
Java提供了DOM API来解析XML,它使用下面的对象来表示XML的内容:
- Document:代表整个XML文档;
- Element:代表一个XML元素;
- Attribute:代表一个元素的某个属性。
使用DOM API解析一个XML文档的代码如下:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document doc = factory.newDocumentBuilder().parse("file.xml");
Element root = doc.getDocumentElement();
或者:
InputStream input = Main.class.getResourceAsStream("/book.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(input);
DocumentBuilder.parse()
用于解析一个XML,它可以接收InputStream,File或者URL,如果解析无误,我们将获得一个Document对象,这个对象代表了整个XML文档的树形结构,需要遍历以便读取指定元素的值:
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;public class XmlPrinter {public static void main(String[] args) throws Exception {// 1. 加载 XML 文件File file = new File("/Users/wangsi/IdeaProjects/javaSE/src/student.xml"); // 文件路径DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();// 2. 解析为 Document 对象Document document = builder.parse(file);// 3. 获取根节点(Element 是 Node 的子类)Node root = document.getDocumentElement();// 4. 调用你写的递归打印方法printNode(root, 0);}public static void printNode(Node n, int indent) {for (int i = 0; i < indent; i++) {System.out.print(' ');}switch (n.getNodeType()) {case Node.DOCUMENT_NODE:System.out.println("Document: " + n.getNodeName());break;case Node.ELEMENT_NODE:System.out.println("Element: " + n.getNodeName());break;case Node.TEXT_NODE:// 忽略只包含空白的文本节点String text = n.getNodeValue().trim();if (!text.isEmpty()) {System.out.println("Text: " + n.getNodeName() + " = " + text);}break;case Node.ATTRIBUTE_NODE:System.out.println("Attr: " + n.getNodeName() + " = " + n.getNodeValue());break;default:System.out.println("NodeType: " + n.getNodeType() + ", NodeName: " + n.getNodeName());}// 5. 如果是元素,还要打印属性if (n.getNodeType() == Node.ELEMENT_NODE) {NamedNodeMap attrs = n.getAttributes();for (int i = 0; i < attrs.getLength(); i++) {printNode(attrs.item(i), indent + 2);}}// 6. 遍历子节点for (Node child = n.getFirstChild(); child != null; child = child.getNextSibling()) {printNode(child, indent + 2);}}}
对于DOM API解析出来的结构,我们从根节点Document出发,可以遍历所有子节点,获取所有元素、属性、文本数据,还可以包括注释,这些节点被统称为Node,每个Node都有自己的Type,根据Type来区分一个Node到底是元素,还是属性,还是文本,等等。
使用DOM API时,如果要读取某个元素的文本,需要访问它的Text类型的子节点,所以使用起来还是比较繁琐的。
使用DOM解析XML的优点是用起来省事,但它的主要缺点是内存占用太大。
2、SAX(Simple API for XML)
-
事件驱动式解析,不存整个树结构,边读边处理
-
适合大文件或只读操作
SAX是Simple API for XML的缩写,它是一种基于流的解析方式,边读取XML边解析,并以事件回调的方式让调用者获取数据。因为是一边读一边解析,所以无论XML有多大,占用的内存都很小。
SAX解析会触发一系列事件:
- startDocument:开始读取XML文档;
- startElement:读取到了一个元素,例如
<book>
; - characters:读取到了字符;
- endElement:读取到了一个结束的元素,例如
</book>
; - endDocument:读取XML文档结束。
如果我们用SAX API解析XML,Java代码如下:
InputStream input = Main.class.getResourceAsStream("/book.xml");
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser saxParser = spf.newSAXParser();
saxParser.parse(input, new MyHandler());
关键代码SAXParser.parse()
除了需要传入一个InputStream
外,还需要传入一个回调对象,这个对象要继承自DefaultHandler:
class MyHandler extends DefaultHandler {public void startDocument() throws SAXException {print("start document");}public void endDocument() throws SAXException {print("end document");}public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {print("start element:", localName, qName);}public void endElement(String uri, String localName, String qName) throws SAXException {print("end element:", localName, qName);}public void characters(char[] ch, int start, int length) throws SAXException {print("characters:", new String(ch, start, length));}public void error(SAXParseException e) throws SAXException {print("error:", e);}void print(Object... objs) {for (Object obj : objs) {System.out.print(obj);System.out.print(" ");}System.out.println();}
}
运行SAX解析代码,可以打印出下面的结果:
start document
start element: book
characters:start element: name
characters: Java核心技术
end element: name
characters:start element: author
...
DOM 更适合增删查改,SAX 更适合读文件做分析。
8-5、JAXB:Java ↔ XML 映射工具(非常实用!)
JAXB(Java Architecture for XML Binding)可以把 XML 文件自动映射成 Java 对象,或者反过来写入 XML。
示例:
Java Bean:
@XmlRootElement(name = "person")
public class Person {public String name;public int age;
}
读取 XML 到对象:
JAXBContext context = JAXBContext.newInstance(Person.class);
Person p = (Person) context.createUnmarshaller().unmarshal(new File("person.xml"));
类似 JSON ↔ Java(Gson、Jackson),但是 XML 的双向转换。
8-6、使用Jackson:Java ↔ XML 映射工具
Jackson 和 JAXB,两者都能实现“XML ↔ Java 对象”的双向转换。
- Jackson 更通用,支持 JSON 和 XML;
- JAXB 是专门为 XML 设计的官方标准。
特性 | JAXB | Jackson |
---|---|---|
官方地位 | Java 官方标准 | 第三方库 |
XML 支持 | 原生、强大 | 通过扩展模块 |
JSON 支持 | ❌ 不支持 | ✅ 支持(主打) |
默认注解包 | javax.xml.bind.annotation.* | com.fasterxml.jackson.* |
是否支持 Schema | ✅ 可通过 XSD 生成 Java 类 | ❌ 不擅长 |
Java 版本 | Java 8 自带,Java 11 需要手动导包 | 全版本支持 |
在 Spring 中的使用 | 较少用 | ✅ Spring Boot 默认 JSON/XML 工具 |
前面我们介绍了DOM和SAX两种解析XML的标准接口。但是,无论是DOM还是SAX,使用起来都不直观。
如果能直接从XML文档解析成一个JavaBean,那比DOM或者SAX不知道容易到哪里去了。
一个名叫Jackson的开源的第三方库可以轻松做到XML到JavaBean的转换。我们要使用Jackson,先添加一个Maven的依赖。
<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><version>2.15.3</version> <!-- 用最新版 -->
</dependency>
Jackson 支持两种方式协同工作:
-
使用
XmlMapper
-
配合注解,来精细控制 XML ↔ JavaBean 的映射关系
1、 使用 XmlMapper
示例:
InputStream input = Main.class.getResourceAsStream("/book.xml");
JacksonXmlModule module = new JacksonXmlModule();
XmlMapper mapper = new XmlMapper(module);
Book book = mapper.readValue(input, Book.class);
System.out.println(book.id);
System.out.println(book.name);
System.out.println(book.author);
System.out.println(book.isbn);
System.out.println(book.tags);
System.out.println(book.pubDate);
注意到XmlMapper
就是我们需要创建的核心对象,可以用readValue(InputStream, Class)
直接读取XML并返回一个JavaBean。运行上述代码,就可以直接从Book对象中拿到数据。
2、配合注解,精细控制
示例:
@JacksonXmlRootElement(localName = "Person")
public class Person {@JacksonXmlProperty(localName = "name")private String name;@JacksonXmlProperty(isAttribute = true)private int age;
}
方式 | 你告诉它 | 例子 |
---|---|---|
默认方式 | 靠字段名自动猜 | XmlMapper.readValue(input, Book.class) |
注解方式 | 你明确告诉它 “name 是元素”、“age 是属性” | @JacksonXmlProperty(...) |
当你要做以下事情时,注解就必须上场了:
场景 | 用法 |
---|---|
XML 字段名 和 Java 字段名 不一样 | @JacksonXmlProperty(localName = "bookName") |
要把字段转成属性而不是子标签 | @JacksonXmlProperty(isAttribute = true) |
需要根标签重命名 | @JacksonXmlRootElement(localName = "Book") |
嵌套结构/列表 | @JacksonXmlElementWrapper(useWrapping = false) 等 |
3、Spring Boot 默认集成 Jackson
Spring Boot 默认集成 Jackson,自动将 Java 对象 和 JSON 之间进行转换,主要用于:
-
请求参数(@RequestBody)
-
响应数据(@ResponseBody / REST 接口)
Spring Boot 使用 Jackson 的核心场景是:
1. 控制器返回对象 → 自动转为 JSON:
@RestController
public class BookController {@GetMapping("/book")public Book getBook() {return new Book("Java入门", "张三");}
}
访问 /book
时,Spring Boot 自动把 Book
对象转为 JSON:
{"title": "Java入门","author": "张三"
}
2. 接收 JSON 请求体并自动转为 Java 对象:
@PostMapping("/book")
public String addBook(@RequestBody Book book) {return "收到书:" + book.getTitle();
}
如果前端传:
{"title": "Java核心","author": "李四"
}
后端会自动把它转换为 Java 对象。
相关文章:
一篇文章了解XML
一、什么是 XML? XML 是一种结构化数据的标记语言,用来存储、传输和描述数据。 它和 HTML 很像,但它的标签是自定义的,不限定格式和外观,而是强调数据的结构和含义。 XML不是用来展示数据的,HTML是用来展…...
Windows下安装zookeeper
有关Linux安装zk的文章可以参考下我之前写的: Zookeeper 3.8.4 安装和参数解析 Windows下的下载和Linux是一样的,都是同一个包,目前zk稳定版是 3.8.4 下载解压后 在根目录下创建 data 文件夹用来存放数据文件 在 conf 文件夹中,…...
计算机网络 网络层:控制平面
在本章中,包含网络层的控制平面组件。控制平面作为一种网络范围的逻辑,不仅控制沿着从源主机到目的主机的端到端路径间的路由器如何转发数据报,而且控制网络层组件和服务如何配置和管理。5.2节,传统的计算图中最低开销路径的路由选…...
探索阿里云智能媒体管理IMM:解锁媒体处理新境界
一、引言:开启智能媒体管理新时代 在数字化浪潮的席卷下,媒体行业正经历着前所未有的变革。从传统媒体到新媒体的转型,从内容生产到传播分发,每一个环节都在寻求更高效、更智能的解决方案。而云计算,作为推动这一变革…...
微信点餐小程序—美食物
本项目是基于WAMP Server 和PHP 动态网页技术构建的微信小程序点餐系统,该系统主要分为前端(微信小程序)和后端(基于PHPMySQL服务器端) 整体架构流程 1、前端部分 用户界面:展示菜品、处理用户点餐操作、…...
Python零基础入门到高手8.5节: 实现选择排序算法
目录 8.5.1 排序算法简介 8.5.2 选择排序算法 8.5.3 好好学习,天天向上 8.5.1 排序算法简介 所谓排序,是指将数据集合中的元素按从小到大的顺序进行排列,或按从大到小的顺序进行排列。前者称为升序排序,后者称为降序排序。在数…...
JavaEE初阶第四期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(二)
专栏:JavaEE初阶起飞计划 个人主页:手握风云 目录 一、Thread类及常用方法 2.1. Thread的常见构造方法 2.2. Thread的常见属性 2.3. 启动一个线程 2.4. 中断一个线程 2.5. 等待一个线程 2.6. 休眠当前线程 一、Thread类及常用方法 2.1. Thread的…...
Metasploit常用命令详解
一、Metasploit 概述 Metasploit是一款开源的渗透测试框架,由 H.D. Moore 于 2003 年首次发布,目前由 rapid7 公司维护。它整合了大量漏洞利用模块、后渗透工具和漏洞扫描功能,已成为网络安全工程师、红队 / 蓝队成员及安全研究人员的核心工…...
2025.6.24总结
今天发生了两件事,这每件事情都足以影响我的工作状态。 1.团队中有人要转岗 这算是最让我有些小震惊的事件了。我不明白,那个同事干得好好的,为啥会转岗,为啥会被调到其他团队。虽然团队有正编,有od,但我自始自终觉得…...
2023年全国青少年信息素养大赛Python 复赛真题——玩石头游戏
今日python每日练习题为——玩石头游戏,大家记得坚持刷题哦,闯入国赛~ 每轮可拿 1-3 块石头,双方均采取最优策略。若石头数 n 为 4 的倍数,无论先手取 k 块(1≤k≤3),后手总能取 4-k 块…...
MySQL之SQL性能优化策略
MySQL之SQL性能优化策略 一、主键优化策略1.1 主键的核心作用1.2 主键设计原则1.3 主键优化实践 二、ORDER BY优化策略2.1 ORDER BY执行原理2.2 ORDER BY优化技巧2.3 处理大结果集排序 三、GROUP BY优化策略3.1 GROUP BY执行原理3.2 GROUP BY优化方法 四、LIMIT优化策略4.1 LIM…...
AI时代工具:AIGC导航——AI工具集合
大家好!AIGC导航是一个汇集多种AIGC工具的平台,提供了丰富的工具和资源。 工具功能: 该平台整合了多样的AIGC工具,涵盖了绘画创作、写作辅助以及视频制作等多个领域。绘画工具能够生成高质量的图像作品;写作工具支持从构思到润色的全流程写…...
性能测试-jmeter实战4
课程:B站大学 记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师 性能测试-jmeter实战4 jmeter环境搭建1. 安装Java环境(必需) JMeter环境搭建完整指南1. 安装Java࿰…...
C++字符串的行输入
1、字符串的输入 下面用一个真实的示例来进行演示: #include<iostream> #include<string>int main() {using namespace std;const int ArSize 20;char name[ArSize];char dessert[ArSize];cout << "Enter your name:\n";cin >>…...
【Linux网络与网络编程】15.DNS与ICMP协议
1. DNS 1.1 DNS介绍 TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个程序,但是 IP 地址不方便记忆,于是人们发明了一种叫主机名的字符串,并使用 hosts 文件来描述主机名和 IP 地址的关系。最初, 通过互连网信息中心(SRI-NIC)来…...
Python训练营-Day40-训练和测试的规范写法
1.单通道图片训练 # import torch # import torch.nn as nn # import torch.optim as optim # from torchvision import datasets, transforms # from torch.utils.data import DataLoader # import matplotlib.pyplot as plt # import numpy as np# # 设置中文字体支持 # plt…...
【Python-Day 29】万物皆对象:详解 Python 类的定义、实例化与 `__init__` 方法
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
内存泄漏和内存溢出的区别
内存泄漏(Memory Leak)和内存溢出(Memory Overflow / Out Of Memory, OOM)是软件开发中两个密切相关但又本质不同的内存问题: 核心区别一句话概括: 内存泄漏: 有垃圾对象占用内存却无法被回收&…...
Linux系统---Nginx配置nginx状态统计
配置Nignx状态统计 1、下载vts模块 https://github.com/vozlt/nginx-module-vts [rootclient ~]# nginx -s stop [rootclient ~]# ls anaconda-ks.cfg nginx-1.27.3 ceph-release-1-1.el7.noarch.rpm nginx-1.27.3.tar.gz info.sh …...
linux操作系统的软件架构分析
一、linux操作系统的层次结构 1.内核的主要功能 1)进程管理 2)内存管理 3)文件系统 4)进程间通信、I/O系统、网络通信协议等 2.系统程序 1)系统接口函数库,比如libc 2)shell程序 3)编译器、编辑…...
快速手搓一个MCP服务指南(三):FastMCP的核心组件-构建MCP服务的关键技术实现
FastMCP 是一套面向 LLM 应用开发的工具框架,通过标准化协议衔接大语言模型与外部功能组件,构建「LLM工具」的闭环交互体系。其核心技术体系包含四大模块:工具系统将 Python 函数转化为 LLM 可调用的能力单元,通过类型注解实现参数…...
创建首个 Spring Boot 登录项目
📌 摘要 在 Java Web 开发中,登录功能是最基础也是最重要的模块之一。本文将手把手带你使用 IntelliJ IDEA 和 Maven 构建一个基于 Spring Boot 的简单登录系统,涵盖: 使用 IDEA 创建 Spring Boot 项目配置 Maven 依赖ÿ…...
order、sort、distribute和cluster by(Spark/Hive)
1. abstract ORDER BY:完整查询结果的全局行排序。与SORT BY、CLUSTER BY、DISTRIBUTE BY互斥,不能同时使用。 示例SELECT * FROM table_name ORDER BY column_name;SORT BY:只在每个分区内排序,局部排序结果不是全局有序。与ORD…...
# Python中等于号的使用
# Python中等于号的使用 ## 1. 问题的分析与思考 在Python中,等于号()是一个赋值运算符,用于将右侧的值或表达式的结果赋给左侧的变量。这是Python(以及许多其他编程语言)中非常基础且核心的一个概念。理…...
无人机神经网络模块运行与技术难点
一、神经网络模块的运行方式 1. 分层处理架构 感知层 多模态数据融合:通过八元数卷积网络(OCNN)统一处理LiDAR、摄像头、IMU等异构传感器数据,将点云坐标(x/y/z)、图像RGB与光流信息编码至8维虚部&#…...
宝塔服务器调优工具 1.1(Opcache优化)
第一步:宝塔服务器调优工具 1.1(按照下面的参数填写) 第二步:路径/www/server/php/80/etc/php.ini 搜索jit jit1235 其中1235根据服务器情况修改 第三步:路径/www/server/php/80/etc/php-cli.ini 搜索 jit1235 其中…...
day041-web集群架构搭建
文章目录 0. 老男孩思想-高薪四板斧1. web集群架构图2. 搭建异地备份服务2.1 服务端-阿里云服务器2.1.1 查看rsync软件包2.1.2 添加rsync配置文件2.1.3 添加虚拟用户2.1.4 创建校验用户密码文件2.1.5 创建备份目录2.1.6 启动服务2.1.7 开放安全组端口2.1.8 发送检查邮件 2.2 客…...
国产化条码类库Spire.Barcode教程:如何使用 C# 读取 PDF 中的条码(两种方法轻松实现)
在 PDF 文档的 .NET 平台处理流程中,使用 C# 读取 PDF 条码 是一项常见需求,特别适用于处理扫描件或电子表单。无论是物流、金融、医疗还是制造行业,PDF 文档中经常包含用于追踪或识别的条码。这些条码可能是嵌入图像,也可能是矢量…...
vue 3 计算器
效果: <template><div class"calculator-container"><div class"calculator"><!-- 显示区域 --><div class"display">{{ formattedDisplay }}</div><!-- 按钮区域 --><div class"…...
CRMEB PHP多门店版v3.2.1系统全开源+Uniapp前端+搭建教程
一.介绍 CRMEB多店版是一款为品牌连锁门店打造的私域电商解决方案,以三大运营模式为核心,助力品牌连锁门店轻松构建全渠道、一体化的私域电商生态,促进“线上电商”与“线下门店”销售运营融合,加速品牌数字化转型,为…...
主机复制文字和文件到 Ubuntu 虚拟机
在 VMware Workstation Pro 16 中复制文字和文件到 Ubuntu 虚拟机,方法如下: Open-VM-Tools 禁用 Wayland 解决 。 1.安装 VMware Tools(推荐)或 open-vm-tools: sudo apt update sudo apt install open-vm-tools…...
性能测试 —— 数据库的连接池和主从同步和分表分区
一、数据库的调优(库层面) 1、数据库连接池 1、介绍:数据库连接池(Database Connection Pool)是一种用于管理数据库连接的技术,它通过预先创建并维护一组数据库连接来提高应用程序的性能和可扩展性。 2、创建、管理、关闭 数据…...
猿人学js逆向比赛第一届第十二题
一、分析请求 看到这里只有一个m的密文参数,没有cookie,请求头等其他的参数,那么这里跟一堆栈信息。 很顺利地锁定了m的加密位置。看到是字符串拼接然后使用btoa函数进行编码,那么这里尝试使用Python复现一下。顺利拿到结果。 复现…...
第十节 新特性与趋势-CSS层叠规则升级
以下是关于 CSS层叠规则升级 的全面解析,结合最新规范(如级联层layer)和传统层叠机制的演进,从核心原理、应用场景到实践策略的系统性总结: 一、传统层叠规则的三大支柱 CSS层叠规则的传统机制基于以下三个维…...
关键领域软件工厂的安全中枢如何全面升级供应链检测能力
随着软件供应链安全体系在互联网、金融等领域逐步成熟,关键领域正加速迈向以 MLOps、软件工厂为核心的新型研发生态。在这一过程中,面对代码安全、依赖合规、系统可信等多重挑战,传统人工审查模式已难以满足国家级高安全性要求。 Gitee Scan…...
西门子G120XA变频器:数据中心能效革命的核心引擎
在数字经济爆发式增长的今天,数据中心已成为支撑社会运转的"数字心脏"。然而,其庞大的能耗需求与绿色低碳目标之间的矛盾日益凸显——尤其是冷却系统作为数据中心第二大能耗单元(占比约35%),正成为能效提升的…...
从零开始学习Spring Cloud Alibaba (一)
人狠话不多,直接开始少点屁话本着共同学习进步的目的和大家交流如有不对的地方望铁子们多多谅解 准备工具 开发工具 idea Java环境 jdk17 容器: docker Maven 3.8.6 仓库镜像阿里云 <mirror><id>alimaven</id><name>aliyun maven</name><…...
【C/C++】C++ 编程规范:101条规则准则与最佳实践
C 编程规范:101条规则准则与最佳实践 引言 C 是一门强大而复杂的语言,能高效控制硬件,也能写出优雅抽象。然而,正因其复杂性,项目中若缺乏统一规范,极易陷入混乱、难维护、易出错的泥潭。 本文总结了 10…...
PyTorch topk() 用法详解:取最大值
torch.topk(input, k) 返回张量中最大的 k 个元素以及它们在原张量中的 索引。 函数原型 torch.topk(input, k, dimNone, largestTrue, sortedTrue)参数说明: 参数说明input输入张量k要取出的前 k 个值dim指定沿哪个维度取值(默认是最后一维ÿ…...
毕业论文查重原理及降重方法
【30%的重复率有那么重要吗?】 老师说论文重读率必须低于30%,否则无法毕业! 如果您在专科或者普通本科学生,我只能这样一句话告诉你:你想多了~, 真的想多了~~~,一篇论文还不至于让你不能毕…...
Golang Kratos 系列:业务分层的若干思考(二)
上一篇文章简单讨论了领域层在Kratos中的使用,主要涉及引入领域层,将数据层和业务层之间的解耦,接下来讨论一个稍微全面一点的例子,在此基础上引入外部Api(主要是易变部分)的领域层下的情况。 我们同样可以…...
技术伦理之争:OpenAI陷抄袭风波,法院强制下架宣传视频
在AI巨头OpenAI宣布以65亿美元天价收购苹果前设计总监Jony Ive的硬件公司IO仅一个月后,一场抄袭指控将这家科技明星企业推上风口浪尖。 源自谷歌X实验室的初创企业IYO将OpenAI告上法庭,指控其窃取智能耳塞核心技术,并通过巨额收购试图掩盖抄袭…...
烟花爆竹生产企业库房存储安全风险预警系统
烟花爆竹生产企业库房存储安全风险预警系统是保障库房物资安全、规范作业流程、防范安全事故的重要技术手段,涵盖多个关键预警功能。 温湿度预警 在库房内安装温湿度传感器,这些传感器如同敏锐的“环境感知员”,能够实时监测库房内环境变…...
Jenkins+Jmeter+Ant接口持续集成
2025最新Jmeter接口测试从入门到精通(全套项目实战教程) 前言: 为什么要用Jmeter做接口测试: 当选择这套方案的时候,很多人会问,为什么选择Jmeter做Case管理?为什么不自己写框架?说…...
基于STM32的寻迹小车设计
标题:基于STM32的寻迹小车设计 内容:1.摘要 本文围绕基于STM32的寻迹小车设计展开。背景是随着自动化技术的发展,寻迹小车在工业巡检、物流运输等领域有广泛应用前景。目的是设计一款能稳定、准确寻迹的小车。方法上,以STM32微控制器为核心,…...
【150】基于SSM+Vue实现的小说阅读小程序(有文档)
系统介绍 基于SSMVue实现的小说阅读小程序采用前后端分离的架构方式,系统设计了管理员、用户两种角色,系统分为管理端、小程序端,管理端实现了管理员登录、个人中心、管理员管理、帮助中心管理、基础数据管理、论坛中心管理、公告资讯管理、…...
ValKey中使用SIMD指令优化bitcount命令
一、AVX/AVX2 的历史演进 随着计算机技术的飞速发展,数据处理需求呈指数级增长,SIMD(单指令多数据)技术应运而生。它通过一条指令同时处理多个数据元素,大幅提升计算效率,从早期的 MMX 技术起步࿰…...
leetcode114-二叉树展开为链表
leetcode 114 思路 用简单例子推导规律 不要一开始就看复杂的树,先从最简单的情况入手 案例一:只有一个节点 输入:1 输出:1不需要任何操作,直接返回 案例二:有两个节点 输入: 1/2输出&a…...
第七章 习题
1.给出下面表达式的逆波兰表示(后缀式): 3请将表达式-(ab)* (cd)-(abc)分别表示成三元式,间接三元式和四元式序列 四元式(Op,arg1,arg2,result) (,a,b,T1) (,c,d,T2) (*,T1,T2,T3) (uminus,T3,-,T4) (,a,b,T5) (,T5,c,T6) (-,T4,T6,r) 三元式 (op,arg1,arg2) (0) (,…...
Spring Ai Alibaba Graph实现五大工作流模式
Spring Ai Alibaba Graph实现五大工作流模式 概述 在 building-effective-agents 一文中,Anthropic将"智能体系统"(agentic systems),从架构层面分为 “工作流”(workflows)和 “智能体”(agents): 工作流…...