![Java面試常問(wèn)題目_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/2/b8473c20-24b3-4865-bb09-d6ec7d1fd73f/b8473c20-24b3-4865-bb09-d6ec7d1fd73f1.gif)
![Java面試常問(wèn)題目_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/2/b8473c20-24b3-4865-bb09-d6ec7d1fd73f/b8473c20-24b3-4865-bb09-d6ec7d1fd73f2.gif)
![Java面試常問(wèn)題目_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/2/b8473c20-24b3-4865-bb09-d6ec7d1fd73f/b8473c20-24b3-4865-bb09-d6ec7d1fd73f3.gif)
![Java面試常問(wèn)題目_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/2/b8473c20-24b3-4865-bb09-d6ec7d1fd73f/b8473c20-24b3-4865-bb09-d6ec7d1fd73f4.gif)
![Java面試常問(wèn)題目_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/2/b8473c20-24b3-4865-bb09-d6ec7d1fd73f/b8473c20-24b3-4865-bb09-d6ec7d1fd73f5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java類別問(wèn)題1. String與StringBuilder、StringBuffer的區(qū)別如果要操作少量的數(shù)據(jù)用 = String單線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù) = StringBuilder多線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù) = StringBuffer2. Collection類,Collection包結(jié)構(gòu),與Collections的區(qū)別Collection是集類,包含List有序列表,Set無(wú)序集合以及Map雙列集合Collection是集合類的上級(jí)接口,子接口主要有Set 和List、Map。 Collections是針對(duì)集合類的一個(gè)幫助類,提供了操作集合的工具方法:一
2、系列靜態(tài)方法實(shí)現(xiàn)對(duì)各種集合的搜索、排序、線程安全化等操作。3. java哪些集合類是線程安全的vector:就比arraylist多了個(gè)同步化機(jī)制(線程安全),因?yàn)樾瘦^低,現(xiàn)在已經(jīng)不太建議使用。在web應(yīng)用中,特別是前臺(tái)頁(yè)面,往往效率(頁(yè)面響應(yīng)速度)是優(yōu)先考慮的。statck:堆棧類,先進(jìn)后出enumeration:枚舉,相當(dāng)于迭代器hashtable:就比hashmap多了個(gè)線程安全4. 線程安全是什么意思就是線程同步的意思,就是當(dāng)一個(gè)程序?qū)σ粋€(gè)線程安全的方法或者語(yǔ)句進(jìn)行訪問(wèn)的時(shí)候,其他的不能再對(duì)他進(jìn)行操作了,必須等到這次訪問(wèn)結(jié)束以后才能對(duì)這個(gè)線程安全的方法進(jìn)行訪問(wèn)5. 九種基本數(shù)據(jù)類型的
3、大小,以及他們的封裝類。java提供了一組基本數(shù)據(jù)類型,包括boolean, byte, char, short, int, long, float, double, void. 同時(shí),java也提供了這些類型的封裝類,分別為Boolean, Byte, Character, Short, Integer, Long, Float, Double, Void既然提供了基本類型,為什么還要使用封裝類呢比如,如果想使用List來(lái)保存數(shù)值,由于List中只能添加對(duì)象,另外,有些情況下,我們也會(huì)編寫(xiě)諸如func(Object o)的這種方法6. Switch能否用string做參數(shù)在 Java 7之前
4、,switch 只能支持 byte、short、char、int或者其對(duì)應(yīng)的封裝類以及 Enum 類型。在 Java 7中,String支持被加上了。7. equals與=的區(qū)別。1.=是一個(gè)運(yùn)算符。2.Equals則是Object對(duì)象的方法,可以.(點(diǎn))出來(lái)。8. Java的四種引用,強(qiáng)弱軟虛,用到的場(chǎng)景1強(qiáng)引用,這是使用最普遍的引用。如果一個(gè)對(duì)象具有強(qiáng)引用,那就 類似于必不可少的生活用品,垃圾回收器絕不會(huì)回收它。當(dāng)內(nèi)存空 間不足,Java虛擬機(jī)寧愿拋出OutOfMemoryError錯(cuò)誤,使程序異常終止,也不會(huì)靠隨意回收具有強(qiáng)引用的對(duì)象來(lái)解決內(nèi)存不足問(wèn)題。2軟引用,如果一個(gè)對(duì)象只具有軟引用
5、,那就類似于可有可無(wú)的生活用品。如果內(nèi)存空間足夠,垃圾回收器就不會(huì)回收它,如果內(nèi)存空間不足了,就會(huì)回收這些對(duì)象的內(nèi)存。3弱引用,如果一個(gè)對(duì)象只具有弱引用,那就類似于可有可無(wú)的生活用品。 弱引用與軟引用的區(qū)別在于:只具有弱引用的對(duì)象擁有更短暫的生命周期。在垃圾回收器線程掃描它 所管轄的內(nèi)存區(qū)域的過(guò)程中,一旦發(fā)現(xiàn)了只具有弱引用的對(duì)象,不管當(dāng)前內(nèi)存空間足夠與否,都會(huì)回收它的內(nèi)存。4虛引用,"虛引用"顧名思義,就是形同虛設(shè),與其他幾種引用都不同,虛引用并不會(huì)決定對(duì)象的生命周期。如果一個(gè)對(duì)象僅持有虛引用,那么它就和沒(méi)有任何引用一樣,在任何時(shí)候都可能被垃圾回收。9. Hashcode的
6、作用Hashcode這個(gè)方法是用來(lái)鑒定2個(gè)對(duì)象是否相等的,hashcode方法一般用戶不會(huì)去調(diào)用,比如在hashmap中,由于key是不可以重復(fù)的,他在判斷key是不是重復(fù)的時(shí)候就判斷了hashcode這個(gè)方法,而且也用到了equals方法。10. ArrayList、LinkedList、Vector的區(qū)別ArrayList,Vector底層是由數(shù)組實(shí)現(xiàn),LinkedList底層是由雙線鏈表實(shí)現(xiàn),從底層的實(shí)現(xiàn)可以得出它們的性能問(wèn)題,ArrayList,Vector插入速度相對(duì)較慢,查詢速度相對(duì)較快,而LinkedList插入速度較快,而查詢速度較慢。再者由于Vevtor使用了線程安全鎖,所以
7、ArrayList的運(yùn)行效率高于Vector。11. Map、Set、List、Queue、Stack的特點(diǎn)與用法Set集合類似于一個(gè)罐子,"丟進(jìn)"Set集合里的多個(gè)對(duì)象之間沒(méi)有明顯的順序。List集合代表元素有序、可重復(fù)的集合,集合中每個(gè)元素都有其對(duì)應(yīng)的順序索引。Stack是Vector提供的一個(gè)子類,用于模擬"棧"這種數(shù)據(jù)結(jié)構(gòu)(LIFO后進(jìn)先出)Queue用于模擬"隊(duì)列"這種數(shù)據(jù)結(jié)構(gòu)(先進(jìn)先出 FIFO)。Map用于保存具有"映射關(guān)系"的數(shù)據(jù),因此Map集合里保存著兩組值12. HashMap和HashTabl
8、e的區(qū)別Hashtable是基于陳舊的Dictionary類的,HashMap是Map接口的一個(gè)實(shí)現(xiàn)Hashtable的方法是線程同步的,而HashMap的方法不是。只有HashMap可以讓你將空值作為一個(gè)表的條目的key或value13. TreeMap、HashMap、LindedHashMap的區(qū)別Hashmap 是一個(gè)最常用的Map,它根據(jù)鍵的HashCode 值存儲(chǔ)數(shù)據(jù),根據(jù)鍵可以直接獲取它的值,具有很快的訪問(wèn)速度,遍歷時(shí),取得數(shù)據(jù)的順序是完全隨機(jī)的。LinkedHashMap保存了記錄的插入順序,在用Iterator遍歷LinkedHashMap時(shí),先得到的記錄肯定是先插入的.也可
9、以在構(gòu)造時(shí)用帶參數(shù),按照應(yīng)用次數(shù)排序TreeMap取出來(lái)的是排序后的鍵值對(duì)。但如果您要按自然順序或自定義順序遍歷鍵,那么TreeMap會(huì)更好。14. try catch finally,try里有return,finally還執(zhí)行么a.不管有木有出現(xiàn)異常,finally塊中代碼都會(huì)執(zhí)行b.當(dāng)try和catch中有return時(shí),finally仍然會(huì)執(zhí)行c.finally是在return后面的表達(dá)式運(yùn)算后執(zhí)行的(此時(shí)并沒(méi)有返回運(yùn)算后的值,而是先把要返回的值保存起來(lái),管finally中的代碼怎么樣,返回的值都不會(huì)改變,任然是之前保存的值),所以函數(shù)返回值是在finally執(zhí)行前確定的d.final
10、ly中最好不要包含return,否則程序會(huì)提前退出,返回值不是try或catch中保存的返回值15. OOM你遇到過(guò)哪些情況java.lang.OutOfMemoryError: Java heap space ->java堆內(nèi)存溢出,此種情況最常見(jiàn),一般由于內(nèi)存泄露或者堆的大小設(shè)置不當(dāng)引起。java.lang.OutOfMemoryError: PermGen space ->java永久代溢出,即方法區(qū)溢出了,一般出現(xiàn)于大量Class或者jsp頁(yè)面,或者采用cglib等反射機(jī)制的情況,因?yàn)樯鲜銮闆r會(huì)產(chǎn)生大量的Class信息存儲(chǔ)于方法區(qū)。java.lang.StackOverfl
11、owError -> 不會(huì)拋OOM error,但也是比較常見(jiàn)的Java內(nèi)存溢出。JAVA虛擬機(jī)棧溢出,一般是由于程序中存在死循環(huán)或者深度遞歸調(diào)用造成的,棧大小設(shè)置太小也會(huì)出現(xiàn)此種溢出。可以通過(guò)虛擬機(jī)參數(shù)-Xss來(lái)設(shè)置棧的大小。16. Java面向?qū)ο蟮娜齻€(gè)特征與含義封裝性:它是將類的一些敏感信息隱藏在類的類部,不讓外界直接訪問(wèn)到繼承性:子類通過(guò)一種方式來(lái)接受父類所有的公有的,受保護(hù)的成員變量和成員方法多態(tài)性:程序在運(yùn)行的過(guò)程中,同一種類型在不同的條件下表現(xiàn)不同的結(jié)果17. Override和Overload的含義去區(qū)別方法的重寫(xiě)Overriding和重載Overloading是Java
12、多態(tài)性的不同表現(xiàn)。重寫(xiě)Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個(gè)類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說(shuō)該方法被重寫(xiě) (Overriding)。子類的對(duì)象使用這個(gè)方法時(shí),將調(diào)用子類中的定義,對(duì)它而言,父類中的定義如同被“屏蔽”了。如果在一個(gè)類中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。18. Interface與abstract類的區(qū)別接口可以多重繼承,抽象類不可以接口定義方法,不給實(shí)現(xiàn);而抽象類可
13、以實(shí)現(xiàn)部分方法接口中基本數(shù)據(jù)類型的數(shù)據(jù)成員,都默認(rèn)為static和final,抽象類則不是19. Static class 與non static class的區(qū)別內(nèi)部靜態(tài)類不需要有指向外部類的引用。但非靜態(tài)內(nèi)部類需要持有對(duì)外部類的引用。非靜態(tài)內(nèi)部類能夠訪問(wèn)外部類的靜態(tài)和非靜態(tài)成員。靜態(tài)類不能訪問(wèn)外部類的非靜態(tài)成員。他只能訪問(wèn)外部類的靜態(tài)成員。一個(gè)非靜態(tài)內(nèi)部類不能脫離外部類實(shí)體被創(chuàng)建,一個(gè)非靜態(tài)內(nèi)部類可以訪問(wèn)外部類的數(shù)據(jù)和方法,因?yàn)樗驮谕獠款惱锩妗?0. java多態(tài)的實(shí)現(xiàn)原理.設(shè)計(jì)時(shí)多態(tài):方法【重載】實(shí)現(xiàn)的多態(tài).運(yùn)行時(shí)多態(tài):方法【重寫(xiě)】實(shí)現(xiàn)的多態(tài)21. 實(shí)現(xiàn)多線程的兩種方法:Thread與
14、Runable使用Runnable接口實(shí)際工作中,幾乎所有的多線程應(yīng)用都用實(shí)現(xiàn)Runnable這種方式。Runnable適合多個(gè)相同程序代碼的線程去處理同一資源的情況。把虛擬CPU(線程)同程序的代碼、數(shù)據(jù)有效的分離,較好的體現(xiàn)了面向?qū)ο蟮脑O(shè)計(jì)思想。避免由于Java的單繼承特性帶來(lái)的局限性。也就是如果新建的類要繼承其他類的話,因?yàn)镴AVA中不支持多繼承,就只能實(shí)現(xiàn)java.lang.Runnable接口。有利于程序的健壯性,代碼能夠被多個(gè)線程共享,代碼與數(shù)據(jù)是獨(dú)立的。繼承Thread類不能再繼承他類了。編寫(xiě)簡(jiǎn)單,可以直接操縱線程,無(wú)需使用Thread.currentThread()。22. 線
15、程同步的方法:sychronized、lock、reentrantLock等sychronized是java中最基本同步互斥的手段,可以修飾代碼塊,方法,類,在修飾代碼塊的時(shí)候需要一個(gè)reference對(duì)象作為鎖的對(duì)象,在修飾方法的時(shí)候默認(rèn)是當(dāng)前對(duì)象作為鎖的對(duì)象,在修飾類時(shí)候默認(rèn)是當(dāng)前類的Class對(duì)象作為鎖的對(duì)象.ReentrantLock除了synchronized的功能,多了三個(gè)高級(jí)功能.等待可中斷,在持有鎖的線程長(zhǎng)時(shí)間不釋放鎖的時(shí)候,等待的線程可以選擇放棄等待公平鎖, 按照申請(qǐng)鎖的順序來(lái)一次獲得鎖稱為公平鎖.synchronized的是非公平鎖,ReentrantLock可以通過(guò)構(gòu)造函
16、數(shù)實(shí)現(xiàn)公平鎖綁定多個(gè)Condition. 通過(guò)多次newCondition可以獲得多個(gè)Condition對(duì)象,可以簡(jiǎn)單的實(shí)現(xiàn)比較復(fù)雜的線程同步的功能.通過(guò)await(),signal();23. Java鎖的等級(jí)方法鎖,synchronized標(biāo)記的方法對(duì)象鎖,在方法上加了synchronized的鎖,或者synchronized(this)的代碼段類鎖,在代碼中的方法上加了static和synchronized的鎖,因?yàn)樵陟o態(tài)方法中加同步鎖會(huì)鎖住整個(gè)類24. 寫(xiě)出生產(chǎn)者消費(fèi)者模式阻塞隊(duì)列實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模式超級(jí)簡(jiǎn)單,它提供開(kāi)箱即用支持阻塞的方法put()和take(),開(kāi)發(fā)者不需要寫(xiě)困惑的w
17、ait-nofity代碼去實(shí)現(xiàn)通信。BlockingQueue 一個(gè)接口,Java5提供了不同的現(xiàn)實(shí),如ArrayBlockingQueue和LinkedBlockingQueue,兩者都是先進(jìn)先出(FIFO)順序。而ArrayLinkedQueue是自然有界的,LinkedBlockingQueue可選的邊界。25. ThreadLocal的設(shè)計(jì)理念與作用ThreadLocal并不是一個(gè)Thread,而是Thread的局部變量,也許把它命名為T(mén)hreadLocalVariable更容易讓人理解一些當(dāng)使用ThreadLocal維護(hù)變量時(shí),ThreadLocal為每個(gè)使用該變量的線程提供獨(dú)立的變
18、量副本,所以每一個(gè)線程都可以獨(dú)立地改變自己的副本,而不會(huì)影響其它線程所對(duì)應(yīng)的副本。26. ThreadPool用法與優(yōu)勢(shì)線程池是為突然大量爆發(fā)的線程設(shè)計(jì)的,通過(guò)有限的幾個(gè)固定線程為大量的操作服務(wù),減少了創(chuàng)建和銷毀線程所需的時(shí)間,從而提高效率。FixedThreadPool(int nThreads): 創(chuàng)建一個(gè)可重用的固定線程數(shù)的線程池,如果池中所有的nThreads個(gè)線程都處于活動(dòng)狀態(tài)時(shí)提交任務(wù)(任務(wù)通常是Runnable或Callable對(duì)象), 任務(wù)將在隊(duì)列中等待, 直到池中出現(xiàn)可用線程CachedThreadPool(): 調(diào)用此方法創(chuàng)建的線程池可根據(jù)需要自動(dòng)調(diào)整池中線程的數(shù)量,執(zhí)行任
19、務(wù)時(shí)將重用存在先前創(chuàng)建的線程(如果池中存在可用線程的話). 如果池中沒(méi)有可用線程, 將創(chuàng)建一個(gè)新的線程, 并將其添加到池中. 池中的線程超過(guò)60秒未被使用就會(huì)被銷毀, 因此長(zhǎng)時(shí)間保持空閑的SingleThreadExecutor(): 創(chuàng)建一個(gè)單線程的Executor. 這個(gè)Executor保證按照任務(wù)提交的順序依次執(zhí)行任務(wù).ScheduledThreadPool(int corePoolSize): 創(chuàng)建一個(gè)可重用的固定線程數(shù)的線程池. ScheduledExecutorService是ExecutorService的子接口, 調(diào)用ScheduledExecutorService的相關(guān)方法,
20、 可以延遲或定期執(zhí)行任務(wù).以上靜態(tài)方法均使用默認(rèn)的ThreadFactory(即Executors.defaultThreadFactory()方法的返回值)創(chuàng)建線程, 如果想要指定ThreadFactory, 可調(diào)用他們的重載方法.通過(guò)指定ThreadFactory, 可以定制新建線程的名稱, 線程組, 優(yōu)先級(jí), 守護(hù)線程狀態(tài)等.如果Executors提供的創(chuàng)建線程池的方法無(wú)法滿足要求, 可以使用ThreadPoolExecutor類創(chuàng)建線程池.27. wait()和sleep()的區(qū)別sleep指線程被調(diào)用時(shí),占著CPU不工作,形象地說(shuō)明為“占著CPU睡覺(jué)”,此時(shí),系統(tǒng)的CPU部分資源被占
21、用,其他線程無(wú)法進(jìn)入,會(huì)增加時(shí)間限制。wait指線程處于進(jìn)入等待狀態(tài),形象地說(shuō)明為“等待使用CPU”,此時(shí)線程不占用任何資源,不增加時(shí)間限制28. foreach與正常for循環(huán)效率對(duì)比針對(duì)列表的 foreach的效率是最低, 耗時(shí)是普通for循環(huán)的2倍以上。個(gè)人理解它的實(shí)現(xiàn)應(yīng)該和iterator相似29. Java IO與NIOJava NIO和IO之間第一個(gè)最大的區(qū)別是,IO是面向流的,NIO是面向緩沖區(qū)的。 Java IO面向流意味著每次從流中讀一個(gè)或多個(gè)字節(jié),直至讀取所有字節(jié),它們沒(méi)有被緩存在任何地方。此外,它不能前后移動(dòng)流中的數(shù)據(jù)。如果需要前后移動(dòng)從流中讀取的數(shù)據(jù),需要先將它緩存到一
22、個(gè)緩沖區(qū)。 Java NIO的緩沖導(dǎo)向方法略有不同。數(shù)據(jù)讀取到一個(gè)它稍后處理的緩沖區(qū),需要時(shí)可在緩沖區(qū)中前后移動(dòng)。這就增加了處理過(guò)程中的靈活性。但是,還需要檢查是否該緩沖區(qū)中包含所有您需要處理的數(shù)據(jù)。而且,需確保當(dāng)更多的數(shù)據(jù)讀入緩沖區(qū)時(shí),不要覆蓋緩沖區(qū)里尚未處理的數(shù)據(jù)。30. 反射的作用于原理JAVA反射(放射)機(jī)制:Reflection,Java程序可以加載一個(gè)運(yùn)行時(shí)才得知名稱的class,獲悉其完整構(gòu)造(但不包括methods定義),并生成其對(duì)象實(shí)體、或?qū)ζ鋐ields設(shè)值、或喚起其methods。用途:Java反射機(jī)制主要提供了以下功能: 在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類;在運(yùn)行時(shí)構(gòu)造任
23、意一個(gè)類的對(duì)象;在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量和方法;在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法;生成動(dòng)態(tài)代理。31. 泛型常用特點(diǎn),List<String>能否轉(zhuǎn)為L(zhǎng)ist<Object>泛型,即“參數(shù)化類型”。一提到參數(shù),最熟悉的就是定義方法時(shí)有形參,然后調(diào)用此方法時(shí)傳遞實(shí)參。那么參數(shù)化類型怎么理解呢?顧名思義,就是將類型由原來(lái)的具體的類型參數(shù)化,類似于方法中的變量參數(shù),此時(shí)類型也定義成參數(shù)形式(可以稱之為類型形參),然后在使用/調(diào)用時(shí)傳入具體的類型(類型實(shí)參)在Java的泛型接口中 把List < String > 轉(zhuǎn)換成List < Object
24、> 是可以的。32. 解析XML的幾種方式的原理與特點(diǎn):DOM、SAXDom解析 在內(nèi)存中創(chuàng)建一個(gè)DOM樹(shù),該結(jié)構(gòu)通常需要加載整個(gè)文檔然后才能做工作。由于它是基于信息層次的,因而DOM被認(rèn)為是基于樹(shù)或基于對(duì)象的,樹(shù)在內(nèi)存中是持久的,因此可以修改它以便應(yīng)用程序能對(duì)數(shù)據(jù)和結(jié)構(gòu)作出更改能隨機(jī)訪問(wèn)文件內(nèi)容,也可以修改原文件內(nèi)容SAX解析 SAX處理的優(yōu)點(diǎn)非常類似于流媒體的優(yōu)點(diǎn)。分析能夠立即開(kāi)始,而不是等待所有的數(shù)據(jù)被處理。SAX解析器采用了基于事件的模型,它在解析XML文檔的時(shí)候可以觸發(fā)一系列的事件,當(dāng)發(fā)現(xiàn)給定的tag的時(shí)候,它可以激活一個(gè)回調(diào)方法,告訴該方法制定的標(biāo)簽已經(jīng)找到。而且,由于應(yīng)用程
25、序只是在讀取數(shù)據(jù)時(shí)檢查數(shù)據(jù),因此不需要將數(shù)據(jù)存儲(chǔ)在內(nèi)存中。這對(duì)于大型文檔來(lái)說(shuō)是個(gè)巨大的優(yōu)點(diǎn)線性解析,不能隨機(jī)訪問(wèn),也無(wú)法修改原文件33. 設(shè)計(jì)模式:?jiǎn)卫⒐S、適配器、責(zé)任鏈、觀察者等等34. JNI的使用JNI作為java和操作系統(tǒng)間的一個(gè)直接接口,可以通過(guò)JNI使得java直接調(diào)用操作系統(tǒng)的資源。目前JNI只能通過(guò)c/C+實(shí)現(xiàn),因?yàn)閖ni只是對(duì)操作系統(tǒng)資源調(diào)用的一個(gè)橋接過(guò)程。所以理論上在windows下只要是dll文件均可以被調(diào)用。jni一般有以下一些應(yīng)用場(chǎng)景1.高性能 ,在一些情況下因?yàn)樘幚磉\(yùn)算量非常大,為了獲取高性能,直接使用java是不能勝任的,如:一些圖形的處理2.調(diào)用一些硬件的驅(qū)
26、動(dòng)或者一些軟件的驅(qū)動(dòng),比如調(diào)用一些外部系統(tǒng)接口的驅(qū)動(dòng),如:讀卡器的驅(qū)動(dòng),OCI驅(qū)動(dòng)3.需要使用大內(nèi)存,遠(yuǎn)遠(yuǎn)超過(guò)jvm所能分配的內(nèi)存,如:進(jìn)程內(nèi)Cache4.調(diào)用C或者操作系統(tǒng)提供的服務(wù),如:java調(diào)用搜索服務(wù),其中搜索是由C/C+實(shí)現(xiàn)的,不過(guò)這個(gè)一般可以設(shè)計(jì)成更加通用的方式,比如soa的方式所有這些場(chǎng)景的前提是犧牲了java代碼的可移植性,不同的os,甚至版本都需要寫(xiě)不同版本的native實(shí)現(xiàn)35. mysql機(jī)制InnoDB與MyisamInnodb 支持事務(wù)功能,Myisam 不支持。Myisam 的執(zhí)行速度更快,性能更好。InnoDB 為行級(jí)鎖,myisam 為表級(jí)鎖MyISAM:如果
27、執(zhí)行大量的SELECT,MyISAM是更好的選擇InnoDB:如果你的數(shù)據(jù)執(zhí)行大量的INSERT或UPDATE,出于性能方面的考慮,應(yīng)該使用InnoDB表MyISAM:select count(*) from table,MyISAM只要簡(jiǎn)單的讀出保存好的行數(shù),注意的是,當(dāng)count(*)語(yǔ)句包含 where條件時(shí),兩種表的操作是一樣的InnoDB : InnoDB 中不保存表的具體行數(shù),也就是說(shuō),執(zhí)行select count(*) from table時(shí),InnoDB要掃描一遍整個(gè)表來(lái)計(jì)算有多少行36. Servlet的生命周期、Servlet是否線程安全的a.在servlet容器啟動(dòng)時(shí)初始
28、化。在web.xml <servlet> 中配置<load-on-startup>1</load-on-startup>表示在容器啟動(dòng)時(shí)初始化。默認(rèn)沒(méi)有此置b.servlet在第一次被訪問(wèn)時(shí)初始化。即創(chuàng)建唯一的servlet實(shí)例。(單例多線程下面會(huì)說(shuō))c.當(dāng)有請(qǐng)求訪問(wèn)該servlet是,servlet容器就會(huì)創(chuàng)建針對(duì)于這個(gè)請(qǐng)求的servletRequest于servletResponse,然后servlet的service方法被調(diào)用。當(dāng)容器把servlet生成的響應(yīng)結(jié)果發(fā)送給客戶,容器就會(huì)銷毀request和response對(duì)象d.容器在銷毀該實(shí)例前調(diào)用se
29、rvlet的destroy方法(釋放servlet所占用的資源,如關(guān)閉流和數(shù)據(jù)庫(kù)連接),此外還會(huì)銷毀與servlet對(duì)象關(guān)聯(lián)的ServletConfig對(duì)象。e.servlet類只創(chuàng)建一個(gè)實(shí)例,對(duì)于可與客戶端的并發(fā)訪問(wèn),它是線程不安全的。f.servlet的處理方式是,每次訪問(wèn)時(shí)重新起一線程執(zhí)行service方法。所以要想保證servlet的線程安全,不應(yīng)該在servlet中定義實(shí)例變量。g.當(dāng)然完全可以通過(guò)加鎖保證線程安全,但對(duì)于成千上萬(wàn)的并發(fā)訪問(wèn),性能下降。JVM類別問(wèn)題1. 內(nèi)存模型以及分區(qū),需要詳細(xì)到每個(gè)區(qū)放什么。程序計(jì)數(shù)器:當(dāng)前線程執(zhí)行的字節(jié)碼的行號(hào)指示器,線程私有JAVA虛擬機(jī)棧:
30、Java方法執(zhí)行的內(nèi)存模型,每個(gè)Java方法的執(zhí)行對(duì)應(yīng)著一個(gè)棧幀的進(jìn)棧和出棧的操作。本地方法棧:類似“ JAVA虛擬機(jī)棧 ”,但是為native方法的運(yùn)行提供內(nèi)存環(huán)境。JAVA堆:對(duì)象內(nèi)存分配的地方,內(nèi)存垃圾回收的主要區(qū)域,所有線程共享。可分為新生代,老生代。方法區(qū):用于存儲(chǔ)已經(jīng)被JVM加載的類信息、常量、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。Hotspot中的“永久代”。運(yùn)行時(shí)常量池:方法區(qū)的一部分,存儲(chǔ)常量信息,如各種字面量、符號(hào)引用等。直接內(nèi)存:并不是JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)的一部分, 可直接訪問(wèn)的內(nèi)存, 比如NIO會(huì)用到這部分。2. 堆里面的分區(qū):Eden,survival from to
31、,老年代,各自的特點(diǎn)。3. 對(duì)象創(chuàng)建方法,對(duì)象的內(nèi)存分配,對(duì)象的訪問(wèn)定位。4. GC的兩種判定方法:引用計(jì)數(shù)與引用鏈。引用計(jì)數(shù)方式最基本的形態(tài)就是讓每個(gè)被管理的對(duì)象與一個(gè)引用計(jì)數(shù)器關(guān)聯(lián)在一起,該計(jì)數(shù)器記錄著該對(duì)象當(dāng)前被引用的次數(shù),每當(dāng)創(chuàng)建一個(gè)新的引用指向該對(duì)象時(shí)其計(jì)數(shù)器就加1,每當(dāng)指向該對(duì)象的引用失效時(shí)計(jì)數(shù)器就減1。當(dāng)該計(jì)數(shù)器的值降到0就認(rèn)為對(duì)象死亡。Java的內(nèi)存回收機(jī)制可以形象地理解為在堆空間中引入了重力場(chǎng),已經(jīng)加載的類的靜態(tài)變量和處于活動(dòng)線程的堆??臻g的變量是這個(gè)空間的牽引對(duì)象。這里牽引對(duì)象是指按照J(rèn)ava語(yǔ)言規(guī)范,即便沒(méi)有其它對(duì)象保持對(duì)它的引用也不能夠被回收的對(duì)象,即Java內(nèi)存空間中
32、的本原對(duì)象。當(dāng)然類可能被去加載,活動(dòng)線程的堆棧也是不斷變化的,牽引對(duì)象的集合也是不斷變化的。對(duì)于堆空間中的任何一個(gè)對(duì)象,如果存在一條或者多條從某個(gè)或者某幾個(gè)牽引對(duì)象到該對(duì)象的引用鏈,則就是可達(dá)對(duì)象,可以形象地理解為從牽引對(duì)象伸出的引用鏈將其拉住,避免掉到回收池中5. GC的三種收集方法:標(biāo)記清除、標(biāo)記整理、復(fù)制算法的原理與特點(diǎn),分別用在什么地方,如果讓你優(yōu)化收集方法,有什么思路?標(biāo)記清除算法是最基礎(chǔ)的收集算法,其他收集算法都是基于這種思想。標(biāo)記清除算法分為“標(biāo)記”和“清除”兩個(gè)階段:首先標(biāo)記出需要回收的對(duì)象,標(biāo)記完成之后統(tǒng)一清除對(duì)象。它的主要缺點(diǎn):.標(biāo)記和清除過(guò)程效率不高 。.標(biāo)記清除之后會(huì)產(chǎn)
33、生大量不連續(xù)的內(nèi)存碎片。標(biāo)記整理,標(biāo)記操作和“標(biāo)記-清除”算法一致,后續(xù)操作不只是直接清理對(duì)象,而是在清理無(wú)用對(duì)象完成后讓所有存活的對(duì)象都向一端移動(dòng),并更新引用其對(duì)象的指針。主要缺點(diǎn):在標(biāo)記-清除的基礎(chǔ)上還需進(jìn)行對(duì)象的移動(dòng),成本相對(duì)較高,好處則是不會(huì)產(chǎn)生內(nèi)存碎片。復(fù)制算法,它將可用內(nèi)存容量劃分為大小相等的兩塊,每次只使用其中的一塊。當(dāng)這一塊用完之后,就將還存活的對(duì)象復(fù)制到另外一塊上面,然后在把已使用過(guò)的內(nèi)存空間一次理掉。這樣使得每次都是對(duì)其中的一塊進(jìn)行內(nèi)存回收,不會(huì)產(chǎn)生碎片等情況,只要移動(dòng)堆訂的指針,按順序分配內(nèi)存即可,實(shí)現(xiàn)簡(jiǎn)單,運(yùn)行高效。主要缺點(diǎn):內(nèi)存縮小為原來(lái)的一半。6. GC收集器有哪些
34、?CMS收集器與G1收集器的特點(diǎn)。單線程收集器,使用單線程去完成所有的gc工作,沒(méi)有線程間的通信,這種方式會(huì)相對(duì)高效并行收集器,使用多線程的方式,利用多CUP來(lái)提高GC的效率,主要以到達(dá)一定的吞吐量為目標(biāo)并發(fā)收集器,使用多線程的方式,利用多CUP來(lái)提高GC的效率,并發(fā)完成大部分工作,使得gc pause短G1具備如下特點(diǎn):并行與并發(fā)、分代收集、空間整合、可預(yù)測(cè)的停頓CMS具備了并發(fā)收集、低停頓的優(yōu)點(diǎn)、CMS收集器對(duì)CPU資源非常敏感、CMS收集器無(wú)法處理浮動(dòng)垃圾、收集結(jié)束時(shí)會(huì)產(chǎn)生大量空間碎片7. Minor GC與Full GC分別在什么時(shí)候發(fā)生?Minor GC:通常是指對(duì)新生代的回收。指發(fā)
35、生在新生代的垃圾收集動(dòng)作,因?yàn)?Java 對(duì)象大多都具備朝生夕滅的特性,所以 Minor GC 非常頻繁,一般回收速度也比較快Major GC:通常是指對(duì)年老代的回收。Full GC:Major GC除并發(fā)gc外均需對(duì)整個(gè)堆進(jìn)行掃描和回收。指發(fā)生在老年代的 GC,出現(xiàn)了 Major GC,經(jīng)常會(huì)伴隨至少一次的 Minor GC(但非絕對(duì)的,在 ParallelScavenge 收集器的收集策略里就有直接進(jìn)行 Major GC 的策略選擇過(guò)程) 。MajorGC 的速度一般會(huì)比 Minor GC 慢 10倍以上。8. 幾種常用的內(nèi)存調(diào)試工具:jmap、jstack、jconsole。jmap(l
36、inux下特有,也是很常用的一個(gè)命令)觀察運(yùn)行中的jvm物理內(nèi)存的占用情況。參數(shù)如下:-heap:打印jvm heap的情況-histo:打印jvm heap的直方圖。其輸出信息包括類名,對(duì)象數(shù)量,對(duì)象占用大小。-histo:live :同上,但是只答應(yīng)存活對(duì)象的情況-permstat:打印permanent generation heap情況jstack(linux下特有)可以觀察到j(luò)vm中當(dāng)前所有線程的運(yùn)行情況和線程當(dāng)前狀態(tài)jconsole一個(gè)圖形化界面,可以觀察到j(luò)ava進(jìn)程的gc,class,內(nèi)存等信息jstat最后要重點(diǎn)介紹下這個(gè)命令。這是jdk命令中比較重要,也是相當(dāng)實(shí)用的一個(gè)命令
37、,可以觀察到classloader,compiler,gc相關(guān)信息具體參數(shù)如下:-class:統(tǒng)計(jì)class loader行為信息-compile:統(tǒng)計(jì)編譯行為信息-gc:統(tǒng)計(jì)jdk gc時(shí)heap信息-gccapacity:統(tǒng)計(jì)不同的generations(不知道怎么翻譯好,包括新生區(qū),老年區(qū),permanent區(qū))相應(yīng)的heap容量情況-gccause:統(tǒng)計(jì)gc的情況,(同-gcutil)和引起gc的事件-gcnew:統(tǒng)計(jì)gc時(shí),新生代的情況-gcnewcapacity:統(tǒng)計(jì)gc時(shí),新生代heap容量-gcold:統(tǒng)計(jì)gc時(shí),老年區(qū)的情況-gcoldcapacity:統(tǒng)計(jì)gc時(shí),老年區(qū)he
38、ap容量-gcpermcapacity:統(tǒng)計(jì)gc時(shí),permanent區(qū)heap容量-gcutil:統(tǒng)計(jì)gc時(shí),heap情況-printcompilation:不知道干什么的,一直沒(méi)用過(guò)。9. 類加載的五個(gè)過(guò)程:加載、驗(yàn)證、準(zhǔn)備、解析、初始化?!凹虞d”(Loading)階段是“類加載”(Class Loading)過(guò)程的第一個(gè)階段,在此階段,虛擬機(jī)需要完成以下三件事情:1、 通過(guò)一個(gè)類的全限定名來(lái)獲取定義此類的二進(jìn)制字節(jié)流。2、 將這個(gè)字節(jié)流所代表的靜態(tài)存儲(chǔ)結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu)。3、 在Java堆中生成一個(gè)代表這個(gè)類的java.lang.Class對(duì)象,作為方法區(qū)這些數(shù)據(jù)的訪問(wèn)入口
39、。驗(yàn)證是連接階段的第一步,這一階段的目的是為了確保Class文件的字節(jié)流中包含的信息符合當(dāng)前虛擬機(jī)的要求,并且不會(huì)危害虛擬機(jī)自身的安全。準(zhǔn)備階段是為類的靜態(tài)變量分配內(nèi)存并將其初始化為默認(rèn)值,這些內(nèi)存都將在方法區(qū)中進(jìn)行分配。準(zhǔn)備階段不分配類中的實(shí)例變量的內(nèi)存,實(shí)例變量將會(huì)在對(duì)象實(shí)例化時(shí)隨著對(duì)象一起分配在Java堆中。解析階段是虛擬機(jī)將常量池內(nèi)的符號(hào)引用替換為直接引用的過(guò)程。類初始化是類加載過(guò)程的最后一步,前面的類加載過(guò)程,除了在加載階段用戶應(yīng)用程序可以通過(guò)自定義類加載器參與之外,其余動(dòng)作完全由虛擬機(jī)主導(dǎo)和控制。到了初始化階段,才真正開(kāi)始執(zhí)行類中定義的Java程序代碼。10. 雙親委派模型:Boo
40、tstrap ClassLoader、Extension ClassLoader、ApplicationClassLoader。1、啟動(dòng)類加載器,負(fù)責(zé)將存放在<JAVA_HOME>lib目錄中的,或者被-Xbootclasspath參數(shù)所指定的路徑中,并且是虛擬機(jī)識(shí)別的(僅按照文件名識(shí)別,如rt.jar,名字不符合的類庫(kù)即時(shí)放在lib目錄中也不會(huì)被加載)類庫(kù)加載到虛擬機(jī)內(nèi)存中。啟動(dòng)類加載器無(wú)法被java程序直接引用。2、擴(kuò)展類加載器:負(fù)責(zé)加載<JAVA_HOME>libext目錄中的,或者被java.ext.dirs系統(tǒng)變量所指定的路徑中的所有類庫(kù),開(kāi)發(fā)者可以直接使用該
41、類加載器。3、應(yīng)用程序類加載器:負(fù)責(zé)加載用戶路徑上所指定的類庫(kù),開(kāi)發(fā)者可以直接使用這個(gè)類加載器,也是默認(rèn)的類加載器。三種加載器的關(guān)系:?jiǎn)?dòng)類加載器->擴(kuò)展類加載器->應(yīng)用程序類加載器->自定義類加載器。這種關(guān)系即為類加載器的雙親委派模型。其要求除啟動(dòng)類加載器外,其余的類加載器都應(yīng)當(dāng)有自己的父類加載器。這里類加載器之間的父子關(guān)系一般不以繼承關(guān)系實(shí)現(xiàn),而是用組合的方式來(lái)復(fù)用父類的代碼。雙親委派模型的工作過(guò)程:如果一個(gè)類加載器接收到了類加載的請(qǐng)求,它首先把這個(gè)請(qǐng)求委托給他的父類加載器去完成,每個(gè)層次的類加載器都是如此,因此所有的加載請(qǐng)求都應(yīng)該傳送到頂層的啟動(dòng)類加載器中,只有當(dāng)父加載
42、器反饋?zhàn)约簾o(wú)法完成這個(gè)加載請(qǐng)求(它在搜索范圍中沒(méi)有找到所需的類)時(shí),子加載器才會(huì)嘗試自己去加載。好處:java類隨著它的類加載器一起具備了一種帶有優(yōu)先級(jí)的層次關(guān)系。例如類java.lang.Object,它存放在rt.jar中,無(wú)論哪個(gè)類加載器要加載這個(gè)類,最終都會(huì)委派給啟動(dòng)類加載器進(jìn)行加載,因此Object類在程序的各種類加載器環(huán)境中都是同一個(gè)類。相反,如果用戶自己寫(xiě)了一個(gè)名為java.lang.Object的類,并放在程序的Classpath中,那系統(tǒng)中將會(huì)出現(xiàn)多個(gè)不同的Object類,java類型體系中最基礎(chǔ)的行為也無(wú)法保證,應(yīng)用程序也會(huì)變得一片混亂。實(shí)現(xiàn):在java.lang.Clas
43、sLoader的loadClass()方法中,先檢查是否已經(jīng)被加載過(guò),若沒(méi)有加載則調(diào)用父類加載器的loadClass()方法,若父加載器為空則默認(rèn)使用啟動(dòng)類加載器作為父加載器。如果父加載失敗,則拋出ClassNotFoundException異常后,再調(diào)用自己的findClass()方法進(jìn)行加載。11. 分派:靜態(tài)分派與動(dòng)態(tài)分派。靜態(tài)分派與重載有關(guān),虛擬機(jī)在重載時(shí)是通過(guò)參數(shù)的靜態(tài)類型,而不是運(yùn)行時(shí)的實(shí)際類型作為判定依據(jù)的;靜態(tài)類型在編譯期是可知的;動(dòng)態(tài)分派與重寫(xiě)(Override)相關(guān),invokevirtual(調(diào)用實(shí)例方法)指令執(zhí)行的第一步就是在運(yùn)行期確定接收者的實(shí)際類型,根據(jù)實(shí)際類型進(jìn)行
44、方法調(diào)用;數(shù)據(jù)結(jié)構(gòu)與算法1. 各種排序:冒泡、選擇、插入、希爾、歸并、快排、堆排、桶排、基數(shù)的原理、平均時(shí)間復(fù)雜度、最壞時(shí)間復(fù)雜度、空間復(fù)雜度、是否穩(wěn)定。一、冒泡排序基本思想是:兩兩比較相鄰記錄的關(guān)鍵字,如果反序則交換 冒泡排序時(shí)間復(fù)雜度最好的情況為O(n),最壞的情況是O(n2) 改進(jìn)思路1:設(shè)置標(biāo)志位,明顯如果有一趟沒(méi)有發(fā)生交換(flag = flase),說(shuō)明排序已經(jīng)完成 改進(jìn)思路2:記錄一輪下來(lái)標(biāo)記的最后位置,下次從頭部遍歷到這個(gè)位置就Ok 二、直接插入排序?qū)⒁粋€(gè)記錄插入到已經(jīng)排好序的有序表中, 從而得到一個(gè)新的,記錄數(shù)增1的有序表,時(shí)間復(fù)雜度也為O(n2), 比冒泡法和選擇排序的性能
45、要更好一些 三、簡(jiǎn)單選擇排序通過(guò)n-i次關(guān)鍵字之間的比較,從n-i+1 個(gè)記錄中選擇關(guān)鍵字最小的記錄,并和第i(1<=i<=n)個(gè)記錄交換之,盡管與冒泡排序同為O(n2),但簡(jiǎn)單選擇排序的性能要略優(yōu)于冒泡排序 四、希爾排序先將整個(gè)待排元素序列分割成若干子序列(由相隔某個(gè)“增量”的元素組成的)分別進(jìn)行直接插入排序,然后依次縮減增量再進(jìn)行排序,待整個(gè)序列中的元素基本有序(增量足夠?。r(shí),再對(duì)全體元素進(jìn)行一次直接插入排序。其時(shí)間復(fù)雜度為O(n3/2),要好于直接插入排序的O(n2) 五、歸并排序假設(shè)初始序列含有n個(gè)記錄,則可以看成n個(gè)有序的子序列,每個(gè)子序列的長(zhǎng)度為1,然后兩兩歸并,得到
46、(不小于n/2的最小整數(shù))個(gè)長(zhǎng)度為2或1的有序子序列,再兩兩歸并,.如此重復(fù),直至得到一個(gè)長(zhǎng)度為n的有序序列為止,這種排序方法稱為2路歸并排序。 時(shí)間復(fù)雜度為O(nlogn),空間復(fù)雜度為O(n+logn),如果非遞歸實(shí)現(xiàn)歸并,則避免了遞歸時(shí)深度為logn的棧空間 空間復(fù)雜度為O(n) 六、堆排序堆是具有下列性質(zhì)的完全二叉樹(shù):每個(gè)節(jié)點(diǎn)的值都大于或等于其左右孩子節(jié)點(diǎn)的值,稱為大頂堆; 或者每個(gè)節(jié)點(diǎn)的值都小于或等于其左右孩子節(jié)點(diǎn)的值,稱為小頂堆。堆排序就是利用堆進(jìn)行排序的方法.基本思想是:將待排序的序列構(gòu)造成一個(gè)大頂堆.此時(shí),整個(gè)序列的最大值就是堆頂 的根結(jié)點(diǎn).將它移走(其實(shí)就是將其與堆數(shù)組的末尾
47、元素交換, 此時(shí)末尾元素就是最大值),然后將剩余的n-1個(gè)序列重新構(gòu)造成一個(gè)堆,這樣就會(huì)得到n個(gè)元素的次大值.如此反復(fù)執(zhí)行,便能得到一個(gè)有序序列了。 時(shí)間復(fù)雜度為 O(nlogn),好于冒泡,簡(jiǎn)單選擇,直接插入的O(n2) 七、快速排序通過(guò)一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過(guò)程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。時(shí)間復(fù)雜度為O(nlogn) 2. 對(duì)冒泡與快排的改進(jìn)。改進(jìn)思路1:設(shè)置標(biāo)志位,明顯如果有一趟沒(méi)有發(fā)生交換(flag = flase),說(shuō)明排序已經(jīng)完成 改進(jìn)思路2
48、:記錄一輪下來(lái)標(biāo)記的最后位置,下次從頭部遍歷到這個(gè)位置就Ok3. 二分查找,與變種二分查找。4. 二叉樹(shù)的前中后續(xù)遍歷:遞歸與非遞歸寫(xiě)法,層序遍歷算法。5. 排列組合問(wèn)題。6. 大數(shù)據(jù)處理:類似10億條數(shù)據(jù)找出最大的1000個(gè)數(shù)、等等我們只要定義一個(gè)的鏈表,將1億個(gè)數(shù)用插入排序法插入,當(dāng)鏈表的里元素的個(gè)數(shù)大于1000時(shí),每插一個(gè)數(shù)就丟掉一個(gè)最小值(head節(jié)點(diǎn))其他問(wèn)題1. 對(duì)某個(gè)項(xiàng)目印象最深,得到了什么收獲2. 項(xiàng)目中遇到的困難,怎么解決的3. 解釋一下數(shù)據(jù)庫(kù)事務(wù)概念,特點(diǎn)4. 數(shù)據(jù)庫(kù)隔離級(jí)別5. 解釋一下不可重復(fù)讀6. 線程池中核心線程數(shù)和最大線程數(shù)的區(qū)別7. 如果加入公司后這些你的上級(jí)對(duì)
49、你做的東西全盤(pán)否定,說(shuō)這個(gè)太垃圾了,你會(huì)怎么做補(bǔ)充問(wèn)題1. 【海亮】Spring MVC 4.0的哪個(gè)注解,使得整個(gè)Controller都返回Json格式數(shù)據(jù)2. 【海亮】SQL中l(wèi)ike通配符的效率問(wèn)題3. 【信鴿】Java緩存技術(shù)Memcached、Redis4. 【信鴿】Mysql兩大引擎區(qū)別5. 【信鴿】MySQL聯(lián)合索引和單索引什么時(shí)候用單一列索引的應(yīng)用結(jié)論: 1):只要條件列中出現(xiàn)索引列,無(wú)論在什么位置,都能利用索引查詢.兩者的共同點(diǎn): 1):要想利用索引,都要符合SARG標(biāo)準(zhǔn). 2) :都是為了提高查詢速度. 3):都需要額外的系統(tǒng)開(kāi)銷,磁盤(pán)空間. 補(bǔ)充說(shuō)明: stmtText信
50、息來(lái)產(chǎn)生,在查詢語(yǔ)句前面加上:SET STATISTICS PROFILE on.可以通過(guò)運(yùn)行它,來(lái)觀察你的查詢是否合理,這樣才能真正做到優(yōu)化.本文主旨:討論什么情況下能利用上索引. 索引:創(chuàng)建索引可以根據(jù)查詢業(yè)務(wù)的不同分為兩種:單一列的索引,聯(lián)合索引. 顧名思義,單一列索引就是指在表的某一列上創(chuàng)建索引,聯(lián)合索引是在多個(gè)列上聯(lián)合創(chuàng)建索引. 優(yōu)缺點(diǎn)比較: 1):索引所占用空間:單一列索引相對(duì)要小. 2):索引創(chuàng)建時(shí)間:單一列索引相對(duì)短. 3):索引對(duì)insert,update,delete的影響程序:單一列索引要相對(duì)低. 4):在多條件查詢時(shí),聯(lián)合索引效率要高. 索引的使用范圍:單一列索引可以出
51、現(xiàn)在where 條件中的任何位置,而聯(lián)合索引需要按一定的順序來(lái)寫(xiě)6. 【信鴿】多線程類鎖和方法鎖7. 【信鴿】nginx服務(wù)器、負(fù)載均衡、分布式數(shù)據(jù)庫(kù)8. 【快云】Spring MVC的異常統(tǒng)一處理機(jī)制SpringMVC提供的異常處理主要有兩種方式,一種是直接實(shí)現(xiàn)自己的HandlerExceptionResolver,另一種是使用注解的方式實(shí)現(xiàn)一個(gè)專門(mén)用于處理異常的ControllerExceptionHandler。9. 【海象】多線程操作的包是哪個(gè)是在java.lang這個(gè)包下面的,主要是一個(gè)類java.lang.Thread和一個(gè)接口java.lang. Runnable10. 【海象】
52、泛型是做什么的,為了解決什么問(wèn)題,是從哪個(gè)版本開(kāi)始出現(xiàn)的泛型是Java SE 1.5的新特性,泛型的本質(zhì)是參數(shù)化類型,也就是說(shuō)所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)。這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法。 Java語(yǔ)言引入泛型的好處是安全簡(jiǎn)單。在Java SE 1.5之前,沒(méi)有泛型的情況的下,通過(guò)對(duì)類型Object的引用來(lái)實(shí)現(xiàn)參數(shù)的“任意化”,“任意化”帶來(lái)的缺點(diǎn)是要做顯式的強(qiáng)制類型轉(zhuǎn)換,而這種轉(zhuǎn)換是要求開(kāi)發(fā)者對(duì)實(shí)際參數(shù)類型可以預(yù)知的情況下進(jìn)行的。對(duì)于強(qiáng)制類型轉(zhuǎn)換錯(cuò)誤的情況,編譯器可能不提示錯(cuò)誤,在運(yùn)行的時(shí)候才出現(xiàn)異常,這是一個(gè)安全隱患。泛型的好處是在編譯的時(shí)候檢查類型安全,并且所有的強(qiáng)制轉(zhuǎn)換都是自動(dòng)和隱式的,以提高代碼的重用率。11. 【海象】Spring MVC AOP IOC分別是什么IOC就是典型的工廠模式,通過(guò)sessionfactory去注入實(shí)例。AOP就是典型的代理模式的體現(xiàn)。在傳統(tǒng)的程序設(shè)計(jì)中,當(dāng)調(diào)用者需要被調(diào)用者的協(xié)助時(shí),通常由調(diào)用者來(lái)創(chuàng)建被調(diào)用者的實(shí)例。但在spring里創(chuàng)建被調(diào)用者的工作不再由調(diào)用者來(lái)完成,因此控制反轉(zhuǎn)(IOC
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版數(shù)學(xué)八年級(jí)下冊(cè)《章前引言及 加權(quán)平均數(shù)》聽(tīng)評(píng)課記錄1
- 人教部編版八年級(jí)道德與法治上冊(cè):7.1《關(guān)愛(ài)他人》聽(tīng)課評(píng)課記錄2
- 蘇教版小學(xué)二年級(jí)下冊(cè)數(shù)學(xué)口算題
- 七年級(jí)生物教學(xué)計(jì)劃
- 工程建設(shè)項(xiàng)目招標(biāo)代理合同范本
- 2025年度二零二五年度食堂檔口租賃合同與食品安全宣傳教育協(xié)議
- 農(nóng)機(jī)合作社入社協(xié)議書(shū)范本
- 二零二五年度智能駕駛技術(shù)聘用駕駛員安全合作協(xié)議書(shū)
- 2025年度船舶買賣合同中的船舶交易市場(chǎng)分析及預(yù)測(cè)
- 2025年度員工公寓租賃補(bǔ)貼協(xié)議范本
- 2025年礦山開(kāi)采承包合同實(shí)施細(xì)則4篇
- 2025年度茶葉品牌加盟店加盟合同及售后服務(wù)協(xié)議
- 氧氣、乙炔工安全操作規(guī)程(3篇)
- 建筑廢棄混凝土處置和再生建材利用措施計(jì)劃
- 集裝箱知識(shí)培訓(xùn)課件
- 某縣城區(qū)地下綜合管廊建設(shè)工程項(xiàng)目可行性實(shí)施報(bào)告
- 《架空輸電線路導(dǎo)線舞動(dòng)風(fēng)偏故障告警系統(tǒng)技術(shù)導(dǎo)則》
- 2024年計(jì)算機(jī)二級(jí)WPS考試題庫(kù)
- JJF(京) 92-2022 激光標(biāo)線儀校準(zhǔn)規(guī)范
- 普惠金融政策解讀
- 廣東省廣州黃埔區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期期末數(shù)學(xué)試卷(含答案)
評(píng)論
0/150
提交評(píng)論