前端需要學習演算法嗎 演算法面的意義 職業規劃
資深前端工程師
- 資料視覺化
- VR & AR
- 框架級別開發
- 業務開發攻堅
獨當一面
- 管理能力
- 架構能力
- 程式能力
配股票和期權
Javascript + CSS + HTML
React/Vue/Node/Webpack/Gu,p 進階培養、直指大廠
演算法、架構 迴歸本質, 目標高T
T6
演算法面的定義
大廠初中高階: 基礎程式
排序、遞迴、正則表示式、函式節流、柯理化程式
速度、質量、執行效率、對一些函式的掌握
業務經常用
大廠資深: 演算法程式
全排序、八皇后、動態規劃
千萬級效能優化, 你來
專家+首席: 競賽程式
圖的同構
淘寶到了節日的宣傳圖片, 幾萬張幾十萬張, 演算法生成宣傳圖片攻克
react核心演算法實現
舉例
總共5星
0星 陣列展平簡單
function flattenOnce(arr){
return [].concat(...arr)
}
arr = [[1, 2], [3, 4]]
[].concat([1, 2], [3, 4])
[].concat(...[ [1, 2], [3, 4] ])
[].apply(null, [ [1,2], [3, 4] ])
思考速度
對於語言的運用, 函式的運用, 小技巧的運用
1星 陣列展平(遞迴)
展平一個數組, 【【1, 2】, 3, 【【【4】, 5】】】 = >【1, 2, 3, 4, 5】
function flatten(arr){ return [].concat( ...arr.map(x => Array.isArray(x) ? flatten(x): x) ) }
抽象遞迴表示式, 根據科學理論來實現
初級工程師面試 10個人 有5個人可以答出來, 沒有打出來的直接走
5箇中 有2個寫的很好, 面試官就很高興, 2個人基本都要
3個人寫的不簡介寫的複雜, 第一次沒寫對, 小環節出錯, 還要考核
對淘汰貢獻很大
1星 函式節流
過濾掉重複的滾動事件
監聽滾動的事件, 並進行UI處理
60毫秒響應一次
讓UI操作更流暢
時序圖思考:
function throttle(func, delay = 60){ let lock = false; // 鎖 return (...args) => { if(lock) {return} func(...args) lock = true // 上鎖 setTimeOut(()=> {lock = false}, delay) // 60ms解鎖 } }
過濾重複的驗證事件(使用者輸入停止後300ms觸發驗證)
輸錯了框要變紅, 使用者輸入了錯誤字元馬上刪除, 這時候就沒有判斷的必要
時序圖思考:
function throttle(func, delay = 300, I = null){
return (...args) = >{
clearInterval(I)
I = setTimeout(func.bind(null, ...args), delay)
// I = setTimeout( (...args) => func(...args), delay)
}
}
2星 柯里化
對於curry(foo), g函式引數足夠4個, 就呼叫foo(a, b, c, d), 如果小於4個就返回一個可以繼續積累引數的函式
const foo = curry( (a, b, c, d) => {
console.log(a, b, c, d)
})
foo(1)(2)(3)(4) // 1 2 3 4
foo(1)(2)(3) // 不返回
const f = foo(1)(2)(3) //
f(5) // 1 2 3 5
高階函式處理函式, 閉包, allArgs引數儲存函式
const curry = func => {
const g = {...allArgs} => allArgs.length >= func.length ? func(...allArgs)
: (...args) => g(...allArgs, ...args)
return g
}
能答出來就很厲害了, 答得很好的高階工程師就可以錄用了
做不出來, 資深工程師必掛, 喪失很多機會(深度不夠)
3星 Y-組合子
去掉上述的const g
看不懂了直接截圖
前置知識lambda演算
4星 樹的編輯距離(DOM-DIFF)
將DOM抽象成一棵標籤樹
上圖
前置知識: 動態規劃
演算法對職業生涯的意義
- 工作機會 面試通過率
- 成倍效率 高效/快樂
- 語言跨度 語法容易、演算法難!! 職位跨度
- 保值 轉型成本低、越老越吃香
演算法修煉什麼
- 思維
- 專注
- 視野 演算法是各行各業抽象出來的問題
- 技巧
整個思維整個價值
演算法積累了幾百年, 學習演算法就是學習精華
學習演算法越早越好
如何修煉演算法?
知識量巨大如何修煉?
理論知識+大量練習
- 《演算法導論》 《概率》-人工智慧 8個月 + 4個月
挑戰人性 - 組內分享+引導+實戰 2個月+2個月(有成效、緩慢提升)
- 教學 + 練習 + 長期指導(演算法1)