1.java
Person p = new Person();算法
建立一個對象都在內存中作了什麼事情?編程
1:先將硬盤上指定位置的Person.class文件加載進內存。數組
2:執行main方法時,在棧內存中開闢了main方法的空間(壓棧-進棧),而後在main方法的棧區分配了一個變量p。安全
3:在堆內存中開闢一個實體空間,分配了一個內存首地址值。服務器
4:在該實體空間中進行屬性的空間分配,並進行了默認初始化。網絡
5:對空間中的屬性進行顯示初始化。異步
6:進行實體的構造代碼塊初始化。編程語言
7:調用該實體對應的構造函數,進行構造函數初始化。()ide
8:將首地址賦值給p ,p變量就引用了該實體。(指向了該對象)
2、String與StringBuffer的區別。
答:String的長度是不可變的,StringBuffer的長度是可變的。若是你對字符串中的內容常常進行操做,特別是內容要修改時,那麼使用StringBuffer,若是最後須要String,那麼使用StringBuffer的toString()方法
3. 運行時異常與通常異常有何異同?
異常表示程序運行過程當中可能出現的非正常狀態,運行時異常表示虛擬機的一般操做中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,可是並不要求必須聲明拋出未被捕獲的運行時異常
4.Collection 和 Collections的區別
Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.
Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各類集合的搜索排序線程安全化等操做
5.HashMap和Hashtable的區別
HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,主要區別在於HashMap容許空(null)鍵值(key),因爲非線程安全,效率上可能高於Hashtable
HashMap容許將null做爲一個entry的key或者value,而Hashtable不容許
HashMap把Hashtable的contains方法去掉了,改爲containsvalue和containsKey由於contains方法容易讓人引發誤解
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現
最大的不一樣是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不須要本身爲它的方法實現同步,而HashMap 就必須爲之提供外同步
Hashtable和HashMap採用的hash/rehash算法都大概同樣,因此性能不會有很大的差別
6.final, finally, finalize的區別
final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承
finally是異常處理語句結構的一部分,表示老是執行
finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,能夠覆蓋此方法提供垃圾收集時的其餘資源回收,例如關閉文件等
7.sleep() 和 wait() 有什麼區別?
wait和sleep區別: 分析這兩個方法:從執行權和鎖上來分析:
wait:能夠指定時間也能夠不指定時間。不指定時間,只能由對應的notify或者notifyAll來喚醒。是Object的類的方法。
sleep:必須指定時間,時間到自動從凍結狀態轉成運行狀態(臨時阻塞狀態)。是Thread的方法。
wait:線程會釋放執行權,並且線程會釋放鎖。
Sleep:線程會釋放執行權,但不是不釋放鎖。
8.Overload和Override的區別Overloaded的方法是否能夠改變返回值的類型?
方法的重寫Overriding和重載Overloading是Java多態性的不一樣表現重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。若是在子類中定義某方法與其父類有相同的名稱和參數,咱們說該方法被重寫 (Overriding)子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。
若是在一個類中定義了多個同名的方法,它們或有不一樣的參數個數或有不一樣的參數類型,則稱爲方法的重載(Overloading)Overloaded的方法。是能夠改變返回值的類型
9.error和exception有什麼區別?
error 表示恢復不是不可能但很困難的狀況下的一種嚴重問題好比說內存溢出,不可能期望程序能處理這樣的狀況
exception 表示一種設計或實現問題也就是說,它表示若是程序運行正常,從不會發生的狀況
10.同步和異步有何異同,在什麼狀況下分別使用他們?舉例說明
若是數據將在線程間共享例如正在寫的數據之後可能被另外一個線程讀到,或者正在讀的數據可能已經被另外一個線程寫過了,那麼這些數據就是共享數據,必須進行同步存取
當應用程序在對象上調用了一個須要花費很長時間來執行的方法,而且不但願讓程序等待方法的返回時,就應該使用異步編程,在不少狀況下采用異步途徑每每更有效率
11.abstract class和interface有什麼區別?
抽象類: abstract
抽象:不具體,看不明白。抽象類表象體現。
在不斷抽取過程當中,將共性內容中的方法聲明抽取,可是方法不同,沒有抽取,這時抽取到的方法,並不具體,須要被指定關鍵字abstract所標示,聲明爲抽象方法。
抽象方法所在類必定要標示爲抽象類,也就是說該類須要被abstract關鍵字所修飾。
抽象類的特色:
1:抽象方法只能定義在抽象類中,抽象類和抽象方法必須由abstract關鍵字修飾(能夠描述類和方法,不能夠描述變量)。
2:抽象方法只定義方法聲明,並不定義方法實現。
3:抽象類不能夠被建立對象(實例化)。
4:只有經過子類繼承抽象類並覆蓋了抽象類中的全部抽象方法後,該子類才能夠實例化。不然,該子類仍是一個抽象類。
抽象類的細節:
1:抽象類中是否有構造函數?有,用於給子類對象進行初始化。
2:抽象類中是否能夠定義非抽象方法?
能夠。其實,抽象類和通常類沒有太大的區別,都是在描述事物,只不過抽象類在描述事物時,有些功能不具體。因此抽象類和通常類在定義上,都是須要定義屬性和行爲的。只不過,比通常類多了一個抽象函數。並且比通常類少了一個建立對象的部分。
3:抽象關鍵字abstract和哪些不能夠共存?final , private , static
4:抽象類中可不能夠不定義抽象方法?能夠。抽象方法目的僅僅爲了避免讓該類建立對象。
接 口:★★★★★
1:是用關鍵字interface定義的。
2:接口中包含的成員,最多見的有全局常量、抽象方法。
注意:接口中的成員都有固定的修飾符。
成員變量:public static final
成員方法:public abstract
interface Inter{
public static final int x = 3;
public abstract void show();
}
3:接口中有抽象方法,說明接口不能夠實例化。接口的子類必須實現了接口中全部的抽象方法後,該子類才能夠實例化。不然,該子類仍是一個抽象類。
4:類與類之間存在着繼承關係,類與接口中間存在的是實現關係。
繼承用extends ;實現用implements ;
5:接口和類不同的地方,就是,接口能夠被多實現,這就是多繼承改良後的結果。java將多繼承機制經過多實現來體現。
6:一個類在繼承另外一個類的同時,還能夠實現多個接口。因此接口的出現避免了單繼承的侷限性。還能夠將類進行功能的擴展。
7:其實java中是有多繼承的。接口與接口之間存在着繼承關係,接口能夠多繼承接口。
接口都用於設計上,設計上的特色:(能夠理解主板上提供的接口)
1:接口是對外提供的規則。
2:接口是功能的擴展。
3:接口的出現下降了耦合性。
抽象類和接口的共性:都是不斷向上抽取的結果。
抽象類和接口的區別:
1:抽象類只能被繼承,並且只能單繼承。
接口須要被實現,並且能夠多實現。
2:抽象類中能夠定義非抽象方法,子類能夠直接繼承使用。
接口中都有抽象方法,須要子類去實現。
3:抽象類使用的是 is a 關係。
接口使用的 like a 關係。
4:抽象類的成員修飾符能夠自定義。
接口中的成員修飾符是固定的。全都是public的。
12.heap和stack有什麼區別
棧是一種線形集合,其添加和刪除元素的操做應在同一時間段完成棧按照後進先出的方式進行處理
堆是棧的一個組成元素
13.GC是什麼? 爲何要有GC?
GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會致使程序或系統的不穩定甚至崩潰,Java提供的GC功能能夠自動監測對象是否超過做用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操做方法
14. short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,須要強制轉換類型)
short s1 = 1; s1 += 1;(能夠正確編譯)
15.簡述Java的異常處理機制。
答:Java採用「拋出-捕獲」的方式,一旦一個異常現象產生了,Runtime環境和應用程序拋出各類標準類型和自定義的異常,系統就能夠捕獲這些異常,並必定有相應的機制來處理它,確保不會產生死機、死循環或其餘對操做系統的損害,從而保證了整個程序運行的安全性。
16.試述throw語句與throws關鍵字之間的差異。
答:throw語句是在一個方法中用來直接拋出異常對象,其格式是:throw 異常對象;
throws用於一個方法聲明的首部,用來指出這個方法中可能產生若干異常。
17.接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?
接口能夠繼承接口抽象類能夠實現(implements)接口,抽象類可繼承實體類,但前提是實體類必須有明確的構造函數
18.List, Set, Map是否繼承自Collection接口?
List,Set是,Map不是
19.說出數據鏈接池的工做機制是什麼?
J2EE 服務器啓動時會創建必定數量的池鏈接,並一直維持很多於此數目的池鏈接。客戶端程序須要鏈接時,池驅動程序會返回一個未使用的池鏈接並將其表記爲忙,若是當前沒有空閒鏈接,池驅動程序就新建必定數量的鏈接,新建鏈接的數量有配置參數決定,當使用的池鏈接調用完成後,池驅動程序將此鏈接表記爲空閒,其餘調用就可使用這個鏈接 。
20.數組有沒有length()這個方法? String有沒有length()這個方法?
數組沒有length()這個方法,有length的屬性,String有length()這個方法
21.Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==仍是equals()? 它們有何區別?
Set裏的元素是不能重複的,那麼用iterator()方法來區分重複與否,equals()是判讀兩個Set是否相等
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,爲的是當兩個分離的對象的內容和類型相配的話,返回真值
22.構造器Constructor是否可被override?
構造器Constructor不能被繼承,所以不能重寫Overriding,但能夠被重載Overloading
23.Sting類是否能夠被繼承?
String類是final類故不能夠繼承
24.try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,何時被執行,在return前仍是後?
會執行,在return前執行
25.編程題: 用最有效率的方法算出2乘以8等於幾?
2 << 3
26.兩個對象值相同(x.equals(y) == true),但卻可有不一樣的hash code,這句話對不對?
不對,有相同的hash code
27.當一個對象被看成參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏究竟是值傳遞仍是引用傳遞?
是值傳遞。Java 編程語言只有值傳遞參數。當一個對象實例做爲一個參數被傳遞到方法中時,參數的值就是對該對象的引用,對象的內容能夠在被調用的方法中改變,但對象的引用是永遠不會改變的
28.編程題: 寫一個Singleton出來
Singleton模式主要做用是保證在Java應用程序中,一個類Class只有一個實例存在
通常Singleton模式一般有幾種種形式:
//餓漢式
class Single{
private Single(){} //私有化構造函數。
private static Single s = new Single(); //建立私有並靜態的本類對象。
public static Single getInstance(){ //定義公有並靜態的方法,返回該對象。
return s;
}
}
---------------------------------------------
//懶漢式:延遲加載方式。
class Single2{
private Single2(){}
private static Single2 s = null;
public static Single2 getInstance(){
if(s==null){
synchronized(Single2.Class){
if(s==null){
s = new Single2();
}
}
}
return s;
}
}
29.你所知道的集合類都有哪些?主要方法?
最經常使用的集合類是 List 和 Map List 的具體實現包括 ArrayList 和 Vector,它們是可變大小的列表,比較適合構建存儲和操做任何類型對象的元素列表 List 適用於按數值索引訪問元素的情形
Map 提供了一個更通用的元素存儲方法 Map 集合類用於存儲元素對(稱做"鍵"和"值"),其中每一個鍵映射到一個值
30.描述一下JVM加載class文件的原理機制?
JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader 是一個重要的Java運行時系統組件,它負責在運行時查找和裝入類文件的類
31.char型變量中能不能存貯一箇中文漢字?爲何?
可以定義成爲一箇中文的,由於java中以unicode編碼,一個char佔16個字節,因此放一箇中文是沒問題的
32.同步代碼塊和同步函數的區別?
同步代碼塊使用的鎖能夠是任意對象。
同步函數使用的鎖是this,靜態同步函數的鎖是該類的字節碼文件對象。
在一個類中只有一個同步,可使用同步函數。若是有多同步,必須使用同步代碼塊,來肯定不一樣的鎖。因此同步代碼塊相對靈活一些。
1,有些數據是對象特有的數據,是不能夠被靜態修飾的。由於那樣的話,特有數據會變成對象的共享數據。這樣對事物的描述就出了問題。因此,在定義靜態時,必需要明確,這個數據是不是被對象所共享的。
2,靜態方法只能訪問靜態成員,不能夠訪問非靜態成員。
由於靜態方法加載時,優先於對象存在,因此沒有辦法訪問對象中的成員。
3,靜態方法中不能使用this,super關鍵字。
由於this表明對象,而靜態在時,有可能沒有對象,因此this沒法使用。
4,主函數是靜態的。
成員變量和靜態變量的區別:
1,成員變量所屬於對象。因此也稱爲實例變量。
靜態變量所屬於類。因此也稱爲類變量。
2,成員變量存在於堆內存中。
靜態變量存在於方法區中。
3,成員變量隨着對象建立而存在。隨着對象被回收而消失。
靜態變量隨着類的加載而存在。隨着類的消失而消失。
4,成員變量只能被對象所調用 。
靜態變量能夠被對象調用,也能夠被類名調用。
因此,成員變量能夠稱爲對象的特有數據,靜態變量稱爲對象的共享數據。
靜態代碼塊、構造代碼塊、構造函數同時存在時的執行順序:靜態代碼塊 à 構造代碼塊 à 構造函數;
33.、UDP 和 TCP 鏈接有和異同?
答:TCP 協議是面向鏈接的,每一個數據包的傳輸過程是:先創建鏈路、數據傳輸、
而後清除鏈路。數據包不包含目的地址。受端和發端不但順序一致,並且內容相
同。它的可靠性高;UDP 協議是面向無鏈接的,每一個數據包都有完整的源、目的
地址及分組編號,各自在網絡中獨立傳輸,傳輸中無論其順序,數據到達收端後
再進行排序組裝,遇有丟失、差錯和失序等狀況,經過請求重發來解決。它的效
率比較高。