中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java常見基礎知識面試題有哪些

發布時間:2022-02-23 16:09:27 來源:億速云 閱讀:147 作者:iii 欄目:開發技術

今天小編給大家分享一下Java常見基礎知識面試題有哪些的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

一、八種基本數據類型的大小,以及他們的封裝類

數據類型封裝類大小
byteByte1 字節
shortShort2 字節
intInteger4 字節
longLong8 字節
floatFloat4 字節
doubleDouble8 字節
booleanBoolean/
charCharacter2 字節


二、switch 能否用 string 做參數?

switch 語句中的變量類型可以使 byte,short,int,char。從 jdk1.7 后可以使用 String 類型,是通過 switch 中的 String.hashcode 將 String 轉換成 int 進行判斷。

三、equals 與 == 的區別

== 操作符是用來比較兩個變量的值是否相等,即就是比較變量在內存中的存儲地址是否相同,equals()方法時 String 類從 Object 類中繼承的,被用來檢測兩個對象的內容是否相同。

四、String s = new String(‘abc’);創建了幾個 object 對象?

會創建一個 String 類型的變量 s。在類加載到此處之前沒有出現“abc”字面量的話,加載此處會創建一個對應“abc”的 String 常量對象。在符合規范的 JVM 上,執行到此處 new 關鍵字會創建一個 String 對象。

五、 Object有哪些公用方法?

  1. clone() 創建斌返回此對象的副本

  2. equals() 判斷

  3. getclass() 返回 object 的運行類

  4. hashcode() 返回對象的哈希碼值

  5. notify() 喚醒正在等待對象監聽器的單個進程

  6. notifyAll() 喚醒正在等待對象監聽器的所有進程

  7. wait() 導致當前線程等待,直到另一個線程調用該對象的 notify() 方法或 notifyAll() 方法

  8. toString() 返回此對象的字符串表示形式

  9. finalize() 當垃圾收集確定不需要該對象時,垃圾回收器調用該方法

六、Java的四種引用,用到的場景

  • 強引用:垃圾回收器不會回收

  • 軟引用:如果內存空間足夠,垃圾回收器就不會進行回收,如果內存空間不足,垃圾回收器就會進行回收

  • 弱引用:一旦發現了只有弱引用的對象,垃圾回收器就會進行回收。

  • 虛引用:如果發現該對象還具有虛引用,就會在回收該對象之前,吧這個虛引用加入到與之關聯的引用隊列中。

七、靜態變量和實例變量的區別

靜態變量前要加上關鍵字 static,實例變量則不會。

實例變量是屬于某個對象的屬性,必須創建了實例對象,其中的實例變量才會分配空間,才能使用這個實例變量。靜態變量不屬于任何的實例對象,而是屬于類,也稱為類變量,只要程序加載了類的字節碼,不用創建任何實例對象,就會被分配空間。總之就是,靜態變量不需要創建任何的對象就可以直接使用,而實例變量需要先創建實例對象才能被使用。

八、 Overload 和 Override 的區別

重載 Overload 表示的是同一個類中可以有多個相同名稱的方法,但這些方法的參數列表不同,即就是參數參數或參數類型不同。重載時返回值當然可以不一樣,但是如果參數列表完全一致時,不能通過返回類型不一致而實現重載,這是不可以的。

重寫 Override 表示子類中的方法可以與父類中的方法名稱和參數完全相同,通過子類創建的對象來調用這個方法時,將調用子類中定義的方法,即就是子類中的該方法將父類的該方法覆蓋了。子類覆蓋父類方法時只能拋比父類更少或者更小的異常。重寫的方法其返回必須和被覆蓋的方法返回一致。

九、抽象類和接口的區別

抽象類可以有默認的方法進行實現,可以有構造器,可以有 main 方法進行運行,可以直接在該類中添加實現的方法接口沒有默認的方法進行實現,沒有構造器,不可以使用 main 方法進行運行,在接口中添加方法時需要在具體實現的類中添加方法。

十、 Java面向對象的特征與含義

  1. 封裝:封裝的目的在于實現程序的“高內聚,低耦合”,防止程序相互依賴而帶來的變動影響。封裝是保證是把對同一事物進行操作的方法和相關的方法放在同一個類中,把方法和他操作的數據放在同一個類中;

  2. 抽象:抽象就是找出事物的相似和共性,然后將這些事物歸為同一類,這個類只考慮這些事物的相似和共性,忽略和當前主題不相關的因素;

  3. 繼承:子類繼承父類的內容作為自己的內容,可以加入新的內容或者是修改父類的內容而更加適合特殊的需要。提高了額程序的可重用性和可擴張性;

  4. 多態:多態是指程序中定義的引用變量所指向的具體類型和通過該引用變量發出的方法調用在編程時并不確定,而是在程序運行期間才確定,即一個引用變量倒底會指向哪個類的實例對象,該引用變量發出的方法調用到底是哪個類中實現的方法,必須在由程序運行期間才能決定。

十一、java多態的實現

接口實現,繼承父類進行方法重寫,

同一個類中進行方法重載。

十二、運行時異常和一般異常的區別

異常表示程序運行過程中可能出現的非正常狀態。運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見的運行錯誤。java 編譯器要求方法必須聲明拋出可能出現的非運行時異常,但是并不要求必須聲明拋出未被捕獲的異常。

十三、Java語言如何進行異常處理,throws,throw,try catch finally 代表什么意義,try 塊中可以拋出異常嗎?

Java 通過面向對象的方法進行異常處理,把各種不同的異常進行分類,并提供了良好的接口。在 Java 中,每個異常都是一個對象,它是 Throwable 類或其它子類的實例。當一個

方法出現異常后便拋出一個異常對象,該對象中包含有異常信息,調用這個對象的方法可以捕獲到這個異常并進行處理。Java 的異常處理是通過 5 個關鍵詞來實現的:try、catch、throw、throws 和 finally。一般情況下是用 try 來執行一段程序,如果出現異常,系統會拋出(throws)一個異常,這時候你可以通過它的類型來捕捉(catch)它,或最后(finally)由缺省處理器來處理。

用try來指定一塊預防所有”異常”的程序。緊跟在 try 程序后面,應包含一個 catch 子句來指定你想要捕捉的”異常”的類型。

throw 語句用來明確地拋出一個”異常”;

throws 用來標明一個成員函數可能拋出的各種”異常”;

Finally 為確保一段代碼不管發生什么”異常”都被執行一段代碼;

可以在一個成員函數調用的外面寫一個 try 語句,在這個成員函數內部寫另一個 try 語句保護其他代碼。每當遇到一個 try 語句,”異常”的框架就放到堆棧上面,直到所有的 try 語句都完成;

如果下一級的 try 語句沒有對某種”異常”進行處理,堆棧就會展開,直到遇到有處理這種”異常”的 try 語句。

十四、 try catch finally,try里有return,finally還執行么?

  1. finally 語句總會執行;

  2. 如果 try、catch 中有 return 語句,finally 中沒有 return,那么在 finally 中修改除包裝類型和靜態變量、全局變量以外的數據都不會對 try、catch 中返回的變量有任何的影響(包裝類型、靜態變量會改變、全局變量);

  3. 盡量不要在 finally 中使用 return 語句,如果使用的話,會忽略 try、catch 中的返回語句,也會忽略 try、catch 中的異常,屏蔽了錯誤的發生;

  4. finally 中避免再次拋出異常,一旦 finally 中發生異常,代碼執行將會拋出 finally 中的異常信息,try、catch 中的異常將被忽略。

十五、 Java 中 final、finally 和 finalize 的區別

  • final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承;內部類要訪問局部變量,局部變量必須定義成final類型,例如,一段代碼……

  • finally 是異常處理語句結構的一部分,表示總是執行;

  • finalize 是 Object 類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文件等。JVM 不保證此方法總被調用。

十六、String、StringBuffer與StringBuilder的區別

  • String 表示內容不可修改的字符串,StringBuffer 表示內容可以修改的字符串;

  • String 覆蓋了 equals()方法和 hashcode()方法,而 StringBuffer 沒有覆蓋兩個方法,,所以 StringBuffer 對象存儲到 java 集合類中時會出現問題;

  • StringBulider 也表示內容可以修改的字符串,但是其線程是不安全的,運行效率高。

十七、error和exception區別

  • error 表示有可能恢復但比較困難的的一種嚴重問題,程序是不能進行處理的;

  • exception 表示一種設計或者實現問題。

十八、Java 中的異常處理機制和簡單原理和應用

JAVA 程序違反了 JAVA 的語義規則時,JAVA虛擬機就會將發生的錯誤表示為一個異常。違反語義規則包括 2 種情況:

一種是JAVA類庫內置的語義檢查。例如數組下標越界,會引發 IndexOutOfBoundsException; 訪問 null 的對象時會引發  NullPointerException。

另一種情況就是 JAVA 允許程序員擴展這種語義檢查,程序員可以創建自己的異常,并自由選擇在何時用 throw 關鍵字引發異常。所有的異常都是 java.lang.Thowable 的子類。

十九、 常見的運行時異常

系統異常是 RuntimeException 的子類,常見的系統異常有:

  • ArrayIndexOutOfBoundsException - 數組越界訪問

  • ClassCastException - 類型轉換異常

  • NullPointerException - 試圖訪問一空對象的變量、方法或空數組的元素

  • IllegalArgumentException - 方法的參數無效

  • NoClassDefFoundException - JAVA運行時系統找不到所引用的類

二十、 Set 里面的元素不能重復,用什么方法區分重復與否?

  • Set里的元素是唯一不能重復的,元素是否重復使用 equals() 方法進行判斷。

  • equals() 方法和 == 方法決定引用值是否指向同一對象 equals() 在類中被覆蓋,為的是兩個分離的對象的內容和類型相匹配的話,返回真值。

二十一、HashMap 和 Hashtable 的區別

  1. Hashtable 是基于 Dictionary 類的,HashMap 是 Map 接口的一個實現類;

  2. Hashtable 是線程安全的,即是同步的;HashMap 線程不是安全的,不是同步的;

  3. HashMap 可以將空值作為 key 或 value。

二十二、 HashMap、LinkedHashMap、TreeMap的區別

  1. HashMap 是根據鍵的 hashcode 值存儲數據,根據鍵可以直接獲取它的值,具有很快的訪問速度,取得的數據完全是隨機的;

  2. LinkedHashMap 保存了記錄的插入順序,在使用 Iterator 進行遍歷的時候,先得到的肯定是先插入的數據,可以在構造時帶參數,按照應用次數來進行排序;

  3. TreeMap 實現 SortMap 接口,能夠把它保存的記錄根據鍵排序。默認的是升序排序,也可以指定排序的比較器,進行遍歷的時候得到的是排序過的記錄。

二十三、HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底層實現。

  1. HashMap 是 java 數據結構中兩大結構數組和鏈表的組合。HashMap 底層數組,數組中的每一項又是一個鏈表。程序會先根據key的hashcode()方法返回值決定該 Entry 在數組中的存儲位置,如果該位置上沒有元素,就會將元素放置在此位置上,如果兩個 Entry 的 key 相同,會調用 equals,返回值是 true 則覆蓋原來的value值,返回 false 則會形成 Entry 鏈,位于頭部。

  2. ArrrayList 的底層實現是數組,在執行 add 操作時,會先檢查數組大小是否可以容納新的元素,如果不夠就會進行擴容。然后會將原來的數據拷貝到新的數組中。

  3. LinkedList 底層是一個鏈表,其實現增刪改查和數據結構中的操作完全相同,而且插入是有序的。

  4. LinkedHashMap 的底層結構式是雙鏈表,其他的邏輯處理與 HashMap 一致,同樣沒有鎖保護,多線程使用時存在風險。

  5. ConcurrentHashMap 是 segment 數組結構和 HashEntry 數組結構組成的,segment 在 ConcurrentHashMap 中充當鎖的角色,HashEntry 用于存儲鍵值對數據。segment 的結構是數組和鏈表,一個segment中有一個 HashEntry,每個 HashEntry 是一個鏈表結構的元素。對 HashEntry 中的數據進行修改時,需要先獲得它所對應的 segment 鎖。每個 ConcurrentHashMap 默認有 16 個 segment。

二十四、迭代器Iterator

Iterator 提供了統一遍歷操作集合元素的統一接口,Collection 接口實現 Iterator 接口。每個集合都通過實現 Iterator 接口中的iterator() 方法返回實例,然后對元素進行迭代操作,但是在迭代元素的時候不能使用集合的方法刪除元素,否則會拋出異常,可以使用 Iterator 接口中的 remove() 方法進行刪除。

二十五、Map、Set、List、Queue、Stack的特點與用法。

1、Map 是以鍵值對的形式進行存儲的,其中 key 是唯一不可重復的,value 的可以重復,當插入的值是 key 相同,后加入的會將已有的覆蓋。他有幾個具體的實現類,包括 Treemap 和 HashMap,TreeMap 是有序的,HashMap 是無序的。

2、List 有序,可重復

|–ArrayList

底層數據結構是數組,查詢快,增刪慢,線程不安全,效率高

|–Vector

底層數據結構是數組,查詢快,增刪慢,線程不安全,效率高

|–LinkedList

底層數據結構是鏈表,查詢慢,增刪塊,線程安全,效率低

3、Set 無序,唯一

|–HashSet

底層數據結構是哈希表

如何保證元素的唯一性:

依賴兩個方法,hashCode() 和 equals()

|–LinkedHashSet

底層數據結構是鏈表和哈希表,由鏈表保證元素有序,由哈希表保證元素唯一

|–TreeSet 底層數據結構是紅黑樹,

如何保證元素的排序:

自然排序:讓元素所屬的類實現 Comparable 接口

比較器排序:讓集合接收一個 Comparator 的實現類對象

如何保證元素的唯一性:

根據比較的返回值是否是 0 來決定的

4、Query 隊列遵循先進先出的原則,不允許插入null值,其中提供了相應的進隊和出隊的方法,建議使用offer() 方法來添加元素,使用poll() 方法刪除元素

5、Stack遵從后進先出的原則,繼承自 Vector。他通過 5 個操作對 Vector 類進行擴展,它提供了 push 和 pop 操作,以及去堆棧頂點的peek() 方法,測試堆棧是否為空的 empty 方法

6、使用方法:

如果涉及到堆棧,隊列等操作,建議使用 List

對于快速插入和刪除元素建議使 用LinkedList

需要快速隨機訪問元素建議使用 ArrayList

二十六、Collection 包結構

Collection 是集合類的上級接口,是單列集合。繼承他的接口主要有 Set 和 List.

Set接口的子接口有:HashSet,TreeSet

List接口的子接口有:Arraylist,LinkedList,Vector

二十七、Collection 與 Collections 的區別。

Collection 是集合類的上級接口,繼承他的接口有 Set 和 List;

Collections 是針對集合類的一個幫助類,它提供一系列的靜態方法實現集合的搜索,排序,線程安全等操作。

二十八、 Colection 框架中實現比較要實現什么接口?

comparable:只包含 compareTo() 方法

comparator:compare() 和 equals()

二十九、Collection框架的結構

集合框架(Collection Framework)泛指 java.util 包的若干個類和接口。如 Collection, List, ArrayList, LinkedList, Vector( 自動增長數組), HashSet, HashMap 等;

集合框架中的類主要封裝的是典型的數據結構,如動態數組,鏈表,堆棧,集合,哈希表等;

集合框架類似編程中經常用到的工具類,使得編碼這專注于業務層的實現,不需要從底層實現相關細節—“數據結構的封裝”和”典型算法的實現”。

三十、 快速失敗(fail-fast)和安全失敗(fail-safe)的區別。

Iterator 的安全失敗是基于對底層集合做拷貝,因此它不受源集合修改的影響。util 包下的所有集合類都是快速失敗的,util.concurren包下面的所有類都是安全失敗的。

以上就是“Java常見基礎知識面試題有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宝兴县| 赤峰市| 嘉禾县| 城市| 江川县| 新兴县| 新密市| 石家庄市| 奉贤区| 离岛区| 自治县| 绵阳市| 乌审旗| 滨海县| 林周县| 宜兰市| 兴和县| 东乌珠穆沁旗| 东乌| 二手房| 清水河县| 伊金霍洛旗| 乐都县| 玛纳斯县| 司法| 汉源县| 兖州市| 新余市| 江西省| 红桥区| 河西区| 乌恰县| 汉川市| 迁安市| 四会市| 崇明县| 南华县| 定南县| 江安县| 新晃| 通州市|