久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

2020最新總結(jié)大廠Java高頻面試題(含答案解析)

 python_lover 2021-06-25

前言

發(fā)現(xiàn)網(wǎng)上很多Java面試題都沒有答案,,所以花了很長時間搜集整理出來了這套Java面試題大全,,希望對大家有幫助哈~

本套Java面試題大全,全的不能再全,,哈哈~

這份面試題的包含的模塊分為19個模塊,,分別是: Java 基礎(chǔ)、容器,、多線程,、反射、對象拷貝,、Java Web ,、異常,、網(wǎng)絡(luò)、設(shè)計模式,、Spring/Spring MVC,、Spring Boot/Spring Cloud、Hibernate,、MyBatis,、RabbitMQ、Kafka,、Zookeeper,、MySQL、Redis,、JVM ,。如下圖所示

好了,閑話不多說了,,來看面試題吧:

一,、Java 基礎(chǔ)

1. JDK 和 JRE 有什么區(qū)別?

JDK:Java Development Kit 的簡稱,,java 開發(fā)工具包,,提供了 java 的開發(fā)環(huán)境和運行環(huán)境。

JRE:Java Runtime Environment 的簡稱,,java 運行環(huán)境,,為 java 的運行提供了所需環(huán)境。

具體來說 JDK 其實包含了 JRE,,同時還包含了編譯 java 源碼的編譯器 javac,,還包含了很多 java 程序調(diào)試和分析的工具。簡單來說:如果你需要運行 java 程序,,只需安裝 JRE 就可以了,,如果你需要編寫 java 程序,需要安裝 JDK,。

2. == 和 equals 的區(qū)別是什么,?

== 解讀

對于基本類型和引用類型 == 的作用效果是不同的,如下所示:

基本類型:比較的是值是否相同,;

引用類型:比較的是引用是否相同,;

代碼示例:

代碼解讀:因為 x 和 y 指向的是同一個引用,所以 == 也是 true,,而 new String()方法則重寫開辟了內(nèi)存空間,,所以 == 結(jié)果為 false,而 equals 比較的一直是值,,所以結(jié)果都為 true,。

equals 解讀

equals 本質(zhì)上就是 ==,,只不過 String 和 Integer 等重寫了 equals 方法,把它變成了值比較,??聪旅娴拇a就明白了。

首先來看默認(rèn)情況下 equals 比較一個有相同值的對象,,代碼如下:

輸出結(jié)果出乎我們的意料,,竟然是 false,?這是怎么回事,,看了 equals 源碼就知道了,源碼如下:

原來 equals 本質(zhì)上就是 ==,。

那問題來了,,兩個相同值的 String 對象,為什么返回的是 true,?代碼如下:

同樣的,,當(dāng)我們進(jìn)入 String 的 equals 方法,找到了答案,,代碼如下:

原來是 String 重寫了 Object 的 equals 方法,,把引用比較改成了值比較。

總結(jié) :== 對于基本類型來說是值比較,,對于引用類型來說是比較的是引用,;而 equals 默認(rèn)情況下是引用比較,只是很多類重新了 equals 方法,,比如 String,、Integer 等把它變成了值比較,所以一般情況下 equals 比較的是值是否相等,。

3. 兩個對象的 hashCode()相同,,則 equals()也一定為 true,對嗎,?

不對,,兩個對象的 hashCode()相同,equals()不一定 true,。

代碼示例:

?

執(zhí)行的結(jié)果:

代碼解讀:很顯然“通話”和“重地”的 hashCode() 相同,,然而 equals() 則為 false,因為在散列表中,,hashCode()相等即兩個鍵值對的哈希值相等,,然而哈希值相等,并不一定能得出鍵值對相等,。

4. final 在 java 中有什么作用,?

  • final 修飾的類叫最終類,,該類不能被繼承。

  • final 修飾的方法不能被重寫,。

  • final 修飾的變量叫常量,,常量必須初始化,初始化之后值就不能被修改,。

5. java 中的 Math.round(-1.5) 等于多少,?

等于 -1,因為在數(shù)軸上取值時,,中間值(0.5)向右取整,,所以正 0.5 是往上取整,負(fù) 0.5 是直接舍棄,。

6. String 屬于基礎(chǔ)的數(shù)據(jù)類型嗎,?

String 不屬于基礎(chǔ)類型,基礎(chǔ)類型有 8 種:byte,、boolean,、char、short,、int,、float、long,、double,,而 String 屬于對象。

7. java 中操作字符串都有哪些類,?它們之間有什么區(qū)別,?

操作字符串的類有:String、StringBuffer,、StringBuilder,。

String 和 StringBuffer、StringBuilder 的區(qū)別在于 String 聲明的是不可變的對象,,每次操作都會生成新的 String 對象,,然后將指針指向新的 String 對象,而 StringBuffer,、StringBuilder 可以在原有對象的基礎(chǔ)上進(jìn)行操作,,所以在經(jīng)常改變字符串內(nèi)容的情況下最好不要使用 String。

StringBuffer 和 StringBuilder 最大的區(qū)別在于,,StringBuffer 是線程安全的,,而 StringBuilder 是非線程安全的,但 StringBuilder 的性能卻高于 StringBuffer,所以在單線程環(huán)境下推薦使用 StringBuilder,,多線程環(huán)境下推薦使用 StringBuffer,。

8. String str="i"與 String str=new String("i")一樣嗎?

不一樣,,因為內(nèi)存的分配方式不一樣,。String str="i"的方式,java 虛擬機會將其分配到常量池中,;而 String str=new String("i") 則會被分到堆內(nèi)存中,。

9. 如何將字符串反轉(zhuǎn)?

使用 StringBuilder 或者 stringBuffer 的 reverse() 方法,。

示例代碼:

10. String 類的常用方法都有那些,?

  • indexOf():返回指定字符的索引。

  • charAt():返回指定索引處的字符,。

  • replace():字符串替換,。

  • trim():去除字符串兩端空白,。

  • split():分割字符串,,返回一個分割后的字符串?dāng)?shù)組。

  • getBytes():返回字符串的 byte 類型數(shù)組,。

  • length():返回字符串長度,。

  • toLowerCase():將字符串轉(zhuǎn)成小寫字母。

  • toUpperCase():將字符串轉(zhuǎn)成大寫字符,。

  • substring():截取字符串,。

  • equals():字符串比較。

11. 抽象類必須要有抽象方法嗎,?

不需要,,抽象類不一定非要有抽象方法。

示例代碼:

上面代碼,,抽象類并沒有抽象方法但完全可以正常運行,。

12. 普通類和抽象類有哪些區(qū)別?

  • 普通類不能包含抽象方法,,抽象類可以包含抽象方法,。

  • 抽象類不能直接實例化,普通類可以直接實例化,。

13. 抽象類能使用 final 修飾嗎,?

不能,定義抽象類就是讓其他類繼承的,,如果定義為 final 該類就不能被繼承,,這樣彼此就會產(chǎn)生矛盾,所以 final 不能修飾抽象類,如下圖所示,,編輯器也會提示錯誤信息:

14. 接口和抽象類有什么區(qū)別,?

  • 實現(xiàn):抽象類的子類使用 extends 來繼承;接口必須使用 implements 來實現(xiàn)接口,。

  • 構(gòu)造函數(shù):抽象類可以有構(gòu)造函數(shù),;接口不能有。

  • main 方法:抽象類可以有 main 方法,,并且我們能運行它,;接口不能有 main 方法。

  • 實現(xiàn)數(shù)量:類可以實現(xiàn)很多個接口,;但是只能繼承一個抽象類,。

  • 訪問修飾符:接口中的方法默認(rèn)使用 public 修飾;抽象類中的方法可以是任意訪問修飾符,。

15. java 中 IO 流分為幾種,?

按功能來分:輸入流(input)、輸出流(output),。

按類型來分:字節(jié)流和字符流,。

字節(jié)流和字符流的區(qū)別是:字節(jié)流按 8 位傳輸以字節(jié)為單位輸入輸出數(shù)據(jù),字符流按 16 位傳輸以字符為單位輸入輸出數(shù)據(jù),。

16. BIO,、NIO、AIO 有什么區(qū)別,?

  • BIO:Block IO 同步阻塞式 IO,,就是我們平常使用的傳統(tǒng) IO,它的特點是模式簡單使用方便,,并發(fā)處理能力低,。

  • NIO:New IO 同步非阻塞 IO,是傳統(tǒng) IO 的升級,,客戶端和服務(wù)器端通過 Channel(通道)通訊,,實現(xiàn)了多路復(fù)用。

  • AIO:Asynchronous IO 是 NIO 的升級,,也叫 NIO2,,實現(xiàn)了異步非堵塞 IO ,異步 IO 的操作基于事件和回調(diào)機制,。

17. Files的常用方法都有哪些,?

  • Files.exists():檢測文件路徑是否存在。

  • Files.createFile():創(chuàng)建文件,。

  • Files.createDirectory():創(chuàng)建文件夾,。

  • Files.delete():刪除一個文件或目錄,。

  • Files.copy():復(fù)制文件。

  • Files.move():移動文件,。

  • Files.size():查看文件個數(shù),。

  • Files.read():讀取文件。

  • Files.write():寫入文件,。

 

二,、容器

18. java 容器都有哪些?

常用容器的圖錄:

?

19. Collection 和 Collections 有什么區(qū)別,?

  • java.util.Collection 是一個集合接口(集合類的一個頂級接口),。它提供了對集合對象進(jìn)行基本操作的通用接口方法。Collection接口在Java 類庫中有很多具體的實現(xiàn),。Collection接口的意義是為各種具體的集合提供了最大化的統(tǒng)一操作方式,,其直接繼承接口有List與Set。

  • Collections則是集合類的一個工具類/幫助類,,其中提供了一系列靜態(tài)方法,,用于對集合中元素進(jìn)行排序、搜索以及線程安全等各種操作,。

20. List,、Set、Map 之間的區(qū)別是什么,?

21. HashMap 和 Hashtable 有什么區(qū)別,?

  • hashMap去掉了HashTable 的contains方法,,但是加上了containsValue()和containsKey()方法,。

  • hashTable同步的,而HashMap是非同步的,,效率上逼hashTable要高,。

  • hashMap允許空鍵值,而hashTable不允許,。

22. 如何決定使用 HashMap 還是 TreeMap,?

對于在Map中插入、刪除和定位元素這類操作,,HashMap是最好的選擇,。然而,假如你需要對一個有序的key集合進(jìn)行遍歷,,TreeMap是更好的選擇,。基于你的collection的大小,,也許向HashMap中添加元素會更快,,將map換為TreeMap進(jìn)行有序key的遍歷。

23. 說一下 HashMap 的實現(xiàn)原理?

HashMap概述:HashMap是基于哈希表的Map接口的非同步實現(xiàn),。此實現(xiàn)提供所有可選的映射操作,,并允許使用null值和null鍵。此類不保證映射的順序,,特別是它不保證該順序恒久不變,。

HashMap的數(shù)據(jù)結(jié)構(gòu):在java編程語言中,最基本的結(jié)構(gòu)就是兩種,,一個是數(shù)組,,另外一個是模擬指針(引用),所有的數(shù)據(jù)結(jié)構(gòu)都可以用這兩個基本結(jié)構(gòu)來構(gòu)造的,,HashMap也不例外,。HashMap實際上是一個“鏈表散列”的數(shù)據(jù)結(jié)構(gòu),即數(shù)組和鏈表的結(jié)合體,。

當(dāng)我們往Hashmap中put元素時,首先根據(jù)key的hashcode重新計算hash值,根絕hash值得到這個元素在數(shù)組中的位置(下標(biāo)),如果該數(shù)組在該位置上已經(jīng)存放了其他元素,那么在這個位置上的元素將以鏈表的形式存放,新加入的放在鏈頭,最先加入的放入鏈尾.如果數(shù)組中該位置沒有元素,就直接將該元素放到數(shù)組的該位置上,。

需要注意Jdk 1.8中對HashMap的實現(xiàn)做了優(yōu)化,當(dāng)鏈表中的節(jié)點數(shù)據(jù)超過八個之后,該鏈表會轉(zhuǎn)為紅黑樹來提高查詢效率,從原來的O(n)到O(logn)

24. 說一下 HashSet 的實現(xiàn)原理?

HashSet底層由HashMap實現(xiàn)

HashSet的值存放于HashMap的key上

HashMap的value統(tǒng)一為PRESENT

25. ArrayList 和 LinkedList 的區(qū)別是什么,?

最明顯的區(qū)別是 ArrrayList底層的數(shù)據(jù)結(jié)構(gòu)是數(shù)組,,支持隨機訪問,而 LinkedList 的底層數(shù)據(jù)結(jié)構(gòu)是雙向循環(huán)鏈表,,不支持隨機訪問,。使用下標(biāo)訪問一個元素,ArrayList 的時間復(fù)雜度是 O(1),,而 LinkedList 是 O(n),。

26. 如何實現(xiàn)數(shù)組和 List 之間的轉(zhuǎn)換?

  • List轉(zhuǎn)換成為數(shù)組:調(diào)用ArrayList的toArray方法,。

  • 數(shù)組轉(zhuǎn)換成為List:調(diào)用Arrays的asList方法,。

27. ArrayList 和 Vector 的區(qū)別是什么?

  • Vector是同步的,,而ArrayList不是,。然而,如果你尋求在迭代的時候?qū)α斜磉M(jìn)行改變,,你應(yīng)該使用CopyOnWriteArrayList,。

  • ArrayList比Vector快,它因為有同步,,不會過載,。

  • ArrayList更加通用,因為我們可以使用Collections工具類輕易地獲取同步列表和只讀列表,。

28. Array 和 ArrayList 有何區(qū)別,?

  • Array可以容納基本類型和對象,,而ArrayList只能容納對象。

  • Array是指定大小的,,而ArrayList大小是固定的,。

  • Array沒有提供ArrayList那么多功能,比如addAll,、removeAll和iterator等,。

29. 在 Queue 中 poll()和 remove()有什么區(qū)別?

poll() 和 remove() 都是從隊列中取出一個元素,,但是 poll() 在獲取元素失敗的時候會返回空,,但是 remove() 失敗的時候會拋出異常。

30. 哪些集合類是線程安全的,?

  • vector:就比arraylist多了個同步化機制(線程安全),,因為效率較低,現(xiàn)在已經(jīng)不太建議使用,。在web應(yīng)用中,,特別是前臺頁面,往往效率(頁面響應(yīng)速度)是優(yōu)先考慮的,。

  • statck:堆棧類,,先進(jìn)后出。

  • hashtable:就比hashmap多了個線程安全,。

  • enumeration:枚舉,,相當(dāng)于迭代器。

31. 迭代器 Iterator 是什么,?

迭代器是一種設(shè)計模式,,它是一個對象,它可以遍歷并選擇序列中的對象,,而開發(fā)人員不需要了解該序列的底層結(jié)構(gòu),。迭代器通常被稱為“輕量級”對象,因為創(chuàng)建它的代價小,。

32. Iterator 怎么使用?有什么特點,?

Java中的Iterator功能比較簡單,,并且只能單向移動:

(1) 使用方法iterator()要求容器返回一個Iterator。第一次調(diào)用Iterator的next()方法時,,它返回序列的第一個元素,。注意:iterator()方法是java.lang.Iterable接口,被Collection繼承。

(2) 使用next()獲得序列中的下一個元素,。

(3) 使用hasNext()檢查序列中是否還有元素,。

(4) 使用remove()將迭代器新返回的元素刪除,。

Iterator是Java迭代器最簡單的實現(xiàn),為List設(shè)計的ListIterator具有更多的功能,,它可以從兩個方向遍歷List,,也可以從List中插入和刪除元素。

33. Iterator 和 ListIterator 有什么區(qū)別,?

  • Iterator可用來遍歷Set和List集合,,但是ListIterator只能用來遍歷List。

  • Iterator對集合只能是前向遍歷,,ListIterator既可以前向也可以后向,。

  • ListIterator實現(xiàn)了Iterator接口,并包含其他的功能,,比如:增加元素,,替換元素,獲取前一個和后一個元素的索引,,等等,。

總結(jié):

所有的面試題目都不是一成不變的,上面的面試題只是給大家一個借鑒作用,,最主要的是給自己增加知識的儲備,,有備無患。上面分享的2020最新200+Java面試題的答案都整理成了PDF文檔,。

關(guān)注公眾號:程序白楠楠,,獲取上述資料。

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多