数据结构和系统设计问题

时间:2011-02-07 08:58:04

标签: database-design data-structures system-design

如果有人要求“为此类设计系统”或“您将使用哪种数据结构?”......是否可以回答关系数据库系统设计?完成表,实体,它们之间的关系,外键和主键等?对于那些在使用数据库系统方面有很多经验,但没有使用数据结构的项目经验的人来说,这是否合适?我只知道链接列表,二叉树,二叉搜索树,堆栈和队列......对我即将进行的实习访谈感到紧张。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

链接列表,树和堆栈是用于处理程序中数据的工具。数据库表和表设计和关系是用于存储数据的工具。 “系统”使用这两者但出于不同的目的,但它们确实起作用。

“为此类设计系统” 这是一个更高级别的问题,因此我首先讨论数据库表,然后根据它们的详细程度,进入程序细节。

“您将使用哪种数据结构?” 这听起来像是一个关于算法设计的问题,所以这里可能会有人问你树木和堆栈。

希望有所帮助:p

答案 1 :(得分:1)

在访谈中,旨在测试您对数据结构的熟悉程度(通常具有算法复杂性)的问题与关系数据库无关。有关系统设计的问题可能涉及数据库设计部分。

您提到的数据结构都很重要。最明显缺失且非常重要的是hash tables(或无序映射,以及许多脚本语言中数据结构的基础,例如python中的dicts和javascript中的objects / maps)。您还应该阅读btrees,它们通常用于实现关系数据库(并且具有二叉搜索树等属性,但更适合磁盘存储)。

答案 2 :(得分:0)

在实习生的采访中,那不行。

我希望你熟悉基础数据结构,但我不希望你成为其中任何一个的专家。 (不管怎么说,不是我称之为专家。)我对你如何回答明显超出你现有知识的问题更感兴趣。如果我问你关于van Emde Boas树的理论优势,“我不知道”可能是正确的答案。 (比试图欺骗我更好。)

但是,作为一个实际问题,您可以将关系设计原则应用于许多不明显相关的问题。大多数Lotus Notes应用程序都将受益于稳固的关系设计。即使您无法在Notes中以声明方式实现约束,您仍然必须以某种方式对它们进行说明 - 异常报告,期间文档爬行等等。

而且,IIRC,大规模C ++设计中的第一个扩展示例与C ++或OO设计问题一样是关系设计问题。 (那件事发表于1996年。我那么老吗?是的,我想我是。)