對原理的掌握仗处,決定你以后發(fā)展的高度
Java的數(shù)據(jù)結(jié)構(gòu)你用過哪些鼠冕?Map與Set的本質(zhì)區(qū)別是什么?
Spring整合ORM框架時防症,事務(wù)管理用哪個類?是Spring控制事務(wù)的提交還是ORM框架控制哎甲?同一事務(wù)中執(zhí)行兩個更新操作蔫敲,它的工作原理是怎樣的?
Http協(xié)議你了解嗎炭玫?文件上傳時奈嘿,進度條的設(shè)計原理是什么?
查詢一個字段值有重復(fù)的表,要去除重復(fù)項筒主,SQL語句怎么寫?
Java中的Annotation的工作原理是什么值漫?
*分層架構(gòu)中伯诬,Dao層的作用是什么晚唇?如果不要DAO層,能不能實現(xiàn)有Dao層時的優(yōu)點盗似?HibernateDaoSupport哩陕,ActionSupport等類中所指的Support,是不是一種設(shè)計模式赫舒?若是悍及,那說說你對這種設(shè)計模式的理解?
對數(shù)據(jù)庫的存儲過程熟悉不接癌?對CSS熟悉不心赶?
說說Struts2的工作原理?
Hibernate框架的設(shè)計有什么不好的地方缺猛?
你是怎么樣實現(xiàn)分頁顯示的缨叫?具體原理怎么樣?Hibernate的setMaxResults和setFirstResult內(nèi)部是怎么實現(xiàn)分布查詢的荔燎?
Struts耻姥,Hibernate,Spring等框架有咨,你哪個最熟悉琐簇?有沒有讀過它的源代碼?你用過Spring框架的那些功能座享?
面向?qū)ο蟮奶卣饔心男┓矫妫?br> 抽象婉商,就是將具有一致屬性和行為的對象抽象成一個類,只強調(diào)本質(zhì)的屬性和行為渣叛,先不考慮具體的細節(jié)丈秩。
繼承,子類自動共享父類的屬性和行為诗箍。單重繼承是指子類只繼承一個父類的屬性和行為癣籽,多重繼承是子類可以繼承多個類的屬性和行為。
多態(tài)滤祖,相同的函數(shù)作用在不同的對象上會獲得不同的結(jié)果筷狼。
封裝,只給用戶看用戶需要看的東西匠童。int 和 Integer 有什么區(qū)別
Java 提供兩種不同的類型:原始類型(或內(nèi)置類型)和引用類型埂材。Java為每個原始類型提供了封裝類。
Int是java的原始數(shù)據(jù)類型汤求,Integer是java為int提供的封裝類俏险。原始類型 封裝類boolean Booleanchar Characterbyte Byteshort Shortint Integerlong Longfloat Floatdouble Double
引用類型和原始類型具有不同的特征和用法严拒,它們包括:大小和速度問題等。另外竖独,對象引用實例變量的缺省值為 null裤唠,而原始類型實例變量的缺省值與它們的類型有關(guān)。String 和StringBuffer的區(qū)別
JAVA平臺提供了兩個類:String和StringBuffer莹痢,它們可以儲存和操作字符串种蘸。
String類提供了數(shù)值不可改變的字符串。而StringBuffer類提供的字符串可以進行修改竞膳,常使用StringBuffers來動態(tài)構(gòu)造字符數(shù)據(jù)航瞭。說出ArrayList,Vector, LinkedList的存儲性能和特性 ArrayList和Vector都是使用數(shù)組方式存儲數(shù)據(jù),此數(shù)組元素數(shù)大于實際存儲的數(shù)據(jù)以便增加和插入元素坦辟,它們都允許直接按序號索引元素刊侯,但是插入元素要涉及數(shù)組元素移動等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢锉走。
Vector由于使用了synchronized方法(線程安全)滨彻,通常性能上較ArrayList差。
LinkedList使用雙向鏈表實現(xiàn)存儲挪蹭,按序號索引數(shù)據(jù)需要進行前向或后向遍歷疮绷,但是插入數(shù)據(jù)時只需要記錄本項的前后項即可,所以插入速度較快嚣潜。Collection 和 Collections的區(qū)別。 Collection是集合類的上級接口椅贱,繼承與他的接口主要有Set 和List. Collections是針對集合類的一個幫助類懂算,他提供一系列靜態(tài)方法實現(xiàn)對各種集合的搜索、排序庇麦、線程安全化等操作计技。
HashMap和Hashtable的區(qū)別。
HashMap是Map接口的實現(xiàn)山橄,允許鍵(key)和值(value)為null垮媒,使用containsKey()和containsValue()來判斷是否含有某數(shù)據(jù)。
Hashtable繼承Dictionary類航棱,不允許值為null睡雇,使用contains()判斷是否含有某數(shù)據(jù)。
最大不同時HashMap不支持線程安全饮醇,因此它抱,多線程訪問時必須提供外同步方法,使用方法為Map map = Collections.synchronizedMap(new HashMap());)
Hashtable支持線程安全朴艰,多線程訪問不需提供外同步方法观蓄。final, finally, finalize的區(qū)別混移。 final 用于聲明屬性,方法和類侮穿,分別表示屬性不可變歌径,方法不可覆蓋亲茅,類不可繼承回铛。 finally是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行芯急。 finalize是Object類的一個方法勺届,在垃圾收集器GC執(zhí)行的時候會調(diào)用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收娶耍,例如關(guān)閉文件等免姿。
sleep() 和 wait() 有什么區(qū)別?
sleep()是Thread類里的方法,調(diào)用并不釋放鎖榕酒,即占有資源等待胚膊。一般給sleep()指定時間,時間一到想鹰,線程處于可運行狀態(tài)紊婉。可以在任意地方使用sleep()辑舷,但使用時需要捕捉InterpretedException喻犁。
wait()是Object類里的方法,調(diào)用釋放鎖何缓,即釋放資源后進入被釋放資源的等待池等待被notify肢础。一般不給wait()指定時間,因為時間一到碌廓,線程也只是轉(zhuǎn)入到就緒狀態(tài)传轰。wait()必須和notify()/notifyAll()在同步控制方法中一起使用。Overload和Override的區(qū)別谷婆。Overloaded的方法是否可以改變返回值的類型?
Overload是重載慨蛙,是同一個類中的多態(tài)的體現(xiàn)。相同名字的函數(shù)改變參數(shù)個數(shù)或者參數(shù)類型可以實現(xiàn)重載纪挎。
Override是重寫期贫,是父類和子類之間的多態(tài)的體現(xiàn)。若子類中定義的函數(shù)與父類中某函數(shù)具有相同的名稱和參數(shù)廷区,則該方法被重寫唯灵。
Overload重載的方法可以改變返回值的類型。10.error和exception有什么區(qū)別?
error表示恢復(fù)很困難的嚴重問題隙轻,如內(nèi)存溢出埠帕。程序并不能處理這樣的情況垢揩。
exception指程序中的問題。在程序中敛瓷,可以throw叁巨,也可以被捕捉進行處理。abstract class和interface有什么區(qū)別?
interface中有:
變量(public呐籽、static锋勺、final),因為是static的狡蝶,所以不通過對象訪問庶橱;因為是final的,所以聲明時需要有value(指定的或默認的)且該值不能修改贪惹。
函數(shù)(public苏章、static、abstract)奏瞬,不能有函數(shù)體實現(xiàn)枫绅,也就是函數(shù)聲明后面沒有{},直接跟硼端;并淋。
abstract class中有:
變量
抽象函數(shù),即沒有方法體的函數(shù)
一般函數(shù)
interface體現(xiàn)的是“l(fā)ike a”珍昨,而abstract class體現(xiàn)的是“is a”县耽,可以根據(jù)這個含義在實際應(yīng)用中靈活使用接口或者抽象類。
interface是實現(xiàn)(implement)镣典,abstract class是繼承(extends)酬诀。
interface可以繼承多個interface,并且一個類可以實現(xiàn)多個interface骆撇,而一個類只能繼承一個abstract class。
abstract class可以實現(xiàn)interface父叙。12.內(nèi)存分配的幾種方式神郊?
棧(Heap),由系統(tǒng)申請和釋放趾唱,存放函數(shù)的參數(shù)和局部變量涌乳。
堆(Heap),由程序員申請甜癞。
全局變量區(qū)夕晓,由系統(tǒng)申請和釋放存放全局變量或者靜態(tài)變量。
常量區(qū)悠咱,存放常量字符串蒸辆。
代碼區(qū)征炼,存放代碼。heap和stack有什么區(qū)別躬贡?
棧(Heap)谆奥,由系統(tǒng)申請和釋放,存放函數(shù)的參數(shù)和局部變量拂玻。棧的容量是有限的酸些。存取效率高。
堆(Heap)檐蚜,由程序員申請魄懂。堆的容量和虛擬內(nèi)容有關(guān)。GC是什么? 為什么要有GC?GC有什么優(yōu)點闯第?
GC是垃圾收集器的意思(Gabage Collection)市栗。對象一旦被創(chuàng)建,GC就會監(jiān)控它的內(nèi)存地址乡括,大小等使用情況肃廓,采用有向圖的方法標記對象為可達或者不可達,當對象為不可達時诲泌,GC就會回收它盲赊。
也可以使用System.gc()主動進行垃圾回收,但是JVM回收垃圾的時間并不能得到確定敷扫。
Java中的垃圾回收機制可以使程序員不去關(guān)注內(nèi)存回收的情況哀蘑,專注于自己的程序。給我一個你最常見到的runtime exception葵第。
IndexOutOfBoundException越界
NumberFormatException是Sring類型轉(zhuǎn)換成數(shù)字類型型時出錯绘迁。16.List, Set, Map是否繼承自Collection接口? List,Set是卒密,Map不是
List元素是有序可重復(fù)的缀台,實現(xiàn)有ArrayList,Vector哮奇。
Set元素是無序不可重復(fù)的膛腐,實現(xiàn)有HashSet,TreeSet鼎俘。equals()和==的區(qū)別哲身?
==是判斷對象在內(nèi)存中的地址是否相等。
equals()是Object類里的方法贸伐,其實現(xiàn)使用==勘天,所以,是判斷對象在內(nèi)存中地址是否相等。但是脯丝,在一些特殊類(如Integer商膊,String)中,該方法被重寫巾钉,可以判斷內(nèi)容是否相同翘狱。是否可以繼承String類? String類是final類故不可以繼承。
swtich是否能作用在byte上砰苍,是否能作用在long上潦匈,是否能作用在String上? switch(expr1)中,expr1是一個整數(shù)表達式赚导。因此傳遞給 switch 和 case 語句的參數(shù)應(yīng)該是 int茬缩、 short、 char 或者 byte吼旧。long,string 都不能作用于swtich凰锡。
try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執(zhí)行圈暗,什么時候被執(zhí)行掂为,在return前還是后? 會執(zhí)行,在return前執(zhí)行员串。
兩個對象值相同(x.equals(y) == true)勇哗,但卻可有不同的hash code,這句話對不對? 需要看這兩個對象是什么寸齐。如果是String欲诺、Integer,會出現(xiàn)這樣的情況渺鹦,因為此時equals()是比較兩個對象的內(nèi)容扰法。對于 一般的對象,equals()比較的是內(nèi)存中的地址毅厚,所以塞颁,如果地址相同,則hash code也會相同吸耿。
-
編程題: 寫一個Singleton出來殴边。 Singleton模式保證該類只有一個對象,并且易于訪問珍语。
1 public class Singleton{ 2 3 private static Singleton instance;//private保證其他類不能直接訪問Singleton的對象竖幔,static保證可以直接使用Singleton的名字板乙,而非再在類外定義Singleton的對象。 4 5 private Singleton() 6 7 { 8 9 //do something10 11 } 12 13 public static Singleton getInstance()//使Singleton的對象易于訪問14 15 {16 17 if(instance==null) instance=new Singleton();18 19 return instance;20 } 22 23 }
Java的接口和C++的虛類的相同和不同處。 由于Java不支持多繼承募逞,而有可能某個類或?qū)ο笠褂梅謩e在幾個類或?qū)ο罄锩娴姆椒ɑ驅(qū)傩缘懊F(xiàn)有的單繼承機制就不能滿足要求。與繼承相比放接,接口有更高的靈活性刺啦,因為接口中沒有任何實現(xiàn)代碼。當一個類實現(xiàn)了接口以后纠脾,該類要實現(xiàn)接口里面所 有的方法和屬性玛瘸,并且接口里面的屬性在默認狀態(tài)下面都是public static,所有方法默認情況下是public.一個類可以實現(xiàn)多個接口。
多線程有幾種實現(xiàn)方法,都是什么?同步有幾種實現(xiàn)方法,都是什么? 多線程有兩種實現(xiàn)方法苟蹈,分別是繼承Thread類與實現(xiàn)Runnable接口 同步的實現(xiàn)方面有兩種糊渊,分別是synchronized,wait與notify
進程、線程的基本概念慧脱、基本狀態(tài)以及狀態(tài)之間的關(guān)系
進程是計算機中資源分配的基本單位渺绒,是程序的一次運行。
線程是計算機中調(diào)度的基本單位菱鸥,每個程序至少都有一個線程宗兼。
基本狀態(tài)是:就緒、運行氮采、阻塞或掛起殷绍、結(jié)束。
運行start()扳抽,處于就緒狀態(tài)篡帕,運行run()方法,處于運行狀態(tài)贸呢,wait()是被掛起镰烧,dead()表示結(jié)束。簡述邏輯操作(&,|,^)與條件操作(&&,||)的區(qū)別楞陷。
條件操作只能操作布爾型怔鳖,邏輯操作不僅可以操作布爾型,而且可以操作數(shù)值型
條件操作會產(chǎn)生短路(確定這個語句的結(jié)果后固蛾,后面的部分就不再執(zhí)行)结执,邏輯操作不會產(chǎn)生短路。.j2ee常用的設(shè)計模式艾凯?說明工廠模式献幔。
Factory(工廠模式)
Singleton(單例模式)
Adapter(適配器模式)工廠模式:工廠模式是一種經(jīng)常被使用到的模式,根據(jù)工廠模式實現(xiàn)的類可以根據(jù)提供的數(shù)據(jù)生成一組類中某一個類的實例趾诗,通常這一組類有一個公共的抽象父類并且實現(xiàn)了相同的方法蜡感,但是這些方法針對不同的數(shù)據(jù)進行了不同的操作蹬蚁。首先需要定義一個基類,該類的子類通過不同的方法實現(xiàn)了基類中的方法郑兴。然后需要定義一個工廠類犀斋,工廠類可以根據(jù)條件生成不同的子類實例。當?shù)玫阶宇惖膶嵗笄榱_發(fā)人員可以調(diào)用基類中的方法而不必考慮到底返回的是哪一個子類的實例叽粹。排序都有哪幾種方法?
插入排序:直接插入排序却舀、希爾排序
交換排序:冒泡排序虫几、快速排序
選擇排序:簡單選擇排序、堆排序
二路歸并排序
技術(shù)排序JAVA語言如何進行異常處理禁筏,關(guān)鍵字:throws,throw,try,catch,finally分別代表什么意義持钉?在try塊中可以拋出異常嗎?
Java中每個異常都是一個對象篱昔,是Throwable類或其他子類的實例每强。
throws用于函數(shù)聲明的最后,表明該函數(shù)可能會發(fā)生的異常
throw語句明確的拋出異常
try語句塊里是可能發(fā)生異常的程序州刽,緊跟在try后面應(yīng)該是catch語句塊來捕捉“異晨罩矗”的類型
finally是不管語句塊發(fā)生什么異常,總會執(zhí)行的語句一個“.java”源文件中是否可以包括多個類(不是內(nèi)部類)穗椅?有什么限制辨绊?
可以。但是必須只有一個public的類的名字與文件名相同匹表。java中有幾種方法可以實現(xiàn)一個線程门坷?用什么關(guān)鍵字修飾同步方法? stop()和suspend()方法為何不推薦使用? 有兩種實現(xiàn)方法袍镀,分別是繼承Thread類與實現(xiàn)Runnable接口 用synchronized關(guān)鍵字修飾同步方法反對使用stop()默蚌,是因為它不安全。它會解除由線程獲取的所有鎖定苇羡,而且如果對象處于一種不連貫狀態(tài)绸吸,那么其他線程能在那種狀態(tài)下檢查和修改它們。結(jié)果很難檢查出真正的問題所在设江。suspend()方法容易發(fā)生死鎖锦茁。調(diào)用suspend()的時候,目標線程會停下來叉存,但卻仍然持有在這之前獲得的鎖定码俩。此時,其他任何線程都不能訪問鎖定的資源歼捏,除非被“掛起”的線程恢復(fù)運行稿存。對任何線程來說够傍,如果它們想恢復(fù)目標線程,同時又試圖使用任何一個鎖定的資源挠铲,就會造成死鎖。所以不應(yīng)該使用suspend()寂诱,而應(yīng)在自己的Thread類中置入一個標志拂苹,指出線程應(yīng)該活動還是掛起。若標志指出線程應(yīng)該掛起痰洒,便用wait()命其進入等待狀態(tài)瓢棒。若標志指出線程應(yīng)當恢復(fù),則用一個notify()重新啟動線程丘喻。舉例
java中有幾種類型的流脯宿?JDK為每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類泉粉? 字節(jié)流连霉,字符流。字節(jié)流繼承于InputStream OutputStream嗡靡,字符流繼承于InputStreamReader OutputStreamWriter跺撼。
java中會存在內(nèi)存泄漏嗎,請簡單描述讨彼。
Java中內(nèi)存泄露是指能夠可達歉井,但是不會再被使用的對象。而C/C++中內(nèi)存泄露是指找不到哈误,無法被回收的對象哩至。-
.是否可以從一個static方法內(nèi)部發(fā)出對非static方法的調(diào)用? 不可以蜜自。這個在程序挑錯里可能會出現(xiàn)菩貌。
例如:
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 }
答案: 錯≡玻看上去在main里call doSomething沒有什么問題菜谣,畢竟兩個methods都在同一個class里。但仔細看晚缩,main是static的尾膊。static method不能直接call non-static methods≤癖耍可改成"System.out.println("s.doSomething() returns " + s.doSomething());"冈敛。同理,static method不能訪問non-static instant variable鸣皂。
- 說出一些常用的類抓谴,包暮蹂,接口,請各舉5個
常用的類:String癌压、Integer仰泻、Math、FileReader滩届、FileWriter
常用的包:java.util集侯、java.io、java.sql帜消、java.lang棠枉、java.awt
常用的接口:Runnable、List泡挺、Set辈讶、Map、Document