⑴ 求程序員面試題
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個位元組,所以放一個中文是沒問題的
⑵ 程序員面試問題...
外在表現
1.著裝合理
2.不卑不亢
交流
1.回答從容,知之為知之,不知為不知
2.善於提出問題,避諱只答不問和只問不答
3.善於將話題引入自己擅長的知識領域
簡歷肯定是要帶的。 項目應該拿自己最熟悉的,最代表自己技術水平的。
即使是在網上下載下來的。也要能自圓其說!
是新手的話。一定要讓面試的人覺得你是一隻潛力股。
記得面試別遲到!
最後祝願早日找到工作。
⑶ 難倒所有程序員的小學數學題,看你能解么
第一題,這後邊是迷惑人的,所以,從後邊的「這樣,」就可以不用看了~
解釋:房錢=25,服務生藏起2元,每人退還的1元*3,算術簡單吧?25+2+3=30,一塊也沒差~
第二題,
因為有個問題很簡單,就是蔥綠和蔥白賣不一樣的價錢,但是卻一樣重,這可不是折半算錢的,而應該是兩倍價錢賣,才對的。數學公式,設蔥綠的價格為x,蔥白的價格為y,x*50+y*50=100,則x+y=2,也就是說,如果折半賣,他們的價錢應該是原來賣的兩倍~
第三題,
用最笨的方法
第一天:7-(3-2)=6
第二天:6-(3-2)=5
第三天:5-(3-2)=4
第四天:4-(3-2)=3
第五天:3-3=0
第五天就出去了,因為它白天就到了,所以不用再到晚上下滑2米~
第四題
1塊=
10個桃
吃光就還有10個桃核,10=3+3+3+1,
換3個桃
,再吃掉=3
+1,
換1個桃
,在吃掉=1+1個桃核
最終可以吃掉10+3+1=14個桃
⑷ 為什麼應聘程序員筆試都是數學題
程序是需要一定的邏輯思維的,數學就是很好驗證一個人的邏輯思維。最好是幾何題估計更好
⑸ 做圖像類演算法面試的時候會不會面試數學
我在《再談逗我是怎麼招程序員地》中比較保守地說過,逗問難的演算法題並沒有錯,錯的很多面試官只是在膚淺甚至錯誤地理解著面試演算法題的目的。地,今天,我想加強一下這個觀點——我反對純演算法題面試!(注意,我說的是純演算法題)圖片源Wikipedia(點擊圖片查看詞條)我再次引用我以前的一個觀點——能解演算法題並不意味著這個人就有能力就能在工作中解決問題,你可以想想,小學奧數題可能比這些題更難,但並不意味著那些奧數能手就能解決實際問題。好了,讓我們來看一個示例(這個示例是昨天在微博上的一個討論),這個題是——逗找出無序數組中第2大的數地,幾乎所有的人都用了O(n)的演算法,我相信對於我們這些應試教育出來的人來說,不用排序用O(n)演算法是很正常的事,連我都不由自主地認為O(n)演算法是這個題的標准答案。我們太習慣於標准答案了,這是我國教育最悲哀的地方。(廣義的洗腦就是讓你的意識依賴於某個標准答案,然後通過給你標准答案讓你不會思考而控制你)功能性需求分析試想,如果我們在實際工作中得到這樣一個題 我們會怎麼做看我一定會分析這個需求,因為我害怕需求未來會改變,今天你叫我找一個第2大的數,明天你找我找一個第4大的數,後天叫我找一個第100大的數,我不搞死了。需求變化是很正常的事。分析完這個需求後,我會很自然地去寫找第K大數的演算法——難度一下子就增大了。很多人會以為找第K大的需求是一種逗過早擴展地的思路,不是這樣的,我相信我們在實際編碼中寫過太多這樣的程序了,你一定不會設計出這樣的函數介面 —— Find2ndMaxNum(int* array, int len),就好像你不會設計出 DestroyBaghdad(); 這樣的介面,而是設計一個DestoryCity( City& ); 的介面,而把Baghdad當成參數傳進去!所以,你應該是聲明一個叫FindKthMaxNum(int* array, int len, int kth),把2當成參數傳進去。這是最基本的編程方法,用數學的話來說,叫代數!最簡單的需求分析方法就是把需求翻譯成函數名,然後看看是這個介面不是很二看!(註:不要糾結於FindMaxNum()或FindMinNum(),因為這兩個函數名的業務意義很清楚了,不像Find2ndMaxNum()那麼二)非功能性需求分析性能之類的東西從來都是非功能性需求,對於演算法題,我們太喜歡研究演算法題的空間和時間復雜度了。我們希望做到空間和時間雙豐收,這是演算法學術界的風格。所以,習慣於標准答案的我們已經失去思考的能力,只會機械地思考演算法之內的性能,而忽略了演算法之外的性能。如果題目是——逗從無序數組中找到第K個最大的數地,那麼,我們一定會去思考用O(n)的線性演算法找出第K個數。事實上,也有線性演算法——STL中可以用nth_element求得類似的第n大的數,其利用快速排序的思想,從數組S中隨機找出一個元素X,把數組分為兩部分Sa和Sb。Sa中的元素大於等於X,Sb中元素小於X。這時有兩種情況:1)Sa中元素的個數小於k,則Sb中的第 k-|Sa|個元素即為第k大數;2) Sa中元素的個數大於等於k,則返回Sa中的第k大數。時間復雜度近似為O(n)。搞學術的nuts們到了這一步一定會歡呼勝利!但是他們哪裡能想得到性能的需求分析也是來源自業務的!我們一說性能,基本上是個人都會問,請求量有多大看如果我們的FindKthMaxNum()的請求量是m次,那麼你的這個每次都要O(n)復雜度的演算法得到的效果就是O(n*m),這一點,是書獃子式的學院派人永遠想不到的。因為應試教育讓我們不會從實際思考了。工程式的解法根據上面的需求分析,有軟體工程經驗的人的解法通常會這樣:1)把數組排序,從大到小。2)於是你要第k大的數,就直接訪問 array[k]。排序只需要一次,O(n*log(n)),然後,接下來的m次對FindKthMaxNum()的調用全是O(1)的,整體復雜度反而成了線性的。其實,上述的還不是工程式的最好的解法,因為,在業務中,那數組中的數據可能會是會變化的,所以,如果是用數組排序的話,有數據的改動會讓我重新排序,這個太耗性能了,如果實際情況中會有很多的插入或刪除操作,那麼可以考慮使用B+樹。工程式的解法有以下特點:1)很方便擴展,因為數據排好序了,你還可以方便地支持各種需求,如從第k1大到k2大的數據(那些學院派寫出來的代碼在拿到這個需求時又開始撓頭苦想了)2)規整的數據會簡化整體的演算法復雜度,從而整體性能會更好。(公欲善其事,必先利其器)3)代碼變得清晰,易懂,易維護!(學院派的和STL一樣的近似O(n)復雜度的演算法沒人敢動)爭論你可能會和我有以下爭論,如果程序員做這個演算法題用排序的方式,他一定不會像你想那麼多。是的,你說得對。但是我想說,很多時候,我們直覺地思考,恰恰是正確的路。因為逗排序地這個思路符合人類大腦處理問題的方式,而使用學院派的方式是反大腦直覺的。反大腦直覺的,通常意味著晦澀難懂,維護成本上升。就是一道面試題,我就是想測試一下你的演算法技能,這也扯太多了。沒問題,不過,我們要清楚我們是在招什麼人看是一個只會寫演算法的人,還是一個會做軟體的人看這個只有你自己最清楚。這個演算法題太容易誘導到學院派的思路了。是的這道逗找出第K大的數地,其實可以變換為更為業務一點的題目——逗我要和別的商戶競價,我想排在所有競爭對手報價的第K名,請寫一個程序,我輸入K,和一個商品名,系統告訴我應該訂多少價看(商家的所有商品的報價在一數組中)地——業務分析,整體性能,演算法,數據結構,增加需求讓應聘者重構,這一個問題就全考了。你是不是在說演算法不重要,不用學看千萬別這樣理解我,搞得好像如果面試不面,我就可以不學。演算法很重要,演算法題能鍛煉我們的思維,而且也有很多實際用處。我這篇文章不是讓大家不要去學演算法,這是完全錯誤的,我是讓大家帶著業務問題去使用演算法。問你業務問題,一樣會問到演算法題上來。小結看過這上面的分析,我相信你明白我為什麼反對純演算法面試題了。原因就是純演算法的面試題根本不能反應一個程序的綜合素質!那麼,在面試中,我們應該要考量程序員的那些綜合素質呢看我以為有下面這些東西:會不會做需求分析看怎麼理解問題的看解決問題的思路是什麼看想法如何看會不會對基礎的演算法和數據結構靈活運用看另外,我們知道,對於軟體開發來說,在工程上,難是的下面是這些挑戰:軟體的維護成本遠遠大於軟體的開發成本。軟體的質量變得越來越重要,所以,測試工作也變得越來越重要。軟體的需求總是在變的,軟體的需求總是一點一點往上加的。程序中大量的代碼都是在處理一些錯誤的或是不正常的流程。所以,對於編程能力上,我們應該主要考量程序員的如下能力:設計是否滿足對需求的理解,並可以應對可能出現的需求變化。
⑹ 程序員面試常見問題有哪些
你有沒有做過什麼項目,這個問題要回答得簡明扼要,直接簡潔地描述你參與過的項目和在裡面扮演的角色。面試官是想看看你是不是真的參與項目了,你對項目的把控度、你在項目里擔當的角色、對項目類型以及你對項目應用的了解。通過你的回答,有經驗的面試官能看的出你對這個行業的認識。
⑺ 誰有程序員的面試題,例如東軟公司,或其他公司的程序員面試題
程序員面試一直是社區樂於討論的熱門話題。
這篇文章是站在面試官角度對於程序員面試問題的一個階段性反思和經驗總結。
【目標】
相信和不少朋友一樣,有了幾年工作經驗成為Senior後就開始了面試別人的經歷。作者在最初這個階段只是按照自己的想像把」找到基礎好的程序員「,」找到演算法能力優秀的程序員「,」找到有Android開發經驗的程序員「等作為面試的目標。但是,實際的經歷告訴作者,尤其是按「基礎好」,「演算法好」這些目標招到的人最終效果並不好。比如,有的面試者基礎知識和演算法掌握情況不錯,進程、線程、內存等概念清晰,基本的Hash,二叉樹,快速排序等數據結構和演算法也比較熟悉,但是進公司後在實際工作中表現得很糟糕。後來,作者才發現原來是作者的面試目標出了問題,作者原先的面試方法更像是大學的演算法或操作系統期末考試,按照這種方法讓許多並不合適的人通過了面試,同時也可能錯過了許多合適的人。
後來,作者的反思是,從公司的角度講,面試的根本目的是找到"能夠干好工作"的人,而「高學歷」,「演算法好」,「基礎好」,「有經驗」這些都是表象而不是根本,它們並不能直接和「工作好」劃等號。
【方法】
目標明確了,但接下來的問題是假設面試者是一個黑盒系統,「工作好」不是直接可觀測變數,你所能直接觀測的變數是基礎、演算法、經驗、學歷、性格、談吐、年齡等等。所以,實際上,你只能從「基礎好」,「演算法好」等可以直接觀測的量去推測「工作好」的概率,這就是一個在「X好「條件下"工作好「的條件概率問題:P(工作好 | X好)。
根據這個模型,面試所應該考察哪些方面就很明顯了,那就是選擇那種最具有區分性的方面來考察。比如,考察面試者的體型特徵沒有太大意義,因為P(工作好|高),P(工作好|矮),P(工作好|胖),P(工作好|瘦)的概率都差不多;所以,體型特徵不具有區分性,這不是面試所應該關注的內容。
面試官應當結合職位的要求明確哪些因素具有比較好的區分性。比如,如果要招一名技術門檻比較高的3D游戲引擎開發工程師,面試者A具有3D游戲引擎開發的經驗,但是在基礎知識和演算法面試方面表現一般;面試者B相反,基礎知識和演算法面試表現很好,但沒有游戲開發經驗,而你只能選擇其一。你選誰呢?其實,這就是兩個條件概率問題P(工作好|經驗好,基礎一般,演算法一般)和P(工作好|沒經驗,基礎好,演算法好)。這個問題就留給面試官來判斷了,就作者個人而言,對於技術門檻較高需要技術積累的職位,經驗更加說明問題,因此,作者更傾向於面試者A。
下面,作者再結合自己的經驗談談對面試中常見方面的看法。
【演算法】
演算法是Google和MS等大公司面試所重點考察的內容。作者個人很喜歡演算法,曾經參加ACM/ICPC拿過北京賽區的13名。但是,就個人經驗來看,作者所接觸過的絕大多數開發職位而言,演算法都不適合作為考察面試者優劣的主要因素。對於普通的非演算法性開發職位,考察面試者的演算法就相當於考察他打乒乓球好不好一樣,與目標「工作好」的相關性太低。就作者個人的經驗來看,差不多P(工作好|演算法好)=50%,也就是演算法面試沒有太大的區分性。
甚至,還有一種很不好的情況特別多地出現在演算法好的面試者身上,作者稱之為「只磨刀,不砍柴」。什麼意思呢?有類人只對什麼A*演算法,非同步編程,JVM類載入機制這種純技術問題感興趣,對實現用戶需求毫無興趣。這類人看起來有一定的技術能力,但是對公司來講貢獻十分有限,甚至不如技術一般但認真負責的人。所以,一旦遇到面試者演算法好,作者就特別留意考察會不會是這種「只磨刀,不砍柴」的人。
另外,雖然作者個人不了解Google和MS,但作者對於其特別重視考察演算法能力的面試策略是持懷疑態度的。即使在這樣的世界級大公司,演算法雖然重要,但可以想像在項目實施過程所遇到的各種各樣問題中,演算法問題絕大多數時候不會是主要瓶頸,沒有到那種需要每個人都是演算法高手的情況。實際上,絕大多數項目真正難點並不是一兩個演算法瓶頸,甚至也不是單點的技術瓶頸,而是系統性的組織、協調、設計、開發問題,有大量的看起來不是那麼有技術含量的臟活累活,也有許多問題是由於信息不足,並不是技術能力強就能克服這些困難。一個團隊最好優勢互補,有人演算法強,有人業務分析能力強,有人擅長後端服務,有人擅長前端界面,有人聰明,有人踏實,這是最好的。如果按照「演算法好」的單一標准選材,必定會把許多優秀的人才拒之門外。
補充:在更多地了解了Google和Facebook等一流公司的面試細節之後,作者對這個問題的認識有了一定的改變,實際上這些公司在面試過程中並不完全強調技巧性很強的演算法,而是更加註重編碼(Coding)能力,只是在進行編碼測試的過程中往往是通過一些簡單演算法題來進行的。作者對於這種面試方法越來越欣賞,並且也作為了作者們公司面試過程中的重點環節,因為編碼能力的測試是十分必要的,它有著知識性問題無法取代的作用,如果一個面試者連「判斷一個字元串是否是另一個字元串的子串」這樣的題目都無法正確並快速地實現,那麼基本上可以直接排除了。作者這里所強調的是不必考察高難度的演算法問題,並非不重視編碼能力測試,請讀者不要誤解
【基礎】
基礎面試是指考察諸如指針使用、進程線程概念等基礎知識的面試,十分類似於大學期末考試題。作者曾經以為基礎面試十分重要,但是現在不這么看了。在工作中基礎的確是重要的,但是在面試過程中,它必須具有區分性才有意義,也就是說P(工作好|基礎好)的概率要高,那麼考察指針使用,進程線程區別這樣的基礎題目才有它的意義。作者的實際經驗是,基礎面試並不具有很好的區分性,和演算法一樣, 差不多P(工作好|基礎好) = 50%。同時,基礎面試是最容易准備的,中國人有長期的應試教育經驗,要准備幾個把玩指針題目太容易了。
作者曾經遇到過這樣的面試者,他的C語言基礎和編譯、鏈接等原理掌握得非常好,給作者留下了深刻的印象,作者給的面試結論是:知識面不寬,只會C語言,但基礎很扎實,建議錄用。後來的事情證明了那個結論的前半部分是對的,但是」建議錄用「錯了。他在實際工作中表現得一塌糊塗,不理解需求,不理解整體架構;同時,上班時間不是花在項目上,而是花在閱讀諸如《程序員的自作者修養》之類的書籍上。最後,這位同事由於長期「不出活」離開了公司。
基礎不是不重要,而是「基礎好」不足以說明面試者能幹好工作,因為基礎是屬於局部性知識,而實際工作需要綜合性能力,二者有天壤之別。C語言、操作系統能考高分,但是不會寫程序的人在大學作者們還見得少嗎? 軟體開發就像蓋房子,綜合能力是設計和搭骨架,基礎知識是碼磚。張小龍原先Foxmail是Delphi開發的,他它不懂C#,你如果要招聘一個開發.NET Email客戶端的人,你考察他對CLR掌握得好不好有意義嗎? 讓張小龍來開發一個C#版的Foxmail真的會有困難嗎? 你招一個精通C#但沒有Email客戶端開發經驗的人來真的比張小龍靠譜嗎?
作者說基礎知識不重要,和古人說的「不積窪步無以至千里」是不是矛盾呢?不矛盾!「窪步」與「千里」是一種可累加關系,但再多的「基礎知識」都累加不成「綜合能力」。學習軟體開發要像持續集成一樣,一開始就是一個完整的系統,雖然規模不大,問題很多,但它麻雀雖小五臟俱全,從小系統到大系統,從簡單系統到復雜系統逐步演化。
所以,基礎好本身不足以說明太多的問題,必須進一步考察綜合能力。對於基礎面試表現不好的面試者,如果時間允許也要進一步考察,有的面試者其實是有能力的,只是沒有進行充分的准備。最理想的狀態當然是基礎和綜合能力俱佳,若不能兼顧,應當綜合能力優先。
【經驗】
這里所說的經驗不是通過工作了多少年來衡量的,而主要是指面試者的經歷,比如,是否完整地實現過一個軟體,或作為主要開發者完成過一個項目。經驗的重要性在於它能說明一個人的綜合能力。從項目的性質、規模和難度,面試官就可以大致判斷出面試者的綜合能力。如果一個面試者一直在大公司負責一個小模塊的開發維護,那麼基本可以判斷他不具備獨立或作為主要開發者承擔一個項目的能力,只適合在另一家大公司做類似的事情。對於門檻較高需要長期技術積累的職位,相關經驗更顯得尤為重要,比如,Linux內核開發,JVM開發,游戲引擎開發,資料庫實現,高級UX等。對於這類職位,沒有經驗的面試者即使綜合素質不錯也是需要長時間的學習和積累才能勝任。所以,基本上如果確定了你的職位屬於此類,那麼相關經驗毫無疑問應該成為首選因素,換句話說,P(工作好 | 相關經驗好)的概率是非常高的。
通過項目經驗判斷面試者的優劣比通過基礎和演算法測試更加靠譜,所以,面試過程中面試官應該花比較多的時間聽面試者介紹項目經驗,並進行深入地探討交流,了解面試者的知識面、思維能力、表達能力等。同時,可以結合項目提一些基礎知識和演算法的問題,比如,如果面試者做過C++相關的項目,那就可以問他如何進行內存管理?是否熟悉智能指針?如果面試者的回答不能令人滿意,那麼就基本上可以判斷他的項目做得不是很好。
要注意的是,經驗也是一個多維度的事物。比如,C++股票交易中間件系統,這就涉及(C++,中間件,股票) 3個維度。假如面試者A做過C++股票交易客戶端,面試者B做過C的股票交易中間件。從語言角度看,A最匹配,從項目性質看,B最匹配,你如何選擇?這就是在多個維度中,哪個維度更重要的問題,就這個例子而言,作者個人更傾向於B,因為作者認為中間件開發經驗是主要矛盾,而從C切換到C++並不是問題。所以,面試官需要判斷哪一種經驗是主要的,而哪一種經驗是次要的。比如,作者們招聘Android應用開發,這個職位的Android技術門檻並不高,它的真正難點在於做出好的用戶體驗(UX)。所以,如果一個面試者沒有Android的經驗作者們是可以接受的,但是作者希望他在UX方面有經驗,至少做過其他平台的移動應用開發。
【性格】
現在,作者來談作者認為最重要的因素:性格。這可能是許多初為面試官的朋友所難以想像的,怎麼會是性格最重要呢?說實話,當作者意識到這一點時,作者自己也很驚訝!說白了,還是 P(工作好|性格好)的概率最高啊。作者的實際經驗是,如果一個人的性格好,他能把工作做好的可能性是最高的,性格好遠比基礎好、演算法好要靠譜。
一個人如果技術上有缺陷,經驗上有不足,但性格好,在團隊中是很容易由其他人來補位的,他自己也很容易逐漸補起來;相反,如果一個人的性格不好,所有的技術優勢經驗優勢都發揮不出來,甚至還會起到負作用,而且性格缺點很難改變。作者一直談到實際工作所需要的是綜合性的能力,這種綜合能力的發揮中性格是至關重要的。項目中不止會遇到技術問題,要涉及溝通、協調,不同的人不同的部門既有合作又有磨擦,如何處理這些事情都需要一個良好的性格。可以說,在開發團隊里讓你與眾不同的不是你從哪個學校畢業,也不是你過去的經驗,而是你的性格
當然,性格是一個復雜的東西,它包含了很多的方面,並非所有方面都是程序員面試所需要關注的。作者的經驗是可以重點考察這些方面:
1) 態度積極還是消極。有的面試者在談吐中就會自然給你一種積極上進的感覺,或者你可以在他的經歷中發現他積極的因素,這些都不是太難看出來的。相反,有的面試者你能明顯感覺到他的消極情緒。積極性在工作中是十分重要的,積極的人能給團隊帶來朝氣,也更易於合作。基本上,如果確定面試者屬於態度積極的,他通過作者這一關的可能性就會大大增加;相反,如果確定屬於態度消極的,即使技術能力不錯作者也會十分謹慎。
2) IQ。作者的經驗是,總體來看,聰明的人在工作中的表現更為優秀。在面試中要考察一個人是否聰明並不一定要像Google和MS那樣找些專門測試IQ的智力題,其實,你只需要看他討論問題是不是很有邏輯性,思考和說話是不是反應敏捷就可以做出大致的判斷。另外,眼睛是人心靈的窗戶,一個人聰明與否,眼睛是會說話的。不過,聰明也不完全是優點,比如,當公司或項目遇到困難時,往往是聰明人先跑掉了,堅守的往往是IQ一般的人。
3) 語言表達能力。語言表達能力也是程序員十分重要的一項素質,它關繫到項目中的溝通是否順暢。面試官可以看看面試者能否用簡明的語言介紹清楚曾經做過的項目,能否抓住要點,能否考慮到聽者的相關背景。一般來講,語言表達能力強的人綜合能力都不會太差。(面試網 www.mian4.net)
4) 是否具有用戶意識。有人說程序員是做研發的,哪來什麼用戶?只有銷售、市場人員才會和用戶打交道。其實,這是完完全全的錯誤認識。你寫一個模塊,甚至一個API,只要有別人用,他就是你的用戶。有的程序員設計一個模塊或是一個軟體總是習慣於從使用者的角度來考慮,盡量地方便使用者,這就是一種良好的用戶意識。具有良好的用戶意識的人更能考慮別人的感受和整體的需要,而不是單純地從自己和局部來思考問題。當面試者談及過去的項目經驗時,面試官可以常常站在用戶的角度對其進行提問,從這個過程中觀察其是否具有良好的用戶意識。
5) 如何應對質疑和壓力。面試官應該對面試者的回答以及以往項目進行合理的質疑,看看他如何應對。曾經有一位面試者談到做游戲登錄伺服器的經歷,作者就問:「如果登錄伺服器掛了,怎麼辦呢」?他說原先雖然沒有考慮這個問題,但是可以怎麼怎麼改進。其實,大家都理解項目中有各種不完美,這裡面原因很多,只要面對質疑和壓力能從容應對努力往好的方向思考解決就可以了,不需要掩飾缺陷,更不應該有情緒。作者遇到過有的面試者,一旦你對其項目提出質疑,他馬上產生反抗情緒,或不高興,或不承認有問題,這很容易一下子看出來他在工作中容不得質疑和批評,這種人要想合作就很困難。
6) 個性特點。許多面試者喜歡在簡歷上寫「精通C++/Linux「,這些字眼看得人麻木,如果有人寫」喜歡C++/Linux「,作者就會有一種眼前一亮的感覺。「精通」是沒有感情色彩的敘述,而「喜歡」包含了面試者的個性,作者更願意看到面試者的個性。作者相信對某樣東西真正的熱情遠比你當前對它的掌握程度更為重要。其實,N年的經歷告訴作者們,同一個班的同學,同一個項目組的同事,雖然每天所學的知識,所接觸的工作都是相同的,但其實每個人的成績和表現差異是十分明顯的。那麼,到底本質的差異是什麼呢?其實,就是每個人的個性。是個性使得有的人業余時間去打球,有的人業余時間去看書,有的人喜歡Linux,有的人喜歡Mac。一個人在團隊中扮演的角色也和他的個性有很大的關系。面試官應該引導面試者展現自己的個性,並判斷其是否有益於團隊。
【總結】
最後總結起來,作者的經驗是:
1) 面試官的目標是找到」工作好「的人,一定要圍繞這個目標來進行面試,如果把面試當成了演算法或操作系統期末考試這就走入了誤區;
2) 面試過程是通過學歷、性格、基礎、經驗、演算法等可以測試的因素去綜合判斷面試者「工作好」的概率;
3) 在各種因素中,性格 > 經驗 > 基礎 > 演算法。性格是最重要的,如果性格不好,所有技術能力都會大打折扣,而且技術缺陷容易彌補,性格缺陷很難改變;經驗體現了一個人的綜合能力,你可以從面試者過去的經歷中判斷他能從事哪種工作,不能從事哪種工作;基礎和演算法則主要起到輔助參考的作用,基礎好的程序員一般適應性比較強,學新技術更快,但是切忌單純從基礎來判斷一個人的能力。
更多程序員面試問題請登陸楚湘人才網
⑻ 程序員 面試 如何回答
做一份工作,實際就是追尋夢想的過程,而為了完成夢想,必須有一個長期規劃,從而指導我們選擇工作。它是擇業過程中最本質和最原始的參考借鑒。下載鏈接
為此,小雲為你精選一份程序員面試書單,分為職業規劃、編程技能兩部分,適合剛畢業的大學生、正准備換工作的程序員們,涵蓋演算法工程師、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 行業的各種筆試,面試中。但本書更深層的意義在於引導讀者思考,和讀者共享思考之樂,編程之美。
⑼ 你要面試一個程序員,應該問他什麼問題
首先面試程序員分有沒有經驗
面試沒有經驗的程序員就隨便問問點ssm,ssh五大框架問題,多線程什麼的,再問問是否會點前端技術
有經驗就看看他的簡歷,問他簡歷項目上的問題,可以圍繞著簡歷上的項目問,通過他的回答涉及到的技術點之類的,拓展出去問其他的
⑽ 程序員的面試問題(希望全面點)
很多用這個. 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());