做爲一個大三在校生,很快就要去實習了,但總感受本身連一個剛入門的菜鳥都不如,哎。發現本身連那個程序員的門檻都還沒進,有點小傷心,不過傷心沒用,努力向前纔是咱們如今應該作的事情。java
下面是我以前在學校所從網上所摘抄的一些java面試題。只是做爲平時複習,加深本身的知識水平,無其餘用途。程序員
說出ArrayList,Vector, LinkedList的存儲性能和特性
ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增長和插入元素,它們都容許直接按序號索引元素,可是插入元素要涉及數組元素移動等內存操做,因此索引數據快而插入數據慢,Vector因爲使用了synchronized方法(線程安全),一般性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據須要進行前向或後向遍歷,可是插入數據時只須要記錄本項的先後項便可,因此插入速度較快。web
Java有沒有goto?
java中的保留字,如今沒有在java中使用。面試
啓動一個線程是用run()仍是start()?
啓動一個線程是調用start()方法,使線程所表明的虛擬處理機處於可運行狀態,這意味着它能夠由JVM調度並執行。這並不意味着線程就會當即運行。run()方法能夠產生必須退出的標誌來中止一個線程。數組
當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。安全
請說出你所知道的線程同步的方法。
wait():使一個線程處於等待狀態,而且釋放所持有的對象的lock。
sleep():使一個正在運行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常。
notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM肯定喚醒哪一個線程,並且不是按優先級。
Allnotity():喚醒全部處入等待狀態的線程,注意並非給全部喚醒線程一個對象的鎖,而是讓它們競爭。多線程
你所知道的集合類都有哪些?主要方法?
最經常使用的集合類是 List 和 Map。 List 的具體實現包括 ArrayList 和 Vector,它們是可變大小的列表,比較適合構建、存儲和操做任何類型對象的元素列表。 List 適用於按數值索引訪問元素的情形。
Map 提供了一個更通用的元素存儲方法。 Map 集合類用於存儲元素對(稱做「鍵」和「值」),其中每一個鍵映射到一個值。函數
描述一下JVM加載class文件的原理機制?
JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader 是一個重要的Java運行時系統組件。它負責在運行時查找和裝入類文件的類。性能
char型變量中能不能存貯一箇中文漢字?爲何?
可以定義成爲一箇中文的,由於java中以unicode編碼,一個char佔16個字節,因此放一箇中文是沒問題的編碼
多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?
多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口
同步的實現方面有兩種,分別是synchronized,wait與notify
線程的基本概念、線程的基本狀態以及狀態之間的關係
線程指在程序執行過程當中,可以執行程序代碼的一個執行單位,每一個程序至少都有一個線程,也就是程序自己。
Java中的線程有四種狀態分別是:運行、就緒、掛起、結束。
servlet的生命週期
web容器加載servlet,生命週期開始。經過調用servlet的init()方法進行servlet的初始化。經過調用service()方法實現,根據請求的不一樣調用不一樣的do***()方法。結束服務,web容器調用servlet的destroy()方法。
Abstract與interface的區別
在Java語言中,abstract class和interface是支持抽象類定義的兩種機制。
不能建立abstract類的實例,然而能夠建立一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。
不能有抽象構造函數或抽象靜態方法。
Abstract 類的子類爲它們父類中的全部抽象方法提供實現,不然它們也是抽象類。
接口(interface)是抽象類的變體。
在接口中,全部方法都是抽象,公開的。多繼承性可經過實現這樣的接口而得到。
接口中的全部方法都沒有一個有程序體。接口只能夠定義staticfinal成員變量。
接口的實現與子類類似,除了該實現類不能從接口定義中繼承行爲。
當類實現特殊接口時,它定義(即將程序體給予)全部這種接口的方法。而後,它能夠在實現了該接口的類的任何對象上調用接口的方法。
因爲有抽象類,它容許使用接口名做爲引用變量的類型。一般的動態聯編將生效。
引用能夠轉換到接口類型或從接口類型轉換,instanceof運算符能夠用來決定某對象的類是否實現了接口。
接口能夠繼承接口。抽象類能夠實現(implements)接口,抽象類是能夠繼承實體類,但前提是實體類必須有明確的構造函數。接口更關注「能實現什麼功能」,而無論「怎麼實現的」。
1.相同點
A. 二者都是抽象類,都不能實例化。
B. interface實現類及abstrctclass的子類都必需要實現已經聲明的抽象方法。
2. 不一樣點
A. interface須要實現,要用implements,而abstract class須要繼承,要用extends。
B. 一個類能夠實現多個interface,但一個類只能繼承一個abstract class。
C. interface強調特定功能的實現,而abstractclass強調所屬關係。
D. 儘管interface實現類及abstrct class的子類都必需要實現相應的抽象方法,但實現的形式不一樣。interface中的每個方法都是抽象方法,都只是聲明的(declaration,沒有方法體),實現類必需要實現。而abstractclass的子類能夠有選擇地實現。
這個選擇有兩點含義:
一是Abastract class中並不是全部的方法都是抽象的,只有那些冠有abstract的方法纔是抽象的,子類必須實現。那些沒有abstract的方法,在Abstrct class中必須定義方法體。
二是abstract class的子類在繼承它時,對非抽象方法既能夠直接繼承,也能夠覆蓋;而對抽象方法,能夠選擇實現,也能夠經過再次聲明其方法爲抽象的方式,無需實現,留給其子類來實現,但此類必須也聲明爲抽象類。既是抽象類,固然也不能實例化。
E. abstract class是interface與Class的中介。
interface是徹底抽象的,只能聲明方法,並且只能聲明pulic的方法,不能聲明private及protected的方法,不能定義方法體,也不能聲明實例變量。然而,interface卻能夠聲明常量變量,而且在JDK中不難找出這種例子。但將常量變量放在interface中違背了其做爲接口的做用而存在的宗旨,也混淆了interface與類的不一樣價值。若是的確須要,能夠將其放在相應的abstractclass或Class中。
abstract class在interface及Class中起到了承上啓下的做用。一方面,abstract class是抽象的,能夠聲明抽象方法,以規範子類必須實現的功能;另外一方面,它又能夠定義缺省的方法體,供子類直接使用或覆蓋。另外,它還能夠定義本身的實例變量,以供子類經過繼承來使用。
3. interface的應用場合
A. 類與類以前須要特定的接口進行協調,而不在意其如何實現。
B. 做爲可以實現特定功能的標識存在,也能夠是什麼接口方法都沒有的純粹標識。
C. 須要將一組類視爲單一的