亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁(yè) Java Java面試題 java常見面試題整理

java常見面試題整理

Nov 29, 2019 pm 01:55 PM
java

java常見面試題整理

物件導(dǎo)向的特徵有哪些面向??

所謂封裝,也就是把客觀事物封裝成抽象的類,並且類別可以把自己的資料和方法只讓可信的類別或物件操作,對(duì)不可信的進(jìn)行資訊隱藏。封裝是物件導(dǎo)向的特徵之一,是物件和類別概念的主要特性。? (推薦學(xué)習(xí):java常見面試題

繼承是指子類別獲得父類別的屬性和方法。如狗是動(dòng)物的一種,也可以說夠繼承了動(dòng)物的特性,或說狗是動(dòng)物的子類。

多態(tài)是指一個(gè)方法只能有一個(gè)名稱,但可以有許多形態(tài),也就是程式中可以定義多個(gè)同名的方法,用"一個(gè)介面,多個(gè)方法"來描述.可以透過方法的參數(shù)與型別引用

五大原則:?jiǎn)我宦氊?zé)原則SRP? 開放式封閉原則OCP? 取代原則LSP? 依賴原則DIP? 介面分離原則ISP

#成員變數(shù)與局部變數(shù)的差異

* A:在類別中的位置不同

?* 成員變數(shù):在類別中方法外

?* 局部變量:在方法定義中或方法宣告上

* B:在記憶體中的位置不同

?* 成員變數(shù):在堆記憶體(成員變數(shù)屬於物件,對(duì)象進(jìn)堆記憶體)

?* 局部變數(shù):在堆疊記憶體(局部變數(shù)屬於方法,方法進(jìn)端記憶體)

* C:生命週期不同

?* 成員變數(shù):隨著物件的創(chuàng)建而存在,隨著物件的消失而消失

?* 局部變數(shù):隨著方法的呼叫而存在,隨著方法的調(diào)用完而消失

* D:初始化值不同

?* 成員變數(shù):有預(yù)設(shè)初始化值

?* 局部變數(shù):沒有預(yù)設(shè)初始化值,必須定義,賦值,然後才能使用。

靜態(tài)變數(shù)和成員變數(shù)的差異

* 靜態(tài)變數(shù)也叫類別變數(shù)? 成員變數(shù)也叫物件變數(shù)

* A:所屬不同

?* 靜態(tài)變數(shù)屬於類,所以也稱為為類別變數(shù)

?* 成員變數(shù)屬於對(duì)象,所以也稱為實(shí)例變數(shù)(對(duì)象變數(shù))

* B:記憶體中位置不同

?* 靜態(tài)變數(shù)儲(chǔ)存於方法區(qū)的靜態(tài)區(qū)

?* 成員變數(shù)儲(chǔ)存於堆疊記憶體

#* C:記憶體出現(xiàn)時(shí)間不同

?* 靜態(tài)變數(shù)隨著類別的載入而載入,隨著類別的消失而消失

?* 成員變數(shù)隨著物件的創(chuàng)建而存在,隨著物件的消失而消失

* D:調(diào)用不同

#?* 靜態(tài)變數(shù)可以透過類別名稱調(diào)用,也可以透過物件呼叫

?* 成員變數(shù)只能透過物件名稱呼叫

this和super的差異和應(yīng)用

##* A:this和super都代表什麼

?* this:代表目前物件的引用,誰來呼叫我,我就代表誰

?* super:代表目前物件父類別的引用

#* B:this和super的使用差異

?* a:呼叫成員變數(shù)

? * this.成員變數(shù)呼叫本類別的成員變數(shù),也可以呼叫父類別的成員變數(shù)

? * super.成員變數(shù)呼叫父類別的成員變數(shù)

?* b:呼叫建構(gòu)方法

? * this(...) 呼叫本類別的建構(gòu)方法

? * super(...) 呼叫父類別的建構(gòu)方法

?* c:呼叫成員方法

? * this.成員方法呼叫本類別的成員方法,也可以呼叫父類別的方法

? * super.成員方法呼叫父類別的成員方法

排序都有哪幾種方法?請(qǐng)列舉

排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸併排序,分配排序(箱排序、基數(shù)排序)

快速排序的偽代碼。

String, StringBuffer StringBuilder的區(qū)別。

String的長(zhǎng)度是不可變的;


StringBuffer的長(zhǎng)度是可變的,如果你對(duì)字串中的內(nèi)容經(jīng)常進(jìn)行操作,特別是內(nèi)容要修改時(shí),那麼使用StringBuffer, 如果最後需要String,那麼使用StringBuffer的toString()方法;線程安全;

StringBuilder是從JDK 5 開始,為StringBuffer該類別補(bǔ)充了一個(gè)單一執(zhí)行緒使用的等價(jià)類別;通常應(yīng)該優(yōu)先使用StringBuilder 類別,因?yàn)樗г邢嗤牟僮?,但由於它不?zhí)行同步,所以速度更快。

Overload 和 Override 的差別。 Overloaded 的方法是否可以改變傳回值的型別?

答案:方法的重寫 Overriding 和重載 Overloading 是 Java 多態(tài)性的不同表現(xiàn)。

重寫 Overriding 是父類別與子類別之間多態(tài)性的表現(xiàn),而重載 Overloading 是一個(gè)類別中多態(tài)性的一種表現(xiàn)。如果在子類別中定義某方法與其父類別有相同的名稱和參數(shù),我們說該方法被重寫 (Overriding)。

子類別的物件使用這個(gè)方法時(shí),將呼叫子類別中的定義,對(duì)它而言,父類別中的定義如同被「屏蔽」了。如果在一個(gè)類別中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。 Overloaded 的方法是可以改變傳回值的型別。

final, finally的差異?

答案:final:修飾符(關(guān)鍵字);如果一個(gè)類別被宣告為final,表示它不能再派生出新的子類,不能作為父類被繼承,因此一個(gè)類別不能既被宣告為abstract的,又被宣告為final 的;將變數(shù)或方法宣告為final,可以保證它們?cè)谑褂弥胁槐桓淖?;被宣告為final 的變數(shù)必須在宣告時(shí)給定初值,而在以後的引用中只能讀取,不可修改;被宣告為final 的方法也同樣只能使用,不能重載。

finally:再異常處理時(shí)提供finally 區(qū)塊來執(zhí)行任何清除操作;如果拋出一個(gè)異常,那麼相匹配的catch 子句就會(huì)執(zhí)行,然後控制就會(huì)進(jìn)入finally 區(qū)塊(如果有的話)。

常見的幾個(gè)運(yùn)行異常。

java.lang.nullpointerexception(空指標(biāo)異常)

java.lang.classnotfoundexception(指定的類別不存在)

java.lang.arithmeticexception(數(shù)學(xué)運(yùn)算異常)

java.lang.arrayindexoutofboundsexception(數(shù)組下標(biāo)越界異常)

IOException(輸入輸出異常)

數(shù)組操作的兩個(gè)常見小問題越界和空指標(biāo)

* A:案例示範(fàn)

* a:ArrayIndexOutOfBoundsException:陣列索引越界異常

* 原因:你存取了不存在的索引。

* b:NullPointerException:空指標(biāo)例外

* 原因:陣列已經(jīng)不在指向堆記憶體了。而你還用陣列名去存取元素。

  * int[] arr = {1,2,3};
  * arr = null;
  * System.out.println(arr[0]);

JAVA語言如何進(jìn)行例外處理,關(guān)鍵字:throws,throw,try,catch,finally分別代表什麼意義?在try區(qū)塊中可以拋出異常嗎?

答案:Java透過物件導(dǎo)向的方法進(jìn)行例外處理,把各種不同的例外分類,並提供了良好的介面。

在Java中,每個(gè)異常都是一個(gè)對(duì)象,它是Throwable類別或其它子類別的實(shí)例。當(dāng)一個(gè)方法出現(xiàn)異常後便拋出一個(gè)異常對(duì)象,該對(duì)像中包含有異常訊息,調(diào)用這個(gè)對(duì)象的方法可以捕獲到這個(gè)異常並進(jìn)行處理。

Java的例外處理是透過5個(gè)關(guān)鍵字來實(shí)現(xiàn)的:try、catch、throw、throws和finally。一般情況下是用try來執(zhí)行一段程序,如果出現(xiàn)異常,系統(tǒng)會(huì)拋出(throws)一個(gè)異常,這時(shí)候你可以通過它的類型來捕捉(catch)它,或最後(finally)由缺省處理器來處理。

用try來指定一塊預(yù)防所有"異常"的程式。緊跟在try程式後面,應(yīng)包含一個(gè)catch子句來指定你想要捕捉的"異常"的類型。

throw語句用來明確地拋出一個(gè)"例外"。

throws用來標(biāo)示一個(gè)成員函數(shù)可能拋出的各種"例外"。

Finally為確保一段程式碼不管發(fā)生什麼事"異常"都被執(zhí)行一段程式碼。

可以在一個(gè)成員函數(shù)呼叫的外面寫一個(gè)try語句,在這個(gè)成員函數(shù)內(nèi)部寫另一個(gè)try語句保護(hù)其他程式碼。每當(dāng)遇到一個(gè)try語句,"異常"的框架就會(huì)放到堆疊上面,直到所有的try語句都完成。

如果下一級(jí)的try語句沒有對(duì)某種"異常"進(jìn)行處理,堆疊就會(huì)展開,直到遇到有處理這種"異常"的try語句。

伺服器收到用戶提交的表單數(shù)據(jù),到底是呼叫Servlet的doGet()還是doPost()方法?

答案:HTML的

元素有一個(gè)method屬性,用來指定提交表單的方式,其值可以是get或post。

我們自訂的Servlet一般情況下會(huì)重寫doGet()或doPost()兩個(gè)方法之一或全部,如果是GET請(qǐng)求就呼叫doGet()方法,如果是POST請(qǐng)求就呼叫doPost ()方法,那為什麼為什麼會(huì)這樣呢?

我們自訂的Servlet通常繼承自HttpServlet,HttpServlet繼承自GenericServlet並重寫了其中的service()方法,這個(gè)方法是Servlet介面中定義的。

HttpServlet重寫的service()方法會(huì)先取得使用者請(qǐng)求的方法,然後根據(jù)請(qǐng)求方法呼叫doGet()、doPost()、doPut()、doDelete()等方法,如果在自訂Servlet中重寫了這些方法,那麼顯然會(huì)呼叫重寫的(自訂的)方法,這顯然是對(duì)模板方法模式的應(yīng)用(如果不理解,請(qǐng)參考《Java與模式》一書的第37章) 。

當(dāng)然,自訂Servlet中也可以直接重寫service()方法,那麼不管是哪一種方式的請(qǐng)求,都可以透過自己的程式碼進(jìn)行處理,這對(duì)於不區(qū)分請(qǐng)求方法的場(chǎng)景比較合適。

抽象類別和介面的差別?

介面是抽象類別的變體,介面中所有的方法都是抽象的。而抽象類別是聲明方法的存在而不去實(shí)作它的類別。

介面可以多繼承,抽象類別不行

介面定義方法,不能實(shí)現(xiàn),而抽象類別可以實(shí)作部分方法。

介面中基本資料型態(tài)為static 而抽類像不是的。

記憶體洩漏和記憶體溢出?

記憶體外洩:是指應(yīng)用程式在申請(qǐng)記憶體後,無法釋放已經(jīng)申請(qǐng)的記憶體空間,一次記憶體外洩危害可以忽略,但如果任其發(fā)展會(huì)導(dǎo)致記憶體溢位。

如:讀取檔案後,流要進(jìn)行及時(shí)關(guān)閉以及資料庫(kù)連線的釋放。

記憶體溢出:是指應(yīng)用程式在申請(qǐng)記憶體時(shí),沒有最後的記憶體空間,供其使用。

如:我們?cè)趯0钢袑?duì)於大批量資料導(dǎo)入,採(cǎi)用分段批次提交的方式。

什麼是執(zhí)行緒同步?

1、執(zhí)行緒同步的目的是為了保護(hù)多個(gè)執(zhí)行緒反問一個(gè)資源時(shí)對(duì)資源的破壞。

2、線程同步方法是透過鎖來實(shí)現(xiàn),每個(gè)物件都有切僅有一個(gè)鎖,這個(gè)鎖與一個(gè)特定的物件關(guān)聯(lián),線程一旦獲取了物件鎖,其他訪問該物件的線程就無法再存取該物件的其他非同步方法。

3、對(duì)於靜態(tài)同步方法,鎖定是針對(duì)這個(gè)類別的,鎖定物件是該類別的Class物件。靜態(tài)和非靜態(tài)方法的鎖互不干預(yù)。一個(gè)執(zhí)行緒獲得鎖,當(dāng)在一個(gè)同步方法中存取另外物件上的同步方法時(shí),會(huì)取得這兩個(gè)物件鎖。

4、對(duì)於同步,要時(shí)時(shí)清醒在哪個(gè)物件上同步,這是關(guān)鍵。

5、編寫線程安全的類,需要時(shí)刻注意對(duì)多個(gè)線程競(jìng)爭(zhēng)訪問資源的邏輯和安全做出正確的判斷,對(duì)“原子”操作做出分析,並保證原子操作期間別的執(zhí)行緒無法存取競(jìng)爭(zhēng)資源。

6、當(dāng)多個(gè)執(zhí)行緒等待一個(gè)物件鎖定時(shí),沒有取得到鎖的執(zhí)行緒將會(huì)發(fā)生阻塞。

7、死鎖是線程間互相等待鎖鎖造成的,在實(shí)際中發(fā)生的機(jī)率非常的小。真讓你寫死鎖程序,不一定好使,呵呵。但是,一旦程式發(fā)生死鎖,程式就會(huì)死掉。

對(duì)多執(zhí)行緒的理解?

同一件事,不同的人在做就是多執(zhí)行緒。

食堂吃飯,一個(gè)人一個(gè)人打就是單線程,開N個(gè)窗口N個(gè)人同時(shí)打就是多線程

線程的基本概念、線程的基本狀態(tài)以及狀態(tài)之間的關(guān)係:

線程指在程式執(zhí)行過程中,能夠執(zhí)行程式碼的一個(gè)執(zhí)行單位,每個(gè)程式至少都有一個(gè)線程,也就是程式本身。 Java中的執(zhí)行緒有四種狀態(tài)分別是:運(yùn)行、就緒、掛起、結(jié)束。

有那些集合?

List特點(diǎn):元素有放入順序,元素可重複

Map特點(diǎn):元素按鍵值對(duì)存儲(chǔ),不放入順序

Set特點(diǎn):元素?zé)o放入順序,元素不可重複(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實(shí)是固定的)

List接口有三個(gè)實(shí)作類別:LinkedList,ArrayList,Vector

LinkedList:底層基於鍊錶實(shí)現(xiàn),鍊錶記憶體是散亂的,每一個(gè)元素儲(chǔ)存本身記憶體位址的同時(shí)也儲(chǔ)存下一個(gè)元素的位址。鍊錶增刪快,查找慢

ArrayList和Vector的區(qū)別:ArrayList是非線程安全的,效率高;Vector是基於線程安全的,效率低

Set介面有兩個(gè)實(shí)作類別: HashSet(底層由HashMap實(shí)作),LinkedHashSet

SortedSet介面有實(shí)作類別:TreeSet(底層由平衡二元樹實(shí)作)

Query介面有實(shí)作類別:LinkList

# Map介面有三個(gè)實(shí)作類別:HashMap,HashTable,LinkeHashMap

HashMap非執(zhí)行緒安全,高效,支援null;HashTable執(zhí)行緒安全,低效,不支援null

#SortedMap有實(shí)作類別: TreeMap

其實(shí)最主要的是,list是用來處理序列的,而set是用來處理集合的。 Map是儲(chǔ)存的是鍵值對(duì)

檔案讀寫的基本類別:

File Reader 類別和FileWriter類別分別繼承自Reader類別和Writer類別。 FileReader類別用於讀取文件,F(xiàn)ile Writer類別用於將資料寫入文件,這兩各類別在使用前,都必須呼叫其建構(gòu)方法建立對(duì)應(yīng)的對(duì)象,然後呼叫對(duì)應(yīng)的read()或write()方法。

以上是java常見面試題整理的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
VSCODE設(shè)置。 JSON位置 VSCODE設(shè)置。 JSON位置 Aug 01, 2025 am 06:12 AM

settings.json文件位於用戶級(jí)或工作區(qū)級(jí)路徑,用於自定義VSCode設(shè)置。 1.用戶級(jí)路徑:Windows為C:\Users\\AppData\Roaming\Code\User\settings.json,macOS為/Users//Library/ApplicationSupport/Code/User/settings.json,Linux為/home//.config/Code/User/settings.json;2.工作區(qū)級(jí)路徑:項(xiàng)目根目錄下的.vscode/settings

如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務(wù),必須先關(guān)閉自動(dòng)提交模式,再執(zhí)行多個(gè)操作,最後根據(jù)結(jié)果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開始事務(wù);2.執(zhí)行多個(gè)SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時(shí)應(yīng)使用try-with-resources管理資源,妥善處理異常並關(guān)閉連接,避免連接洩漏;此外建議使用連接池、設(shè)置保存點(diǎn)實(shí)現(xiàn)部分回滾,並保持事務(wù)盡可能短以提升性能。

在Java的掌握依賴注入春季和Guice 在Java的掌握依賴注入春季和Guice Aug 01, 2025 am 05:53 AM

依賴性(di)IsadesignpatternwhereObjectsReceivedenciesenciesExtern上,推廣looseSecouplingAndEaseerTestingThroughConstructor,setter,orfieldInjection.2.springfraMefringframeWorkSannotationsLikeLikeLike@component@component,@component,@service,@autowiredwithjava-service和@autowiredwithjava-ligatiredwithjava-lase-lightike

Python Itertools組合示例 Python Itertools組合示例 Jul 31, 2025 am 09:53 AM

itertools.combinations用於生成從可迭代對(duì)像中選取指定數(shù)量元素的所有不重複組合(順序無關(guān)),其用法包括:1.從列表中選2個(gè)元素組合,如('A','B')、('A','C')等,避免重複順序;2.對(duì)字符串取3個(gè)字符組合,如"abc"、"abd",適用於子序列生成;3.求兩數(shù)之和等於目標(biāo)值的組合,如1 5=6,簡(jiǎn)化雙重循環(huán)邏輯;組合與排列的區(qū)別在於順序是否重要,combinations視AB與BA為相同,而permutations視為不同;

Python Pytest夾具示例 Python Pytest夾具示例 Jul 31, 2025 am 09:35 AM

fixture是用於為測(cè)試提供預(yù)設(shè)環(huán)境或數(shù)據(jù)的函數(shù),1.使用@pytest.fixture裝飾器定義fixture;2.在測(cè)試函數(shù)中以參數(shù)形式註入fixture;3.yield之前執(zhí)行setup,之後執(zhí)行teardown;4.通過scope參數(shù)控製作用域,如function、module等;5.將共用fixture放在conftest.py中實(shí)現(xiàn)跨文件共享,從而提升測(cè)試的可維護(hù)性和復(fù)用性。

了解Java虛擬機(jī)(JVM)內(nèi)部 了解Java虛擬機(jī)(JVM)內(nèi)部 Aug 01, 2025 am 06:31 AM

TheJVMenablesJava’s"writeonce,runanywhere"capabilitybyexecutingbytecodethroughfourmaincomponents:1.TheClassLoaderSubsystemloads,links,andinitializes.classfilesusingbootstrap,extension,andapplicationclassloaders,ensuringsecureandlazyclassloa

如何使用Java的日曆? 如何使用Java的日曆? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過LocalDate、LocalDateTime和LocalTime獲取當(dāng)前日期時(shí)間;3.使用of()方法創(chuàng)建特定日期時(shí)間;4.利用plus/minus方法不可變地增減時(shí)間;5.使用ZonedDateTime和ZoneId處理時(shí)區(qū);6.通過DateTimeFormatter格式化和解析日期字符串;7.必要時(shí)通過Instant與舊日期類型兼容;現(xiàn)代Java中日期處理應(yīng)優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線

Google Chrome無法打開本地文件 Google Chrome無法打開本地文件 Aug 01, 2025 am 05:24 AM

ChromecanopenlocalfileslikeHTMLandPDFsbyusing"Openfile"ordraggingthemintothebrowser;ensuretheaddressstartswithfile:///;2.SecurityrestrictionsblockAJAX,localStorage,andcross-folderaccessonfile://;usealocalserverlikepython-mhttp.server8000tor

See all articles