就比较好奇,大家公司里前端真的有算法诉求吗?还是说算法更多是考核思维? 如果是做基建、设计框架(如 vue\react )我还能理解, 70%的前端应该是写交互、渲染\优化、样式\兼容这几点吧?
...想问问大家长长见识
1
wangtian2020 2022-08-05 11:25:27 +08:00 3
基本没有
我只用 electron 写过一次 DFS ,那个项目寻找最优方案,最后因为最优可能算不出来或者耗时过大,我就让他每次都额外判断一次时间戳,超过 5000ms 就不继续找了,当前的最好方案作为最终方案。 平时代码的素养,超过 3 层的循环就考虑有可能的性能问题,把 array.find 变为 object.key 寻找值可以提升性能。 |
2
ericls 2022-08-05 11:25:59 +08:00 2
游戏也是前端
|
3
byuan04 2022-08-05 11:29:53 +08:00
看你需求吧。。。如果你做个弹幕之类的,肯定有算法诉求
|
4
learningman 2022-08-05 11:31:07 +08:00 via Android 1
Google Docs 也是前端
|
5
horseInBlack 2022-08-05 11:35:03 +08:00
起码得知道时间复杂度和空间复杂度的概念,比如同样修改一个数组、对象,用拼接的方法会比 for 循环挨个判断修改的复杂度低得多
其他的就和设计模式,初学者上来楞学也学不明白,根本也不知道这样的做的好处,因为没吃过相关的亏 |
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 形式的数据,转成树形数据。因为我不懂数据结构和算法,只能用递归做,不停地遍历循环,导致在小程序端有性能压力。
如果我懂前缀树什么的,就不会有这个问题。 |
7
jorneyr 2022-08-05 11:37:06 +08:00
很多时候遇到一个问题,可以野蛮的解决,也可以使用特定算法优雅的解决,至少前端方面我遇到过不少次。
如果你不会算法,当然觉得前端不需要算法,因为你会觉得工作中就没用过算法,所以算法无用。 |
8
TWorldIsNButThis 2022-08-05 11:37:11 +08:00 via iPhone
目录树用过 dfs
|
9
murmur 2022-08-05 11:37:59 +08:00
前端能拉库就拉库,库不仅好使,还经过测试,还有各种参数验证
|
10
newSimpleLife 2022-08-05 11:39:57 +08:00
需要 例如 sku 算法 只不过大多数情况不需要 因为大多涉及不到
|
11
tomieric 2022-08-05 11:45:43 +08:00
以前后端提供 N 个数组,前端写组合,需要笛卡尔积,😅
|
12
zmal 2022-08-05 11:49:28 +08:00
需要。就比如一个目录树,新手能写个 N 次方算法出来。
如果写小程序,或者老旧 windows 平台(医院自助服务机)这种对资源敏感的客户端,即使是 n^2 和 n*logn 都会体现出明显差距。 |
13
jones2000 2022-08-05 11:50:30 +08:00 1
简单点的算法前端还是可以算的,比如移动平均,线性回归, 协方差等等前端都可以做, 直接 js 一把梭。我自己的图形库( https://github.com/jones2000/HQChart )里就包含好多金融算法,都是前端自己算, 不依赖于后台, 后台只提供基础数据。 最关键的是前端算,不会浪费后台算力,反正现在手机,pc 配置都高的离谱,不用白不用。
|
14
dudubaba 2022-08-05 11:50:34 +08:00
一般业务前端是不到的,但是有部分前端比如用 webAR/VR 、在线文档、页游等会用到。面试算法 90%是卷(因为实在没什么好问的,大家都是这么进来的),剩下 10%才是有实际需求,或者是想考数据结构等看看基础扎不扎实。
|
15
johnnyNg 2022-08-05 11:54:44 +08:00
以前做图片曲线调节,需要拉格朗日插值算法
|
16
renhou 2022-08-05 11:58:31 +08:00 1
我见过把前端当做美工
还要美工也会算法的 纯纯的滴嫩儿 |
17
LiubaiQ 2022-08-05 12:05:19 +08:00
遇到了不会,会了但没遇到,肯定是两种结果。
其实只要满足有穷、确定、可行、输入、输出,就是一个算法,并不是非要局限在特定的几种数据结构的数据运算上。。。 |
18
lujiaosama 2022-08-05 12:06:41 +08:00
很少. 比如 sku 要写笛卡尔积, 树形结构组装数据.
|
19
yousabuk 2022-08-05 12:12:18 +08:00 via iPhone
有些需要吧,比如我们做的要在前端页面显示 /配置 modbus 的主机、从机的线圈状态 /离散量和寄存器。
问题是牵扯到真实 PLC 的地址偏移,又牵扯到是个通用的 PLC 前端程序(不能固定偏移量)。 就这个,没啥算法其实,把前端小妹妹整哭了,走了。 哎~~~~~~ |
20
DOLLOR 2022-08-05 12:43:09 +08:00 via Android
比如 tree 跟 list 之间的转化也是算法需求吧。
不然后端甩你一个组织机构 list ,然后怎么把它渲染成树形结构? |
21
stkstkss 2022-08-05 12:48:25 +08:00 via iPhone
留名
|
22
oatw 2022-08-05 13:15:30 +08:00
做项目需要比较少,写框架或者类库会用到的。
|
23
redford42 2022-08-05 13:17:36 +08:00
我唯一能想到选人组件优化?
|
25
blackywkl 2022-08-05 13:48:58 +08:00
之前涉及到数量大的时候会涉及,数据量都上万,需要查找某些特定的数据,不能直接 for 循环遍历的
|
26
vaporSpace 2022-08-05 13:52:59 +08:00
就一个组织架构选择器,就可能需要用到前 /后序树遍历,深 /广度优先遍历,简单的算法还是挺常用的吧。普通前端业务来说,我的经验是 B 端业务更有可能用得上算法。这玩意就是不用也行,但会用就多一种解法。
|
27
dcsuibian 2022-08-05 13:58:06 +08:00
算法不单是时间复杂度的问题,结果是否正确也是很重要的一部分。
|
28
darkengine 2022-08-05 14:00:54 +08:00
大部分是工程性的活儿,极少需要自己实现算法。
|
29
imn1 2022-08-05 14:04:24 +08:00
多咯,地图相关、动态界面(例如证券)……
要看怎么定义“前端”,只要是数据相向互动(对话)的,基本上都需要的 简单理解就是数据在前后端都会变化的,互相发送的,两端都需要“计算” 一直只做单向数据展示的,才觉得不需要算法 |
30
darkengine 2022-08-05 14:05:35 +08:00
@yousabuk 好奇问下,“真实 PLC 的地址偏移,又牵扯到是个通用的 PLC 前端程序”,这些业务逻辑是不是可以放在后端做,相当于后端在前端页面和 modbus 从机的寄存器状态,命令下发做个翻译的工作。
万一以后需要做个 app 端,app 开发人员也不需要再写一遍这套逻辑了。 |
31
wu67 2022-08-05 14:09:55 +08:00
偶尔吧. 接触过的有这么几种:
1 是在上家的时候, 写 h5 小游戏, 乱序算法. 2 是在上家和目前这家, 都遇到了, sku 规格选择. 可达路径计算. 3 是写自己的小项目, 统计游戏装备属性进行分类归属. 严格来说不是要多复杂才能叫算法, 一个极端的例子, 穷举, 也是算法的一种, 相信大家都会. 个人认为, 前端考算法不是说你得要多牛多厉害, 而是考思路, 证明你看待问题有自己的思路、对资源分配有一定的判断. |
32
fffang 2022-08-05 14:16:26 +08:00
一般业务没有,特定业务会有。
另外文字渲染,图像渲染里都有算法,内存布局里也是各种算法,这种算不算前端?也算的吧。 |
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 。 |
34
tanelmer 2022-08-05 14:33:35 +08:00
算法能力可以不用,但不能没有~
|
35
sy20030260 2022-08-05 14:43:30 +08:00
大多数面试官问算法主要还是为了考察编码习惯和代码风格,要么就是候选者是应届生没啥项目经验,只能多考考算法
|
36
kop1989smurf 2022-08-05 14:50:10 +08:00
前端有算法需求么?
有。但不多。 做前端有学算法的必要么? 有必要,但性价比(优先级)低。 相较而言,了解并熟知算法概念(时间、空间复杂度等)比算法本身更重要。 做前端必须会算法么? 算法是做前端的非充分,非必要条件。 btw:需要算法的多数情况可以通过既有的工具库、成熟解决方案来抄作业。 比如数据的横纵转换、高性能的排序、浮点数的运算等等。 |
37
mumuy 2022-08-05 14:52:22 +08:00
用得上啊,我无意间写的寻址算法,后来才发现就是广度搜索,然后我把它应用到了游戏里面: https://passer-by.com/pacman/
|
38
AyaseEri 2022-08-05 15:05:14 +08:00 1
比较多的场景就是数组根据 parentId 转化成一棵树。
比较少一部分人会需要用到求两条直线是否相交、获取贝塞尔曲线路径点之类的算法。 |
39
bobo2 2022-08-05 15:12:34 +08:00
有,不到三年经验的我都深有感悟
|
40
7gugu 2022-08-05 15:13:46 +08:00
需要,特别是做小游戏之类的会用到一些
|
41
dayeye2006199 2022-08-05 15:14:27 +08:00 1
编辑器的实时协作功能,需要实现 ot 或者 crdt 算法。。
Figma 也是前端 |
42
shuianfendi6 2022-08-05 15:44:49 +08:00
@yousabuk 寄存器地址这种东西,EE 工程师都得花时间理顺,也是难为前端小妹妹
|
43
yousabuk 2022-08-05 15:48:22 +08:00 via iPhone
|
44
yousabuk 2022-08-05 15:49:58 +08:00 via iPhone
@shuianfendi6 是啊,很耐心的讲解了之间关系,讲了一个多礼拜,还给演示。最后还是被老板怼了哭了。
|
45
Cbdy 2022-08-05 15:50:39 +08:00 via Android
图形学算前端吗?
|
46
shuianfendi6 2022-08-05 15:55:09 +08:00
@yousabuk 寄存器操作我直接给后端写好 Java 封装代码 qaq
|
47
libook 2022-08-05 16:01:36 +08:00
普通业务开发的话,不管前后端都极少涉及到算法。
除了个别岗位对算法有要求外,通常招聘时考察算法只是因为简历太多,需要强行淘汰掉一部分,来减少筛选的工作量。 |
48
qiaobeier 2022-08-05 16:03:24 +08:00
图形,游戏,数字可视化方面有一些需求。
|
49
polo3584 2022-08-05 16:17:48 +08:00
做游戏用到过一些,一部分是游戏内在的逻辑算法,另一部分是一些渲染方面的也需要。
|
50
vitoaaazzz 2022-08-05 16:30:36 +08:00
对大部分需求来说用现成的轮子足够了
|
51
kangyan 2022-08-05 16:35:03 +08:00
有用到过,做 多标签页系统 的时候,使用过缓存淘汰算法( LRU )。
|
52
NameLiving 2022-08-05 16:38:23 +08:00
@byuan04 弹幕会有吗。。
|
53
ZLY201 2022-08-05 16:42:10 +08:00
大部分业务需求感知不到,但是如果说 react vue 这种框架里面没有算法那可太天真了,光是里面用到的编译原理就把 90% 的前端打回原形,还不谈 node 这种中间服务,如果把 node 也归属到前端,那里面的 koa ,以及 node-mysql 这种插件用到的算法海了去了
|
54
ZLY201 2022-08-05 16:43:22 +08:00
还有就是做开源框架,像 ant-design 、arco-design 这种里面肯定会用到的
|
55
ZLY201 2022-08-05 16:45:45 +08:00
@NameLiving 虎牙面试会问你如何快速判断弹幕里有没有关键词屏蔽,难道真的直接 for 循环遍历。。。简单一点可以用 kmp ,高级一点用字典树,再强可以用 AC 自动机或者前 /后缀数组
|
56
yunying 2022-08-05 16:46:36 +08:00
有的。。特别是可视化相关的。
|
57
ntnyq 2022-08-05 16:56:03 +08:00
用的少,而且有点概念用的时候再查我感觉足够。
|
58
sugars 2022-08-05 17:02:50 +08:00 1
涉及 canvas 和 svg 的复杂场景时,就需要用到一些算法
|
59
wongskay 2022-08-05 17:32:08 +08:00
很少
|
60
wolfie 2022-08-05 18:24:01 +08:00
见过前端 7 层循环代码。
vscode 提示 r u kidding me 。 |
61
lookStupiToForce 2022-08-05 18:25:48 +08:00
前端已经卷出来了那么多那么多的轮子,怎么会没有算法的需求(狗头
|
62
sucai 2022-08-05 18:35:45 +08:00 via Android
普通业务开发也有可能用到,一点思想没有写出来一大串面条代码很容易在 review 的时候被人家喷,然后人家随手给你写个改良版的,差距一下体现出来了
|
63
codehz 2022-08-05 18:57:00 +08:00
编译器前端也是前端(划掉)
正经回答:主要看你怎么定义算法,原则上就算 crud 也算算法,css 布局(比方说响应式)也算算法,甚至于点击后执行某个操作,难道就不算算法了吗,所以什么算算法这事就很决定结论了 |
64
WhateverYouLike 2022-08-05 18:59:52 +08:00 via Android
看到楼上有说列表和树相互转换的,一声叹息。
想起来我最近要渲染一棵树,且允许用户增删改这棵树,也有保存和恢复的要求。然后我就纯纯的管理了一整套 Dom 树和逻辑树的状态。后来才发现在那个场景里,先把树转成 list 会方便很多很多 |
65
nowcoder 2022-08-05 19:36:45 +08:00
你可以看看那些地图的应用,如何高效的筛选展示会需要一点算法。
|
66
sutra 2022-08-05 19:38:25 +08:00
做不了的,丢给后端?
|
67
RightHand 2022-08-05 19:38:29 +08:00 via Android
恩,这么说 win 系统也是前端,不就几个窗口吗
|
68
Stevearzh 2022-08-05 19:38:51 +08:00
|
69
wonderfulcxm 2022-08-05 19:40:33 +08:00 via iPhone
没有,以前听《内核恐慌》时吴涛甚至说过前端就不属于程序员。
|
70
icebear0 2022-08-05 22:20:18 +08:00
那么,问题来了,借 OP 的帖子,请教下哪里有比较好的前端算法入门的视频吗
|
71
YYYeung 2022-08-05 22:40:13 +08:00
虽然说算法都有实现,但是知道有这个算法与不知道有这个算法,还是有区别的;而知道有这个算法而且还能有点印象的方法,好像也只能通过刷题?
|
72
haolongsun 2022-08-05 23:30:10 +08:00
游戏也是算前端,图形学无底洞,不仅算法还要数学。
还是怎么做自己的人生规划把,吃计算机这碗饭,还是要会算法的,即使不用,当个爱好,总不会错,(:我一般上班摸鱼的时候刷 cf,跳槽的时候简直不要太好面试。 |
73
hheedat 2022-08-05 23:37:57 +08:00
会啊,比如做文本高亮?
|
74
wyx119911 2022-08-06 01:35:54 +08:00
像在线文档这种产品,前端甚至还要会编译原理
|
75
DeWjjj 2022-08-06 01:47:49 +08:00
数据多的查找算法算然可以硬找但是产生的开销需要写树。
|
76
aleen42 2022-08-06 08:27:06 +08:00 via Android
你要記住一點:程序=數據結構+算法
|
77
JounQin 2022-08-06 17:16:06 +08:00 via iPhone
少,但是有,而且基本的语言内置的数据结构肯定是要精通的,而算法是实现某个业务时可能去实现的最优解,有时候找不到最优解就通过 UX 的方式解决。
|
78
HeapOverflow 2022-08-06 18:44:33 +08:00 via iPhone
与前不前端无关,与应用相关,一个普通 CRUD 应用可能不需要什么复杂的算法,但是想一想 figma ,google suite ,leetcode 这种,还是需要高于平均的算法知识的
|
79
privapps 2022-08-07 00:55:49 +08:00
你把 Neo3j 的 Web UI 看一下
整体来说用的不多,但偶尔要求还蛮高的 |
80
rannnn 2022-08-07 10:39:29 +08:00
google doc 就是一个 canvas 里面所有东西都是他们自己渲染的。你就想一个拖动选中多行需要多少算法。
|