JAVA基礎(chǔ)面試題整理
1.Java中final、finally、finalize的區(qū)別
簡(jiǎn)單區(qū)別:
final用于聲明屬性,方法和類,分別表示屬性不可交變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行。
finalize是Object類的一個(gè)方法,在垃圾收集器執(zhí)行的時(shí)候會(huì)調(diào)用被回收對(duì)象的此方法,供垃圾收集時(shí)的其他資源回收,例如關(guān)閉文件等。
2.error和exception有什么區(qū)別?
Error(錯(cuò)誤)表示系統(tǒng)級(jí)的錯(cuò)誤和程序不必處理的異常,是java運(yùn)行環(huán)境中的內(nèi)部錯(cuò)誤或者硬件問題。比如:內(nèi)存資源不足等。對(duì)于這種錯(cuò)誤,程序基本無能為力,除了退出運(yùn)行外別無選擇,它是由Java虛擬機(jī)拋出的。
Exception(違例)表示需要捕捉或者需要程序進(jìn)行處理的異常,它處理的是因?yàn)槌绦蛟O(shè)計(jì)的瑕疵而引起的問題或者在外的輸入等引起的一般性問題,是程序必須處理的。
Exception又分為運(yùn)行時(shí)異常,受檢查異常。
運(yùn)行時(shí)異常,表示無法讓程序恢復(fù)的異常,導(dǎo)致的原因通常是因?yàn)閳?zhí)行了錯(cuò)誤的操作,建議終止程序,因此,編譯器不檢查這些異常。
受檢查異常,是表示程序可以處理的異常,也即表示程序可以修復(fù)(由程序自己接受異常并且做出處理), 所以稱之為受檢查異常。
3.Set里的元素是不能重復(fù)的,那么用什么方法來區(qū)分重復(fù)與否呢? 是用==還是equals()? 它們有何區(qū)別?
1、什么是Set?(what)
Set是Collection容器的一個(gè)子接口,它不允許出現(xiàn)重復(fù)元素,當(dāng)然也只允許有一個(gè)null對(duì)象。
2、如何來區(qū)分重復(fù)與否呢?(how)
“ 用 iterator() 方法來區(qū)分重復(fù)與否 ”,這是在網(wǎng)上流傳的答案,個(gè)人認(rèn)為這是個(gè)錯(cuò)誤的答案。JPI中寫的很明白:“set 不包含滿足
e1.equals(e2) 的元素對(duì) e1 和 e2 ”,由此可見回答使用equals()區(qū)分更合適。
3、為什么用equals()而不用==來區(qū)分?(why)
應(yīng)該從它倆的區(qū)別談起,==是用來判斷兩者是否是同一對(duì)象(同一事物),而equals是用來判斷是否引用同一個(gè)對(duì)象。再看一下Set里面存的是對(duì)象,還是對(duì)象的引用。根據(jù)Java的存儲(chǔ)機(jī)制可知,set里面存放的是對(duì)象的引用,所以當(dāng)兩個(gè)元素只要滿足了equals()時(shí)就已經(jīng)指向同一個(gè)對(duì)象,也就出現(xiàn)了重復(fù)元素。所以應(yīng)該用equals()來判斷。
Static Nested Class (靜態(tài)嵌套類)是Inner Class(內(nèi)部類)的一種,
Static Nested Class是被聲明為靜態(tài)(static)的內(nèi)部類,它可以不依賴于外部類實(shí)例被實(shí)例化。而通常的內(nèi)部類需要在外部類實(shí)例化后才能實(shí)例化。
Overload和Override的區(qū)別?
Override是重寫:方法名稱、參數(shù)個(gè)數(shù),類型,順序,返回值類型都是必須和父類方法一致的。它的關(guān)系是父子關(guān)系
Overload是重載:方法名稱不變,其余的都是可以變更的。它的關(guān)系是同一個(gè)類,同一個(gè)方法名,不同的方法參數(shù)或返回值。
備注:它們都是是Java多態(tài)性的不同表現(xiàn)
構(gòu)造器constructor是否可被override
1.Constructor不能被繼承,所以Constructor也就不能被override,但是可以overload,所以你可以看到有多個(gè)構(gòu)造函數(shù)這種情況。
2.不可以 ,每一個(gè)類必須有自己的構(gòu)造函數(shù),負(fù)責(zé)構(gòu)造自己這部分的構(gòu)造
子類不會(huì)覆蓋父類的構(gòu)造函數(shù),相反必須負(fù)責(zé)在一開始調(diào)用父類的構(gòu)造函數(shù)
List、Map、Set三個(gè)接口,存取元素時(shí),各有什么特點(diǎn)?
List 以特定次序來持有元素,可有重復(fù)元素。即,有序可重復(fù)。
Set 無法擁有重復(fù)元素,內(nèi)部排序。即,無序不可重復(fù)。
Map 保存 key-value 值,value可多值。一一映射。
Hashtable和HashMap的區(qū)別:
都屬于Map接口的類,實(shí)現(xiàn)了將惟一鍵映射到特定的值上。
HashMap類沒有分類或者排序。它允許一個(gè)null鍵和多個(gè)null值。
Hashtable類似于HashMap,但是不允許null鍵和null值。它也比HashMap慢,因?yàn)樗峭降摹?/p>
jsp中動(dòng)態(tài)include與靜態(tài)include
動(dòng)態(tài)INCLUDE在使用的時(shí)候,會(huì)先解析所要包含的頁面(你例子中的included.jsp),解析后在和主頁面放到一起顯示;
靜態(tài)INCLUDE在使用的時(shí)候,不會(huì)解析所要包含的頁面(你例子中的included.htm),也就是說,不管你的included.htm中有什么,我的任務(wù)就是把你包含并顯示,其他的一概不管
jsp:include是先編譯一下included.jsp文件,然后再包含 先編譯,后包含@ include是先把文件包含就來,然后統(tǒng)一編譯 先包含,后編譯
Java中 forward 和redirect的區(qū)別
使用forward的時(shí)候?yàn)g覽器不知道它所請(qǐng)求的具體資源來源,所以地址欄不會(huì)變;
使用redirect,服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請(qǐng)求那個(gè)地址.所以地址欄顯示的是新的URL。
forward,轉(zhuǎn)發(fā)頁面和轉(zhuǎn)發(fā)到的頁面可以共享request里面的數(shù)據(jù).
redirect,不能共享數(shù)據(jù).
jsp有哪幾個(gè)內(nèi)置對(duì)象?
1.request -->觸發(fā)服務(wù)調(diào)用的請(qǐng)求 -->范圍是:request
2.response -->對(duì)請(qǐng)求的應(yīng)答 -->范圍是:page
3.session -->為請(qǐng)求的客戶創(chuàng)建的session對(duì)象 -->范圍是:session
4.application -->從 servlet 配置對(duì)象獲得的 servlet 上下文(如在getServletConfig() getContext()的調(diào)用中) -->范圍是:application
5.out -->向輸出流寫入內(nèi)容的對(duì)象 -->范圍是:page
6.pageContext -->本 JSP 的頁面上下文 -->范圍是:page
7.page -->實(shí)現(xiàn)處理本頁當(dāng)前請(qǐng)求的類的實(shí)例 -->page
8.config -->本 JSP 的 ServletConfig -->page
9.exception -->表示JSP頁面運(yùn)行時(shí)產(chǎn)生的異常 -->Page
Servlet 生命周期:
Servlet 加載--->實(shí)例化--->服務(wù)--->銷毀。
1,初始化階段 調(diào)用init()方法
2,響應(yīng)客戶請(qǐng)求階段 調(diào)用service()方法
3,終止階段 調(diào)用destroy()方法
left join inner join right join 區(qū)別
left\right join是外部連接,inner join是內(nèi)連接
外部連接有主表與從表,主表在left中是左側(cè)表,right中是右側(cè)表,主表數(shù)據(jù)會(huì)全部顯示,從表數(shù)據(jù)則只顯示關(guān)聯(lián)部分匹配的數(shù)據(jù),無匹配的數(shù)據(jù)用null補(bǔ)全
內(nèi)連接則只顯示兩表關(guān)聯(lián)條件匹配的數(shù)據(jù)
注:所謂關(guān)聯(lián)條件即是指on的條件
oracle常用函數(shù)
Oracle SQL 提供了用于執(zhí)行特定操作的專用函數(shù)。這些函數(shù)大大增強(qiáng)了 SQL 語言的功能。函數(shù)可以接受零個(gè)或者多個(gè)輸入?yún)?shù),并返回一個(gè)輸出結(jié)果。 Oracle 數(shù)據(jù)庫中主要使用兩種類型的函數(shù):
1. 單行函數(shù):對(duì)每一個(gè)函數(shù)應(yīng)用在表的記錄中時(shí),只能輸入一行結(jié)果,返回一個(gè)結(jié)果,
比如:MOD(x,y)返回 x 除以 y 的余數(shù)(x 和 y 可以是兩個(gè)整數(shù),也可以是表中的整
數(shù)列)。常用的單行函數(shù)有:
- 字符函數(shù):對(duì)字符串操作。
- 數(shù)字函數(shù):對(duì)數(shù)字進(jìn)行計(jì)算,返回一個(gè)數(shù)字。
- 轉(zhuǎn)換函數(shù):可以將一種數(shù)據(jù)類型轉(zhuǎn)換為另外一種數(shù)據(jù)類型。
- 日期函數(shù):對(duì)日期和時(shí)間進(jìn)行處理。
2. 聚合函數(shù):聚合函數(shù)同時(shí)可以對(duì)多行數(shù)據(jù)進(jìn)行操作,并返回一個(gè)結(jié)果。比如 SUM(x)
返回結(jié)果集中 x 列的總合。
索引是為了加速對(duì)表中數(shù)據(jù)行的檢索而創(chuàng)建的一種分散的存儲(chǔ)結(jié)構(gòu)。索引是針對(duì)表而建立的,它是由數(shù)據(jù)頁面以外的索引頁面組成的,每個(gè)索引頁面中的行都會(huì)含有邏輯指針,以便加速檢索物理數(shù)據(jù)。
在數(shù)據(jù)庫關(guān)系圖中,可以在選定表的“索引/鍵”屬性頁中創(chuàng)建、編輯或刪除每個(gè)索引類型。當(dāng)保存索引所附加到的表,或保存該表所在的關(guān)系圖時(shí),索引將保存在數(shù)據(jù)庫中。
數(shù)據(jù)庫索引是為了增加查詢速度而對(duì)表字段附加的一種標(biāo)識(shí)。
索引的作用:
1.通過創(chuàng)建唯一索引,可以保證數(shù)據(jù)記錄的唯一性。
2.可以大大加快數(shù)據(jù)檢索速度。
3.可以加速表與表之間的連接,這一點(diǎn)在實(shí)現(xiàn)數(shù)據(jù)的參照完整性方面有特別的意義。
4.在使用ORDER BY和GROUP BY子句中進(jìn)行檢索數(shù)據(jù)時(shí),可以顯著減少查詢中分組和排序的時(shí)間。
以上就是本次介紹全部知識(shí)點(diǎn)內(nèi)容,感謝大家的學(xué)習(xí)和對(duì)腳本之家的支持。
相關(guān)文章
springBoot 創(chuàng)建定時(shí)任務(wù)過程詳解
這篇文章主要介紹了springBoot 創(chuàng)建定時(shí)任務(wù)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10JAVA實(shí)現(xiàn)社會(huì)統(tǒng)一信用代碼校驗(yàn)的方法
這篇文章主要介紹了JAVA實(shí)現(xiàn)社會(huì)統(tǒng)一信用代碼校驗(yàn)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Java分析Lambda表達(dá)式Stream流合并分組內(nèi)對(duì)象數(shù)據(jù)合并
Lambda表達(dá)式,基于Lambda所帶來的函數(shù)式編程,又引入了一個(gè)全新的Stream概念,用于解決集合類庫既有的弊端,Lambda 允許把函數(shù)作為一個(gè)方法的參數(shù)(函數(shù)作為參數(shù)傳遞進(jìn)方法中)。使用 Lambda 表達(dá)式可以使代碼變的更加簡(jiǎn)潔緊湊2022-12-12Java內(nèi)存各部分OOM出現(xiàn)原因及解決方法(必看)
下面小編就為大家?guī)硪黄狫ava內(nèi)存各部分OOM出現(xiàn)原因及解決方法(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04Java實(shí)戰(zhàn)之校園外賣點(diǎn)餐系統(tǒng)的實(shí)現(xiàn)
這篇文章主要介紹了如何利用Java實(shí)現(xiàn)簡(jiǎn)易的校園外賣點(diǎn)餐系統(tǒng),文中采用的技術(shù)有:JSP、Spring、SpringMVC、MyBatis 等,感興趣的可以了解一下2022-03-03用java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09java 中使用maven shade plugin 打可執(zhí)行Jar包
這篇文章主要介紹了java 中使用maven shade plugin 打可執(zhí)行Jar包的相關(guān)資料,需要的朋友可以參考下2017-05-05