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