电信分公司-华讯面试题,探讨下解题思想

一个月前在广州华讯公司(电信分公司)的一道面试题:请问一个购物的BS平台,客户A和客户B“同时”看上了一件商品,商品的数量是10件。客户A购买了这件商品7件,此时客户B的页面上还是显示“10”件商品。请问用什么办法让客户B知道商品的数量已经发生了变化,只有3件???要求:最好不要对数据库进行操作(如:客户B购买时查询数据库、在数据库中锁定当前数据),但是可以谈谈解题的思想。个人要求:如果有涉及到数据库方面的操作但解题方法很奇妙的也可以说说看。各位牛人、大侠都发表下看法或思路!!!

 1、ajax实现,动态刷新。可是要求一个触发。。。

2、采用观察者模式,当值发生变化时,及时通知各个操作该数据的用户!(http://ttitfly.iteye.com/blog/152512

3、在数据库里面商品表里面添加一个长整型的字段.存一个值.然后在A用户购买7件的时候修改这个字段的值.
然后B用户在来修改此记录的时候发现和B第一次拿的这个值和数据库里面的值不同,这样就可以知道这个操作被另一个用户操作,所以提示用户重新刷新..在操作,此时B的页面在刷新后就可以看到只有3件了.

4、应该放在application中,数据共享
但是这样会带来线程安全的问题,只有同步那块代码
但是又会降低效率,
5、首先这是两个问题,应该分开来谈:
1. 如何“及时”更新商品详细页,商品剩余数据的问题;
2. 更新时如何避免“直接访问数据库”的问题;

问题1:
BS方式的网站通常有两种解决方式,一是poll拉方式,也就是一般大家用的ajax定时刷新的机制,由客户端定时主动请求; 二是push技术,服务器端主动推送,一般是当某一事件发生时如商品数量更新时进行,如上面提到的comet技术。

问题2:
当通过poll方式拉数据时,都会通过发送请求到服务端,至于时如何避免“直接访问数据库”的问题,这是一个常见的问题。对于一般的小型网站,用缓存技术可以非常好的处理。这里指的一般的小型网站,可以指只有一台WEB服务器集中式支撑的网站。
当通过push方式时,当一个商品有新订单请求时,或发生一个事件,由这个事件来决定哪些用户端及时更新,并做出及时更新。至于商品数量要在缓存中更新或直接更新数据库从技术而言都可以。

补充:
对于是否在商品展示页时要求及时更新,或是在提交订单时更新,又或是在配送阶段决定,这一切都取决你的业务的要求。无论哪一种要求,都会直接影响你的技术架构。因为每一种方式对服务的要求,服务器可承载的压力都有直接关系,你可以根据业务的核心要求进行取舍。
6、单服务器的话,建立一个被锁定商品数量的全局静态HASH字典。
当客户B点击购买的时候Ajax请求调用购买函数,并根据HASH字典(需要加锁同步)验证数量是否足够。

多服务器的话,麻烦一点点(如果做过此类应该也不麻烦),需要同步多台机器的HASH字典

总结下,有以下几种方案可以解决:
1、使用服务器“推”comet的技术
参考文章:http://blog.csdn.net/IBM_hoojo/archive/2010/04/18/5498731.aspx
服务器“推”中长连接
参考文章:http://blog.csdn.net/IBM_hoojo/archive/2010/04/14/5486074.aspx
2、用设备模式长在CS系统中最常用的模式“观察者模式”
需要利用flash、网页嵌入swing程序的Applet等
观察者模式:http://blog.csdn.net/IBM_hoojo/archive/2010/04/18/5498783.aspx
实现观察者模式示例:http://blog.csdn.net/IBM_hoojo/archive/2010/04/18/5498813.aspx
3、就是利用缓存技术Cache,如application等

转载于:http://topic.csdn.net/u/20100414/13/12ff191f-31c5-4758-81d5-066618648916_4.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值