算法面試課程筆記001 算法面試到底是什麽鬼
算法面試課程筆記001算法面試到底是什麽鬼
===============================================================================
本文地址 :
===============================================================================
算法面試是什麽?
讓大家在面對面試中的算法問題時,有一個合理的思考路徑;
- ·不代表能夠"正確"回答每一個算法問題,但是合理的思考方向其實更重要,也是正確完成算法面試問題的前提
- ·算法面試優秀不意味著技術面試優秀
- ·技術面試優秀不意味著能夠拿到Offer
一.什麽是"正確"的回答一個算法問題
合理的思考路徑:算法面試的目的不是給出一個"正確"答案;正確還包含對問題的獨到見解;優化;代碼規範;封裝出的代碼的容錯性;
把這個過程看作是和面試官一起探討一個問題的解決方案。
對於問題的細節和應用環境,可以和面試官溝通。
這種溝通本身很重要,它暗示著你思考問題的方式。
舉例:假如對一組數據進行排序。 算法&數據結構
正常最優的為快速排序算法O(nlogn) 。但是是否考慮過以下這幾種情況呢?
- ·有沒有可能包含有大量重復的元素?
- ·是否大部分數據距離它正確的位置很近?是否近乎有序?
- ·是否數據的取值範圍非常有限?比如對學生成績排序。
- ·是否需要穩定排序?
- ·是否是使用鏈表存儲的?
- ·數據的大小是否可以裝載在內存裏?
這組數據有什麽樣的特征?
·有沒有可能包含有大量重復的元素?
·如果有這種可能的話,三路快排是更好地選擇。
·是否大部分數據距離它正確的位置很近?是否近乎有序?
·如果是這樣的話,插入排序是更好地選擇。
·是否數據的取值範圍非常有限?比如對學生成績排序。
·如果是這樣的話,計數排序是更好地選擇。
對排序有什麽額外的要求?
·是否需要穩定排序?
·如果是的話,歸並排序是更好地選擇。
數據的存儲狀況是怎樣的?
·是否是使用鏈表存儲的?
·如果是的話,歸並排序是更好地選擇。
·是否是使用隨機存儲的?
·如果是的話,快速排序是更好地選擇。
數據的存儲狀況是怎樣的?
·數據的大小是否可以裝載在內存裏?
·數據量很大,或者內存很小,不足以裝載在內存裏,需要使用外排序算法。
如果一個問題是非常難的問題,對你的競爭對手來說,也是難的。
關鍵在於你所表達出的解決問題的思路。甚至通過表達解題思路的方向,得出結論:這個問題的解決方案,應該在哪一個領域,我可以通過查閱或者進一步學習解決問題。
二.算法面試優秀不意味著技術面試優秀
算法面試只是技術面試的一部分。
根據你的簡歷和應聘職位的不同,勢必要考察其他技術方面。
技術面試的內容:(根據自己職位而定)
- 項目經歷和項目中遇到的實際問題
- 你遇到的印象最深的bug是什麽?
- 面向對象
- 設計模式
- 網絡相關;安全相關;內存相關;並發相關;…
- 系統設計;scalability
技術面試只是面試的一部分。面試不僅僅是考察你的技術水平,還是了解你的過去以及形成的思考行為方式。
項目經歷
- 工作人士
- 研究生
- 本科生
-畢業設計
-其他課程設計
如何找到項目?
- 實習
- 參與實戰課程學習
- 慕課網
- Coursera
創建自己的項目
- 自己做小應用:計劃表;備忘錄;播放器.…
- 自己解決小問題:爬蟲;數據分析;詞頻統計…
- 自己做網站,為別人提供服務,做博客;
- "不是項目"的項目:一本優秀的技術書籍的代碼整理等…
- ·分享:自己的技術博客;github等等通過過去了解你的思考行為方式
通過過去了解你的思考行為方式
- 遇到的最大的挑戰? (項目中的算法問題)
- 犯過的錯誤?
- 遭遇的失敗?
- 最享受的工作內容?
- 遇到沖突的處理方式?
- 做的最與眾不同的事兒?
準備好合適的問題問面試官
- 整個小組的大概運行模式是怎樣的?
- 整個項目的後續規劃是如何的?
- 這個產品中的某個問題是如何解決的?
- ·為什麽會選擇某些技術?標準?
- 我對某個技術很感興趣,在你的小組中我會有怎樣的機會深入這種技術?
算法面試仍然是非常重要的一部分
===============================================================================
路漫漫其修遠兮,吾將上下而求索。Let‘s grow up together !
===============================================================================
算法面試課程筆記001 算法面試到底是什麽鬼