標籤:java java面試試題
1.如何格式化日期
解答:
Date now=new Date();
SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
String formatNow=sdf.format(now);
變數formatNow就是格式化好的日期。
2.多線程有幾種實現方法,都是什麼?同步的方法有幾種,都是什嗎?
解答:(1)多線程有兩種實現方法:繼承Thread類或者實現Runnable介面。
承java.lang.Thread,並重寫run()方法,將線程的執行主體放入其中;實現java.lang.Runnable介面,實現它的run方法,將線程的執行主體放入其中。
這兩種實現方式的區別並不大。繼承Thread類的方式實現起來較為簡單,但是繼承它的類就不能再繼承別的類了,因此也就不能繼承別的類的有用的方法了。而使用是想Runnable介面的方式就不存在這個問題了,而且這種實現方式將線程主體和線程對象本身分離開來,邏輯上也較為清晰,所以推薦大家更多地採用這種方式。
(2)實現同步也有兩種方法:一種是同步方法,另一種是同步代碼塊。
同步方法是在方法傳回型別前面加上synchronized關鍵字
同步代碼塊是synchronized (這裡寫需要同步的對象){…}
3.談一下聚簇索引和非聚簇索引的區別以及各自的優缺點。
解答:
叢集索引,表中儲存的資料按照索引的順序儲存,檢索效率比普通索引高,但對資料新增/修改/刪除的影響比較大 非叢集索引,不影響表中的資料存放區順序,檢索效率比叢集索引低,對資料新增/修改/刪除的影響很小
4.死結的必要條件?怎麼克服?
解答:產生死結的四個必要條件:
互斥條件:一個資源每次只能被一個進程使用。
請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。
迴圈等待條件:若干進程之間形成一種頭尾相接的迴圈等待資源關係。
這四個條件是死結的必要條件,只要系統發生死結,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死結。
死結的解決方案:
a 撤消陷於死結的全部進程; b逐個撤消陷於死結的進程,直到死結不存在; c從陷於死結的進程中逐個強迫放棄所佔用的資源,直至死結消失。 d從另外一些進程那裡強行剝奪足夠數量的資源分派給死結進程,以解除死結狀態
5.在伺服器的網路編程中,解決會話跟蹤的方法有:
A. 使用Cookie。
B. 使用URL重寫。
C. 使用隱藏的表單域。
D. 以上方法都不能單獨使用。
解答:ABC
6.記憶體回收的優點和原理。並考慮2種回收機制。
Java語言中一個顯著的特點就是引入了記憶體回收機制,使c++程式員最頭疼的記憶體管理的問題迎刃而解,它使得Java程式員在編寫程式的時候不再需要考慮記憶體管理。由於有個記憶體回收機制,Java中的對象不再有”範圍”的概念,只有對象的引用才有”範圍”。記憶體回收可以有效防止記憶體泄露,有效使用可以使用的記憶體。記憶體回收行程通常是作為一個單獨的低層級的線程運行,不可預知的情況下對記憶體堆中已經死亡的或者長時間沒有使用的對象進行清楚和回收,程式員不能即時的調用記憶體回收行程對某個對象或所有對象進行記憶體回收。回收機制有分代複製記憶體回收和標記記憶體回收,增量記憶體回收。
7.請說出你所知道的線程同步的方法。
wait():使一個線程處於等待狀態,並且釋放所持有的對象的lock。
sleep():使一個正在啟動並執行線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常。
notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先順序。
Allnotity():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是讓它們競爭.
8.GC是什麼? 為什麼要有GC? (基礎)。
GC是垃圾收集器。Java 程式員不用擔心記憶體管理,因為垃圾收集器會自動進行管理。要請求垃圾收集,可以調用下面的方法之一: System.gc() Runtime.getRuntime().gc()
9.Overload和Override的區別。
Overloaded的方法是否可以改變傳回值的類型? 方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被”屏蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變傳回值的類型。
Java面試題總結2(持續更新)