Cracking the coding interview--Q12.1

January 27, 2013
作者:Hawstein
出处:http://hawstein.com/posts/12.1.html
声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处。

题目

原文:

If you were integrating a feed of end of day stock price information ( open, high, low,and closing price) for 5,000 companies, how would you do it? You are responsible for the development, rollout and ongoing monitoring and maintenance of the feed. Describe the different methods you considered and why you would recommend your approach. The feed is delivered once per trading day in a comma-separated format via an FTP site. The feed will be used by 1000 daily users in a web application.

译文:

如果你要为5000家公司的股价信息整合摘要,你会怎么做? 你要负责摘要的开发,部署,监控和维护。描述你能想到的不同方法, 及为什么你会推荐这些方法。摘要以逗号分隔的格式经由FTP进行交付,每个交易日一次。 每日有1000个用户在web应用程序中使用这些摘要信息。

解答

假设我们有一些脚本在每日结束时通过FTP获取数据。我们把数据存储在哪? 我们怎样存储数据有助于我们对数据进行分析?

方案一

将数据保存在文本文件中。这样子的话,管理和更新都非常麻烦,而且难以查询。 保存无组织的文本文件是一种非常低效的方法。

方案二

使用数据库。这将带来以下的好处:

  1. 数据的逻辑存储
  2. 提供了非常便捷的数据查询方式

例子:return all stocks having open > N AND closing price < M (返回开盘价大于N且收盘价小于M的所有股票)

优势:

  1. 使得维护更加简单
  2. 标准数据库提供了回滚,数据备份和安全保证等功能。我们不需要重复造轮子。

方案三

如果要求不是那么宽泛,我们只想做简单的分析和数据分发,那么XML是另一个很好的选择。 我们的数据有固定的格式和大小:公司名称,开盘价,最高价,最低价和收盘价。 XML看起来应当如下所示:

<root>
  <date value=“2008-10-12”>
	<company name=“foo”>
	  <open>126.23</open>
	  <high>130.27</high>
	  <low>122.83</low>
	  <closingPrice>127.30</closingPrice>
	</company>
	<company name=“bar”>
	  <open>52.73</open>
	  <high>60.27</high>
	  <low>50.29</low>
	  <closingPrice>54.91</closingPrice>
	</company>
  </date>
  <date value=“2008-10-11”> . . . </date>
</root>

优势:

  1. 便于数据分发。这就是为什么XML是共享及分发数据的一个标准模型。
  2. 我们有高效的解析器来提取出想要的数据
  3. 我们可以往XML文件中追加新数据

不足之处是数据查询比较麻烦(这点比不上数据库)。

全书题解目录:

Cracking the coding interview–问题与解答

全书的C++代码托管在Github上:

https://github.com/Hawstein/cracking-the-coding-interview