今天去面试了,哎。刚刚失恋,昨天郁闷玩游戏玩到好晚,本来今天想准备准备的,结果停电了。哎,自己的心情一下跌落谷底。算了,打扮吧,结果时间都花在打扮上了,反正也看不了书了,我的书都是电子书。看着镜中的自己,忽然想起逛超市的促销员的一句话,女人不漂亮会被淘汰的,当时我还鄙视之,心想庸脂俗粉,没有内在美。我喜欢不打扮,素面朝天的,哎,结果还不是被淘汰,也许女人就该爱美,尤其是我这种,本来天然情况就不漂亮。看着镜中的自己是比素面朝天可爱了,哎,算了,没有缘分。好了,继续讲面试的情况,我提前1个小时去的,结果还是迟到了,一进门面试的人就问我:怎么迟到了?偶汗~~~~~ 接下来开始做笔试,偶再汗~~~~~ 我的java基础知识确实不扎实,看了点题就有点发蒙,而且昨天没睡好,脑袋也痛得厉害。虽然有的问题我平常也用过,但确实都是查手册,也没注意过,怎么想也想不起来了,后来答答就不答了,反正自己也没戏了。就去交试卷顺便想溜,比较丢人的说。结果没溜成,自知答得不好,就坦白的说了,结果那个人说没关系,又问了我好多问题,偶汗... 我以为接下来就是愉快的谈话了,没想到又问了好多,而且我答得比较滥,最后那个考官忍无可忍的告诉我问这个问题考得我什么,哎。后来考官终于说好了,就到这吧。我如释重负,噌,一下子就站起来了,想说点客套话就开溜,结果那个人说你怎么比我还着急,继续汗...
    哎,不管怎么样,下一步还是订个计划好了,好好学学java的基础知识,好好的学习英语。哎...
   今天面试题,第一道难住我的就是在不改变主函数和构造函数的情况下如何先输出系统的虚拟内存。这方面我确实,哎,没用过啊。其实考的就是两个关键点,一个是用final定义,final就是编译时已经把结果运算出来,一个是runtime中的函数:java.lang.Runtime.freeMemory();
   为难我的第二道题,就是转换编码的题,虽然总用,基本都是打好的包,我也看过一眼,之后就没写过,到哪都是拷来拷去的,结果面试后忽然想起来了,汗... public static String toGb(String uniStr) {

  String gbStr = "";
  if (uniStr == null) {
   uniStr = "";
  }
  try {
   byte[] tempByte = uniStr.getBytes("ISO8859_1");
   gbStr = new String(tempByte, "GBK");
  }
  catch (Exception ex) {
  }
  return gbStr;
 }

 public static String toUni(String gbStr) {

  String uniStr = "";
  if (gbStr == null) {
   gbStr = "";
  }
  try {
   byte[] tempByte = gbStr.getBytes("GBK");
   uniStr = new String(tempByte, "ISO8859_1");
  }
  catch (Exception ex) {
  }
  return uniStr;
 }
还有一个就是输出文件,更晕,我明明自己写过的,不过,只不过我身边都有jdk文档,哎,总是随时查,郁闷死了。
  public String Read(String filePath) throws Exception {
        String ret
="";
        File fl 
= new File(filePath);
        FileReader fileReader 
= new FileReader(fl);
        BufferedReader bufferedReader 
= new BufferedReader(fileReader);
        String line;
        
while( (line = bufferedReader.readLine()) != null ){
            ret 
=ret + line; 
        }

        
return ret;
    }

还有就是xml解析了,我就想起了一个DOM

dom和SAX使两种主流的选择,还有JDOM,DOM4J做的不错。
DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。
例: import java.io.*;import java.util.*;import org.w3c.dom.*;import javax.xml.parsers.*;

public class MyXMLReader{

public static void main(String arge[]){

long lasting =System.currentTimeMillis();

try{

File f=new File("data_10k.xml");

DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

DocumentBuilder builder=factory.newDocumentBuilder();

Document doc = builder.parse(f);

NodeList nl = doc.getElementsByTagName("VALUE");

for (int i=0;i<nl.getLength();i++){

System.out.print("车牌号码:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());

System.out.println("车主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());

}

}catch(Exception e){

e.printStackTrace();

}
SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。
例: import org.xml.sax.*;import org.xml.sax.helpers.*;import javax.xml.parsers.*;

public class MyXMLReader extends DefaultHandler {

java.util.Stack tags = new java.util.Stack();

public MyXMLReader() {

super();}

public static void main(String args[]) {

long lasting = System.currentTimeMillis();

try {

SAXParserFactory sf = SAXParserFactory.newInstance();

SAXParser sp = sf.newSAXParser();

MyXMLReader reader = new MyXMLReader();

sp.parse(new InputSource("data_10k.xml"), reader);

} catch (Exception e) {

e.printStackTrace();

}

System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + "毫秒");}

public void characters(char ch[], int start, int length) throws SAXException {

String tag = (String) tags.peek();

if (tag.equals("NO")) {

System.out.print("车牌号码:" + new String(ch, start, length));}if (tag.equals("ADDR")) {

System.out.println("地址:" + new String(ch, start, length));}}

public void startElement(String uri,String localName,String qName,Attributes attrs) {

tags.push(qName);}}


注意:当xml数据的形式作为传递时,要获取一条条的纪录是比较适宜于采用dom,虽然它对系统(内存,性能等)有较高的要求,但是一般的服务器都可满足上G的xml文档的处理。
当需要对xml的某些内容或某些节点的特定访问时,或需要一及时地事件相应时,可以用sax来处理。它是基于时间处理机制的,在编程时,通过重载一些事件方法,来获得对xml文档的处理。

有关xml的编码,InputStreamReader和xmlReader的关系:
通常的DOM和SAX对于用ascii编码的文档,通过用InputStreamReader读入xml文档,后变成了unicode码,然后不能用
XMlREader来处理,出现错误的原因是:遇到无效的unicode的字符。(当你用system.out.println()输出是没有任何问题,因为它能自动转成本地机的编码)。
解决的方法:
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(f),"ISO8859-1"));
这样就可以限定它的编码,这样就没有问题。
String 的长度问题:String 类型安标准来说没有长度限制,但是一般jdk中String的最大长度是4G。
String与BufferedString关系:在不涉及到字符串有效的大量处理,通常使用String. BufferedString在处理字符串的大量处理上有优势