• Java面试题小结(一)


    ---恢复内容开始---

    1.用Java解析xml有几种方式,实现场景、区别以及优缺点;

    有四种 分别是JDOM、SEX、DOM、JDOM4J

    实现场景:

    JDOM:实现功能简单的地方,例如:解析;

    SEX:实现Applet。只需XML文档的少量内容,很少回头访问,机器内存少。

    DOM:一旦解析了文档还需多次访问这些数据,硬件资源必须充足(内存、CPU)。

    JDOM4J:DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。(推荐使用)

    介绍:

    JDOM:为减少DOM、SAX的编码量,出现了JDOM

    SEX:为解决DOM的问题,出现了SAX,SAX 事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时发送事件,程序员编写响应这些事件的代码,保存数据。

    DOM:为XML文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。

    JDOM4J:DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。

    区别:转载:https://blog.csdn.net/shijinupc/article/details/7653945

    自我总结区别::

    JDOM和JDOM4J是面向Java的,DOM和SEX是底层封装的,DOM是W3C的标准;

    从性能上:不考虑可移植性:建议用JDOM4J 如果考虑移植,建议用DOM吧

    优缺点:

    下载必要的jar包:

    activation.jar
    commons-logging-1.0.4.jar
    dom4j-1.6.1.jar
    jaxen-1.1.1.jar
    jdom-1.0.jar

    一、DOM

    解析器读入整个文档,然后构建一个驻留内存的树结构,使用 DOM 接口来操作这个树结构。

    优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;访问效率高。

    缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)

    package xmlParse;

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Calendar;
    import java.util.Locale;
    import java.util.TimeZone;

    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    import javax.xml.transform.Result;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerConfigurationException;
    import javax.xml.transform.TransformerException;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;

    import org.w3c.dom.DOMException;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;

    /**
    * java自带的dom解析xml文件
    *
    * @author abc
    *
    */
    public class TestDom {
    public static void main(String[] args) {
    builXmlByDom();
    parseXmlByDom();
    }
    /**
    * 生成xml信息
    */
    public static void builXmlByDom() {
    long begintime = System.currentTimeMillis();
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    try {
    //构建Document
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc=db.newDocument();
    Element root=doc.createElement("students");
    root.setAttribute("class", "一班");
    root.setAttribute("count", "3");

    Element stu=doc.createElement("student");
    Element name=doc.createElement("name");
    name.appendChild(doc.createTextNode("小明"));
    Element age=doc.createElement("age");
    age.appendChild(doc.createTextNode("10"));
    stu.appendChild(name);
    stu.appendChild(age);
    root.appendChild(stu);


    stu=doc.createElement("student");
    stu.setAttribute("position","班长");
    name=doc.createElement("name");
    name.appendChild(doc.createTextNode("小王"));
    age=doc.createElement("age");
    age.appendChild(doc.createTextNode("11"));
    stu.appendChild(name);
    stu.appendChild(age);
    root.appendChild(stu);

    stu=doc.createElement("student");
    name=doc.createElement("name");
    name.appendChild(doc.createTextNode("小兵"));
    age=doc.createElement("age");
    age.appendChild(doc.createTextNode("12"));
    stu.appendChild(name);
    stu.appendChild(age);
    root.appendChild(stu);

    doc.appendChild(root);
    //将被变换的Document对象封装到一个DOMSource对象中
    DOMSource xmlSource=new DOMSource(doc);
    //使用 Transformer对象将一个Document节点变换为一个XML文件
    TransformerFactory transFactory=TransformerFactory. newInstance();
    Transformer transformer=transFactory.newTransformer();

    //创建Result
    File file=new File("students.xml");
    FileOutputStream fos;
    fos = new FileOutputStream(file);
    StreamResult result=new StreamResult(fos);
    transformer.transform(xmlSource, result);
    if(fos!=null){
    fos.close();
    }
    }catch (ParserConfigurationException e) {
    e.printStackTrace();
    }catch (TransformerConfigurationException e) {
    e.printStackTrace();
    }catch (FileNotFoundException e) {
    e.printStackTrace();
    }catch (TransformerException e) {
    e.printStackTrace();
    }catch (IOException e) {
    e.printStackTrace();
    }
    System.out.println("dom生成时间(毫秒)"
    + (System.currentTimeMillis() - begintime));
    }
    /**
    * 解析xml信息
    */
    public static void parseXmlByDom() {
    long begintime = System.currentTimeMillis();;
    try {
    DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
    DocumentBuilder builder=dbf.newDocumentBuilder();
    File file=new File("students.xml");
    Document doc=builder.parse(file);
    NodeList students=doc.getFirstChild().getChildNodes();
    Node student=null;
    Node node=null;
    for(int i=0,len=students.getLength();i<len;i++){
    student=students.item(i);
    NodeList childs=student.getChildNodes();
    System.out.println("第"+(i+1)+"个学生");
    for(int j=0,size=childs.getLength();j<size;j++){
    node=childs.item(j);
    if("name".equals(node.getNodeName())){
    System.out.println(node.getNodeName()+"---"+node.getTextContent());
    }
    if("age".equals(node.getNodeName())){
    System.out.println(node.getNodeName()+"---"+node.getTextContent());
    }
    }
    }
    } catch (DOMException e) {
    e.printStackTrace();
    } catch (ParserConfigurationException e) {
    e.printStackTrace();
    } catch (SAXException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    System.out.println("dom解析时间(毫秒)"
    + (System.currentTimeMillis() - begintime));
    }
    }

    二、SAX
    特点:  1、边读边解析,应用于大型XML文档

                  2、只支持读

                  3、访问效率低

                  4、顺序访问

    package xmlParse;

    import java.io.File;

    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;

    public class TestSAXParse {

    /**
    * @param args
    */
    public static void main(String[] args) {
    sax();
    }

    public static void sax() {
    long begintime = System.currentTimeMillis();
    File f = new File("students.xml");
    SAXParserFactory sf = SAXParserFactory.newInstance();
    try {
    SAXParser sp = sf.newSAXParser();
    SAXHandler handler = new SAXHandler();
    sp.parse(f, handler);
    } catch (Exception e) {
    e.printStackTrace();
    }
    System.out.println("sax解析时间(毫秒)"
    + (System.currentTimeMillis() - begintime));

    }
    }



    SAXHandler.java
    package xmlParse;

    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    import java.util.Stack;
    public class SAXHandler extends DefaultHandler {
    Stack tags = null;
    @Override
    public void startDocument() throws SAXException {
    tags=new Stack();
    }

    @Override
    public void endDocument() throws SAXException {
    while(!tags.isEmpty()){
    System.out.println(tags.peek());
    tags.pop();
    }
    tags=null;
    }

    @Override
    public void startElement(String uri, String localName, String qName,
    Attributes attributes) throws SAXException {
    if("students".equals(qName)){
    System.out.println(attributes.getValue("class")+"--人数-"+attributes.getValue("count"));
    }
    tags.push(qName);//压入栈
    }

    @Override
    public void endElement(String uri, String localName, String qName)
    throws SAXException {
    tags.pop();//取出栈顶元素
    }

    @Override
    public void characters(char[] ch, int start, int length)
    throws SAXException {
    String tag=(String) tags.peek();//查看栈顶元素,但不移除
    if("name".equals(tag)){
    System.out.println("name==="+new String(ch,start,length));
    }
    if("age".equals(tag)){
    System.out.println("age==="+new String(ch,start,length));
    }
    }

    }


    三、JDOM

    JDOM
    优点:①是基于树的处理XML的Java API,把树加载在内存中
         ②没有向下兼容的限制,因此比DOM简单
         ③速度快,缺陷少
         ④具有SAX的JAVA规则
    缺点:①不能处理大于内存的文档
         ②JDOM表示XML文档逻辑模型。不能保证每个字节真正变换。
         ③针对实例文档不提供DTD与模式的任何实际模型。
         ④不支持与DOM中相应遍历包
    最适合于:JDOM具有树的便利,也有SAX的JAVA规则。在需要平衡时使用

    JDOM


    package xmlParse;

    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.List;

    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.input.SAXBuilder;
    import org.jdom.output.XMLOutputter;

    public class TestJDOM {

    /**
    * @param args
    */
    public static void main(String[] args) {
    buildXmlByJDOM();
    parseXmlByJDOM();
    }

    public static String buildXmlByJDOM(){
    Document doc=new Document();
    Element root=new Element("students");
    root.setAttribute("count", "3");
    root.setAttribute("class", "一班");
    doc.setRootElement(root);
    root.addContent(new Element("student").addContent(new Element("name").setText("小明"))
    .addContent(new Element("age").setText("10")));
    root.addContent(new Element("student").addContent(new Element("name").setText("小汪"))
    .addContent(new Element("age").setText("11")));
    root.addContent(new Element("student").addContent(new Element("name").setText("小兵"))
    .addContent(new Element("age").setText("12")));
    ByteArrayOutputStream out=new ByteArrayOutputStream();
    XMLOutputter putter=new XMLOutputter();
    try {
    putter.output(doc, out);
    putter.output(doc, new FileOutputStream("students.xml"));
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    return out.toString();
    }
    public static void parseXmlByJDOM(){
    long begintime=System.currentTimeMillis();
    File f=new File("students.xml");
    SAXBuilder builder=new SAXBuilder();
    try {
    Document doc=builder.build(new FileInputStream(f));
    Element root=doc.getRootElement();
    System.out.println(root.getAttributeValue("class")+"-人数:--"+root.getAttributeValue("count"));

    List list=root.getChildren("student");
    for(int i=0;i<list.size();i++){
    Element ele=(Element)list.get(i);
    System.out.println("第"+(i+1)+"个学生");
    System.out.println(ele.getChildText("name")+"---"+ele.getChildText("age"));
    }
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (JDOMException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    System.out.println("sax解析时间(毫秒)"+(System.currentTimeMillis()-begintime));
    }
    }

    四、DOM4J
    DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。 


    DOM4J
    package xmlParse;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.util.Iterator;
    import java.util.List;

    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.Node;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;

    public class TestDom4J {

    /**
    * @param args
    */
    public static void main(String[] args) {
    buildXmlByDOM4J();
    paserXmlByDOM4J();
    }
    public static void buildXmlByDOM4J(){
    Document doc=DocumentHelper.createDocument();
    doc.setXMLEncoding("UTF-8");
    Element root=doc.addElement("students");
    root.addAttribute("class", "一班").addAttribute("count", "3");
    Element student=root.addElement("student");
    student.addElement("name").setText("小明");
    student.addElement("age").setText("10");

    student=root.addElement("student").addAttribute("position", "班长");
    student.addElement("name").setText("小汪");
    student.addElement("age").setText("11");

    student=root.addElement("student");
    student.addElement("name").setText("小兵");
    student.addElement("age").setText("12");

    String xmlStr=doc.asXML();
    try {
    OutputFormat format=OutputFormat.createPrettyPrint();
    XMLWriter writer=new XMLWriter(new FileWriter(new File("students.xml")),format);
    writer.setEscapeText(false);
    writer.write(xmlStr);
    writer.close();
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    }catch (IOException e) {
    e.printStackTrace();
    }
    }
    public static void paserXmlByDOM4J(){
    long begintime=System.currentTimeMillis();
    SAXReader reader=new SAXReader();
    try {
    Document doc=reader.read(new FileInputStream(new File("students.xml")));
    Element root=doc.getRootElement();
    System.out.println(root.attributeValue("class")+"--人数--"+root.attributeValue("count"));
    /* List<Node> list=root.selectNodes("student");//需要引入jaxen-1.1.1.jar
    for(int i=0,len=list.size();i<len;i++){
    Node node=(Node)list.get(i);
    System.out.println(node.selectSingleNode("name").getText()+"---"+node.selectSingleNode("age").getStringValue());
    }*/
    Iterator it=root.elementIterator();
    Element ele;
    while(it.hasNext()){
    ele=(Element)it.next();
    //System.out.println(ele.selectSingleNode("name").getText()+"---"+ele.selectSingleNode("age").getText());
    System.out.println(ele.elementText("name")+"---"+ele.elementText("age"));
    }
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (DocumentException e) {
    e.printStackTrace();
    }

    System.out.println("sax解析时间(毫秒)"+(System.currentTimeMillis()-begintime));
    }
    }


    转载:https://blog.csdn.net/wlbing0625/article/details/7888115

    2.cookie与session的区别

    转载:http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html

    (1)cookie相对于session不安全

    (2)cookie是作用于浏览器的内存里,session是在服务器里,且cookie可能会被用户的浏览器所拦截;

    (3)cookie是会保存数据的,session是不会的 前提是服务器关闭和浏览器关闭;

    (4)cookie的单方面的字节大小不大于4byte,个数不能大于20 一般情况

    3.get与post的区别

    转载:https://www.cnblogs.com/logsharing/p/8448446.html

    (1)对于安全性 get相对于post不安全

    (2)get只有一种URL参数,post是多种实现;

    (3)get参数会保存到浏览器里,post不会

    (4)get发送报文有一条数据,post有两条报文数据(额 之前电脑关机了 文章没保存,博客园有自动的保存机制 在点击新随笔的“内容编辑器右边”)

    4.jsp、JAVA和js的区别

    区别:

    java是一种编程语言,是一种面向对象的语言,平台。

    JS是在客户端执行的,需要浏览器支持Javascript。JSP是在服务器端执行的,需要服务器上部署支持Servlet的服务器程序。JS代码是能够直接从服务器上download得到,对外是可见的,jsp(和翻译后的servlet)代码是对外不可见的。

    JS与JavaScript相比:虽然JavaScript可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。JSP在HTML中用<%%>里面实现。JS在html中用<Script></Script>实现
    转载:https://blog.csdn.net/a2806005024/article/details/28265503JSP(Java Server Pages)直译过来就是Java服务页,是用于开发动态网页的一种技术,它是属于JavaEE(Java企业级开发平台)的一种技术

    说白了Java表示整个Java语言,JSP属于Java语言中用于开发动态网页的一种技术

    JavaScript 属于一种在浏览器中运行的脚本语言,它与Java没有联系,是netscape公司开发的,后来java出现并非常成功,

    netscape征得sun的同意改名为javascript,他的主要用途是让运行在浏览器中的网页中加入一些功能和特效,

    如我们提交一个用户注册的表单,用JavaScript就可以做表单验证,验证你有没有填写必要的信息等等,再比如你在网页中看到的下拉菜单、

    树形菜单等等都是JavaScript语言实现的

    转载:https://blog.csdn.net/yxwmzouzou/article/details/42174099



  • 相关阅读:
    Spring IOC三种注入方式(接口注入、setter注入、构造器注入)(摘抄)
    java设计模式之代理模式
    JAVA学习中好网站
    程序员学习能力提升三要素
    ognl中的#、%和$
    二级缓存
    hibernate主键自动生成
    专科考研学校要求一览表
    Chapter 3: Connector(连接器)
    Chapter 2: A Simple Servlet Container
  • 原文地址:https://www.cnblogs.com/CPPLinux/p/JAVA.html
Copyright © 2020-2023  润新知