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

想了解下大佬们在工作中用过的数据结构

  •  1
     
  •   minglanyu · 60 天前 · 2973 次点击
    这是一个创建于 60 天前的主题,其中的信息可能已经有所发展或是发生改变。

    emmmmmm,说出来不怕丢人。

    昨天无意间刷 leetcode,发现一道题解法很妙,发现了新世界一样;今天做另一道题的时候发现 emmmmm,不是那么简单,还是得动动脑子的。 所以又对数据结构和算法在工作中的实际用途产生了困惑。

    平时大多数时间在用 Array 原型链上的forEach,map,filter等等,String 原型链,Object 原型链上的那一套,再搭配一些 es6+的Set(),...,Map这种等等。 偶尔遇到一些稍微复杂的会用 lodash 里的函数或者 for for,对服务端返回的数据做一些处理以供渲染。

    我写 PC 端的前端中后台系统,就是上面这些东西组合起来用,平时工作也够用了,性能也没啥问题。 如果是操作 DOM,基本上也是调 API,然后也很少有抓耳挠腮的感觉,一点一点能把需求做出来。 框架用的也算是蛮熟,接入第三方开源库也很快,源码也阅读过一些。

    学校里也学过数据结构,基本上就是一些数组,二叉树,链表之类等等(当前工作里用到最多的就是数组了,可能是我太菜也可能是没必要用所以后面两个几乎没用过,所以基本上忘光了)。

    偶尔刷刷 leetcode,起初是为了加深对 js 的语法的掌握,现在感觉语法啥的就那么回事,数据结构才更值得自己去深入学习一下,兴许以后写个什么复杂玩意儿就用上了。

    其他语言我不太懂,但是感觉下面这些很大程度简化了一些前端在数据结构和算法上花费的时间:

    • 面向对象的程序设计的设计思想:类和实例
    • js 语言的真香函数:Array,String,Object 原型
    • 框架的出现:Vue 生态,React 生态,JQuery
    • 各种库:UI 库,请求库,函数处理库,canvas 库

    还有太多太多了

    最近想花时间补补这方面的知识了,不仅仅是应对以后的面试,更多的是想在工作中写出优雅的代码来,毕竟一直 if else + for for 迭代 感觉有点···

    所以就想问问大佬们,你们在工作中用了什么数据结构,香不香?

    43 条回复    2020-03-27 14:08:28 +08:00
    tabris17
        1
    tabris17   60 天前
    跳表
    lithbitren
        2
    lithbitren   60 天前 via iPhone
    映射表建树,组件递归之类的,反正就是很简单的东西,但很多人找不到轮子就是写不出来,或者找了个乐色轮子改半天也不能符合要求。还有字符串处理,很多框架熟练工连正则都不会写,emoji 识别也写不出,都是巨简单的东西,再难也难不过 leetcode 中等题。
    nekoneko
        3
    nekoneko   60 天前
    二叉树,表栈队列还是别忘的好,说不定哪天就用上了
    Jacky23333
        4
    Jacky23333   60 天前 via Android
    数组
    nekoneko
        5
    nekoneko   60 天前
    比如说发一大堆消息时,会用到队列,但是又有了 vip 用户,svip 用户,要保证 svip 先于 vip 先于普通用户,这时候就要优先队列也就是大小顶堆了
    fancy111
        6
    fancy111   60 天前
    只刷困难题的飘过。。。 数据结构也就那么多,很多时候可以靠算法自建。
    minglanyu
        7
    minglanyu   59 天前
    @tabris17 @nekoneko 看来在服务端还是蛮有用的 如果我想写 node 的话真得加强了
    minglanyu
        8
    minglanyu   59 天前
    @lithbitren 正则确实是字符串处理利器 框架熟练工不可怕 不知道自己是框架熟练工的才可怕
    minglanyu
        9
    minglanyu   59 天前
    @Jacky23333 数组是真的好用 233
    minglanyu
        10
    minglanyu   59 天前
    @fancy111 大佬牛杯 我就先刷刷 easy 和中等就好了
    isRealLeven
        11
    isRealLeven   59 天前
    双链表
    wellsc
        12
    wellsc   59 天前
    万物皆可 map
    Harv
        13
    Harv   59 天前
    正巧刚用环形队列写了个存储接收数据的程序。
    minglanyu
        14
    minglanyu   59 天前
    @wellsc 小 map + 大 Map
    minglanyu
        15
    minglanyu   59 天前
    @Harv 厉害的
    Leonard
        16
    Leonard   59 天前
    数组
    minglanyu
        17
    minglanyu   59 天前
    @isRealLeven 刚学了下单链表的双指针,还蛮好用 用双链表写了啥啊大佬
    hauzi
        18
    hauzi   59 天前
    数组最多啦
    cgh
        19
    cgh   59 天前
    @Harv 什么场景,不能直接存储吗?
    angryfish
        20
    angryfish   59 天前
    数据结构用得很多,但都是库有的啊。list,set,map,不天天用,不用自己实现而已。
    catinsides
        21
    catinsides   59 天前
    想看“发现了新世界一样”的那道题
    minglanyu
        22
    minglanyu   59 天前
    @catinsides 我夸张了一下 哈哈
    no1xsyzy
        23
    no1xsyzy   59 天前
    Dict[Tuple, Any] 真香
    刷到动态规划题都直接继承 dict 写个 __missing__
    遇到计算顺序敏感的(即容易爆栈)再写个循环 touch 一下 result[X]
    不追求极限速度就一遍过,反正 leetcode 的 Python 运行时本身连启动都很慢。

    ——

    稍微看歪了
    想想,我发现我成天在改语法结构,改到静态检查器都不认了。
    minglanyu
        24
    minglanyu   59 天前
    @no1xsyzy 我是谁 我在哪 我在干什么 v 站果然藏龙卧虎
    no1xsyzy
        25
    no1xsyzy   59 天前
    @minglanyu 是中文有偏差,如果我说的改语法结构说成 tweak with syntax 就只剩下诡异了(
    also24
        26
    also24   59 天前
    我最喜欢的数据结构还是并查集,实实在在的拓宽了思路,以至于有些不是并查集的题目,我也会用并查集来做着玩儿~~
    also24
        27
    also24   59 天前
    另外,我最不喜欢的数据结构是 Trie 树,适用的场景相对比较少,对空间也比较浪费。
    ackfin01
        28
    ackfin01   59 天前
    除了语言自带的那些数据结构,还会用下面的

    - 栈,队列
    - 链表:也很常用,用过双向循环链表在 LRU 缓存里,
    - 树:常用在搜索,二叉树是最基本的,还用过矩形树
    - 图->最常用的:DAG,是否有环

    还有很多算法真的是很有用,比如双指针,dfs,bfs,动态规划等

    其实总结一下,就是遇到一个问题进行分析的时候,就会考虑这些可能的数据结构和可能的算法实现,哪种应用起来最符合,使得问题简化效率提高,简化不仅是实现上,代码可读性上,还有运行效率上。
    bruce2000
        29
    bruce2000   59 天前
    我除了 list 和 dict 啥也不会,最复杂的也就是 list 与 dickt 的各种嵌套,楼上的大佬说的我一脸懵逼
    jingcoco
        30
    jingcoco   59 天前 via Android
    大部分程序员不需要 CS 证书,广度很重要在小公司,基本要求你啥都做。我自己主要是也像楼主一样想提高所以自己有看些。
    tingyunsay
        31
    tingyunsay   59 天前
    布隆过滤器,个人小项目去重首选
    changz
        32
    changz   59 天前 via Android
    优先队列
    yangzhezjgs
        33
    yangzhezjgs   59 天前
    其实数据结构和算法使用最多的是底层的系统软件领域,一般应用开发还是 if eslse 这样的业务逻辑多
    xiaochun41
        34
    xiaochun41   59 天前
    基本很少自己实现,用的最多的大概是:队列
    zjbztianya
        35
    zjbztianya   59 天前
    @also24 web 框架的路由一般不就是用 trie 么?虽然是压缩前缀的(radix trie)...
    minglanyu
        36
    minglanyu   59 天前
    @ackfin01
    @changz
    @xiaochun41 队列看起来还是蛮多的
    minglanyu
        37
    minglanyu   59 天前
    @jingcoco
    @yangzhezjgs 确实是的 做应用层很多都是业务层的东西 而且其实也蛮有学问的
    RedisMasterNode
        38
    RedisMasterNode   59 天前
    @tingyunsay 小项目去重应该直接 set()精确, 大项目才应该用 BloomFilter ?
    tingyunsay
        39
    tingyunsay   59 天前 via iPhone
    @RedisMasterNode 对,实际情况得看数据量吧,可能我自己搞得那些项目量还比较大,所以习惯用 bloom 了😹sorry 有点以偏概全了
    jon
        40
    jon   59 天前
    战马
    Hardrain
        41
    Hardrain   59 天前 via Android
    数组
    双链表
    AVL 树
    971586331
        42
    971586331   59 天前
    用的最多的是队列,链表和树,图还没用过
    neilq
        43
    neilq   59 天前
    list,set,map, dictionary 之类就不说了到处都用,其他用的最多的还是队列,用来做消息处理、任务处理、循环任务之类的场景还是蛮多的。其次是树,什么菜单、组织架构。图,几年 crud 生涯只用过 2 次还是 3 次,基本都用映射表来做的
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4695 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 07:49 · PVG 15:49 · LAX 00:49 · JFK 03:49
    ♥ Do have faith in what you're doing.