各种股票的数据来自各种证券交易所。哪种数据结构适合存储这些数据?
需要考虑的事项是:
a)在交易时间内每秒或每秒更改库存数据时,需要有效检索和更新数据。
b)需要显示当前趋势的股票(如股票销售量最活跃且最不活跃,特定日期的高利润和亏损)我想过使用Heap,因为库存的数量或多或少是恒定的,最常用的操作是检索和更新,因此堆应该在这种情况下表现良好。
我确定如何解决这个问题。
c)因为考虑到在特定时间内交易的股票数量,使用任何编程语言存储到数据库有一些延迟,你如何持久存储所有交易数据?Ps:这是摩根士丹利的采访问题。
答案 0 :(得分:2)
堆不支持有效的随机访问(即通过索引查找),也不支持前k个元素而不删除元素(这是不需要的)。
我的回答是:
数据库将是首选,因为通过适当的表结构和索引,可以有效地完成所有必需的操作。
所以我认为这是一个关于理解数据结构的理论问题(与内存存储相关,而不是持久存储)。
似乎有多种数据结构可供选择:
a)在交易时间内每秒或每秒更改库存数据时,需要有效检索和更新数据。
地图对这个有意义。散列图或树形图允许快速查找。
b)如何显示当前趋势的股票(如股票销售量最活跃和最不活跃,特定日期的高利润和损失)?
几乎任何已排序的数据结构似乎都有意义(上面的映射具有指向正确节点的指针,或指向同一节点)。一个用于活动,一个用于获利。
我可能会使用排序(双)链表。获取第一个或最后n个项目所需的时间最短。由于您通过地图有一个指向元素的指针,因此只要地图查找加上再次对其进行排序所需的该项目的移动次数(如果有的话),就会进行更新。如果一个项目经常同时移动多个索引,那么链接列表不是一个不错的选择(在这种情况下,我可能会选择二进制搜索树)。
c)如何持久存储所有交易数据?
我理解这个问题 - 如果与数据库的连接丢失或数据库在任何时候出现故障,您如何确保没有数据损坏?如果不是这样,我会要求改写。
几乎任何数据库课程都应该涵盖这一点。
据我所知 - 它与创建另一条记录,更新此记录以及仅在完全更新后设置指向该记录的实际指针有关。在此之前,您可能还需要设置一个指向旧记录的指针,以便在设置指针之后但在删除之前检查是否已删除它。
另一个选项是拥有一个活动的事务表,您可以在启动事务时添加该事务表,并从事务完成时删除(还存储所有必需的详细信息以回滚或恢复事务)。因此,每当一切都好的时候,你检查这个表并回滚或恢复任何尚未完成的交易。
答案 1 :(得分:0)
虽然这是一个与语言无关的问题,但有一些要求在我身上跳了出来。例如:
需要有效检索和更新数据,因为库存数据在交易时间内每秒或微秒发生变化。
java类HashMap
使用键值的哈希码来快速访问其集合中的值。它实际上具有O(1)
运行时复杂性,这是理想的。
需要显示当前趋势的股票(如在最活跃且最不活跃的股票数量,特定日期的高利润和亏损)
这是一个基于实现的问题。您最好的办法是实施快速排序算法,例如QuickSort
或Mergesort
。
因为考虑到在特定时间内交易的股票数量,使用任何编程语言存储到数据库有一些延迟,你如何持久存储所有交易数据?
数据库本来是我的首选,但这取决于您的资源。
答案 2 :(得分:0)
如果必须选择,我会选择哈希表:
原因::它是同步且线程安全的, BigO(1)作为平均案例复杂性。
提供: 1.良好的哈希功能,避免冲突。 2.高性能缓存。