楊老師課堂之JavaSe部分面試題

楊校發表於2018-06-01
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/kese7952/article/details/80535100

Java基礎面試題

1.簡述 path 和 classpath 的區別

  • path:path 環境變數是系統環境變數中的一種,它用於儲存一系列可執行檔案的路徑, 每個路徑之間以分號分隔。當在命令列視窗執行一個可執行檔案時,作業系統首先會在當前 目錄下查詢是否存在該檔案,如果不存在會繼續在 path 環境變數中定義的路徑下去尋找這 個檔案,如果仍未找到,系統會報錯。

  • classpath:classpath 環境變數也是系統環境變數中的一種,它用於儲存一系列類(.class) 檔案的路徑。當 Java 虛擬機器需要執行一個類時,會先在 classpath 環境變數中所定義的路徑 下去尋找所需的 class 檔案。如果 classpath 的路徑最後有分號,則在 classpath 中找不到時, 再到當前路徑查詢;如果最後無分號,則只在 classpath 設定的路徑中查詢。

2.請說說你對 JVM 的理解

​ JVM 是 JavaVirtual Machine 的縮寫,全稱是 Java 虛擬機器。Java 語言的一個非常重要的 特性就是跨平臺性,而 Java 虛擬機器是實現這一特性的關鍵。不同的作業系統需要使用不同 版本的虛擬機器,這種方式使得 Java 語言能夠“一次編寫,到處執行”。Java 語言編譯程式只 需生成在 Java 虛擬機器上執行的目的碼(位元組碼),就可以在多種平臺上不加修改地執行。 Java 虛擬機器在執行位元組碼時,把位元組碼解釋成具體平臺上的機器指令執行。

3.char 型變數中能不能存貯一箇中文漢字?請說出理由

​ char 型變數中能不能存貯一箇中文漢字?請說出理由。 char 型變數是用來儲存 Unicode 編碼的字元的, Unicode 編碼字符集中包含了漢字,所以,char 型變數中當然可以儲存漢字啦。不過,如果某個特殊的漢字沒有被包含在 Unicode 編碼 字符集中,那麼,這個 char 型變數中就不能儲存這個特殊漢字。補充說明:Unicode 編碼佔 用兩個位元組,所以 char 型別的變數也是佔用兩個位元組。

4.簡述 break、continue 和 return 語句的區別。

  • break 語句:在 switch 條件語句和迴圈語句中都可以使用 break 語句。當它出現在 switch 條件語句中時,作用是終止某個 case 並跳出 switch 結構。當它出現在迴圈語句中,作用是 跳出迴圈語句,執行後面的程式碼
  • continue 語句:continue 語句用在迴圈語句中,它的作用是終止本次迴圈,執行下一次循 環。
  • return 語句:return 語句可以用於從當前的方法中退出,返回到該呼叫的方法的語句處, 繼續執行。return 返回一個值給呼叫該方法的語句,返回值的資料型別必須與方法的宣告中 的返回值的型別一致。

5.請簡述方法重寫和方法過載的區別?

  • 方法重寫(Overriding)和方法過載(Overloading)是 Java 多型性的不同表現。
  • 重寫 Overriding 是父類與子類之間多型性的一種表現,過載 Overloading 是一個類中多型性的一 種表現。 如果在子類中定義某方法與其父類有相同的名稱和引數,我們說該方法被重寫 (Overriding)。
  • 子類的物件使用這個方法時,將呼叫子類中的定義,對它而言,父類中的定義 如同被“遮蔽”了。 如果在同一個類中定義了多個同名的方法,它們或有不同的引數個數或有不同的引數類 型,則稱為方法的過載(Overloading)

6.請簡述 Error 和 Exception 有什麼區別?

  • Error 表示恢復不是不可能但很困難的情況下的一種嚴重問題,比如說記憶體溢位,僅靠修 改程式本身是不能處理這樣的情況的。
  • Exception 表示程式本身可以處理的錯誤,在開發 Java 程式中進行的異常處理,都是針 對 Excption 類及其子類。在 Exception 類的眾多子類中有一個特殊的 RuntimeException 類, 該類及其子類用於表示執行時異常,除了此類,Exception 類下所有其它的子類都用於表示 編譯時異常。

7.請簡述 synchronized 和 java.util.concurrent.locks.Lock 的異同點

  • 相同點:Lock 能完成 synchronized 所實現的所有功能。
  • 不同點:總的來說,Lock 更加靈活。Lock 有比 synchronized 更精確的執行緒予以和更好的 效能。synchronized 會自動釋放鎖,但是 Lock 一定要求程式設計師手工釋放,並且必須在 finally 從句中釋放。synchronized 修飾方法時表示同一個物件在不同的執行緒中表現為同步佇列。如 果例項化不同的物件 那麼 synchronized 就不會出現同步效果了。

8.程式和執行緒之間有什麼不同

  • 在一個作業系統中,每個獨立執行的程式都可以稱為一個程式,也就是“正在執行的程 序”。而在程式中還可以有多個執行單元同時執行,這些執行單元可以看作程式執行的一條 條線索,被稱為執行緒。
  • Java 執行環境是一個包含了不同的類和程式的單一程式。執行緒可以被 稱為輕量級程式。執行緒需要較少的資源來建立和駐留在程式中,並且可以共享程式中的資源。

9.請簡述裝箱和拆箱的概念。

​ 包裝類和基本資料型別在進行轉換時,引入了裝箱和拆箱的概念,其中裝箱是指將基本 資料型別的值轉為引用資料型別,反之,拆箱是指將引用資料型別的物件轉為基本資料型別。

10.請簡述 Hashtable 和 HashMap 的區別。

​ Hashtable 繼承自 Dictionary 類,而 HashMap 是 Java1.2 引進的 Map 介面的一個實現 HashMap允許將null作為一個entry的key或者value,而Hashtable不允許還有就是, HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsvalue 和 containsKey。

​ 最大的不同是, Hashtable 的方法是執行緒安全的,而 HashMap 不是,在多個執行緒訪問 Hashtable 時,不需要 自己為它的方法實現同步,而 HashMap 就必須為之提供外同步。

11.請簡述使用泛型的優點。

(1)提高了 Java 程式的型別安全,在編譯時期解決錯誤,避免程式在執行時期發生錯 誤。

(2)消除強制型別轉換。

(3)泛型可以替代 Object 型別的引數和變數的使用,帶來性 能的大幅提高並增加程式碼的可讀性。

12.簡述 TCP/IP 協議的層次結構

​ TCP/IP 協議的層次結構比較簡單,共分為四層,分別是應用層、傳輸層、網路層和鏈 路層。其中鏈路層是用於定義物理傳輸通道,通常是對某些網路連線裝置的驅動協議,例如 針對光纖、雙絞線提供的驅動。

​ 網路層是整個 TCP/IP 協議的核心,它主要用於將傳輸的數 據進行分組,將分組資料傳送到目標計算機或者網路。運輸層主要使網路程式進行通訊,在 進行網路通訊時,可以採用 TCP 協議,也可以採用 UDP 協議。應用層主要負責應用程式的 協議,例如 HTTP 協議、FTP 協議等。

image
作者: 楊校

出處: https://blog.csdn.net/kese7952

分享是快樂的,也見證了個人成長曆程,文章大多都是工作經驗總結以及平時學習積累,基於自身認知不足之處在所難免,也請大家指正,共同進步。

本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出, 如有問題, 可郵件(397583050@qq.com)諮詢。


相關文章