這篇文章主要介紹算法面試的一些問題疤估、以及如何準備算法面試钱烟。 開始之前糊啡,記得點贊收藏加關(guān)注哦 发框,我這里也準備了很多面試熱門知識點和大廠面試題框咙,希望對大家有幫助嚷辅!有需要的朋友可以加q群:580763979? ? ??備注:簡書? ?免費領(lǐng)取~
對于面試中遇到的大多數(shù)問題簿姨,都能有一個合理的思考路徑
讓大家在面對面試中的算法問題時簸搞,有一個合理的思考路徑
不代表能夠“正確”回答每一個算法問題扁位,但是合理的思考方向其實更重要,也是正確完成算法面試問題的前提
算法面試優(yōu)秀不意味著技術(shù)面試優(yōu)秀
技術(shù)面試優(yōu)秀不意味著能夠拿到Offer
算法面試的目的不是給出一個“正確”答案趁俊,而是展示給面試官你思考問題的方式域仇。
算法面試不是高考。
把這個過程看作是和面試官一起探討一個問題的解決方案寺擂。
對于問題的細節(jié)和應(yīng)用環(huán)境暇务,可以和面試官溝通泼掠。
這種溝通本身很重要,它暗示著你思考問題的方式垦细。
我們需要對一組數(shù)據(jù)進行排序
設(shè)計排序接口择镇,標準庫的設(shè)計,業(yè)務(wù)中排序算法括改。
排序是基礎(chǔ)操作腻豌,很重要。
快速排序算法:O(nlogn)
忽略了算法使用的基礎(chǔ)環(huán)境叹谁。要動態(tài)選擇饲梭。
(向面試官提問):這組數(shù)據(jù)有什么樣的特征?
有沒有可能包含有大量重復(fù)的元素焰檩?
如果有這種可能的話憔涉,三路快排是更好地選擇。
普通數(shù)據(jù):普通快速排序就行了析苫;java語言標準庫排序使用的三路快排兜叨。
是否大部分數(shù)據(jù)距離它正確的位置很近?是否近乎有序衩侥?
如果是這樣的話国旷,插入排序是更好地選擇。
按照業(yè)務(wù)發(fā)生順序,先發(fā)生先完成,幾乎有序茫死,插入排序是更好的選擇跪但。
是否數(shù)據(jù)的取值范圍非常有限?比如對學(xué)生成績排序峦萎。
如果是這樣的話屡久,計數(shù)排序是更好地選擇。高考成績?nèi)≈捣秶邢蓿河嫈?shù)排序更好爱榔。
(向面試官提問):對排序有什么額外的要求被环?
是否需要穩(wěn)定排序?
如果是的話详幽,歸并排序是更好地選擇筛欢。
(向面試官提問):數(shù)據(jù)的存儲狀況是怎樣的?
是否是使用鏈表存儲的唇聘?
如果是的話版姑,歸并排序是更好地選擇。
快排依賴于數(shù)組的隨機存取雳灾。
(向面試官提問):數(shù)據(jù)的存儲狀況是怎樣的漠酿?
數(shù)據(jù)的大小是否可以裝載在內(nèi)存里?
數(shù)據(jù)量很大谎亩,或者內(nèi)存很小炒嘲,不足以裝載在內(nèi)存里,需要使用外排序算法匈庭。
有沒有可能包含有大量重復(fù)的元素夫凸?
是否大部分數(shù)據(jù)距離它正確的位置很近?是否近乎有序阱持?
是否數(shù)據(jù)的取值范圍非常有限夭拌?比如對學(xué)生成績排序。
是否需要穩(wěn)定排序衷咽?
是否是使用鏈表存儲的鸽扁?
數(shù)據(jù)的大小是否可以裝載在內(nèi)存里?
正確除了你能把代碼編出來運行出正確的結(jié)果镶骗。正確還包含對問題的獨到見解桶现;優(yōu)化;代碼規(guī)范鼎姊;容錯性骡和;
不僅僅是給出解決算法問題的代碼,還要把上面因素包括。
如果是非常難的問題相寇,對你的競爭對手來說慰于,也是難的。
關(guān)鍵在于你所表達出的解決問題的思路唤衫。
甚至通過表達解題思路的方向婆赠,得出結(jié)論:這個問題的解決方案,應(yīng)該在哪一個領(lǐng)域佳励,我可以通過查閱或者進一步學(xué)習(xí)解決問題休里。
算法面試只是技術(shù)面試的一部分。
根據(jù)你的簡歷和應(yīng)聘職位的不同植兰,勢必要考察其他技術(shù)方面份帐。
項目經(jīng)歷和項目中遇到的實際問題
解決能力,是否參與
深入思考
技術(shù)態(tài)度
面試前梳理自己簡歷上所寫到的項目:整理一下可能會問到的楣导。
你遇到的印象最深的bug是什么废境?
面向?qū)ο?/p>
設(shè)計模式
網(wǎng)絡(luò)相關(guān);安全相關(guān)筒繁;內(nèi)存相關(guān)噩凹;并發(fā)相關(guān);…
系統(tǒng)設(shè)計毡咏;scalability(大規(guī)模)
技術(shù)面試只是面試的一部分驮宴。面試不僅僅是考察你的技術(shù)水平,還是了解你的過去以及形成的思考行為方式呕缭。
關(guān)于過去:參與項目至關(guān)重要
工作人士
研究生
本科生
畢業(yè)設(shè)計
其他課程設(shè)計(大作業(yè))
實習(xí)
創(chuàng)建自己的項目
自己做小應(yīng)用:計劃表修己;備忘錄;播放器…
自己解決小問題:爬蟲迎罗;數(shù)據(jù)分析睬愤;詞頻統(tǒng)計…
“不是項目”的項目:一本優(yōu)秀的技術(shù)書籍的代碼整理等…(github)
分享:自己的技術(shù)博客;github等等
通過過去了解你的思考行為方式:
遇到的最大的挑戰(zhàn)纹安?
犯過的錯誤尤辱?
遭遇的失敗厢岂?
最享受的工作內(nèi)容光督?
遇到?jīng)_突的處理方式?
做的最與眾不同的事兒塔粒?
具體闡述:我在某某項目中遇到一個怎樣的算法問題:這個問題是怎樣的结借。它是我遇到的最大的挑戰(zhàn),我是如何克服解決的。
整個小組的大概運行模式是怎樣的窗怒?
整個項目的后續(xù)規(guī)劃是如何的映跟?
這個產(chǎn)品中的某個問題是如何解決的?
為什么會選擇某些技術(shù)扬虚?標準努隙?
我對某個技術(shù)很感興趣,在你的小組中我會有怎樣的機會深入這種技術(shù)辜昵?
算法面試仍然是非常重要的一部分
準備面試和準備算法面試 是兩個概念
算法面試荸镊,只是面試中的一個環(huán)節(jié)。
遠遠不需要啃完一本《算法導(dǎo)論》
強調(diào)理論證明
第一遍讀不需要弄懂證明
前幾遍閱讀應(yīng)該記住結(jié)論就行了堪置,不需要弄懂證明躬存。把更多的精力放在算法思想上。
針對算法面試舀锨,算法導(dǎo)論里面的理論推導(dǎo)和證明不是很重要的方面岭洲。
高級數(shù)據(jù)結(jié)構(gòu)和算法面試提及的概率很低
基礎(chǔ)的概念要知道,但是不需要實現(xiàn)等更深入的層面坎匿。
遠遠不需要到達信息學(xué)競賽的水平
不要輕視基礎(chǔ)算法和數(shù)據(jù)結(jié)構(gòu)盾剩,而只關(guān)注“有意思”的題目
各種排序算法
基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)和算法的實現(xiàn):如堆、二叉樹替蔬、圖…
基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)的使用:如鏈表告私、棧、隊列承桥、哈希表驻粟、圖、Trie凶异、并查集…
基礎(chǔ)算法:深度優(yōu)先蜀撑、廣度優(yōu)先挤巡、二分查找、遞歸…
基本算法思想:遞歸屯掖、分治玄柏、回溯搜索襟衰、貪心贴铜、動態(tài)規(guī)劃…
Intel的面試題:
初始序列為1 8 6 2 5 4 7 3的一組數(shù)采用堆排序,當建堆(小根堆)完畢時瀑晒,堆所對應(yīng)的二叉樹中序遍歷序列為:( )
A. 8 3 2 5 1 6 4 7
B. 3 2 8 5 1 4 6 7
C. 3 8 2 5 1 6 7 4
D. 8 2 3 5 1 4 7 6
樂視的面試題:
對一個含有20個元素的有序數(shù)組做二分查找绍坝,數(shù)組起始下標為1,則查找A[2]的比較序列的下標為()
A. 9苔悦、5轩褐、4、2
B. 10玖详、5把介、3、2
C. 9蟋座、6拗踢、2
D. 20、10向臀、5巢墅、3、2
考查二分查找法券膀。
阿里巴巴面試題
一組記錄排序碼為(5君纫、11、7芹彬、2蓄髓、3、17)舒帮,則利用堆排序方法建立的初始堆為()
A. (11会喝、5、7会前、2好乐、3、17)
B. (11瓦宜、5蔚万、7、2临庇、17反璃、3)
C. (17昵慌、11、7淮蜈、2斋攀、3、5)
D. (17梧田、11淳蔼、7、5裁眯、3鹉梨、2)
E. (17、7穿稳、11存皂、3、5逢艘、2)
F. (17旦袋、7、11它改、3疤孕、2、5)
百度面試題
在圖采用鄰接表存儲時搔课,求最小生成樹的Prim算法的時間復(fù)雜度為( )
O(n)
O(n+e)
O(n^2)
O(n^3)
基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)的使用:如鏈表胰柑、棧、隊列爬泥、哈希表柬讨、圖、Trie袍啡、并查集…
基礎(chǔ)算法:深度優(yōu)先踩官、廣度優(yōu)先、二分查找境输、遞歸…
基本算法思想:遞歸蔗牡、分治、回溯搜索嗅剖、貪心辩越、動態(tài)規(guī)劃…
選擇合適的OJ(Online judge):在線判題系統(tǒng)
不要選擇過于偏向程序設(shè)計競賽的OJ
*面向競賽難度過高
選擇合適的oj
leetcode
Online Portal for IT Interview
真實的面試問題
www.leetcode.com
HankeRank
在學(xué)習(xí)和實踐做題之間,要掌握平衡
基礎(chǔ)算法實現(xiàn)與算法思想
注意題目中的條件
給定一個有序數(shù)組…(二分法)
有一些題目中的條件本質(zhì)是暗示
設(shè)計一個O(nlogn)的算法(分治:在一顆搜索樹中完成任務(wù)信粮,對于數(shù)據(jù)排序)
無需考慮額外的空間(用空間換時間上的優(yōu)化)
數(shù)據(jù)規(guī)模大概是10000(O(n^2)就可以)
當沒有思路的時候
自己給自己幾個簡單的測試用例黔攒,試驗一下
不要忽視暴力解法。暴力解法通常是思考的起點。
LeetCode 3 Longest Substring Without Repeating Characters
在一個字符串中尋找沒有重復(fù)字母的最長子串
如”abcabcbb”督惰,則結(jié)果為”abc”
如”bbbbb”不傅,則結(jié)果為”b”
對于字符串s的子串s[i…j]
使用O(n^2)的算法遍歷i,j,可以得到所有的子串s[i…j]
使用O(length(s[i…j]))的算法判斷s[i…j]中是否含有重復(fù)字母
三重循環(huán):復(fù)雜度O(n^3)赏胚,對于n=100的數(shù)據(jù)访娶,可行
遍歷常見的算法思路
遍歷常見的數(shù)據(jù)結(jié)構(gòu)
空間和時間的交換 (哈希表)
預(yù)處理信息(排序)
在瓶頸處尋找答案:O(nlogn) + O(n^2) ; O(n^3)
O(n^2)能否優(yōu)化。
什么樣的問題使用什么樣的思路和數(shù)據(jù)結(jié)構(gòu)觉阅。
極端條件的判斷:
數(shù)組為空崖疤?
字符串為空?
數(shù)量為0留拾?
指針為NULL?
代碼規(guī)范:
變量名
模塊化
復(fù)用性
我這里也準備了一線大廠面試資料和超多超硬核的PDF技術(shù)文檔戳晌,以及我為大家精心準備的多套簡歷模板(不斷更新中),希望大家都能找到心儀的工作痴柔!
有需要的朋友可以加q群:580763979? ? ??備注:簡書? ?免費領(lǐng)取~