写在前面
之所以是“再谈”,是因为自己在一些场合向后来人简单谈了 数据结构与算法,觉得数据结构就是方便后端存储数据,以各种形式返回一些类型,还有一些链表、指针的概念,对于后续对MySQL、Redis等底层原理的学习也很有帮助。另外,如果工作后,因为某些业务场景,原有的常规的数据结构不能满足使用,需要自己现场封装一些数据结构,这样开发人员使用更方便。
为什么说程序开发离不开数据结构与算法
通过今天的学习,发现数据结构不止这些传统的、课本上的算法。以Redis实现排行榜功能为例,就有一些我们传统的算法题接触不到的名词。
比如,抖音直播间刷礼物,每个房间需要展示排行榜。
我们将礼物数量存储在Redis-zset中,这个zset数据结构实现排行榜的功能,底层是通过skiplist使得元素整体有序。
这是我们最容易想到的数据结构的应用。
我们再想深一点,使用Redis,但是Redis有宕机的可能性,比如抖音这么大的APP,里面的用户信息足够多,我们通常使用Redis集群,为了避免单机压力过大,我们使用主从算法、分片算法。
我们还要保证集群原信息的稳定,使用一致性算法。
后端还要使用缓存算法(LRU) 降低Redis压力,展示房间排行榜。
缓存算法,听起来很高大上,但是一说原理是LRU,有操作系统基本功的同学很容易能够想到这是OS里的调度算法。但是我们要做这样的一个缓存算法,或者要用,或者用的时候发生Bug,要排查问题,考察的还是数据结构基本功。