程式設計師面試金典--筆記(精華篇)
原文連結:http://codeshold.me/2017/01/cracking_interview.html
《程式設計師面試金典》 1-7章的總結
相關讀物《金領簡歷:敲開蘋果、微軟、谷歌的大門》(Cayle Laakmann McDowell 蓋爾 拉克曼 麥克道爾)careercup.com
面試流程
篩選面試 screening interview
- 電話面試的可能性大
現場面試 on-site interview
準備時間表
面試評估流程
- 一旦進入大型科技公司的面試環節,你之前的工作經驗就不是特別重要了,但它可能會左右面試官對自己的看法
答題情況
- 考量最終的解法是否最優,用時多久,程式碼整潔與否
常見的十大錯誤
- 只在計算機上練習
- 不做行為面試題演練(用心回顧以往的專案和經歷)
- 不做模擬面試訓練
- 試圖死記硬背答案
- 不大聲說出自己的解題思路
- 過於倉促
- 程式碼不夠嚴謹
- 不做測試
- 修正錯誤漫不經心
- 輕言放棄
常見問題解答
- 碰到熟悉的問題應該如是相告?
- 應該使用哪種程式語言?
- 面試結束後沒有收到回覆,是被拒了嗎?
- 被拒之後能否重新申請?可以的
面試揭祕
微軟面試
亞馬遜面試
谷歌面試
蘋果面試
Facebook面試
- Etherpad或其他共享文件工具寫些程式碼
雅虎面試
特殊情況
有工作經驗的求職者
- 在系統設計和架構架構方面應在簡歷中突出一些,面試的時候這方面的要求也應該高一些
- 說說碰到過的棘手的bug?
測試人員及SDET
專案經理與產品經理
- 處理含糊情況(面對含糊情況不會手忙腳亂、不知所措)
- 以客戶為中心(態度層面)-- 站在客戶角度來判斷問題
- 以客戶為中心(技術層面)
- 多層次交流能力(怎麼向祖母及時TCP/IP的問題)
- 對技術的熱情
- 團隊合作/領導能力(說說自己是怎麼處理團隊成員沒能按進度完成工作的情況。)
創業公司
- 最好的申請方式是內部推薦
- 簡歷--能夠在創業環境中賣力地工作
- 大公司注重在軟體開發上的整體職業素養,創業公司更注重自己的個性契合度、技術技能和此前的工作經驗
面試之前
積累經驗
- 找實習,“微軟探索者”、“谷歌程式設計夏列營”
- 開拓一些業務或專案,自己的想法,然後主動的做
人際網
- meetup.com
- 主動和人打招呼
- 助人為樂
寫好簡歷
- 有針對性
- 一張紙
- 專案經歷 2-4個
- 程式語言 java(非常熟練), C++(熟練), JavaScript(有過使用經驗)
行為面試
1. 準備
-
|常見問題|專案1|專案2|專案3|專案4| |:-------|:----:|:----:|:----:|:----:| |最難的部分||||| |有什麼收穫||||| |最有意思的部分||||| |最難解的bug||||| |最享受的過程||||| |與團隊成員的衝突|||||
針對問題,回想小故事並將小故事濃縮成幾個關鍵字
- 專案失敗的經歷
- 你需要說服團隊成員的事例
- 你有哪些缺點
- “有時候我可能對細節不夠重視。好的一方面是我反應迅速、執行力強,但不免會粗心大意而犯錯。有鑑於此,我總會找其他同事幫忙檢查自己的工作,確保不出問題。”
- 專案中最難處理的問題是什麼
- 應該問面試官的問題
- 真實的問題
- “你每天有多少時間花在寫程式碼上?”
- “你一週要開幾次會?”
- “整個團隊中,測試人員、開發人員和專案經理的比例是多少?他們如何互動的?團隊怎麼做專案規劃?”
- 有見地的問題
- “我注意到你們使用了X技術,請問你們是如何處理Y問題的?”
- “為什麼你們的產品選擇使用X協議而不是Y協議,對然有……好處,但存在……問題,很多公司並未採用該協議。”
- 富有激情的問題
- “我對可擴充套件性很感興趣。請問你從事過分散式系統方面額工作嗎?有哪些機會可以學習這方面的知識?”
- “我對X技術不是太熟悉,不過聽上去是個不錯的解決方案。你能給我多講講它的工作原理嗎”
- 真實的問題
2. 應對
力求具體,切記自大(具體的故事)
省略細枝末節
- “在研究最常用的使用者行為並應用Rabin-Karp演算法後,我設計了一種新演算法,在90%的情況下搜尋操作的時間複雜度由O(n)降至O(logn)”
回答調理清晰
- 主題先行(直接先說結果)
- S.A.R.法(情景、行動、結果)
技術面試
1. 準備
在紙上寫演算法程式碼,在紙上測試程式碼,將程式碼原樣輸入計算(記錄犯過的錯誤),模擬測試(mock interview, careercup.com)
必須掌握的知識
- 資料結構:連結串列、二叉樹、單詞查詢樹(trie)、棧、佇列、向量/陣列列表、雜湊表等
- 演算法:廣度優先搜尋、深度優先搜尋、二分查詢、歸併排序、快速排序、樹的插入/查詢等
- 概念t:位操作、單例設計模式、工廠設計模式、記憶體(棧和堆)、遞迴、大O時間
記憶冪表
- 2^10, 1K, 近似一千, 1024
- 2^20, 1MB, 近似一百萬, 1048576
- 2^30, 1GB, 近似十億
- 2^40, 1TB, 近似一萬億(trillion)
- 一個將每個32位整數對映為布林值的雜湊表可以把一臺計算機的記憶體填滿(2^32=4GB)
其他程式語言知識(參考公司的要求)
2. 應對
提問
- 以消除題目的疑義
- 例如就“設計一種列表的排序演算法”可連續提問
設計演算法
- 考慮時間複雜度、空間複雜度
- 大量資料的情況、演算法的限制
- 是否善用了“特定資料”(面試官指定的)
先編寫虛擬碼
編寫程式碼
- 多用資料結構
- 有條不紊、引數檢測
測試
- 先理清程式碼失效的原因
- 極端用例(0、負值、空值、最大值、最小值)
- 使用者錯誤
- 一般用例
3. 演算法題解法
舉例法
- 求任意時刻時針和分針之間的角度
模式匹配法
- 一個有序陣列迴圈移動後,找出其中最小的元素
簡化推廣法
- 從一本雜誌裡剪下一些單詞可以拼湊成一封勒索信,如何判斷該勒索信是否由某本雜誌裡的單片語成
簡單構造法
- 遞迴,列印某個字串所有可能的排列組合
資料結構頭男風暴
- 隨機生成一些數字,並儲存到一個陣列中,如何跟蹤陣列中的中位數
4. 好程式碼的建議
編寫一個函式檢查某個二進位制數(以字串形式傳入)是否等於以字串表示的十六進位制數
- 多用資料結構(如多項式的加減)
- 適當重用程式碼
- 模組化
- 靈活、健壯(面試官要求編寫程式碼檢查誰是三連棋的贏家,但可以假定其實NxN的棋盤)
- 錯誤檢查
面試結果
錄用
- 可申請延長回覆期限(若還在苦等其他公司的迴音)
- 拒絕錄用,可以闡明自己做當下最佳選擇的原因
被拒
- 詢問什麼時候可以再申請
- 再申請時或下次面試時,需要注意哪些事項
薪酬
- 簽約獎金、搬家費及其他一次性津貼(總和除以預期服務的年限)
- 各地生活成本差異(估算)
- 年終獎(打聽平均數)
- 股票期權與補助金(收入除以預期服務年限)
談判
- 給出具體的“要價”,具體的金額
- 開出比預期稍高的價碼
- 不要只盯著薪水(這往往不好改),可要求更多的期權或簽約獎金
- 使用合適的方式談判,如電話
- 先了解公司的等級制度,一定的級別對應一定的薪資範圍
職業發展
- 該公司能否增加履歷的份量?
- 是否提供了切實可行的轉崗通道?
幸福指數
- 產品:什麼樣的產品?和哪些人共事?
- 經理和隊友
- 企業文化(如何做決策到整體氛圍以及公司的組織架構,問問未來的同時如何描述)
- 工作時常,每週會有多少,一天能用來寫程式碼的時
入職準備
- 指定時間表,不要“溫水煮青蛙”
- 打造人際網路
- 向經理尋求幫助,開誠佈公的告訴主管自己的心跡
相關文章
- 【程式設計師面試金典】洪水程式設計師面試
- 程式設計師面試金典Chapter1程式設計師面試APT
- 12個程式設計師筆試面試寶典程式設計師筆試面試
- 【程式設計師面試金典】20180801程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----清除行列View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----詞頻統計View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----空格替換View程式設計師面試
- 新書出版 |《Oracle程式設計師面試筆試寶典》新書Oracle程式設計師面試筆試
- 《Cracking the Coding Interview程式設計師面試金典》----貓狗收容所View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----子串判斷View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----最長合成字串View程式設計師面試字串
- 《Cracking the Coding Interview程式設計師面試金典》----數字發音View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----最小調整有序View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----連結串列分割View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----原串翻轉View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----畫素翻轉View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----翻轉子串View程式設計師面試
- 智力題(程式設計師面試經典)程式設計師面試
- android程式設計師面試寶典Android程式設計師面試
- 好程式設計師Java教程之Java面試寶典Java IO篇程式設計師Java面試
- 《Cracking the Coding Interview程式設計師面試金典》----最大和子矩陣View程式設計師面試矩陣
- 《Cracking the Coding Interview程式設計師面試金典》----字串變換(字典樹)View程式設計師面試字串
- 《Cracking the Coding Interview程式設計師面試金典》----實時中位數View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----整數對查詢View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----單詞最近距離View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----連結串列A+BView程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----迴文連結串列View程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----確定字元互異View程式設計師面試字元
- 《Cracking the Coding Interview程式設計師面試金典》----基本字串壓縮View程式設計師面試字串
- 《Cracking the Coding Interview程式設計師面試金典》----C++過載>>和View程式設計師面試C++
- 新書出版 |《資料庫程式設計師面試筆試寶典》新書資料庫程式設計師面試筆試
- 程式設計師小明面試篇程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----最大連續數列和View程式設計師面試
- Java初中級程式設計師面試題寶典Java程式設計師面試題
- JAVA程式設計師面試之《葵花寶典》等Java程式設計師面試
- 【程式設計師面試金典】三個空汽水瓶可以換一瓶汽水。程式設計師面試
- 《Cracking the Coding Interview程式設計師面試金典》----最大字母矩陣(字母相同)View程式設計師面試矩陣
- 《Cracking the Coding Interview程式設計師面試金典》----最大子方塊(尋找01)View程式設計師面試