代码改变世界

系统模块设计问题集

2014-07-27 02:19  Loull  阅读(331)  评论(0)    收藏  举报

1. 淘宝网的秒杀 是如何确保数据的准确性和效率的.
   希望小伙伴们能从前端架构,分布式的数据共享和安全等以及数据库多个层面来讨论下...一定要具体

  服务端负载均衡,设置处理上限,比上限多的请求直接抛弃,防止集群down机;数据共享,用内存数据库,根据id,hash到不同的内存数据库,多个机器并发处理。

2. 新浪微博的短URL是如何实现的.

  这个感觉用md5算一下就行了;参考:http://blog.csdn.net/xyz_lmn/article/details/8057270

3. 团购时,验证码如何实现.(包括6位的短信验证码和成功后的订单条码)

  订单条码,用户id+订单号+日期时间+随机数?

 

4.淘宝上是如何保证库存和订单之间的数据准确性的.

(考点是分布式事务,这个问题我也没答上来,最后他问我有什么问题问他的时候,我就反问的这个问题,面试官人挺好的,给我耐心的讲解了一遍淘宝的实现方式以及epay的实现方式. 淘宝是通过分布式事物,中间用了一个叫协调者角色的程序,当那边点击购买时,会库存减一,保存一条预扣的状态,但是是个预准备状态,然后做成功后,协调者会在另一个数据库生成订单,然后这个订单也是预状态,等两边都准备好以后,通知协调者,又协调者统一完成这2个数据库的事物,从而达到完成一笔交易的目的,若其中一方失败,则将预扣的数字返回到库存从而实现类似回滚的操作.)

其实也就是有个状态机,状态对应事件变化。

 

5.索引的原理.能否构建时间索引.时间索引构建后会存在什么问题.

聚集索引就是物理索引。最大的优势就是大范围数据查询有着较高的效率。

聚集索引字段选择优先级:时间字段>>会进行大范围查询的列>>具有唯一值的有实际意义的字段>>自增列ID

若表里面有时间列,并且时间是按照数据插入顺序增长时(时间无需唯一即可有重复值,哪怕是大范围重复),建议采用时间列作为聚集索引的第一选择。理由:聚集索引有一个巨大的优势就是进行大范围数据查找,而且这个优势会随着数据量的增加而越来越明显,一般来说我们需要进行大数据量范围查询时都会用时间列围作为筛选条件,由于聚集索引不存在书签查找而且可以进行连续扫描,因此查询速度会非常快。时间列数据最好是顺序插入的这样可以尽量减少磁盘碎片,是数据存储相对集中,便于连续数据读取。

 

 

 

Sql Server查询性能优化之创建合理的索引(上篇)

Sql Server查询性能优化之创建合理的索引(下篇)

http://bbs.csdn.net/topics/390711584