一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 978|回复: 6
收起左侧

[系统设计/OOD] 求问LinkedIn设计题:设计Amazon Product Page

[复制链接] |试试Instant~ |关注本帖
icynell@hotmail 发表于 2016-2-4 14:36:06 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
想请教论坛里经常看到的这道高频题:
设计Amazon Product Page, 在SQL里面一个产品有多个图片多个价格的话怎么设计数据库。后台提取数值render到页面上得时候,class怎么设计,服务器怎么安排,另外怎么考虑suggest product。
搜了一下没有找到相关的链接,所以请教大家有什么idea, 该从哪里入手,或者有什么推荐的blog可以看。
非常感谢!!!
staycrazy 发表于 2016-2-4 14:57:16 | 显示全部楼层
本帖最后由 staycrazy 于 2016-2-4 15:12 编辑

为什么要定死是SQL。。。其实column based是更合适的数据库。

Amazon有一个概念叫ASIN,http://www.amazon.com/gp/seller/asin-upc-isbn-info.html Amazon Standard Identification Number

无论是你用SQL还是HBase,对应这个产品这个detail page的asin是你设计的这个table的primary key。

然后因为有不同颜色的variation,这个table有一列应该是指明该asin是否是parent asin:http://docs.aws.amazon.com/AWSECommerceService/latest/DG/VariationParent.html

Parent asin的price之类的column都可以缺失。

然后它对应的variation是一个map,以各种不同的configuration对应不同的子asin。

子asin也同样是这个表中的条目,但是它们有price,可以被purchase。

设计class主要是围绕着ProductItem来,就不细说了。

要有一个默认的子asin,而每个asin有对应的一系列图片url,这样你切换颜色的时候就可以切换一系列图片。
这里比较tricky的地方是当有多个变化维度的时候(比如说color和size),如何去让上面的设计adapt这个新的需求(先卖个关子。。提示:多重parent asin可以解决这个问题,或者要改schema

suggest product属于recommendation system的内容,基本上做个简单的只要搞聚类就行了。后端处理推荐的时候主要是offline,因为这玩意实时性要求不高。

评分

1

查看全部评分

回复 支持 2 反对 0

使用道具 举报

 楼主| icynell@hotmail 发表于 2016-2-4 15:36:50 | 显示全部楼层
staycrazy 发表于 2016-2-4 14:57
为什么要定死是SQL。。。其实column based是更合适的数据库。

Amazon有一个概念叫ASIN,http://www.amaz ...

学习了,非常感谢~!!! 这个问题是地里发的面经,我想面试官大概并不是想看面试者是不是actually了解amazon的架构,而是给出购物平台/网站这样的一个scenario,想让设计database schema以及前后台怎么更高效地交互。
我自己本身并没有在实际工作中整体设计system或者database的机会,我在准备这道题的时候自己列了一下需要的table,按照relational db的一些原则设计的,你说得很对在一些特定的query条件下nosql应该更合适,尤其当涉及到要经常join很多table的时候mysql比较就昂贵。之前没有想到引入parent的设计,看了你的回复非常受启发,这点确实是不是relational都可以用,应该可以improve一下。非常感谢。

对于后台提取数值render到前端怎么class这个问题我其实不太明白考点在哪里,我本身做过rest server,用的是Django,Python里并没有太对这这部分的讲究,拿出数据以后serialize成json就返回了,所以不知道是不是自己对这个问题理解错了,还是在别的OO语言下这是个值得考虑的问题。还想麻烦你指点下啦。

谢谢谢谢。
回复 支持 反对

使用道具 举报

staycrazy 发表于 2016-2-5 00:17:04 | 显示全部楼层
本帖最后由 staycrazy 于 2016-2-5 00:21 编辑
icynell@hotmail 发表于 2016-2-4 15:36
学习了,非常感谢~!!! 这个问题是地里发的面经,我想面试官大概并不是想看面试者是不是actually了解am ...

这个就从用户交互往回推吧。。你的想法基本是对的

因为是一个物品的detail page,所以说在更换颜色或者大小的时候,最好用ajax来取得新setting的信息,这就要求我们要有一个办法把db里面的数据转成json

(但是我们为了降低latency不可能每一次都ajax——第一次render的时候,假设我们用的是Spring框架,那么jsp里面的数据是dispacth的时候已经填好的,还有为了兼容不支持javascript的browser也不能只支持ajax——这也就应和了第一次render不用ajax的要求。。)

这里有一个考虑就是我们要不要在web app这一层引入一个对象映射,还是说直接把数据库里面的内容映射成map或者json。我个人偏好是应该还是要有一个DAO。否则的话我们在web app层会引入一些维护问题——如果我们用的是no sql,schema definition就无处可寻了。当然如果你用relational,基本是hibernate orm那一套,这个就不用担心了。

所以流程大概就是,第一次load的时候从db读出一个item,然后render到template上(jsp/ejs/...),发回给用户。

用户改变产品颜色,javascript代码发一个ajax请求给服务端,服务端读出对应的product,序列化成json然后发还给browser。javascript处理json然后用无论什么奇特的方法(jQuery)去改变页面内容。

如果browser不支持javascript,则直接加url参数load新页面。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

jerrytjz 发表于 2016-2-6 13:52:28 | 显示全部楼层
请问,LZ面什么样的职位会出这样的设计图?是system&Infr类的职位吗?
回复 支持 反对

使用道具 举报

 楼主| icynell@hotmail 发表于 2016-2-6 15:14:51 | 显示全部楼层
staycrazy 发表于 2016-2-5 00:17
这个就从用户交互往回推吧。。你的想法基本是对的

因为是一个物品的detail page,所以说在更换颜色或 ...

太感谢了 非常受用~ 谢谢~
回复 支持 反对

使用道具 举报

 楼主| icynell@hotmail 发表于 2016-2-6 15:17:21 | 显示全部楼层
jerrytjz 发表于 2016-2-6 13:52
请问,LZ面什么样的职位会出这样的设计图?是system&Infr类的职位吗?

不是 正常general的职位,application的组。 mobile或者data的组不知道 application的话会有一轮design, infra的是两到三轮design。可能有难度区分。
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-3 14:55

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表