2022年阿里巴巴校園招聘面試試題合集總結(jié)_第1頁
2022年阿里巴巴校園招聘面試試題合集總結(jié)_第2頁
2022年阿里巴巴校園招聘面試試題合集總結(jié)_第3頁
2022年阿里巴巴校園招聘面試試題合集總結(jié)_第4頁
2022年阿里巴巴校園招聘面試試題合集總結(jié)_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、1. forward 和 redirect區(qū)別1.從地址欄顯示來說forward是服務(wù)器請求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器.瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容從哪里來的,所以它的地址欄還是原來的地址.redirect是服務(wù)端根據(jù)邏輯,發(fā)送一個狀態(tài)碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.2.從數(shù)據(jù)共享來說forward:轉(zhuǎn)發(fā)頁面和轉(zhuǎn)發(fā)到的頁面可以共享request里面的數(shù)據(jù).redirect:不能共享數(shù)據(jù).3.從運用地方來說forward:一般用于用戶登陸的時候,根據(jù)角色轉(zhuǎn)發(fā)到相應(yīng)的模塊.redirect:一

2、般用于用戶注銷登陸時返回主頁面和跳轉(zhuǎn)到其它的網(wǎng)站等.4.從效率來說forward:高.redirect:低.2. servlet的幾個方法 doget dopost區(qū)別3. ArrayList里裝了Person類對象,怎樣根據(jù)Person類的屬性年齡來排序4. HashMap的鍵值是否可以是任意對象面試總結(jié)首先自我介紹1. 面試官拿著你的簡歷,會挑其中的一個項目,然后讓你說出這個框架的流程2. 畫出框架的流程圖,會問每一個部分都是干什么用的3. 針對2的問題,我們做的都是web項目,在那個框架中,servlet對應(yīng)的是哪一個部分4. 由前兩個問題牽引出web.xml文件配置中都有哪些屬性,以及

3、他的作用5. 對spring了解嗎6. spring的依賴注入方式有哪幾種(注意不是spring的注入方式是依賴注入)7. 有關(guān)事物的問題,做項目中做到哪些與事物有關(guān)的,事物是怎么控制的,怎么去寫8. 觸發(fā)器,存儲過程也說了一點9. 項目開發(fā)中,如果遇到一個問題,你自己也不知道該用什么技術(shù)去解決,怎么去解決,該如何去查10. 你有三年項目開發(fā)經(jīng)驗,覺得自己比別人有優(yōu)勢的地方在哪11. 最后會問對他們公司有什么要了解的,給你個機會,讓你去問問題1,自我介紹,自己做過的項目,擅長的技術(shù)。2,用過的框架,最擅長的那個?3,所知道的MVC框架還有哪些?4,經(jīng)常去些什么樣的網(wǎng)站,對自己將來有什么樣的打算

4、,規(guī)劃。5,喜歡技術(shù)嗎,(喜歡)。舉個例子來說明你喜歡技術(shù)。6,以前項目中有沒有加班,頻率、加班時間長度。對加班的看法。7,以前的項目主中要做什么內(nèi)容,SE級別,還是開發(fā)。8,在項目組怎樣做項目,沒有詳細(xì)設(shè)計能做嗎?9,Struts用的什么版本。10,Struts2用過嗎?和Struts1有什么區(qū)別。11,Spring的AOP了解嗎,主要用在項目的那些方面。12,以前的項目規(guī)模都是多大的。1. 首先自我介紹2. 問最熟悉的項目3. 畫出STRUTS框架響應(yīng)jsp的流程圖.4. 針對2的問題,我們做的都是web項目,在那個框架中,servlet對應(yīng)的是哪一個部分5. 由前兩個問題牽引出web.x

5、ml文件配置中都有哪些屬性,以及他的作用6. 對spring了解嗎7. spring的依賴注入方式有哪幾種(注意不是spring的注入方式是依賴注入)8. 有關(guān)事物的問題,做項目中做到哪些與事物有關(guān)的,事物是怎么控制的,怎么去寫9. Struts底層的相關(guān)知識10. 項目開發(fā)中,如果遇到一個問題,你自己也不知道該用什么技術(shù)去解決,怎么去解決,該如何去查11. 你有三年項目開發(fā)經(jīng)驗,覺得自己比別人有優(yōu)勢的地方在哪12. 最后會問對他們公司有什么要了解的,給你個機會,讓你去問問題1. 首先自我介紹2. 在你所用過的框架中你比較喜歡那個3. 問你做過的這些項目中那個收獲最大,收獲到了什么4. iba

6、tis 和 Hibernate 的區(qū)別5. servlet 的生命周期6. spring 的兩個主要特性(AOP 和IOC)7. 說一下你所理解的J2EE是什么8. 為什么說JBOSS 符合J2EE的要求,而TOMCAT 不符合J2EE的要求9. Hibernate 的優(yōu)點和缺點10. 你認(rèn)為在項目中最重要的是什么11. 要是分給你的任務(wù),你感到完成有困難,你會怎么辦12. 最后你對支付寶有什么要問的這次去杭州支付寶面試,因為我的面試官是個開發(fā)主管,框架方面的技術(shù)問的很少,大部分都是根據(jù)問你項目而延伸的一些Sql , UML等問題,簡歷的項目當(dāng)中如果有快錢的項目要好好準(zhǔn)備下,對快錢的項目非常感

7、興趣。主要問題有以下:1. 首先面試官自己自我介紹,然后讓你自我介紹。2. 哪家公司的?哪年出生的?哪年畢業(yè)的?工作幾年了?這些問題都是在看你的回答是不是跟簡歷不一樣,簡歷有沒有作假?;卮鹨欢ú灰紤]。3. 對于協(xié)力員工的看法?4. 你的人生規(guī)劃職業(yè)規(guī)劃是怎么樣的? 5. 對于項目加班有什么看法?你加班的極限是多少?6. 熟悉一個新框架需要多長時間?(支付寶自己有個自己的框架)7. 說出你認(rèn)為對你影響最深的項目,并說出原因.8. Oracle中的分頁Sql怎么寫?9. 簡單地向一個不懂計算機的人說明一下java的多態(tài)。10. 說一下你知道的java設(shè)計模式。11. struts,spring中

8、應(yīng)用了哪寫java設(shè)計模式?12. 說下spring的代理模式,畫下spring代理模式的類圖。13. 快錢的項目中所擔(dān)當(dāng)?shù)哪K,根據(jù)你的回答就此展開一些問題。14. 寶鋼物流的項目的入庫那個模塊在開發(fā)中大致都用了哪些類?哪些接口?并畫下UML圖。以上是主要的問題,還有些問題都是根據(jù)你的回答延伸的。1 簡單介紹自己2 根據(jù)你的介紹提問3 mvc開發(fā)模式有哪些模式4 你的人生規(guī)劃5 業(yè)余愛好6 最近所做的項目中除了你做的模塊,還有哪些7 你都去過哪做項目總結(jié):根據(jù)面試官不同,他可能喜歡的人也不同,這個面試官喜歡做事有計劃的你對Java的集合框架了解嗎? 能否說說常用的類?說說Hashtable與

9、HashMap的區(qū)別: 源代碼級別的區(qū)別呢?平時用過的List有哪些? (除了ArrayList和LinkedList),ArrayList和LinkedList的區(qū)別?ArrayList的特點,內(nèi)部容器是如何擴充的?Properties類的特點? 線程安全?=平時使用過的框架有哪些? (我提到了Struts2)請說一下Struts2的初始化?和類的創(chuàng)建?(從源代碼角度出發(fā))據(jù)你了解,除了反射還有什么方式可以動態(tài)的創(chuàng)建對象?(我提到了CGLIB 我以為他會接著問CGLIB,揪心中,結(jié)果他沒問)請說一下Struts2 是如何把Action交給Spring托管的?它是單例的還是多例? 你們頁面的表

10、單對象是多例還是單例?請說一下你們業(yè)務(wù)層對象是單例還是多例的?請說一下Struts2源代碼中有哪些設(shè)計模式?=請說一下,你覺得你最熟悉的技術(shù)特點? (我提到了并發(fā)編程)請說一下線程安全出現(xiàn)的原因?請說一下線程池的中斷策略(4個)? 各有什么特點?請說一下Tomcat配置不同應(yīng)用的不同端口如何配置? 如何配置數(shù)據(jù)源? 如何實現(xiàn)動態(tài)部署?請說一下Java常用的優(yōu)化?你了解最新的Servlet規(guī)范嗎? 簡單說一下?(我提到了推)那請你說一下“推”是如何實現(xiàn)的?線程安全下,StringBuffer與StringBuilder的區(qū)別? 它們是如何擴充內(nèi)部數(shù)組容量的? (源代碼)請說一下Tomcat中的設(shè)

11、計模式?(我提到觀察者模式)是否可以說說Java反射的相關(guān)優(yōu)化機制? (我說我不太清楚 他說沒關(guān)系 - -?。┱堈f一些Mysql的常用優(yōu)化策略?因為我之前有提到過“推”,他可能對我的知識面比較感興趣,要我說說平時都看些什么書,還了解一些什么其他的技術(shù)范疇。(他首先提到SOA,我說有了解,并且是未來的趨勢,還有提到云計算,我說有過一定了解,但是并未深究)=之后是幾個職業(yè)方面的問題?你覺得你的潛力? 你在團隊中的位置? 你覺得跟團隊中最好的還有哪些差距?你要花多少時間趕上他們?你對阿里巴巴還有什么疑問嗎? (我很囧的問了,“阿里巴巴的牛人平時都跟你們有互動嗎?-本意是指培訓(xùn),但是話沒說清楚”,囧了

12、)PS,下面是時候?qū)栴}的整理,里面純粹僅限于個人淺見,如果有錯誤,還希望各位能指點一二。=你對Java的集合框架了解嗎? 能否說說常用的類? Java集合框架類圖:我常用的類:HashMap,Hashtable,HashSet,ArrayList,Vector,LinkedList,Collections,Arrays;說說Hashtable與HashMap的區(qū)別(源代碼級別) 1.最明顯的區(qū)別在于Hashtable 是同步的(每個方法都是synchronized),而HashMap則不是. 2.HashMap繼承至AbstractMap,Hashtable繼承至Dictionary ,前者

13、為Map的骨干, 其內(nèi)部已經(jīng)實現(xiàn)了Map所需 要做的大部分工作, 它的子類只需要實現(xiàn)它的少量方法即可具有Map的多項特性。而后者內(nèi)部都為抽象方法,需要 它的實現(xiàn)類一一作自己的實現(xiàn),且該類已過時 3.兩者檢測是否含有key時,hash算法不一致,HashMap內(nèi)部需要將key的hash碼重新計算一邊再檢測,而 Hashtable則直接利用key本身的hash碼來做驗證。HashMap:Java代碼 inthash=(key=null)?0:hash(key.hashCode(); - staticinthash(inth) h=(h20)(h12); returnh(h7)(h4); Java代

14、碼 inthash=(key=null)?0:hash(key.hashCode(); - staticinthash(inth) h=(h20)(h12); returnh(h7)(h4); -static int hash(int h) h = (h 20) (h 12); return h (h 7) (h 4); Hashtable:Java代碼 inthash=key.hashCode();Java代碼 inthash=key.hashCode();int hash = key.hashCode(); 4.兩者初始化容量大小不一致,HashMap內(nèi)部為 16*0.75 , Hasht

15、able 為 11*0.75 HashMap:Java代碼 staticfinalintDEFAULT_INITIAL_CAPACITY=16; staticfinalfloatDEFAULT_LOAD_FACTOR=0.75f; publicHashMap() this.loadFactor=DEFAULT_LOAD_FACTOR; threshold=(int)(DEFAULT_INITIAL_CAPACITY*DEFAULT_LOAD_FACTOR); table=newEntryDEFAULT_INITIAL_CAPACITY; init(); Java代碼 staticfinalin

16、tDEFAULT_INITIAL_CAPACITY=16; staticfinalfloatDEFAULT_LOAD_FACTOR=0.75f; publicHashMap() this.loadFactor=DEFAULT_LOAD_FACTOR; threshold=(int)(DEFAULT_INITIAL_CAPACITY*DEFAULT_LOAD_FACTOR); table=newEntryDEFAULT_INITIAL_CAPACITY; init(); static final int DEFAULT_INITIAL_CAPACITY = 16;static final flo

17、at DEFAULT_LOAD_FACTOR = 0.75f;public HashMap() this.loadFactor = DEFAULT_LOAD_FACTOR; threshold=(int)(DEFAULT_INITIAL_CAPACITY*DEFAULT_LOAD_FACTOR); table = new EntryDEFAULT_INITIAL_CAPACITY; init();Hashtable:Java代碼 publicHashtable() this(11,0.75f); - publicHashtable(intinitialCapacity,floatloadFac

18、tor) . this.loadFactor=loadFactor; table=newEntryinitialCapacity; threshold=(int)(initialCapacity*loadFactor); Java代碼 publicHashtable() this(11,0.75f); - publicHashtable(intinitialCapacity,floatloadFactor) . this.loadFactor=loadFactor; table=newEntryinitialCapacity; threshold=(int)(initialCapacity*l

19、oadFactor); public Hashtable() this(11, 0.75f);- public Hashtable(int initialCapacity, float loadFactor) .this.loadFactor = loadFactor;table = new EntryinitialCapacity;threshold = (int)(initialCapacity * loadFactor); 其實后續(xù)的區(qū)別應(yīng)該還有很多, 這里先列出4點。平時除了ArrayList和LinkedList外,還用過的List有哪些?ArrayList和LinkedList的區(qū)

20、別? 事實上,我用過的List主要就是這2個, 另外用過Vector.ArrayList和LinkedList的區(qū)別:毫無疑問,第一點就是兩者的內(nèi)部數(shù)據(jù)結(jié)構(gòu)不同, ArrayList內(nèi)部元素容器是一個Object的數(shù)組, 而LinkedList內(nèi)部實際上一個鏈表的數(shù)據(jù)結(jié)構(gòu),其有一個內(nèi)部類來表示鏈表.Java代碼 (ArrayList) privatetransientObjectelementData; (LinkedList) privatetransientEntryheader=newEntry(null,null,null);/鏈表頭 /內(nèi)部鏈表類. privatestaticclas

21、sEntry Eelement;/數(shù)據(jù)元素 Entrynext;/前驅(qū) Entryprevious;/后驅(qū) Entry(Eelement,Entrynext,Entryprevious) this.element=element; this.next=next; this.previous=previous; Java代碼 (ArrayList) privatetransientObjectelementData; (LinkedList) privatetransientEntryheader=newEntry(null,null,null);/鏈表頭 /內(nèi)部鏈表類. privatestat

22、icclassEntry Eelement;/數(shù)據(jù)元素 Entrynext;/前驅(qū) Entryprevious;/后驅(qū) Entry(Eelement,Entrynext,Entryprevious) this.element=element; this.next=next; this.previous=previous; (ArrayList)private transient Object elementData;(LinkedList)private transient Entry header = new Entry(null, null, null);/鏈表頭 /內(nèi)部鏈表類.priva

23、te static class Entry E element; /數(shù)據(jù)元素Entry next; / 前驅(qū)Entry previous;/后驅(qū)Entry(E element, Entry next, Entry previous) this.element = element; this.next = next; this.previous = previous; 兩者的父類不同,也就決定了兩者的存儲形式不同。 ArrayList繼承于 AbstractList,而LinkedList繼承于AbstractSequentialList. 兩者都實現(xiàn)了List的骨干結(jié)構(gòu),只是前者的訪問形式趨向

24、于 “隨機訪問”數(shù)據(jù)存儲(如數(shù)組),后者趨向于 “連續(xù)訪問”數(shù)據(jù)存儲(如鏈接列表)Java代碼 publicclassArrayListextendsAbstractList - publicclassLinkedListextendsAbstractSequentialList Java代碼 publicclassArrayListextendsAbstractList - publicclassLinkedListextendsAbstractSequentialListpublic class ArrayList extends AbstractList-public class Lin

25、kedList extends AbstractSequentialList 再有就是兩者的效率問題, ArrayList基于數(shù)組實現(xiàn),所以毫無疑問可以直接用下標(biāo)來索引,其索引數(shù)據(jù)快,插入元素設(shè)計到數(shù)組元素移動,或者數(shù)組擴充,所以插入元素要慢。LinkedList基于鏈表結(jié)構(gòu),插入元素只需要改變插入元素的前后項的指向即可,故插入數(shù)據(jù)要快,而索引元素需要向前向后遍歷,所以索引元素要慢。 ArrayList的特點,內(nèi)部容器是如何擴充的? 上一點談到了ArrayList的特點,這里略,重點來看其內(nèi)部容器的擴充:Java代碼 publicvoidensureCapacity(intminCapacit

26、y) modCount+; intoldCapacity=elementData.length; if(minCapacityoldCapacity) ObjectoldData=elementData; /這里擴充的大小為原大小的大概60% intnewCapacity=(oldCapacity*3)/2+1; if(newCapacityoldCapacity) ObjectoldData=elementData; /這里擴充的大小為原大小的大概60% intnewCapacity=(oldCapacity*3)/2+1; if(newCapacity oldCapacity) Objec

27、t oldData = elementData; /這里擴充的大小為原大小的大概 60%int newCapacity = (oldCapacity * 3) / 2 + 1;if (newCapacity minCapacity)newCapacity = minCapacity; /創(chuàng)建一個指定大小的新數(shù)組來覆蓋原數(shù)組elementData = Arrays.copyOf(elementData, newCapacity);Properties類的特點? 線程安全嗎? Properties 繼承于Hashtable,所以它是線程安全的. 其特點是: 它表示的是一個持久的屬性集,它可以保存在

28、流中或者從流中加載,屬性列表的每一個鍵和它所對應(yīng)的值都是一個“字符串” 其中,常用的方法是load()方法,從流中加載屬性:Java代碼 publicsynchronizedvoidload(InputStreaminStream)throwsIOException /將輸入流轉(zhuǎn)換成LineReader load0(newLineReader(inStream); privatevoidload0(LineReaderlr)throwsIOException charconvtBuf=newchar1024; intlimit; intkeyLen; intvalueStart; charc;

29、 booleanhasSep; booleanprecedingBackslash; /一行一行處理 while(limit=lr.readLine()=0) c=0; keyLen=0; valueStart=limit; hasSep=false; precedingBackslash=false; /下面用2個循環(huán)來處理key,value while(keyLenlimit) c=lr.lineBufkeyLen; /needcheckifescaped. if(c=|c=:)&!precedingBackslash) valueStart=keyLen+1; hasSep=true;

30、break; elseif(c=|c=t|c=f) &!precedingBackslash) valueStart=keyLen+1; break; if(c=) precedingBackslash=!precedingBackslash; else precedingBackslash=false; keyLen+; while(valueStartlimit) c=lr.lineBufvalueStart; if(c!=&c!=t&c!=f) if(!hasSep&(c=|c=:) hasSep=true; else break; valueStart+; Stringkey=load

31、Convert(lr.lineBuf,0,keyLen,convtBuf); Stringvalue=loadConvert(lr.lineBuf,valueStart,limit -valueStart,convtBuf); /存入內(nèi)部容器中,這里用的是Hashtable內(nèi)部的方法. put(key,value); Java代碼 publicsynchronizedvoidload(InputStreaminStream)throwsIOException /將輸入流轉(zhuǎn)換成LineReader load0(newLineReader(inStream); privatevoidload0(L

32、ineReaderlr)throwsIOException charconvtBuf=newchar1024; intlimit; intkeyLen; intvalueStart; charc; booleanhasSep; booleanprecedingBackslash; /一行一行處理 while(limit=lr.readLine()=0) c=0; keyLen=0; valueStart=limit; hasSep=false; precedingBackslash=false; /下面用2個循環(huán)來處理key,value while(keyLenlimit) c=lr.line

33、BufkeyLen; /needcheckifescaped. if(c=|c=:)&!precedingBackslash) valueStart=keyLen+1; hasSep=true; break; elseif(c=|c=t|c=f) &!precedingBackslash) valueStart=keyLen+1; break; if(c=) precedingBackslash=!precedingBackslash; else precedingBackslash=false; keyLen+; while(valueStartlimit) c=lr.lineBufvalu

34、eStart; if(c!=&c!=t&c!=f) if(!hasSep&(c=|c=:) hasSep=true; else break; valueStart+; Stringkey=loadConvert(lr.lineBuf,0,keyLen,convtBuf); Stringvalue=loadConvert(lr.lineBuf,valueStart,limit -valueStart,convtBuf); /存入內(nèi)部容器中,這里用的是Hashtable內(nèi)部的方法. put(key,value); public synchronized void load(InputStream

35、inStream) throws IOException / 將輸入流轉(zhuǎn)換成LineReaderload0(new LineReader(inStream);private void load0(LineReader lr) throws IOException char convtBuf = new char1024;int limit;int keyLen;int valueStart;char c;boolean hasSep;boolean precedingBackslash;/ 一行一行處理while (limit = lr.readLine() = 0) c = 0;keyLen

36、 = 0;valueStart = limit;hasSep = false;precedingBackslash = false;/ 下面用2個循環(huán)來處理key,valuewhile (keyLen limit) c = lr.lineBufkeyLen;/ need check if escaped.if (c = = | c = :) & !precedingBackslash) valueStart = keyLen + 1;hasSep = true;break; else if (c = | c = t | c = f)& !precedingBackslash) valueSta

37、rt = keyLen + 1;break;if (c = ) precedingBackslash = !precedingBackslash; else precedingBackslash = false;keyLen+;while (valueStart limit) c = lr.lineBufvalueStart;if (c != & c != t & c != f) if (!hasSep & (c = = | c = :) hasSep = true; else break;valueStart+;String key = loadConvert(lr.lineBuf, 0,

38、keyLen, convtBuf);String value = loadConvert(lr.lineBuf, valueStart, limit- valueStart, convtBuf);/ 存入內(nèi)部容器中,這里用的是Hashtable 內(nèi)部的方法.put(key, value);LineReader類,是Properties內(nèi)部的類: Java代碼 classLineReader publicLineReader(InputStreaminStream) this.inStream=inStream; inByteBuf=newbyte8192; publicLineReader(R

39、eaderreader) this.reader=reader; inCharBuf=newchar8192; byteinByteBuf; charinCharBuf; charlineBuf=newchar1024; intinLimit=0; intinOff=0; InputStreaminStream; Readerreader; /* *讀取一行 * *return *throwsIOException */intreadLine()throwsIOException intlen=0; charc=0; booleanskipWhiteSpace=true;/空白 boolean

40、isCommentLine=false;/注釋 booleanisNewLine=true;/是否新行. booleanappendedLineBegin=false;/加至行開始 booleanprecedingBackslash=false;/反斜杠 booleanskipLF=false; while(true) if(inOff=inLimit) /從輸入流中讀取一定數(shù)量的字節(jié)并將其存儲在緩沖區(qū)數(shù)組inCharBuf/inByteBuf中,這里區(qū)分字節(jié)流和字符流 inLimit=(inStream=null)?reader.read(inCharBuf) :inStream.read(

41、inByteBuf); inOff=0; /讀取到的為空. if(inLimit=0) if(len=0|isCommentLine) return-1; returnlen; if(inStream!=null) /由于是字節(jié)流,需要使用ISO8859-1來解碼 c=(char)(0 xff&inByteBufinOff+); else c=inCharBufinOff+; if(skipLF) skipLF=false; if(c=n) continue; if(skipWhiteSpace) if(c=|c=t|c=f) continue; if(!appendedLineBegin&(

42、c=r|c=n) continue; skipWhiteSpace=false; appendedLineBegin=false; if(isNewLine) isNewLine=false; if(c=#|c=!) /注釋行,忽略. isCommentLine=true; continue; /讀取真正的屬性內(nèi)容 if(c!=n&c!=r) /這里類似于ArrayList內(nèi)部的容量擴充,使用字符數(shù)組來保存讀取的內(nèi)容. lineBuflen+=c; if(len=lineBuf.length) intnewLength=lineBuf.length*2; if(newLength=inLimi

43、t) inLimit=(inStream=null)?reader.read(inCharBuf) :inStream.read(inByteBuf); inOff=0; if(inLimit=0) returnlen; if(precedingBackslash) len-=1; skipWhiteSpace=true; appendedLineBegin=true; precedingBackslash=false; if(c=r) skipLF=true; else returnlen; Java代碼 classLineReader publicLineReader(InputStrea

44、minStream) this.inStream=inStream; inByteBuf=newbyte8192; publicLineReader(Readerreader) this.reader=reader; inCharBuf=newchar8192; byteinByteBuf; charinCharBuf; charlineBuf=newchar1024; intinLimit=0; intinOff=0; InputStreaminStream; Readerreader; /* *讀取一行 * *return *throwsIOException */intreadLine(

45、)throwsIOException intlen=0; charc=0; booleanskipWhiteSpace=true;/空白 booleanisCommentLine=false;/注釋 booleanisNewLine=true;/是否新行. booleanappendedLineBegin=false;/加至行開始 booleanprecedingBackslash=false;/反斜杠 booleanskipLF=false; while(true) if(inOff=inLimit) /從輸入流中讀取一定數(shù)量的字節(jié)并將其存儲在緩沖區(qū)數(shù)組inCharBuf/inByteBuf

46、中,這里區(qū)分字節(jié)流和字符流 inLimit=(inStream=null)?reader.read(inCharBuf) :inStream.read(inByteBuf); inOff=0; /讀取到的為空. if(inLimit=0) if(len=0|isCommentLine) return-1; returnlen; if(inStream!=null) /由于是字節(jié)流,需要使用ISO8859-1來解碼 c=(char)(0 xff&inByteBufinOff+); else c=inCharBufinOff+; if(skipLF) skipLF=false; if(c=n) c

47、ontinue; if(skipWhiteSpace) if(c=|c=t|c=f) continue; if(!appendedLineBegin&(c=r|c=n) continue; skipWhiteSpace=false; appendedLineBegin=false; if(isNewLine) isNewLine=false; if(c=#|c=!) /注釋行,忽略. isCommentLine=true; continue; /讀取真正的屬性內(nèi)容 if(c!=n&c!=r) /這里類似于ArrayList內(nèi)部的容量擴充,使用字符數(shù)組來保存讀取的內(nèi)容. lineBuflen+=

48、c; if(len=lineBuf.length) intnewLength=lineBuf.length*2; if(newLength=inLimit) inLimit=(inStream=null)?reader.read(inCharBuf) :inStream.read(inByteBuf); inOff=0; if(inLimit=0) returnlen; if(precedingBackslash) len-=1; skipWhiteSpace=true; appendedLineBegin=true; precedingBackslash=false; if(c=r) ski

49、pLF=true; else returnlen; class LineReader public LineReader(InputStream inStream) this.inStream = inStream;inByteBuf = new byte8192;public LineReader(Reader reader) this.reader = reader;inCharBuf = new char8192;byte inByteBuf;char inCharBuf;char lineBuf = new char1024;int inLimit = 0;int inOff = 0;

50、InputStream inStream;Reader reader;/* * 讀取一行 * * return * throws IOException */int readLine() throws IOException int len = 0;char c = 0;boolean skipWhiteSpace = true;/ 空白boolean isCommentLine = false;/ 注釋boolean isNewLine = true;/ 是否新行.boolean appendedLineBegin = false;/ 加 至行開始boolean precedingBacks

51、lash = false;/ 反斜杠boolean skipLF = false;while (true) if (inOff = inLimit) / 從輸入流中讀取一定數(shù)量的字節(jié)并將其存儲在緩沖區(qū)數(shù)組inCharBuf/inByteBuf中,這里區(qū)分字節(jié)流和字符流inLimit = (inStream = null) ? reader.read(inCharBuf): inStream.read(inByteBuf);inOff = 0;/ 讀取到的為空.if (inLimit = 0) if (len = 0 | isCommentLine) return -1;return len;if (inStream != null) / 由于是字節(jié)流,需要使用ISO8859-1來解

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論