查看: 5246| 回复: 6
跳转到指定楼层
上一主题 下一主题
收起左侧

[题目讨论] 求问LinkedIn设计题:设计Amazon Product Page

全局:

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

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
想请教论坛里经常看到的这道高频题:
设计Amazon Product Page, 在SQL里面一个产品有多个图片多个价格的话怎么设计数据库。后台提取数值render到页面上得时候,class怎么设计,服务器怎么安排,另外怎么考虑suggest product。
搜了一下没有找到相关的链接,所以请教大家有什么idea, 该从哪里入手,或者有什么推荐的blog可以看。
非常感谢!!!

评分

参与人数 1大米 +1 收起 理由
roufoo + 1 很有用的信息!

查看全部评分


上一篇:关于所谓的System Design,我说点个人意见吧
下一篇:面试官教你破解系统设计题
推荐
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大米 +5 收起 理由
ryb + 5 回答的很好!

查看全部评分

回复

使用道具 举报

推荐
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大米 +3 收起 理由
icynell@hotmail + 3 回答的很好!

查看全部评分

回复

使用道具 举报

🔗
 楼主| 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语言下这是个值得考虑的问题。还想麻烦你指点下啦。

谢谢谢谢。
回复

使用道具 举报

🔗
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。可能有难度区分。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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