前端工程师应该掌握算法吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
neoblackcap
V2EX    程序员

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

  •  1
     
  •   neoblackcap 2016-11-26 21:52:19 +08:00 16668 次点击
    这是一个创建于 3320 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    第 1 条附言    2016-11-27 01:16:28 +08:00
    非常感谢各位的热心回复,考察算法是我想不到其他更好的方法时提出的。其实公司对前端的要求并没有硬性要掌握各类算法,公司只是需要可以独立完成活动页(小游戏),后端 API 对接,上新项目时( SPA )可以承担编写业务逻辑的前端工程师。
    面对这样的需求以及目前的情况我因此产生了几个疑问
    1. 这样的要求是不是太高了?
    2. 在满足上面三个要求的同时,要求编写可以维护,有组织,结构良好的代码是不是太过分了?
    3. 若是笔试出编写组件的题目,面试者不通过,然后这样的人应该招过来培训吗?还是直接拒绝?
    第 2 条附言    2016-11-28 23:57:33 +08:00
    补充说明一下,我司是很想招前端工程师,按反馈的情况是能接受略低于 BAT 的价钱。
    当然若是大家说 BAT 里面拿 25k 一个月的前端也是写一下静态页什么的,那么请当我没说。
    我司也愿意培训,前提是应聘者不开出前端工程师的价钱。举个反面例子就是, 10k 起跳,会 jQuery,会 html ,会 css ,其他一概不会,英语文档从来没看过,你是不知道他英语文档阅读能力的。
    这就是我目前招聘时遇到的情况,跟据大家的反馈我之后会选择编写部件的方式来作为笔试考察方式,谢谢大家的热心反馈,谢谢大家
    我并不是否认只会 jQuery,html,css 的人的价值,只是在我们公司的环境下,这样的人以及技能对于我司来说不会花 10k 以上的钱在这上面。若是要 10k 以上至少要满足写出可维护的代码,对前端工程化有了解,能独立完成工作(对接 API ,实现或移植小游戏,编写业务逻辑代码)
    93 条回复    2018-05-27 18:53:27 +08:00
    cheetah
        1
    cheetah  
       2016-11-26 21:59:13 +08:00
    一个页面 jQuery 写几千行,完全不用函数 -> 这不就是不合格吗。还用得到考算法?
    tianzx
        2
    tianzx  
    PRO
       2016-11-26 21:59:30 +08:00 via Android
    工资高需要,不高不需要
    orvice
        3
    orvice  
       2016-11-26 21:59:52 +08:00
    前端现在不是改问 vue.js react 了吗喵

    算法不是不知道问啥的时候问的么(
    neoblackcap
        4
    neoblackcap  
    OP
       2016-11-26 22:02:44 +08:00
    @cheetah 这是已经存在的代码,主要是想不在招这样的人了,太可怕了,就不知道为什么他们不觉得这样维护起来可怕。加功能的时候他们还能往上面加,简直碉堡了。
    p2227
        5
    p2227  
       2016-11-26 22:04:52 +08:00
    我是做前端的。我认为工程师都应该学习算法,我觉得那是一种对心智的锻炼。
    cheeah
        6
    cheetah  
       2016-11-26 22:06:03 +08:00   1
    @neoblackcap 那我觉得不如现场让他们实现一个组件,考察编码习惯,设计能力。我觉得在工作中这些比怎么手写一个快排更重要
    neoblackcap
        7
    neoblackcap  
    OP
       2016-11-26 22:07:01 +08:00
    @orvice 都是只会 angularjs(1.x), vuejs 跟 react 就只听过,问的话也没有什么可以问啊,追问 react 的 virtual dom 肯定答不上, vue 我自己不熟,不好问。我一般倾向于面试者会了解框架作者的意图,知道框架的设计思路,而不是仅仅会双向绑定。
    这样是不是要求太高了?
    neoblackcap
        8
    neoblackcap  
    OP
       2016-11-26 22:11:32 +08:00
    @cheetah 写一个组件啊,这是个方法。不过会不会要求太高了,看了很多都是培训机构出来的,培训机构教什么就只会什么,还有一些自学的,好像都是没有软件工程的思想,从来都不考虑代码的可维护性。
    换你面试你觉得招这样的人回来,然后再慢慢培训可行不?
    wuethan
        9
    wuethan  
       2016-11-26 22:47:13 +08:00
    简单的说 两个人,实现一个滑动效果 会算法的写了 15 分钟 不会算法的 用插件 10 分钟搞定。然后。。。。。。会算法的发现 自己的算法在 IE 下不正常,开始调试,再次发现有内存泄漏,等修复完了 最后发现。。。。。 老板让实现滑动时有弹簧效果 而插件一方就自带 Effct 参数
    ipconfiger
        10
    ipconfiger  
       2016-11-26 22:48:36 +08:00
    只要是写代码的软件工程师, 都应该了解并且熟练运用算法, 这是基本的态度
    neosfung
        11
    neosfung  
       2016-11-26 22:59:09 +08:00
    招码农不需要
    招工程师需要
    看你愿意为招聪明人多付出多少而已。
    Victor215
        12
    Victor215  
       2016-11-26 23:03:52 +08:00
    我以为前端不仅要懂前端的东西,后端的也要懂一些才好。一点后端的都不懂,沟通太困难。
    你说后端需要算法么?
    xcodebuild
        13
    xcodebuild  
       2016-11-26 23:04:57 +08:00 via Android
    @neoblackcap 校招表示一面就追问到 vdom 实现了…不算太高。我认为前端工程师首先是工程师,和聪明人一起共事效率会高很多。
    neoblackcap
        14
    neoblackcap  
    OP
       2016-11-26 23:12:16 +08:00
    @Victor215 后端当然需要需要算法,算法不过后端直接踢掉,整天写 O(n^2)的东西,谁受的了。
    neoblackcap
        15
    neoblackcap  
    OP
       2016-11-26 23:14:34 +08:00
    @neosfung 公司是与愿意招工程师的,也愿意给市场的价格,但是好像就是比较难招。而且来的人好像一见我问算法就一副我侮辱了他们的样子,所以我才有疑问,前端工程师难道就不是工程师吗?是工程师的话算法不是基础么?
    neoblackcap
        16
    neoblackcap  
    OP
       2016-11-26 23:19:12 +08:00
    @codefalling 是啊,不过好像面试的人都认为前端入门容易,说真的,那些所谓 3 个月速成前端工程师,在我看来都不太行,公司换一套前端技术方案就完全罢工,前端工程师没法对前度技术提意见,哎
    murmur
        17
    murmur  
       2016-11-26 23:19:33 +08:00
    算法是面试的笔试部分
    murmur
        18
    murmur  
       2016-11-26 23:20:16 +08:00
    给楼主一个我最近碰到的需求 给定 w x h 的区域,若干个尺寸不等的矩形,其中矩形长宽都是整数
    请设计或者 google 一个算法,让排列尽可能美观
    peneazy
        19
    peneazy  
       2016-11-26 23:28:30 +08:00 via Android
    我一直认为,合格的中高级前端,常见的冒泡、插入、快排要能用 js 实现
    maomaomao001
        20
    maomaomao001  
       2016-11-26 23:30:25 +08:00 via Android
    我怎么感觉 css 好难好难~~~当初到底是怎么设计的~~~
    neoblackcap
        21
    neoblackcap  
    OP
       2016-11-26 23:35:42 +08:00
    @murmur 让我来的话直接的想法肯定是贪心法,不过应该不符合尽可能美观的要求。稍作一番分析觉得跟最小二乘有关,应该可以抽象成一个线性组合的相关问题,具体的要再想想
    peneazy
        22
    peneazy  
       2016-11-26 23:36:24 +08:00 via Android
    @maomaomao001 CSS 主要是学习成本高,各种浏览器兼容问题,花点苦力气学扎实,之后会比较轻松的
    neoblackcap
        23
    neoblackcap  
    OP
       2016-11-26 23:41:38 +08:00
    @maomaomao001 当初的设计我觉得跟今天的前端工程化趋势已经大为不同了,现在流行组件化,其实在在很多情况下, css 的设计跟组件化是想左的,比如组件应该跟外部隔离,但是 css 在正常的情况下又会影响组件的内部状态,因此很多人提了 css module 这样的方法,当然这也会造成 css 冗余。不过我个人觉得 css module 带来可以隔离一个组件的状态的优点显然大于其引起 css 重复冗余的缺点
    n6DD1A640
        24
    n6DD1A640  
       2016-11-26 23:55:45 +08:00
    不需要,但是面试适度问点算法以筛选人。
    bytenoob
        25
    bytenoob  
       2016-11-26 23:58:38 +08:00
    @wuethan 神逻辑,这波解释我服
    Famio
        26
    Famio  
       2016-11-27 00:11:05 +08:00
    @wuethan 卧槽,画面感好强!同是觉得这个解释非常让我信服。
    viko16
        27
    viko16  
       2016-11-27 00:16:03 +08:00   2
    楼上一群自以为是的想法。。。

    以整天只面向逻辑的「工程师」的标准来看前端,我看到了前后端之间很深的误解

    前端是个很特殊的位置,面试侧重点还是应当放到前端基础、项目经验、工程性问题、处理问题的思路等方面,算法只当加分

    「面试前端问到算法」没有问题,有追求的程序员都会去了解算法。可是如果「只以算法来面前端」的话,我认为这就是 leader 不识才了

    如果不清楚面试能问什么,请搜索各大公司的「前端面试题」,估计能让你们大开眼界
    jin5354
        28
    jin5354  
       2016-11-27 00:28:02 +08:00   2
    前端的工作场景中绝大多数用不到算法,想往深问,与其问算法不如问工程化、设计模式、编程范式这些更实用且能直接反应生产力水平的内容。

    你可以认为所有工程师都需要掌握算法...但是前端就是这样一个神奇的工种,不会写快排也不会妨碍一个人又快又好的出活..对于前端来说,会算法应该是一个加分点,而不是一个必需要求。
    neoblackcap
        29
    neoblackcap  
    OP
       2016-11-27 00:39:12 +08:00 via iPhone   1
    @jin5354
    @viko16
    非常感谢,两位的观点,就是觉得考算法嘛好像能考一些软件工程,但是好像又不像。我主要还是担心他们的工程化水平,几千行 jQuery 调用代码,真的吃不消。不过之前看了其他公司(trello)的前端面试,好像跟软件工程的都不是特别沾边,最多是有考察 debug 的
    jarlyyn
        30
    jarlyyn  
       2016-11-27 00:39:44 +08:00
    面试是不是为了考核被面试人的技术水平,还是看被考核人是否能胜任这个工作。

    工作需要熟悉算法,就重要。

    工作不需要熟悉算法,就不重要。

    如果只是把算法作为一个评分标准,那么就要明白这个标准对这个工作的意义。
    vultr
        31
    vultr  
       2016-11-27 00:54:58 +08:00 via Android
    需不需要考算法是招聘的公司定的,你认为要就需要,我自己的话更看重解决问题的速度与质量。又快又好的直接去和老板聊;稍慢一些但质量不错的也要;很快但质量一般的,只要人品没问题也考虑要。
    BruceYuan
        32
    BruceYuan  
       2016-11-27 00:56:32 +08:00 via Android
    大部分排序都能手写出来,不过并不妨碍我做不出好看的页面来啊。其实我这种是更菜的,
    shiny
        33
    shiny  
    PRO
       2016-11-27 00:59:39 +08:00   1
    等你坐在老板的位置上再去思考工程师需要的知识结构和技能会更有意义点。算法只是其中很小的一项。
    whiteball
        34
    whiteball  
       2016-11-27 01:05:23 +08:00
    野蛮生长。
    neoblackcap
        35
    neoblackcap  
    OP
       2016-11-27 01:07:29 +08:00
    @shiny 主要是现在负责面试的人是我,所以不得不想这事。若非我面试自然不用管这事了。还有就是跟招进来的前端工程师配合比较吃力啊,很多东西都出来的效果跟需求都相差很远,上面给压力不小。
    我们这里前端主要负责推广页的制作,推广嘛,运营肯定是需要搞一些小游戏什么的,这些都是归前端管了( API 后端已经实现好)但是前端明显 hold 不住啊, bug 很多, debug 不能自个完成需要投入其他人去帮助。因此才过来提问是不是招人的方法不对,面试前端的时候应该注意什么。
    lunaticf
        36
    lunaticf  
       2016-11-27 01:16:52 +08:00
    你是正确的,现在培训班太多了,不是说培训班出来的就没有好的,但是大部分都是没有所谓的素养的,自学能力较差。我们首先是程序员,再是一个前端。算法很重要。
    audeSt
        37
    audeSt  
       2016-11-27 01:22:37 +08:00
    算法+数据结构+网络+操作系统

    这四大基础是一个合格程序员必备的吧
    ByZHkc3
        38
    ByZHkc3  
       2016-11-27 01:33:47 +08:00
    @neoblackcap 其实很简单的,看他写过的项目,然后问遇到过哪些坑,顺便观察下他解决思路的方式。如果像你说的前后端联调交互都做不好的,那基本上就是很水的前端了。更别说前端工程化。
    算法的话我是建议看人吧,如果问过了他简历上的项目及熟悉的技术栈后觉得不错,可以适当的问下算法的问题,当作事加分项。

    不可否认,现在培训班出来的太多了,我上周面试遇到两家公司当场问我有没有参加过培训班。超级无语。
    ivvei
        39
    ivvei  
       2016-11-27 01:46:59 +08:00   1
    代码工程化什么的,跟算法没什么关系啊。搞 ACM 的,算法个个都高手了吧,但做题的那代码拿工程标准能看吗?连变量名都未必能合格。
    真要很能玩算法的我反而担心别人读代码时能不能理解他那思路…… Unix 哲学的 KISS 还记得不。 Keep it simple, stupid. 你写太精妙了别人看不懂啊。
    huntzhan
        40
    huntzhan  
       2016-11-27 02:29:32 +08:00
    > 这是已经存在的代码,主要是想不在招这样的人了,太可怕了,就不知道为什么他们不觉得这样维护起来可怕。加功能的时候他们还能往上面加,简直碉堡了。

    是不是离职比较好?
    binux
        41
    binux  
       2016-11-27 03:19:29 +08:00
    刚才正好在知乎看到一个回答《字丑的演员会有字替么?》 https://www.zhihu.com/question/53009177/answer/133077956

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

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

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

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

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

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

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

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

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

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

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

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

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

    1. winter 的表现是个例,而且有评论对 winter 的水平表示质疑。这个例子应该无法反映大盘情况。
    2. 面试考算法与工作中用不用得到算法,是两回事。
    3. 目前的现状是,高梯队的公司,比如 MFG 与 startup 独角兽,都采用考察算法的方式评估面试候选人。作为个体,如果背景不强,只能去适应游戏规则。
    q397064399
        62
    q397064399  
       2016-11-27 14:24:28 +08:00
    @amery2010
    @huntzhan
    所以我也在考虑是不是要报个九章算法班刷刷题了
    fytriht
        63
    fytriht  
       2016-11-27 16:52:04 +08:00
    @ChefIsAwesome
    如果考算法的目的是考验逻辑思维的话,你不如找点高中数学卷子给人家做了。
    高中数学题做得好的人逻辑思维强吗?是的。
    高中数学题做得好的人代码写得好吗?
    ---------------------------------------------
    你这就是典型的逻辑差了。逻辑强是写出好代码的必要条件,而不是充分条件。
    还有,高中数学卷子对逻辑能力的要求比算法还高吗,不见得吧。
    coderluan
        64
    coderluan  
       2016-11-27 16:52:17 +08:00
    从程序员角度来说,任何不想吃青春饭的程序员都得掌握算法等专业知识。
    从公司招聘角度来说,看你工作具体需要和开多少工资了。
    nikymaco
        65
    nikymaco  
       2016-11-27 16:55:47 +08:00
    打个武侠比喻:算法如内功,没有内功,武功的招式再厉害也不会有质的提升,更别说那些花拳绣腿了。
    geektony
        66
    geektony  
       2016-11-27 19:44:31 +08:00
    算法是核心,不然就只会是拼凑 API
    ivvei
        67
    ivvei  
       2016-11-27 20:01:04 +08:00
    逻辑强也是做高中数学卷子的必要条件。而如果逻辑强不是写出好代码的充分条件,那算法强也不是写出代码的充分条件。
    高中数学卷子对逻辑能力的要求怎么就不比算法高了?你是如何评判对逻辑能力的要求的高低的?
    FrankFang128
        68
    FrankFang128  
       2016-11-27 20:03:44 +08:00
    1. 不是只有那些算法才算算法
    2. 不要说得前端工程师不是工程师一样
    mengjue
        69
    mengjue  
       2016-11-27 22:03:45 +08:00
    如果算法有问题,说明这名面试者: 1 ) 不爱钻研 2 )学习能力一般 3 )对计算机的兴趣程度一般

    当然算法好的也不定水平就强,可能是正好背到哪一题,但是最起码这个人愿意学习,就算资质有限,算法题需要去背。
    BRKA
        70
    BRKA  
       2016-11-27 23:27:33 +08:00 via iPhone
    我以前也一直觉得前端不需要学算法,但是为了找工作也一直在刷 leetcode 并且觉得没什么用。直到我看了 Virtual DOM 的实现并且自己跟着帖子手写了一个以后才知道前端算法重要性。
    Rice
        71
    Rice  
       2016-11-28 08:19:09 +08:00
    我觉得考考快排这种简单的就好了
    Rice
        72
    Rice  
       2016-11-28 08:21:10 +08:00
    相对的,你应该考试前端中的优化问题,比如 CSS 怎么写更快, js 怎么写更快更可维护
    nicevar
        73
    nicevar  
       2016-11-28 09:09:14 +08:00
    @wuethan 你这个例子举得与算法没有任何关系,明显是会不会利用资源的问题,那人只能算偏执去造轮子。但是如果没有现成的可用,第二个人写不出来那怎么办?不少公司会出现一个技能难点没人能解决的尴尬,只能到处求救。
    前端工程师会不会算法看公司人员配置,已经有解决问题的一两个人了,后面招进来的是否需要此技能问题不大
    realpg
        74
    realpg  
    PRO
       2016-11-28 09:10:44 +08:00
    @neoblackcap
    大概是你筛选简历的能力太差
    看你招聘需要的是“前端工程师” 还是 “给 html 加点特效写两个 ajax 用 jquery 验证个表单的人”

    你要是需要的是后者 无所谓
    neoblackcap
        75
    neoblackcap  
    OP
       2016-11-28 09:24:22 +08:00
    @realpg 不是我筛选简历的能力太差,是老大说别人从山长水远的地方过来了,一定要给面试机会-_-b
    pysama
        76
    pysama  
       2016-11-28 10:05:28 +08:00
    借用玉伯一句话,“我们需要的是能力互补的人,而不是能力重复的”
    原话记不清,大意是这样。
    tobeyouth
        77
    tobeyouth  
       2016-11-28 11:31:20 +08:00
    通常情况下,我面试的时候会考查一下手写冒泡排序,如果能写出来当然最好;如果写错了,但是其他方便比较好,也可以考虑,毕竟其实在前端的工作时间里,用到算法的地方还是比较少的。
    keikeizhang
        78
    keikeizhang  
       2016-11-28 12:05:03 +08:00   1
    你需要的是一个砍刀,还是需要一个机关枪,如该需要是一个砍刀就别按照机关枪的战斗力去要求,如果需要后者面试的时候就说好。

    问题是你需要这个武器是干嘛的,你是近身搏斗还是远程打击!

    弄清楚自己的需求,然后根据需求招人!
    jason19659
        79
    jason19659  
       2016-11-28 13:10:27 +08:00
    所以还是要回答这个问题,你想招一个什么样的人,预算是多少?
    jclin
        80
    jclin  
       2016-11-28 13:14:27 +08:00
    看你做什么了
    changwei
        81
    changwei  
       2016-11-28 14:17:34 +08:00
    你可以让他们直接展示自己做过的项目,看看他们源代码的代码规范性怎么样,因为国内像谭浩强这种教程深入人心,很多人都习惯了他那种 abcd 的变量命名和不规范的缩进,你光看算法根本看不出他的代码质量和对于大项目,逻辑复杂的 SPA 等等的编码能力。
    wobuhuicode
        82
    wobuhuicode  
       2016-11-28 16:08:47 +08:00
    看多点不吃亏哦
    heyheycici
        83
    heyheycici  
       2016-11-28 18:58:06 +08:00   1
    大概是在今天凌晨 3 点多醒的然后就睡不着了,那天看到同学在看这个网站 此刻我终于拥有了评论的权利:
    我赞成的观点有:===》招码农不需要 招工程师需要 看你愿意为招聪明人多付出多少而已,反正你招人,为什么还要这么墨迹,知道你矛盾但是每一个人需要成长空间,你要是不愿意给就不给, 不要说会什么才算合格的 xx 猿。
    总之,我挺烦你发的这个帖子。没错我是小白 并且是正在培训班的小白。怎样,这里是大牛怎样,想想你当初是啥样了,姿态,不是 这样用的。完毕
    neoblackcap
        84
    neoblackcap  
    OP
       2016-11-28 23:39:26 +08:00
    @heyheycici
    我讲的都是我身边的事情,这个我真不知道我哪句话冲撞了你。
    公司是这样的,公司招人是给需要员工创造价值,这个是上司对我面试的要求。也就是招人回来,给他 5k 薪水,他必须创造超过 5k 的价值。
    至于说给不给时间这个是很多因素,公司不是一个人,哪怕我给了,然后这个人又不一定分给我们组,若是分配这个人到一个都是立刻投入战斗的组,这样对他是不是负责呢?组内没有人会帮你配环境,没有人会教你语法,框架思路也不会帮你理,大家只会发你文档地址,然后你就得阅读文档立刻开始工作,这个就是目前的情况。
    同时,给这个人的时间的同时,要给多少薪酬?是按实习生来给还是按工程师来给?
    其实这个问题已经不仅仅是给我作参考,同时我认为也可以给广大面试官以及面试者一些参考。面试者需要公司给时间,但公司是不是也可以让面试者对薪酬给空间?
    我们招聘的都是前端工程师,不是实习生,都是想招立刻投入战斗的人员,工资我可以说,是市面平均水平,略低于 BAT ,独角兽,但绝对是互联网的价钱。你说一个自学 1 个星期的前端来面试,然后只会 jQuery ,然后开口说 10k 起跳,然后说之后会进步会很快,优点都是勤奋努力。说真的,我面试了至少 20 多位,每位都是这样说。
    哪怕是这样的情况下,我们还是招不够人,我们都已经不要求立刻投入战斗,至少真的进步快,潜质高就可以了,但是还是远远不够(过了 2 个月,还是不能独立工作)。
    你认为招聘仅仅是公司给的机会吗?那么现在快年底了,一个人 12 月进来,过了一个月我们发现他不合适,那么 1 月开头就叫他走?那是要过年的时间啊,不叫他走,团队其他人感觉不爽(分蛋糕多了)。
    这里通篇都没有强调算法的重要性,我只是认为算法是一个没有办法的办法,我的 append 都有说明。

    问起我的情况,简单说说
    我是一个很普通的人过来的,哪怕现在也不是什么大牛,若我是大牛的话我就不会发帖。
    我大三出来实习,非科班。拿不足 2k 的薪水,干前端,写 API ,维护机器( ssh 登陆,安装包什么的),不足 2k 的那钱是包括加班费的,因此 9 点或者 10 点下班都是正常的。下班之后我基本上都会看 1 个小时跟 CS 相关的公共课,周末都会去看机械工业出版社大理石封面的书籍,《现代操作系统》就是那个时候看的。每天 7 点不到就要起床挤公交。这样的生活我过了半年。之后回学校专心学习了一年,期间看完了《 Linux 系统编程》,自己重新拿着《 C 程序设计语言》复习了一遍,也背了一下算法,不过是在不得要领,仅仅是强记了快排。当然也有上 leetcode 刷题, projecteuler 也有刷,但是不多,若是国内非独角兽的互联网公司,我认为刷完 leetcode 简单级别的题就是够的了。
    当然哪怕有同学做到以上的所有,我也不能保证你能至少达到我的程度,正如之前这上面有一位发过《其实你不用退学》一文,其实我想说,别人高中可是广东前十的高中,每年都有清华北大,计算机保送什么的基本上都是吃定的。还有要说明的是,我不是大学才开始自学计算机,我以前高中就有老师带过,要是说起来那我算是搞 OI 出身的,就是当时一个水啊,非常感谢我的高中电脑老师,是他们让我入了这个门。
    eyp82
        85
    eyp82  
       2016-11-29 04:23:38 +08:00
    我不是太赞同考算法, 这只能考验他刷题的水平, 好吧至少证明他很在乎这个职位.

    不如换个方式,你找个算法的文档, 拿给他看, 过 20-30 分钟后请他解释一下这个算法以及如何实现(可以用伪代码), 这样是不是更好一些?
    或者请他介绍一下之前做过的项目, 考察一下他如何处理其中出现的问题.
    heyheycici
        86
    heyheycici  
       2016-11-29 10:23:01 +08:00
    如果按照您现在的说发来看 您知道自己需要什么样的人 也知道您是要找什么样子的人 那为什么还要问这个问题。您可以征求大家的意见,但是我觉的您一开始的帖子说的有问题,给我一种必须一开始就得回算法才能当个码农的感觉,我觉的很不爽,很不爽。还有现在的的市场,不是一些培训出来的不愿意接受几 K 的工资 安心找个实习的,很多人学的很多,只是真正的缺少一个开发流程,去实战,可是就差那么一点某些公司就会特别打压给你个 3k 、 4k 的,那自己学的就那么差么?我觉的不见的,要是写个一年的工作经验吧,根本没有面试机会,连一个打电话的都没有,所以很多人都造假,我觉得作假特恶心,欺骗别人特恶心,可是自己就真的那么不堪么。不能说你不对,或者我不对,我在意的是您说话的那些语气,不是别的。我赞同一个真正的程序员是一定要有算法能力,可以我觉得这是建立在有需求的情况下吗,没有实战没有需求,怎么感觉算法重要?拿什么来感觉维护性的重要?如果您要招大牛马上能工作的您就在招聘的时候和面试的时候认准您的底线就 ok ,市场就是这样,大家都没错
    wuethan
        87
    wuethan  
       2016-11-29 11:57:13 +08:00
    @nicevar 你说的对,但我说的是个效率问题,插件效率更高不是吗?考虑到兼容性 内存占用 效果程度.. 额 前端有什么解决不了得难点呢.........实在想不出来
    neoblackcap
        88
    neoblackcap  
    OP
       2016-11-29 12:58:50 +08:00
    @wuethan 其实我觉得你是割裂了会算法跟用插件,这两个并没有联系,不是非黑即白,本身我们就应该强调 DRY 。所以一个前端工程师,就应该评估工作量,自行选择用插件或者自己实现。
    abc123ccc
        89
    abc123ccc  
       2016-11-30 11:59:52 +08:00
    前端工程师懂算法的话,就懂得性能优化。某些页面优化需要前端的大力配合才能达到效果。
    hanzichi
        90
    hanzichi  
       2016-12-02 20:38:50 +08:00
    楼主缺人吗,招我把, leetcode easy 难度的题没问题的水平.. https://github.com/hanzichi/leetcode
    neoblackcap
        91
    neoblackcap  
    OP
       2016-12-02 21:42:12 +08:00
    @hanzichi 我司缺人,坐标广州天河,有兴趣请投简历"neo.blackcap 在 gmail.com"
    hanzichi
        92
    hanzichi  
       2016-12-02 21:50:26 +08:00
    @neoblackcap 谢谢,可惜地点不合 ..
    fancyhan
        93
    fancyhan  
       2018-05-27 18:53:27 +08:00
    会不会算法一眼就能看出科班出身还是野生的,再说一点都不懂的人,是不是太井底之蛙不会持续学习了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3775 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 05:14 PVG 13:14 LAX 21:14 JFK 00:14
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86