今天去面試了,哎。剛剛失戀,昨天郁悶玩游戲玩到好晚,本來今天想準備準備的,結(jié)果停電了。哎,自己的心情一下跌落谷底。算了,打扮吧,結(jié)果時間都花在打扮上了,反正也看不了書了,我的書都是電子書。看著鏡中的自己,忽然想起逛超市的促銷員的一句話,女人不漂亮會被淘汰的,當時我還鄙視之,心想庸脂俗粉,沒有內(nèi)在美。我喜歡不打扮,素面朝天的,哎,結(jié)果還不是被淘汰,也許女人就該愛美,尤其是我這種,本來天然情況就不漂亮。看著鏡中的自己是比素面朝天可愛了,哎,算了,沒有緣分。好了,繼續(xù)講面試的情況,我提前1個小時去的,結(jié)果還是遲到了,一進門面試的人就問我:怎么遲到了?偶汗~~~~~ 接下來開始做筆試,偶再汗~~~~~ 我的java基礎(chǔ)知識確實不扎實,看了點題就有點發(fā)蒙,而且昨天沒睡好,腦袋也痛得厲害。雖然有的問題我平常也用過,但確實都是查手冊,也沒注意過,怎么想也想不起來了,后來答答就不答了,反正自己也沒戲了。就去交試卷順便想溜,比較丟人的說。結(jié)果沒溜成,自知答得不好,就坦白的說了,結(jié)果那個人說沒關(guān)系,又問了我好多問題,偶汗... 我以為接下來就是愉快的談話了,沒想到又問了好多,而且我答得比較濫,最后那個考官忍無可忍的告訴我問這個問題考得我什么,哎。后來考官終于說好了,就到這吧。我如釋重負,噌,一下子就站起來了,想說點客套話就開溜,結(jié)果那個人說你怎么比我還著急,繼續(xù)汗...
    哎,不管怎么樣,下一步還是訂個計劃好了,好好學學java的基礎(chǔ)知識,好好的學習英語。哎...
   今天面試題,第一道難住我的就是在不改變主函數(shù)和構(gòu)造函數(shù)的情況下如何先輸出系統(tǒng)的虛擬內(nèi)存。這方面我確實,哎,沒用過啊。其實考的就是兩個關(guān)鍵點,一個是用final定義,final就是編譯時已經(jīng)把結(jié)果運算出來,一個是runtime中的函數(shù):java.lang.Runtime.freeMemory();
   為難我的第二道題,就是轉(zhuǎn)換編碼的題,雖然總用,基本都是打好的包,我也看過一眼,之后就沒寫過,到哪都是拷來拷去的,結(jié)果面試后忽然想起來了,汗... 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文檔轉(zhuǎn)化為一個包含其內(nèi)容的樹,并可以對樹進行遍歷。用DOM解析模型的優(yōu)點是編程容易,開發(fā)人員只需要調(diào)用建樹的指令,然后利用navigation APIs訪問所需的樹節(jié)點來完成任務。可以很容易的添加和修改樹中的元素。然而由于使用DOM解析器的時候需要處理整個XML文檔,所以對性能和內(nèi)存的要求比較高,尤其是遇到很大的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文檔的時候可以觸發(fā)一系列的事件,當發(fā)現(xiàn)給定的tag的時候,它可以激活一個回調(diào)方法,告訴該方法制定的標簽已經(jīng)找到。SAX對內(nèi)存的要求通常會比較低,因為它讓開發(fā)人員自己來決定所要處理的tag。特別是當開發(fā)人員只需要處理文檔中所包含的部分數(shù)據(jù)時,SAX這種擴展能力得到了更好的體現(xiàn)。但用SAX解析器的時候編碼工作會比較困難,而且很難同時訪問同一個文檔中的多處不同數(shù)據(jù)。
例: 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數(shù)據(jù)的形式作為傳遞時,要獲取一條條的紀錄是比較適宜于采用dom,雖然它對系統(tǒng)(內(nèi)存,性能等)有較高的要求,但是一般的服務器都可滿足上G的xml文檔的處理。
當需要對xml的某些內(nèi)容或某些節(jié)點的特定訪問時,或需要一及時地事件相應時,可以用sax來處理。它是基于時間處理機制的,在編程時,通過重載一些事件方法,來獲得對xml文檔的處理。

有關(guān)xml的編碼,InputStreamReader和xmlReader的關(guān)系:
通常的DOM和SAX對于用ascii編碼的文檔,通過用InputStreamReader讀入xml文檔,后變成了unicode碼,然后不能用
XMlREader來處理,出現(xiàn)錯誤的原因是:遇到無效的unicode的字符。(當你用system.out.println()輸出是沒有任何問題,因為它能自動轉(zhuǎn)成本地機的編碼)。
解決的方法:
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(f),"ISO8859-1"));
這樣就可以限定它的編碼,這樣就沒有問題。
String 的長度問題:String 類型安標準來說沒有長度限制,但是一般jdk中String的最大長度是4G。
String與BufferedString關(guān)系:在不涉及到字符串有效的大量處理,通常使用String. BufferedString在處理字符串的大量處理上有優(yōu)勢