前端工程师应该掌握算法吗?

2016-11-26 21:52:19 +08:00
 neoblackcap

在公司里面面试了好几个应聘前端工程师的人,除了 css 跟 jQuery 之外,其他基本上都不懂,排序算法普遍不能说出快排跟冒泡排序的区别,更不用说实现了。 有时候我在想身为一个面试官,我应该考算法吗?但是不考算法的话,我没法检验他们是否符合工程师而不是设计师的岗位要求。 一个页面 jQuery 写几千行,完全不用函数,不断地用 jQuery 插件,除此以外连个简单数组排序都做不了。 请问各位前端大神应该如何面试一个前端?

16404 次点击
所在节点    程序员
93 条回复
binux
2016-11-27 03:19:29 +08:00
刚才正好在知乎看到一个回答《字丑的演员会有字替么?》 https://www.zhihu.com/question/53009177/answer/133077956

一个演员要书法好有什么用?可能一辈子都用不到几次,但是为什么有的演员就会去练?我觉得这就是职业素养。
同理,前端程序员可能一辈子用不到几次算法,但是即使不用,算法也隐藏在运行的代码,使用的库之下。了解算法是一个程序员的职业素养。
fuermosi777
2016-11-27 03:51:26 +08:00
应该,而且必须。
q397064399
2016-11-27 05:59:08 +08:00
第一,首先打一遍楼上会写算法的人的脸,本人对算法持保留意见,
绝大部分搜索排序等算法只要知道其算法复杂度,与大致实现即可,需要的时候再去找
(这些算法比楼上发帖的各位年纪都要大,基本有针对各种应用场景的最优解)
面试算法的时候,应该多了解面试者的知识面,而不是针对某个具体的算法题,
你们前端大神 淘宝的 winter ,在职人节目上不就死在了最简单的 3sum ,
这个题目连我这种菜鸟都知道有 O(N3) O(N2 LogN)的解法,拿起书本来,我可以告诉你是哪一章节的题目,
小学生难度的狗屎题不也把 winter 这种大神给难倒了么

http://www.bilibili.com/video/av5063912/

以工程实践的角度来讲,算法如果有现成的细粒度并且合适的封装实现,
自己实现是找抽,我经常看到某些新手在 Java 里面写着蹩脚的二分查找实现,
先不说容易出错,而且扩展性极差,基本是跟具体的类型耦合在一起的,
大哥,查下 API 会死啊, Java Util 提供基于接口的二分最佳实现

第二,面试算法要看你这个程序员程序员的开发领域,
你一个前端天天跟人家扯啥动态规划干嘛,
简单点的动态规划,面试做出来了,不一定显得牛逼,
也许人家正好刷过这题,难一点的动态规划,人家面试 30 分钟, 20 分钟给你去思考这个递推公式了
我觉得最好问下前端工程师,重力加速度是多少,加速度计算公式,以及牛顿定律
做动画效果的时候倒是经常能用得上
q397064399
2016-11-27 06:04:09 +08:00
http://www.bilibili.com/video/av5063912/
这个视频再一次证明了,优秀的工程师,并不一定算法好,
真要到了这种需要写狗屎题的时候,请提前告知下我,让我好好准备下
binux
2016-11-27 06:14:06 +08:00
@q397064399 然而人家能现场推,你能吗?
q397064399
2016-11-27 06:18:36 +08:00
@binux 现场推有什么难的?
你要是刷过这个题,就像赵姐夫,人家直接可以在算法(第四版)上找到,
我也刷过这本书,推出来一个 O(N2 LogN)还是没问题的,因为这本书上 也只有 O ( N2 LogN )的解法
后面知乎上 轮子弄的那个算法我就不会了,彻底懵逼了,
q397064399
2016-11-27 06:19:25 +08:00
@binux 点名告诉你这是哪本书,哪一章节,哪一页(后来牛逼吹大了,又把这句给删了)
binux
2016-11-27 06:26:42 +08:00
@q397064399 我们说的算法和你背哪本书上的算法不是一个东西。
xinpure
2016-11-27 09:14:31 +08:00
前端工程师从来都不缺,缺的是优秀的前端工程师,而会算法的基本上都在优秀前端工程师范畴,这种人还是比较希少的。
我觉得招人应该考虑的是招人的需求,比如你招他进来希望他能做什么,他是否满足需求,如果能,那就问得再深一点,以作加分项。
ocian
2016-11-27 09:36:47 +08:00
要实习吗,这俩算法的 JavaScript 实现我能手写
jiongxiaobu
2016-11-27 09:48:00 +08:00
如果是切图仔不需要算法, JavaScript 工程师必然要阿,现在哪个前端框架里没有大量的算法和数据结构
amery2010
2016-11-27 10:08:47 +08:00
我觉得如果你们公司需要用到算法的场景比较多,那么可以用算法来考察,否则这个只能作为加分项。

虽然大家都说算法是一个程序员的基本素养,但我还想说,逻辑思维才是程序员的核心。如果你真想靠算法,我觉得也别拿那种书本上常见的算法,用术语来描述,这其实没意义...中国这种应试环境下,会投机的谁不会想到背几个常见的算法...会写常见的算法的不一定是优秀的程序员,优秀的程序员也可能写不出一些你们认为常见的算法。例如, Max Howell 因为翻转二叉树而被刷...作为大名鼎鼎的 Homebrew 作者,他怎么可能写不了这种算法呢?其实很大程度上,他只能不知道这种简单的代码逻辑原来有个术语叫 翻转二叉树 Invert Binary Tree )...当然, winter 的遭遇也一样,所以即便你想考察算法,请不要...用具体的术语描述,请用实际的题目考察,比如列一个数列,让对方用最简单的代码进行排序。

逻辑思维才是程序员的核心,算法应该是逻辑思维的一种,但算法绝不等同于逻辑思维。

作为前端开发这个特殊的职业场景,很多时候,甚至大部分情况下都不需要手写算法...因为很多基础算法都已经被包含在 jQuery 、 Three.js 这类成熟的库里面了。有一些科班(甚至部分培训班)出身的面试者而言,算法完全是小 case ,因为他们考试考过,但他们很可能还不知道 jQuery 的内部实现, Three.js 的应用场景...所以我建议考察前端能力还得因地制宜,比如考察他们编写页面插件的能力,第一可以看出他们的逻辑编程能力,二可以看到他们的代码风格(是否利于团维护)。

最后我来回答你的一些疑问:

1 、如果以算法来筛选前端程序员,肯定是高了...除非你打算招一个架构级别的大拿(就当我没说)

2 、编写可以维护,有组织,结构良好的代码这其实比考察算法重要,但也最难把握,毕竟大部分人都有自己的一套代码风格,但如果他的代码看上去很舒服,那肯定比看上去不知道是什么的那些人要好“交流”。

3 、编写组件的话,如果写得一团糟的话,即便他能把快排排序、冒泡排序、甚至翻转二叉树之类的背得烂熟于心...我觉得还是别招进来了,免得给自己添麻烦...老板要找的不是会算法的,而是能干活的...
Jimrussell
2016-11-27 10:17:56 +08:00
2 楼正解...

另外 23 楼的所谓淘宝 winter 大神, 也就是知乎上小白的吹捧... 按他的阿里级别来说, 不止 10 个人和我说过此人是个水货... 参考他的发言觉得阿里水货的评价更符合事实...
ChefIsAwesome
2016-11-27 10:26:14 +08:00
如果考算法的目的是考验逻辑思维的话,你不如找点高中数学卷子给人家做了。
高中数学题做得好的人逻辑思维强吗?是的。
高中数学题做得好的人代码写得好吗?
silenceeeee
2016-11-27 10:38:07 +08:00
个人觉得有些软实力比算法更有用, 比如沟通能力. 算法这东西在一般的应用开发中使用不多. 真心是忍受不了沟通能力差的人, 跟他讲半天他还不知道你在说什么. 另外 应该还可以问下他都看了哪些书啊, 有什么看法, 这样我觉得可以侧面了解到这个人对技术的认知
justmile
2016-11-27 11:11:34 +08:00
我觉得面试算法没错,我自己也是个算法渣渣,但面试前我都会好好复习下基本的算法的,这真的是一个态度的问题,作为一个有理想有抱负的程序员,如果连简单的算法、常见的数据结构都不懂地话,可想而知这个人有多浮躁了。我是混过前端圈的,里面的浮躁程度让我咋舌,如果是一个前端 er 说算法不重要我是一点都不惊讶,毕竟培训下 Vue 、 React 就敢去一线互联网公司面试的我只服前端 er
H07
2016-11-27 11:29:22 +08:00
@orvice 回答很棒,薪金 有时候 代表了质量
droiz
2016-11-27 12:08:09 +08:00
当然需要,仅从工作的角度来说,想肉翻你就必须得刷算法。
Quaintjade
2016-11-27 12:52:49 +08:00
我觉得前端技能由低到高是这样:
新手村技能是会用一个已知的大轮子(比如 jquery,angularjs )的基础功能、知道这个轮子的常见插件,这个等级能应付目前常规需求;
初级技能是找轮子和看文档用轮子,这个等级能对新需求写出能跑的代码;
中级技能是比较轮子和看社区讨论,这个等级能让程序跑得快些;
高级技能才是懂算法,这个等级能优化程序减少 bug ,提高代码可读性。
以上顺序不能颠倒(只会算法还不如新手村),根据你的预算找吧。

N 年没碰 javascript 了,前些天想写个 js 页,显示几千行不分页的表格数据而已(本地打开)。
先是直接用 jquery 手写,结果浏览器崩溃。
后来花一天找轮子、看说明和评论选轮子,花不到半天重写就完成了,顺便连排序、查找、调整列宽、隐藏列等功能都有了,还好看得多 😂
nl
2016-11-27 14:01:10 +08:00
代码需要 review, 算法写的好, 和代码写的漂亮没多大关系...自己也不太喜欢考算法!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/323537

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX