大廠前端對演算法的要求如何?

想問問目前大廠,高級前端對演算法的要求水平如何,目前個人的演算法掌握情況如:
1. 了解遞歸、枚舉、貪心、分治,動態規劃等思想;
1. 掌握常見的搜索,排序演算法,如插入排序,選擇排序,快排,冒泡,歸併排序,二分查找等;
2. 與圖相關演算法,了解有向無向,有環無環,是否加權,基本上只熟悉廣度優先和深度優先搜索,還記得最短路徑演算法;
3. 熟悉二叉樹相關基本操作,熟悉前序、後序,中序遍歷,再深入的如B樹、紅黑樹,現在已經記不清楚了;

其實目前個人對前端技術還是挺有信心的,但是演算法方面,更深入的已經還給老師了。。。在目前階段是否需要主要加強演算法方面的知識,要到什麼程度可以比較好的滿足大廠對演算法的要求,謝謝?


作為一個畢業多年小前端,表示演算法什麼的早就還給老師了...

相比較演算法,我覺得數據結構設計模式對前端來說更重要,理由有三:

1)js可以原生提供的數據類型的確有限。很多時候我們都是用對象數組來簡單粗暴的解決問題,並寫一堆複雜的業務代碼來支撐邏輯。

比如,我們想做一個輪播圖,很自然的就會想到用數組來記錄輪播圖片的列表數據,我們這裡時髦一把,用vue數據驅動視圖的思想來實現,每次輪播翻頁後我們需要改變數組中圖片的順序,看似沒有問題。但是當業務複雜的時候呢,比如我們需要支持循環播放和雙向播放,就需要數組的邊界值進行特殊判斷了,這種特殊判斷就降低了代碼的可維護性。

那如果我們換個角度思考,一開始我們就不用數組來定義圖片列表,而改用一個雙向鏈表呢?問題就會簡單很多。而鏈表這個數據結構在js裡面是沒有原生實現的,需要我們自己來完成。

因此掌握常用的數據結構以及其相關方法還是很有必要的

2)設計模式是在某個場合下對某個問題的一種優雅的解決方案。這裡我加粗了優雅,沒錯,要解決一個問題,往往有不止一個答案。

比如,我想給頁面上一連串按鈕綁定點擊事件,要求點擊按鈕的時候彈出按鈕的內容。一個簡單粗暴的方法是給每個按鈕添加一個onclick事件。那假設按鈕個數非常多或者本身這個按鈕還有其它點擊事件要執行呢,這個方案就不那麼可行了。有的同學想到了可以用事件委託,沒錯,這裡你就用到了一種設計模式,代理模式。孰優孰劣,一目了然。

我認為每個業務場景都有一種合適的優雅的解決方案,而這就是設計模式。

3)通常情況下,前端需要處理的數據量和計算複雜度都不高。比如我想找到一個數組中的最大值,一般我會直接用數組的排序方法而不會考慮自己寫個冒泡或者快排。如果真要處理大量的數據,恐怕這個處理過程是否應該放在前端就值得商榷了。

問題需要不斷抽象,抽象的水平和經驗能力成正比。

內容由 58招聘FE 朱雀 提供


你竟然敢邀請我,看我不打你!

我只是在小企業,沒有搜狐的廠大;

我只是個小前端,用不著你說的那麼多演算法;

我只知道nodeJs端用得比較多你列舉的演算法;

精通演算法的前端適合做全棧,而不只是一個前端。


會八種排序演算法就行了,過面試妥妥的。


今天我面了 映客的前端實習生崗位,前端知識點幾乎沒問,頂多問了個js的作用域。_(:з」∠)_。

問得幾乎都是計算機網路,數據結構也順帶也問了一下。然而這些我都不咋記得了啊_(:з」∠)_

我都懷疑我是不是投錯崗位了ORZ,感覺沒有希望了。


推薦閱讀:

如果dom結構很深 如何使less寫的更加優雅 層級不會過多
為什麼現在又流行服務端渲染html?
完全理解jQuery源代碼,在前端行業算什麼水平?
作為一個剛入門的前端愛好者,以後立志成為前端攻城獅的我,應該要學習哪些方面的知識?
用media screen做響應式布局,為何斷點設為800px時chrome會在783px就變化?

TAG:前端開發 | 演算法 |