面試的流程
面試的三種形式
- 電話面試:形象化語言講解細節;如果沒有聽清楚和聽懂問題,不要不懂裝懂,答非所問
- 共享桌面,遠程面試:編程習慣和調試能力。1,思考清楚再開始編碼,先想思路,考慮時間和空間復雜度、特殊情況的處理;2,編碼命名和縮進對齊的習慣。3,單元測試,定義函數之后對函數進行全面的單元測試。先寫單元測試用例,在寫解決問題的函數。測試在前,開發在后 很難。遇到問題,考察:設置斷點、單步跟蹤、查看內存、分析調用棧
- 現場面試:1,規劃路線 早到;2,衣著得體;3,注意面試函里面的面試流程;4,準備自己想問的問題
面試的三個環節
行為面試:項目經驗
- 自我介紹:主要學習和工作經歷? 30秒-1分鐘 簡歷有,不需要太長時間
- 描述自己的項目:簡單的項目背景? ->? 自己完成的任務? ->? 為完成任務,自己做了哪些工作,怎么做的? ->? 自己的貢獻
- Situation:簡短的項目背景。比如項目的規模,開發的軟件的功能、目標用戶等。
- Task:自己完成的任務。這個要寫詳細,要讓面試官對自己的工作一目了然。在用詞上要注意區分“參與”和“負責”:如果只是加入某一個開發團隊寫了幾行代碼就用“負責”,那就很危險。面試官看到簡歷上應聘者"負責”了某個項目,他可能就會問項目的總體框架設計、核心算法、團隊合作等問題。這些問題對于只是簡單“參與”的人來說,是很難回答的,會讓面試官認為你不誠實,印象分會減去很多
- Action:為完成任務自己做了哪些工作,是怎么做的。這里可以詳細介紹。做系統設計的,可以介紹系統架構的特點;做軟件開發的,可以寫基于什么工具在哪個平臺下應用了哪些技術;做軟件測試的,可以寫是手工測試還是自動化測試、是白盒測試還是黑盒測試等。
- Result:自己的貢獻。這方面的信息可以寫得具體些,最好能用數字加以說明。如果是參與功能開發,則可以說按時完成了多少功能:如果做優化,則可以說性能提高的百分比是多少;如果是維護,則可以說修改了多少個Bug
例子
- Winforms是微軟.NET中的一個成熟的UI平臺(Situation)?本人的工作是在添加少量新功能之外主要負責維護已有的功能(Task)。新的功能主要是讓Winforms的控件風格和Vista、Windows7的風格保持一致。在維護方面,對于較難的問題,我用WinDbg等工具進行調試(Action)。在過去兩年中,我共修改了超過200個Bug(Result)
- 你在該項目中碰到的最大問題是什么,你是怎么解決的?
- 從這個項目中你學到了什么?
- 什么時候會和其他團隊成員(包括開發人員、測試人員、設計人員、項目經理等)有什么樣的沖突,你們是怎么解決沖突的?
- 應聘者在準備簡歷的時候,針對每一個項目經歷都應提前做好相應的準備。只有準備充分,應聘者在行為面試環節才可以表現得游刃有余。
- 突出介紹自己完成的工作及取得的成績
?應聘者掌握的技能
- 描述技能掌握程度時也要注意“了解”、“熟悉”和 “精通”的區別
- 了解:和應聘的崗位無關,沒有寫的必要
- 熟悉:實際項目中使用某項技術己經有較長的時間,通過查閱相關的文檔可以獨立解決大部分問題,那么就使用熟悉
- 回 答 “為什么跳槽
- 不要抱怨,也不要流露出負面的情緒
- 盡量.避免以下4 個原因
- 1,老板太苛刻
- 2,同事太難相處
- 3,加班太頻繁
- 4,工資太低
- 例子:現在的工作做了一段時間,己經沒有太多的激情了,因此希望尋找一份更有挑戰的工作。然后具體論述為什么有些厭倦現在的職位,以及面試的職位我為什么會有興趣。筆者自己跳過幾次槽,第一次從Autodesk跳槽到微軟,第二次從微軟跳槽到思科, 后來又從思科回到了微軟。從面試的結果來看,這樣的回答都讓面試官很滿意,最終也都拿到了 Offer。?
當時在微軟面試被問到為什么要跳槽時,筆者的回答是:我在Autodesk 開發的軟件Civil 3D 是一款面向土木行業的設計軟件。如果我想在現在的 職位上得到提升,就必須加強土木行業的學習,可我對諸如計算土方量、道路設計等沒有太多興趣,因此出來尋找機會。
在微軟工作兩年半之后去思科面試的時候,筆者的回答是:我在微軟的主要工作是開發和維護.NET的 UI平臺Winformso由于Winforms已經非常成熟,不需要添加多少新功能,因此我的大部分工作是維護和修改Bug。 兩年下來,調試的能力得到了很大的提高,但長期如此,自己的軟件開發和設計能力將不能得到提高,因此想出來尋找可以設計和開發系統的職位。同時,我在過去幾年里的工作都是開發桌面軟件,對網絡了解甚少,因此希望下一個工作能與網絡相關。眾所周知,思科是一家網絡公司,這里的軟件和系統或多或少都離不開網絡,因此我對思科的職位很感興趣。
技術面試:現場寫代碼
應聘者在面試之前需要做足準備,對編程語言、數據結構和算法等基礎知識有全面的了解。面試的時候如果遇到簡單的問題,則應聘者一定要注重細節,寫出完整、魯棒的代碼。如果遇到復雜的問題,則應聘者通過畫圖、舉具體例子分析和分解復雜問題等方法先厘清思路再動手編程。除此之外,應聘者還應該不斷優化時間效率和空間效率,力求找到最優的解法。在面試過程中,應聘者還應該主動提問,以弄清楚題目的要求,表現自己的溝通能力。當面試官前后問的兩個問題有相關性的時候,盡量把解決前面問題的思路遷移到后面的問題中去,展示自己良好的學習能力。如果能做到這幾點,那么通過面試獲得心儀的職位將是水到渠成的事情。?
扎實的基礎知識
?寫的代碼及跟進的提問中能看出其編程語言掌握的熟練程度。以很多公司面試要求的C++舉例。如果寫的函數需要傳入一個指針,則面試官可能會問是否需要為該指針加上const、把 const加在指針不同的位置是否有區別;如果寫的函數需要傳入的參數是一個復雜類型的實例,則面試官可能會問傳入值參數和傳入引用參數有什么區別、什么時候需要為傳入的引用參數加上const。?
- 注重考查:鏈表? 二叉樹 ;??二分查找、歸并排序和快速排序、動態規劃和貪婪算法
- 格外關注邊界條件、特殊輸入等看似細枝末節但實則至關重要的地方,以考查應聘者是否注重代碼質量
- 面試官通常不喜歡應聘者在沒有形成清晰思路之前就草率地開始寫代碼,這樣寫出來的代碼容易邏輯混亂、錯誤百出。
- 首先,舉幾個簡單的具體例子讓自己理解問題
- 用圖形表示抽象的數據結構。像分析與鏈表、二叉樹相關的題目,我們都可以畫出它們的結構來簡化題目。
- 把復雜的問題分解成若干簡單的子問題,再一一解決。很多基于遞歸的思路,包括分治法和動態規劃,都是把復雜的問題分解成一個或者多個簡單的子問題
應聘者面試:面試者提問
- 不要問和自己的職位沒有關系的問題,比如問“公司未來五年的發展戰略是什么
- 不要問薪水。技術面試不是談薪水的時候,要談工資要等通過面試之后和HR談。而且這會讓面試官覺得你最關心的問題就是薪水,給面試官留下的印象也不好。
- 不要立即打聽面試結果,比如問“您覺得我能拿到Offer嗎”之 類的問題
- 推薦問的問題是與應聘的職位或者項目相關的問題
- 一是面試前做足功課,到網上去搜集一些相關的信息,做到對公司成立時間、主要業務、職位要求等都了然于胸;
- 二是面試過程中留心面試官說過的話。有不少面試官在面試之前會簡單介紹與招聘職位相關的項目,其中會包含從其他渠道無法得到的信息,比如項目進展情況等。應聘者可以從中找出一兩個點,然后向面試官提問。
?