天天看點

大廠面試喜歡考算法,該怎麼破?

這兩年的軟體工程師面試可謂神仙打架!

有些 985、211 院校畢業的高材生都沒有拿到滿意的 Offer。國内一些大公司的門檻也越來越高,這裡的門檻很大程度上展現為對算法能力的要求。

很多人因為算法能力不過關而喪失了自己滿意的 Offer。

然而,雖然算法能力的門檻越來越高,但是面試題的類型和底層邏輯是不變的,甚至不少公司考察的都是 LeetCode 原題,這其中也包括了國内 ATM 等大公司。

1、

算法面試都考什麼?

如果從大的方向,可以将考察點分成兩類。第一類是資料結構與算法基礎知識,第二類是算法思想。

資料結構與算法基礎知識

這部分,我又做了一個小小的細分,将其分為兩個小點。

(1)各種資料結構的特性與基本操作

比如數組、隊列、棧、連結清單、樹、圖等。尤其需要掌握的棧和樹。這是因為使用到棧和樹的地方實在太多了。比如 DOM 樹(虛拟 DOM 樹)、樹形選擇器、浏覽器執行棧、浏覽器曆史記錄棧,等等。

另外,圍繞棧和樹的題目也相當多,從最簡單直接的樹形資料結構轉化複雜一點的資料結構解析,基本上用“棧+DFS”就可以實作,而做 DFS 時通常都圍繞樹型結構進行遞歸求解。

是以這兩個資料結構非常重要。面試頻率非常高,這裡要敲一下重點,希望大家認真對待這部分。

(2)複雜度分析

複雜度分析是學習資料結構與算法的基礎,也是核心。建議大家一定要先學會分析算法的複雜度,再去學習具體算法。

這部分内容包括時間複雜度和空間複雜度分析,其中每一種複雜度都有最好、最壞及均攤複雜度。而一般我們使用最壞複雜度比較多。

另外,分析複雜度除了分析疊代,也要會分析遞歸,遞歸棧的空間開銷經常被大家所忽略,這點值得引起大家的注意。

大廠面試喜歡考算法,該怎麼破?

算法思想(80%考點)

對于算法思想,需要大家在掌握了上面内容基礎上進一步學習。

這裡列舉了五個考點,它們分别是:

• 搜尋(BFS、DFS、回溯、二分等);

• 暴力優化(雙指針、單調棧、字首和等);

• 動态規劃;

• 分治;

• 貪心。

大廠面試喜歡考算法,該怎麼破?

以上内容覆寫了算法面試80%的考點。一些比較“冷門”的知識比如二分圖、跳表、蓄水池抽樣算法等考察的頻率很低,就沒有列出來。

希望大家集中精力将重心投入這 80% 考點中。其他知識點大家可以根據自己的情況學習。

2、

如何科學高效地準備算法面試

科學的學習路線和良好的刷題技巧是最重要的兩個因素。

有一個科學的學習路線就不會迷茫,也不至于發生由于學習順序不當導緻自信心被打擊的情況。有良好的刷題技巧就不至于反複踩坑,刷了又忘,忘了又刷,以至于最後什麼都沒有學到。

《算法通關之路》這本書就很好地解決了以上兩個問題。

大廠面試喜歡考算法,該怎麼破?

它不僅提供了完整的學習路線,内容覆寫面試的大部分考點。還濃縮了作者刷了數千道題目總結出來的核心知識點以及刷題技巧,幫助大家在有限的時間内搞定算法面試。

《算法通關之路》一書的最後一章就是專門讨論刷題技巧的,比如如何根據資料規模反推算法複雜度,以及資料預處理等,都是非常實用的刷題技巧。

這本書由多位作者編寫。他們大多來自名校,在算法比賽中都有不錯的成績。另外還特别善于寫題解,傳達自己的思想。整理的算法題解和算法思想放到了 GitHub 進行開源,累計擷取 4 萬多 star,幫助了無數的程式員獲得滿意的 Offer。

大廠面試喜歡考算法,該怎麼破?

相比于其他同類圖書, 這本書有三個特點:

  1. 題目範圍廣泛,基本上覆寫了大部分的常見題型。題目全部來源于力扣的高頻經典題,值得大家投入經曆學習。
  2. 題目之間不是孤立的,而是有一定的相關性和難度梯度。旨在通過若幹關聯題目的講解,讓讀者深入了解題目背後的邏輯,做到即使遇到新的題目也可以遊刃有餘。
  3. 大多數題目的講解非常詳細,而不是一筆帶過,除此之外,還配有大量圖檔,非常适合新手學習。

繼續閱讀