首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

【技术“瓶颈”】电信分公司-华讯面试题,探讨下解题思想解决方法

2012-02-27 
【技术“瓶颈”】电信分公司-华讯面试题,探讨下解题思想CSS code一个月前在广州华讯公司(电信分公司)的一道面

【技术“瓶颈”】电信分公司-华讯面试题,探讨下解题思想

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


[解决办法]

[解决办法]
存服务器session中?
[解决办法]
A操作时,存服务器SESSION中
SESSION随A的操作init和destroy

用filter在B操作前拦截

可能session不够大
[解决办法]
spring aop 好像也有可以做什么preConstruct****这个方法的处理吧?
[解决办法]
ajax做动态页面修改,B提交时和数据库数量进行比较
[解决办法]
线程问题。实现序列化
[解决办法]
用Ajax做,在购买前去数据库查现有值,大于购买值的话直接提交,否则的话提示并刷新现有值。
[解决办法]
用js定时器呢?
[解决办法]
我的思路如下:
html长连接.对每一个打开商品的用户给予一个长连接.当客户A购买商品7件成功后,立刻通过长连接给予用户B或用户C......的显示商品数量为3或其它提示.通过长连接可以准时准确的给予提示.当用户关闭商品查阅页长连接也会断开.
长连接解决此问题的优点:及时有效.避免了对数据库操作,避免了用户B操作后才告知商品的剩余数量
缺点:长连接的web和应用服务器性能不稳定.不过可以参考FLASH的通讯协议.


[解决办法]
一件物品一个定时器。
那样估计你的浏览器都会要挂了吧。。


[解决办法]
采用观察者模式,当值发生变化时,及时通知各个操作该数据的用户!
[解决办法]
页面定时发送请求
设置一个刷新时间来修改页面中的某些数据
[解决办法]
我觉得14楼的意见可以
[解决办法]
因为HTTP是无状态的,所以目前大部分采用的非HTTP协议。可以用UDP或其它。
长连接也可以用
[解决办法]
长连接需要用到activeX空间吧,要不就要用到applet,不过applete已经用的不多了,而且要做签名
[解决办法]
来长长见识
[解决办法]
探讨

因为HTTP是无状态的,所以目前大部分采用的非HTTP协议。可以用UDP或其它。
长连接也可以用

[解决办法]
线程问题。实现序列化
[解决办法]
可以采用服务器推技术,当A客户购买商品以后,服务器主动将更新后的商品数量推到其他客户上
具体使用方式查看:
http://www.ibm.com/developerworks/cn/web/wa-lo-comet/
[解决办法]
在现实中,电子商务网站应该很少有这样的要求,因为如果网站流量大的话,有很多人浏览这件商品,而要做到商品剩余数量的动态现实,一般是通过ajax来实现,这样做会加重服务器的负担,所以这样的讨论实际意义并不是很大!还是通过数据库来完成是最好!
[解决办法]
长连接思路不错。
[解决办法]
学习了,听起来观察者模式挺好的,只是不知道如何实现呢?
[解决办法]
了解 了解 ,看看 长连接
------解决方案--------------------


单服务器的话,建立一个被锁定商品数量的全局静态HASH字典。
当客户B点击购买的时候Ajax请求调用购买函数,并根据HASH字典(需要加锁同步)验证数量是否足够。

多服务器的话,麻烦一点点(如果做过此类应该也不麻烦),需要同步多台机器的HASH字典。
[解决办法]
学习了... ...

探讨

可以采用服务器推技术,当A客户购买商品以后,服务器主动将更新后的商品数量推到其他客户上
具体使用方式查看:
http://www.ibm.com/developerworks/cn/web/wa-lo-comet/

[解决办法]
貌似taobao上也会遇到类似的问题,不过看起来他们应该是如果客户确定了购买意向,

会切换到下一个页面输入购买的数量,然后再切换到下一个页面准备付款。

我想在输入购买数量之后,就可以counter
[解决办法]
顶14楼
[解决办法]
对啦
我常常看到有些软件的下载页面
http://www.maxthon.cn/
会动态显示软件的下载数量
如果不是用Ajax刷新的 那应该就是楼主想要的把
[解决办法]
如果需要实时显示的话,对于浏览器与HTTP协议,只有长连接与定时ajax请求两种办法,服务器压力会很大。
可以考虑支持socket操作的浏览器插件,如flash、银光、.net客户端、java客户端等...,这个需要客户端支持。
[解决办法]
个人感觉还是用访问数据库确定剩余件数是不是大于需求件数,如果小于就提示错误,再显示新的件数就行了。用Ajax更新是很不现实的,先不谈能不能实现,就算能实现也不可行。如果库存10000件,现在有100个客户在购买,是不是一个人购买另外99个人的画面跟着变?如果人数再多点呢?这样不是顾客的画面那个数字一直变?还有就是对服务器造成的负载量也太大了。
[解决办法]
我们公司里面是这样操作的..

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

如果有更好的,我也希望学习学习..
[解决办法]
说一下,我们公司不是BS架构的..用自己整合的Swing.然后用到的是EJB..
[解决办法]
对于访问量较大的互联网程序用长连接做服务器推是很不靠谱的,为了这个屁大点的
功能,需要耗费大量的服务器资源,以为WEB无服务器能够管理的长连接个数是有限的
也就几百个。
对于这样的需求可以从两个方面来做,第一在现实页面用Ajax定期刷新。第二当
客户购买的时候输入购买数量,提交的时候检查库存是否够。能做到这两点我认为就
够了,互联网程的特点本身就决定了这个问题不可能有太好的解决办法,也没有必要。
现实生活中这种并发问题也常有
[解决办法]
思路如下:
html长连接.对每一个打开商品的用户给予一个长连接.当客户A购买商品7件成功后,立刻通过长连接给予用户B或用户C......的显示商品数量为3或其它提示.通过长连接可以准时准确的给予提示.当用户关闭商品查阅页长连接也会断开.
长连接解决此问题的优点:及时有效.避免了对数据库操作,避免了用户B操作后才告知商品的剩余数量
缺点:长连接的web和应用服务器性能不稳定.不过可以参考FLASH的通讯协议.
[解决办法]
操作时,存服务器SESSION中
SESSION随A的操作init和destroy

用filter在B操作前拦截

可能session不够大 
 

[解决办法]
学习中、、、、、、、、、、、、、觉得没必要为这个小功能浪费服务器的资源
[解决办法]
Java code
设计模式之Observer
[解决办法]
A购买商品的同时数据库商品的数量不就级联更新了么 显示B用户的应该是更新后的数据
[解决办法]
同步更新的问题
[解决办法]
服务器推技术 比较 赞同
[解决办法]
通过线程来解决
[解决办法]
应该放在application中,数据共享
但是这样会带来线程安全的问题,只有同步那块代码
但是又会降低效率,
这是一把双刃剑,没有最好的做法,只有更好的做法,要看具体的情况

这是个购物平台,我觉得安全是最重要的
[解决办法]
探讨
应该放在application中,数据共享


但是这样会带来线程安全的问题,只有同步那块代码
但是又会降低效率,
这是一把双刃剑,没有最好的做法,只有更好的做法,要看具体的情况

这是个购物平台,我觉得安全是最重要的


[解决办法]

请问用什么办法让客户B知道商品的数量已经发生了变化,只有3件???
答:应该是这样,在结账的时候和数据库 的存货量进行比较,如果库存有这么多,结账.

没有,则弹出提示告诉客户只有 3件,我目前的购物车就是这样做的。



[解决办法]
学习,学习,我觉得还是观察者模式比较好的,不会浪费太多服务器资源,现在来说服务器的性能还是最重要的,服务器的性能不行,服务就跟不上!
[解决办法]
前面有个大虾说要建立长连接,我认为是不可取的,那样的话服务器的负担大大加重,http协议的好处就是建立短连接,这样可以使服务器保持轻载,所有http协议被广泛应用
[解决办法]
需要在服务器建立一个缓存数据来处理这种事。
[解决办法]
探讨
引用:
他强调不访问数据库 可无论如何总得有一个地方去保存数据 然后其他的地方定时去取就行 肯定是这个样子的 不过具体用什么方式 ...恩..

这里强调的是在不查询数据库的前提下,让其他用户也知道商品数量发生了变化。
数据保存当然是在客户A时发生的,在此之后怎么做让其他用户的页面的商品件数发生变化。
如:客户B购买时查询数据库、在数据库中锁定当前数据

[解决办法]
顶这么高了.
LZ可以看一下openFire(开源的).可以支持上万的并发.采用的方式就是长连接.
但是走的不是HTTP协议.
[解决办法]
探讨
对于访问量较大的互联网程序用长连接做服务器推是很不靠谱的,为了这个屁大点的
功能,需要耗费大量的服务器资源,以为WEB无服务器能够管理的长连接个数是有限的
也就几百个。
对于这样的需求可以从两个方面来做,第一在现实页面用Ajax定期刷新。第二当
客户购买的时候输入购买数量,提交的时候检查库存是否够。能做到这两点我认为就
够了,互联网程的特点本身就决定了这个问题不可能有太好的解决办法,……

热点排行