java 面試題總結

來源:互聯網
上載者:User

標籤:java面試題   多線程   面試題   servlet   

1、什麼是JVM及其工作原理


2、java中equal和==的區別


3、java中介面和抽象類別的區別


4、private、protected、public和default的區別 


5、String是最基本的資料類型嗎?

基礎資料型別 (Elementary Data Type)包括boolean、byte、char、int、short、long、float、double。

java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個類。為了提高效率節省空間的,我們應該用StringBuffer類

6、String、StringBuffer、StringBuilder的區別

String:不可變的對象,對String對象進行改變的時候其實都等同於產生了一個新的String對象,然後將引用指向新的String對象,原String對象GC回收。
StringBuffer 字串變數(安全執行緒),適用於多線程程式中,保證同步性。

StringBuilder 字主符串變數(非安全執行緒),適用於單線程程式中,不保證同步性。簡要的說, String 類和 StringBuffer/StringBuilder 類的要效能區別其實在於 String 是不可變的對象, 因此在每次對 String 類進行改變的時候其實都等同於產生了一個新的 String 對象,然後將指標指向新的 String 對象,所以經常改變內容的字串最好不要用 String ,因為每次產生對象都會對系統效能產生影響,特別當記憶體中無引用對象多了以後, JVM 的 GC 就會開始工作,那速度是一定會相當慢的。而如果是使用 StringBuffer/StringBuilder 類則結果就不一樣了,每次結果都會對 StringBuffer/StringBuilder 對象本身進行操作,而不是產生新的對象,再改變對象引用。所以在一般情況下推薦使用 StringBuffer/StringBuilder ,特別是字串對象經常改變的情況下。

7、int和Integer的區別

int與integer的區別從大的方面來說就是基礎資料型別 (Elementary Data Type)與其封裝類的區別:int 是基本類型,直接存數值,而integer是對象,用一個引用指向這個對象。當需要往ArrayList,HashMap中放東西時,像int,double這種內建類型是放不進去的,因為容器都是裝 object的,這是就需要這些內建類型的外覆類了。Java中每種內建類型都有相應的外覆類。

8、運行時異常與一般異常的不同

Java 提供了兩類主要的異常 :runtime exception 和 checked exception 。 checked 異常也就是我們經常遇到的 IO 異常,以及 SQL 異常都是這種異常。 對於這種異常, JAVA 編譯器強制要求我們必需對出現的這些異常進行 catch 。所以,面對這種異常不管我們是否願意,只能自己去寫一大堆 catch 塊去處理可能的異常。但是另外一種異常: runtime exception ,也稱運行時異常,我們可以不處理。當出現這樣的異常時,總是由虛擬機器 接管。比如:我們從來沒有人去處理過 NullPointerException 異常,它就是運行時異常,並且這種異常還是最常見的異常之一。運行時異常是 Exception 的子類,也有一般異常的特點,是可以被 Catch 塊處理的。只不過往往我們不對他處理罷了。也就是說,你如果不對運行時異常進行處理,那麼出現運行時異常之後,要麼是線程中止,要麼是主程式終止。

9、說出ArrayList,Vector, LinkedList的儲存效能和特性
ArrayList和Vector都是使用數組方式儲存資料,此數組元素數大於實際儲存的資料以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等記憶體操作,所以尋找資料快而插入資料慢,Vector由於使用了synchronized方法(安全執行緒),通常效能上較ArrayList差,而LinkedList使用雙向鏈表實現儲存,按序號索引資料需要進行前向或後向遍曆,但是插入資料時只需要記錄本項的前後項即可,所以插入速度較快
另外:HashMap也是不同步的,而HashTable是同步的,即安全執行緒的
10、servlet相關問題
載入:可以在servlet容器如tomcat啟動時進行載入,也可以在客戶訪問時進行載入,具體載入的時機是有web.xml設定檔中的配置項決定的。
初始化:調用init方法
提供服務:調用service方法,如doGet、doPost方法
銷毀:調用destory方法
servlet是單例模式,tomcat啟動一個servlet執行個體後,為所有的訪問該servlet的客戶請求服務,所以在編寫servlet時要注意安全執行緒,不能在類中定義可變成員變數,應該把成員變數定義在doGet等方法中
11、http的get請求與post請求的區別
get請求一般用於從伺服器擷取資料,一般沒有包體;post請求一般向伺服器發送資料,資料一般放在請求包體中。get請求也可以向伺服器發送資料,但資料要放在url中,用&分割的鍵值對的方式發送,這樣一般只能發送一些安全性不高且資料量不大的資料
12、final, finally, finalize的區別。 
final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結構的一部分,表示總是執行。
finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉檔案等。
多線程機制
13、實線程的方法,有什麼區別現

繼承Thread與實現Runnable介面。啟動方法不一樣。Thread1繼承,Thread2實現Runnable介面,則啟動一個Thread1線程可以使用new Thread1().start(),而啟動Thread2線程則new Thread(new Thread2()).start()。

14、可以使用run方法啟動一個線程嗎?
啟動一個線程應該使用start方法,線程的run方法可以直接調用,但是不會啟動一個新的線程,只是在原來的線程中調用了run方法而已。
15、sleep方法與wait方法的區別,帶時間參數時有什麼區別?
sleep()是線程的靜態方法,使當前線程(即調用該方法的線程)暫停執行一段時間,讓其他線程有機會繼續執行,但它並不釋放對象鎖。也就是如果有Synchronized同步塊,其他線程仍然不可以訪問共用資料。wait()方法使當前線程暫停執行並釋放對象鎖標誌,讓其他線程可以進入Synchronized資料區塊,當前線程被放入對象等待池中。
16、wait()和notify()、notifyAll() 
這三個方法用於協調多個線程對共用資料的存取,所以必須在Synchronized語句塊內使用這三個方法。Synchronized這個關鍵字用於保護共用資料,阻止其他線程對共用資料的存取。 
wait()方法使當前線程暫停執行並釋放對象鎖標誌,讓其他線程可以進入Synchronized資料區塊,當前線程被放入對象等待池中。當調用 notify()方法後,將從對象的等待池中移走一個任意的線程並放到鎖標誌等待池中,只有鎖標誌等待池中的線程能夠擷取鎖標誌;如果鎖標誌等待池中沒有線程,則notify()不起作用。 notifyAll()則從對象等待池中移走所有等待那個對象的線程並放到鎖標誌等待池中。 
17、同步和非同步有何異同,在什麼情況下分別使用他們?舉例說明。
 答:如果資料將線上程間共用。例如正在寫的資料以後可能被另一個線程讀到,或者正在讀的資料可能已經被另一個線程寫過了,那麼這些資料就是共用資料,必須進行同步存取。當應用程式在對象上調用了一個需要花費很長時間來執行的方法,並且不希望讓程式等待方法的返回時,就應該使用非同步編程,在很多情況下採用非同步途徑往往更有效率。
18、當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。
19、請說出你所知道的線程同步的方法。
wait():使一個線程處於等待狀態,並且釋放所持有的對象的lock。
sleep():使一個正在啟動並執行線程處於睡眠狀態,是一個靜態方法
notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先順序。
notifyAll():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。
20、簡述synchronized和java.util.concurrent.locks.Lock的異同 ?
主要相同點:Lock能完成synchronized所實現的所有功能
主要不同點:Lock有比synchronized更精確的線程語義和更好的效能。synchronized會自動釋放鎖,而Lock一定要求程式員手工釋放,並且必須在finally從句中釋放。
21、在靜態方法上使用同步時會發生什麼事? 
同步靜態方法時會擷取該類的“Class”對象,所以當一個線程進入同步的靜態方法中時,線程監視器擷取類本身的對象鎖,其它線程不能進入這個類的任何靜態同步方法。它不像執行個體方法,因為多個線程可以同時訪問不同執行個體同步執行個體方法。 
22、什麼是序列化?何須進行序列化與還原序列化 


23、java的三大架構?什麼是MVC模式

Structs、Spring、Hibernate



java 面試題總結

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.