- websocket之netty-socketio高性能实时消息推送框架
奇怪的混子
websocket网络协议网络
简介websocket协议的出现,打破http那种只能由客户端发起请求,服务器响应的单项数据传输局面,采用websocket之后,可以由客户端推送数据到服务端,也可以由服务器主动推送数据到客户端,从而同时进行双向通信,便于数据实时更新推送netty-socketio便是为了方便我们进行websocket开发的框架,底层采用netty,提供了可靠高效的性能netty-socketio的官方githu
- 使用Jest和React Testing Library测试组件
小涵
前端框架react.js前端前端框架javascript开发语言typescript
使用Jest和ReactTestingLibrary测试组件在Web开发的世界中,测试和调试是确保应用程序可靠性和质量不可或缺的过程。在本文中,我们将探讨在React中进行测试和调试的各种方法论和工具,React是最受欢迎的用于构建用户界面的JavaScript库之一。推荐超级课程:本地离线DeepSeekAI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课
- 运维知识:如何让你的服务器达到最大化的加载速度和更稳定的运行?
浩特-ht
运维服务器linux
运维知识:如何让你的服务器达到最大化的加载速度和更稳定的运行?一、为什么需要服务器优化?性能问题:慢加载速度导致用户流失(Google数据:页面加载延迟1秒,转化率下降20%)。稳定性问题:硬件故障、资源耗尽、服务崩溃可能导致业务中断。目标:通过系统级优化、服务调优、监控预警实现QPS提升30%+和全年99.99%可用性。二、服务器优化核心维度系统层内核参数资源管理服务层Web服务器数据库网络层C
- 【websocket】socket.io 例子:chat服务
等风来不如迎风去
网络服务入门与实战socket.io
基于socket.io快速实现一个实时通讯应用看起来是一篇超牛的文章。Socket.IOChatAsimplechatdemoforSocket.IOHowtouse$npmi$npmstartAndpointyourbrowsertohttp://localhost:3000.Optionally,specifyaportbysupplyingthePORTenvvariable.Feature
- 采用Java实现下载图片、pdf加水印
百事老饼干
pdfjava
需求:点击下载---》弹窗加入水印(可加可不加,加上就有水印,没有不加水印),点击之后下载文件处理思路及流程前端:用户点击下载→收集水印参数→调用后端API→处理响应为Blob→触发文件下载后端:接收请求→验证权限→从Minio获取文件→判断文件类型→添加水印→返回处理后的文件流前端下载文件并添加水印importaxiosfrom'axios';constdownloadFileWithWater
- uni-app前端处理瀑布流V2写法
HWT?
uni-app
如果后端返回的数据是:[{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…}]这个形式一次性返回的话,前端要怎么处理分页并持续加载更多,下面将一步一步展开本文用到了uniapp提供的scro
- Python Playwright库全面详解
老胖闲聊
Pythonpython开发语言
Playwright是Microsoft开发的一个现代化的端到端测试和浏览器自动化库,支持Chromium、WebKit和Firefox浏览器。它提供了跨浏览器、跨平台的自动化能力,且具有高性能和可靠性。一、核心特性多浏览器支持:Chromium(Chrome,Edge)WebKit(Safari)Firefox跨平台支持:WindowsmacOSLinux多语言支持:JavaScript/Typ
- 关于Cesium的公交车路线可视化项目
熟悉不过
Cesium之公交车路线可视化javascriptCesiumWebGIS
已经很久没写有关WebGIS的文章了,最近一直在重新回顾有关前端的一些知识,毕竟作为一个学生,在平常有些东西很少能用到,今天我正式想写一个有关公交车可视化的项目,正好用来巩固一下我学到的知识,本项目使用的是最新的vue3脚手架,搭配TS进行构建,我将每天更新直至完成这个项目。首先创建一个vue框架,在终端使用npmcreatevue@latest,搭建vue脚手架,勾选TypeScript,rou
- 华为 eNSP 链路聚合:从面试问题到实战解析
不羁。。
每日呼吸服务器运维面试华为
我的个人主页我的专栏:网络通信安全系列、WEB渗透测试系列、内网攻防安全系列、网安红蓝对抗系列希望对网安感兴趣的小伙伴有所帮助!!!点赞收藏关注引言在网络技术领域,链路聚合是提升网络性能和可靠性的关键技术之一。华为eNSP作为网络工程师学习和实践的强大工具,为我们深入理解链路聚合提供了理想的环境。本文将围绕面试中常见的关于华为eNSP链路聚合、手工负载分担模式与LACP扩展配置的问题,进行系统的分
- 时序的约束
爬行的娲牛
时序约束时序约束
前端時間,學校的社團有人在問我關于對設計約束的問題,碰巧在網上看見一篇關于約束的問題,現狀貼如下:個人覺得有些觀點不是太認同,但是主要的思想是很好的!~对自己的设计的实现方式越了解,对自己的设计的时序要求越了解,对目标器件的资源分布和结构越了解,对EDA工具执行约束的效果越了解,那么对设计的时序约束目标就会越清晰,相应地,设计的时序收敛过程就会更可控。riple从最近一段时间工作和学习的成果中,我
- Maven工具学习使用(六)——聚合与继承
螺旋小蜗
Maven构建工具maven学习
Maven的聚合特性能够把项目的各个模块聚合在一起构建,而Maven的继承特性则能帮助抽取个模块相同的依赖和插件等配置,在简化POM的同时,还能促进各个模块配置的一致性。一般说来一个项目的子模块都应该使用同样的groupId,如果他们一起开发和发布,还应该使用同样的version,此外,它们的artifactId还应该使用一致的前缀,以方便同其他项目区分。对于聚合模块来说,其打包方式packagi
- jQuery - 获取内容和属性
宇哥资料
jQueryjquery前端javascript
jQuery拥有可操作HTML元素和属性的强大方法。jQueryDOM操作jQuery中非常重要的部分,就是操作DOM的能力。jQuery提供一系列与DOM相关的方法,这使访问和操作元素和属性变得很容易。DOM=DocumentObjectModel(文档对象模型)DOM定义访问HTML和XML文档的标准:"W3C文档对象模型独立于平台和语言的界面,允许程序和脚本动态访问和更新文档的内容、结构以及
- jQuery - 添加元素
宇哥资料
jQueryjquery前端javascript
通过jQuery,可以很容易地添加新元素/内容。添加新的HTML内容我们将学习用于添加新内容的四个jQuery方法:append()-在被选元素的结尾插入内容prepend()-在被选元素的开头插入内容after()-在被选元素之后插入内容before()-在被选元素之前插入内容jQueryappend()方法jQueryappend()方法在被选元素的结尾插入内容(仍然在该元素的内部)。实例$(
- 家庭画廊 - Home Gallery 开源项目使用指南
张涓曦Sea
家庭画廊-HomeGallery开源项目使用指南home-gallerySelf-hostedopen-sourcewebgallerytoviewyourphotosandvideosfeaturingmobile-friendly,taggingandAIpoweredimagediscovery项目地址:https://gitcode.com/gh_mirrors/ho/home-galle
- Vue 3 自定义指令:实现自动滚动效果
朝阳581
vue.js前端javascript
Vue3自定义指令:实现自动滚动效果的深度解析在前端开发中,尤其是在使用Vue3框架构建用户界面时,自定义指令为我们提供了一种强大且灵活的方式来扩展HTML元素的行为。今天,我们将深入探讨一个实用的Vue3自定义指令——v-auto-scroll,它能够实现文本内容在固定宽度容器中的自动滚动效果,特别适用于展示较长的文本内容而空间有限的场景。指令功能概述v-auto-scroll指令的主要功能是监
- 利用 @eslint/eslintrc 实现 ESLint9的适配
朝阳581
vue.jsjavascript前端
深度解析:利用@eslint/eslintrc实现ESLint的高效配置管理在前端开发领域,代码质量和一致性是至关重要的。ESLint作为一款流行的代码检查工具,帮助开发者发现代码中的潜在问题并保持代码风格的一致性。而随着项目的复杂度增加和团队规模的扩大,如何高效地管理和定制ESLint配置成为了一个关键问题。今天,我们将深入探讨如何利用@eslint/eslintrc插件结合实际的ESLint配
- Tauri 2.0.0-rc 安装全局快捷方式插件
朝阳581
rustjavascript
Tauri2.0.0-rc安装全局快捷方式插件Tauri2.0.0-rc引入了全局快捷方式插件允许你在你的应用中注册全局快捷方式,并在用户按下这些快捷方式时触发JavaScript回调。首先,你需要在你的Rust项目中安装全局快捷方式插件。在Cargo.toml文件中添加依赖。tauri-plugin-global-shortcut={git="https://github.com/tauri-a
- selenium基本方法
王大傻0928
自动化测试
基本方法fromseleniumimportwebdriver#启动谷歌浏览器d=webdriver.Chrome()#打开百度首页d.get('https://www.baidu.com/')'''1.send_keys方法:此方法类似于模拟键盘输入''''''以在百度首页搜索框输入selenium为例'''#搜索输入框输入字符‘selenium’d.find_element_by_id('kw
- ESLint报错:Could not find config file.
kart jim
eslintvscode
如果你的ESLint的版本大于8,同时使用.eslinrc.js和.eslintignore作为配置文件,且目前用的是VSCODE,就有可能遇到报错:Couldnotfindconfigfile.这个是因为VSCode中ESLint插件的配置eslint.useFlatConfig的问题,其默认值是空值导致ESLint默认使用flat的配置方式,在VSCode的配置文件里加上:{"eslint.u
- MyBatis-plus 分页查询
FearlessVoyager
数据库mybatisjavaspringboot
一、分页查询常用方式在MyBatis-Plus中最常用的分页查询的方法是结合IPage接口和Page类来实现,也是MyBatis-Plus官方推荐的方式。同时还支持使用PageHelper插件进行分页查询,但这通常用于MyBatis原生集成,而不是MyBatis-Plus。二、使用IPage进行分页查询2.1IPage分页查询原理MyBatis-Plus的IPage分页插件主要是通过AOP(面向切
- 【大前端系列02】HTML5 Canvas绘图技术全解析:从入门到精通
秦若宸
大前端系列前端html5html
HTML5Canvas绘图技术全解析系列:「全栈进化:大前端开发完全指南」系列第2篇(共5篇)核心:Canvas绘图技术的基本原理与高级应用技巧引言Canvas是HTML5引入的绘图API,提供可编程的矩形绘图区域,使用JavaScript动态生成图形、图表、动画效果和图像处理。Canvas的本质是一个位图画布,每个像素都可以被精确控制。为什么学习Canvas?创建复杂视觉效果和交互体验高性能图形
- Selenium文件上传
bbppooi
测试学习selenium测试工具模块测试功能测试python
在Web自动化测试中,文件上传是一项常见的任务。不同的网站和前端技术可能导致上传方式有所不同,因此需要采用不同的方法进行处理。方法1:使用send_keys()直接上传(最常用)适用场景:页面中有标准的标签。不需要弹出Windows文件选择对话框,直接选中文件即可上传。fromseleniumimportwebdriverfromselenium.webdriver.common.byimport
- Elasticsearch DSL查询语法
FearlessVoyager
elasticsearchelasticsearchjenkins大数据
一、简介ElasticsearchDSL提供了极其丰富的查询功能,从简单的全文搜索到复杂的地理空间查询、嵌套文档查询和聚合分析。DSL查询的基本结构包含以下几个主要部分:{"query":{...},//查询条件(核心部分)"aggs":{...},//聚合分析"sort":[...],//排序规则"from":0,//分页起始位置"size":10,//返回结果数量"_source":{...}
- JSON简介及C++中的JSON使用指南
yy__xzz
jsonc++开发语言
1.什么是JSON?JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,采用文本格式存储和传输数据。它易于人阅读和编写,同时也易于机器解析和生成。JSON广泛应用于WebAPI、配置文件、数据存储等领域。JSON的特点轻量级:相比XML,JSON更加简洁,占用更少的带宽。易读性:采用键值对(key:value)结构,类似字典或哈希表。跨语言支持:几乎所有编程语言
- CSS 技巧与案例详解:开篇介绍
@大迁世界
CSS技巧与案例详解css前端
在现代前端开发中,CSS(层叠样式表)作为网页设计和布局的核心技术,扮演着至关重要的角色。无论是初学者还是经验丰富的开发者,掌握并灵活运用各种CSS技巧都能大大提升开发效率和页面效果。本系列文章《CSS技巧与案例详解》旨在为大家提供一站式的CSS知识速查与实用案例,帮助大家更好地理解和应用CSS。系列内容简介本系列文章分为多个部分,每个部分都详细解析了CSS的各种实用技巧和经典案例。以下是我们将要
- 「HTML5+Canvas实战」星际空战游戏开发 - 纯前端实现 & 源码即开即用【附演示视频】
果冻kk
前端html5小游戏
纯前端实现星际空战游戏【简易版】博主上次分享的简易版飞机大战收到了不少建议,今天再给大家来一波福利!带来全新升级的飞机大战进阶版!不仅拥有更丰富的游戏机制和更精美的游戏画面,还加入了超燃的BOSS战斗系统。源码完全免费开放,拿来即用无门槛,欢迎感兴趣的小伙伴下载源码。源码已附文章末尾除了本文介绍的纯前端版本外,我们还开发了一个完整的后端版本,采用Java技术栈实现,包含用户登录注册(安全配置、认证
- Ajax 入门级
晚枫~
Ajaxajax
AJAX全称:AsynchronousJavascriptAndXML(异步JS和XML)XML可扩展标记语言AJAX优缺点优点:可以无需刷新页面而与服务器端进行通信。允许你根据用户事件来更新部分页面内容。(事件:表单事件、文档事件、鼠标事件、键盘事件)缺点:没有浏览历史,不能回退存在跨域问题(同源)SEO不友好(SEO:搜索引擎优化)Express:基于node.js平台,快速、开放、极简的we
- 面试的时候问到了HTML5的新特性有哪些
申朝先生
前端面试问题html5信息可视化前端
HTML5是对HTML的重要更新,它引入了许多新特性和改进,使Web开发变得更加灵活和强大。以下是一些HTML5的关键新特性:1.新的文档结构元素HTML5引入了一些新的语义化元素,帮助开发者更清晰地结构化网页内容,改善了可访问性和SEO。:定义文档的头部区域,通常包含标题、导航等。:定义文档的底部区域,通常包含版权、联系信息等。:表示一个独立的内容块,通常可以被单独分发或重用(如博客文章、新闻报
- [MRCTF2020]套娃 1
succ3
BUUCTFapachephpweb安全
知识点:Client-ip,data://,$_SERVER总结我们可以传个b+u+p+t=23333%0a,因为php在解析变量名的时候会把+、%20、*、{、[解析为_,具体可以看:https://www.freebuf.com/articles/web/213359.html有一段fuckjs代码,可以放到Console里面运行。告诉我们要post传个Merak可以看到它有三个地方过滤:第一
- WEBRTC RFC5766-TURN协议
伍意
webrtcWEBRTCRFC5766TURNCOTURN
摘要如果一台主机处于NAT后面,那么在一定条件下两台主机无法之间进行通讯。在这种条件下,那么使用中继服务提供通讯是有必要的。这个规范定义了一个名为TURN(使用中继穿越NAT)的协议,它允许一台主机使用中继服务与对端进行报文传输。TURN不同于其它中继协议在于它允许客户机使用一个中继地址与多个对端同时进行通讯。TURN协议也是ICE(交互式连接建立)协议的组成部分,也可以单独使用。1、简介一个处于
- 设计模式介绍
tntxia
设计模式
设计模式来源于土木工程师 克里斯托弗 亚历山大(http://en.wikipedia.org/wiki/Christopher_Alexander)的早期作品。他经常发表一些作品,内容是总结他在解决设计问题方面的经验,以及这些知识与城市和建筑模式之间有何关联。有一天,亚历山大突然发现,重复使用这些模式可以让某些设计构造取得我们期望的最佳效果。
亚历山大与萨拉-石川佳纯和穆雷 西乐弗斯坦合作
- android高级组件使用(一)
百合不是茶
androidRatingBarSpinner
1、自动完成文本框(AutoCompleteTextView)
AutoCompleteTextView从EditText派生出来,实际上也是一个文本编辑框,但它比普通编辑框多一个功能:当用户输入一个字符后,自动完成文本框会显示一个下拉菜单,供用户从中选择,当用户选择某个菜单项之后,AutoCompleteTextView按用户选择自动填写该文本框。
使用AutoCompleteTex
- [网络与通讯]路由器市场大有潜力可挖掘
comsci
网络
如果国内的电子厂商和计算机设备厂商觉得手机市场已经有点饱和了,那么可以考虑一下交换机和路由器市场的进入问题.....
这方面的技术和知识,目前处在一个开放型的状态,有利于各类小型电子企业进入
&nbs
- 自写简单Redis内存统计shell
商人shang
Linux shell统计Redis内存
#!/bin/bash
address="192.168.150.128:6666,192.168.150.128:6666"
hosts=(${address//,/ })
sfile="staticts.log"
for hostitem in ${hosts[@]}
do
ipport=(${hostitem
- 单例模式(饿汉 vs懒汉)
oloz
单例模式
package 单例模式;
/*
* 应用场景:保证在整个应用之中某个对象的实例只有一个
* 单例模式种的《 懒汉模式》
* */
public class Singleton {
//01 将构造方法私有化,外界就无法用new Singleton()的方式获得实例
private Singleton(){};
//02 申明类得唯一实例
priva
- springMvc json支持
杨白白
json springmvc
1.Spring mvc处理json需要使用jackson的类库,因此需要先引入jackson包
2在spring mvc中解析输入为json格式的数据:使用@RequestBody来设置输入
@RequestMapping("helloJson")
public @ResponseBody
JsonTest helloJson() {
- android播放,掃描添加本地音頻文件
小桔子
最近幾乎沒有什麽事情,繼續鼓搗我的小東西。想在項目中加入一個簡易的音樂播放器功能,就像華為p6桌面上那麼大小的音樂播放器。用過天天動聽或者QQ音樂播放器的人都知道,可已通過本地掃描添加歌曲。不知道他們是怎麼實現的,我覺得應該掃描設備上的所有文件,過濾出音頻文件,每個文件實例化為一個實體,記錄文件名、路徑、歌手、類型、大小等信息。具體算法思想,
- oracle常用命令
aichenglong
oracledba常用命令
1 创建临时表空间
create temporary tablespace user_temp
tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local
- 25个Eclipse插件
AILIKES
eclipse插件
提高代码质量的插件1. FindBugsFindBugs可以帮你找到Java代码中的bug,它使用Lesser GNU Public License的自由软件许可。2. CheckstyleCheckstyle插件可以集成到Eclipse IDE中去,能确保Java代码遵循标准代码样式。3. ECLemmaECLemma是一款拥有Eclipse Public License许可的免费工具,它提供了
- Spring MVC拦截器+注解方式实现防止表单重复提交
baalwolf
spring mvc
原理:在新建页面中Session保存token随机码,当保存时验证,通过后删除,当再次点击保存时由于服务器端的Session中已经不存在了,所有无法验证通过。
1.新建注解:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
- 《Javascript高级程序设计(第3版)》闭包理解
bijian1013
JavaScript
“闭包是指有权访问另一个函数作用域中的变量的函数。”--《Javascript高级程序设计(第3版)》
看以下代码:
<script type="text/javascript">
function outer() {
var i = 10;
return f
- AngularJS Module类的方法
bijian1013
JavaScriptAngularJSModule
AngularJS中的Module类负责定义应用如何启动,它还可以通过声明的方式定义应用中的各个片段。我们来看看它是如何实现这些功能的。
一.Main方法在哪里
如果你是从Java或者Python编程语言转过来的,那么你可能很想知道AngularJS里面的main方法在哪里?这个把所
- [Maven学习笔记七]Maven插件和目标
bit1129
maven插件
插件(plugin)和目标(goal)
Maven,就其本质而言,是一个插件执行框架,Maven的每个目标的执行逻辑都是由插件来完成的,一个插件可以有1个或者几个目标,比如maven-compiler-plugin插件包含compile和testCompile,即maven-compiler-plugin提供了源代码编译和测试源代码编译的两个目标
使用插件和目标使得我们可以干预
- 【Hadoop八】Yarn的资源调度策略
bit1129
hadoop
1. Hadoop的三种调度策略
Hadoop提供了3中作业调用的策略,
FIFO Scheduler
Fair Scheduler
Capacity Scheduler
以上三种调度算法,在Hadoop MR1中就引入了,在Yarn中对它们进行了改进和完善.Fair和Capacity Scheduler用于多用户共享的资源调度
2. 多用户资源共享的调度
- Nginx使用Linux内存加速静态文件访问
ronin47
Nginx是一个非常出色的静态资源web服务器。如果你嫌它还不够快,可以把放在磁盘中的文件,映射到内存中,减少高并发下的磁盘IO。
先做几个假设。nginx.conf中所配置站点的路径是/home/wwwroot/res,站点所对应文件原始存储路径:/opt/web/res
shell脚本非常简单,思路就是拷贝资源文件到内存中,然后在把网站的静态文件链接指向到内存中即可。具体如下:
- 关于Unity3D中的Shader的知识
brotherlamp
unityunity资料unity教程unity视频unity自学
首先先解释下Unity3D的Shader,Unity里面的Shaders是使用一种叫ShaderLab的语言编写的,它同微软的FX文件或者NVIDIA的CgFX有些类似。传统意义上的vertex shader和pixel shader还是使用标准的Cg/HLSL 编程语言编写的。因此Unity文档里面的Shader,都是指用ShaderLab编写的代码,然后我们来看下Unity3D自带的60多个S
- CopyOnWriteArrayList vs ArrayList
bylijinnan
java
package com.ljn.base;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* 总述:
* 1.ArrayListi不是线程安全的,CopyO
- 内存中栈和堆的区别
chicony
内存
1、内存分配方面:
堆:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式是类似于链表。可能用到的关键字如下:new、malloc、delete、free等等。
栈:由编译器(Compiler)自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中
- 回答一位网友对Scala的提问
chenchao051
scalamap
本来准备在私信里直接回复了,但是发现不太方便,就简要回答在这里。 问题 写道 对于scala的简洁十分佩服,但又觉得比较晦涩,例如一例,Map("a" -> List(11,111)).flatMap(_._2),可否说下最后那个函数做了什么,真正在开发的时候也会如此简洁?谢谢
先回答一点,在实际使用中,Scala毫无疑问就是这么简单。
- mysql 取每组前几条记录
daizj
mysql分组最大值最小值每组三条记录
一、对分组的记录取前N条记录:例如:取每组的前3条最大的记录 1.用子查询: SELECT * FROM tableName a WHERE 3> (SELECT COUNT(*) FROM tableName b WHERE b.id=a.id AND b.cnt>a. cnt) ORDER BY a.id,a.account DE
- HTTP深入浅出 http请求
dcj3sjt126com
http
HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP目前协议的版本是1.1.HTTP是一种无状态的协议,无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后We
- 判断MySQL记录是否存在方法比较
dcj3sjt126com
mysql
把数据写入到数据库的时,常常会碰到先要检测要插入的记录是否存在,然后决定是否要写入。
我这里总结了判断记录是否存在的常用方法:
sql语句: select count ( * ) from tablename;
然后读取count(*)的值判断记录是否存在。对于这种方法性能上有些浪费,我们只是想判断记录记录是否存在,没有必要全部都查出来。
- 对HTML XML的一点认识
e200702084
htmlxml
感谢http://www.w3school.com.cn提供的资料
HTML 文档中的每个成分都是一个节点。
节点
根据 DOM,HTML 文档中的每个成分都是一个节点。
DOM 是这样规定的:
整个文档是一个文档节点
每个 HTML 标签是一个元素节点
包含在 HTML 元素中的文本是文本节点
每一个 HTML 属性是一个属性节点
注释属于注释节点
Node 层次