對(duì)原理的掌握,決定你以后發(fā)展的高度
Java的數(shù)據(jù)結(jié)構(gòu)你用過哪些?Map與Set的本質(zhì)區(qū)別是什么?
Spring整合ORM框架時(shí),事務(wù)管理用哪個(gè)類?是Spring控制事務(wù)的提交還是ORM框架控制?同一事務(wù)中執(zhí)行兩個(gè)更新操作,它的工作原理是怎樣的?
Http協(xié)議你了解嗎?文件上傳時(shí),進(jìn)度條的設(shè)計(jì)原理是什么?
查詢一個(gè)字段值有重復(fù)的表,要去除重復(fù)項(xiàng),SQL語(yǔ)句怎么寫?
Java中的Annotation的工作原理是什么?
*分層架構(gòu)中,Dao層的作用是什么?如果不要DAO層,能不能實(shí)現(xiàn)有Dao層時(shí)的優(yōu)點(diǎn)?HibernateDaoSupport,ActionSupport等類中所指的Support,是不是一種設(shè)計(jì)模式?若是,那說說你對(duì)這種設(shè)計(jì)模式的理解?
對(duì)數(shù)據(jù)庫(kù)的存儲(chǔ)過程熟悉不?對(duì)CSS熟悉不?
說說Struts2的工作原理?
Hibernate框架的設(shè)計(jì)有什么不好的地方?
你是怎么樣實(shí)現(xiàn)分頁(yè)顯示的?具體原理怎么樣?Hibernate的setMaxResults和setFirstResult內(nèi)部是怎么實(shí)現(xiàn)分布查詢的?
Struts,Hibernate,Spring等框架,你哪個(gè)最熟悉?有沒有讀過它的源代碼?你用過Spring框架的那些功能?
面向?qū)ο蟮奶卣饔心男┓矫妫?br> 抽象,就是將具有一致屬性和行為的對(duì)象抽象成一個(gè)類,只強(qiáng)調(diào)本質(zhì)的屬性和行為,先不考慮具體的細(xì)節(jié)。
繼承,子類自動(dòng)共享父類的屬性和行為。單重繼承是指子類只繼承一個(gè)父類的屬性和行為,多重繼承是子類可以繼承多個(gè)類的屬性和行為。
多態(tài),相同的函數(shù)作用在不同的對(duì)象上會(huì)獲得不同的結(jié)果。
封裝,只給用戶看用戶需要看的東西。int 和 Integer 有什么區(qū)別
Java 提供兩種不同的類型:原始類型(或內(nèi)置類型)和引用類型。Java為每個(gè)原始類型提供了封裝類。
Int是java的原始數(shù)據(jù)類型,Integer是java為int提供的封裝類。原始類型 封裝類boolean Booleanchar Characterbyte Byteshort Shortint Integerlong Longfloat Floatdouble Double
引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問題等。另外,對(duì)象引用實(shí)例變量的缺省值為 null,而原始類型實(shí)例變量的缺省值與它們的類型有關(guān)。String 和StringBuffer的區(qū)別
JAVA平臺(tái)提供了兩個(gè)類:String和StringBuffer,它們可以儲(chǔ)存和操作字符串。
String類提供了數(shù)值不可改變的字符串。而StringBuffer類提供的字符串可以進(jìn)行修改,常使用StringBuffers來(lái)動(dòng)態(tài)構(gòu)造字符數(shù)據(jù)。說出ArrayList,Vector, LinkedList的存儲(chǔ)性能和特性 ArrayList和Vector都是使用數(shù)組方式存儲(chǔ)數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲(chǔ)的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號(hào)索引元素,但是插入元素要涉及數(shù)組元素移動(dòng)等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢。
Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差。
LinkedList使用雙向鏈表實(shí)現(xiàn)存儲(chǔ),按序號(hào)索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入速度較快。Collection 和 Collections的區(qū)別。 Collection是集合類的上級(jí)接口,繼承與他的接口主要有Set 和List. Collections是針對(duì)集合類的一個(gè)幫助類,他提供一系列靜態(tài)方法實(shí)現(xiàn)對(duì)各種集合的搜索、排序、線程安全化等操作。
HashMap和Hashtable的區(qū)別。
HashMap是Map接口的實(shí)現(xiàn),允許鍵(key)和值(value)為null,使用containsKey()和containsValue()來(lái)判斷是否含有某數(shù)據(jù)。
Hashtable繼承Dictionary類,不允許值為null,使用contains()判斷是否含有某數(shù)據(jù)。
最大不同時(shí)HashMap不支持線程安全,因此,多線程訪問時(shí)必須提供外同步方法,使用方法為Map map = Collections.synchronizedMap(new HashMap());)
Hashtable支持線程安全,多線程訪問不需提供外同步方法。final, finally, finalize的區(qū)別。 final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。 finally是異常處理語(yǔ)句結(jié)構(gòu)的一部分,表示總是執(zhí)行。 finalize是Object類的一個(gè)方法,在垃圾收集器GC執(zhí)行的時(shí)候會(huì)調(diào)用被回收對(duì)象的此方法,可以覆蓋此方法提供垃圾收集時(shí)的其他資源回收,例如關(guān)閉文件等。
sleep() 和 wait() 有什么區(qū)別?
sleep()是Thread類里的方法,調(diào)用并不釋放鎖,即占有資源等待。一般給sleep()指定時(shí)間,時(shí)間一到,線程處于可運(yùn)行狀態(tài)。可以在任意地方使用sleep(),但使用時(shí)需要捕捉InterpretedException。
wait()是Object類里的方法,調(diào)用釋放鎖,即釋放資源后進(jìn)入被釋放資源的等待池等待被notify。一般不給wait()指定時(shí)間,因?yàn)闀r(shí)間一到,線程也只是轉(zhuǎn)入到就緒狀態(tài)。wait()必須和notify()/notifyAll()在同步控制方法中一起使用。Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?
Overload是重載,是同一個(gè)類中的多態(tài)的體現(xiàn)。相同名字的函數(shù)改變參數(shù)個(gè)數(shù)或者參數(shù)類型可以實(shí)現(xiàn)重載。
Override是重寫,是父類和子類之間的多態(tài)的體現(xiàn)。若子類中定義的函數(shù)與父類中某函數(shù)具有相同的名稱和參數(shù),則該方法被重寫。
Overload重載的方法可以改變返回值的類型。10.error和exception有什么區(qū)別?
error表示恢復(fù)很困難的嚴(yán)重問題,如內(nèi)存溢出。程序并不能處理這樣的情況。
exception指程序中的問題。在程序中,可以throw,也可以被捕捉進(jìn)行處理。abstract class和interface有什么區(qū)別?
interface中有:
變量(public、static、final),因?yàn)槭莝tatic的,所以不通過對(duì)象訪問;因?yàn)槭莊inal的,所以聲明時(shí)需要有value(指定的或默認(rèn)的)且該值不能修改。
函數(shù)(public、static、abstract),不能有函數(shù)體實(shí)現(xiàn),也就是函數(shù)聲明后面沒有{},直接跟;。
abstract class中有:
變量
抽象函數(shù),即沒有方法體的函數(shù)
一般函數(shù)
interface體現(xiàn)的是“l(fā)ike a”,而abstract class體現(xiàn)的是“is a”,可以根據(jù)這個(gè)含義在實(shí)際應(yīng)用中靈活使用接口或者抽象類。
interface是實(shí)現(xiàn)(implement),abstract class是繼承(extends)。
interface可以繼承多個(gè)interface,并且一個(gè)類可以實(shí)現(xiàn)多個(gè)interface,而一個(gè)類只能繼承一個(gè)abstract class。
abstract class可以實(shí)現(xiàn)interface。12.內(nèi)存分配的幾種方式?
棧(Heap),由系統(tǒng)申請(qǐng)和釋放,存放函數(shù)的參數(shù)和局部變量。
堆(Heap),由程序員申請(qǐng)。
全局變量區(qū),由系統(tǒng)申請(qǐng)和釋放存放全局變量或者靜態(tài)變量。
常量區(qū),存放常量字符串。
代碼區(qū),存放代碼。heap和stack有什么區(qū)別?
棧(Heap),由系統(tǒng)申請(qǐng)和釋放,存放函數(shù)的參數(shù)和局部變量。棧的容量是有限的。存取效率高。
堆(Heap),由程序員申請(qǐng)。堆的容量和虛擬內(nèi)容有關(guān)。GC是什么? 為什么要有GC?GC有什么優(yōu)點(diǎn)?
GC是垃圾收集器的意思(Gabage Collection)。對(duì)象一旦被創(chuàng)建,GC就會(huì)監(jiān)控它的內(nèi)存地址,大小等使用情況,采用有向圖的方法標(biāo)記對(duì)象為可達(dá)或者不可達(dá),當(dāng)對(duì)象為不可達(dá)時(shí),GC就會(huì)回收它。
也可以使用System.gc()主動(dòng)進(jìn)行垃圾回收,但是JVM回收垃圾的時(shí)間并不能得到確定。
Java中的垃圾回收機(jī)制可以使程序員不去關(guān)注內(nèi)存回收的情況,專注于自己的程序。給我一個(gè)你最常見到的runtime exception。
IndexOutOfBoundException越界
NumberFormatException是Sring類型轉(zhuǎn)換成數(shù)字類型型時(shí)出錯(cuò)。16.List, Set, Map是否繼承自Collection接口? List,Set是,Map不是
List元素是有序可重復(fù)的,實(shí)現(xiàn)有ArrayList,Vector。
Set元素是無(wú)序不可重復(fù)的,實(shí)現(xiàn)有HashSet,TreeSet。equals()和==的區(qū)別?
==是判斷對(duì)象在內(nèi)存中的地址是否相等。
equals()是Object類里的方法,其實(shí)現(xiàn)使用==,所以,是判斷對(duì)象在內(nèi)存中地址是否相等。但是,在一些特殊類(如Integer,String)中,該方法被重寫,可以判斷內(nèi)容是否相同。是否可以繼承String類? String類是final類故不可以繼承。
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? switch(expr1)中,expr1是一個(gè)整數(shù)表達(dá)式。因此傳遞給 switch 和 case 語(yǔ)句的參數(shù)應(yīng)該是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。
try {}里有一個(gè)return語(yǔ)句,那么緊跟在這個(gè)try后的finally {}里的code會(huì)不會(huì)被執(zhí)行,什么時(shí)候被執(zhí)行,在return前還是后? 會(huì)執(zhí)行,在return前執(zhí)行。
兩個(gè)對(duì)象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對(duì)不對(duì)? 需要看這兩個(gè)對(duì)象是什么。如果是String、Integer,會(huì)出現(xiàn)這樣的情況,因?yàn)榇藭r(shí)equals()是比較兩個(gè)對(duì)象的內(nèi)容。對(duì)于 一般的對(duì)象,equals()比較的是內(nèi)存中的地址,所以,如果地址相同,則hash code也會(huì)相同。
-
編程題: 寫一個(gè)Singleton出來(lái)。 Singleton模式保證該類只有一個(gè)對(duì)象,并且易于訪問。
復(fù)制代碼
1 public class Singleton{ 2 3 private static Singleton instance;//private保證其他類不能直接訪問Singleton的對(duì)象,static保證可以直接使用Singleton的名字,而非再在類外定義Singleton的對(duì)象。 4 5 private Singleton() 6 7 { 8 9 //do something10 11 } 12 13 public static Singleton getInstance()//使Singleton的對(duì)象易于訪問14 15 {16 17 if(instance==null) instance=new Singleton();18 19 return instance;20 } 22 23 }
復(fù)制代碼 Java的接口和C++的虛類的相同和不同處。 由于Java不支持多繼承,而有可能某個(gè)類或?qū)ο笠褂梅謩e在幾個(gè)類或?qū)ο罄锩娴姆椒ɑ驅(qū)傩裕F(xiàn)有的單繼承機(jī)制就不能滿足要求。與繼承相比,接口有更高的靈活性,因?yàn)榻涌谥袥]有任何實(shí)現(xiàn)代碼。當(dāng)一個(gè)類實(shí)現(xiàn)了接口以后,該類要實(shí)現(xiàn)接口里面所 有的方法和屬性,并且接口里面的屬性在默認(rèn)狀態(tài)下面都是public static,所有方法默認(rèn)情況下是public.一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。
多線程有幾種實(shí)現(xiàn)方法,都是什么?同步有幾種實(shí)現(xiàn)方法,都是什么? 多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口 同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,wait與notify
進(jìn)程、線程的基本概念、基本狀態(tài)以及狀態(tài)之間的關(guān)系
進(jìn)程是計(jì)算機(jī)中資源分配的基本單位,是程序的一次運(yùn)行。
線程是計(jì)算機(jī)中調(diào)度的基本單位,每個(gè)程序至少都有一個(gè)線程。
基本狀態(tài)是:就緒、運(yùn)行、阻塞或掛起、結(jié)束。
運(yùn)行start(),處于就緒狀態(tài),運(yùn)行run()方法,處于運(yùn)行狀態(tài),wait()是被掛起,dead()表示結(jié)束。簡(jiǎn)述邏輯操作(&,|,^)與條件操作(&&,||)的區(qū)別。
條件操作只能操作布爾型,邏輯操作不僅可以操作布爾型,而且可以操作數(shù)值型
條件操作會(huì)產(chǎn)生短路(確定這個(gè)語(yǔ)句的結(jié)果后,后面的部分就不再執(zhí)行),邏輯操作不會(huì)產(chǎn)生短路。.j2ee常用的設(shè)計(jì)模式?說明工廠模式。
Factory(工廠模式)
Singleton(單例模式)
Adapter(適配器模式)工廠模式:工廠模式是一種經(jīng)常被使用到的模式,根據(jù)工廠模式實(shí)現(xiàn)的類可以根據(jù)提供的數(shù)據(jù)生成一組類中某一個(gè)類的實(shí)例,通常這一組類有一個(gè)公共的抽象父類并且實(shí)現(xiàn)了相同的方法,但是這些方法針對(duì)不同的數(shù)據(jù)進(jìn)行了不同的操作。首先需要定義一個(gè)基類,該類的子類通過不同的方法實(shí)現(xiàn)了基類中的方法。然后需要定義一個(gè)工廠類,工廠類可以根據(jù)條件生成不同的子類實(shí)例。當(dāng)?shù)玫阶宇惖膶?shí)例后,開發(fā)人員可以調(diào)用基類中的方法而不必考慮到底返回的是哪一個(gè)子類的實(shí)例。排序都有哪幾種方法?
插入排序:直接插入排序、希爾排序
交換排序:冒泡排序、快速排序
選擇排序:簡(jiǎn)單選擇排序、堆排序
二路歸并排序
技術(shù)排序JAVA語(yǔ)言如何進(jìn)行異常處理,關(guān)鍵字:throws,throw,try,catch,finally分別代表什么意義?在try塊中可以拋出異常嗎?
Java中每個(gè)異常都是一個(gè)對(duì)象,是Throwable類或其他子類的實(shí)例。
throws用于函數(shù)聲明的最后,表明該函數(shù)可能會(huì)發(fā)生的異常
throw語(yǔ)句明確的拋出異常
try語(yǔ)句塊里是可能發(fā)生異常的程序,緊跟在try后面應(yīng)該是catch語(yǔ)句塊來(lái)捕捉“異常”的類型
finally是不管語(yǔ)句塊發(fā)生什么異常,總會(huì)執(zhí)行的語(yǔ)句一個(gè)“.java”源文件中是否可以包括多個(gè)類(不是內(nèi)部類)?有什么限制?
可以。但是必須只有一個(gè)public的類的名字與文件名相同。java中有幾種方法可以實(shí)現(xiàn)一個(gè)線程?用什么關(guān)鍵字修飾同步方法? stop()和suspend()方法為何不推薦使用? 有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口 用synchronized關(guān)鍵字修飾同步方法反對(duì)使用stop(),是因?yàn)樗话踩K鼤?huì)解除由線程獲取的所有鎖定,而且如果對(duì)象處于一種不連貫狀態(tài),那么其他線程能在那種狀態(tài)下檢查和修改它們。結(jié)果很難檢查出真正的問題所在。suspend()方法容易發(fā)生死鎖。調(diào)用suspend()的時(shí)候,目標(biāo)線程會(huì)停下來(lái),但卻仍然持有在這之前獲得的鎖定。此時(shí),其他任何線程都不能訪問鎖定的資源,除非被“掛起”的線程恢復(fù)運(yùn)行。對(duì)任何線程來(lái)說,如果它們想恢復(fù)目標(biāo)線程,同時(shí)又試圖使用任何一個(gè)鎖定的資源,就會(huì)造成死鎖。所以不應(yīng)該使用suspend(),而應(yīng)在自己的Thread類中置入一個(gè)標(biāo)志,指出線程應(yīng)該活動(dòng)還是掛起。若標(biāo)志指出線程應(yīng)該掛起,便用wait()命其進(jìn)入等待狀態(tài)。若標(biāo)志指出線程應(yīng)當(dāng)恢復(fù),則用一個(gè)notify()重新啟動(dòng)線程。舉例
java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請(qǐng)說出他們分別是哪些類? 字節(jié)流,字符流。字節(jié)流繼承于InputStream OutputStream,字符流繼承于InputStreamReader OutputStreamWriter。
java中會(huì)存在內(nèi)存泄漏嗎,請(qǐng)簡(jiǎn)單描述。
Java中內(nèi)存泄露是指能夠可達(dá),但是不會(huì)再被使用的對(duì)象。而C/C++中內(nèi)存泄露是指找不到,無(wú)法被回收的對(duì)象。-
.是否可以從一個(gè)static方法內(nèi)部發(fā)出對(duì)非static方法的調(diào)用? 不可以。這個(gè)在程序挑錯(cuò)里可能會(huì)出現(xiàn)。
例如:
復(fù)制代碼
1 public class Something {2 public static void main(String[] args) {3 Something s = new Something();4 System.out.println("s.doSomething() returns " + doSomething());5 }6 public String doSomething() {7 return "Do something ...";8 }9 }
復(fù)制代碼
答案: 錯(cuò)。看上去在main里call doSomething沒有什么問題,畢竟兩個(gè)methods都在同一個(gè)class里。但仔細(xì)看,main是static的。static method不能直接call non-static methods。可改成"System.out.println("s.doSomething() returns " + s.doSomething());"。同理,static method不能訪問non-static instant variable。
- 說出一些常用的類,包,接口,請(qǐng)各舉5個(gè)
常用的類:String、Integer、Math、FileReader、FileWriter
常用的包:java.util、java.io、java.sql、java.lang、java.awt
常用的接口:Runnable、List、Set、Map、Document