程序員面試寶典

標籤: 暫無標籤

154

更新時間: 2013-12-13

程序員面試寶典 -基本信息

  

程序員面試寶典

作 者: 歐立奇、劉洋、段韜

  出 版 社:電子工業出版社

  出版時間:2008-11-1

  字 數:526400

  版 次:1

  頁 數:361

  開 本:16開

  印 次:1

  紙 張:膠版紙

  I S B N :9787121073793

  包 裝:平裝

  定價:¥39.80
程序員面試寶典 -編輯推薦

  揭開知名IT企業面試、筆試的核心機密,傳授程序員崗位求職的關鍵技巧、傳遞快樂工作的精神與態度。

  該書涉獵各大IT公司歷年面試真題(包括筆試題、口試題、電話面試、英語面試,以及邏輯測試和智力測試),通過精確詳細的分在,把在應聘程序員(含網路、測試等)過程中所遇見的常見考點為你一一點破。

程序員面試寶典 -內容簡介

  作為剛畢業的學生和正在找工作的程序員,當你應聘一份程序設計、軟體開發方面的工作時,招聘方總會安排一次筆試以考查你的程序設計能力。我們寫作這本書的目的就是希望能幫助大家順利地通過這類面試。

  程序設計面試,時間大約是一小時,試題範圍包括計算機知識、程序設計、邏輯分析等。與傳統的面試不同,程序設計面試題以程序設計題、IQ智力題及各種與計算機相關的技術性問題為主。我們收集了大量知名企業技術類筆試中的常見試題,深入淺出地對試題的解答思路進行了分析和指導,不僅能幫助求職者快速複習有關知識,也對如何給面試官留下一個良好而深刻的印象進行了指導。希望能把在技術面試中取得的寶貴經驗毫無保留地傳授給讀者,以便使求職者對程序設計面試中的常見題型應付自如,從而獲得一份真正的高薪工作!

  通過對該書的學習,讀者能夠掌握關鍵性的面試技巧,發現和完善有關試題的最佳解決方案,以應對不利的局面。讀完本書,讀者會了解負責招聘工作的HR主管對程序設計面試都有哪些想法,公司將依據怎樣的標準評估應聘人員在程序設計面試中的表現,公司將出哪方面的題目來測試你,以及不同的公司在程序設計方面的側重點有何不同。通過對書中代表性例題舉一反三地鑽研,相信讀者無論以後遇見什麼樣的面試題目,都可以應對自如,在就業路上一帆風順。

程序員面試寶典 -主要特點

  《程序員面試寶典》不同於同類書籍的主要特點是:

  • 細

  國外的面試書籍和中國國情不是很相符。中國的軟體企業比較小,涉及的方面比較細、比較基礎,比如常會考基礎性編程的問題,如const、sizeof、類型轉化等。一些國內公司(北大方正、北大青鳥等)的面試題,多半是淺顯的基礎的問詢。換句話說就是,他們考得很細。本書把面試中國內公司最易考到的基礎考點放在「第2部分C/C++程序設計」裡面,希望能切切實實幫讀者解決實際問題。

  • 專

  面試題是通過一道題考查一個專類的能力。從被面試者的角度來講,你能了解許多關於出題者或監考者的情況。從面試者的角度來講,一個測試也許能從多方面揭示應試者的素質。本書將考查的方面分類:嵌入式編程類,軟體類,面向對象類,模板類……通過面試題目提升你對這些方面知識的掌握能力,以達到有的放矢、舉一反三的效果。

  • 廣

  求職者應聘的職位一般有3種:BNET、Btest和Se,分別代表網路工程師、測試工程師和軟體開發人員。市面上流行的面試書籍僅側重第三類軟體開發人員而忽略網路工程師和測試工程師。現實情況是諸如趨勢科技、華為3COM、Cisco等公司對網路方面的考題日趨增加。本書就這一方面給出了詳細論斷,並結合大量考題分析題目特點,給出應試方案。

  此外,隨著全球五百強企業進入中國大陸,外企對UML、設計模式、軟體度量等方面試題的喜愛有增無減。本書在這些方面加以改進,以適應市場需求。

  • 新

  程序員面試或者說應屆畢業生面試的題目年年翻新,歲歲不同。比如說現在很少有ASP和VB的面試例題,而新興語言C#卻成為面試熱點。同時本書對時下流行的綜合面試題、智力測試題、英語面試、電話面試加以分門別類,以大量實際案例總結應對面試的方案,以達到「一冊在手,臨危不亂」的效果。

  • 真

  本書的所有面試題都是近兩年各大公司面試題的匯總,內容非常新,可以算做面試者求職前的一份全真模擬。我們希望營造一種真實的面試氛圍,同時把如何寫好簡歷及如何在面試過程中應答的實際感悟融匯在書中,指引讀者走上理想的工作崗位。

  本書不是一本萬能書籍,但卻肯定是你工作求職的好助手和好夥伴!

程序員面試寶典 -圖書目錄

  第1部分 求職過程

  求職的過程就是一個提高和認識自我的過程,最後的成功根植於你本人一絲一毫的努力當中。也許真的像電影《肖申克的救贖》裡面說的那樣:「得救之道,就在其中。」

  第1章 應聘求職 3

  1.1 應聘渠道 3

  1.2 應聘流程 4

  第2章 簡曆書寫 5

  2.1 簡歷注意事項 5

  2.2 簡歷模板 8

  第3章 3種考試 13

  3.1 筆試 13

  3.2 電話面試 15

  3.3 面試 16

  第4章 職業生涯發展規劃 19

  4.1 缺乏工作經驗的應屆畢業生 19

  4.2 更換工作的程序員們 21

  第2部分 C/C++程序設計

  為什麼要選擇C系的語言呢?這是因為各大公司的編程語言絕大多數是C系的語言,雖然Java也占很大的比重,可是C++相對於Java來說更有區分度—C++是那種為每一個問題提供若干個答案的語言,遠比Java靈活。

  第5章 程序設計基本概念 25

  作為一個求職者或應屆畢業生,公司除了對你的項目經驗有所問詢之外,最好的考量辦法就是你的基本功,包括你的編程風格,你對賦值語句、遞增語句、類型轉換、數據交換等程序設計基本概念的理解。

  5.1 賦值語句 25

  5.2 i++ 27

  5.3 編程風格 29

  5.4 類型轉換 30

  5.5 螺旋隊列 34

  5.6 a、b交換 35

  5.7 C和C++的關係 36

  5.8 程序設計其他問題 37

  第6章 預處理、const與sizeof 39

  6.1 宏定義 39

  6.2 const 41

  6.3 sizeof 42

  6.4 內聯函數和宏定義 55

  第7章 指針與引用 57

  指針是C系語言的特色,是C和C++的精華所在,也是C和C++的一個十分重要的概念。

  7.1 指針基本問題 57

  7.2 傳遞動態內存 65

  7.3 函數指針 71

  7.4 指針數組和數組指針 73

  7.5 迷途指針 77

  7.6 指針和句柄 79

  第8章 循環、遞歸與概率 81

  8.1 遞歸基礎知識 81

  8.2 典型遞歸問題 83

  8.3 打靶 84

  8.4 字元子串 89

  8.5 循環語言 91

  8.6 0-1背包 94

  8.7 概率 95

  第9章 STL模板與容器 97

  9.1 向量容器 98

  9.2 泛型編程 103

  9.3 模板 105

  第10章 面向對象 109

  有這樣一句話:「編程是在計算機中反映世界」,我覺得再貼切不過。面向對象(Object-Oriented)對這種說法的體現也是最優秀的。

  10.1 面向對象的基本概念 110

  10.2 類和結構 111

  10.3 成員變數 113

  10.4 構造函數和析構函數 117

  10.5 拷貝構造函數和賦值函數 119

  10.6 多態的概念 123

  第11章 繼承與介面 127

  整個C++程序設計全面圍繞面向對象的方式進行。類的繼承特性是C++的一個非常重要的機制。這一章的內容是C++面向對象程序設計的關鍵。

  11.1 覆蓋 128

  11.2 私有繼承 130

  11.3 虛函數繼承和虛繼承 137

  11.4 多重繼承 141

  11.5 檢測並修改不適合的繼承 142

  11.6 純虛函數 146

  11.7 COM 148

  第12章 位運算與嵌入式編程 151

  12.1 位制轉換 151

  12.2 嵌入式編程 157

  第3部分 數據結構和設計模式

  隨著外企研發機構大量內遷中國,在外企的面試中,軟體工程的知識,包括設計模式、UML、敏捷軟體開發,以及.NET技術和完全面向對象語言C#的面試題目將會有增無減。

  第13章 數據結構基礎 167

  面試時間一般有2小時,其中至少有約20~30分鐘是用來回答數據結構相關問題的。鏈表、數組的排序和逆置是必考的內容之一。

  13.1 單鏈表 167

  13.2 雙鏈表 173

  13.3 循環鏈表 176

  13.4 隊列 177

  13.5 堆棧 180

  13.6 樹 185

  13.7 排序 185

  第14章 字元串 203

  14.1 整數字元串轉化 203

  14.2 字元數組和strcpy 205

  14.3 數組越界 210

  14.4 數字流和數組聲明 212

  14.5 字元串其他問題 213

  第15章 設計模式 219

  「地上本沒有路,走的人多了也就成了路」。設計模式如同此理,它是經驗的傳承,並非體系。它是被前人發現,經過總結形成的一套某一類問題的一般性解決方案,而不是被設計出來的定性規則。

  15.1 設計模式 220

  15.2 軟體工程 235

  15.3 C#基礎 237

  15.4 C#繼承 240

  15.5 C#委託 249

  15.6 ASP.NET 251

  第4部分 操作系統、資料庫和網路

  本部分主要介紹求職面試過程中出現的第三個重要的板塊—操作系統、資料庫和網路知識。這些內容雖不是面試題目中的主流,但仍然具有重要的意義。

  第16章 操作系統 257

  16.1 進程 257

  16.2 圖形學 259

  16.3 內存管理 261

  16.4 DOS、Linux、UNIX 271

  第17章 資料庫與SQL語言 273

  17.1 資料庫理論 273

  17.2 SQL語言 276

  17.3 SQL語言客觀題 279

  17.4 SQL語言主觀題 282

  第18章 計算機網路及分散式系統 285

  18.1 網路結構 285

  18.2 TCP/IP 288

  18.3 SNMP 292

  18.4 網路其他問題 295

  第5部分 綜合面試題

  英語面試、電話面試和智力測試,是除技術面試之外的另三大模塊。本部分教你如何精心地為這些內容做好準備,以讓你在整個面試過程中的表現更加完美。

  第19章 英語面試 301

  這裡的英語面試不同於普通的英語面試。就一個程序員而言,最好能夠做到用英文流利地介紹自己的求職經歷,這是進外企非常重要的一步。有些問題即便是中文你都很難回答,更何況是用英文去回答。但是求職過程本身就是一個準備的過程,精心地準備等待機會,機會總是垂青於那些精心準備的人。

  19.1 面試過程和技巧 301

  19.2 關於工作(About Job) 303

  19.3 關於個人(About Person) 308

  19.4 關於未來(About Future) 311

  19.5 其他建議(Other Tips) 312

  19.6 英文面試常用辭彙 313

  19.6.1 工作經歷相關辭彙 313

  19.6.2 個人資料相關辭彙 314

  19.6.3 個人品質相關辭彙 315

  19.6.4 學歷相關辭彙 316

  19.6.5 離職原因相關辭彙 318

  第20章 電話面試 319

  20.1 電話面試之前的準備工作 319

  20.2 電話面試交流常見問題 320

  第21章 智力測試 329

  智力測試是企業招聘時有可能出現的一個環節,事實上,IT企業求職招聘還是主要以基本的程序設計及數據結構為主。智力測試是考驗人的綜合智商、邏輯能力的過程,本身是很難複習和準備的。這些年來,智力測試的一個新的趨勢是和編程及演算法結合起來。

  21.1 關於數字的智力測試 329

  21.2 關於推理的智力測試 332

  21.3 關於時間的智力測試 333

  附錄A 簡歷模板 339

  附錄B 面試經歷總結 351

程序員面試寶典 -書摘

  樣張:

  8.4【螺旋隊列問題】

  面試例題1:

  21 22................

  20 7 8 9 10

  19 6 1 2 11

  18 5 4 3 12

  17 16 15 14 13

  看清以上數字排列的規律,設1點的坐標是(0,0),x方向向右為正,y方向向下為正.例如:7的坐標為(-1,-1) ,2的坐標為(0,1),3的坐標為(1,1).編程實現輸入任意一點坐標(x,y),輸出所對應的數字。[芬蘭著名軟體公司面試題,2005]

  解析:規律能看出來,問題就在於如何利用它。很明顯這個隊列是順時針螺旋向外擴展的,我們可以把它看成一層一層往外延伸。第 0 層規定為中間的那個 1,第 1 層為 2 到 9,第 2 層為 10 到 25,注意到 1、9、25、……不就是平方數嗎?而且是連續奇數(1、3、5、……)的平方數。這些數還跟層數相關,推算一下就可以知道第 t 層之內一共有 (2t-1)^2 個數,因而第 t 層會從 [(2t-1)^2] + 1 開始繼續往外螺旋。給定坐標 (x,y),如何知道該點處於第幾層?層數 t = max(|x|,|y|)。

  知道了層數,接下來就好辦多了,這時我們就知道所求的那點一定在第 t 層這個圈上,順著往下數就是了。要注意的就是螺旋隊列數值增長方向和坐標軸正方向並不一定相同。我們可以分成四種情況——上、下、左、右——或者——東、南、西、北,分別處於四條邊上來分析。

  東|右:x == t,隊列增長方向和 y 軸一致,正東方向(y = 0)數值為 (2t-1)^2 + t,所以 v = (2t-1)^2 + t + y

  南|下:y == t,隊列增長方向和 x 軸相反,正南方向(x = 0)數值為 (2t-1)^2 + 3t,所以 v = (2t-1)^2 + 3t - x

  西|左:x == -t,隊列增長方向和 y 軸相反,正西方向(y = 0)數值為 (2t-1)^2 + 5t,所以 v = (2t-1)^2 + 5t - y

  北|上:y == -t,隊列增長方向和 x 軸一致,正北方向(x = 0)數值為 (2t-1)^2 + 7t,所以 v = (2t-1)^2 + 7t + x

  其實還有一點很重要,不然會有問題。其它三條邊都還好,但是在東邊(右邊)那條線上,隊列增加不完全符合公式!注意到東北角(右上角)是本層的最後一個數,再往下卻是本層的第一個數,那當然不滿足東線公式啊。所以我們把東線的判斷放在最後(其實只需要放在北線之後就可以),這樣一來,東北角那點始終會被認為是北線上的點。

  答案:代碼如下:

  #include <stdio.h>

  #define max(a,b) ((a)<(b)?(b):(a))

  #define abs(a) ((a)>0?(a):-(a))

  int foo(int x, int y)

  {

  int t = max(abs(x), abs(y));

  int u = t + t;

  int v = u - 1;

  v = v * v + u;

  if (x == -t)

  v += u + t - y;

  else if (y == -t)

  v += 3 * u + x - t;

  else if (y == t )

  v += t - x;

  else

  v += y - t;

  return v;

  }

  int main()

  {

  int x, y;

  for (y=-4;y<=4;y++)

  {

  for (x=-4;x<=4;x++)

  printf("%5d", foo(x, y));

  printf("\n");

  }

  while(scanf("%d%d", &x, &y)==2)

  printf("%d\n", foo(x, y));

  return 0;

  }

  17.4【關於臨界問題】

  面試例題2:有一個100層高的大廈,你手中有兩個相同的玻璃圍棋子。從這個大廈的某一層扔下圍棋子就會碎,用你手中的這兩個玻璃圍棋子,找出一個最優的策略,來得知那個臨界層面。&#91;中國著名通訊企業H公司面試題,2008年&#93;

  解析:設總共樓層為 h

  a(n)(如a(1) ,a(2)...)表示每一次拋所在的層次。

  則對於任一次拋擲an,必須沿著上一次所拋得層之上逐個嘗試 既最多必須拋擲 a(n) - a(n-1) - 1 + n次

  依此類推,考慮平均值,將各次求和,消去之後得到

  (a(n) - n + (1+n)*n/2) / n 由於 a(n) = h

  所以等式化為 h/n + n/2 + 1/2

  其最小值發生於 n = (h*2)^(1/2)的時候

  代入 h = 100

  得到 n 約等於 14

  及最壞情況下,約需14次完成。

  答案:最多14次。

  從14層開始扔第一次,如果碎了,那麼從第2層開始扔,一層層加,直到13層。一共14次。

  如果沒有碎。27層再扔一次。依次推理,從15層到26層一共12次。加上前面的14層,27層2次所以說也是14次。

  依次這樣扔

  14

  14+13=27

  27+12=39

  39+11=50

  50+10=60

  60+9=69

  69+8=77

  77+7=84

  84+6=90

  90+5=95

  96

  97

  98

  99

  最多14次

  演算法如下:

  #include <iostream>

  using namespace std;

  int kk&#91;5&#93;;

  int fmin2&#91;101&#93;;

  int fmax2&#91;101&#93;&#91;101&#93;;

  int f(int n);

  int main()

  {

  memset(fmin2,101,sizeof(fmin2));

  memset(fmax2,0,sizeof(fmax2));

  fmin2&#91;0&#93; = 0;

  fmin2&#91;1&#93; = 1;

  cout <<"100 floor: " << f(100) << endl;

  return 0;

  }

  int f(int n)

  {

  if(fmin2&#91;n&#93; < 101) return fmin2&#91;n&#93;;

  for(int i = 1; i <= n; i++)

  {

  int d = f(n-i) ;

  fmax2&#91;n&#93; = (i-1) > d ? (i-1) : d;

  }

  int min = 101;

  for(int i = 1; i <= n; i++)

  {

  min = min < fmax2&#91;n&#93; ? min : fmax2&#91;n&#93;;

  }

  fmin2&#91;n&#93; = 1 + min;

  return 1 + min;

  }

  (感覺答案還是有點問題的:)

  如果一次15層的話,最後的期望值是13.75 = (15/2 + 90/15) * (9/10) + (90/15 + 10) * (1/10)

  如果一次14層的話,最後的期望值是13.9 = (14/2 + 98/14) * (98/100) + (98/14 + 2) * (2/100)

  21.5【關於群體面試】

  面試例題3:如果唐僧去西天取經,可以帶八個人去,李魁,孔子,瓦特,林黛玉,鄭和,武則天,牛頓,李白,請你把這八個人按照你的想帶的意願從強到弱排個序,並解釋為什麼這麼排序。&#91;中國著名互聯網企業W公司群體面試題,2008年&#93;

  解析:群面主要是考驗團隊配合、領導力等非技術素質。所以群面的題目一般都是有分歧的,沒有標準答案,每個答案只要自己把理由列充分就能自圓其說。 群面關鍵看是否能自圓其說,和其他成員的合作與溝通方面的東西。下面的答案僅供參考。

  答案:

  第一,選鄭和,理由:鄭和有豐富的遠行經驗,曾指揮數千上萬人,及若干船隊.還有他與途經各國打交道的優勢.即一項任務的總指揮;

  第二,選李魁,理由:西行,路途艱險,無數突發情況,需要武力的保障,沒有武力作為堅強保障,什麼也幹不了。

  第三,選武則天,武則天的生平:普通女子,普通才人,被太宗寵愛,太宗死後成尼姑,用計勾引高宗,變成宮裡的貴人,用計謀清除異已,成為皇后,最後強勢成帝。在這角色變化中,她應付皇宮裡的勾心鬥角,人際關係,處理得當,綜合能力實屬強大。

  第四,選牛頓,物理學家,可以運用科學知識為西行中所碰到的問題解決.簡單說就是用理論指導實踐,例如,簡單的物理知識,水的浮力,還有力的運用等等

  第五選瓦特,與牛頓類似,但略遜牛頓.沒有足夠條件給這位先生去發明,改善,運用他的發明。

  第六選孔子,倫理道德,之乎者也,有理但也拘泥於禮法.對任務的執行,總體起阻礙作用

  第七選李白,一介書生,空有文采,對任務執行無太大用處,但缺點明顯,如只會抱怨,感嘆懷才不遇,起阻礙作用。

  第八,選林妹妹,特點是哭,還有體力弱。哭,會影響團體情緒,體力弱,影響隊伍行進的速度,搞不好還要別人背她。起阻礙作用。

  從排序上,即 1.指揮決策;2.武力保障;3.公關能力;4.科學知識;5.科學技術,6.禮法拘束,7.浪漫消極,8.哭泣體弱。

  前五名是從對任務的執行起到正作用的,后三名起的是負作用。其實執行一項任務,挑選需要的人,為任務的完成來服務。每個人物都有優點缺點,但是為了完成西天取經的任務,只能選擇最合適的人選了。