內容簡介
《劍指Offer:名企面試官精講典型編程題》剖析了50個典型的程式設計師面試題,從基礎知識、代碼質量、解題思路、最佳化效率和綜合能力五個方面系統整理了影響面試的5個要點。全書分為7章,主要包括面試的流程,討論面試流程中每一環節需要注意的問題;面試需要的基礎知識,從程式語言、數據結構及算法三方面總結了程式設計師面試的知識點;高質量的代碼,討論影響代碼質量的3個要素(規範性、完整性和魯棒性),強調高質量的代碼除了能夠完成基本的功能之外,還能考慮到特殊情況並對非法輸入進行合理的處理;解決面試題的思路,總結在編程面試中解決難題的常用思路,如果在面試過程中遇到了複雜的難題,應聘者可以利用畫圖、舉例和分解複雜問題3種方法化繁為簡,先形成清晰的思路再動手編程;最佳化時間和空間效率,介紹如何最佳化代碼的時間效率和空間效率,讀完這一章讀者將學會常用的最佳化時間效率及空間換時間的常用算法,從而在面試中找到最優的解法;面試中的各種能力,本章總結應聘者在面試過程中如何表現學習能力和溝通能力,並通過具體的面試題討論如何培養知識遷移能力、抽象建模能力和發散思維能力;兩個面試案例,這兩個案例總結了應聘者在面試過程中哪些舉動是不好的行為,而哪些表現又是面試官所期待的行為。
編輯推薦
面試官的視角從面試官視角剖析考題構思、現場心理、題解優劣與面試心得,尚屬首例。50餘道編程題《劍指Offer:名企面試官精講典型編程題》精選谷歌、微軟等知名IT企業的50餘道典型面試題,提供多角度的解題輔導。這些題目現今仍被大量面試官反覆採用,實戰參考價值頗高。系統的解題方法《劍指Offer:名企面試官精講典型編程題》系統地總結了如何在面試時寫出高質量代碼,如何最佳化代碼效率,以及分析、解決難題的常用方法。超寫實體驗與感悟Autodesk一微軟一思科,作者一路跳槽-路“面”,既親歷被考,也做過考官,更是資深程式設計師.大量的一線面試與編程經驗,足當確保《劍指Offer:名企面試官精講典型編程題》品質。
作品目錄
第1章 面試的流程
1.1 面試官談面試
1.2 面試的三種形式
1.2.1 電話面試
1.2.2 共享桌面遠程面試
1.2.3 現場面試
1.3 面試的三個環節
1.3.1 行為面試環節
應聘者的項目經驗
應聘者掌握的技能
回答"為什麼跳槽"
1.3.2 技術面試環節
紮實的基礎知識
高質量的代碼
清晰的思路
最佳化效率的能力
優秀的綜合能力
1.3.3 應聘者提問環節
1.4 本章小結
第2章 面試需要的基礎知識
2.1 面試官談基礎知識
2.2 程式語言
2.2.1 C++
面試題1:賦值運算符函式
經典的解法,適用於初級程式設計師
考慮異常安全性的解法,高級程式設計師必備
2.2.2 C#
面試題2:實現Singleton模式
不好的解法一:只適用於單執行緒
不好的解法二:可用於多執行緒但效率不高
可行的解法:同步鎖前後兩次判斷
推薦的解法一:利用靜態構造函式
推薦的解法二:按需創建實例
解法比較
2.3 數據結構
2.3.1 數組
面試題3:二維數組中的查找
2.3.2 字元串
面試題4:替換空格
O(n2)的解法,不足以拿到Offer
O(n)的解法,搞定Offer就靠它
2.3.3 鍊表
面試題5:從尾到頭列印鍊表
2.3.4 樹
面試題6:重建二叉樹
2.3.5 棧和佇列
面試題7:用兩個棧實現佇列
2.4 算法和數據操作
2.4.1 查找和排序
面試題8:旋轉數組的最小數字
2.4.2 遞歸和循環
面試題9:斐波那契數列
效率很低的解法,面試官不會喜歡
面試官期待的實用解法
O(logn)但不夠實用的解法
解法比較
2.4.3 位運算
面試題10:二進制中1的個數
可能引起死循環的解法
常規解法
能給面試官帶來驚喜的解法
2.5 本章小結
第3章 高質量的代碼
3.1 面試官談代碼質量
3.2 代碼的規範性
3.3 代碼的完整性
從3方面確保代碼的完整性
3種錯誤處理的方法
面試題11:數值的整數次方
自以為題目簡單的解法
全面但不夠高效的解法,離Offer已經很近了
全面又高效的解法,確保能拿到Offer
面試題12:列印1到最大的n位數
跳進面試官陷阱
在字元串上模擬數字加法
把問題轉換成數字排列
面試題13:在O(1)時間刪除鍊表結點
面試題14:調整數組順序使奇數位於偶數前面
只完成基本功能的解法,僅適用於初級程式設計師
考慮可擴展性的解法,能秒殺Offer
3.4 代碼的魯棒性
面試題15:鍊表中倒數
第k個結點
面試題16:反轉鍊表
面試題17:合併兩個排序的鍊表
面試題18:樹的子結構
3.5 本章小結
第4章 解決面試題的思路
4.1 面試官談面試思路
面試題19:二叉樹的鏡像
4.2 畫圖讓抽象問題形象化
面試題20:順時針列印矩陣
4.3 舉例讓抽象問題具體化
面試題21:包含min函式的棧
面試題22:棧的壓入、彈出序列
面試題23:從上往下列印二叉樹
面試題24:二叉搜尋樹的後序遍歷序列
面試題25:二叉樹中和為某一值的路徑
4.4 分解讓複雜問題簡單化
面試題26:複雜鍊表的複製
面試題27:二叉搜尋樹與雙向鍊表
面試題28:字元串的排列
4.5 本章小結
第5章 最佳化時間和空間效率
5.1 面試官談效率
5.2 時間效率
面試題29:數組中出現次數超過一半的數字
基於Partition函式的O(n)算法
利用數組特點的O(n)算法
解法比較
面試題30:最小的k個數
O(n)的算法,只當可以修改輸入數組時可用
O(nlogk)的算法,適合處理海量數據
解法比較
面試題31:連續子數組的最大和
舉例分析數組的規律
套用動態規劃法
面試題32:從1到n整數中1出現的次數
不考慮效率的解法,想拿Offer有點難
明顯提高效率的解法,讓面試官耳目一新
面試題33:把數組排成最小的數
5.3 時間效率與空間效率的平衡
面試題34:醜數
逐個判斷整數是不是醜數的解法
創建數組保存已經找到的醜數的解法
面試題35:
第一個只出現一次的字元
面試題36:數組中的逆序對
面試題37:兩個鍊表的
第一個公共結點
5.4 本章小結
第6章 面試中的各項能力
6.1 面試官談能力
6.2 溝通能力和學習能力
溝通能力
學習能力
善於學習、溝通的人也善於提問
6.3 知識遷移能力
面試題38:數字在排序數組中出現的次數
面試題39:二叉樹的深度
重複遍歷結點的解法,不足以打動面試官
只遍歷結點一次的解法,正是面試官喜歡的
面試題40:數組中只出現一次的數字
面試題41:和為s的兩個數字VS和為s的連續正數序列
面試題42:翻轉單詞順序 VS左旋轉字元串
6.4 抽象建模能力
面試題43:n個骰子的點數
基於遞歸求骰子點數,時間效率不夠高
基於循環求骰子點數,時間性能好
面試題44:撲克牌的順子
面試題45:圓圈中最後剩下的數字
經典的解法,用循環鍊表模擬圓圈
創新的解法,拿到Offer不在話下
6.5 發散思維能力
面試題46:求1+2+…+n
利用構造函式求解
利用虛函式求解
利用函式指針求解
利用模板類型求解
面試題47:不用加減乘除做加法
面試題48:不能被繼承的類
常規的解法:把構造函式設為私有函式
新奇的解法:利用虛擬繼承
6.6 本章小結
第7章 兩個面試案例
7.1 案例一:(面試題49)把字元串轉換成整數
7.2 案例二:(面試題50)樹中兩個結點的最低公共祖先
第8章 英文版新增面試題
8.1 數組
面試題51:數組中重複的數字
面試題52:構建乘積數組
8.2 字元串
面試題53:正則表達式匹配
面試題54:表示數值的字元串
面試題55:字元流中
第一個不重複的字元
8.3 鍊表
面試題56:鍊表中環的入口結點
面試題57:刪除鍊表中重複的結點
8.4 樹
面試題58:二叉樹的下一個結點
面試題59:對稱的二叉樹
面試題60:把二叉樹列印成多行
面試題61:按之字形順序列印二叉樹
面試題62:序列化二叉樹
面試題63:二叉搜尋樹的
第k個結點
面試題64:數據流中的中位數
8.5 棧和佇列
面試題65:滑動視窗的最大值
8.6 回溯法
面試題66:矩陣中的路徑
面試題67:機器人的運動範圍