1. 程序員的面試問題(希望全面點)
很多用這個. 1. 問:怎樣用 Win95 的記事本 (Notepad) 來編輯 java源程序? 答:記得存檔時擴展名要加上".java",文件類型改成:「所有的文件(*.*)」。 2. 問:到底 Java 是如何傳遞參數的?是by value或by reference? 答:All parameters (values of primitive types, and values that are references to objects) are passed by value [JLS sect 8.4.1]。根據以上 Java規格文件的說法, 所有參數應該都是傳值的(by value)。但實際上, 實際經驗卻告訴我們所有 Java 的對象都是傳址的(by reference)。因此我們可以這樣解釋: 基本類型(如int, float, char等)是by value,而所謂「對象」(Object)則是by value of reference to object。 3. 問:String這個類型的class為何定義成final? 答: 主要是為了「效率」 和 「安全性」 的緣故。若 String允許被繼承, 由於它的高度被使用率, 可能會降低程序的性能,所以String被定義成final。 4. 問:finalizers和C++ 的 destructors有何差異? 答:Java內部具有「內存使用回收」 的機制, 雖然它也提供了類似 (C++ 的) destructors的 finalize(),每個對象都可以使用這個方法 method,但必須冒著破壞原先回收機制的危險。所以建議盡量避免使用finalize(),不妨考慮多使用 null 及 dispose() 來釋出資源會好一些。 5. 問:繼承了一個class叫做 Frotz,編譯器卻給我「No constuctor Frotz() in the class」這樣的錯誤提示,為什麼呢? 答:記住每當您定義了一個 class的constructor,除非您一開始就去call 這個constructor,否則 Java 會自動引入superclass原先不含參數的 constructor, 如果superclass的 constructor都是有參數的,那麼問題中的錯誤提示便出現了。 解決的方法很簡單, 找一找 API文件,加上正確的參數就得了。 6. 問:怎樣讓char類型的東西轉換成int類型? 答: char c = 'A'; int i = c; //反過來只要作強制類型轉換就行了 c = (char) I; 7. 問:我的applet原先好好的, 一放到web server就會有問題,為什麼? 答:一般來說,從以下方向試試: 確定class文件的格式沒錯——已經編譯過,也沒有損壞的情形; 確定所有用到的class文件放到web server上,少一個都不行; 確定所有的文件名和class名稱一致,特別檢查大小寫有無差錯; 如果程序中用到package,web server上的目錄就要當心了。譬如您在class中宣告了一個叫COM.foo.util的package,那麼web server的applet codebase目錄底下就非得有 COM/foo/util這個子目錄不可。(注意目錄名稱也有大小寫之分); web server上的文件檔案應該事先設定好。(尤其是search,read和execute許可權) 8. 問:怎樣在 Applet中用某個圖形塗滿整個背景? 答:在背景建立 Panel 或 Canvas, 然後用圖形填滿它。 9. 問:怎樣在 Applet 中建立自己的菜單(MenuBar/Menu)? 答:首先在Applet的init() 方法中建立Frame instance, 然後將Menus, Menubar都加上去即可。 (setMenuBar() 是 Frame下的方法)或者,找到Applet上層的Frame後依法炮製。 Container parent = getParent(); while (! (parent instanceof Frame) ) parent = parent.getParent(); Frame theFrame = (Frame) parent; 注意:第二個方法在Mac或某些browsers上並不可行。 如果您使用的是JDK 1.1,也可以考慮使用popup menu,這樣就不必理會Frame的問題了。 10. 怎樣比較兩個類型為String的字元串? 答:在兩個對象之間使用 "==",會將「兩個對象是否有同一reference」的結果傳回。也就是說, 這等同於「兩個對象是否擁有同一地址 (address)」,或者「兩個對象物件是否為同一對象」。如果您的意思是判斷兩個字元串的內容是否相同,那麼應該使用以下的方法才對: if (s1.equals(s2) ) or if (s1.equalsIgnoreCase(s2) ) or if (s1.startsWith(s2) ) or if (s1.endsWith(s2) ) or if (s1.regionMatches(s1_offset, s2, s2_offset, length) ) or if (s1.compareTo(s2) <0) 11. 怎樣將浮點數(float)相加 ? Float 好像沒有辦法? 答:我猜想您的程式大概寫成這樣: Float One; Float Two; Float Hard = One + Two; 請注意 float 和 Float 是不同的,前者是 Java 基本類型之一, 而後者卻是class。您應該將源代碼改為: float One; float Two; float Hard = One + Two; 或 Float One = new Float(1.0); Float Two = new Float(2.0); Float Hard = new Float(One.floatValue() + Two.floatValue());
2. 程序員面試經常被提到的問題
java 程序員常用面試題- -
Java程序員面試三十二問
Java程序員面試三十二問
作者:佚名 來自:未知
第一,談談final, finally, finalize的區別。
第二,Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以
implements(實現)interface(介面)?
第三,Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)。
第四,&和&&的區別。
第五,HashMap和Hashtable的區別。
第六,Collection 和 Collections的區別。
第七,什麼時候用assert.
第八,GC是什麼? 為什麼要有GC?
第九,String s = new String("xyz");創建了幾個String Object?
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
第十一,short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
第十二,sleep() 和 wait() 有什麼區別?
第十三,Java有沒有goto?
第十四,數組有沒有length()這個方法? String有沒有length()這個方法?
第十五,Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
第十六,Set里的元素是不能重復的,那麼用什麼方法來區分重復與否呢? 是用==還是equals()?
它們有何區別?
第十七,給我一個你最常見到的runtime exception.
第十八,error和exception有什麼區別?
第十九,List, Set, Map是否繼承自Collection介面?
第二十,abstract class和interface有什麼區別?
第二十一,abstract的method是否可同時是static,是否可同時是native,是否可同時是
synchronized?
第二十二,介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體
類(concrete class)?
第二十三,啟動一個線程是用run()還是start()?
第二十四,構造器Constructor是否可被override?
第二十五,是否可以繼承String類?
第二十六,當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它
方法?
第二十七,try {}里有一個return語句,那麼緊跟在這個try後的finally {}里的code會不會被執行
,什麼時候被執行,在return前還是後?
第二十八,編程題: 用最有效率的方法算出2乘以8等於幾?
第二十九,兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對
?
第三十,當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後
的結果,那麼這里到底是值傳遞還是引用傳遞?
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
第三十二,編程題: 寫一個Singleton出來。
以下是答案
第一,談談final, finally, finalize的區別。
final?修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父
類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變數或方法聲明為final,
可以保證它們在使用中不被改變。被聲明為final的變數必須在聲明時給定初值,而在以後的引用中只能
讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載finally?再異常處理時提供 finally
塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入
finally 塊(如果有的話)。
finalize?方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去
之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是
在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執
行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。
第二,Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以
implements(實現)interface(介面)?
匿名的內部類是沒有名字的內部類。不能extends(繼承) 其它類,但一個內部類可以作為一個介面
,由另一個內部類實現。
第三,Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)。
Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。Java內部類與C++嵌套
類最大的不同就在於是否有指向外部的引用上。具體可見http:
//www.frontfree.net/articles/services/view.asp?id=704&page=1
註: 靜態內部類(Inner Class)意味著1創建一個static內部類的對象,不需要一個外部類對象,2
不能從一個static內部類的一個對象訪問一個外部類對象
第四,&和&&的區別。
&是位運算符。&&是布爾邏輯運算符。
第五,HashMap和Hashtable的區別。
都屬於Map介面的類,實現了將惟一鍵映射到特定的值上。
HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。
Hashtable 類似於 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因為它是同步
的。
第六,Collection 和 Collections的區別。
Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。
Collection是個java.util下的介面,它是各種集合結構的父介面。
第七,什麼時候用assert。
斷言是一個包含布爾表達式的語句,在執行這個語句時假定該表達式為 true。如果表達式計算為
false,那麼系統會報告一個 AssertionError。它用於調試目的:
assert(a > 0); // throws an AssertionError if a <= 0
斷言可以有兩種形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 應該總是產生一個布爾值。
Expression2 可以是得出一個值的任意表達式。這個值用於生成顯示更多調試信息的 String 消息。
斷言在默認情況下是禁用的。要在編譯時啟用斷言,需要使用 source 1.4 標記:
javac -source 1.4 Test.java
要在運行時啟用斷言,可使用 -enableassertions 或者 -ea 標記。
要在運行時選擇禁用斷言,可使用 -da 或者 -disableassertions 標記。
要系統類中啟用斷言,可使用 -esa 或者 -dsa 標記。還可以在包的基礎上啟用或者禁用斷言。
可以在預計正常情況下不會到達的任何位置上放置斷言。斷言可以用於驗證傳遞給私有方法的參數。
不過,斷言不應該用於驗證傳遞給公有方法的參數,因為不管是否啟用了斷言,公有方法都必須檢查其參
數。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試後置條件。另外,斷言不應該以任
何方式改變程序的狀態。
第八,GC是什麼? 為什麼要有GC? (基礎)。
GC是垃圾收集器。Java 程序員不用擔心內存管理,因為垃圾收集器會自動進行管理。要請求垃圾收
集,可以調用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
第九,String s = new String("xyz");創建了幾個String Object?
兩個對象,一個是"xyx",一個是指向"xyx"的引用對象s。
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
第十一,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正確。
第十二,sleep() 和 wait() 有什麼區別? 搞線程的最愛
sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿後,線程不一定立即恢復執行。
這是因為在那個時刻,其它線程可能正在運行而且沒有被調度為放棄執行,除非(a)"醒來"的線程具有更
高的優先順序,(b)正在運行的線程因為其它原因而阻塞。
wait()是線程交互時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對
象進入等待狀態,直到被喚醒或等待時間到。
第十三,Java有沒有goto?
Goto?java中的保留字,現在沒有在java中使用。
第十四,數組有沒有length()這個方法? String有沒有length()這個方法?
數組沒有length()這個方法,有length的屬性。
String有有length()這個方法。
第十五,Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類
之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其
父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子
類中的定義,對它而言,父類中的定義如同被"屏蔽"了。如果在一個類中定義了多個同名的方法,它們或
有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改
變返回值的類型。
第十六,Set里的元素是不能重復的,那麼用什麼方法來區分重復與否呢? 是用==還是equals()? 它
們有何區別?
Set里的元素是不能重復的,那麼用iterator()方法來區分重復與否。equals()是判讀兩個Set是否相
等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的
內容和類型相配的話,返回真值。
第十七,給我一個你最常見到的runtime exception。
ArithmeticException, ArrayStoreException, BufferOverflowException,
BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException,
CMMException, , DOMException, EmptyStackException,
IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException,
IllegalStateException, ImagingOpException, IndexOutOfBoundsException,
MissingResourceException, NegativeArraySizeException, NoSuchElementException,
NullPointerException, ProfileDataException, ProviderException, RasterFormatException,
SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException,
UnsupportedOperationException
第十八,error和exception有什麼區別?
error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能
處理這樣的情況。
exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。
第十九,List, Set, Map是否繼承自Collection介面?
List,Set是
Map不是
第二十,abstract class和interface有什麼區別?
聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基
本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而
可以創建一個變數,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象
靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代
之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的
介面而獲得。介面中的所有方法都是抽象的,沒有一個有程序體。介面只可以定義static final成員變數
。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即
將程序體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用介面的方法。
由於有抽象類,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類
型或從介面類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了介面。
第二十一,abstract的method是否可同時是static,是否可同時是native,是否可同時是
synchronized?
都不能
第二十二,介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類
(concrete class)?
介面可以繼承介面。抽象類可以實現(implements)介面,抽象類是否可繼承實體類,但前提是實體類
必須有明確的構造函數。
第二十三,啟動一個線程是用run()還是start()?
啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味著它可以由
JVM調度並執行。這並不意味著線程就會立即運行。run()方法可以產生必須退出的標志來停止一個線程。
第二十四,構造器Constructor是否可被override?
構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。
第二十五,是否可以繼承String類?
String類是final類故不可以繼承。
第二十六,當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它
方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。
第二十七,try {}里有一個return語句,那麼緊跟在這個try後的finally {}里的code會不會被執行
,什麼時候被執行,在return前還是後?
會執行,在return前執行。
第二十八,編程題: 用最有效率的方法算出2乘以8等於幾?
有C背景的程序員特別喜歡問這種問題。
2 << 3
第二十九,兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
不對,有相同的hash code。
第三十,當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後
的結果,那麼這里到底是值傳遞還是引用傳遞?
是值傳遞。Java 編程語言只由值傳遞參數。當一個對象實例作為一個參數被傳遞到方法中時,參數
的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一個整數表達式。因此傳遞給 switch 和 case 語句的參數應該是 int
、 short、 char 或者 byte。long,string 都不能作用於swtich。
第三十二,編程題: 寫一個Singleton出來。
Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。
一般Singleton模式通常有幾種種形式:
第一種形式: 定義一個類,它的構造函數為private的,它有一個static的private的該類變數,
在類初始化時實例話,通過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。
public class Singleton {
private Singleton(){}
//在自己內部定義自己一個實例,是不是很奇怪?
//注意這是private 只供內部調用
private static Singleton instance = new Singleton();
//這里提供了一個供外部訪問本class的靜態方法,可以直接訪問
public static Singleton getInstance() {
return instance;
}
}
第二種形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次
//使用時生成實例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
其他形式:
定義一個類,它的構造函數為private的,所有方法為static的。
一般認為第一種形式要更加安全些
第三十三 Hashtable和HashMap
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許
還有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為
contains方法容易讓人引起誤解。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,
不需要自己為它的方法實現同步,而HashMap就必須為之提供外同步。
Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以性能不會有很大的差異。
3. 程序員面試的時候考官一般問什麼問題(比較流行的)
給你提供點參考信息,希望能幫助到你:
1、使用相同的工具和時間限制模擬面試訓練
Google和微軟都會讓應聘者在白板上手工解答編程問題,但通常大部分的應聘者都是習慣於在電腦上利用編程工具系統編寫程序。因此面試的時候,某些應聘者離開了熟悉的電腦游標,站在白板前感覺手足無措不知該如何起行。又或者他們不習慣在編程之時旁邊有人觀看,這會讓他們感到緊張而無法正常思考。
在現實生活中,如果你想要橫渡英吉利海峽,自然不能總是在室內游泳池練習。你必須投身於大海在波濤之中訓練,在准備面試的時候也是如此。
在面試開始之前你最好向招聘單位詢問面試形式和面試問題。如果招聘單位讓你在某個房間考試且僅提供沒有匯編程序的編輯器,那麼就應該在家中按照這種情景進行練習。如果招聘公司單位讓你在白板上回答問題並會安排考官在旁監督,那麼你就要找一位軟體工程師來扮演考官配合你練習。即使找來的考官經驗不如你也沒有關系,他們依然能幫助你消除在他人面前出錯所帶來的緊張感,這樣可以讓你適應有人在旁邊盯著看的面試氛圍。
如果你恰巧認識我並希望由我來幫你聯系,那我的條件就是必須請我吃飯:如果你已經工作了就吃日本壽司大餐;如果你還是學生,那麼吃比薩餅也可以。
2、在面試過程中不要對細小錯誤耿耿於懷
我曾不止一次的在面試過程中碰到這種情況:當應聘者知道編程問題後,他馬上就想到了最佳的方案、確定了邊界條件,然後開始編寫程序。但在編寫過程中,應聘者犯了諸如首先檢查是不是操作順序錯誤或忘記設定某變數等無關大局的小錯誤,當我指出其錯誤之後,應聘者立刻變得十分緊張,這種焦慮情緒影響了他在後面環節的正常發揮。
其實這種恐懼心理完全不必要。一名優秀的程序員在編程過程中出現錯誤也是很正常的,就像是小提琴手在演奏高難度的巴赫交響樂時也會偶爾失誤。音樂會的聽眾可能會覺察到這些錯誤,但是聽眾絕對不會因為這種細小失誤就把出色的小提琴手看作是門外漢。
即便應聘者徹底搞砸了某個編程問題,面試考官也可能會提出不同的問題並會容忍應聘者在某個問題上的失誤。再退一步說,就算某次面試徹底失敗,你也有機會在其它面試上補救。
我的一位同事(一個項目的技術負責人)最近面試了一個人,在開始面試時他覺得面試者的交流方式存在問題,因此開始表現的相當不友好。但經過了整個面試過程後,面試者證明了自身的能力,而我的那位同事也成了那位面試者最堅定的支持者。在過去的一年中,我從未見過這位同事如此強烈的支持哪位面試者。
所以,因此就算面試進展不順,也務必堅持到底不要放棄。
4. 程序員 面試 如何回答
做一份工作,實際就是追尋夢想的過程,而為了完成夢想,必須有一個長期規劃,從而指導我們選擇工作。它是擇業過程中最本質和最原始的參考借鑒。下載鏈接
為此,小雲為你精選一份程序員面試書單,分為職業規劃、編程技能兩部分,適合剛畢業的大學生、正准備換工作的程序員們,涵蓋演算法工程師、Java工程師、測試等多個領域。
軟技能 代碼之外的生存指南約翰 Z.森梅茲 著
這是一本真正從「人」(而非技術也非管理)的角度關注軟體開發人員自身發展的書。書中論述的內容既涉及生活習慣,又包括思維方式,凸顯技術中「人」的因素,全面講解軟體行業從業人員所需知道的所有「軟技能」。
本書聚焦於軟體開發人員生活的方方面面,從揭秘面試的流程到精耕細作出一份殺手級簡歷,從創建大受歡迎的博客到打造你,從提高自己工作效率到與如何與「拖延症」做斗爭,甚至包括如何投資不動產,如何關注自己的健康。
編程珠璣(第2版)喬恩·本特利(Jon Bentley) 著
作者雖然沒有給出解決這些問題的具體代碼,但始終非常富有洞察力和創造力地圍繞著這些折磨程序員的實際問題展開討論,從而引導讀者理解問題並學會解決問題的技能,這些都是程序員實際編程生涯中的基本技能。
為此,本書給出了一些精心設計的有趣而且頗具指導意義的程序,這些程序能夠為那些復雜的編程問題提供清晰而且完備的解決思路,書中還充滿了對實用程序設計技巧及基本設計原則的清晰而睿智的描述。
PS:本書在第一版的基礎上增加了3個方面的新內容:測試、調試和計量,集合表示,字元串問題,並對第一版的所有程序都進行了改寫,生成了等量的新代碼。
重構 改善既有代碼的設計馬丁·福勒(Martin Fowler) 著
軟體開發的不朽經典,生動闡述重構原理和具體做法,普通程序員進階到編程高手必須修煉的秘笈。
重構,一言以蔽之,就是在不改變外部行為的前提下,有條不紊地改善代碼。多年前,正是《重構:改善既有代碼的設計》原版的出版,使重構終於從編程高手們的小圈子走出,成為眾多普通程序員日常開發工作中不可或缺的一部分。《重構:改善既有代碼的設計》也因此成為與《設計模式》齊名的經典著作,被譯為中、德、俄、日等眾多語言,在世界范圍內暢銷不衰。
《重構:改善既有代碼的設計》凝聚了軟體開發社區專家多年摸索而獲得的寶貴經驗,擁有不因時光流逝而磨滅的價值。今天,無論是重構本身,業界對重構的理解,還是開發工具對重構的支持力度,都與《重構:改善既有代碼的設計》最初出版時不可同日而語,但書中所蘊涵的意味和精華,依然值得反復咀嚼,而且往往能夠常讀常新。
C和C++程序員面試秘籍董山海 著
眾多高級語言都從C/C++有所借鑒,所以說C/C++的語言基礎對從事軟體開發的人員來說非常重要。
本書是一本解析C/C++面試題的書,可以幫助求職者更好地准備面試。《C和C++程序員面試秘笈》共包含12章,囊括了目前企業中常見的面試題類型和考點,包括C/C++程序基礎,預處理、const、static與sizeof,引用和指針,字元串,位運算與嵌入式編程,C++面向對象,C++繼承和多態,數據結構,排序,泛型編程,STL,演算法和邏輯思維等最常見的面試題。《C和C++程序員面試秘笈》通過技術點解析、代碼輔佐的方式讓讀者能深刻領會每個考點背後的技術。
本書緊扣面試精髓,對各種技術的剖析一針見血,是目前想找工作的C/C++程序員和剛畢業的大學生的面試寶典。
Java程序員面試寶典楊磊 著
本書對程序設計面試中Java常見的題型和常用解答技巧進行了介紹,對現代職業人如何有效求職、面試考官如何關注求職者動態等做了詳細解說。本書將為您揭開知名IT企業面試、筆試的核心機密;傳授程序員崗位求職的關鍵技巧。
編程之法:面試和演算法心得July 著
本書涉及面試、演算法、機器學習三個主題。書中的每道編程題目都給出了多種思路、多種解法,不斷優化、逐層遞進。本書第1章至第6章分別闡述字元串、數組、樹、查找、動態規劃、海量數據處理等相關的編程面試題和演算法,第7章介紹機器學習的兩個演算法—K近鄰和SVM。此外,每一章都有「舉一反三」和「習題」,以便讀者及時運用所學的方法解決相似的問題,且在附錄中收錄了語言、鏈表、概率等其他題型。
書中的每一道題都是面試的高頻題目,反復出現在最近5年各大公司的筆試和面試中,對面試備考有著極強的參考價值。全書邏輯清晰、通俗易懂,適合熱愛編程、演算法、機器學習,以及准備IT筆試和面試,即將求職、找工作的讀者閱讀。
C#與.NET程序員面試秘笈靳華 著
《C#與.NET程序員面試寶典》取材於各大IT公司的歷年面試題252個(包括研發類筆試及口試題目、情商及智商類題目),詳細分析了應聘C#與.NET程序員職位的常見考點。《C#與.NET程序員面試寶典》主要內容包括:面試流程、基礎語法和技術框架、數據訪問及XML應用、高級特性及應用進階、測試及質量保證、跨國公司經典面試題等。
軟體測試工程師面試指導蔡為東 著
對於想要得到一份軟體測試工程師職位的朋友來說,可能會有一些疑問,如軟體測試這個行業究竟怎麼樣?什麼樣的人適合做軟體測試?面試當中要注意什麼?軟體測試的基本知識點都有哪些?筆試都會涉及哪些內容?等等。本書將解答以上所有的疑問。
本書共6章內容,主要包括軟體測試行業概貌、軟體測試從業人員的基本要求、如何找工作、軟體測試技術基礎、典型的測試工程師筆試題等。本書內容豐富,講解深入淺出,能讓讀者朋友在短時間內掌握基本的測試技術,了解求職過程的各個環節,熟悉各種類型的筆試題,領會面試技巧。本書後附有一些實用的附錄,例如簡歷模板、新人工作指南等,尤其是「我在微軟做軟體測試外包」這一部分內容,寓故事性和知識性於一體,講述了作者在國際軟體巨頭——微軟公司做軟體測試外包的親身經歷,相信對於廣大的讀者朋友有閱讀和參考的價值。
本書適合想要從事軟體測試工作的朋友,也可供初級軟體測試工程師學習之用,另外也可作為大專院校軟體測試培訓的教材之一。
Android高薪之路李寧 著
《Android高薪之路:Android程序員面試寶典》取材於各大IT公司面試真題,所給出的試題盡可能地覆蓋了Android應用開發的各個方面,而且大多數試題都有解析部分,讀者可以通過這部分更深入地理解試題中所包含的技術內容,希望真正做到由點成線,舉一反三。
《Android高薪之路:Android程序員面試寶典》中還將Android中涉及的各個常用技術問題進行篩選、分類。這樣讀者可以有的放矢,對自己還沒有掌握的Android技術進行重點攻破,從而起到事半功倍的效果。除了對每道題目都有詳細的解析和回答外,對相關知識點還有擴展說明。
《Android高薪之路:Android程序員面試寶典》對面試中Android常見的題型和常用解答技巧進行了介紹,它不僅能幫助求職者快速復習相關知識點,也對現代職業人如何有效求職做了詳細解說。《Android高薪之路:Android程序員面試寶典》對於讀者從求職就業到提升計算機專業知識都有顯著的幫助。
編程之美《編程之美小組》
《編程之美—— 微軟 技術面試心得》收集了約60道演算法和 程序設計題目,這些題目大部分在近年的筆試,面試中出現過,或者是被微軟員工熱烈討論過。作者試圖從書中各種有趣的問題出發,引導讀者發現問題,分析問題,解決問題,尋找更優的解法。
書中絕大部分題目都提供了詳細的解說。 每道題目後面還有一至兩道擴展問題,供讀者進一步鑽研。
書中還講述了面試的各種小故事,告訴讀者微軟需要什麼樣的技術人才,重視什麼樣的能力,如何甄別人才。回答讀者關於IT業面試,招聘, 職業發展的疑問。 這本書的很多題目會出現在IT 行業的各種筆試,面試中。但本書更深層的意義在於引導讀者思考,和讀者共享思考之樂,編程之美。
5. 求程序員面試題
Java面試題集集錦
1.C++或Java中的異常處理機制的簡單原理和應用。
當JAVA程序違反了JAVA的語義規則時,JAVA虛擬機就會將發生的錯誤表示為一個異常。違反語義規則包括2種情況。一種是JAVA類庫內置的語義檢查。例如數組下標越界,會引發IndexOutOfBoundsException;訪問null的對象時會引發 NullPointerException。另一種情況就是JAVA允許程序員擴展這種語義檢查,程序員可以創建自己的異常,並自由選擇在何時用 throw關鍵字引發異常。所有的異常都是java.lang.Thowable的子類。
2. Java的介面和C++的虛類的相同和不同處。
由於Java不支持多繼承,而有可能某個類或對象要使用分別在幾個類或對象裡面的方法或屬性,現有的單繼承機制就不能滿足要求。與繼承相比,介面有更高的靈活性,因為介面中沒有任何實現代碼。當一個類實現了介面以後,該類要實現介面裡面所有的方法和屬性,並且介面裡面的屬性在默認狀態下面都是 public static,所有方法默認情況下是public.一個類可以實現多個介面。
3. 垃圾回收的優點和原理。並考慮2種回收機制。
Java語言中一個顯著的特點就是引入了垃圾回收機制,使c++程序員最頭疼的內存管理的問題迎刃而解,它使得Java程序員在編寫程序的時候不再需要考慮內存管理。由於有個垃圾回收機制,Java中的對象不再有「作用域」的概念,只有對象的引用才有「作用域」。垃圾回收可以有效的防止內存泄露,有效的使用可以使用的內存。垃圾回收器通常是作為一個單獨的低級別的線程運行,不可預知的情況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清楚和回收,程序員不能實時的調用垃圾回收器對某個對象或所有對象進行垃圾回收。回收機制有分代復制垃圾回收和標記垃圾回收,增量垃圾回收。
4. 請說出你所知道的線程同步的方法。
wait():使一個線程處於等待狀態,並且釋放所持有的對象的lock。
sleep():使一個正在運行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常。
notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先順序。
Allnotity():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。
5. 請講一講析構函數和虛函數的用法和作用。
6. Error與Exception有什麼區別?
Error表示系統級的錯誤和程序不必處理的異常,
Exception表示需要捕捉或者需要程序進行處理的異常。
7. 在java中一個類被聲明為final類型,表示了什麼意思?
表示該類不能被繼承,是頂級類。
8. 描述一下你最常用的編程風格。
9. heap和stack有什麼區別。
棧是一種線形集合,其添加和刪除元素的操作應在同一段完成。棧按照後進先出的方式進行處理。
堆是棧的一個組成元素
10. 如果系統要使用超大整數(超過long長度范圍),請你設計一個數據結構來存儲這種超大型數字以及設計一種演算法來實現超大整數加法運算)。
public class BigInt()
{
int[] ArrOne = new ArrOne[1000];
String intString="";
public int[] Arr(String s)
{
intString = s;
for(int i=0;i
{
11. 如果要設計一個圖形系統,請你設計基本的圖形元件(Point,Line,Rectangle,Triangle)的簡單實現
12,談談final, finally, finalize的區別。
final—修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變數或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變數必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。
finally—再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)。
finalize—方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。
13,Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(介面)?
匿名的內部類是沒有名字的內部類。不能extends(繼承) 其它類,但一個內部類可以作為一個介面,由另一個內部類實現。
14,Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)。
Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。Java內部類與C++嵌套類最大的不同就在於是否有指向外部的引用上。具體可見http: //www.frontfree.net/articles/services/view.asp?id=704&page=1
註: 靜態內部類(Inner Class)意味著1創建一個static內部類的對象,不需要一個外部類對象,2不能從一個static內部類的一個對象訪問一個外部類對象
第四,&和&&的區別。
&是位運算符。&&是布爾邏輯運算符。
15,HashMap和Hashtable的區別。
都屬於Map介面的類,實現了將惟一鍵映射到特定的值上。
HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。
Hashtable 類似於 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因為它是同步的。
16,Collection 和 Collections的區別。
Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。
Collection是個java.util下的介面,它是各種集合結構的父介面。
17,什麼時候用assert。
斷言是一個包含布爾表達式的語句,在執行這個語句時假定該表達式為 true。如果表達式計算為 false,那麼系統會報告一個 Assertionerror。它用於調試目的:
assert(a > 0); // throws an Assertionerror if a <= 0
斷言可以有兩種形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 應該總是產生一個布爾值。
Expression2 可以是得出一個值的任意表達式。這個值用於生成顯示更多調試信息的 String 消息。
斷言在默認情況下是禁用的。要在編譯時啟用斷言,需要使用 source 1.4 標記:
javac -source 1.4 Test.java
要在運行時啟用斷言,可使用 -enableassertions 或者 -ea 標記。
要在運行時選擇禁用斷言,可使用 -da 或者 -disableassertions 標記。
要系統類中啟用斷言,可使用 -esa 或者 -dsa 標記。還可以在包的基礎上啟用或者禁用斷言。
可以在預計正常情況下不會到達的任何位置上放置斷言。斷言可以用於驗證傳遞給私有方法的參數。不過,斷言不應該用於驗證傳遞給公有方法的參數,因為不管是否啟用了斷言,公有方法都必須檢查其參數。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試後置條件。另外,斷言不應該以任何方式改變程序的狀態。
18,GC是什麼? 為什麼要有GC? (基礎)。
GC是垃圾收集器。Java 程序員不用擔心內存管理,因為垃圾收集器會自動進行管理。要請求垃圾收集,可以調用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
19,String s = new String("xyz");創建了幾個String Object?
兩個對象,一個是「xyx」,一個是指向「xyx」的引用對象s。
20,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
21,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正確。
22,sleep() 和 wait() 有什麼區別? 搞線程的最愛
sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿後,線程不一定立即恢復執行。這是因為在那個時刻,其它線程可能正在運行而且沒有被調度為放棄執行,除非(a)「醒來」的線程具有更高的優先順序 (b)正在運行的線程因為其它原因而阻塞。
wait()是線程交互時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對象進入等待狀態,直到被喚醒或等待時間到。
23,Java有沒有goto?
Goto—java中的保留字,現在沒有在java中使用。
24,數組有沒有length()這個方法? String有沒有length()這個方法?
數組沒有length()這個方法,有length的屬性。
String有有length()這個方法。
25,Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被「屏蔽」了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
26,Set里的元素是不能重復的,那麼用什麼方法來區分重復與否呢? 是用==還是equals()? 它們有何區別?
Set里的元素是不能重復的,那麼用iterator()方法來區分重復與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值。
27,給我一個你最常見到的runtime exception。
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, , DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,
ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFORMatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
28,error和exception有什麼區別?
error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。
exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。
29,List, Set, Map是否繼承自Collection介面?
List,Set是
Map不是
30,abstract class和interface有什麼區別?
聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變數,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程序體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程序體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用介面的方法。由於有抽象類,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類型或從介面類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了介面。
31,abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
都不能
32,介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類(concrete class)?
介面可以繼承介面。抽象類可以實現(implements)介面,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。
33,啟動一個線程是用run()還是start()?
啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味著它可以由JVM調度並執行。這並不意味著線程就會立即運行。run()方法可以產生必須退出的標志來停止一個線程。
34,構造器Constructor是否可被override?
構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。
35,是否可以繼承String類?
String類是final類故不可以繼承。
36,當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。
37,try {}里有一個return語句,那麼緊跟在這個try後的finally {}里的code會不會被執行,什麼時候被執行,在return前還是後?
會執行,在return前執行。
38,編程題: 用最有效率的方法算出2乘以8等於幾?
有C背景的程序員特別喜歡問這種問題。
2 << 3
39,兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
不對,有相同的hash code。
40,當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這里到底是值傳遞還是引用傳遞?
是值傳遞。Java 編程語言只由值傳遞參數。當一個對象實例作為一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。
41,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一個整數表達式。因此傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能作用於swtich。
42,編程題: 寫一個Singleton出來。
Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。
一般Singleton模式通常有幾種種形式:
第一種形式:定義一個類,它的構造函數為private的,它有一個static的private的該類變數,在類初始化時實例話,通過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。
public class Singleton {
private Singleton(){}
//在自己內部定義自己一個實例,是不是很奇怪?
//注意這是private 只供內部調用
private static Singleton instance = new Singleton();
//這里提供了一個供外部訪問本class的靜態方法,可以直接訪問
public static Singleton getInstance() {
return instance;
}
}
第二種形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次
//使用時生成實例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
其他形式:
定義一個類,它的構造函數為private的,所有方法為static的。
一般認為第一種形式要更加安全些
Hashtable和HashMap
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許
還有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在
多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap
就必須為之提供外同步。
Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以性能不會有很大的差異。
43.描述一下JVM載入class文件的原理機制?
44.試舉例說明一個典型的垃圾回收演算法?
45.請用java寫二*樹演算法,實現添加數據形成二*樹功能,並以先序的方式列印出來.
46.請寫一個java程序實現線程連接池功能?
47.給定一個C語言函數,要求實現在java類中進行調用。
48、編一段代碼,實現在控制台輸入一組數字後,排序後在控制台輸出;
49、列出某文件夾下的所有文件;
50、調用系統命令實現刪除文件的操作;
51、實現從文件中一次讀出一個字元的操作;
52、列出一些控制流程的方法;
53、多線程有哪些狀態?
54、編寫了一個伺服器端的程序實現在客戶端輸入字元然後在控制台上顯示,直到輸入"END"為止,讓你寫出客戶端的程序;
55、作用域public,private,protected,以及不寫時的區別
答:區別如下:
作用域 當前類 同一package 子孫類 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不寫時默認為friendly
56、ArrayList和Vector的區別,HashMap和Hashtable的區別
答:就ArrayList與Vector主要從二方面來說.
一.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的
二.數據增長:當需要增長時,Vector默認增長為原來一培,而ArrayList卻是原來的一半
就HashMap與HashTable主要從三方面來說。
一.歷史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map介面的一個實現
二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的
三.值:只有HashMap可以讓你將空值作為一個表的條目的key或value
57、char型變數中能不能存貯一個中文漢字?為什麼?
答:是能夠定義成為一個中文的,因為java中以unicode編碼,一個char佔16個位元組,所以放一個中文是沒問題的
6. 面試JAVA程序員最基本的面試題有哪些
java異常機制的原理與應用
答:每當程序出現異常之後,如果程序沒有進行相應的處理,則程序會出現中斷現象。
實際上,產生了異常之後,JVM會拋出一個異常類的實例化對象,如果此時使用了try語句捕獲的話,則可以進行異常的處理,否則,交給JVM進行處理。當try語句捕獲異常之後,將與catch語句的異常類型進行匹配,如果匹配成功則執行catch內的語句。簡單的應用:在所以throws語句的地方加入try-catch。標准應用:try-catch-finally-throw-throws一起使用。
2. 垃圾回收機制的優點
答:釋放無用的對象所佔用的空間。方式:自動回收,手動回收。使用System.gc(),實際上調用Runtime.getRuntime().gc()
3. Error與Exception區別
答:Error是jvm進行處理,是jvm出錯
exception是可以由程序處理的,可以用try-catch捕獲的
4. final,finally,finallize
答:final定義的變數的值不能改變,定義的方法不能被覆蓋,定義的類不能被繼承
finally是異常的統一出口,finallize是垃圾回收前的收尾工作,是Object類定義的
5. Anonymous Inner Class是否可以extends,是否可以implements Interface
答:允許繼承和實現,因為匿名內部類就是在抽象類和介面的基礎上發展起來的
6. Static Nested Class 與Inner Class的區別
答:使用Static定義的Class就是外部類,可以通過外部類. 內部類直接訪問
而Inner Class是不能被外部訪問的,只能通過外部類的實例再找到內部類實例。
7. HashMap and HashTable?
答:HashMap:1) released in jdk 1.2,new Class 2)採用非同步處理方式,性能較高,是非線程安全的 3)允許null
HashTable:1)released in jdk 1.0 ,old Class 2)採用同步處理方式,性能低,是線程安全的3)不允許null
8. assert代表什麼?
答:asserts是jdk 1.4之後發布的新關鍵字,表示斷言,即程序執行到某個地方肯定是預計的值,一般開發很少使用。要使用assert,必須加上 -ea參數
9. gc是什麼?
答:gc是garbage collection,垃圾回收,使用gc可以進行垃圾空間的釋放
10. String s = new String("xyz")產生了幾個對象?
答:一個匿名對象xyz,在棧空間內。一個new實例化的對象,在堆空間內。
11. sleep() and wait()?
答:sleep()是Thread類定義方法,表示線程的休眠,可以自動喚醒
wait()方法是Object類定義的方法,需要手動notify()和notifyAll()//sleep()不釋放資源,wait()釋放資源
12. java中存在goto,但不能使用
13.數組有沒有length(),String有沒有length()?
答:數組有length屬性,String有length()
14. Overload與Override的區別
答:Overload:重載
|- 在一個類中定義的若干方法
|- 所有的方法名相同,但參數類型或個數不同
|- 只有參數有關,與返回類型無關
Override:覆寫
|- 在繼承的關系中
|- 子類定義了父類同名的方法,參數類型或個數最好完全一樣。
|- 訪問許可權不能更嚴格
15. Set里的元素不能重復,用什麼方法區分?==與equals()方法的區別
答:set里的元素是不能重復的,用iterator()方法來區分重復與否,==屬於地址比較,
==用於比較引用和比較基本數據類型時具有不同的功能:
比較基本數據類型,如果兩個值相同,則結果為true
而在比較引用時,如果引用指向內存中的同一對象,結果為true
16. 列出常見的 runtime exception
答:NumberFormatException/ArrayOutIndexofBoundException/NullPointerException/ClassCastException
17. abstract class 和 interface有什麼區別?
答:抽象類:
|-由抽象方法和常量、變數、全局常量、構造方法、普通方法組成
|-使用abstract聲明
|-子類要通過extends繼承抽象類,子類如果不是抽象類,則必須覆寫抽象類的全部抽象方法
|-存在單繼承的局限
|-抽象類可以實現若干個介面
介面:
|-由抽象方法和全局常量組成
|-使用interface關鍵字
|-子類要通過implements實現介面,子類如果不是抽象類,則必須覆寫抽象類的全部抽象方法
|-一個子類可以實現多個介面
|-介面不能繼承一個抽象類,但允許繼承多個介面
18. 啟動一個線程要用start(),因為要通知jvm進行cpu資源的分配
19. try{}裡面有一個return,問finally{}裡面的代碼是否執行,在什麼時機執行?
答:finally{}裡面的代碼執行,在return之前。
20. 寫一個singleton
答:singleton的核心就是構造方法私有化,Class,Runtime都採用單例
package com.leongod.demo;
public class Singleton(){
private static final sin = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return sin;
}
}
21. 程序設計:輸入一組數字,然後排序輸出
答:package com.leongod.demo;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class IO {
public static void main(String[] args) throws Exception {
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
System.out.println("請輸入一組數字,中間用空格分割:");
String str = buf.readLine();
Set<Integer> set = new TreeSet<Integer>();
String[] arr = str.split(" ");
for(String s : arr) {
if (s.matches("\\d+")) {
set.add(Integer.parseInt(s));
}
}
Iterator<Integer> it = set.iterator();
System.out.println("排序後的結果:");
while (it.hasNext()) {
System.out.print(it.next() + ",");
}
}
}
22.列出目錄內的文件
package com.leongod.demo;
import java.io.File;
import com.sun.org.apache.xpath.internal.functions.FuncBoolean;
public class FileDemo {
public static void main(String[] args) {
?? File file = new File("D:" + File.separator + "kongkong");
?? fun(file);
}
public static void fun(File file) {
if (file.isDirectory()) {
File[] lf = file.listFiles();
if (lf != null) {
for(File f : lf) {
fun(f);
}
}
}else {
System.out.println(file.toString());
}
}
}
23. char可以存一個中文漢字嗎?
答:可以,使用了unicode編碼
24.多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?
答:兩種多線程方法,繼承Thread類,實現Runnable介面
|-Thread類是Runnable介面的子類
|-使用Runnable介面可以實現資源共享的目的
|-所有線程操作都必須通過Thread類的start()方法啟動
兩種實現同步的方法:
|-同步代碼塊:Synchronized(this)
|-同步方法
25.f=3.4是不對的,3.4默認是double類型的
26.String and StringBuffer?
答:String 不可以修改,StringBuffer可以修改
27.Class.forname向容器中載入驅動程序
28.int與Integer有什麼區別?
答:int是基本數據類型,Integer是包裝類
在jdk1.5以後,可以實現自動裝箱和拆箱
29.2*8有效的方法是移位操作:2<<3
30.請說出類集框架的完整結構
答:類級框架的最大介面:Collection、Map、Iterator、Enumeration
Collection:存放單值
|-List:允許有重復內容
|-ArrayList:非同步處理,新的操作類,非線程安全
|-Vector:同步處理,舊的操作類,線程安全,支持Enumeration
|-Set:不允許有重復的內容,依靠hashCode()和equals()進行重復的驗證
|-HashSet:無序存放
|-TreeSet:有序存放,按Comparable排序
|-Map:存放一對值
|-HashMap:新的類,非同步處理,非線程安全,允許有null
|-HashTable:舊的類,同步處理,線程安全,不允許有null
|-TreeMap:有序排列,按key配需
|-Iterator:迭代輸出,依靠collection介面中的iterator方法輸出,是新的輸出標准
31.是否可以繼承String類?答:不可以,因為使用了final關鍵字
7. 程序員面試題
第一種推論:
A、假設有1條病狗,病狗的主人會看到其他狗都沒有病,那麼就知道自己的狗有病,所以第一天晚上就會有槍響。因為沒有槍響,說明病狗數大於1。
B、假設有2條病狗,病狗的主人會看到有1條病狗,因為第一天沒有聽到槍響,是病狗數大於1,所以病狗的主人會知道自己的狗是病狗,因而第二天會有槍響。既然第二天也每有槍響,說明病狗數大於2。
由此推理,如果第三天槍響,則有3條病狗。
第二種推論
1 如果為1,第一天那條狗必死,因為狗主人沒看到病狗,但病狗存在。
2 若為2,令病狗主人為a,b。 a看到一條病狗,b也看到一條病狗,但a看到b的病狗沒死故知狗數不為1,而其他人沒病狗,所以自己的狗必為病狗,故開槍;而b的想法與a一樣,故也開槍。
由此,為2時,第一天看後2條狗必死。
3 若為3條,令狗主人為a,b,c。 a第一天看到2條病狗,若a設自己的不是病狗,由推理2,第二天看時,那2條狗沒死,故狗數肯定不是2,而其他人沒病狗,所以自己的狗必為病狗,故開槍;而b和c的想法與a一樣,故也開槍。
由此,為3時,第二天看後3條狗必死。
4 若為4條,令狗主人為a,b,c,d。a第一天看到3條病狗,若a設自己的不是病狗,由推理3,第三天看時,那3條狗沒死,故狗數肯定不是3,而其他人沒病狗,所以自己的狗必為病狗,故開槍;而b和c,d的想法與a一樣,故也開槍。
由此,為4時,第三天看後4條狗必死。
5 餘下即為遞推了,由年n-1推出n。
答案:n為4。第四天看時,狗已死了,但是在第三天死的,故答案是3條。
8. 程序員面試題 資料庫裝不下
擴大資料庫的內存。
首先,單庫的數據量會變得越來越大,占據大量的磁碟空間,在進行數據遷移、備份、恢復所需要的時間都會越來越長。其次,系統的容災性將變差,沒有萬無一失的系統,也沒有萬無一失的機器,更沒有萬無一失的運維工程師與程序員,一旦我們的資料庫遭遇到破壞,將會牽連所有的業務與用戶。
最後,是系統的性能會大大降低,讀寫速度會變慢,即便是我們使用了索引,也會發現讀寫的速度越來越慢,這是為什麼呢?有兩個主要的原因,一是隨著數據量的增多,掃描數也會增多,一旦我們的索引不合理,或者沒有命中索引,將帶來災難性的結果,另外一個重要的原因,是索引會變得越來越大,每次變更索引的變更也會消耗時間,並且可能因為索引過大,無法直接存放在內存,每次都需要從磁碟中載入索引,造成速度變慢。
9. 程序員面試題精選100題
准備面試不妨看看《編程之美——微軟技術面試心得》。
裡面有60道左右的演算法、數據結構和程序設計的題目,每個題目均給出了不同的解法和分析。特別是要准備去參加大公司面試,值得參考。
10. 你要面試一個程序員,應該問他什麼問題
首先面試程序員分有沒有經驗
面試沒有經驗的程序員就隨便問問點ssm,ssh五大框架問題,多線程什麼的,再問問是否會點前端技術
有經驗就看看他的簡歷,問他簡歷項目上的問題,可以圍繞著簡歷上的項目問,通過他的回答涉及到的技術點之類的,拓展出去問其他的