前端需要学习算法吗 算法面的意义 职业规划

资深前端工程师

  • 数据可视化
  • 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)
posted @ 2020-09-14 19:05  lemon-Xu  阅读(1182)  评论(0编辑  收藏  举报