V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jeodeng
V2EX  ›  程序员

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

  •  1
     
  •   jeodeng · 12 天前 · 5973 次点击

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

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

    80 条回复    2022-08-07 10:39:29 +08:00
    wangtian2020
        1
    wangtian2020  
       12 天前   ❤️ 3
    基本没有

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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