1、簡述path和classpath的區別。
path:path環境變量是系統環境變量中的一種,它用於保存一系列可執行文件的路徑,每個路徑之間以分號分隔。當在命令行窗口運行一個可執行文件時,操作系統首先會在當前目錄下查找是否存在該文件,如果不存在會繼續在path環境變量中定義的路徑下去尋找這個文件,如果仍未找到,系統會報錯。
classpath:classpath環境變量也是系統環境變量中的一種,它用於保存一系列類(.class)文件的路徑。當Java虛擬機需要運行一個類時,會先在classpath環境變量中所定義的路徑下去尋找所需的class文件。如果classpath的路徑最后有分號,則在classpath中找不到時,再到當前路徑查找;如果最后無分號,則只在classpath設置的路徑中查找。
2、請說說你對JVM的理解。
JVM是Java Virtual Machine的縮寫,全稱是Java虛擬機。Java語言的一個非常重要的特性就是跨平台性,而Java虛擬機是實現這一特性的關鍵。不同的操作系統需要使用不同版本的虛擬機,這種方式使得Java語言能夠“一次編寫,到處運行”。Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(字節碼),就可以在多種平台上不加修改地運行。Java虛擬機在執行字節碼時,把字節碼解釋成具體平台上的機器指令執行。
3、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、請簡述垃圾回收的優點和原理。
Java語言中一個顯著的特點就是引入了垃圾回收機制,使得Java程序員在編寫程序的時候不再需要考慮內存管理。垃圾回收可以有效的防止內存泄露,有效地利用可以使用的內存。垃圾回收器通常是作為一個單獨的低級別的線程運行,不可預知的情況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清楚和回收,程序員不能實時的調用垃圾回收器對某個對象或所有對象進行垃圾回收。
6、請說說你所知道的Java中的代碼塊。
在Java中共有四種代碼塊,它們分別是靜態代碼塊、構造代碼塊、普通代碼塊和同步代碼塊。
靜態代碼塊:在Java類中,使用一對大括號包圍起來的若干行代碼被稱為一個代碼塊,用static關鍵字修飾的代碼塊稱為靜態代碼塊。當類被加載時,靜態代碼塊會執行,由於類只加載一次,因此靜態代碼塊只執行一次。在程序中,通常會使用靜態代碼塊來對類的成員變量進行初始化。
構造代碼塊:直接在類中定義的沒有加static關鍵字的代碼塊稱為構造代碼塊。構造代碼塊在每次創建對象是都會執行。
普通代碼塊:在方法或語句中出現的代碼塊就稱為普通代碼塊。普通代碼塊和一般的語句執行順序由他們在代碼中出現的次序決定,即“先出現先執行”。
同步代碼塊:Java對於多線程的安全問題提供了專業的解決方式,就是同步代碼塊。
synchronized(對象)//這個對象可以為任意對象
{
需要被同步的代碼
}
對象如同鎖,持有鎖的線程可以在同步中執行,沒持有鎖的線程即使獲取CPU的執行權,也進不去。
7、請簡述方法重寫和方法重載的區別?
方法重寫(Overriding)和方法重載(Overloading)是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。
如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。
如果在同一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。
8、簡述Error和Exception有什么區別?
Error表示恢復不是不可能但很困難的情況下的一種嚴重問題,比如說內存溢出,僅靠修改程序本身是不能處理這樣的情況的。
Exception表示程序本身可以處理的錯誤,在開發Java程序中進行的異常處理,都是針對Excption類及其子類。在Exception類的眾多子類中有一個特殊的RuntimeException類,該類及其子類用於表示運行時異常,除了此類,Exception類下所有其它的子類都用於表示編譯時異常。
9、請簡述synchronized和java.util.concurrent.locks.Lock的異同點。
相同點:Lock能完成synchronized所實現的所有功能。
不同點:總的來說,Lock更加靈活。Lock有比synchronized更精確的線程予以和更好的性能。synchronized會自動釋放鎖,但是Lock一定要求程序員手工釋放,並且必須在finally從句中釋放。synchronized 修飾方法時表示同一個對象在不同的線程中表現為同步隊列。如果實例化不同的對象 那么synchronized就不會出現同步效果了。
10、進程和線程之間有什么不同?
在一個操作系統中,每個獨立執行的程序都可以稱為一個進程,也就是“正在運行的程序”。而在進程中還可以有多個執行單元同時執行,這些執行單元可以看作程序執行的一條條線索,被稱為線程。Java運行環境是一個包含了不同的類和程序的單一進程。線程可以被稱為輕量級進程。線程需要較少的資源來創建和駐留在進程中,並且可以共享進程中的資源。
11、請簡述int和Integer有什么區別。
int是Java中的基本數據類型,Integer是Java為int提供的包裝類。int類型的初始值為0,而Integer的初始值為null。Java為每個基本類型都提供了對應的包裝類,包裝類屬於引用類型。
12、請簡述裝箱和拆箱的概念。
包裝類和基本數據類型在進行轉換時,引入了裝箱和拆箱的概念,其中裝箱是指將基本數據類型的值轉為引用數據類型,反之,拆箱是指將引用數據類型的對象轉為基本數據類型。
13、請簡述Hashtable和HashMap的區別。
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map接口的一個實現HashMap允許將null作為一個entry的key或者value,而Hashtable不允許還有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。最大的不同是,Hashtable的方法是線程安全的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap就必須為之提供外同步。
14、請簡述使用泛型的優點。
(1)提高了Java程序的類型安全,在編譯時期解決錯誤,避免程序在運行時期發生錯誤。(2)消除強制類型轉換。(3)泛型可以替代Object類型的參數和變量的使用,帶來性能的大幅提高並增加代碼的可讀性。
15、簡述什么是對象序列化,以及如何實現序列化?
程序運行時,會在內存中創建多個對象,然而程序結束后,這些對象便被當做垃圾回收了。如果希望永久保存這些對象,則可以將對象轉為字節數據寫入到硬盤上,這個過程稱為對象序列化。
序列化的實現:將需要被序列化的類實現Serializable接口,該接口沒有需要實現的方法,implements Serializable只是為了標注該對象是可被序列化的,然后使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接着,使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數為obj的對象寫出(即保存其狀態)。
16、簡述字符編碼和解碼。
把字符串轉換成計算機識別的字節序列稱為編碼,而把字節序列轉換為普通人能看懂的明文字符串稱為解碼
在計算機程序中,如果要把字節數組轉換為字符串,可以通過String類的構造方法String(byte[] bytes,String charsetName)把字節數組按照指定的碼表解碼成字符串(如果沒有指定字符碼表,則用操作系統默認的字符碼表,如中文的Windows系統默認使用的字符碼表是GBK),反之,可以通過使用String類中的getBytes(String charsetName)方法把字符串按照指定的碼表編碼成字節數組。
17、簡述java.awt包中提供了哪些布局管理器。
在java.awt包中提供了五種布局管理器,分別是FlowLayout(流式布局管理器)、BorderLayout(邊界布局管理器)、GridLayout(網格布局管理器)、GridBagLayout(網格包布局管理器)和CardLayout(卡片布局管理器)。
18、簡述在事件處理機制中所涉及到的概念。
事件處理機制專門用於響應用戶的操作,比如,想要響應用戶的點擊鼠標、按下鍵盤等操作,就需要使用AWT的事件處理機制。在學習如何使用AWT事件處理機制之前,首先向大家介紹幾個比較重要的概念,具體如下所示:
事件對象(Event):封裝了GUI組件上發生的特定事件(通常就是用戶的一次操作)。
事件源(組件):事件發生的場所,通常就是產生事件的組件。
監聽器(Listener):負責監聽事件源上發生的事件,並對各種事件做出響應處理的對象(對象中包含事件處理器)。
事件處理器:監聽器對象對接收的事件對象進行相應處理的方法。
19、簡述TCP/IP協議的層次結構。
TCP/IP協議的層次結構比較簡單,共分為四層,分別是應用層、傳輸層、網絡層和鏈路層。其中鏈路層是用於定義物理傳輸通道,通常是對某些網絡連接設備的驅動協議,例如針對光纖、雙絞線提供的驅動。網絡層是整個TCP/IP協議的核心,它主要用於將傳輸的數據進行分組,將分組數據發送到目標計算機或者網絡。運輸層主要使網絡程序進行通信,在進行網絡通信時,可以采用TCP協議,也可以采用UDP協議。應用層主要負責應用程序的協議,例如HTTP協議、FTP協議等。
20、簡述你對IP地址的認識。
要想使網絡中的計算機能夠進行通信,必須為每台計算機指定一個標識號,通過這個標識號來指定接受數據的計算機或者發送數據的計算機。在TCP/IP協議中,這個標識號就是IP地址,它可以唯一標識一台計算機,目前,IP地址廣泛使用的版本是IPv4,它是由4個字節大小的二進制數來表示,由於二進制形式表示的IP地址非常不便記憶和處理,因此通常會將IP地址寫成十進制的形式,每個字節用一個十進制數字(0-255)表示,數字間用符號“.”分開,如 “10.0.0.1”。