百度的系统设计题

来源:互联网 发布:重庆seo推广公司 编辑:程序博客网 时间:2024/06/04 20:12
你得先知道什么缓存
假设 我现在要从包含大数据的文件中查找一个数据


数据格式是一个结构体
struct Data
{
    int id;
    char name[255];
   ...
};

那现在我们需要这么做呢  当用户发送一个id过来的时候  我们开始遍历文件  查找id相等的结构体记录
现在我们发现一个规律  在多数情况下 前后 5次左右的请求 id  是相同的
我们是不是可以优化一下,每次在内存中保留上一次找到的 结构体记录,那么下次请求来的时候  我们直接对比上次的查找结果 如果id确实相等  那么我就直接返回,如果不等 再查找文件

万一这个时候数据变了呢...我们先讨论不变的情况。
那么问题就来了  我们采用什么数据结构 来组织这些内存中的缓存呢?
链表是最直观的  ,简单 但是每次就变成先遍历链表了
于是 我们可以考虑 树结构。根据ID 分级存储。二叉排序树。这样二级缓存就出来了。
第一级我们先确定id位于哪个子树中 接着 我们遍历对应的子树

这个就是数据结构的应用之一  大型的公司 产品中都有类似的问题
整个意图是提高大数据的查找性能
当数据量比较大的时候,将所有的数据建成一棵树是否可行? 当你采用的缓存技术不能提高访问性能的时候 就要考虑是不是需要继续了
百度的这个题 除了考察缓存的思想 还考察分布式系统的概念
其实就是在不同的机器上都分配缓存的备份,这样可以保证 当一台机器down掉之后  服务可以持续
原创粉丝点击