今天去面試了,哎。剛剛失戀,昨天郁悶玩游戲玩到好晚,本來今天想準備準備的,結(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)勢