安全点是什么?为什么有人会写Thread.sleep(0)这样的代码?Thread.sleep(0)的作用是什么?先看下面的代码实例:for(inti=0,intj=0;i
Spring MVC请求处理(五) - 拦截器
buzzerrookie
DispatcherServlet的doDispatch方法在调用处理器处理请求前后分别调用了拦截器的前置和后置处理方法,代码如下所示:if(!mappedHandler.applyPreHandle(processedRequest,response)){return;}//Actuallyinvokethehandler.mv=ha.handle(processedRequest,respon
【Java】已解决:MQBrokerException: CODE: 1 DESC: create mapped file failed, server is busy or broke
屿小夏
java开发语言
文章目录一、分析问题背景场景示例:二、可能出错的原因三、错误代码示例错误分析:四、正确代码示例代码改进说明:五、注意事项在分布式消息中间件如ApacheRocketMQ的使用过程中,MQBrokerException是一个开发者可能会遇到的常见异常之一。特别是CODE:1DESC:createmappedfilefailed,serverisbusyorbroke这个错误,通常指示了在消息存储过程
XILINX AXI总线
热爱学习地派大星
网络fpga开发fpga嵌入式硬件
简介本文主要针对XILINX使用的AXILite总线对寄存器读写的使用,首先对AXI总线做详细介绍AXI总线AXI是一种总线协议,可以挂在多个master和slave,AXI总线包括3中类型接口,介绍如下:AXI4:(Forhigh-performancememory-mappedrequirements.)主要面向高性能地址映射通信的需求,是面向地址映射的接口,允许最大256轮的数据突发传输;A
内存映射文件(Memory-Mapped Files)在Java中的应用详解
大骨熬汤
java开发语言
内存映射文件(Memory-MappedFiles)在Java中的应用详解目录引言内存映射文件的基本概念什么是内存映射文件?内存映射文件与直接内存读取的区别内存映射文件的优势性能提升低内存开销并发访问与共享内存简化文件I/O操作内存映射文件的挑战内存管理复杂性线程安全问题平台依赖性文件大小限制典型使用场景大文件处理与解析数据库系统中的应用文件缓存与快速访问进程间通信与共享内存游戏开发中的资源管理J
Springboot-MDC+logback实现日志追踪
W_Meng_H
#SpringBoot经验总结springbootjavalogback
一、MDC介绍MDC(MappedDiagnosticContexts)映射诊断上下文,该特征是logback提供的一种方便在多线程条件下的记录日志的功能。某些应用程序采用多线程的方式来处理多个用户的请求。在一个用户的使用过程中,可能有多个不同的线程来进行处理。典型的例子是Web应用服务器。当用户访问某个页面时,应用服务器可能会创建一个新的线程来处理该请求,也可能从线程池中复用已有的线程。在一个用
Java应用Memory Mapped Files机制
吴代庄
Javajavalinux
Java中利用MemoryMappedFiles(内存映射文件)机制进行顺序写操作是一种高效的文件处理方式,特别是在处理大文件时。这种技术允许我们将文件的一部分或全部映射到内存中,从而可以直接通过内存地址来访问文件内容,而不是通过传统的文件I/O操作。基本原理内存映射文件的核心思想是操作系统提供的一种将文件内容映射到进程地址空间的机制。这意味着应用程序可以通过内存地址来访问文件数据,而不需要使用系
【日志】MDC 一个Java 项目中用于日志跟踪的工具
CodeCharm——CC
java开发java数据库开发语言日志
MDC是一个在Java项目中用于日志跟踪的工具,它允许你在多线程环境下关联和传递特定的上下文信息。下面我详细解释一下MDC的概念、原理、作用以及如何实现和使用:一、MDC是什么?MDC(MappedDiagnosticContext)是一个线程本地的、可维护的、可传递的上下文环境。在Java中,MDC主要用于在应用程序的不同组件之间传递日志上下文信息,例如用户会话ID、请求ID、用户身份信息等。M
Linux中内存映射区(mmap函数)
落落落sss
java算法开发语言
mmap函数:作用:创建一个文件的共享映射区函数原型:void*mmap(void*addr,size_tlength,intprot,intflags,intfd,off_toffset);返回值;Onsuccess,mmap()returnsapointertothemappedarea.Onerror,thevalueMAP_FAILED(thatis,(void*)-1)isreturne
2018-12-28
风亦可
PlanningaBankRobbery(056)A:Allright,sothisiswhatwe’regonnado.I’vecarefullymappedthisout,sodon’tscrewitup.Mr.Rabbit,youandMr.Foxwillgointothebankwearingtheseuniforms.Wemanagedtogetreplicasoftheonethegu
LeetCode639. Decode Ways II——动态规划
叶卡捷琳堡
动态规划算法开发语言leetcode数据结构
文章目录一、题目二、题解一、题目AmessagecontaininglettersfromA-Zcanbeencodedintonumbersusingthefollowingmapping:‘A’->“1”‘B’->“2”…‘Z’->“26”Todecodeanencodedmessage,allthedigitsmustbegroupedthenmappedbackintolettersusi
【经验】C++|利用 Windows API,通过文件句柄获取文件路径的两种方式
shandianchengzi
代码#琐碎小记录c++window
方法一主要参考博客:根据文件句柄获得文件名(这篇超级清晰,就是有一点点小问题)通过文件句柄获得文件路径(这篇不是很好用,但是思路大体是一致的)主要思路:根据HANDLE创建映射文件,调用GetMappedFileName获得一个DosDevice路径。然后GetLogicaDriveStrings获得盘符字串,依次读取盘符字串获得对应的DosDevice路径,看之前的DosDevice路径中是否有
LeetCode91. Decode Ways——动态规划
叶卡捷琳堡
动态规划算法数据结构leetcodec++
文章目录一、题目二、题解一、题目AmessagecontaininglettersfromA-Zcanbeencodedintonumbersusingthefollowingmapping:‘A’->“1”‘B’->“2”…‘Z’->“26”Todecodeanencodedmessage,allthedigitsmustbegroupedthenmappedbackintolettersusi
Unity内置Shader解读7——Lightmapped
ShawnWeasley
1.Shader在什么情况下使用Lightmapped通常用在烘焙贴图,就是比如Unity烘焙出来的结果,需要渲染的话烘焙的贴图就得用这个shader。Lightmapped系列基本就下面几个,基本都在旧的上面加了一张Lightmapped贴图采样,然后混合,因此只分析一个基础的,VertexLit系列比较难我们放最后讨论。image.png2.Shader的价值(用的多不多),Shader的难度
七牛云对象存储以目录的方式挂载于Windows / Linux服务器
青阳Boy
Windows服务器Windows服务器上需要安装相关的软件,可通过图形界面进行下载和安装1、在服务器上安装TntDrive软件:下载链接:https://tntdrive.com/download/tntdrive-x64-4-8-7.exe2、配置TntDrive单击“AddNewMappedDrive”,进入到配置界面:PS:配置时有以下几个注意点StorageType:S3Compatib
bert+np.memap+faiss文本相似度匹配 topN
木下瞳
NLP机器学习深度学习模型bertfaiss人工智能
目录任务代码结果说明任务使用bert-base-chinese预训练模型将文本数据向量化后,使用np.memap进行保存,再使用faiss进行相似度匹配出每个文本与它最相似的topN此篇文章使用了地址数据,目的是为了跑通这个流程,数据可以自己构建模型下载:bert预训练模型下载-CSDN博客np.memap:是NumPy库中的一种内存映射文件(Memory-MappedFile)对象,它允许你将硬
利用Idea重构功能及Java8语法特性——优化深层嵌套代码
Java_苏先生
当遇到深层嵌套代码,如for,if,lambda表达式或内部类及这些代码的组合,这时我们可以通过Java8的语法特性来进行优化。下面的代码是一个嵌套循环的示例。publicMappedFieldgetMappedField(finalStringstoredName){for(finalMappedFieldmf:persistenceFields){for(finalStringn:mf.get
java.nio.channels.FileChannel.map读取超过2G文件的解决方案
Vashon_杨博程
javajavanio开发语言
问题来源:在实现文件分片上传,需要将文件md5加密,其中加密用到java.nio.channels.FileChannel.map读取文件。FileChannel.map源码如下:publicMappedByteBuffermap(MapModevar1,longvar2,longvar4)throwsIOException{this.ensureOpen();if(var1==null){thr
SpringBoot log4j2日志追踪
Java_Chuck
springbootlog4j2springbootlog4j2
写在前面本文只讨论非分布式体系的日志追踪,如果项目使用了微服务、RPC等分布式框架的话,日志追踪有很成熟的框架,Google的Dapper,阿里的EagleEye,Twitter基于Google的Dapper论文开发的Zipkin通过本文将了解到什么是MDC、MDC应用中存在的问题、如何解决存在的问题MDC介绍简介:MDC(MappedDiagnosticContext,映射调试上下文)是log4
NIO_通道的数据传输与内存映射文件
Shaw_Young
packagecom.young.nio.day01;importorg.junit.Test;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.nio.ByteBuffer;importjava.nio.MappedByteBuffer;importj
mybatis重要组件
7ee4c95bcc68
mybatis重要组件Configuration类是用于管理MyBatis全局配置文件的关系类Environment->DataSourceMapmappedStatementsSqlSessionFactorySqlSessionFactory是Session的管理工厂接口,用于开启SqlSessionSqlSessionSqlSession中包含了许多面向开发者的调用方法,如selectOne
21.java单元测试和日志技术
冲天锦鲤
java
文章目录`单元测试`步骤一:导入JUnit库步骤二:编写测试类步骤三:运行测试步骤四:分析测试结果示例项目注解`程序日志`1.JavaLogging(java.util.logging)2.Log4j3.SLF4J(SimpleLoggingFacadeforJava)选择日志框架的考虑因素:`log4j`配置文件Loggers和Appenders日志级别使用MDC(MappedDiagnosti
java-06.Spring Boot 使用 MDC 进行日志追踪
一年春又来
javaspringbootspring
转载自Springboot使用MDC进行日志追踪_springboot日志追踪_繁华尽头满是殇的博客-CSDN博客与之不同的是本文配置的是过滤器而不是拦截器前言MDC(MappedDiagnosticContext)是一个可以追踪程序上下文日志的东西,是springboot项目自带的org.slf4j包下的类,无需引入额外依赖即可使用。一、为什么要跟踪日志假如我们需要分析用户a的请求日志,但是程序
* What went wrong: Could not open settings remapped class cache for bq3hllkgb26p0nrblf5gh8d37
陈大头铃儿响叮当
Flutter
*Whatwentwrong:Couldnotopensettingsremappedclasscacheforbq3hllkgb26p0nrblf5gh8d37(C:\Users\Admin\.gradle\caches\5.6.2\scripts-remapped\settings_dji3rc5a2usjoml0dvda22q2o\bq3hllkgb26p0nrblf5gh8d37\sett
rocket mq 底层存储源码分析(2)-业务消息持久化
萝卜头4lbt
本章主要详细分析Rocketmq消息持久化底层源码实现。先讲解几个核心的业务抽象类MappedFile,该类为一个存储文件的直接内存映射业务抽象类,通过操作该类,可以把消息字节写入pagecache缓存区(commit),或者原子性的消息刷盘(flush)publicclassMappedFile{protectedfinalAtomicIntegerwrotePosition;protected
NGS 数据mapping 算法简介
茄子_0937
简介取得测序序列信息后,在有参考基因的情况下我们通过Mapping到参考基因组进行后续分析;没有则重头拼接序列。一般而言,基因组的组装将比readalignment消耗更多的计算资源。然而,readalignment也有一些基础的挑战。参考基因组,组装不完整,存在一些gap。来源这些gap的read将unmapped或是错误map到相似区域。基因组存在重复区,reads会map到多个区域,比对软件
Learner Agency in the early years
Anna5娜娜
Disscuss:1.ThenatureoflearneragencyWhyislearneragencyimportant2.Themutuallybeneficalrelationshipbetweenthelearnerandtheirenvironmentin“agenticengagement3.theroleofeducatorWhatisthelearneragency?图片发自Ap
2.10、mybatis源码分析之sql执行过程以select为例
小manong
在研究select执行过程之前先来介绍一个重要的类一、SqlNode和SqlSource在myabtis初始化过程中可以知道,映射配置文件中的sql节点会被解析为MappedStatement对象,其中sql语句解析成SqlSource对象,sql语句中定义的Sql节点、文本节点等,则由SqlNode接口的响应实现。1、SqlSource接口SqlSource接口结构publicinterface
【精讲】PCIe基础篇——Memory & IO 地址空间
咸鱼弟
PCIepci-e计算机网络bios
在早期的PC中,IO设备中的内部寄存器/存储是通过IO地址空间(由Intel定义)来访问的。然而,由于与IO地址空间相关的一些限制和不良影响(我们在这里不讨论),IO地址空间很快就失去了软件和硬件供应商的青睐。这导致IO设备的内部寄存器/存储被映射到内存地址空间(通常称为MemorymappedIO,或MMIO)。然而,由于早期的软件是使用IC地址空间来访问IO设备上的内部寄存器/存储,因此在内存
桌面上有多个球在同时运动,怎么实现球之间不交叉,即碰撞?
换个号韩国红果果
html小球碰撞
稍微想了一下,然后解决了很多bug,最后终于把它实现了。其实原理很简单。在每改变一个小球的x y坐标后,遍历整个在dom树中的其他小球,看一下它们与当前小球的距离是否小于球半径的两倍?若小于说明下一次绘制该小球(设为a)前要把他的方向变为原来相反方向(与a要碰撞的小球设为b),即假如当前小球的距离小于球半径的两倍的话,马上改变当前小球方向。那么下一次绘制也是先绘制b,再绘制a,由于a的方向已经改变
《高性能HTML5》读后整理的Web性能优化内容
白糖_
html5
读后感
先说说《高性能HTML5》这本书的读后感吧,个人觉得这本书前两章跟书的标题完全搭不上关系,或者说只能算是讲解了“高性能”这三个字,HTML5完全不见踪影。个人觉得作者应该首先把HTML5的大菜拿出来讲一讲,再去分析性能优化的内容,这样才会有吸引力。因为只是在线试读,没有机会看后面的内容,所以不胡乱评价了。
[JShop]Spring MVC的RequestContextHolder使用误区
dinguangx
jeeshop商城系统jshop电商系统
在spring mvc中,为了随时都能取到当前请求的request对象,可以通过RequestContextHolder的静态方法getRequestAttributes()获取Request相关的变量,如request, response等。 在jshop中,对RequestContextHolder的
算法之时间复杂度
周凡杨
java算法时间复杂度效率
在
计算机科学 中,
算法 的时间复杂度是一个
函数 ,它定量描述了该算法的运行时间。这是一个关于代表算法输入值的
字符串 的长度的函数。时间复杂度常用
大O符号 表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是
渐近 的,它考察当输入值大小趋近无穷时的情况。
这样用大写O()来体现算法时间复杂度的记法,
Java事务处理
g21121
java
一、什么是Java事务 通常的观念认为,事务仅与数据库相关。 事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状
Linux awk命令详解
510888780
linux
一. AWK 说明
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。
awk的处理文本和数据的方式:它逐行扫描文件,从第一行到
android permission
布衣凌宇
Permission
<uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES" ></uses-permission>允许读写访问"properties"表在checkin数据库中,改值可以修改上传
<uses-permission android:na
Oracle和谷歌Java Android官司将推迟
aijuans
javaoracle
北京时间 10 月 7 日,据国外媒体报道,Oracle 和谷歌之间一场等待已久的官司可能会推迟至 10 月 17 日以后进行,这场官司的内容是 Android 操作系统所谓的 Java 专利权之争。本案法官 William Alsup 称根据专利权专家 Florian Mueller 的预测,谷歌 Oracle 案很可能会被推迟。 该案中的第二波辩护被安排在 10 月 17 日出庭,从目前看来
linux shell 常用命令
antlove
linuxshellcommand
grep [options] [regex] [files]
/var/root # grep -n "o" *
hello.c:1:/* This C source can be compiled with:
Java解析XML配置数据库连接(DOM技术连接 SAX技术连接)
百合不是茶
sax技术Java解析xml文档dom技术XML配置数据库连接
XML配置数据库文件的连接其实是个很简单的问题,为什么到现在才写出来主要是昨天在网上看了别人写的,然后一直陷入其中,最后发现不能自拔 所以今天决定自己完成 ,,,,现将代码与思路贴出来供大家一起学习
XML配置数据库的连接主要技术点的博客;
JDBC编程 : JDBC连接数据库
DOM解析XML: DOM解析XML文件
SA
underscore.js 学习(二)
bijian1013
JavaScriptunderscore
Array Functions 所有数组函数对参数对象一样适用。1.first _.first(array, [n]) 别名: head, take 返回array的第一个元素,设置了参数n,就
plSql介绍
bijian1013
oracle数据库plsql
/*
* PL/SQL 程序设计学习笔记
* 学习plSql介绍.pdf
* 时间:2010-10-05
*/
--创建DEPT表
create table DEPT
(
DEPTNO NUMBER(10),
DNAME NVARCHAR2(255),
LOC NVARCHAR2(255)
)
delete dept;
select
【Nginx一】Nginx安装与总体介绍
bit1129
nginx
启动、停止、重新加载Nginx
nginx 启动Nginx服务器,不需要任何参数u
nginx -s stop 快速(强制)关系Nginx服务器
nginx -s quit 优雅的关闭Nginx服务器
nginx -s reload 重新加载Nginx服务器的配置文件
nginx -s reopen 重新打开Nginx日志文件
spring mvc开发中浏览器兼容的奇怪问题
bitray
jqueryAjaxspringMVC浏览器上传文件
最近个人开发一个小的OA项目,属于复习阶段.使用的技术主要是spring mvc作为前端框架,mybatis作为数据库持久化技术.前台使用jquery和一些jquery的插件.
在开发到中间阶段时候发现自己好像忽略了一个小问题,整个项目一直在firefox下测试,没有在IE下测试,不确定是否会出现兼容问题.由于jquer
Lua的io库函数列表
ronin47
lua io
1、io表调用方式:使用io表,io.open将返回指定文件的描述,并且所有的操作将围绕这个文件描述
io表同样提供三种预定义的文件描述io.stdin,io.stdout,io.stderr
2、文件句柄直接调用方式,即使用file:XXX()函数方式进行操作,其中file为io.open()返回的文件句柄
多数I/O函数调用失败时返回nil加错误信息,有些函数成功时返回nil
java-26-左旋转字符串
bylijinnan
java
public class LeftRotateString {
/**
* Q 26 左旋转字符串
* 题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
* 如把字符串abcdef左旋转2位得到字符串cdefab。
* 请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。
*/
pu
《vi中的替换艺术》-linux命令五分钟系列之十一
cfyme
linux命令
vi方面的内容不知道分类到哪里好,就放到《Linux命令五分钟系列》里吧!
今天编程,关于栈的一个小例子,其间我需要把”S.”替换为”S->”(替换不包括双引号)。
其实这个不难,不过我觉得应该总结一下vi里的替换技术了,以备以后查阅。
1
所有替换方案都要在冒号“:”状态下书写。
2
如果想将abc替换为xyz,那么就这样
:s/abc/xyz/
不过要特别
[轨道与计算]新的并行计算架构
comsci
并行计算
我在进行流程引擎循环反馈试验的过程中,发现一个有趣的事情。。。如果我们在流程图的每个节点中嵌入一个双向循环代码段,而整个流程中又充满着很多并行路由,每个并行路由中又包含着一些并行节点,那么当整个流程图开始循环反馈过程的时候,这个流程图的运行过程是否变成一个并行计算的架构呢?
重复执行某段代码
dai_lm
android
用handler就可以了
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
public void run() {
update();
handler.postDelayed(this, 5000);
}
};
开始计时
h
Java实现堆栈(list实现)
datageek
数据结构——堆栈
public interface IStack<T> {
//元素出栈,并返回出栈元素
public T pop();
//元素入栈
public void push(T element);
//获取栈顶元素
public T peek();
//判断栈是否为空
public boolean isEmpty
四大备份MySql数据库方法及可能遇到的问题
dcj3sjt126com
DBbackup
一:通过备份王等软件进行备份前台进不去?
用备份王等软件进行备份是大多老站长的选择,这种方法方便快捷,只要上传备份软件到空间一步步操作就可以,但是许多刚接触备份王软件的客用户来说还原后会出现一个问题:因为新老空间数据库用户名和密码不统一,网站文件打包过来后因没有修改连接文件,还原数据库是好了,可是前台会提示数据库连接错误,网站从而出现打不开的情况。
解决方法:学会修改网站配置文件,大多是由co
github做webhooks:[1]钩子触发是否成功测试
dcj3sjt126com
githubgitwebhook
转自: http://jingyan.baidu.com/article/5d6edee228c88899ebdeec47.html
github和svn一样有钩子的功能,而且更加强大。例如我做的是最常见的push操作触发的钩子操作,则每次更新之后的钩子操作记录都会在github的控制板可以看到!
工具/原料
github
方法/步骤
">的作用" target="_blank">JSP中的作用
蕃薯耀
JSP中<base href="<%=basePath%>">的作用
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
linux下SAMBA服务安装与配置
hanqunfeng
linux
局域网使用的文件共享服务。
一.安装包:
rpm -qa | grep samba
samba-3.6.9-151.el6.x86_64
samba-common-3.6.9-151.el6.x86_64
samba-winbind-3.6.9-151.el6.x86_64
samba-client-3.6.9-151.el6.x86_64
samba-winbind-clients
guava cache
IXHONG
cache
缓存,在我们日常开发中是必不可少的一种解决性能问题的方法。简单的说,cache 就是为了提升系统性能而开辟的一块内存空间。
缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用。在日常开发的很多场合,由于受限于硬盘IO的性能或者我们自身业务系统的数据处理和获取可能非常费时,当我们发现我们的系统这个数据请求量很大的时候,频繁的IO和频繁的逻辑处理会导致硬盘和CPU资源的
Query的开始--全局变量,noconflict和兼容各种js的初始化方法
kvhur
JavaScriptjquerycss
这个是整个jQuery代码的开始,里面包含了对不同环境的js进行的处理,例如普通环境,Nodejs,和requiredJs的处理方法。 还有jQuery生成$, jQuery全局变量的代码和noConflict代码详解 完整资源:
http://www.gbtags.com/gb/share/5640.htm jQuery 源码:
(
美国人的福利和中国人的储蓄
nannan408
今天看了篇文章,震动很大,说的是美国的福利。
美国医院的无偿入院真的是个好措施。小小的改善,对于社会是大大的信心。小孩,税费等,政府不收反补,真的体现了人文主义。
美国这么高的社会保障会不会使人变懒?答案是否定的。正因为政府解决了后顾之忧,人们才得以倾尽精力去做一些有创造力,更造福社会的事情,这竟成了美国社会思想、人
N阶行列式计算(JAVA)
qiuwanchi
N阶行列式计算
package gaodai;
import java.util.List;
/**
* N阶行列式计算
* @author 邱万迟
*
*/
public class DeterminantCalculation {
public DeterminantCalculation(List<List<Double>> determina
C语言算法之打渔晒网问题
qiufeihu
c算法
如果一个渔夫从2011年1月1日开始每三天打一次渔,两天晒一次网,编程实现当输入2011年1月1日以后任意一天,输出该渔夫是在打渔还是在晒网。
代码如下:
#include <stdio.h>
int leap(int a) /*自定义函数leap()用来指定输入的年份是否为闰年*/
{
if((a%4 == 0 && a%100 != 0
XML中DOCTYPE字段的解析
wyzuomumu
xml
DTD声明始终以!DOCTYPE开头,空一格后跟着文档根元素的名称,如果是内部DTD,则再空一格出现[],在中括号中是文档类型定义的内容. 而对于外部DTD,则又分为私有DTD与公共DTD,私有DTD使用SYSTEM表示,接着是外部DTD的URL. 而公共DTD则使用PUBLIC,接着是DTD公共名称,接着是DTD的URL.
私有DTD
<!DOCTYPErootSYST