面試題-Java基礎

現在新技術迭代非常快,我們一方面要學習掌握更多的新技術,同時我們需要不斷的鞏固已學的知識,一點點的知識積累終會變成質的飛躍。現在我就想來總結一下java一些常用的面試題。

原文:https://blog.csdn.net/sufu1065/article/details/88051083

參考文章

    文章1

一.java基礎

1.JDK和JRE有什麼區別?

答: JDK : JDK是Java Development Kit的縮寫,JDK 是java的開發工具包,主要面向開發人員,JDK包含JRE,安裝JDK的同 時會安裝JRE。

        JRE: JRE是Java Runtime Environment的縮寫,是java程序運行環境,主要面向java程序使用者,JRE是可以在其上運行、測試和傳輸應用程序的Java平臺。它包括Java虛擬機(jvm)、Java核心類庫和支持文件。它不包含開發工 具 (JDK)–編譯器、調試器和其它工具。

       JVM: JVM是java的虛擬機,它是整個java實現跨平臺的最核心的部分,所有的java程序會首先被編譯爲.class的類文件,這種類文件可以在虛擬機上執行。

             詳細解釋https://blog.csdn.net/chen_006/article/details/88656268

2.== 和equals()有什麼區別?

答:   == : 1.如果用來判斷基本數據類型(也稱原始數據類型)(byte,short,char,int,long,float,double,boolean)。他們之間的比較,應用雙等號(==),比較的是他們的值

                  2.如果用來判斷引用數據類型,當他們用(==)進行比較的時候,比較的是他們在內存中的存放地址(確切的說,是堆內存地址)。

          equals()  :  如果用來判斷引用類類型,默認情況下比較的是地址值,也可以用來字符串是否相等,我們可以根據情況自己重寫該方法。一般重寫都是自動生成,比較對象的成員變量值是否相同。

         詳細解釋https://www.cnblogs.com/qianguyihao/p/3929585.html

                          https://www.cnblogs.com/zhxhdean/archive/2011/03/26/1996468.html

 

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

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

        詳細舉例解釋:https://blog.csdn.net/qq_35771266/article/details/91345052 

4.final 在 Java 中有什麼作用?

 答:final關鍵字的用法,可以修飾類,變量,方法,表示變量不可修改,類不可以繼承,方法不可覆蓋。

        修飾類:   當一個類被final修飾的時候,表示該類爲最終類,不可被繼承,比如常用的String類就是最終類。

        修飾方法:當一個方法被final修飾的時候,表示該方法爲最終方法,這個方法不可被子類重寫,但是可被子類繼承。

        修飾變量: 如果該變量是基本數據類型,說明該變量爲一個常量,值不可修改。  如果變量爲引用數據類型,比如對象、數                             組,則該對象、數組本身可以修改,但指向該對象或數組的地址的引用不能修改。

       詳細解釋:https://www.cnblogs.com/chhyan-dream/p/10685878.html

                         https://www.cnblogs.com/tanshaoshenghao/p/10908771.html

5.Java 中的 Math.round(-1.5) 等於多少?

答: Math.round(-1.5)的返回值是-1。四捨五入的原理是在參數上加0.5然後做向下取整

6.String 屬於基礎的數據類型嗎? 

答:不屬於。這裏只要考察Java的基本數據類型有哪些。

                      Java 8種基本數據類型都有: byte char int double short long boolean  float

7..java 中操作字符串都有哪些類?它們之間有什麼區別?

答:Java操作字符串的類我知道的有三個,String StringBuffer StringBuilder。這三種都是通過char[]保存的字符串,

       String          :String修飾的是不可變的字符串,對String修飾的變量修改時相當於重新創建一個對象。 

       StringBuffer:  常用來操作一個可變的字符串,拼接字符串的方法是append(), StringBuffer中的方法大多是用synchronized                                  關鍵字修飾,因而是線程安全的,更加適用於多線程的情況下。

      StringBuilder:  常用來操作一個可變的字符串,拼接字符串的方法是append(),StringBuffer中的方法沒有用synchronized修                                    飾,因爲是線程不安全的,效率更高,更加適用於單線程的情況下。

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

 答:  不一樣。

         String str="i"  :是指將i在內存的地址指向str這個變量,如果此時有一個變量str2 的值爲i 此時str 和str2共用的是一塊內                                          存。

        String str=new String("i") : 則是將new String("i");的對象地址賦給str2,需要注意的是這句話是新創建了一個對象。如果此                                   時 String str4= new String("i");那麼相當於又創建了一個新的對象,然後將對象的地址值賦給str4,雖然str2的                                   值和str4的值是相同的,但是他們依然不是同一個對象了。

9.如何將字符串反轉?

答: 可以使用StringBuffer StringBuilder 的reverse方法,還可以自己實現。

       詳細解釋: 舉個例子,https://blog.csdn.net/meism5/article/details/89329699 

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

答: equals()  spilt()  indexOf ()  charAt() length()  replace()  trim()   getBytes()      toLowerCase()  toUpperCase()  substring()

  1. equals()             主要用來判斷倆個字符串是否相等
  2. spilt()                 主要是對字符串進行切割,返回字符串數組
  3. indexOf             主要是用來返回指定字符串的索引
  4. charAt()             根據指定字符得索引
  5. length()             主要是返回字符串的長度
  6. replace()           主要是用來字符串的替換
  7. trim()                 去除字符串倆端的空白
  8. getBytes()         返回字符串的byte類型數組
  9. toLowerCase()  字符串轉小寫
  10. toUpperCase    字符串轉大寫
  11. substring           切割字符串

 

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

答:不必須。  

       通常情況下我們使用abstract去修飾一個抽象類。

       抽象類的總結:

  • 1. 抽象類不能被實例化(初學者很容易犯的錯),如果被實例化,就會報錯,編譯無法通過。只有抽象類的非抽象子類可以創建對象。

  • 2. 抽象類中不一定包含抽象方法,但是有抽象方法的類必定是抽象類。

  • 3. 抽象類中的抽象方法只是聲明,不包含方法體,就是不給出方法的具體實現也就是方法的具體功能。

  • 4. 構造方法,類方法(用 static 修飾的方法)不能聲明爲抽象方法。

  • 5. 抽象類的子類必須給出抽象類中的抽象方法的具體實現,除非該子類也是抽象類。

      抽象類需要注意的點:

  • 1.如果一個類包含抽象方法,那麼該類必須是抽象類。
  • 2.任何子類必須重寫父類的抽象方法,或者聲明自身爲抽象類
  • 3.抽象類中可以不定義抽象方法,抽象方法目的僅僅爲了不讓該類創建對象。
  • 4.抽象關鍵字abstract與 final , private , static 這三個關鍵字不共存。

     

12.普通類和抽象類有哪些區別?

答:

  • 抽象類不能被實例化
  • 抽象類可以有抽象方法,抽象方法只需申明,無需實現
  • 含有抽象方法的類必須申明爲抽象類
  • 抽象的子類必須實現抽象類中所有抽象方法,否則這個子類也是抽象類
  • 抽象方法不能被聲明爲靜態
  • 抽象方法不能用private修飾
  • 抽象方法不能用final修飾

 

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

答:不能。

  抽象類可被繼承,而被final修飾的話,說明該類不可修改,不可繼承。  這裏的讀者還可自行去看一下final關鍵字的用法。

14.接口和抽象類有什麼區別? 

 抽象類和接口的區別:

       接口:1.接口使用interface修飾     2.接口不能實例化      3.Java 支持單繼承,即只能繼承一個類,但是可以實現多個接口。

                  4.接口中方法是抽象方法,不能實現

       抽象類:1. 抽象類使用abstract修飾  2.接口中包含抽象方法和非抽象方法    3.抽象類不可以實例化。    4. 有抽象方法的類                          一 定是抽象類,抽象方法中沒有具體實現。 5.如果一個子類實現了父類(抽象類)的所有抽象方法,那麼該子類                          可以不必是抽象類,否則就是抽象類。

 

15.java 中 IO 流分爲幾種? 

答:根據流的流向分爲輸入流和輸出流。 根據操作單元可以劃分爲字節流和字符流。根據流的角色可以分爲節點流和處理流。

 

  • InputStream/Reader: 所有的輸入流的基類,前者是字節輸入流,後者是字符輸入流。
  • OutputStream/Writer: 所有輸出流的基類,前者是字節輸出流,後者是字符輸出流。

 按照操作方式可以分爲:

å¨è¿éæå¥å¾çæè¿°

詳細解釋https://blog.csdn.net/weixin_43643277/article/details/96282707

 

16.BIO、NIO、AIO 有什麼區別?

答:IO的方式通常分爲幾種,同步阻塞的BIO、同步非阻塞的NIO、異步非阻塞的AIO。

    BIO:  在jdk1.4出現之前,我們建立網絡連接一般使用BIO,需要先在服務端啓動一個ServerSocket,然後在客戶端啓動Socket                 來對服務端進行通信。我們使用BIO的時候往往會引入多線程,每個連接一個單獨的線程。BIO是一個連接一個線程。

             BIO適用於適用於連接數目比較小且固定的架構,這種方式對服務器資源要求比較高,併發侷限於應用中,JDK1.4以前                的唯一選擇,但程序直觀簡單易理解。

    NIO:  NIO本身是基於事件驅動思想來完成的,其主要想解決的是BIO的大併發問題。NIO則是使用單線程或者只使用少量                      的多線程,每個連接共用一個線程。NIO是一個請求一個線程。

             NIO方式適用於連接數目多且連接比較短(輕操作)的架構,比如聊天服務器,併發侷限於應用中,編程比較複雜,                     JDK1.4開始支持

     AIO : 異步非阻塞,服務器實現模式爲一個有效請求一個線程,客戶端的I/O請求都是由OS先完成了再通知服務器應用去                       啓動線程進行處理,

              AIO方式使用於連接數目多且連接比較長(重操作)的架構,比如相冊服務器,充分調用OS參與併發操作,編程比較復                雜,JDK7開始支持。

    詳細地址: https://blog.csdn.net/skiof007/article/details/52873421

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

  1.  Files.exists() 檢測文件路徑是否存在
  2.  Files.createFile()創建文件
  3.  Files.createDirectory()創建文件夾
  4.  Files.delete() 刪除文件或者目錄
  5.  Files.copy() 複製文件
  6.  Files.move() 移動文件
  7.  Files.size()查看文件個數
  8.  Files.read() 讀取文件
  9.  Files.write()寫入文件

 

後面慢慢補充。。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章