2021最新版】Java基礎面試題總結(70道題含答案解析)

      網友投稿 748 2025-03-31

      文章目錄


      Java集合/泛型面試題

      1、ArrayList和linkedList的區別

      2、 HashMap和HashTable的區別

      3、Collection包結構,與Collections的區別

      4、泛型常用特點(待補充)

      5、說說List、Set、Map、三者的區別?

      6、Array與ArrayList有什么不一樣?

      7、Map有什么特點?

      8、集合類存放于Java.util包中,主要有幾種接口?

      9、什么是list接口

      10、說說ArrayList(數組)

      11、Vector(數組實現、 線程同步)

      12、說說LinkList(鏈表)

      13、什么Set集合

      14、HashSet(Hash表)

      15、什么是TreeSet(二叉樹)

      16、說說LinkHashSet(HashSet+LinkedHashMap)

      17、HashMap(數組+鏈表+紅黑樹)

      18、說說ConcurrentHashMap

      19、HashTable(線程安全)

      20、TreeMap(可排序)

      21、LinkHashMap(記錄插入順序)

      22、泛型類

      23、類型通配符?

      24、類型擦除

      Java異常面試題

      1、Java中異常分為哪兩種?

      2、異常的處理機制有幾種?

      3、如何自定義一個異常

      4、try catch fifififinally,try里有return,fifinally還執行么?

      5、 Excption與Error包結構

      6、Thow與thorws區別

      7、Error與Exception區別?

      8、error和exception有什么區別

      Java中的IO與NIO面試題

      1、Java中IO流?

      2、 Java IO與NIO的區別

      3、常用io類有那些

      4、字節流與字符流的區別

      5、阻塞IO模型

      6、非阻塞IO模型

      7、多路復用IO模型

      8、信號驅動IO模型

      9、異步IO模型

      10、JAVA NIO

      11、NIO的緩沖區

      12、NIO的非阻塞

      13、Channel

      14、Buffffer

      15、Selector

      Java反射面試題

      1、除了使用new創建對象之外,還可以用什么方法創建對象?

      2、Java反射創建對象效率高還是通過new創建對象的效率高?

      3、java反射的作用

      4、哪里會用到反射機制?

      5、反射的實現方式:

      6、實現Java反射的類:

      7、反射機制的優缺點:

      8、Java反射API

      9、反射使用步驟(獲取Class對象、調用對象方法)

      10、獲取Class對象有幾種方法

      11、利用反射動態創建對象實例

      Java序列化面試題

      1、什么是java序列化,如何實現java序列化?

      2、保存(持久化)對象及其狀態到內存或者磁盤

      3、序列化對象以字節數組保持-靜態成員不保存

      4、序列化用戶遠程對象傳輸

      5、Serializable 實現序列化

      6、writeObject和readObject自定義序列化策略

      7、序列化ID

      8、序列化并不保存靜態變量

      9、Transient關鍵字阻止該變量被序列化到文件中

      10、序列化(深clone一中實現)

      Java注解面試題

      1、種標準元注解是哪四種?

      2、注解是什么?

      總結

      最近面試的小伙伴很多,對此我整理了一份Java面試題手冊:基礎知識、JavaOOP、Java集合/泛型面試題、Java異常面試題、Java中的IO與NIO面試題、Java反射、Java序列化、Java注解、多線程&并發、JVM、Mysql、Redis、Memcached、MongoDB、Spring、SpringBoot、SpringCloud、RabbitMQ、Dubbo、MyBatis、ZooKeeper、數據結構、算法、Elasticsearch、Kafka、微服務、Linux等等。

      可以分享給大家學習?!境掷m更新中】

      完整版Java面試題地址:【2021最新版】Java面試真題匯總

      Java集合/泛型面試題

      1、ArrayList和linkedList的區別

      答: Array(數組)是基于索引(index)的數據結構,它使用索引在數組中搜索和讀取數據是很快的。

      Array獲取數據的時間復雜度是O(1),但是要刪除數據卻是開銷很大,因為這需要重排數組中的所有數據,(因為刪除數據以后,需要把后面所有的數據前移)

      缺點:數組初始化必須指定初始化的長度,否則報錯。

      例如:

      int[] a = new int[4];//推薦使用int[] 這種方式初始化 int c[] = {23,43,56,78};//長度:4,索引范圍:[0,3]

      1

      2

      3

      List—是一個有序的集合,可以包含重復的元素,提供了按索引訪問的方式,它繼承Collection。

      List有兩個重要的實現類:ArrayList和LinkedList。

      ArrayList:可以看作是能夠自動增長容量的數組。

      ArrayList的toArray方法返回一個數組。

      ArrayList的asList方法返回一個列表。

      ArrayList底層的實現是Array,數組擴容實現。

      LinkList是一個雙鏈表,在添加和刪除元素時具有比ArrayList更好的性能,但在get與set方面弱于ArrayList。當然,這些對比都是指數據量很大或者操作很頻繁。

      2、 HashMap和HashTable的區別

      答:

      1、兩者父類不同

      HashMap是繼承自AbstractMap類,而Hashtable是繼承自Dictionary類。不過它們都實現了同時實現了map、Cloneable(可復制)、Serializable(可序列化)這三個接口。

      2、對外提供的接口不同

      Hashtable比HashMap多提供了elments() 和contains() 兩個方法。elments() 方法繼承自Hashtable的父類Dictionnary。elements() 方法用于返回此Hashtable中的value的枚舉。

      contains()方法判斷該Hashtable是否包含傳入的value。它的作用與containsValue()一致。事實上,contansValue() 就只是調用了一下contains() 方法。

      3、對null的支持不同

      Hashtable:key和value都不能為null。

      HashMap:key可以為null,但是這樣的key只能有一個,因為必須保證key的唯一性;可以有多個key

      值對應的value為null。

      4、安全性不同

      HashMap是線程不安全的,在多線程并發的環境下,可能會產生死鎖等問題,因此需要開發人員自己處理多線程的安全問題。

      Hashtable是線程安全的,它的每個方法上都有synchronized 關鍵字,因此可直接用于多線程中。

      雖然HashMap是線程不安全的,但是它的效率遠遠高于Hashtable,這樣設計是合理的,因為大部分的使用場景都是單線程。當需要多線程操作的時候可以使用線程安全的ConcurrentHashMap。

      ConcurrentHashMap雖然也是線程安全的,但是它的效率比Hashtable要高好多倍。因為ConcurrentHashMap使用了分段鎖,并不對整個數據進行鎖定。

      5、初始容量大小和每次擴充容量大小不同

      6、計算hash值的方法不同

      3、Collection包結構,與Collections的區別

      4、泛型常用特點(待補充)

      答:

      泛型是Java SE 1.5之后的特性, 《Java 核心技術》中對泛型的定義是:

      “泛型” 意味著編寫的代碼可以被不同類型的對象所重用。

      “泛型”,顧名思義,“泛指的類型”。我們提供了泛指的概念,但具體執行的時候卻可以有具體的規則來約束,比如我們用的非常多的ArrayList就是個泛型類,ArrayList作為集合可以存放各種元素,如

      Integer, String,自定義的各種類型等,但在我們使用的時候通過具體的規則來約束,如我們可以約束集合中只存放Integer類型的元素,如:

      List iniData = new ArrayList<>()

      1

      使用泛型的好處?

      以集合來舉例,使用泛型的好處是我們不必因為添加元素類型的不同而定義不同類型的集合。

      如:整型集合類,浮點型集合類,字符串集合類。

      我們可以定義一個集合來存放整型、浮點型,字符串型數據,而這并不是最重要的,因為我們只要把底層存儲設置了Object即可,添加的數據全部都可向上轉型為Object。

      更重要的是我們可以通過規則按照自己的想法控制存儲的數據類型。

      5、說說List、Set、Map、三者的區別?

      6、Array與ArrayList有什么不一樣?

      7、Map有什么特點?

      8、集合類存放于Java.util包中,主要有幾種接口?

      答:

      主要包含set(集)、 list(列表包含 Queue)和 map(映射)。

      Collection: Collection 是集合 List、 Set、 Queue 的最基本的接口。

      Iterator:迭代器,可以通過迭代器遍歷集合中的數據

      Map:是映射表的基礎接口

      9、什么是list接口

      答:

      分別是 ArrayList、 Vector 和LinkedList 。

      List接口結構圖

      10、說說ArrayList(數組)

      11、Vector(數組實現、 線程同步)

      12、說說LinkList(鏈表)

      13、什么Set集合

      14、HashSet(Hash表)

      答:

      同) 而是按照哈希值來存的所以取數據也是按照哈希值取得。元素的哈希值是通過元素的hashcode 方法來獲取的, HashSet 首先判斷兩個元素的哈希值,如果哈希值一樣,接著會比較equals 方法 如果 equls 結果為 true , HashSet 就視為同一個元素。如果 equals 為 false 就不是同一個元素。

      哈希值相同 equals 為 false 的元素是怎么存儲呢,就是在同樣的哈希值下順延(可以認為哈希值相同的元素放在一個哈希桶中)。也就是哈希一樣的存一列。

      如圖 1 表示 hashCode 值不相同的情況; 圖 2 表示 hashCode 值相同,但 equals 不相同的情況。

      HashSet 通過 hashCode 值來確定元素在內存中的位置。 一個 hashCode 位置上可以存放多個元素。

      15、什么是TreeSet(二叉樹)

      16、說說LinkHashSet(HashSet+LinkedHashMap)

      17、HashMap(數組+鏈表+紅黑樹)

      答:

      HashMap 根據鍵的 hashCode 值存儲數據,大多數情況下可以直接定位到它的值,因而具有很快的訪問速度,但遍歷順序卻是不確定的。 HashMap 最多只允許一條記錄的鍵為 null,允許多條記錄的值為 null。 HashMap 非線程安全,即任一時刻可以有多個線程同時寫 HashMap,可能會導致數據的不一致。如果需要滿足線程安全,可以用 Collections 的 synchronizedMap 方法使HashMap 具有線程安全的能力,或者使用 ConcurrentHashMap。 我們用下面這張圖來介紹HashMap 的結構。

      大方向上,HashMap里面是一個數組,然后數組中每個元素是一個單向鏈表。上圖中,每個綠色的實體是嵌套類Entry的實例,Entry包含四個屬性:key、value、hash值和用于單向鏈表的next。

      capacity:當前數組容量,始終保持 2^n,可以擴容,擴容后數組大小為當前的2倍。

      oadFactor:負載因子,默認為0.75。

      threshold:擴容的閾值,等于capacity * loadFactor。

      Java8對HashMap進行了一些修改, 最大的不同就是利用了紅黑樹,所以其由 數組+鏈表+紅黑樹 組成。

      根據Java7HashMap的介紹,我們知道,查找的時候,根據hash值我們能夠快速定位到數組的具體下標,但是之后的話,需要順著鏈表一個個比較下去才能找到我們需要的,時間復雜度取決鏈表的長度,為O(n)。為了降低這部分的開銷,在Java8中, 當鏈表中的元素超過了8個以后,會將鏈表轉換為紅黑樹,在這些位置進行查找的時候可以降低時間復雜度為O(logN)。

      18、說說ConcurrentHashMap

      19、HashTable(線程安全)

      20、TreeMap(可排序)

      21、LinkHashMap(記錄插入順序)

      22、泛型類

      答:

      泛型類的聲明和非泛型類的聲明類似,除了在類名后面添加了類型參數聲明部分。和泛型方法一樣,泛型類的類型參數聲明部分也包含一個或多個類型參數,參數間用逗號隔開。一個泛型參數,也被稱為一個類型變量,是用于指定一個泛型類型名稱的標識符。因為他們接受一個或多個參數,這些類被稱為參數化的類或參數化的類型。

      public class Box { private T t; public void add(T t) { this.t = t; } public T get() { return t; } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      23、類型通配符?

      24、類型擦除

      Java異常面試題

      1、Java中異常分為哪兩種?

      答:

      1.編譯時異常。

      2.運行時異常。

      2、異常的處理機制有幾種?

      3、如何自定義一個異常

      4、try catch fifififinally,try里有return,fifinally還執行么?

      5、 Excption與Error包結構

      6、Thow與thorws區別

      7、Error與Exception區別?

      答:

      1.Error和Exception都是java錯誤處理機制的一部分,都繼承了Throwable類。

      2.Exception表示的異常,異常可以通過程序來捕捉,或者優化程序來避免。

      3.Error表示的是系統錯誤,不能通過程序來進行錯誤處理。

      8、error和exception有什么區別

      答:

      error表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況

      Java中的IO與NIO面試題

      1、Java中IO流?

      2、 Java IO與NIO的區別

      3、常用io類有那些

      答:

      File FileInputSteam,FileOutputStream

      BufferInputStream,BufferedOutputSream PrintWrite FileReader,FileWriter

      BufferReader,BufferedWriter ObjectInputStream,ObjectOutputSream

      4、字節流與字符流的區別

      5、阻塞IO模型

      6、非阻塞IO模型

      答:

      當用戶線程發起一個read操作后,并不需要等待,而是馬上就得到了一個結果。 如果結果是一個error時,它就知道數據還沒有準備好,于是它可以再次發送read操作。一旦內核中的數據準備好了,并且又再次收到了用戶線程的請求,那么它馬上就將數據拷貝到了用戶線程,然后返回。所以事實上,在非阻塞IO模型中,用戶線程需要不斷地詢問內核數據是否就緒,也就說非阻塞IO不會交出CPU,而會一直占用CPU。

      典型的非阻塞IO模型一般如下:

      while(true){ data = socket.read(); if(data!= error){ //處理數據 break; } }

      1

      【2021最新版】Java基礎面試題總結(70道題含答案解析)

      2

      3

      4

      但是對于非阻塞IO就有一個非常嚴重的問題, 在while循環中需要不斷地去詢問內核數據是否就緒,這樣會導致CPU占用率非常高,因此一般情況下很少使用while循環這種方式來讀取數據。

      7、多路復用IO模型

      8、信號驅動IO模型

      9、異步IO模型

      10、JAVA NIO

      11、NIO的緩沖區

      12、NIO的非阻塞

      13、Channel

      14、Buffffer

      答:

      Buffer,故名思意, 緩沖區,實際上是一個容器,是一個連續數組。 Channel提供從文件、網絡讀取數據的渠道,但是讀取或寫入的數據都必須經由Buffer。

      上面的圖描述了從一個客戶端向服務端發送數據,然后服務端接收數據的過程??蛻舳税l送數據時,必須先將數據存入Buffer 中,然后將Buffer中的內容寫入通道。服務端這邊接收數據必須通過Channel將數據讀入到Buffer中,然后再從Buffer中取出數據來處理。

      在NIO中, Buffer是一個頂層父類,它是一個抽象類,常用的Buffer的子類有:ByteBuffer、 IntBuffer、 CharBuffer、 LongBuffer、DoubleBuffer、 FloatBuffer、ShortBuffer。

      15、Selector

      答:

      Selector類是NIO的核心類, Selector能夠檢測多個注冊的通道上是否有事件發生,如果有事件發生,便獲取事件然后針對每個事件進行相應的響應處理。這樣一來,只是用一個單線程就可以管理多個通道,也就是管理多個連接。這樣使得只有在連接真正有讀寫事件發生時,才會調用函數來進行讀寫,就大大地減少了系統開銷,并且不必為每個連接都創建一個線程,不用去維護多個線程,并且避免了多線程之間的上下文切換導致的開銷。

      Java反射面試題

      1、除了使用new創建對象之外,還可以用什么方法創建對象?

      2、Java反射創建對象效率高還是通過new創建對象的效率高?

      3、java反射的作用

      4、哪里會用到反射機制?

      答:

      jdbc就是典型的反射

      Class.forName('com.mysql.jdbc.Driver.class');//加載MySQL的驅動類

      1

      這就是反射。如hibernate,struts等框架使用反射實現的。

      5、反射的實現方式:

      6、實現Java反射的類:

      7、反射機制的優缺點:

      8、Java反射API

      9、反射使用步驟(獲取Class對象、調用對象方法)

      10、獲取Class對象有幾種方法

      11、利用反射動態創建對象實例

      答:

      Class對象的 newInstance()

      使用Class對象的 newInstance()方法來創建該Class對象對應類的實例,但是這種方法要求該Class對象對應的類有默認的空構造器。

      調用 Constructor 對象的 newInstance()

      先使用 Class 對象獲取指定的 Constructor 對象,再調用 Constructor 對象的 newInstance()

      方法來創建 Class 對象對應類的實例,通過這種方法可以選定構造方法創建實例。

      //獲取 Person 類的 Class 對象 Class clazz=Class.forName("reflection.Person"); //使用.newInstane 方法創建對象 Person p=(Person) clazz.newInstance(); //獲取構造方法并創建對象 Constructor c=clazz.getDeclaredConstructor(String.class,String.class,int.class); //創建對象并設置屬性13/04/2018 Person p1=(Person) c.newInstance("李四","男",20)

      1

      Java序列化面試題

      1、什么是java序列化,如何實現java序列化?

      2、保存(持久化)對象及其狀態到內存或者磁盤

      3、序列化對象以字節數組保持-靜態成員不保存

      答:

      使用 Java 對象序列化, 在保存對象時,會把其狀態保存為一組字節,在未來, 再將這些字節組裝成對象。必須注意地是, 對象序列化保存的是對象的”狀態”,即它的成員變量。由此可知,對象序列化不會關注類中的靜態變量。

      4、序列化用戶遠程對象傳輸

      5、Serializable 實現序列化

      6、writeObject和readObject自定義序列化策略

      7、序列化ID

      答:

      虛擬機是否允許反序列化,不僅取決于類路徑和功能代碼是否一致,一個非常重要的一點是兩個類的序列化ID是否一致(就是 privatestatic final long serialVersionUID

      8、序列化并不保存靜態變量

      9、Transient關鍵字阻止該變量被序列化到文件中

      10、序列化(深clone一中實現)

      答:

      在 Java 語言里深復制一個對象,常??梢韵仁箤ο髮崿FSerializable接口,然后把對象(實際上只是對象的一個拷貝)寫到一個流里,再從流里讀出來,便可以重建對象。

      Java注解面試題

      1、種標準元注解是哪四種?

      答:

      元注解的作用是負責注解其他注解。 Java5.0定義了4個標準的meta-annotation類型,它們被用來提供對其它annotation類型作說明。

      @Target 修飾的對象范圍

      @Target說明了Annotation所修飾的對象范圍: Annotation可被用于packages、types(類、接口、枚舉、Annotation 類型)、類型成員(方法、構造方法、成員變量、枚舉值)、方法參數和本地變量(如循環變量、catch 參數)。在 Annotation 類型的聲明中使用了target可更加明晰其修飾的目標。

      @Retention 定義 被保留的時間長短

      Retention 定義了該 Annotation 被保留的時間長短:表示需要在什么級別保存注解信息,用于描述注解的生命周期(即:被描述的注解在什么范圍內有效),取值(RetentionPoicy)由:

      SOURCE:在源文件中有效(即源文件保留)

      CLASS:在 class 文件中有效(即 class 保留)

      RUNTIME:在運行時有效(即運行時保留)

      @Documented 描述-javadoc

      @ Documented用于描述其它類型的annotation應該被作為被標注的程序成員的公共API,因此可以被例如javadoc此類的工具文檔化。

      @Inherited闡述了某個被標注的類型是被繼承的

      @Inherited元注解是一個標記注解,@Inherited闡述了某個被標注的類型是被繼承的。如果一個使用了@Inherited修飾的annotation類型被用于一個class,則這個annotation 將被用于該class的子類。

      2、注解是什么?

      答:

      Annotation(注解)是Java提供的一種對元程序中元素關聯信息和元數據(metadata)的途徑和方法。 Annatation(注解)是一個接口,程序可以通過反射來獲取指定程序中元素的Annotation對象,然后通過該Annotation對象來獲取注解中的元數據信息。

      總結

      篇幅有限,其他內容就不在這里一 一展示了,整理不易,歡迎大家一起交流,喜歡小編分享的文章記得關注我喲,感謝支持!重要的事情說三遍,轉發+轉發+轉發,一定要記得轉發哦?。?!

      Java 容器 數據結構

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel多重條件判斷函數(多重條件判斷公式)
      下一篇:LAMP VS LNMP
      相關文章
      亚洲视频在线不卡| 亚洲国产精品成人网址天堂| 亚洲妇女无套内射精| 日韩精品亚洲人成在线观看| 久久久久亚洲AV成人网人人网站 | 亚洲一区二区观看播放| 91亚洲国产成人久久精品网址| 亚洲国产精品毛片av不卡在线 | 久久精品国产精品亚洲| 亚洲国产成人a精品不卡在线| 亚洲成年人电影在线观看| 久久亚洲精精品中文字幕| 久久精品亚洲精品国产色婷| 亚洲无线电影官网| 亚洲综合色丁香麻豆| 久久久久亚洲AV无码专区首JN| 亚洲V无码一区二区三区四区观看| 亚洲国产另类久久久精品| 亚洲va久久久噜噜噜久久男同| 亚洲国产高清在线| 亚洲AV无码一区二区乱孑伦AS | 亚洲国产一区国产亚洲| 亚洲人成影院在线| 中文字幕亚洲综合久久2| 亚洲高清日韩精品第一区| 久久精品蜜芽亚洲国产AV| 亚洲精品人成电影网| 精品亚洲AV无码一区二区| 亚洲一本一道一区二区三区| 亚洲av永久中文无码精品综合| 国产区图片区小说区亚洲区| 亚洲人成国产精品无码| 国产国拍精品亚洲AV片| 亚洲AV无码一区二区乱孑伦AS| 亚洲美女视频网站| 最新亚洲卡一卡二卡三新区| 亚洲av最新在线观看网址| 亚洲精品黄色视频在线观看免费资源| 亚洲伊人久久成综合人影院| 亚洲综合AV在线在线播放| 亚洲AV日韩AV高潮无码专区|