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
Java面试题小结(一)的更多相关文章
- java面试题及答案(转载)
JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时 ...
- 115个Java面试题和答案——终极列表(下)
第一篇讨论了面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,本章主要讨论异常处理,Java小应用程序,Swing,JDBC,远程方法调用(RMI),Servle ...
- Java面试题(全)
JAVA部分 什么是反射机制?反射机制应用(Struts中反射机制的应用) 答:运行状态中,对于任意一个类,都可以知道它的所有属性和方法,对于任意一个对象都可以调用它的任意一个方法,这种动态获取信息以 ...
- Java面试题大全(四)
JAVA代码查错 1. abstract class Name { private String name; public abstract boolean isStupidName(String n ...
- 大公司的Java面试题集
找工作要面试,有面试就有对付面试的办法.以下一些题目来自我和我朋友痛苦的面试经历,提这些问题的公司包括IBM, E*Trade, Siebel, Motorola, SUN, 以及其它大小公司. 面试 ...
- 收集了50道基础的java面试题
下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面试题集参照了JDK最 ...
- Java笔试题解答和部分面试题
面试类 银行类的问题 问题一:在多线程环境中使用HashMap会有什么问题?在什么情况下使用get()方法会产生无限循环? HashMap本身没有什么问题,有没有问题取决于你是如何使用它的.比如,你 ...
- 转:Java面试题集(51-70) http://blog.csdn.net/jackfrued/article/details/17403101
Java面试题集(51-70) Java程序员面试题集(51-70) http://blog.csdn.net/jackfrued/article/details/17403101 摘要:这一部分主要 ...
- JAVA面试题集之基础知识
JAVA面试题集之基础知识 基础知识: 1.C 或Java中的异常处理机制的简单原理和应用. 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就 ...
随机推荐
- SpringBoot中使用Fastjson/Jackson对JSON序列化格式化输出的若干问题
来源 :https://my.oschina.net/Adven/blog/3036567 使用springboot-web编写rest接口,接口需要返回json数据,目前国内比较常用的fastjso ...
- Linux网络服务第五章NFS共享服务
1.笔记 NFS一般用在局域网中,网络文件系统c/s格式 服务端s:设置一个共享目录 客户端c:挂载使用这个共享目录 rpc:111远程过程调用机制 Showmount -e:查看共享目录信息 def ...
- NetCore项目实战篇02---全局异常处理
在 .netcore中可以自定义自己的异常类型,步骤如下: 1.自定义自己的异常类型UserOperationException 并继承自Exception public class UserOper ...
- CF思维联系– CodeForces - 991C Candies(二分)
ACM思维题训练集合 After passing a test, Vasya got himself a box of n candies. He decided to eat an equal am ...
- 数学--数论--HDU 12151七夕节
七夕节 Problem Description 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!&q ...
- ASP.NET MVC使用log4net
本文介绍如何在ASP.NET MVC中使用log4net来记录日志文件. 参考链接:https://www.codeproject.com/Articles/823247/How-to-use-Apa ...
- muduo网络库源码学习————线程特定数据
muduo库线程特定数据源码文件为ThreadLocal.h //线程本地存储 // Use of this source code is governed by a BSD-style licens ...
- python-函数变量与方法公有、私有整理
关于函数与方法的区别: 函数: def funname(): 括号里面可以有形参,也可以没有,为空 在函数里面的参数整理: 方法: def funcname(self): 括号里面必须有个self,因 ...
- Linux下swap到底有没有必要使用
周五看到QQ群里在讨论Linux主机上到底需不需要开启swap空间,而且目前公有云主机默认都是把swap关了的,很多公司也是没有开启swap,那到底需不需要开启呢? 我之前在看<鸟哥的Linux ...
- libevent(八)激活事件
激活事件添加流程 事件发生后,需要把对应的event加入到激活事件队列中. 整个流程如下: 对于定时器事件,在timeout_process过程中,会将事件从最小堆中删除. 激活事件处理流程 在eve ...