前端面试对算法要求不高?!大错特错......

640?wx_fmt=jpeg

文章部分内容来源 | https://github.com/LeuisKen/leuisken.github.io/issues/2

作者 | LeuisKen

目前为止我参加过几次前端开发方面的面试,确实有不少面试官会问道一些算法。通常会涉及的,是链表、树、字符串、数组相关的知识。

前端面试对算法要求不高,似乎已经是业内的一种共识了。虽说算法好的前端面试肯定会加分,但是仅凭常见的面试题,而不去联系需求,很难让人觉得,算法对于前端真的很重要。

直到有一天,有一位面试官问我这样一个问题,下面我按照自己的回忆把对话模拟出来:

面试官:你有写过瀑布流吗?

我:我写过等宽瀑布流。实现是当用户拉到底部的一定高度的时候,向后端请求一定数量的图片,然后再插入到页面中。

面试官:那我问一下,如何让几列图片之间的高度差最小?

我:这个需要后端发来的数据里面有图片的高度,然后我就可以看当前高度最小的是哪里列,将新图片插入那一列,然后再看看新的高度最小的是哪一列。

面试官:我觉得你没有理解我的问题,我的意思是如何给后端发来的图片排序,让几列图片之间的高度差最小?

我:(想了一段时间)对不起,这个问题我没有思路。

面试官:你是软件工程专业的对吧?你们数据结构课有没有学动态规划?

我:可能有讲吧,但是我没什么印象了。

对话大概就是这样,虽然面试最终还是pass了,但这个问题确实让我很在意,因为我觉得,高度差“最”小,真的能用很简单的算法就解决吗?

这个问题的实质,其实就是有一个数组,将数组元素分成n份,每份所有元素求和,如何使每份的和的差最小。

搜索上面这个问题,很快就能找到相关的解答,很基本的一类动态规划问题——背包问题。

之前我确实看过背包问题的相关概念(也仅仅是相关概念)。当时我看到这样一段话:

许多使用递归去解决的编程问题,可以重写为使用动态规划的技巧去解决。动态规划方案通常会使用一个数组来建立一张表,用于存放被分解成众多子问题的解。当算法执行完毕,最终的解将会在这个表中很明显的地方被找到。

后面是一个用动态规划重写斐波那契数列的例子。我看到它只是将递归的结果,保存在了一个数组中,就天真的以为动态规划是优化递归的一种方法,并没有深入去理解。

不求甚解,确实早晚会出问题的。当时我虽然以为自己知道了算法的重要性,但其实还是太年轻。

动态规划可以求解一类“最优解”问题,这在某种程度上让我耳目一新。这件事给我的启发是,数据结构与算法对于前端的意义,远比我们认为的更重要。语言只是工具,而算法才是程序的灵魂,这句话非常有道理。

也因此分享一套适合前端程序员学习的干货视频,方便大家掌握数据结构与算法方面的知识,限时免费领取(截止到4号结束)

640?wx_fmt=jpeg


640?wx_fmt=jpeg

长按添加微信  

即可领取视频

PS:希望大家领到之后,花几个小时的时间认真看完,让它真正发挥出价值来。

这套视频由"开课吧"友情提供,大家熟知的IT技术大牛廖雪峰已加盟开课吧,并耗时半年研发了精品付费课程——《Web全栈架构师》,来帮助初级前端工程师实现全方位进阶

课程深度对标百度T6--T7,特别适合有1-3年开发经验的前端程序员们学习,对课程感兴趣也可以加微信了解。


640?wx_fmt=jpeg

640?wx_fmt=jpeg

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值