【Java高级特性】java学习之旅38-xml的解析方式

《java开发高频面经总结大合集》终极篇 作者:呆萌兔 链接:2022王者级 《java开发高频面经总结大合集》终极篇_笔经面经_牛客网 来源:牛客网 前言: 很多人说到面试,头一下就大了,各种不自信,是实力不够还是信心不够? 面试除了你平时不断积累实力,另一方面也需要讲究面试方法和技巧。 我特别喜欢一句话:不打没有准备的战。 为帮助开发者们提升面试技能、有机会入职BAT等大厂公司。 所以,我采访了超过30位资深大厂面试官后,一直在尽量精炼准确的整理一套切实可行的java开发高频面经总结合集。 现在已经有几百位粉丝朋友通过这套题走. 阅读详情

定义:Extensible Markup Language 可扩展标记语言

特点:

  • XML与编程语言无关
  • 可以实现不同编程语言实现的系统之间的数据转换

用途:

  1. 数据交换
  2. 实现项目的配置文件

和json对比:

  1. json比xml更加的轻量级
  2. xml比json更可读,结构更清晰

注意事项:

  1. xml使用的都是双标签
  2. xml标签名对大小写敏感
  3. 标签名建议使用字母加数字,不可使用特殊字符,不可使用空格
  4. 属性节点不建议使用< > " ’ &
  5. 建议同级标签要缩进对齐

解析的方式:

  1. DOM解析方式:基于dom数,把文档中的所有元素,按照其出现的层次关系,解析成一个个Node(节点) 对象
  • 有点:把XML文件在内存中构建属性结构,可以遍历和修改节点。
  • 缺点:如果文件比较大,内存有压力,解析的时间会比较长
  • 适用:修改XML数据
  1. SAX解析方式:事件驱动,逐行扫描文档,一边扫描一边解析。相当于DOM,SAX可以在解析文档的任意时刻停止解析,是一种速度更快,更高效方法。
  • 优点:解析可以立即开始,速度快,没有内存压力
  • 缺点:不能对节点做修改
  • 适用:读取XML文件
  1. DOM4J解析方式,有着更复杂的api,所以dom4j比jdom有更大的灵活性,DOM4J性能最好,连Sun的JAXM也在用DOM4J,目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J
  • 优点: 灵活性高,易用性和功能强大,性能优异
  • 缺点:复杂的api,移植性差
  • 适用:自行选择
  1. JDOM解析方式:JDOM是处理xml的纯java api。使用具体类而不是接口,JDOM具有树的的遍历,又有SAX的java规则,JDOM和DOM主要有两个方面不同。首先,JDOM仅使用具体类而不使用,这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。JDOM本身不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档(尽管它还可以将以前构造的DOM表示作为输入)。它包含一些转换器已将JDOM表示输出成SAX2事件流,DOM模型或XML文本文档。JDOM是在Apache许可证变体下发布的开放源码
  • 优点:基于dom树,比dom更简单,速度快
  • 缺点:如果文件比较大,内存有压力,不支持DOM中相应的遍历包
  • 适用:自行选择

使用:
解析: books.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!-- xml文件的声明:xml文件遵循xml1.0版本格式协议,文本编码采用utf-8 -->
<books> <!-- 根节点:只能有一个 -->
	<book id="1"> <!-- book是`元素节点`,id是`属性节点` -->
		<name>java从入门到放弃</name> <!-- name是元素节点,文本内容是`文本节点` -->
		<author>王子玉</author>
		<page>10</page>
	</book>
	<book id="2">
		<name>mysql从删库到跑路</name>
		<author>张三</author>
		<page>20</page>
	</book>
</books>

实体类:

public class Book {
	
	private Long id;
	
	private String name;
	
	private String author;
	
	private Integer page;
	}
  1. DOM解析方式(读操作)
public static void main(String[] args){
    ArrayList<Book> bookEmptyList = new ArrayList<>();
    Book bookEmpty = null;
    
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    try{
        //通过创建documentBuilder对象来对xml文件对象进行解析
        DocumentBuilder db = dbf.newDocumentBuilder();
        //解析完成之后会返回一个(w3c)document对象
        Document document = db.parse("books.xml");
        //获取xml文件对象当中的全部book标签对象并以节点集合的形式来进行返回操作
        NodeList bookList = document.getElementsByTagName("book");
        System.out.println("一共有" + bookList.getLength() + "本书。");
        //对book标签节点集合对象进行遍历操作
        for (int i = 0; i < bookList.getLength(); i ++){
            System.out.println("开始遍历第" + (i + 1) + "本书的内容");
            //建一个book的实体类用来存放解析出来的信息
            bookEmpty = new Book();
            //对集合数组对象当中的元素开始进行遍历操作,获取节点集合当中的节点对象
            Node book = bookList.item(i);
            //获取当前节点对象当中的全部的属性值对象并将其存放到map集合对象当中去
            NamedNodeMap attrs = book.getArrtibutes();
            //对当前节点当中的全部属性值进行遍历操作
            System.out.println("第" + (i + 1) + "本书共有" + attrs.getLength() + "个属性");
            for(int j = 0; j < attrs.getLength(); j++) {
                //获取属性集合对象当中的第i个属性节点对象
                Node attr = attrs.item(j);
                //输出节点的名字
                System.out.println("属性名:" + attr.getNodeName());
                //输出节点的值
                System.out.println("属性值:" + attr.getNodeValue());
            }
            
            //得到当前book对象的所有子节点对象,并且以一个节点集合的形式来进行返回操作
            NodeList childNode = book.getChildNodes();
            //遍历book节点的全部子节点对象
            System.out.println("第" + (i + 1) + "本书当中共有" + childNode.getLength() + "个子节点");
            //这里会显示有9个子节点,但是在xml文档当中可以看到只有四个子节点,是因为系统会自动的将book标签于子节点,子节点和子节点之间的空格+换行看作是一个节点,对book标签当中的子节点进行遍历输出操作
            for (int k = 0; k < childNode.getLength(); k++) {
                //对子节点集合当中的第K项子节点的名字进行输出操作
                //只对含有标签对象的元素节点进行输出操作,对为空白的文本对象节点(#text)不进行输出操作
                System.out.println("第" + (k + 1) + "个节点的节点名" + childNode.item(k).getNodeName());
                //获取子节点对象的文本内容
                System.out.println("节点的值是" + childNode.item(k).getTextContent());
            }
        }
        
    }
}

(写操作)

public static void main(String[] args) throws Execption {
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document document = db.newDocument();
    
    //创建books根节点
    Element books = document.createElement("books");
    //创建book节点
    Element book1 = document.createElement("book");
    //给book节点设置属性名和属性值
    book1.setArrribute("id", "1");
    //创建name节点
    Element name1 = document.createElement("name");
    //创建author节点
    Elemtent author1 = document.createElement("author");
    //创建page节点
    Element page1 = document.createElement("page");
    
    //将name author page节点设置为book节点的子节点
    book1.appendChild(name1);
    book1.appendChild(author1);
    book1.appendChild(page1);
    
    //设置name author page的文本节点
    name1.setTextContent("java从入门到到放弃");
    author1.setTextContent("王子玉");
    page1.setTextContent("10");
    
    //将book节点作为book1的节点的子节点
    books.appendChild(book1);
    
    Element book2 = document.createElement("book");
    book2.setAttribute("id", "2");
    Element name2 = document.createElement("name");
    Element author2 = document.createElement("author");
    Element page2 = document.createElement("page");
    book2.appendChild(name2);
    book2.appendChild(author2);
    book2.appendChild(page2);
    name2.setTextContent("mysql从删库到跑路");
    author2.setTextContent("韩文龙");
    page2.setTextContent("20");
    books.appendChild(book2);
    
    //将books节点添加到dom数中
    document.appendChild(books);
    
    TransformerFactory tff = TransformerFactory.newInstance();
    Transformer tf = tff.newTransformer();
    
    //设置换行
    tf.setOutputProperty(OutputKeys.INDENT, "yes");
    //设置缩进
    tf.setOutputProperty(
            "http://xml.apache.org/xslt}indent-amount" , "2");
            
    tf.transform(new DOMSource(document), new StreamResult(new File("book_dom.xml")));
}
  1. SAX解析:
public static void main(String[] args) throws Exception {
    //获取SAX解析工厂对象
    SAXParserFactory factory = SAXParserFactory.newInstance();
    //调用工厂的newSAXParser方法获取SAXParser解析器对象
    SAXParser parser = factory.newSAXParser();
    //获取MyHander对象,为了得到XML文件对应的资源
    MyHander dh = new MyHander();
    //使用SAXParser解析器对象调用parse方法解析XML文件
    parser.parse("NewFile.xml", dh);
    //用get方法拿到MyHander中的Book型List集合
    List<Book> bookList = dh.getBooks();
    //打印输出
    for(Book book : bookList) {
        System.out.println(book);
    }
}
//新建一个MyHander,该类需要继承DefaultHander后者实现ContentHander接口,
//这里我们使用继承DefaultHander的方式,该类是SAX解析的核心,需要重写几个方法,如下:
//1. startDocument(): 文档解析开始时调用,该方法只会调用一次
//2. startElements(String uri, String localName, String qName, Attributes attrubutes)
//节点解析式开始时调用
//url:xml文档的命名空间
//localName:节点的名字
//qName: 带命名空间节点的名字
//attributes: 节点的属性集

//3. characters(char[] ch, int start, int length):解析标签的内容的时候调用
//ch:当前读取到的TextNode(文本节点)的字节数组
//start: 字节开始的位置,为0就是从0开始读,全部读取
//length: 当前TextNode的长度

//4. endElements(String uri, String localName, String qName):节点解析结束后调用

//5. endDocument(): 文档解析结束后调用,该方法只会调用一次

public class MyHander extends DefaultHandler {
    //初始化一个List数组
    private List<Book> books =  new ArrayList<>();
    //用来记录当前的book
    private Book book = null;
    //提供一个getBooks()的方法,以便外部湖区List集合books
    public List<Book> getBooks() {
        return books;
    }
    
    boolean bName = false;
    boolean bAuthor = false;
    boolean bPage = false;
    
    //节点开始解析
    @Override
    public void startElenment(String url, String localName, String qName, Attributes attributes) throws Exception {
        super.startElement(url, localName, qName, attributes);
        if(qName.equals("book")) {
            String id = attributes.getValue("id");
            book = new Book();
            book.setId(Long.parseLong(id));
        }else if (qName.equals("name")) {
            bName = true;
        }else if (qName.equals("author")) {
            bAuthor = true;
        } else if (qName.equals("page")) {
            bPage = true;
        }
    }
    
    //开始解析节点时候调用
    @Override
    public void characters(char[] ch, int start, int length) throws Exception {
        super.character(ch, start, length);
        if(bName) {
            book.setName(new String(ch, start, length));
            bName = false;
        } else if (bAuthor) {
            book.setAuthor(new String(ch, start, length));
        } else if (bPage) {
            book.setPage(Integer.parseInt(new String(ch, start, length)));
            bPage = false;
        }
    }
    
    //结束时调用
    @Override
    public void endElement(String url, String localName, String qName) thorws Exception {
        super.endElement(url, localName, qName);
        if (qName.equals("book")) {
            books.add(book);
        }
    }
}
  1. 使用dom4j解析xml(读操作) 需要导入dom4j的jar包
public static void main(String[] args) {
    ArrayList<Book> books = new ArrayList<>();
    
    SAXReader read = new SAXReader();
    //获取document文件
    Document document = null;
    try{
        document = read.read(new File("books.xml"));
    } catch (DocumentExceprion e) {
        System.out.pirntln("没有找到文件");
    }
    //获取根节点
    Element root = document.getRootElement();
    //迭代器
    Iterator rootIt = root.elementIterator();
    while (rootIt.hasNext()) {
        Book book = new Book();
        Element element = (Element) rootIt.next();
        //获取属性元素
        List<Attribute> attrubytes = element.attributes();
        for (Attribute attribute : attributes) {
            if (attribute.getName().equals("id")) {
                book.setId(Long.valueOf(attribute.getValue()));
            }
        }
        //迭代器
        Iterator child = element.elementIterator();
        while(child.hasNext()) {
            Element child Element = (Element) child.next();
            //获取元素名字
            String name1 = childElement.getName();
            //获取元素的值
            String value = childElement.getStringValue();
            switch (name1) {
                case "name":
                    book.setName(value);
                    break;
                case "author":
                    book.setAuthor(value);
                    break;
                case "page":
                    book.getPage(Integer.valueOf(value));
                    break;
            }
        }
        books.add(book);
    }
    books,forEach(System.out::println);
}

(写操作)

public staic void main(String[] args) {
    String path = "books_Dom4j.xml"
    Document doc = DocumentHelper.createDocumemt();
    
    //创建根对象
    Element root  = doc.addElement("books");
    
    //创建一个一级子级对象
    Element book1 = root.addElement("book");
    
    //给一级子元素添加属性值
    book1.setAttribute("id", "1");
    
    //给一级子元素添加二级子元素
    Element name1 = book1.addElement("name");
    nam1.setText("遮天");
    Element author1 = book1.addElement("author");
    author1.setText("辰东");
    Element page1 = book1.addElement("page");
    page1.setText("123");
    
    Element name2 = book2.addElement("name");
    name2.setText("莽荒纪");
    Element author2 = book2.addElement("author");
    author.setText("我吃西红柿");
    Element page2 = book2.addElement("page");
    page2.setText("567");
    
    //6. 设置输出流来生成一个xml文件
    OutputStream os = null;
    try {
        os = new FileOutputStream(path);
    } catch (FileNotFoundException e) {
        System.out.println(e.getMessage());
    }
    
    //设置输出格式
    OutputFormat format = OutputFormat.createPrettyPrint();
    //设置xml编码
    format.setEncoding("utf-8");
    //写:两个参数,第一,输出流的xml文件在哪。第二,表示设置xml的格式
    XMLWriter xw = null;
    try{
        xw = null;
    } catch (Exception e) {
        e.printStackTrace();
    }
    
    try{
        xw = new XMLWriter(os, format);
    } catch (UnsupportedEncodingExceprion e) {
        e.printStackTrace();
    }
    //将组合好的xml封装到已经创建好的document对象中,写出真是存爱的xml文件中
    try {
        xw.write(doc);
    } catch (IOException e) {
        e.printStackTrace();
    }
    
    //清空缓存
    try {
        xw.flush();
        xw.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
  1. 使用JDOM解析XML(需要jdom的jar包)
public void readXML() throws Excprion {
    //1. 创建一个解析器SAXBuilder
    SAXBuilder builder = new SAXBuilder();
    //2. 创建一个文件输入流
    FileInputStream fis = new FileInputStream("books_jdom.xml");
    //3. 将流加载到解析器中
    org.jdom2.Document doc = builder.build(fis);
    //4. 获取文档的根节点
    Element book = doc.getRootElement();
    //5. 对根节点进行遍历
    getAllElement(book);
}

private void getAllElement(Element node) {
    List<Attribute> attributes = node.getAttributes();
    System.out.pirntln("节点:" + node.getName() + "内容:" + node.getText().trim());
    if(node.hasArributes()) {
        for (Attrubute attr : attrubutes) {
            System.out.pirntln("属性" + attr.getName()  + "值:" + attr.getValue());
        }
    }
    
    List<Element> children = node.getChildren();
    for (Element element : children) {
        getAllElement(element);
    }
}

写操作:

public void writeXML() throws IOException {
    // 创建一个根节点
    Element books = new Element("books");
    Document doc = new Document(books);
    //在根节点下创建第一个子节点
    Element book1 = new Element("book");
    book1.setAttrubute(new Attribute("id", "001"));
    //在第一个子节点下创建第一个子节点
    Element name1 = new Element("name");
    name1.setText("java从放弃到入门");
    Element author1 = new Element("author");
    author1.setText("王子玉");
    //在第一个子节点下创建第三个子节点
    Element page1 = new Element("page");
    page1.setText("35");
    
    //在根节点下创建第二个子节点
    Element book2 = new Element("book");
    book2.setAttribute(new Attribute("id", "002"));
    //在第二个子节点下创建第一个子节点
    Element name2 = new Element("name");
    name2.setText("mysql从删库到跑路");
    //在第二个子节点下创建第二个子节点
    Element author2 = new Element("author");
    author2.setText("韩文龙");
    //在第二个子节点下创建第三个子节点
    Element page2 = new Element("page");
    page2.setText("53");
    
    books.addContent(book1);
    books.addContent(book2);
    
    book1.addContent(name1);
    book1.addContent(author1);
    book1.addContent(page1);
    
    book2.addContent(name2);
    book2.addContent(author2);
    book2.addContent(page2);
    
    //格式化
    Format format = Format.getCompactFormat();
    format.setEncoding("utf-8");
    //保证输出后的xml的格式
    format.setIndent("  ");
    XMLOutputter out = new XMLOutputter(format);
    ByteArrayOutputStream byteRsp = new ByteArrayOutputStream();
    out.output(doc, byteRsp);
    String str = byteRsp.toString("utf-8");
    System.out.println(str);
    
    out.output(doc, new FileOutputStream("books_jdom.xml"));
    
}
38、Java学习资源与编程要点全解析 本文全面解析Java学习资源与编程要点,涵盖推荐书籍、重要网站、新闻组资源以及Java基础语法、类与对象、控制结构、异常处理、文件操作等核心内容。同时深入讲解Java高级特性,如JavaBeans、数据库操作、网络编程、图形界面、Web开发等,并提供开发工具与实践建议,助力Java开发者系统提升技能。 阅读详情

相关推荐

实战指南:基于华为Ascend NPU的大模型W8A8量化调优与精度提升

本文提供了一份基于华为Ascend NPU进行大模型W8A8量化的实战调优指南。详细介绍了从环境搭建、使用msmodelslim框架进行基础量化,到通过离群值抑制、校准集优化和量化回退等关键技术提升精度的全流程。旨在帮助开发者在华为NPU硬件上实现模型推理的显著加速,同时有效控制精度损失。

weixin_29227425的博客 271

XML标签自闭合

xml标签自闭合会改变报文格式,在一些涉及加密的程序处理中,自闭合导致报文更改从而引起非实际内容篡改所导致的加解密不一致的情况。以下程序是将自闭和更改为结束标签package com.parse.xml; import java.io.StringWriter; import org.dom4j.DocumentHelper; import org.dom4j.io.OutputFormat; ...

小熊来了 7990

[终于解决]Ubuntu14.04 32位安装移动网卡(0bda:b711)驱动8188gu tplink-WN726n

大致梳理一下问题解决的流程 首先,在台式机做了双系统,台式机只有一个网线接口,由于项目要求,需要占用网口传输数据,所以用之前买的tplink-WN726n免驱版2.0的移动网卡 【note】免驱版只能在Windows下安装使用,在Ubuntu系统中无法使用,所以,需要另辟蹊径。 找了很多资料,尝试很多方法,有的复杂有的简单,终于解决。 【思路】首先在Ubuntu系统中输入lsusb,查看是否检测到USB网卡设备。然后从Github中复制代码,构建,安装,然后modprobe一下,到前面那步还不行,就再来一步

瑞o 1万+

JavaWeb学习3(XML)

五、XML xml 是可扩展的标记性语言。 xml 的主要作用有: 1、用来保存数据,而且这些数据具有自我描述性 2、它还可以做为项目或者模块的配置文件 3、还可以做为网络传输数据的格式(现在 JSON 为主)。 感觉和HTML挺相似的,用的比较多的应该还是在配置文件上吧 5.1语法规则 5.1.1 所有 XML 元素都须有关闭标签(也就是闭合)(同html) 5.1.2 XML 标签对大小写敏感(html不敏感) 5.1.3 XML 必须正确地嵌套(同html) 5.1.4 XML 文档必须有根元素 根元

nonbioclock的博客 157

PLC1200使用CB1241RS485通讯模块做从站进行Modbus Rtu通信

添加新设备(PLC)->设备和网络管理->点击PLC->看到硬件目录选择通信板->点到点->CB1241(RS485)->看到6ES7241-1CH30-1XB0选择添加,如图。指向Modbus保持寄存器数据块的指针 我这里指向了自定义的DB块数据中一个INT数组。在通信->通信处理模块->MODBUS(选择不带RTU的通信指令块)注意:接线时,TRA接485调试模块的B- TRB接调试模块的A+组态后的硬件标识符 270 对应自己组态后自动生成的。1:事务完成,且无任何错误。波特率对应自己使用的。

swmyaopeng的博客 2万+

超声波探伤技术在风电叶片检测中的实战应用(含设备选型指南)

本文深入探讨了超声波探伤技术在风电叶片高空检测中的实战应用,重点分析了相控阵超声、激光超声等技术的选择与挑战。文章提供了详细的设备选型指南,对比了奥林巴斯、GE及国产品牌的优劣,并解读了典型缺陷的超声图谱特征,旨在帮助风电运维工程师安全、高效地完成叶片内部损伤的无损检测与预防性维护。

desk3的博客 885

【JavaWeb】XML

XML

qq_53798578的博客 1450

Claude Code与Codex深度对比:终端AI编程助手选型指南

大语言模型驱动的AI编程助手已成为开发者提效的重要工具,它们基于自然语言交互,自动完成代码生成、重构和调试。这类工具依赖上下文理解与工程实践,不同产品在交互模式、模型接入和任务执行上差异显著。从终端CLI编程场景出发,梳理AI编程助手的设计原理与技术价值,重点对比Anthropic Claude Code与OpenAI Codex在安装配置、上下文管理、第三方模型接入(如DeepSeek)以及高频报错处理上的实际表现。无论你是新手还是资深工程师,理解这些差异有助于根据自身工作流选择合适工具,或在两者间灵活切

weixin_33755649的博客 3118

xml dom4j 学习笔记

1.XML 简介 xml 是可扩展的标记性语言。 xml 的主要作用有: 1、用来保存数据,而且这些数据具有自我描述性 2、它还可以做为项目或者模块的配置文件 3、还可以做为网络传输数据的格式(现在 JSON 为主)。 xml 语法 文档声明。 元素(标签) xml 属性 xml 注释 文本区域(CDATA 区) 创建一个xml文件,第一行代码 <?xml version="1.0" encoding="UTF-8"?> //xml 声明。 version 是版本的意思

qq_46412427的博客 268

《UE4游戏开发》之 《音效系统的实现》

音效系统需要负责管理什么事情: 1.1 确定声音控制的分类:如背景音乐、技能音效、界面音效、角色配音等,不同游戏对声音有不同的分类 1.2 控制每个分类的声音的开启与关闭,以及调节每个分类声音的大小 解决如何分类: 2.1 首先需要知道ue4为声音分类提供了什么:SoundClass通常需要一个根分类【SC_RPG_Master】,便于总体控制音效,以及指定引擎默认启动的音效 打开SoundClass资产【SC_RPG_Master】,对根控制的设置,将逐级传递并按比例进行设置,以此达到控制一类声音的目的.

qq_21919621的博客 2126

对称式目镜设计实例

对称式目镜设计实例

weixin_72050316的博客 1163

单标签和双标签

单标签和双标签 内容简单的标签如只有一个属性的,用单标签,提高可读性。 内容比较多,用双标签。 单标签用/>结尾,只是一种简写 双标签可以替换所有的单标签 单标签算是xml里的一种特殊格式,纯xml是不建议使用的 主要是html的历史产物,才暂时保留至今。 常见单标签 1.<hr /> 2.<meta /> 3.<img /> 4.<input /> 常见双标签 1.<html></html> 2.<head><

m0_50266714的博客 1164

微信小程序视频内容服务类目审核不过?绕过审核的两种思路!

虽然不推荐绕过官方审核,但在实际项目中,总有一些特殊情况:比如,最近开发的小程序涉及视频播放,提交审核时,被官方要求补充“教育服务 - 在线视频课程”类目。但我们的内容只是车辆使用介绍,并非教育课程,无法提供相应资质。该怎么办?很多开发者发现,小程序开发不是最难的,审核才是最难的。 微信为了规避法律风险,要求某些功能必须提供资质。例如:然而,并不是所有公司都能轻松申请到这些资质,甚至有些资质根本不适用于我们的业务,导致审核卡住,无法上线。就像我遇到的这个问题,官方要求我们补充“在线视频课程”类目,但实际业务

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 3238

dom4j工具类_基于DOM的XML文件解析类

最近公司做服务配置检查,特别是zookeeper配置里面关于数据库、redis、域名的配置。刚好还没弄过XML解析,所以顺手封装了一个工具类。XML文件解析分四类方式:「DOM解析」;「SAX解析」;「JDOM解析」;「DOM4J解析」。其中前两种属于基础方法,是官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台。权衡之后我先选择了「D...

weixin_39941859的博客 177

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

dom4j工具类_基于DOM4J的XML文件解析类

XML文件解析分四类方式:DOM解析;SAX解析;JDOM解析;DOM4J解析。其中前两种属于基础方法,是官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台。目前已经完成一种方式的封装基于DOM的XML文件解析类。语言我依然采用了Groovy模式,有兴趣的同学可以去看看:从Java到Groovy的八级进化论。还有更多高级特性实践可以在公...

weixin_39547392的博客 173

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java基础

JAVA后端面试题<JAVA基础> 1.JDK和JRE有什么区别? JDK: JAVA Development Kit的简称,JAVA开发工具包,包括了JAVA的开发环境和运行环境(JRE)。 JRE: JAVA Runtime Environment的简称,JAVA运行环境。 两者关系: JDK包含JRE,同时还包含了JAVA源码编译器 JAVAC,还包含了JAVA程序调试和分析的.........

weixin_43766298的博客 758

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

java基础概念练习题

java基础概念练习题

mwx523037520036的博客 339

Java面试汇总+答案

本文转载,只是加了目录方便阅读,原文链接:https://blog.youkuaiyun.com/qq_18298439/article/details/80939968 目录1.面向对象和面向过程的区别2.Java的四个基本特性(抽象、封装、继承,多态)3.重载和重写的区别4.构造器Constructor是否可被override5.访问控制符public,protected,private,以及默认的区别6.是否可以继承String类7.String和StringBuffer、StringBuilder的区别8.ha

橘生淮南 1376

java web后端 入门,020最新版JavaWeb全套教程,javaweb前端+后端零基础入门完整版-JavaWeb视频教程...

01-JS(JS的三种使用方式)02-JS(语句和注释、变量、数据类型)03-JS(数据类型、运算符)04-JS(类型转换、块、控制语句)05-JS(数组)06-JS(函数的定义、函数的参数、函数的调用和return语句)07-JS(函数的作用域、闭包、内置对象、JS对象)08-JS(JS事件)09-JS(window对象[系统对话框、打开窗口、关闭窗口、setTimeout函数、s10-JS(h...

weixin_33447647的博客 197

从0到1精通What's Mars:Java生态全栈实践指南

当你面对Spring Boot配置冲突、Dubbo服务调用超时、Redis缓存雪崩、RocketMQ消息积压这些分布式系统"老大难"问题时,是否渴望一套开箱即用的Java生态解决方案?What's Mars项目历经5年迭代,已整合Spring Boot、Redis、Dubbo、RocketMQ等20+核心组件,累计服务10万+开发者。本文将通过**12个实战模块**、**38段核心代码**、**1...

gitblog_00345的博客 330

Java最常被问的面试题(2018)

示例1:面向对象的特征有哪些方面? 示例2:String是最基本的数据类型吗? 示例3:int 和 Integer 有什么区别? 示例4:String 和StringBuffer的区别? 示例5:运行时异常与一般异常有何异同? 示例6:说出ArrayList,Vector, LinkedList的存储性能和特性。 示例7:Collect...

weixin_40501652的博客 173

Spring高频面试题,你能答的上哪些?(高级篇)

1、什么是 Spring 框架?Spring 框架有哪些主要模块? 2、使用 Spring 框架能带来哪些好处? 3、什么是控制反转(IOC)?什么是依赖注入? 4、请解释下 Spring 框架中的 IoC? 5、BeanFactory 和 ApplicationContext 有什么区别? 6、Spring 有几种配置方式? 7、如何用基于 XML 配置的方式配置 Spr...

weixin_30451709的博客 186

腾讯T2亲自讲解!零基础如何成为高级Java开发,神操作!

前言 阿里巴巴,作为国内互联网公司的Top,算是业界的标杆,有阿里背景的程序员,也更具有权威性。作为程序员,都清楚阿里对于员工要求有多高,技术人员掌握的技术水平更是望尘莫及。所以,大厂程序员的很多经验也都值得我们借鉴和学习,在一定程度上确实能够帮助我们“走捷径”。 今天,我们要分享的是,Alibaba技术官丢出来的SpringCloud微服务实战笔记,这份笔记让人看了不得不爱,目前在GitHub的热度已经标星81.6k了,由此可见同行们对这份文档的认可程度,这也意味着对我们的学习和技术提升有很大的帮助。

119

java 基础面试题

示例 1 : 面向对象的特征有哪些方面?   示例 2 : String是最基本的数据类型吗?   示例 3 : int 和 Integer 有什么区别?   示例 4 : String 和StringBuffer的区别?   示例 5 : 运行时异常与一般异常有何异同?   示例 6 : 说出ArrayList,Vector, LinkedList的存储性能和特性。   示例 7 : Collection 和 Collections的区别。   示例 8 : &和&&的区别   示

个人总结 2006

java面试题系列10

一. Java基础部分 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 2、Java有没有goto? 3、说说&和&&的区别 4、在JAVA中如何跳出当前的多重嵌套循环? 5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 6、short s1 =1; s1 = s1 + 1;有什么错? short s1 =

octopus的专栏 5560
上一篇: 【Java高级特性】java学习之旅37-注解
下一篇: 【JavaWeb】1.jdbc的操作步骤
JeffHan^_^
博客等级 码龄7年 1万+粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffHan^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值