V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
jeodeng
V2EX  ›  程序员

请教一下,前端真的会有算法诉求吗?

  •  1
     
  •   jeodeng · 2022-08-05 11:18:57 +08:00 · 7780 次点击
    这是一个创建于 875 天前的主题,其中的信息可能已经有所发展或是发生改变。

    就比较好奇,大家公司里前端真的有算法诉求吗?还是说算法更多是考核思维? 如果是做基建、设计框架(如 vue\react )我还能理解, 70%的前端应该是写交互、渲染\优化、样式\兼容这几点吧?

    ...想问问大家长长见识

    80 条回复    2022-08-07 10:39:29 +08:00
    wangtian2020
        1
    wangtian2020  
       2022-08-05 11:25:27 +08:00   ❤️ 3
    基本没有

    我只用 electron 写过一次 DFS ,那个项目寻找最优方案,最后因为最优可能算不出来或者耗时过大,我就让他每次都额外判断一次时间戳,超过 5000ms 就不继续找了,当前的最好方案作为最终方案。

    平时代码的素养,超过 3 层的循环就考虑有可能的性能问题,把 array.find 变为 object.key 寻找值可以提升性能。
    ericls
        2
    ericls  
       2022-08-05 11:25:59 +08:00   ❤️ 2
    游戏也是前端
    byuan04
        3
    byuan04  
       2022-08-05 11:29:53 +08:00
    看你需求吧。。。如果你做个弹幕之类的,肯定有算法诉求
    learningman
        4
    learningman  
       2022-08-05 11:31:07 +08:00 via Android   ❤️ 1
    Google Docs 也是前端
    horseInBlack
        5
    horseInBlack  
       2022-08-05 11:35:03 +08:00
    起码得知道时间复杂度和空间复杂度的概念,比如同样修改一个数组、对象,用拼接的方法会比 for 循环挨个判断修改的复杂度低得多

    其他的就和设计模式,初学者上来楞学也学不明白,根本也不知道这样的做的好处,因为没吃过相关的亏
    yaphets666
        6
    yaphets666  
       2022-08-05 11:35:53 +08:00
    当然...之前处理数据,a/b/c d/e/f a/n/m a/b/j 一些这种用 dir/dir or fileName 形式的数据,转成树形数据。因为我不懂数据结构和算法,只能用递归做,不停地遍历循环,导致在小程序端有性能压力。

    如果我懂前缀树什么的,就不会有这个问题。
    jorneyr
        7
    jorneyr  
       2022-08-05 11:37:06 +08:00
    很多时候遇到一个问题,可以野蛮的解决,也可以使用特定算法优雅的解决,至少前端方面我遇到过不少次。
    如果你不会算法,当然觉得前端不需要算法,因为你会觉得工作中就没用过算法,所以算法无用。
    TWorldIsNButThis
        8
    TWorldIsNButThis  
       2022-08-05 11:37:11 +08:00 via iPhone
    目录树用过 dfs
    murmur
        9
    murmur  
       2022-08-05 11:37:59 +08:00
    前端能拉库就拉库,库不仅好使,还经过测试,还有各种参数验证
    newSimpleLife
        10
    newSimpleLife  
       2022-08-05 11:39:57 +08:00
    需要 例如 sku 算法 只不过大多数情况不需要 因为大多涉及不到
    tomieric
        11
    tomieric  
       2022-08-05 11:45:43 +08:00
    以前后端提供 N 个数组,前端写组合,需要笛卡尔积,😅
    zmal
        12
    zmal  
       2022-08-05 11:49:28 +08:00
    需要。就比如一个目录树,新手能写个 N 次方算法出来。

    如果写小程序,或者老旧 windows 平台(医院自助服务机)这种对资源敏感的客户端,即使是 n^2 和 n*logn 都会体现出明显差距。
    jones2000
        13
    jones2000  
       2022-08-05 11:50:30 +08:00   ❤️ 1
    简单点的算法前端还是可以算的,比如移动平均,线性回归, 协方差等等前端都可以做, 直接 js 一把梭。我自己的图形库( https://github.com/jones2000/HQChart )里就包含好多金融算法,都是前端自己算, 不依赖于后台, 后台只提供基础数据。 最关键的是前端算,不会浪费后台算力,反正现在手机,pc 配置都高的离谱,不用白不用。
    dudubaba
        14
    dudubaba  
       2022-08-05 11:50:34 +08:00
    一般业务前端是不到的,但是有部分前端比如用 webAR/VR 、在线文档、页游等会用到。面试算法 90%是卷(因为实在没什么好问的,大家都是这么进来的),剩下 10%才是有实际需求,或者是想考数据结构等看看基础扎不扎实。
    johnnyNg
        15
    johnnyNg  
       2022-08-05 11:54:44 +08:00
    以前做图片曲线调节,需要拉格朗日插值算法
    renhou
        16
    renhou  
       2022-08-05 11:58:31 +08:00   ❤️ 1
    我见过把前端当做美工
    还要美工也会算法的
    纯纯的滴嫩儿
    LiubaiQ
        17
    LiubaiQ  
       2022-08-05 12:05:19 +08:00
    遇到了不会,会了但没遇到,肯定是两种结果。

    其实只要满足有穷、确定、可行、输入、输出,就是一个算法,并不是非要局限在特定的几种数据结构的数据运算上。。。
    lujiaosama
        18
    lujiaosama  
       2022-08-05 12:06:41 +08:00
    很少. 比如 sku 要写笛卡尔积, 树形结构组装数据.
    yousabuk
        19
    yousabuk  
       2022-08-05 12:12:18 +08:00 via iPhone
    有些需要吧,比如我们做的要在前端页面显示 /配置 modbus 的主机、从机的线圈状态 /离散量和寄存器。

    问题是牵扯到真实 PLC 的地址偏移,又牵扯到是个通用的 PLC 前端程序(不能固定偏移量)。

    就这个,没啥算法其实,把前端小妹妹整哭了,走了。

    哎~~~~~~
    DOLLOR
        20
    DOLLOR  
       2022-08-05 12:43:09 +08:00 via Android
    比如 tree 跟 list 之间的转化也是算法需求吧。
    不然后端甩你一个组织机构 list ,然后怎么把它渲染成树形结构?
    stkstkss
        21
    stkstkss  
       2022-08-05 12:48:25 +08:00 via iPhone
    留名
    oatw
        22
    oatw  
       2022-08-05 13:15:30 +08:00
    做项目需要比较少,写框架或者类库会用到的。
    redford42
        23
    redford42  
       2022-08-05 13:17:36 +08:00
    我唯一能想到选人组件优化?
    chaoxu
        24
    chaoxu  
       2022-08-05 13:21:40 +08:00
    @redford42 细说一下 想了解了解
    blackywkl
        25
    blackywkl  
       2022-08-05 13:48:58 +08:00
    之前涉及到数量大的时候会涉及,数据量都上万,需要查找某些特定的数据,不能直接 for 循环遍历的
    vaporSpace
        26
    vaporSpace  
       2022-08-05 13:52:59 +08:00
    就一个组织架构选择器,就可能需要用到前 /后序树遍历,深 /广度优先遍历,简单的算法还是挺常用的吧。普通前端业务来说,我的经验是 B 端业务更有可能用得上算法。这玩意就是不用也行,但会用就多一种解法。
    dcsuibian
        27
    dcsuibian  
       2022-08-05 13:58:06 +08:00
    算法不单是时间复杂度的问题,结果是否正确也是很重要的一部分。
    darkengine
        28
    darkengine  
       2022-08-05 14:00:54 +08:00
    大部分是工程性的活儿,极少需要自己实现算法。
    imn1
        29
    imn1  
       2022-08-05 14:04:24 +08:00
    多咯,地图相关、动态界面(例如证券)……

    要看怎么定义“前端”,只要是数据相向互动(对话)的,基本上都需要的
    简单理解就是数据在前后端都会变化的,互相发送的,两端都需要“计算”

    一直只做单向数据展示的,才觉得不需要算法
    darkengine
        30
    darkengine  
       2022-08-05 14:05:35 +08:00
    @yousabuk 好奇问下,“真实 PLC 的地址偏移,又牵扯到是个通用的 PLC 前端程序”,这些业务逻辑是不是可以放在后端做,相当于后端在前端页面和 modbus 从机的寄存器状态,命令下发做个翻译的工作。

    万一以后需要做个 app 端,app 开发人员也不需要再写一遍这套逻辑了。
    wu67
        31
    wu67  
       2022-08-05 14:09:55 +08:00
    偶尔吧. 接触过的有这么几种:
    1 是在上家的时候, 写 h5 小游戏, 乱序算法.
    2 是在上家和目前这家, 都遇到了, sku 规格选择. 可达路径计算.
    3 是写自己的小项目, 统计游戏装备属性进行分类归属.

    严格来说不是要多复杂才能叫算法, 一个极端的例子, 穷举, 也是算法的一种, 相信大家都会.
    个人认为, 前端考算法不是说你得要多牛多厉害, 而是考思路, 证明你看待问题有自己的思路、对资源分配有一定的判断.
    fffang
        32
    fffang  
       2022-08-05 14:16:26 +08:00
    一般业务没有,特定业务会有。

    另外文字渲染,图像渲染里都有算法,内存布局里也是各种算法,这种算不算前端?也算的吧。
    FakerLeung
        33
    FakerLeung  
       2022-08-05 14:27:38 +08:00
    极少,如果像我这种写页面,但是使用起来爆卡的,基本都是因为代码写得太烂了。

    比如,我这有个更新缓存的代码(待更新的 cacheList 和本地的 caches ),因为要先找出来,再做修改,然后替换。
    结果开发人员直接遍历 cacheList ,然后逐个根据 id 在 caches 中通过 array.indexOf 找出下标,然后修改。
    爆卡的原因是 caches 有 8k 个对象,cacheList 也有 5k 个,结果直接循环了 8k*5k 次。。。能不卡吗?
    修改方法甚至用不上算法,直接先把 caches 遍历一遍,生成一个 Map ,每次从 Map 根据 id 获取出来,就变成只循环 8k+5k 次了,效率直接从 4s 提升到了 80ms 。
    tanelmer
        34
    tanelmer  
       2022-08-05 14:33:35 +08:00
    算法能力可以不用,但不能没有~
    sy20030260
        35
    sy20030260  
       2022-08-05 14:43:30 +08:00
    大多数面试官问算法主要还是为了考察编码习惯和代码风格,要么就是候选者是应届生没啥项目经验,只能多考考算法
    kop1989smurf
        36
    kop1989smurf  
       2022-08-05 14:50:10 +08:00
    前端有算法需求么?
    有。但不多。

    做前端有学算法的必要么?
    有必要,但性价比(优先级)低。
    相较而言,了解并熟知算法概念(时间、空间复杂度等)比算法本身更重要。

    做前端必须会算法么?
    算法是做前端的非充分,非必要条件。

    btw:需要算法的多数情况可以通过既有的工具库、成熟解决方案来抄作业。
    比如数据的横纵转换、高性能的排序、浮点数的运算等等。
    mumuy
        37
    mumuy  
       2022-08-05 14:52:22 +08:00
    用得上啊,我无意间写的寻址算法,后来才发现就是广度搜索,然后我把它应用到了游戏里面: https://passer-by.com/pacman/
    AyaseEri
        38
    AyaseEri  
       2022-08-05 15:05:14 +08:00   ❤️ 1
    比较多的场景就是数组根据 parentId 转化成一棵树。
    比较少一部分人会需要用到求两条直线是否相交、获取贝塞尔曲线路径点之类的算法。
    bobo2
        39
    bobo2  
       2022-08-05 15:12:34 +08:00
    有,不到三年经验的我都深有感悟
    7gugu
        40
    7gugu  
       2022-08-05 15:13:46 +08:00
    需要,特别是做小游戏之类的会用到一些
    dayeye2006199
        41
    dayeye2006199  
       2022-08-05 15:14:27 +08:00   ❤️ 1
    编辑器的实时协作功能,需要实现 ot 或者 crdt 算法。。

    Figma 也是前端
    shuianfendi6
        42
    shuianfendi6  
       2022-08-05 15:44:49 +08:00
    @yousabuk 寄存器地址这种东西,EE 工程师都得花时间理顺,也是难为前端小妹妹
    yousabuk
        43
    yousabuk  
       2022-08-05 15:48:22 +08:00 via iPhone
    @darkengine 已经放后端了,但是前端也得有 偏移量计算和显示的工作要做。要偏移量,当前页数据显示对应起来。

    由前端向后端发偏移地址+当前页+modbus 功能码

    已经没啥多余的了。
    yousabuk
        44
    yousabuk  
       2022-08-05 15:49:58 +08:00 via iPhone
    @shuianfendi6 是啊,很耐心的讲解了之间关系,讲了一个多礼拜,还给演示。最后还是被老板怼了哭了。
    Cbdy
        45
    Cbdy  
       2022-08-05 15:50:39 +08:00 via Android
    图形学算前端吗?
    shuianfendi6
        46
    shuianfendi6  
       2022-08-05 15:55:09 +08:00
    @yousabuk 寄存器操作我直接给后端写好 Java 封装代码 qaq
    libook
        47
    libook  
       2022-08-05 16:01:36 +08:00
    普通业务开发的话,不管前后端都极少涉及到算法。

    除了个别岗位对算法有要求外,通常招聘时考察算法只是因为简历太多,需要强行淘汰掉一部分,来减少筛选的工作量。
    qiaobeier
        48
    qiaobeier  
       2022-08-05 16:03:24 +08:00
    图形,游戏,数字可视化方面有一些需求。
    polo3584
        49
    polo3584  
       2022-08-05 16:17:48 +08:00
    做游戏用到过一些,一部分是游戏内在的逻辑算法,另一部分是一些渲染方面的也需要。
    vitoaaazzz
        50
    vitoaaazzz  
       2022-08-05 16:30:36 +08:00
    对大部分需求来说用现成的轮子足够了
    kangyan
        51
    kangyan  
       2022-08-05 16:35:03 +08:00
    有用到过,做 多标签页系统 的时候,使用过缓存淘汰算法( LRU )。
    NameLiving
        52
    NameLiving  
       2022-08-05 16:38:23 +08:00
    @byuan04 弹幕会有吗。。
    ZLY201
        53
    ZLY201  
       2022-08-05 16:42:10 +08:00
    大部分业务需求感知不到,但是如果说 react vue 这种框架里面没有算法那可太天真了,光是里面用到的编译原理就把 90% 的前端打回原形,还不谈 node 这种中间服务,如果把 node 也归属到前端,那里面的 koa ,以及 node-mysql 这种插件用到的算法海了去了
    ZLY201
        54
    ZLY201  
       2022-08-05 16:43:22 +08:00
    还有就是做开源框架,像 ant-design 、arco-design 这种里面肯定会用到的
    ZLY201
        55
    ZLY201  
       2022-08-05 16:45:45 +08:00
    @NameLiving 虎牙面试会问你如何快速判断弹幕里有没有关键词屏蔽,难道真的直接 for 循环遍历。。。简单一点可以用 kmp ,高级一点用字典树,再强可以用 AC 自动机或者前 /后缀数组
    yunying
        56
    yunying  
       2022-08-05 16:46:36 +08:00
    有的。。特别是可视化相关的。
    ntnyq
        57
    ntnyq  
       2022-08-05 16:56:03 +08:00
    用的少,而且有点概念用的时候再查我感觉足够。
    sugars
        58
    sugars  
       2022-08-05 17:02:50 +08:00   ❤️ 1
    涉及 canvas 和 svg 的复杂场景时,就需要用到一些算法
    wongskay
        59
    wongskay  
       2022-08-05 17:32:08 +08:00
    很少
    wolfie
        60
    wolfie  
       2022-08-05 18:24:01 +08:00
    见过前端 7 层循环代码。
    vscode 提示 r u kidding me 。
    lookStupiToForce
        61
    lookStupiToForce  
       2022-08-05 18:25:48 +08:00
    前端已经卷出来了那么多那么多的轮子,怎么会没有算法的需求(狗头
    sucai
        62
    sucai  
       2022-08-05 18:35:45 +08:00 via Android
    普通业务开发也有可能用到,一点思想没有写出来一大串面条代码很容易在 review 的时候被人家喷,然后人家随手给你写个改良版的,差距一下体现出来了
    codehz
        63
    codehz  
       2022-08-05 18:57:00 +08:00
    编译器前端也是前端(划掉)
    正经回答:主要看你怎么定义算法,原则上就算 crud 也算算法,css 布局(比方说响应式)也算算法,甚至于点击后执行某个操作,难道就不算算法了吗,所以什么算算法这事就很决定结论了
    WhateverYouLike
        64
    WhateverYouLike  
       2022-08-05 18:59:52 +08:00 via Android
    看到楼上有说列表和树相互转换的,一声叹息。
    想起来我最近要渲染一棵树,且允许用户增删改这棵树,也有保存和恢复的要求。然后我就纯纯的管理了一整套 Dom 树和逻辑树的状态。后来才发现在那个场景里,先把树转成 list 会方便很多很多
    nowcoder
        65
    nowcoder  
       2022-08-05 19:36:45 +08:00
    你可以看看那些地图的应用,如何高效的筛选展示会需要一点算法。
    sutra
        66
    sutra  
       2022-08-05 19:38:25 +08:00
    做不了的,丢给后端?
    RightHand
        67
    RightHand  
       2022-08-05 19:38:29 +08:00 via Android
    恩,这么说 win 系统也是前端,不就几个窗口吗
    Stevearzh
        68
    Stevearzh  
       2022-08-05 19:38:51 +08:00
    图论 /几何来了解一下吧,可有意思了:

    https://github.com/d3/d3
    https://github.com/d3/d3-force
    wonderfulcxm
        69
    wonderfulcxm  
       2022-08-05 19:40:33 +08:00 via iPhone
    没有,以前听《内核恐慌》时吴涛甚至说过前端就不属于程序员。
    icebear0
        70
    icebear0  
       2022-08-05 22:20:18 +08:00
    那么,问题来了,借 OP 的帖子,请教下哪里有比较好的前端算法入门的视频吗
    YYYeung
        71
    YYYeung  
       2022-08-05 22:40:13 +08:00
    虽然说算法都有实现,但是知道有这个算法与不知道有这个算法,还是有区别的;而知道有这个算法而且还能有点印象的方法,好像也只能通过刷题?
    haolongsun
        72
    haolongsun  
       2022-08-05 23:30:10 +08:00
    游戏也是算前端,图形学无底洞,不仅算法还要数学。
    还是怎么做自己的人生规划把,吃计算机这碗饭,还是要会算法的,即使不用,当个爱好,总不会错,(:我一般上班摸鱼的时候刷 cf,跳槽的时候简直不要太好面试。
    hheedat
        73
    hheedat  
       2022-08-05 23:37:57 +08:00
    会啊,比如做文本高亮?
    wyx119911
        74
    wyx119911  
       2022-08-06 01:35:54 +08:00
    像在线文档这种产品,前端甚至还要会编译原理
    DeWjjj
        75
    DeWjjj  
       2022-08-06 01:47:49 +08:00
    数据多的查找算法算然可以硬找但是产生的开销需要写树。
    aleen42
        76
    aleen42  
       2022-08-06 08:27:06 +08:00 via Android
    你要記住一點:程序=數據結構+算法
    JounQin
        77
    JounQin  
       2022-08-06 17:16:06 +08:00 via iPhone
    少,但是有,而且基本的语言内置的数据结构肯定是要精通的,而算法是实现某个业务时可能去实现的最优解,有时候找不到最优解就通过 UX 的方式解决。
    HeapOverflow
        78
    HeapOverflow  
       2022-08-06 18:44:33 +08:00 via iPhone
    与前不前端无关,与应用相关,一个普通 CRUD 应用可能不需要什么复杂的算法,但是想一想 figma ,google suite ,leetcode 这种,还是需要高于平均的算法知识的
    privapps
        79
    privapps  
       2022-08-07 00:55:49 +08:00
    你把 Neo3j 的 Web UI 看一下
    整体来说用的不多,但偶尔要求还蛮高的
    rannnn
        80
    rannnn  
       2022-08-07 10:39:29 +08:00
    google doc 就是一个 canvas 里面所有东西都是他们自己渲染的。你就想一个拖动选中多行需要多少算法。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2688 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:46 · PVG 20:46 · LAX 04:46 · JFK 07:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.