Java面試基礎知識(1)

來源:互聯網
上載者:User

標籤:不能   stringbu   loaded   end   als   file   執行   管理   參考型別   

1、final, finally, finalize的區別final:修飾符(關鍵字)如果一個類被聲明為final,沒有子類也不能被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變數或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變數必須在聲明時給定初值,而在以後不可修改。被聲明為final的方法也同樣只能使用,不能重載finally:再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)。finalize:方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從記憶體中清除出去之前做必要的清理工作。 2、Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(介面) 匿名的內部類是沒有名字的內部類。不能extends(繼承) 其它類,但一個內部類可以作為一個介面,由另一個內部類實現。 3、&和&&的區別。 &是位元運算符。&&是布爾邏輯運算子。&&左邊為真右邊就不執行了,&一直執行完畢。 4、HashMap和Hashtable的區別。都屬於Map介面的類,以索引值對的形式儲存資料。HashMap 無序,它允許為空白Hashtable 類似於 HashMap,但是不允許空,它也比 HashMap 慢,因為它是同步的。 5、ArrayList和Vector的區別同步性:Vector是安全執行緒的,也就是說是同步的,而ArrayList是線程式不安全的,不是同步的資料增長:當需要增長時,Vector預設增長為原來一培,而ArrayList卻是原來的一半 6、Collection 和 Collections的區別。Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。Collection是集合類的上級介面,繼承與他的介面主要有Set 和List。 7、GC是什麼? 為什麼要有GC? 。GC是垃圾收集器。Java 程式員不用擔心記憶體管理,因為垃圾收集器會自動進行管理。Java提供的GC功能可以自動監測對象是否超過範圍從而達到自動回收記憶體的目的,Java語言沒有提供釋放已指派記憶體的顯示操作方法。要請求垃圾收集,可以調用下面的方法之一:System.gc() Runtime.getRuntime().gc()
System.gc();Runtime.getRuntime().gc();

8、String s = new String("xyz");建立了幾個String Object?

兩個對象,一個是“xyx”,一個是指向“xyx”的引用對象s。

 9、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11; 10、short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?short s1 = 1; s1 = s1 + 1;有錯,s1是short型,s1+1是int型,不能顯式轉化為short型。可修改為s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確。 11、sleep() 和 wait() 有什麼區別?他們最大本質的區別是:sleep()不釋放同步鎖,wait()釋放同步鎖  還有用法的上的不同是:sleep(milliseconds)可以用時間指定來使他自動醒過來,如果時間不到你只能調用interreput()來強行打斷;wait()可以用notify()直接喚起.sleep是Thread類的靜態方法。wait是Object的方法,也就是說可以對任意一個對象調用wait方法,調用wait方法將會將調用者的線程掛起,直到其他線程調用同一個對象的notify方法才會重新啟用調用者 12、數組有沒有length()這個方法? String有沒有length()這個方法?數組沒有length()這個方法,有length的屬性。  String有有length()這個方法。 13、Overload和Override的區別。Overloaded的方法是否可以改變傳回值的類型?方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重(Overloading)。Overloaded的方法是可以改變傳回值的類型。 14、"=="和equals方法究竟有什麼區別?==操作符專門用來比較兩個變數的值是否相等,也就是用於比較變數所對應的記憶體中所儲存的數值是否相同,要比較兩個基本類型的資料或兩個引用變數是否相等,只能用==操作符。如果一個變數指向的資料是物件類型的,那麼,這時候涉及了兩塊記憶體,對象本身佔用一塊記憶體(堆記憶體),變數也佔用一塊記憶體,例如Objet obj = new Object();變數obj是一個記憶體,new Object()是另一個記憶體,此時,變數obj所對應的記憶體中儲存的數值就是對象佔用的那塊記憶體的首地址。對於指向物件類型的變數,如果要比較兩個變數是否指向同一個對象,即要看這兩個變數所對應的記憶體中的數值是否相等,這時候就需要用==操作符進行比較。equals方法是用於比較兩個獨立對象的內容是否相同,就好比去比較兩個人的長相是否相同,它比較的兩個對象是獨立的。例如,對於下面的代碼:String a=new String("foo");String b=new String("foo");兩條new語句建立了兩個對象,然後用a/b這兩個變數分別指向了其中一個對象,這是兩個不同的對象,它們的首地址是不同的,即a和b中儲存的數值是不相同的,所以,運算式a==b將返回false,而這兩個對象中的內容是相同的,所以,運算式a.equals(b)將返回true。 15、error和exception有什麼區別?error 表示很難恢複的一種嚴重問題。比如說記憶體溢出。不可能指望程式能處理這樣的情況。exception 表示一種設計或實現問題。也就是說,它表示如果程式運行正常,從不會發生的情況Exception表示程式需要捕捉和處理的的異常;Error表示系統層級的錯誤和程式無需處理的。 16、List, Set, Map是否繼承自Collection介面?    List,Set是     Map不是 17、abstract class和interface有什麼區別?聲明方法的存在而不去實現它的類被叫做抽象類別(abstract class)(只聲明不實現,在子類實現。可以有實現的方法和私人的方法)介面(interface)是抽象類別的變體。介面中的所有方法都是抽象的,沒有一個有程式體。介面只可以定義static final成員變數。某個類實現了介面,就必須實現介面裡的所有方法。1.抽象類別可以有構造方法,介面中不能有構造方法。2.抽象類別中可以有普通成員變數,介面中沒有普通成員變數3.抽象類別中可以包含非抽象的普通方法,介面中的所有方法必須都是抽象的,不能有非抽象的普通方法。4. 抽象類別中的抽象方法的訪問類型可以是public,protected和預設,但介面中的抽象方法只能是public類型的,並且預設即為public abstract類型。5. 抽象類別中可以包含靜態方法,介面中不能包含靜態方法6. 抽象類別和介面中都可以包含靜態成員變數,抽象類別中的靜態成員變數的訪問類型可以任意,但介面中定義的變數只能是public static final類型,並且預設即為public static final類型。7. 一個類可以實現多個介面,但只能繼承一個抽象類別。 18、介面是否可繼承介面? 抽象類別是否可實現(implements)介面? 抽象類別是否可繼承實體類(concrete class)?介面可以繼承介面。抽象類別可以實現(implements)介面,抽象類別可以繼承實體類,但前提是實體類必須有明確的建構函式。 19、構造器Constructor是否可被override?構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。 20、是否可以繼承String類?   String類是final類故不可以繼承。 21、當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?不能,一個對象的一個synchronized方法只能由一個線程訪問。 22、try {}裡有一個return語句,那麼緊跟在這個try後的finally {}裡的code會不會被執行,什麼時候被執行,在return前還是後?會執行,在return前執行。 23、兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對? 不對,有相同的hash code。(先判斷hashcode如果hashcode相等再判斷equals,所以如equals相等那麼hashcode一定相等) 24、當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裡到底是值傳遞還是引用傳遞?是值傳遞。Java 程式設計語言只有值傳遞參數。當一個對象執行個體作為一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。 25、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?switch(expr1)中,expr1是一個整數運算式。因此傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能作用於swtich。 26、String與StringBuffer的區別。String的長度是不可變的,StringBuffer的長度是可變的。StringBuffer內容是可以修改的,String是不可修改的修改後就產生一個新的對象。如果你對字串中的內容經常進行操作,特別是內容要修改時,那麼使用StringBuffer,如果最後需要String,那麼使用StringBuffer的toString()方法。1.如果要操作少量的資料用 String2.單線程操作字串緩衝區 下操作大量資料 StringBuilder3.多線程操作字串緩衝區 下操作大量資料 StringBuffer(安全執行緒,速度比StringBuilder慢) 27、int 和 Integer 有什麼區別Java 提供兩種不同的類型:參考型別和原始類型(或內建類型),Int是java的未經處理資料類型,Integer是java為int提供的封裝類。參考型別和原始類型具有不同的特徵和用法,它們包括:大小和速度問題,對象引用執行個體變數的預設值為 null,而原始類型執行個體變數的預設值與它們的類型有關 28、說出ArrayList,Vector, LinkedList的儲存效能和特性ArrayList和Vector都是使用數組方式儲存資料,此數組元素數大於實際儲存的資料以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等記憶體操作,所以索引資料快而插入資料慢,Vector由於使用了synchronized方法(安全執行緒),通常效能上較ArrayList差,而LinkedList使用雙向鏈表實現儲存,按序號索引資料需要進行前向或後向遍曆,但是插入資料時只需要記錄本項的前後項即可,所以插入速度較快。 29、heap和stack有什麼區別stack的空間由作業系統自動分配和釋放,heap的空間是手動申請和釋放的,heap常用new關鍵字來分配。stack空間有限,heap的空間是很大的自由區。在Java中,若只是聲明一個對象,則先在棧記憶體中為其分配地址空間,若再new一下,執行個體化它,則在堆記憶體中為其分配地址。如:Object a =null; 只在棧記憶體中分配空間       Object b =new Object(); 則在堆記憶體中分配空間 30、靜態變數和執行個體變數的區別?static i = 10; //常量class A a;  a.i =10;//可變 31、什麼是java序列化,如何?java序列化?序列化就是一種用來處理物件流程的機制,所謂物件流程也就是將對象的內容進行流化。可以對流化後的對象進行讀寫操作,也可將流化後的對象傳輸於網路之間。序列化是為瞭解決在對物件流程進行讀寫操作時所引發的問題。序列化的實現:將需要被序列化的類實現Serializable介面,該介面沒有需要實現的方法,implements Serializable 只是為了標註該對象是可被序列化的,然後使用一個輸出資料流(如:FileOutputStream)來構造一個ObjectOutputStream( 物件流程)對象,接著使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數為obj的對象寫出(即 儲存其狀態),要恢複的話則用輸入資料流。 32、java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類別以供繼承,請說出他們分別是哪些類?位元組流,字元流。位元組流繼承於InputStream OutputStream,字元流繼承於InputStreamReader OutputStreamWriter。在java.io包中還有許多其他的流,主要是為了提高效能和使用方便。  33、同步和非同步有何異同,在什麼情況下分別使用他們?舉例說明。如果資料將線上程間共用。例如正在寫的資料以後可能被另一個線程讀到,或者正在讀的資料可能已經被另一個線程寫過了,那麼這些資料就是共用資料,必須進行同步存取。當應用程式在對象上調用了一個需要花費很長時間來執行的方法,並且不希望讓程式等待方法的返回時,就應該使用非同步編程,在很多情況下採用非同步途徑往往更有效率。 34、請說出你所知道的線程同步的方法。wait():使一個線程處於等待狀態,並且釋放所持有的對象的lock。sleep():使一個正在啟動並執行線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常。notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先順序。Allnotity():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。 35、多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?多線程有兩種實現方法,分別是繼承Thread類與實現Runnable介面,同步的實現方面有兩種,分別是synchronized,wait與notify 36、線程的基本概念、線程的基本狀態以及狀態之間的關係線程指在程式執行過程中,能夠執行程式代碼的一個執行單位,每個程式至少都有一個線程,也就是程式本身。 Java中的線程有四種狀態分別是:運行、就緒、掛起、結束 37、簡述synchronized和java.util.concurrent.locks.Lock的異同主要相同點:Lock能完成synchronized所實現的所有功能主要不同點:Lock有比synchronized更精確的線程語義和更好的效能。synchronized會自動釋放鎖,而Lock一定要求程式員手工釋放,並且必須在finally從句中釋放。 38、記憶體回收行程的基本原理是什嗎?記憶體回收行程可以馬上回收記憶體嗎?有什麼辦法主動通知虛擬機器進行記憶體回收對於GC來說,當程式員建立對象時,GC就開始監控這個對象的地址、大小以及使用方式。通常,GC採用有向圖的方 式記錄和管理堆(heap)中的所有對象。通過這種方式確定哪些對象是"可達的",哪些對象是"不可達的"。當GC確定一些 對象為"不可達"時,GC就有責任回收這些記憶體空間。可以。程式員可以手動執行System.gc(),通知GC運行,但是Java 語言規範並不保證GC一定會執行。 39、運行時異常與一般異常有何異同Java提供了兩類主要的異常:runtime exception和checked exception。checked 異常也就是我們經常遇到的IO異常,以及SQL異常都是這種異常。對於這種異常,JAVA編譯器強制要求我們必需對出現的這些異常進行catch。所以,面對這種異常不管我們是否願意,只能自己去寫一大堆catch塊去處理可能的異常。但是另外一種異常:runtime exception,也稱運行時異常,我們可以不處理。當出現這樣的異常時,總是由虛機接管。比如:我們從來沒有人去處理過NullPointerException異常,它就是運行時異常,並且這種異常還是最常見的異常之一。出現運行時異常後,系統會把異常一直往上層拋,一直遇到處理代碼。如果沒有處理塊,到最上層,如果是多線程就由Thread.run()拋出,如果是單線程就被main()拋出。拋出之後,如果是線程,這個線程也就退出了。如果是主程式拋出的異常,那麼這整個程式也就退出了。運行時異常是Exception的子類,也有一般異常的特點,是可以被Catch塊處理的。只不過往往我們不對他處理罷了。也就是說,你如果不對運行時異常進行處理,那麼出現運行時異常之後,要麼是線程中止,要麼是主程式終止。  40、Java中的異常處理機制的簡單原理和應用當JAVA程式違反了JAVA的語義規則時,JAVA虛擬機器就會將發生的錯誤表示為一個異常。違反語義規則包括2種情況。一種是JAVA類庫內建的語義檢查。例如數組下標越界,會引發IndexOutOfBoundsException;訪問null的對象時會引發N ullPointerException。另一種情況就是JAVA允許程式員擴充這種語義檢查,程式員可以建立自己的異常,並自由選擇在何時用throw關鍵字引發異常。所有的異常都是java.lang.Thowable的子類。 41、編程題: 寫一個Singleton出來。Singleton模式主要作用是保證在Java應用程式中,一個類Class只有一個執行個體存在。一般Singleton模式通常有幾種種形式: 第一種形式:
1 public class Singleton {2     private Singleton(){}3 private static Singleton instance = new Singleton();4 public static Singleton getInstance() {5 return instance;6 }}
View Code第二種形式:
1 public class Singleton {2   private static Singleton instance = null;3  4   public static synchronized Singleton getInstance() {5   if (instance==null)6     instance=new Singleton();7 return instance;   8 }9 }
View Code

 

 

Java面試基礎知識(1)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.