Java面試專題答案_第1頁(yè)
Java面試專題答案_第2頁(yè)
Java面試專題答案_第3頁(yè)
Java面試專題答案_第4頁(yè)
Java面試專題答案_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、和 JRE 有什么區(qū)別JDK: Java Development Kit 的簡(jiǎn)稱, Java 開發(fā)工具包,提供了 Java 的開發(fā)環(huán)境和運(yùn)行環(huán)境。JRE: Java Runtime Environment 的簡(jiǎn)稱, Java 運(yùn)行環(huán)境,為 Java 的運(yùn)行提供了所需環(huán)境。具體來(lái)說(shuō)JDK其實(shí)包含了 JRE同時(shí)還包含了編譯Java源碼的編譯器JavaG還包含了很多Java程序調(diào)試和分析的工具。簡(jiǎn)單來(lái)說(shuō):如果你需要運(yùn)行Java 程序,只需安裝JRE 就可以了,如果你需要編寫Java 程序,需要安裝JDK。.= 和 equals 的區(qū)別是什么= 對(duì)于基本類型來(lái)說(shuō)是值比較, 對(duì)于引用類型來(lái)說(shuō)是比較的是引

2、用; 而 equals 默認(rèn)情況下是引用比較, 只是很多類重新了 equals方法,比如 String 、 Integer 等把它變成了值比較,所以一般情況下equals 比較的是值是否相等。.兩個(gè)對(duì)象的 hashCode() 相同,則 equals() 也一定為 true ,對(duì)嗎不對(duì),兩個(gè)對(duì)象的 hashCode() 相同, equals() 不一定 true 。在 Java 中有什么作用final 修飾的類叫最終類,該類不能被繼承。final 修飾的方法不能被重寫。final 修飾的變量叫常量,常量必須初始化,初始化之后值就不能被修改。中的 Math. round(-1. 5) 等于多少等

3、于-1。round()是四舍五入,注意負(fù)數(shù)5是舍的,例如:值是2,值是-1。屬于基礎(chǔ)的數(shù)據(jù)類型嗎String 不屬于基礎(chǔ)類型,基礎(chǔ)類型有8 種: byte 、 boolean 、 char、 short、 int、 float 、 long、 double ,而 String 屬于對(duì)象。中操作字符串都有哪些類它們之間有什么區(qū)別操作字符串的類有: String、 StringBuffer 、 StringBuilder 。String 聲明的是不可變的對(duì)象,每次操作都會(huì)生成新的 String 對(duì)象,然后將指針指向新的 String 對(duì)象StringBuffer 由于很多方法都被synchroni

4、zed 修飾了所以線程安全,但是當(dāng)多線程訪問(wèn)時(shí),加鎖和釋放鎖的過(guò)程很平凡,所以效率相比 StringBuilder 要低。 StringBuilder 相反執(zhí)行效率高,但是線程不安全。str=i 與 String str=new String( 一樣嗎 “ i ”)不一樣,因?yàn)閮?nèi)存的分配方式不一樣。String str=的方式,Java虛擬機(jī)會(huì)將其分配到常量池中,如果常量池中有i ,就返回i的地址,如果沒(méi)有就創(chuàng)建i,然后返回i的地址;而 String str=new String(則會(huì)被分到堆內(nèi)存中新開辟一塊空間。.如何將字符串反轉(zhuǎn)使用 StringBuilder 或者 stringBuffe

5、r 的 reverse() 方法類的常用方法都有那些indexOf charAt replace toLowerCase toUpperCase substring equals trim split getBytes length.抽象類必須要有抽象方法嗎不需要,抽象類不一定非要有抽象方法;但是包含一個(gè)抽象方法的類一定是抽象類。.普通類和抽象類有哪些區(qū)別普通類不能包含抽象方法,抽象類可以包含抽象方法。抽象類是不能被實(shí)例化的,就是不能用 new 調(diào)出構(gòu)造方法創(chuàng)建對(duì)象,普通類可以直接實(shí)例化。如果一個(gè)類繼承于抽象類, 則該子類必須實(shí)現(xiàn)父類的抽象方法。 如果子類沒(méi)有實(shí)現(xiàn)父類的抽象方法, 則必須將子類

6、也定義為 abstract類。.抽象類能使用final 修飾嗎不能,定義抽象類就是讓其他類繼承的,如果定義為 final 該類就不能被繼承, 這樣彼此就會(huì)產(chǎn)生矛盾, 所以 final 不能修飾抽象類.接口和抽象類有什么區(qū)別實(shí)現(xiàn):抽象類的子類使用extends來(lái)繼承;接口必須使用 implements來(lái)實(shí)現(xiàn)接口。構(gòu)造函數(shù):抽象類可以有構(gòu)造函數(shù);接口不能有。實(shí)現(xiàn)數(shù)量:類可以實(shí)現(xiàn)很多個(gè)接口;但只能繼承一個(gè)抽象類【java只支持單繼承】。訪問(wèn)修飾符:接口中的方法默認(rèn)使用public修飾;抽象類中的抽象方法可以使用Public和Protected修飾,如果抽象方法修飾符為 Private,貝U報(bào)錯(cuò): T

7、he abstract method 方法名 in type Test can only set a visibility modifier, one of public or protected 。中IO流分為幾種按功能來(lái)分:輸入流(input)、輸出流(output)。按類型來(lái)分:字節(jié)流和字符流。、NIO、AIO有什么區(qū)別BIO: Block IO同步阻塞式 NIO: New IO同步非阻塞 AIO: Asynchronous IO 是字節(jié)流和字符流的區(qū)別是:字節(jié)流按8位傳輸以字節(jié)為單位輸入輸出數(shù)據(jù),字符流按16位傳輸以字符為單位輸入輸出數(shù)據(jù)。IO,就是我們平常使用的傳統(tǒng)IO,它的特點(diǎn)是模

8、式簡(jiǎn)單使用方便,并發(fā)處理能力低。IO,是傳統(tǒng)IO的升級(jí),客戶端和服務(wù)器端通過(guò)Channel (通道)通訊,實(shí)現(xiàn)了多路復(fù)用。NIO的升級(jí),也叫 NIO2,實(shí)現(xiàn)了異步非堵塞IO ,異步IO的操作基于事件和回調(diào)機(jī)制。的常用方法都有哪些Files. exists。:檢測(cè)文件路徑是否存在Files. delete():刪除一個(gè)文件或目錄Files. size():查看文件個(gè)數(shù)Files. createFile():創(chuàng)建文件。Files. copy():復(fù)制文件Files. read():讀取文件Files. createDirectory():創(chuàng)建文件夾。Files. move():移動(dòng)文件。Files

9、. write():寫入文件容器都有哪些Java容器分為 Collection和Map兩大類,其下又有很多子類Collection List ArrayList LinkedList Vector Stack Set HashSet LinkedHashSet TreeSet Map HashMap LinkedHashMap TreeMap ConcurrentHashMap Hashtable和 Collections 有什么區(qū)別Collection是一個(gè)集合接口,它提供了對(duì)集合對(duì)象進(jìn)行基本操作的通用接口方法,所有集合都是它的子類,比如List、Set等Collections是一個(gè)包裝類,

10、包含了很多靜態(tài)方法,不能被實(shí)例化,就像一個(gè)工具類,比如提供的排序方法:Collections. sort(list)、Set、Map之間的區(qū)別是什么 元素有序允音元素重復(fù)List是是Ab2tractSe t 否 SetHashSet否TreeSet是(用二叉樹排序MapAb2tractlflapKey值必須惟一聿value可重復(fù)否 HashMap是(用二叉樹排序. HashMap 和 Hashtable 有什么區(qū)別HashMap是非線程安全的Hashtable 線程安全HashMap對(duì)象的key、value值均可為null , HahTable對(duì)象的key、value值均不可為 null。.如

11、何決定使用HashMap還是 TreeMap對(duì)于在Map中插入、刪除、定位一個(gè)元素這類操作,HashMap是最好的選擇,因?yàn)橄鄬?duì)而言HashMap的插入會(huì)更快,但如果你要對(duì)一個(gè) key集合進(jìn)行有序白遍歷,那 TreeMap是更好的選擇.說(shuō)一下HashMap 的實(shí)現(xiàn)原理(數(shù)組+鏈表、紅黑樹)HashMap基于 Hash算法實(shí)現(xiàn)的,我們通過(guò) put(key,value)存儲(chǔ),get(key)來(lái)獲取。當(dāng)傳入 key時(shí),HashMap會(huì)根據(jù) key. hashCode() 計(jì)算出 hash 值,根據(jù) hash 值將 value 保存在 bucket 里。當(dāng)計(jì)算出的 hash 值相同時(shí),我們稱之為 ha

12、sh 沖突, HashMap 的 做法是用鏈表和紅黑樹存儲(chǔ)相同 hash 值的 value 。當(dāng) hash 沖突的個(gè)數(shù)比較少時(shí),使用鏈表否則使用紅黑樹。.說(shuō)一下HashSet 的實(shí)現(xiàn)原理HashSet 是基于 HashMap 實(shí)現(xiàn)的, HashSet 底層使用 HashMap 來(lái)保存所有元素, 因此 HashSet 的實(shí)現(xiàn)比較簡(jiǎn)單, 相關(guān) HashSet 的操作,基本上都是直接調(diào)用底層 HashMap 的相關(guān)方法來(lái)完成, HashSet 不允許重復(fù)的值。和 LinkedList 的區(qū)別是什么ArrayList 是動(dòng)態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),而LinkedList 是雙向鏈表的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)頻繁讀取集

13、合中的元素時(shí),更推薦使用ArrayList ,而在插入和刪除操作較多時(shí),更推薦使用LinkedList.如何實(shí)現(xiàn)數(shù)組和List 之間的轉(zhuǎn)換數(shù)組轉(zhuǎn) List:使用 Arrays. asList(array)進(jìn)行轉(zhuǎn)換。 List轉(zhuǎn)數(shù)組:使用 List自帶的toArray()方法。和 Vector 的區(qū)別是什么線程安全: Vector 使用了 Synchronized 來(lái)實(shí)現(xiàn)線程同步,是線程安全的,而ArrayList 是非線程安全的。性能: ArrayList 在性能方面要優(yōu)于Vector 。擴(kuò)容: ArrayList 和 Vector 都會(huì)根據(jù)實(shí)際的需要?jiǎng)討B(tài)的調(diào)整容量, 只不過(guò)在 Vector

14、擴(kuò)容每次會(huì)增加1 倍, 而 ArrayList 只會(huì)增加50%。和 ArrayList 有何區(qū)別Array 可以存儲(chǔ)基本數(shù)據(jù)類型和對(duì)象, ArrayList 只能存儲(chǔ)對(duì)象。Array 是指定固定大小的,而ArrayList 大小是自動(dòng)擴(kuò)展的。Array 內(nèi)置方法沒(méi)有ArrayList 多,比如 addAll、 removeAll 、 iteration 等方法只有ArrayList 有。.在 Queue 中 poll() 和 remove() 有什么區(qū)別相同點(diǎn):都是返回第一個(gè)元素,并在隊(duì)列中刪除返回的對(duì)象。不同點(diǎn):如果沒(méi)有元素remove()會(huì)直接拋出NoSuchElementExceptio

15、n異常,而 poll()會(huì)返回null。.哪些集合類是線程安全的Vector、 Hashtable 、 Stack 都是線程安全的,而像 HashMap 則是非線程安全的,不過(guò)在 JDK 之后隨著 Java. util. concurrent 并 發(fā)包的出現(xiàn),它們也有了自己對(duì)應(yīng)的線程安全類,比如 HashMap 對(duì)應(yīng)的線程安全類就是ConcurrentHashMap 。.迭代器 Iterator 是什么Iterator 接口提供遍歷任何 Collection 的接口。我們可以從一個(gè)Collection 中使用迭代器方法來(lái)獲取迭代器實(shí)例。迭代器取代了Java 集合框架中的 Enumeration

16、 ,迭代器允許調(diào)用者在迭代過(guò)程中移除元素。怎么使用有什么特點(diǎn)Iterator 的特點(diǎn)是更加安全, 因?yàn)樗梢源_保, 在當(dāng)前遍歷的集合元素被更改的時(shí)候, 就會(huì)拋出 ConcurrentModificationException 異 常。和 ListIterator 有什么區(qū)別Iterator 可以遍歷 Set 和 List 集合,而 ListIterator 只能遍歷 List 。Iterator 只能單向遍歷,而ListIterator 可以雙向遍歷(向前/后遍歷) 。ListIterator 從 Iterator 接口繼承,然后添加了一些額外的功能,比如添加一個(gè)元素、替換一個(gè)元素、獲取前面或

17、后面元素的索引位置。.怎么確保一個(gè)集合不能被修改可以使用 Collections. unmodifiableCollection(Collection c) 方法來(lái)創(chuàng)建一個(gè)只讀集合, 這樣改變集合的任何操作都會(huì)拋出 Java. lang.UnsupportedOperationException 異常。.并行和并發(fā)有什么區(qū)別并行:多個(gè)處理器或多核處理器同時(shí)處理多個(gè)任務(wù)。并發(fā):多個(gè)任務(wù)在同一個(gè)CPU 核上,按細(xì)分的時(shí)間片輪流(交替)執(zhí)行,從邏輯上來(lái)看那些任務(wù)是同時(shí)執(zhí)行。.線程和進(jìn)程的區(qū)別一個(gè)程序下至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程下至少有一個(gè)線程,一個(gè)進(jìn)程下也可以有多個(gè)線程來(lái)增加程序的執(zhí)行速度。.守護(hù)線程

18、是什么守護(hù)線程是運(yùn)行在后臺(tái)的一種特殊進(jìn)程。它獨(dú)立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。在 Java 中 垃圾回收線程就是特殊的守護(hù)線程。.多線程有幾種實(shí)現(xiàn)方式有 4 種,分別是:- 繼承Thread 類- 實(shí)現(xiàn)Runnable 接口一實(shí)現(xiàn)Callable接口通過(guò)FutureTask包裝器來(lái)創(chuàng)建 Thread線程-通過(guò)線程池創(chuàng)建線程,使用線程池接口ExecutorService 結(jié)合Callable、 Future 實(shí)現(xiàn)有返回結(jié)果的多線程。前面兩種【無(wú)返回值】原因:通過(guò)重寫 run 方法, run 方法的返回值是void ,所以沒(méi)有辦法返回結(jié)果。后面兩種 【有返回值】 原因

19、: 通過(guò) Callable 接口, 就要實(shí)現(xiàn) call 方法, 這個(gè)方法的返回值是Object , 所以返回的結(jié)果可以放在Object對(duì)象中。.說(shuō)一下Runnable 和 Callable 有什么區(qū)別Runnable 沒(méi)有返回值, Callable 可以拿到有返回值, Callable 可以看作是Runnable 的補(bǔ)充。.線程有哪些狀態(tài)初始 (new) 運(yùn)行 (Runnable) 阻塞狀態(tài) (Blocked) 等待 (Waiting) 超時(shí)等待 (TimedWaiting) 終止 (Terminated)() 和 wait() 有什么區(qū)別類的不同: sleep() 來(lái)自 Thread, wa

20、it() 來(lái)自 Object 。釋放鎖: sleep() 不釋放鎖; wait() 釋放鎖。用法不同: sleep() 時(shí)間到會(huì)自動(dòng)恢復(fù); wait() 可以使用 notify()/notifyAll() 直接喚醒。()和 notifyAll() 有什么區(qū)別notifyAll() 會(huì)喚醒所有的線程, notify() 之后喚醒一個(gè)線程。 notifyAll() 調(diào)用后, 會(huì)將全部線程由等待池移到鎖池, 然后參與鎖的競(jìng)爭(zhēng),競(jìng)爭(zhēng)成功則繼續(xù)執(zhí)行, 如果不成功則留在鎖池等待鎖被釋放后再次參與競(jìng)爭(zhēng)。而 notify() 只會(huì)喚醒一個(gè)線程,具體喚醒哪一個(gè)線程由虛擬機(jī)控制。.線程的run() 和 start

21、() 有什么區(qū)別start() 方法用于啟動(dòng)線程, run() 方法用于執(zhí)行線程的運(yùn)行時(shí)代碼。 run() 可以重復(fù)調(diào)用,而start() 只能調(diào)用一次。.創(chuàng)建線程池有哪幾種方式線程池創(chuàng)建有七種方式,最核心的是最后一種:newSingleThreadExecutor() :它的特點(diǎn)在于工作線程數(shù)目被限制為 1,操作一個(gè)無(wú)界的工作隊(duì)列,newCachedThreadPool():它是一種用來(lái)處理大量短時(shí)間工作任務(wù)的線程池,具有幾個(gè)鮮明特點(diǎn):它會(huì)試圖緩存線程并重用,當(dāng)無(wú)緩存線程可用時(shí),就會(huì)創(chuàng)建新的工作線程;如果線程閑置的時(shí)間超過(guò) 60 秒,則被終止并移出緩存;長(zhǎng)時(shí)間閑置時(shí),這種線程池,不會(huì)消耗什么

22、資源。其內(nèi)部使用 SynchronousQueue 作為工作隊(duì)列;newFixedThreadPool(int nThreads) : 重 用 指 定 數(shù) 目 ( nThreads ) 的 線 程 , 其 背 后 使 用 的 是 無(wú) 界 的 工 作 隊(duì) 列 , newSingleThreadScheduledExecutor():創(chuàng)建單線程池,返回ScheduledExecutorService,可以進(jìn)行定時(shí)或周期性的工作調(diào)度;newScheduledThreadPool(int corePoolSize):和 newSingleThreadScheduledExecutor()類似,創(chuàng)建的是

23、個(gè) ScheduledExecutorService,可 以進(jìn)行定時(shí)或周期性的工作調(diào)度,區(qū)別在于單一工作線程還是多個(gè)工作線程;newWorkStealingPool(int parallelism) :這是一個(gè)經(jīng)常被人忽略的線程池, Java 8 才加入這個(gè)創(chuàng)建方法,其內(nèi)部會(huì)構(gòu)建 ForkJoinPool , 利用 Work-Stealing 算法,并行地處理任務(wù),不保證處理順序;ThreadPoolExecutor():是最原始的線程池創(chuàng)建,上面 1-3創(chuàng)建方式都是對(duì) ThreadPoolExecutor的封裝。.線程池都有哪些狀態(tài)RUNNING:這是最正常的狀態(tài),接受新的任務(wù),處理等待隊(duì)列

24、中的任務(wù)。SHUTDOWN:不接受新的任務(wù)提交,但是會(huì)繼續(xù)處理等待隊(duì)列中的任務(wù)。STOP不接受新的任務(wù)提交,不再處理等待隊(duì)列中的任務(wù),中斷正在執(zhí)行任務(wù)的線程。TIDYING所有的任務(wù)都銷毀了,workCount為0,線程池的狀態(tài)在轉(zhuǎn)換為TIDYING狀態(tài)時(shí),會(huì)執(zhí)行鉤子方法terminated。TERMINATED: terminated() 方法結(jié)束后,線程池的狀態(tài)就會(huì)變成這個(gè)。.線程池中 submit() 和 execute() 方法有什么區(qū)別execute() :只能執(zhí)行Runnable 類型的任務(wù)。submit() :可以執(zhí)行Runnable 和 Callable 類型的任務(wù)。Calla

25、ble 類型的任務(wù)可以獲取執(zhí)行的返回值,而Runnable 執(zhí)行無(wú)返回值。.在 Java 程序中怎么保證多線程的運(yùn)行安全方法一:使用安全類,比如 Java. util. concurrent 下的類。方法二:使用自動(dòng)鎖synchronized 。方法三:使用手動(dòng)鎖Lock。.多線程中 synchronized 鎖升級(jí)的原理是什么synchronized 鎖升級(jí)原理:在鎖對(duì)象的對(duì)象頭里面有一個(gè)threadid 字段,在第一次訪問(wèn)的時(shí)候 threadid 為空, jvm 讓其持有偏向鎖,并將threadid 設(shè)置為其線程id ,再次進(jìn)入的時(shí)候會(huì)先判斷threadid 是否與其線程id 一致,如果一

26、致則可以直接使用此對(duì)象,如果不一致,則升級(jí)偏向鎖為輕量級(jí)鎖,通過(guò)自旋循環(huán)一定次數(shù)來(lái)獲取鎖,執(zhí)行一定次數(shù)之后,如果還沒(méi)有正常獲取到要使用的對(duì)象,此時(shí)就會(huì)把鎖從輕量級(jí)升級(jí)為重量級(jí)鎖,此過(guò)程就構(gòu)成了 synchronized 鎖的升級(jí)。鎖的升級(jí)的目的:鎖升級(jí)是為了減低了鎖帶來(lái)的性能消耗。在 Java 6 之后優(yōu)化 synchronized 的實(shí)現(xiàn)方式,使用了偏向鎖升級(jí)為輕量級(jí)鎖再升級(jí)到重量級(jí)鎖的方式,從而減低了鎖帶來(lái)的性能消耗。.什么是死鎖當(dāng)線程 A 持有獨(dú)占鎖a, 并嘗試去獲取獨(dú)占鎖 b 的同時(shí), 線程 B 持有獨(dú)占鎖b , 并嘗試獲取獨(dú)占鎖 a 的情況下, 就會(huì)發(fā)生 AB兩個(gè)線程由于互相持有對(duì)方

27、需要的鎖,而發(fā)生的阻塞現(xiàn)象,我們稱為死鎖。.怎么防止死鎖盡量使用 tryLock(long timeout, TimeUnit unit) 的方法 (ReentrantLock、 ReentrantReadWriteLock) ,設(shè)置超時(shí)時(shí)間,超時(shí)可以退出防止死鎖。盡量使用 Java. util. concurrent 并發(fā)類代替自己手寫鎖。盡量降低鎖的使用粒度,盡量不要幾個(gè)功能用同一把鎖。盡量減少同步的代碼塊。是什么有哪些使用場(chǎng)景ThreadLocal 為每個(gè)使用該變量的線程提供獨(dú)立的變量副本, 所以每一個(gè)線程都可以獨(dú)立地改變自己的副本, 而不會(huì)影響其它線程所對(duì)應(yīng)的副本。ThreadLoca

28、l 的經(jīng)典使用場(chǎng)景是數(shù)據(jù)庫(kù)連接和 session 管理等52.說(shuō)一下 synchronized 底層實(shí)現(xiàn)原理synchronized 是由一對(duì) monitorenter/monitorexit 指令實(shí)現(xiàn)的, monitor 對(duì)象是同步的基本實(shí)現(xiàn)單元。 在 Java 6 之前, monitor 的實(shí)現(xiàn)完全是依靠操作系統(tǒng)內(nèi)部的互斥鎖,因?yàn)樾枰M(jìn)行用戶態(tài)到內(nèi)核態(tài)的切換,所以同步操作是一個(gè)無(wú)差別的重量級(jí)操作,性能也很低。但在 Java 6 的時(shí)候, Java 虛擬機(jī) 對(duì)此進(jìn)行了大刀闊斧地改進(jìn),提供了三種不同的 monitor 實(shí)現(xiàn),也就是常說(shuō)的三種不同的鎖:偏向鎖( Biased Locking) 、

29、輕量級(jí)鎖和重量級(jí)鎖,大大改進(jìn)了其性能。和 volatile 的區(qū)別是什么volatile 是變量修飾符; synchronized 是修飾類、方法、代碼段。volatile 僅能實(shí)現(xiàn)變量的修改可見(jiàn)性,不能保證原子性;而 synchronized 則可以保證變量的修改可見(jiàn)性和原子性。volatile 不會(huì)造成線程的阻塞; synchronized 可能會(huì)造成線程的阻塞。和 Lock 有什么區(qū)別synchronized 可以給類、方法、代碼塊加鎖;而lock 只能給代碼塊加鎖。synchronized 不需要手動(dòng)獲取鎖和釋放鎖,使用簡(jiǎn)單,發(fā)生異常會(huì)自動(dòng)釋放鎖,不會(huì)造成死鎖;而lock 需要自己加鎖

30、和釋放鎖,如果使用不當(dāng)沒(méi)有unLock()去釋放鎖就會(huì)造成死鎖。通過(guò) Lock 可以知道有沒(méi)有成功獲取鎖,而synchronized 卻無(wú)法辦到。和 ReentrantLock 區(qū)別是什么synchronized早期的實(shí)現(xiàn)比較低效,對(duì)比 ReentrantLock,大多數(shù)場(chǎng)景性能都相差較大,但是在Java 6中對(duì)synchronized進(jìn)行了非常多的改進(jìn)。主要區(qū)別如下:ReentrantLock 使用起來(lái)比較靈活,但是必須有釋放鎖的配合動(dòng)作;ReentrantLock 必須手動(dòng)獲取與釋放鎖,而synchronized 不需要手動(dòng)釋放和開啟鎖;ReentrantLock 只適用于代碼塊鎖,而 s

31、ynchronized 可用于修飾方法、代碼塊等。ReentrantLock 標(biāo)記的變量不會(huì)被編譯器優(yōu)化; synchronized 標(biāo)記的變量可以被編譯器優(yōu)化。.說(shuō)一下 atomic 的原理atomic 主要利用 CAS (Compare And Swap) 和 volatile 和 native 方法來(lái)保證原子操作, 從而避免 synchronized 的高開銷, 執(zhí)行效 率大為提升。.什么是反射反射是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性;這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為 Java 語(yǔ)言的反射機(jī)

32、制。.什么是 Java 序列化什么情況下需要序列化Java 序列化是為了保存各種對(duì)象在內(nèi)存中的狀態(tài),并且可以把保存的對(duì)象狀態(tài)再讀出來(lái)。以下情況需要使用 Java 序列化:想把的內(nèi)存中的對(duì)象狀態(tài)保存到一個(gè)文件中或者數(shù)據(jù)庫(kù)中時(shí)候;想用套接字在網(wǎng)絡(luò)上傳送對(duì)象的時(shí)候;想通過(guò)RMI (遠(yuǎn)程方法調(diào)用)傳輸對(duì)象的時(shí)候。.動(dòng)態(tài)代理是什么有哪些應(yīng)用動(dòng)態(tài)代理是運(yùn)行時(shí)動(dòng)態(tài)生成代理類。動(dòng)態(tài)代理的應(yīng)用有spring aop、hibernate數(shù)據(jù)查詢、測(cè)試框架的后端mock、rpc, Java注解對(duì)象獲取等。.怎么實(shí)現(xiàn)動(dòng)態(tài)代理JDK 原生動(dòng)態(tài)代理和 cglib 動(dòng)態(tài)代理。 JDK 原生動(dòng)態(tài)代理是基于接口實(shí)現(xiàn)的,而cgl

33、ib 是基于繼承當(dāng)前類的子類實(shí)現(xiàn)的。.為什么要使用克隆克隆的對(duì)象可能包含一些已經(jīng)修改過(guò)的屬性,而new 出來(lái)的對(duì)象的屬性都還是初始化時(shí)候的值,所以當(dāng)需要一個(gè)新的對(duì)象來(lái)保存當(dāng)前對(duì)象的 “狀態(tài) ”就靠克隆方法了。.如何實(shí)現(xiàn)對(duì)象克隆實(shí)現(xiàn)Cloneable 接口并重寫Object 類中的 clone() 方法。實(shí)現(xiàn)Serializable 接口,通過(guò)對(duì)象的序列化和反序列化實(shí)現(xiàn)克隆,可以實(shí)現(xiàn)真正的深度克隆。.深拷貝和淺拷貝區(qū)別是什么淺拷貝:當(dāng)對(duì)象被復(fù)制時(shí)只復(fù)制它本身和其中包含的值類型的成員變量,而引用類型的成員對(duì)象并沒(méi)有復(fù)制。深拷貝:除了對(duì)象本身被復(fù)制外,對(duì)象所包含的所有成員變量也將復(fù)制。和 servl

34、et 有什么區(qū)別JSP是servlet技術(shù)的擴(kuò)展,本質(zhì)上就是 servlet的簡(jiǎn)易方式。servlet和JSP最主要的不同點(diǎn)在于,servlet的應(yīng)用邏輯是在 Java 文件中, 并且完全從表示層中的 html 里分離開來(lái), 而 JSP 的情況是 Java 和 html 可以組合成一個(gè)擴(kuò)展名為JSP 的文件。 JSP 側(cè)重于視圖, servlet 主要用于控制邏輯。有哪些內(nèi)置對(duì)象作用分別是什么JSP 有 9 大內(nèi)置對(duì)象:request :封裝客戶端的請(qǐng)求,其中包含來(lái)自get 或 post 請(qǐng)求的參數(shù);response:封裝服務(wù)器對(duì)客戶端的響應(yīng);pageContext:通過(guò)該對(duì)象可以獲取其他對(duì)象

35、;session:封裝用戶會(huì)話的對(duì)象;application :封裝服務(wù)器運(yùn)行環(huán)境的對(duì)象;out:輸出服務(wù)器響應(yīng)的輸出流對(duì)象;config : Web 應(yīng)用的配置對(duì)象;page: JSP 頁(yè)面本身(相當(dāng)于Java 程序中的 this ) ;exception :封裝頁(yè)面拋出異常的對(duì)象。66.說(shuō)一下 JSP 的 4 種作用域page:代表與一個(gè)頁(yè)面相關(guān)的對(duì)象和屬性。request :代表與客戶端發(fā)出的一個(gè)請(qǐng)求相關(guān)的對(duì)象和屬性。一個(gè)請(qǐng)求可能跨越多個(gè)頁(yè)面,涉及多個(gè)Web 組件;需要在頁(yè)面顯示的臨時(shí)數(shù)據(jù)可以置于此作用域。session:代表與某個(gè)用戶與服務(wù)器建立的一次會(huì)話相關(guān)的對(duì)象和屬性。跟某個(gè)用戶相

36、關(guān)的數(shù)據(jù)應(yīng)該放在用戶自己的session中。application :代表與整個(gè)Web 應(yīng)用程序相關(guān)的對(duì)象和屬性,它實(shí)質(zhì)上是跨越整個(gè)Web 應(yīng)用程序,包括多個(gè)頁(yè)面、請(qǐng)求和會(huì)話的一個(gè)全局作用域。和 cookie 有什么區(qū)別session:是一種將會(huì)話狀態(tài)保存在服務(wù)器端的技術(shù)。Cookie :是在 HTTP 協(xié)議下, Web 服務(wù)器保存在用戶瀏覽器(客戶端)上的小文本文件,它可以包含有關(guān)用戶的信息。無(wú)論何時(shí)用戶鏈接到服務(wù)器, Web 站點(diǎn)都可以訪問(wèn) Cookie 信息 。存儲(chǔ)位置不同: session 存儲(chǔ)在服務(wù)器端; cookie 存儲(chǔ)在瀏覽器端。安全性不同: cookie 安全性一般,在瀏覽器

37、存儲(chǔ),可以被偽造和修改。容量和個(gè)數(shù)限制: cookie 有容量限制,每個(gè)站點(diǎn)下的 cookie 也有個(gè)數(shù)限制。存儲(chǔ)的多樣性: session 可以存儲(chǔ)在Redis 中、數(shù)據(jù)庫(kù)中、應(yīng)用程序中;而cookie 只能存儲(chǔ)在瀏覽器中。.說(shuō)一下 session 的工作原理session 的工作原理是客戶端登錄完成之后,服務(wù)器會(huì)創(chuàng)建對(duì)應(yīng)的 session, session 創(chuàng)建完之后,會(huì)把session 的 id 發(fā)送給客戶端,客戶端再存儲(chǔ)到瀏覽器中。這樣客戶端每次訪問(wèn)服務(wù)器時(shí),都會(huì)帶著sessionid,服務(wù)器拿到sessionid之后,在內(nèi)存找到與之對(duì)應(yīng)的 session 這樣就可以正常工作了。.如果

38、客戶端禁止cookie 能實(shí)現(xiàn) session 還能用嗎可以用, session 只是依賴 cookie 存儲(chǔ) sessionid, 如果 cookie 被禁用了, 可以使用 url 中添加 sessionid 的方式保證 session 能 正常使用。mvc 和 struts 的區(qū)別是什么攔截級(jí)別: struts2 是類級(jí)別的攔截; spring mvc 是方法級(jí)別的攔截。數(shù)據(jù)獨(dú)立性: spring mvc 的方法之間基本上獨(dú)立的,獨(dú)享 request 和 response 數(shù)據(jù),請(qǐng)求數(shù)據(jù)通過(guò)參數(shù)獲取,處理結(jié)果通過(guò)ModelMap 交回給框架,方法之間不共享變量;而struts2 雖然方法之

39、間也是獨(dú)立的,但其所有action 變量是共享的,這不會(huì)影響程序運(yùn)行,卻給我們編碼和讀程序時(shí)帶來(lái)了一定的麻煩。攔截機(jī)制: struts2 有以自己的 interceptor 機(jī)制, spring mvc 用的是獨(dú)立的 aop 方式,這樣導(dǎo)致struts2 的配置文件量比springmvc 大。對(duì) ajax 的支持: spring mvc 集成了 ajax , 所有 ajax 使用很方便, 只需要一個(gè)注解ResponseBody 就可以實(shí)現(xiàn)了; 而 struts2 一般需要安裝插件或者自己寫代碼才行。.如何避免SQL 注入使用預(yù)處理PreparedStatement 。使用正則表達(dá)式過(guò)濾掉字符中

40、的特殊字符。.什么是 XSS攻擊,如何避免XSS 攻擊: 即跨站腳本攻擊, 它是 Web 程序中常見(jiàn)的漏洞。 原理是攻擊者往Web 頁(yè)面里插入惡意的腳本代碼( css 代碼、 Javascript代碼等) ,當(dāng)用戶瀏覽該頁(yè)面時(shí),嵌入其中的腳本代碼會(huì)被執(zhí)行,從而達(dá)到惡意攻擊用戶的目的,如盜取用戶cookie 、破壞頁(yè)面結(jié)構(gòu)、重定向到其他網(wǎng)站等。 預(yù)防XSS 的核心是必須對(duì)輸入的數(shù)據(jù)做過(guò)濾處理。.什么是 CSRF攻擊,如何避免 CSRF Cross-Site Request Forgery (中文:跨站請(qǐng)求偽造),可以理解為攻擊者盜用了你的身份,以你的名義發(fā)送惡意請(qǐng)求,比如: 以你名義發(fā)送郵件、發(fā)

41、消息、購(gòu)買商品,虛擬貨幣轉(zhuǎn)賬等。 防御手段: 驗(yàn)證請(qǐng)求來(lái)源地址; 關(guān)鍵操作添加驗(yàn)證碼; 在請(qǐng)求地址添加token 并驗(yàn)證。和 throws 的區(qū)別 throw :是真實(shí)拋出一個(gè)異常。 throws :是聲明可能會(huì)拋出一個(gè)異常。、 finally 、 finalize 有什么區(qū)別 final :是修飾符,如果修飾類,此類不能被繼承;如果修飾方法和變量,則表示此方法和此變量不能在被改變,只能使用。finally :是 try catch finally 最后一部分,表示不論發(fā)生任何情況都會(huì)執(zhí)行, finally 部分可以省略,但如果finally 部分存在,則一定會(huì)執(zhí)行finally 里面的代碼。

42、finalize :是Object的protected方法,子類可以覆蓋該方法以實(shí)現(xiàn)資源清理工作,GC在回收對(duì)象之前調(diào)用該方法。中哪個(gè)部分可以省略 try-catch-finally 其中 catch 和 finally 都可以被省略,但是不能同時(shí)省略,也就是說(shuō)有try 的時(shí)候,必須后面跟一個(gè)catch 或者finally 。中,如果 catch 中 return 了, finally 還會(huì)執(zhí)行嗎 finally 一定會(huì)執(zhí)行,即使是catch 中 return 了, catch 中的 return 會(huì)等 finally 中的代碼執(zhí)行完之后,才會(huì)執(zhí)行。.常見(jiàn)的異常類有哪些NullPointerE

43、xception 空指針異常 ClassNotFoundException 指定類不存在 NumberFormatException 字符串轉(zhuǎn)換為數(shù)字異常 IndexOutOfBoundsException 數(shù)組下標(biāo)越界異常 ClassCastException 數(shù)據(jù)類型轉(zhuǎn)換異常 FileNotFoundException 文件未找到異常 NoSuchMethodException 方法不存在異常 IOException IO 異常 SocketException Socket 異常響應(yīng)碼 301 和 302 代表的是什么有什么區(qū)別 301 :永久重定向;302:暫時(shí)重定向。它們的區(qū)別是,30

44、1對(duì)搜索引擎優(yōu)化(SE。更加有利;302有被提示為網(wǎng)絡(luò)攔截的風(fēng)險(xiǎn)。和 redirect 的區(qū)別 forward 是轉(zhuǎn)發(fā) 和 redirect 是重定向: 地址欄 url 顯示: foward url 不會(huì)發(fā)生改變, redirect url 會(huì)發(fā)生改變; 數(shù)據(jù)共享: forward 可以共享 request 里的數(shù)據(jù), redirect 不能共享; 效率: forward 比 redirect 效率高。.簡(jiǎn)述 tcp 和 udp 的區(qū)別tcp 和 udp 是 OSI 模型中的運(yùn)輸層中的協(xié)議。 tcp 提供可靠的通信傳輸,而udp 則常被用于讓廣播和細(xì)節(jié)控制交給應(yīng)用的通信傳輸。兩者的區(qū)別大致如下

45、:tcp 面向連接, udp 面向非連接即發(fā)送數(shù)據(jù)前不需要建立鏈接;tcp 提供可靠的服務(wù)(數(shù)據(jù)傳輸) , udp 無(wú)法保證;tcp 面向字節(jié)流,udp 面向報(bào)文;tcp 數(shù)據(jù)傳輸慢,udp 數(shù)據(jù)傳輸快;為什么要三次握手,兩次不行嗎為什么我們假設(shè) A 和 B 是通信的雙方。我理解的握手實(shí)際上就是通信,發(fā)一次信息就是進(jìn)行一次握手。第一次握手: A 給 B 打電話說(shuō),你可以聽到我說(shuō)話嗎第二次握手:B 收到了A 的信息,然后對(duì)A 說(shuō):我可以聽得到你說(shuō)話啊,你能聽得到我說(shuō)話嗎第三次握手:A 收到了B 的信息,然后說(shuō)可以的,我要給你發(fā)信息啦!在三次握手之后, A 和 B 都能確定這么一件事:我說(shuō)的話,你

46、能聽到;你說(shuō)的話,我也能聽到。這樣,就可以開始正常通信了。注意:HTTP是基于TCP協(xié)議的,所以每次都是客戶端發(fā)送請(qǐng)求,服務(wù)器應(yīng)答,但是TCP還可以給其他應(yīng)用層提供服務(wù),即可能A、B 在建立鏈接之后,誰(shuí)都可能先開始通信。如果采用兩次握手,那么只要服務(wù)器發(fā)出確認(rèn)數(shù)據(jù)包就會(huì)建立連接,但由于客戶端此時(shí)并未響應(yīng)服務(wù)器端的請(qǐng)求,那此時(shí)服務(wù)器端就會(huì)一直在等待客戶端,這樣服務(wù)器端就白白浪費(fèi)了一定的資源。 若采用三次握手,服務(wù)器端沒(méi)有收到來(lái)自客戶端的再此確認(rèn),則就會(huì)知道客戶端并沒(méi)有要求建立請(qǐng)求,就不會(huì)浪費(fèi)服務(wù)器的資源。.說(shuō)一下tcp 粘包是怎么產(chǎn)生的tcp 粘包可能發(fā)生在發(fā)送端或者接收端,分別來(lái)看兩端各種產(chǎn)生

47、粘包的原因:發(fā)送端粘包:發(fā)送端需要等緩沖區(qū)滿才發(fā)送出去,造成粘包;接收方粘包:接收方不及時(shí)接收緩沖區(qū)的包,造成多個(gè)包接收。的七層模型都有哪些物理層:利用傳輸介質(zhì)為數(shù)據(jù)鏈路層提供物理連接,實(shí)現(xiàn)比特流的透明傳輸。數(shù)據(jù)鏈路層:負(fù)責(zé)建立和管理節(jié)點(diǎn)間的鏈路。網(wǎng)絡(luò)層:通過(guò)路由選擇算法,為報(bào)文或分組通過(guò)通信子網(wǎng)選擇最適當(dāng)?shù)穆窂?。傳輸層:向用戶提供可靠的端到端的差錯(cuò)和流量控制,保證報(bào)文的正確傳輸。會(huì)話層:向兩個(gè)實(shí)體的表示層提供建立和使用連接的方法。表示層:處理用戶信息的表示問(wèn)題,如編碼、數(shù)據(jù)格式轉(zhuǎn)換和加密解密等。應(yīng)用層:直接向用戶提供服務(wù),完成用戶希望在網(wǎng)絡(luò)上完成的各種工作。和 post 請(qǐng)求有哪些區(qū)別get

48、 請(qǐng)求會(huì)被瀏覽器主動(dòng)緩存,而post 不會(huì)。get 傳遞參數(shù)有大小限制,而post 沒(méi)有。post 參數(shù)傳輸更安全, get 的參數(shù)會(huì)明文限制在 url 上, post 不會(huì)。.如何實(shí)現(xiàn)跨域?qū)崿F(xiàn)跨域有以下幾種方案:服務(wù)器端運(yùn)行跨域 設(shè)置 CORS 等于 * ;在單個(gè)接口使用注解CrossOrigin 運(yùn)行跨域;使用 jsonp 跨域;.說(shuō)一下JSONP 實(shí)現(xiàn)原理jsonp: JSON with Padding,它是利用script標(biāo)簽的src連接可以訪問(wèn)不同源的特性,加載遠(yuǎn)程返回的JSi數(shù)”來(lái)執(zhí)行的。.說(shuō)一下你熟悉的設(shè)計(jì)模式單例模式:保證被創(chuàng)建一次,節(jié)省系統(tǒng)開銷。工廠模式(簡(jiǎn)單工廠、抽象工廠)

49、 :解耦代碼。觀察者模式:定義了對(duì)象之間的一對(duì)多的依賴,這樣一來(lái),當(dāng)一個(gè)對(duì)象改變時(shí),它的所有的依賴者都會(huì)收到通知并自動(dòng)更新。外觀模式:提供一個(gè)統(tǒng)一的接口,用來(lái)訪問(wèn)子系統(tǒng)中的一群接口,外觀定義了一個(gè)高層的接口,讓子系統(tǒng)更容易使用。模版方法模式:定義了一個(gè)算法的骨架,而將一些步驟延遲到子類中,模版方法使得子類可以在不改變算法結(jié)構(gòu)的情況下,重新定義算法的步驟。狀態(tài)模式:允許對(duì)象在內(nèi)部狀態(tài)改變時(shí)改變它的行為,對(duì)象看起來(lái)好像修改了它的類。.簡(jiǎn)單工廠和抽象工廠有什么區(qū)別簡(jiǎn)單工廠:用來(lái)生產(chǎn)同一等級(jí)結(jié)構(gòu)中的任意產(chǎn)品,對(duì)于增加新的產(chǎn)品,無(wú)能為力。工廠方法:用來(lái)生產(chǎn)同一等級(jí)結(jié)構(gòu)中的固定產(chǎn)品,支持增加任意產(chǎn)品。抽象

50、工廠:用來(lái)生產(chǎn)不同產(chǎn)品族的全部產(chǎn)品,對(duì)于增加新的產(chǎn)品,無(wú)能為力;支持增加產(chǎn)品族。.為什么要使用 springspring 提供 ioc 技術(shù),容器會(huì)幫你管理依賴的對(duì)象,從而不需要自己創(chuàng)建和管理依賴對(duì)象了,更輕松的實(shí)現(xiàn)了程序的解耦。spring 提供了事務(wù)支持,使得事務(wù)操作變的更加方便。spring 提供了面向切片編程,這樣可以更方便的處理某一類的問(wèn)題。更方便的框架集成,spring 可以很方便的集成其他框架,比如 MyBatis 、 hibernate 等。.解釋一下什么是aopaop 是面向切面編程,通過(guò)預(yù)編譯方式和運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。簡(jiǎn)單來(lái)說(shuō)就是統(tǒng)一處理某一“切

51、面” (類)的問(wèn)題的編程思想,比如統(tǒng)一處理日志、異常等。.解釋一下什么是iocioc: Inversionof Control (中文:控制反轉(zhuǎn))是spring 的核心,對(duì)于 spring 框架來(lái)說(shuō),就是由 spring 來(lái)負(fù)責(zé)控制對(duì)象的生命周期和對(duì)象間的關(guān)系。簡(jiǎn)單來(lái)說(shuō),控制指的是當(dāng)前對(duì)象對(duì)內(nèi)部成員的控制權(quán);控制反轉(zhuǎn)指的是,這種控制權(quán)不由當(dāng)前對(duì)象管理了,由其他(類,第三方容器)來(lái)管理。有哪些主要模塊spring core :框架的最基礎(chǔ)部分,提供ioc 和依賴注入特性。spring context :構(gòu)建于 core 封裝包基礎(chǔ)上的 context 封裝包,提供了一種框架式的對(duì)象訪問(wèn)方法。sp

52、ring dao : Data Access Object 提供了 JDBC的抽象層。spring aop :提供了面向切面的編程實(shí)現(xiàn),讓你可以自定義攔截器、切點(diǎn)等。spring Web :提供了針對(duì)Web 開發(fā)的集成特性,例如文件上傳,利用 servlet listeners 進(jìn)行 ioc 容器初始化和針對(duì)Web 的ApplicationContext 。spring Web mvc : spring 中的 mvc 封裝包提供了 Web 應(yīng)用的 Model-View-Controller ( MVC )的實(shí)現(xiàn)。常用的注入方式有哪些setter 屬性注入構(gòu)造方法注入注解方式注入中的 bean

53、是線程安全的嗎spring 中的 bean 默認(rèn)是單例模式, spring 框架并沒(méi)有對(duì)單例 bean 進(jìn)行多線程的封裝處理。實(shí)際上大部分時(shí)候 spring bean 無(wú)狀態(tài)的 (比如 dao 類) , 所有某種程度上來(lái)說(shuō)bean 也是安全的, 但如果 bean 有狀態(tài)的話 (比如view model對(duì)象),那就要開發(fā)者自己去保證線程安全了,最簡(jiǎn)單的就是改變 bean的作用域,把“singleton變更為prototype,”這樣請(qǐng)求bean相當(dāng)于new Bean()了,所以就可以保證線程安全了。有狀態(tài)就是有數(shù)據(jù)存儲(chǔ)功能。無(wú)狀態(tài)就是不會(huì)保存數(shù)據(jù)。支持幾種 bean 的作用域spring 支持

54、5 種作用域,如下:singleton : spring ioc 容器中只存在一個(gè)bean 實(shí)例, bean 以單例模式存在,是系統(tǒng)默認(rèn)值;prototype:每次從容器調(diào)用bean時(shí)都會(huì)創(chuàng)建一個(gè)新的示例,既每次getBean()相當(dāng)于執(zhí)行new Bean()操作;request :每次http 請(qǐng)求都會(huì)創(chuàng)建一個(gè)bean ;session:同一個(gè) http session 共享一個(gè) bean 實(shí)例;global-session:用于 portlet 容器,因?yàn)槊總€(gè) portlet 有單獨(dú)的 session, globalsession 提供一個(gè)全局性的http session。注意:使用 pr

55、ototype 作用域需要慎重的思考,因?yàn)轭l繁創(chuàng)建和銷毀bean 會(huì)帶來(lái)很大的性能開銷。自動(dòng)裝配 bean 有哪些方式no:默認(rèn)值,表示沒(méi)有自動(dòng)裝配,應(yīng)使用顯式bean引用進(jìn)行裝配。byName :它根據(jù) bean 的名稱注入對(duì)象依賴項(xiàng)。byType:它根據(jù)類型注入對(duì)象依賴項(xiàng)。構(gòu)造函數(shù):通過(guò)構(gòu)造函數(shù)來(lái)注入依賴項(xiàng),需要設(shè)置大量的參數(shù)。事務(wù)實(shí)現(xiàn)方式有哪些 聲明式事務(wù):聲明式事務(wù)也有兩種實(shí)現(xiàn)方式,基于 編碼方式:提供編碼的形式管理和維護(hù)事務(wù)。autodetect :容器首先通過(guò)構(gòu)造函數(shù)使用 autowire 裝配,如果不能,則通過(guò)byType 自動(dòng)裝配。xml 配置文件的方式和注解方式(在類上添加T

56、ransaction 注解) 。.說(shuō)一下spring 的事務(wù)隔離spring有五大隔離級(jí)別,默認(rèn)值為ISOLATION_DEFAULT使用數(shù)據(jù)庫(kù)的設(shè)置),其他四個(gè)隔離級(jí)別和數(shù)據(jù)庫(kù)的隔離級(jí)別一致:ISOLATION_DEFAULT用底層數(shù)據(jù)庫(kù)的設(shè)置隔離級(jí)別,數(shù)據(jù)庫(kù)設(shè)置的是什么我就用什么;ISOLATIONREADUNCOMMITTED未提交讀,最低隔離級(jí)別、事務(wù)未提交前,就可被其他事務(wù)讀?。〞?huì)出現(xiàn)幻讀、臟讀、不可重復(fù)讀) ;ISOLATIONREADCOMMITTED提交讀,一個(gè)事務(wù)提交后才能被其他事務(wù)讀取到(會(huì)造成幻讀、不可重復(fù)讀),SQL server的默認(rèn)級(jí)別;ISOLATIONREPEA

57、TABLEREAD重復(fù)讀,保證多次讀取同一個(gè)數(shù)據(jù)時(shí),其值都和事務(wù)開始時(shí)候的內(nèi)容是一致,禁止讀取到別的事務(wù)未提交的數(shù)據(jù)(會(huì)造成幻讀) , MySQL 的默認(rèn)級(jí)別;ISOLATION_SERIALIZABL野列化,代價(jià)最高最可靠的隔離級(jí)另L該隔離級(jí)別能防止臟讀、不可重復(fù)讀、幻讀。臟讀:表示一個(gè)事務(wù)能夠讀取另一個(gè)事務(wù)中還未提交的數(shù)據(jù)。比如,某個(gè)事務(wù)嘗試插入記錄A,此時(shí)該事務(wù)還未提交,然后另一個(gè)事務(wù)嘗試讀取到了記錄A。不可重復(fù)讀 :是指在一個(gè)事務(wù)內(nèi),多次讀同一數(shù)據(jù)。幻讀 :指同一個(gè)事務(wù)內(nèi)多次查詢返回的結(jié)果集不一樣。比如同一個(gè)事務(wù)A 第一次查詢時(shí)候有n 條記錄,但是第二次同等條件下查詢卻有n+1 條記錄

58、, 這就好像產(chǎn)生了幻覺(jué)。發(fā)生幻讀的原因也是另外一個(gè)事務(wù)新增或者刪除或者修改了第一個(gè)事務(wù)結(jié)果集里面的數(shù)據(jù),同一個(gè)記錄的數(shù)據(jù)內(nèi)容被修改了,所有數(shù)據(jù)行的記錄就變多或者變少了。. 說(shuō)一下spring mvc 運(yùn)行流程spring mvc 先將請(qǐng)求發(fā)送給DispatcherServlet 。DispatcherServlet 查詢一個(gè)或多個(gè)HandlerMapping ,找到處理請(qǐng)求的 Controller 。DispatcherServlet 再把請(qǐng)求提交到對(duì)應(yīng)的 Controller 。Controller 進(jìn)行業(yè)務(wù)邏輯處理后,會(huì)返回一個(gè)ModelAndView 。Dispathcher 查詢一個(gè)或

59、多個(gè)ViewResolver 視圖解析器,找到 ModelAndView 對(duì)象指定的視圖對(duì)象。視圖對(duì)象負(fù)責(zé)渲染返回給客戶端。mvc 有哪些組件前置控制器DispatcherServlet 。映射控制器HandlerMapping 。處理器 Controller 。模型和視圖ModelAndView 。視圖解析器ViewResolver 。102.RequestMapping 的作用是什么將 http 請(qǐng)求映射到相應(yīng)的類/ 方法上。.Autowired 的作用是什么Autowired 它可以對(duì)類成員變量、方法及構(gòu)造函數(shù)進(jìn)行標(biāo)注,完成自動(dòng)裝配的工作,通過(guò) Autowired 的使用來(lái)消除set/g

60、et 方法。. 什么是 spring bootspring boot 是為 spring 服務(wù)的,是用來(lái)簡(jiǎn)化新spring 應(yīng)用的初始搭建以及開發(fā)過(guò)程的。.為什么要用 spring boot配置簡(jiǎn)單獨(dú)立運(yùn)行自動(dòng)裝配無(wú)代碼生成和xml 配置提供應(yīng)用監(jiān)控易上手提升開發(fā)效率boot 核心配置文件是什么spring boot 核心的兩個(gè)配置文件:bootstrap (. yml 或者 . properties) : boostrap 由父 ApplicationContext 加載的,比applicaton 優(yōu)先加載,且 boostrap 里面的屬性不能被覆蓋;application (. yml 或

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論