面試官談基礎知識:
- C++語言基礎知識;設計模式;UML圖;軟體工程知識;
- C++記憶體管理;
- 資料結構和演算法;編程能力;部分資料知識,概率、線性代數知識;問題分析的能力;
- 編程基本功;并發控制;演算法和時間、空間復雜度;語言的基本概念;
- 編程基礎;計算系統基礎知識;演算法及設計能力;
- OS了解程度:記憶體管理,檔案操作,程式性能,多執行緒,執行緒安全;編程語言的掌握程度;經典的演算法和資料結構;
- 從我自身角度來分析,應該是還差經典的演算法和資料結構;
編程語言:
- 問編程語言語法知識;使用一種編程語言寫代碼解決一個問題;通過使用代碼,判斷應聘者對語言的掌握程度;
- C++面試:
- 面試官直接詢問對C++語言的理解;(概念題)
- 面試官拿出事先準備好的代碼,讓應聘者分析結果;(代碼分析題)
- 要求應聘者寫代碼定義一個型別或者實作型別中的成員函式;
- Effective C++;C++ primer;深度探索C++物件模型;The C++ programming Language;
資料結構:(圍繞下面幾個常見資料結構展開)(編程題)
- 關于資料結構的介紹可以參考:經典資料結構實作與分析;
- 陣列:線性表結構;尋找重復的數字;可以把陣列作為哈希陣列來進行使用;二維陣列查找;
- 字串:線性表結構;字串是由若干字符組成的序列;字串替換,要問清楚是在原字串替換,還是利用新的記憶體來進行字串替換;注意c++ 字串操作api;
- 鏈表:鏈表由指標把若干個節點連接成鏈狀結構;復雜鏈表:鏈表中除了有指向下一節點的指標,還有指向任意節點的指標;
- 樹:二叉樹遍歷的6中寫法;考察樹的題目,多考察復雜指標的操作;
- 堆疊:與遞回密切相關;使用兩個堆疊來進行模擬佇列的行為;
- 佇列;FIFO 原理;可以借助佇列來實作廣度優先搜索;
演算法和資料操作:具體查看基礎演算法策略總結
- 遞回和回圈:遞回實作比較簡潔,回圈實作性能比較高;在面試程序中,我們可以和面試官討論,選擇合適的方法編程;
- 查找和排序:查找和排序演算法是考查演算法的重點;排序的環境是什么,有哪些約束條件;要和面試官溝通好,根據不同排序演算法的特點,選擇最好的排序演算法;
- 回溯法:可以用遞回容易實作回溯的方法;但是如果不能使用遞回,可以和面試官溝通進行使用堆疊來進行實作;用回溯法解決問題的所有選項可以用樹狀結構描述;在某一步可能有n個選項,那么該步驟可以看做樹狀結構中的一個節點,每個選項可以看做樹中節點的連線;經過這些連線達到該節點的n個子節點,樹的葉節點對應著終結狀態,如果葉節點的狀態滿足題目的約束條件,那么我們找到了一個可行的解決方案;解決問題程序中,嘗嘗需要使用陣列,記錄標記過的點;
- 動態規劃:問題可以分解為子問題,從遞回角度進行分析問題;子問題之間有重疊,為了避免重復計算;可以自下而上的回圈代碼實作;把子問題的最優解先計算出來并進行用陣列保存;接下來基于子問題的解來求解最大的問題的解;動態規劃往往用來進行優化演算法,優化重疊子問題,以求得最優解(最大值,最小值);
- 求一個問題的最優解;
- 整體問題的最優解依賴于子問題的最優解;
- 子問題之間存在重疊;
- 貪婪演算法:如果分解子問題有特殊選擇,采用這一選擇一定能得到最優解;可以使用貪心演算法;必要的時候需要證明貪心演算法的正確性;
- 位運算:位運算屬于資料操作;總共有與,或,異或,非,左移與右移6中運算操作;注意理解 原碼,反碼和補碼 的概念;
保持更新,轉載請注明出處;更多內容請關注cnblogs.com/xuyaowen;
代碼倉庫:https://github.com/yaowenxu/codes/tree/master/劍指Offer
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/27650.html
標籤:其他
上一篇:劍指Offer(第二版)面試題目分析與實作-面試的流程
下一篇:checkbox 樣式重寫
