1. 面向?qū)ο蟮奶攸c
抽象:
抽象是或略一個主題中與當(dāng)前目標的無關(guān)的因素,一邊充分考慮有關(guān)的內(nèi)容桑孩。抽象并不能解決目標中所有的問題流椒,只能選擇其中的一部分,忽略其他的部分绣硝。抽象包含兩個方面:一是過程抽象域那;一是數(shù)據(jù)抽象败许。
繼承:
繼承是一種聯(lián)接類的層次模型市殷,允許和鼓勵類的重用,提供了一種明確的共性的方法带迟。對象的一個新類可以從現(xiàn)有的類中派生嗅绰,這叫做類的繼承窘面。心累繼承了原始類的特性财边,新類稱為原始類的派生類或者是子類,原始類稱為新類的基類或者父類。子類可以從父類那里繼承父類的方法和實現(xiàn)變量馋嗜,并卻允許新類增加和修改新的方法使之滿足需求。
封裝:
封裝就是把過程和數(shù)據(jù)包圍起來吵瞻。對數(shù)據(jù)的訪問只是允許通過已經(jīng)定義好的界面葛菇。面向?qū)ο缶褪腔谶@個概念,即現(xiàn)實世界可以描述為一系列完全自治橡羞,封裝的對象眯停,這些對象通過固定受保護的接口訪問其他對象。
多態(tài):
多態(tài)性是指不同類的對象對同一個請求作出相應(yīng)卿泽。多態(tài)性包括參數(shù)多態(tài)和包含多態(tài)莺债。多態(tài)性語言具有靈活、抽象丐吓、行為共享荞估、代碼共享的優(yōu)勢。很好的解決了應(yīng)用程序中同名的問題。
2. int 和 Integer 有什么區(qū)別
java提供了兩種類型:引用類型和原始類型(內(nèi)置類型)膳音。int是java的原始數(shù)據(jù)類型醇蝴,Integer是java為int提供的封裝類笙瑟。
java為每一種數(shù)據(jù)類型提供了自己的封裝類:
引用類型和原始類型的行為完全不同盾舌,并且他們具有不同的語義膝舅,引用類型和原始類型具有不同的特征和用法遥巴,他們包括:大小和速度問題奔坟,這種類型以哪種類型的數(shù)據(jù)結(jié)構(gòu)存儲磅摹,當(dāng)引用類型和原始類型有用作某個類的實例數(shù)據(jù)時制定的缺省值。對象應(yīng)用實例變量的缺省值為null,而原始類型實例變量的缺省值與它們的類型有關(guān)略就。
3. final、finally、finalize的區(qū)別
- final是一種聲明屬性,作用與類膏燃、方法和變量罐栈;final修飾的變量的值不能夠再改變泥畅,final修飾的方面不能被覆蓋,final修飾的類不能被繼承疮薇。
- finally是異常處理語句的一部分,表示總是執(zhí)行。
- finalize是object類的一個子方法屈留,在垃圾回收器執(zhí)行是調(diào)用回收對象的此方法局冰,此方法可以被覆蓋提供資源回收時的其他資源回收括儒。如文件關(guān)閉等。
4. heap和stack的區(qū)別
棧是一種現(xiàn)行結(jié)構(gòu)锐想,其添加和刪除元素應(yīng)在同一段完成帮寻,棧按照先進后出的方式進行處理。
堆是棧的一個組成元素赠摇。
5. 基本的數(shù)據(jù)類型
byte固逗,int,long藕帜,double烫罩,char,boolean洽故,float贝攒,short
String不是基本數(shù)據(jù)類型,java.util.String是final類时甚,因此不能修改這個類隘弊,不能繼承這個類。
為了節(jié)省空間荒适,提高效率我們應(yīng)該用StringBuffer梨熙。
6. assert什么時候使用?
assertion(斷言)在軟件開發(fā)中使用中常見的調(diào)試方式刀诬,很多編程語言中都支持這種機制咽扇,在實現(xiàn)中,assertion就是在程序中的一條語句陕壹,他對一個boolean表達式進行檢查质欲,一個正確的程序必須保證這個boolean表達式的值是true。如果該值為false糠馆,說迷宮程序已經(jīng)處于不正確的狀態(tài)了嘶伟,系統(tǒng)將給出警告或者退出跃捣。一般來說assertion用來保證程序最基本、關(guān)鍵的正確性隆判,assertion檢查通常在開發(fā)和測試時啟動熙兔,為了提高效率,在軟件發(fā)布后弯蚜,assertion檢查通常是關(guān)閉的。
7. GC是什么?為什么要有GC期揪?
GC是垃圾回收的意思(gabage collection),內(nèi)存處理器是編程人員容易出現(xiàn)問題的地方规个,忘記或者錯誤的內(nèi)存回收導(dǎo)致程序或者系統(tǒng)的不穩(wěn)定甚至崩潰凤薛,java的GC功能可以自動監(jiān)測對象是否超過作用域從而達到自動回收內(nèi)存的目的姓建,java語言沒有提供釋放已分配內(nèi)存的俄顯示操作方法。
8. 啟動線程使用run()還是start()?
啟動一個線程用start()方法缤苫,使線程所代表的虛擬處理機處于可運行的狀態(tài)速兔,這意味著它可以有JVM(java虛擬機)來調(diào)度和執(zhí)行,這并不意味著線程就會立即執(zhí)行活玲。run()方法可以產(chǎn)生必須退出的標志來停止一個線程涣狗。
9. 構(gòu)造器Constructor是否可以被override?
構(gòu)造器(override)不能被繼承舒憾,因此不能重寫overriding镀钓,但是可以被重載overloading。
10. 當(dāng)一個對象作為參數(shù)傳遞給一個方法后镀迂,此方法可以給便這個對象的屬性丁溅,并可以返回變化后的結(jié)果,那么這里到底是值的傳遞還是引用傳遞探遵?
是值得傳遞窟赏。java語言中只有值傳遞參數(shù),對一個對象實例作為一個參數(shù)被傳遞到方法中時箱季,參數(shù)的值就是對該對象的引用饰序,對象的內(nèi)容可以在被調(diào)用的方法中改變,但對象的引用是永遠改變不了的规哪。
11. 垃圾回收機制的優(yōu)點求豫,并考慮2種回收機制。
java語言中一個顯著的特點就是引入了垃圾回收機制诉稍,使C++程序員最頭痛的內(nèi)存管理問題迎刃而解蝠嘉,他使得java程序員在編寫承學(xué)的哦時候不用再考慮內(nèi)潤管理問題了,由于有了垃圾回收機制杯巨,java中的對象不再有“作用域”的概念蚤告,只是在對象引用的時候才有“作用域”,垃圾回收可以有效的防止內(nèi)存泄漏服爷,有效的使用可以使用的內(nèi)存杜恰。
垃圾回收器通常作為一個單獨的低級別的線程運行,不可預(yù)知的情況下對內(nèi)存堆中已經(jīng)死亡的或者長時間沒有使用的對象進行清楚的哦回收仍源,承諾過許愿程序員不能實時的調(diào)用來幾回收器對某個對象或所有對象進行垃圾回收心褐,回收機制有分帶復(fù)制來幾回收和標記垃圾回收,增量垃圾回收笼踩。
12. char型變量中能不能存儲一個中文漢字逗爹?為什么?
能夠存儲一個漢字嚎于。
因為java中以unicode編碼掘而,一個char占16個字節(jié)挟冠,多億放一個中文是沒有問題的。
13. jsp中的內(nèi)置對象
- request——表示HttpServletRequest對象袍睡,它包含了有關(guān)瀏覽器請求的信息知染,并且提供了幾個用于獲取cookie,header和session數(shù)據(jù)的游泳的方法斑胜。
- response——表示HttpServletResponse對象持舆,提供了幾個用于設(shè)置送回瀏覽器響應(yīng)的方法(如cookie頭信息等)。
- out——對象是java.jsp.JspWriter的一個實例伪窖,提供了幾種方法使你能用于想瀏覽器返回輸出結(jié)果逸寓。
- pageContext——表示一個javax.servlet.jsp.PageContext對象。它是用于方便存取各種范圍的名字空間覆山、servlet相關(guān)的對象的API竹伸,并且包裝了通用的servlet相關(guān)的功能的方法。
- session——表示一個請求的javax.servlet.http.HttpSession對象簇宽,session可以村相互用戶的狀態(tài)信息勋篓。
- application——表示一個javax.servlet.ServletContext對象,這有助于查找有關(guān)servlet引擎和servlet環(huán)境的信息魏割。
- config——表示一個javax.servlet.ServletConfig對象譬嚣,該對象用于存取servlet實例的初始化數(shù)據(jù)。
- page——表示從該頁面產(chǎn)生的一個servlet實例钞它。
14. jsp和servlet有奶俄相同點和不同點拜银?他們之間的聯(lián)系是什么?
jsp是servlet技術(shù)的擴展遭垛,本質(zhì)上是servlet的簡易方式尼桶,強調(diào)應(yīng)用的表現(xiàn)和表達,jsp編譯后是“類servlet”锯仪,servlet和jsp最主要的不同點在于泵督,servlet的應(yīng)用邏輯是在java文件中,并且完全從表示層中的html里分離出來庶喜,而jsp的情況但是java和html可以組合成一個擴展名為.jsp的文件小腊,jsp側(cè)重于視圖,servlet主要用于控制邏輯久窟。
15. 匿名內(nèi)部類(Anonymous Inner Class)是否可繼承其他類秩冈,是否可以實現(xiàn)接口?
可以繼承其他類或完成其他接口瘸羡,在swing編程中常用此方式漩仙。
16. HashMap和HashTable的區(qū)別
HashMap是HashTable的輕量級實現(xiàn)(非線程安全的實現(xiàn)),他們都完成了Map接口犹赖,主要區(qū)別在于HashMap允許空鍵值(key)队他,郁郁非線程安全,效率上可能高于HashTable峻村。
17. String s=new String("abc");創(chuàng)建了幾個對象麸折?
創(chuàng)建了兩個 一個是“abc” 一個是指向“abc”對象的 S 對象。
18. Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)==12粘昨,Math.round(-11.5)==-11垢啼,
return方法返回與參數(shù)最接近的長整數(shù),參數(shù)加1/2后求其floor张肾。
19. sleep()和wait()的區(qū)別芭析?
sleep是線程類(thread)的方法。導(dǎo)致此線程暫停執(zhí)行之地昂時間吞瞪,給執(zhí)行的機會給其他線程馁启,但是監(jiān)控狀態(tài)依然保持,到時候后自動回復(fù)芍秆,調(diào)用sleep不會釋放對象鎖惯疙。
wait是object類的方法,對此對象發(fā)出wait方法導(dǎo)致本線程放棄對象鎖妖啥,進入等待此對象的的呢古代鎖定池霉颠,只有針對此對象發(fā)出notify方法(或者notifyAll)后本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態(tài)。
20. 數(shù)組有沒有l(wèi)ength()這個方法荆虱?String有沒有l(wèi)ength()這個方法蒿偎?
數(shù)組沒有l(wèi)ength()這個方法,有l(wèi)ength方法怀读。
String有l(wèi)ength()方法酥郭。
21. Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?
方法的重寫OVerriding和重載Overloading是Java多態(tài)的不同表現(xiàn)愿吹,
重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn)不从,重載Overloading是一個類中多態(tài)性的一種表現(xiàn),
如果在子類中定義某方法與其父類有相同的名稱和參數(shù)犁跪,我們說該方法被重寫(Voerriding)椿息。子類的對象使用這個方法時,將調(diào)用子類中的定義坷衍,對它而言寝优,父類中的定義如同被屏蔽了,如果在一個類中定義了多個同名的方法枫耳,他們或有不同的參數(shù)個數(shù)或有不同的參數(shù)類型乏矾,則稱為方法的重載(Overriding),Overriding的方法是可以改變返回值的類型。
22. Set里的元素是不是能夠重復(fù)的,那么用什么方法來區(qū)分重復(fù)與否呢钻心?使用==還是用equals()?他們有什么區(qū)別凄硼?
Set里的元素是不能重復(fù)的,那么用iterator()方法來區(qū)分重復(fù)與否捷沸。equals()方法是判斷兩個Set是否相等摊沉。
equals()和==方法決定引用值是否指向同一個對象,equals()在類中被覆蓋痒给,為的是當(dāng)兩個分離的對象的內(nèi)容和類型相配的話说墨,返回真值。
23. error和exception 的區(qū)別
- error表示恢復(fù)不是不可能但是很困難的情況下的一種嚴重問題苍柏。比如說內(nèi)存溢出尼斧,不可能指望程序能處理之中情況。
- exception表示一種設(shè)計或?qū)崿F(xiàn)問題试吁。也就是說棺棵,他表示如果程序運行正常,從不會發(fā)生的情況潘悼。
24. abstract class和interface有什么區(qū)別律秃?(抽象類與接口的區(qū)別)
聲明方法的存在不去實現(xiàn)他的類被叫做抽象類(abstrct class),它用于要創(chuàng)建一個體現(xiàn)某些基本行為的類,并為該類聲明方法治唤,但不能在類終中實現(xiàn)該類的情況棒动,不能創(chuàng)建abstract類的實例。然而可以創(chuàng)建一個變量宾添,其類型就是一個抽象類船惨,并讓他指向具體的子類的一個實例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法缕陕,abstract類的子類為他們的父類中的所有抽象方法提供實現(xiàn)粱锐,否則他們也是抽象類為,取而代之扛邑,在子類中是實現(xiàn)該方法怜浅。知道其行為的其他類可以在類中實現(xiàn)這些方法。
接口(interface)是抽象類的變體蔬崩,在接口中恶座,所有方法都是抽象的。多繼承性可通過實現(xiàn)這樣的接口而獲得沥阳。接口中的所有方法都是抽象的跨琳,沒有一個有程序體,接口只可以定義static final成員變量桐罕,接口的實現(xiàn)與子類相似脉让,除了個實現(xiàn)類不能從從接口定義中繼承行為桂敛,當(dāng)類實現(xiàn)特殊的接口時,他定義(即將程序給予)多有這種接口的犯法溅潜,然后术唬,它可以在實現(xiàn)了該接口的類的任何對象上調(diào)用接口的方法,由于抽象類伟恶,它允許使用接口名作為應(yīng)用變量的類型碴开。通常的動態(tài)聯(lián)編將生效毅该,引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換博秫,instanceof運算符可以用來決定某對象的類是實現(xiàn)了接口。
25. abstract的method是否可同時是static眶掌,是否可以是同時是native挡育,是否同時是synchronized?
都不可以
26. jsp頁面中的跳轉(zhuǎn)方式分別是什么?有什么區(qū)別朴爬?
有兩種即寒,分別是
< JSP:INCLUDE page="jjj.jsp" fresh="true">
< JSP:FORWARD page="nextpage.jsp">
區(qū)別:
前者頁面不會轉(zhuǎn)向include所指的頁面,只是顯示該頁的結(jié)果召噩,主頁面還是原來的頁面母赵,執(zhí)行完后就會回來,相當(dāng)于函數(shù)調(diào)用具滴,并且可以帶有參數(shù)凹嘲,后指完全轉(zhuǎn)向新的頁面,不會再回來构韵。相當(dāng)于個goto語句周蹭。
27. java servlet API中的forward()和redirect()的區(qū)別?
前者僅是容器中控制權(quán)的轉(zhuǎn)向疲恢,在客戶端瀏覽器地址欄中不會顯示出轉(zhuǎn)向的地址凶朗,后者則是完全的跳轉(zhuǎn),瀏覽器將會得到跳轉(zhuǎn)的地址显拳,并重新發(fā)送請求鏈接棚愤,這樣,從瀏覽器的地址欄中就可以看到跳轉(zhuǎn)以后的鏈接地址杂数,多億宛畦,牽制更為高效。在前者可以滿足需要的同時耍休,盡量使用forward()方法刃永,并且這樣有助于隱藏實際的鏈接,在有些情況下羊精,比如需要跳轉(zhuǎn)到其他瀏覽器的資源斯够,則必須用sendRedeirct()方法囚玫。
28. xml有哪些解析技術(shù)?區(qū)別是什么读规?
有DOM抓督,SAX,STAX等
- DOM:處理大型文件是其性能下降的非常厲害束亏,這個問題是由DOM的樹結(jié)構(gòu)造成的铃在,這種結(jié)構(gòu)占用的內(nèi)存較多,而且DOM必須在解析文件之前把整個文檔裝入內(nèi)存碍遍,適合對xml的隨機訪問定铜,sax:不現(xiàn)于,DOM怕敬,SAX是事件驅(qū)動型的xml解析方式揣炕,他順序的讀取xml文件,不需要自已全部裝載正文件东跪,當(dāng)遇到文檔開頭畸陡,文檔結(jié)束,或者標簽開都與標簽結(jié)束時虽填,他會觸發(fā)一個事件丁恭,用于通過在其回調(diào)事件中寫入處理代碼來處理xml文件,適合對xml的順序訪問斋日。
- Stax:Streaming API for xml(Stax)牲览。
29. jsp中有哪些內(nèi)置對象?他們的作用是什么桑驱?
jsp中共9中內(nèi)置組件:
- request:用戶端請求竭恬,此請求會包含來自GET/Post請求的參數(shù);
- response:網(wǎng)頁傳回用戶端的回應(yīng)熬的。
- pageContext:頁面的屬性是在這里管理
- session:與請求有關(guān)的回話期
- application :Servlet正在執(zhí)行的內(nèi)容
- out :用來傳遞回應(yīng)的輸出
- config :servlet的構(gòu)架部件
- page jsp網(wǎng)頁本身
- exception :針對錯誤的網(wǎng)頁痊硕。未捕捉的例外。
30. 編程用java解析xml的方式
用sax方式解析xml押框,xml如下:
< ? xml version=1.0 encoding=gb2312? >
小黑
信息學(xué)院
6210798
男岔绸,1965,博士橡伞,94年調(diào)入清華大學(xué)
事件回調(diào)類SAXHandler.java
import java.io.*;
import java.util.Hashtable;
import org.xml.sax.*;
public class SAXHandler extends HandlerBase
{
private Hashtable table = new Hashtable();
private String currentElement = null;
private String currentValue = null;
public void setTable(Hashtable table)
{
this.table = table;
}
public Hashtable getTable()
{
return table;
}
public void startElement(String tag, AttributeList attrs)
throws SAXException
{
currentElement = tag;
}
public void characters(char[] ch, int start, int length)
throws SAXException
{
currentValue = new String(ch, start, length);
}
public void endElement(String name) throws SAXException
{
if (currentElement.equals(name))
table.put(currentElement, currentValue);
}
}
JSP內(nèi)容顯示源碼,SaxXml.jsp:
< %@page errorPage=ErrPage.jsp contentType=text/html;
charset=GB2312 %> >
< %@page import=java.io.*%>
< %@page import=java.util.Hashtable %>
< %@page import=org.w3c.dom.*% >
< %@page import=org.xml.sax.* %>
< %@page import=javax.xml.parsers.SAXParserFactory %>
< %@page import=javax.xml.parsers.SAXParser %>
< %@page import=SAXHandler %>
< %@
File file = new File(c:people.xml);
FileReader reader = new FileReader(file);
Parser parser;
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
SAXHandler handler = new SAXHandler();
sp.parse(new InputSource(reader), handler);
Hashtable hashTable = handler.getTable();
out.println( );
out.println(
+ );
out.println(
+ );
out.println(
+ );
out.println(
+ );
out.println(
教師信息表 姓名 +
(String)hashTable.get(new String(name)) +
學(xué)院 +
(String)hashTable.get(new String(college))+
電話 +
(String)hashTable.get(new String(telephone)) +
備注 +
(String)hashTable.get(new String(notes)) +
);
>
31. EJB與JavaBean的區(qū)別
JavaBean是可重復(fù)用的組件盒揉,對JavaBean并沒有嚴格的規(guī)范,理論上講兑徘,任何一個Java類都可以是一個Bean刚盈,但是通常情況下,由于JavaBean是被容器所建(如tomcat等)的挂脑。所以JavaBean應(yīng)具有一個參數(shù)的構(gòu)造器藕漱,另外通常JavaBean還要實現(xiàn)serializable接口用于實現(xiàn)Bean的持久性欲侮,JavaBean實際上相當(dāng)于微軟Com模型中的本地進程中com組件,踏實不能被夸進程訪問的肋联,enterorise JavaBean相當(dāng)于DCOM威蕉,即分布式組件,踏實基于java的與阿成方法的調(diào)用(RMI)技術(shù)的橄仍,所以EJB可以被遠程訪問(跨進成韧涨,跨計算機)但是EJB必須被部署在諸如websoere、weblogic這樣的容器中侮繁,EJB客戶從不直接訪問真正的EJB組件虑粥,而是通過其容器訪問,EJB容器是EJB組建的代理鼎天,EJB組件由容器創(chuàng)建和管理舀奶∈罹梗客戶通過容器訪問真正的EJB組件斋射。