更新時間:2020-07-10 14:36:28 來源:動力節(jié)點 瀏覽4059次
1.throw和throws的區(qū)別?
throw:是真實拋出一個異常。
throws:是聲明可能會拋出一個異常。
2.final、finally、finalize有什么區(qū)別?
final:是修飾符,如果修飾類,此類不能被繼承;如果修飾方法和變量,則表示此方法和此變量不能在被改變,只能使用。
finally:是try{}catch{}finally{}最后一部分,表示不論發(fā)生任何情況都會執(zhí)行,finally部分可以省略,但如果finally部分存在,則一定會執(zhí)行finally里面的代碼。
finalize:是Object類的一個方法,在垃圾收集器執(zhí)行的時候會調(diào)用被回收對象的此方法。
3.try-catch-finally中哪個部分可以省略?
try-catch-finally其中catch和finally都可以被省略,但是不能同時省略,也就是說有try的時候,必須后面跟一個catch或者finally。
4.try-catch-finally中,如果catch中return了,finally還會執(zhí)行嗎?
finally一定會執(zhí)行,即使是catch中return了,catch中的return會等finally中的代碼執(zhí)行完之后,才會執(zhí)行。
5.常見的異常類有哪些?
NullPointerException空指針異常
ClassNotFoundException指定類不存在
NumberFormatException字符串轉(zhuǎn)換為數(shù)字異常
IndexOutOfBoundsException數(shù)組下標越界異常
ClassCastException數(shù)據(jù)類型轉(zhuǎn)換異常
FileNotFoundException文件未找到異常
NoSuchMethodException方法不存在異常
IOException IO異常
SocketException Socket異常
二、網(wǎng)絡(luò)
1.http響應(yīng)碼301和302代表的是什么?有什么區(qū)別?
301:永久重定向。
302:暫時重定向。
它們的區(qū)別是,301對搜索引擎優(yōu)化(SEO)更加有利;302有被提示為網(wǎng)絡(luò)攔截的風(fēng)險。
2.forward和redirect的區(qū)別?
forward是轉(zhuǎn)發(fā)和redirect是重定向:
地址欄url顯示:foward url不會發(fā)生改變,redirect url會發(fā)生改變;
數(shù)據(jù)共享:forward可以共享request里的數(shù)據(jù),redirect不能共享;
效率:forward比redirect效率高。
3.簡述tcp和udp的區(qū)別?
tcp和udp是OSI模型中的運輸層中的協(xié)議。tcp提供可靠的通信傳輸,而udp則常被用于讓廣播和細節(jié)控制交給應(yīng)用的通信傳輸。
兩者的區(qū)別大致如下:
tcp面向連接,udp面向非連接即發(fā)送數(shù)據(jù)前不需要建立鏈接;
tcp提供可靠的服務(wù)(數(shù)據(jù)傳輸),udp無法保證;
tcp面向字節(jié)流,udp面向報文;
tcp數(shù)據(jù)傳輸慢,udp數(shù)據(jù)傳輸快;
4.tcp為什么要三次握手,兩次不行嗎?為什么?
如果采用兩次握手,那么只要服務(wù)器發(fā)出確認數(shù)據(jù)包就會建立連接,但由于客戶端此時并未響應(yīng)服務(wù)器端的請求,那此時服務(wù)器端就會一直在等待客戶端,這樣服務(wù)器端就白白浪費了一定的資源。若采用三次握手,服務(wù)器端沒有收到來自客戶端的再此確認,則就會知道客戶端并沒有要求建立請求,就不會浪費服務(wù)器的資源。
5.說一下tcp粘包是怎么產(chǎn)生的?
tcp粘包可能發(fā)生在發(fā)送端或者接收端,分別來看兩端各種產(chǎn)生粘包的原因:
發(fā)送端粘包:發(fā)送端需要等緩沖區(qū)滿才發(fā)送出去,造成粘包;
接收方粘包:接收方不及時接收緩沖區(qū)的包,造成多個包接收。
6.OSI的七層模型都有哪些?
物理層:利用傳輸介質(zhì)為數(shù)據(jù)鏈路層提供物理連接,實現(xiàn)比特流的透明傳輸。
數(shù)據(jù)鏈路層:負責(zé)建立和管理節(jié)點間的鏈路。
網(wǎng)絡(luò)層:通過路由選擇算法,為報文或分組通過通信子網(wǎng)選擇最適當?shù)穆窂健?/p>
傳輸層:向用戶提供可靠的端到端的差錯和流量控制,保證報文的正確傳輸。
會話層:向兩個實體的表示層提供建立和使用連接的方法。
表示層:處理用戶信息的表示問題,如編碼、數(shù)據(jù)格式轉(zhuǎn)換和加密解密等。
應(yīng)用層:直接向用戶提供服務(wù),完成用戶希望在網(wǎng)絡(luò)上完成的各種工作。
7.get和post請求有哪些區(qū)別?
get請求會被瀏覽器主動緩存,而post不會。
get傳遞參數(shù)有大小限制,而post沒有。
post參數(shù)傳輸更安全,get的參數(shù)會明文限制在url上,post不會。
8.如何實現(xiàn)跨域?
實現(xiàn)跨域有以下幾種方案:
服務(wù)器端運行跨域設(shè)置CORS等于*;
在單個接口使用注解 CrossOrigin運行跨域;
使用jsonp跨域;
9.說一下JSONP實現(xiàn)原理?
jsonp:JSON with Padding,它是利用script標簽的src連接可以訪問不同源的特性,加載遠程返回的“JS函數(shù)”來執(zhí)行的。
三、設(shè)計模式
1.說一下你熟悉的設(shè)計模式?
單例模式:保證被創(chuàng)建一次,節(jié)省系統(tǒng)開銷。
工廠模式(簡單工廠、抽象工廠):解耦代碼。
觀察者模式:定義了對象之間的一對多的依賴,這樣一來,當一個對象改變時,它的所有的依賴者都會收到通知并自動更新。
外觀模式:提供一個統(tǒng)一的接口,用來訪問子系統(tǒng)中的一群接口,外觀定義了一個高層的接口,讓子系統(tǒng)更容易使用。
模版方法模式:定義了一個算法的骨架,而將一些步驟延遲到子類中,模版方法使得子類可以在不改變算法結(jié)構(gòu)的情況下,重新定義算法的步驟。
狀態(tài)模式:允許對象在內(nèi)部狀態(tài)改變時改變它的行為,對象看起來好像修改了它的類。
2.簡單工廠和抽象工廠有什么區(qū)別?
簡單工廠:用來生產(chǎn)同一等級結(jié)構(gòu)中的任意產(chǎn)品,對于增加新的產(chǎn)品,無能為力。
工廠方法:用來生產(chǎn)同一等級結(jié)構(gòu)中的固定產(chǎn)品,支持增加任意產(chǎn)品。
抽象工廠:用來生產(chǎn)不同產(chǎn)品族的全部產(chǎn)品,對于增加新的產(chǎn)品,無能為力;支持增加產(chǎn)品族。
以上就是動力節(jié)點java培訓(xùn)機構(gòu)的小編針對“常見的Java設(shè)計模式面試題全解析”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743