2021最新面试题-电商项目
电商项目面试题
你们网站的并发量是多少?
经过压力测试,现在大概是三四千左右,可以满足目前的业务需求。分布式架构可以水平扩展嘛,如果并发量提高,可以增加服务器来提高并发量
你们这个项目的人员配置是怎样的?
产品经理有一个,确定需求和给出产品原型图。
项目经理一个,负责项目管理。
前端团队,有五个人。
后端有十五个人。
测试五个人。
运维有三个人。
SKU和SPU
sku 商品的库存量单位 , 代表商品的规格和属性
spu 产品单位最小分割的商品 ,与商家无关 它的属性会影响价格。
SPU是标准化产品单元,区分品种;SKU是库存量单位,区分单品;商品特指与商家有关的商品,可对应多个SKU。
你说你用了redis缓存,你redis存的是什么格式的数据,是怎么存的
redis中存储的都是key-value格式的。拿商品数据来说,key就是商品id,value是商品相关信息的json数据。
单点登录模块
单点登录模块中,别人伪造我们cookie中的token怎么办
服务端是无法阻止伪造token的,如果对安全性要求高就使用cas框架
同一账号以客户端登录怎么挤掉另一端。
用户登录后需要在Session中保存用户的id。当用户登录时,从当前所有的Session中判断是否有此用户id的存在,如果存在的话就把保存此用户id的Session销毁。
登录思路
用户通过sso登录系统登录, sso登录系统将登录信息放入redis缓存中(键值对形式),并将key返回给用户,保存在cookie中,因为session有时效问题,一会就会清除了,用户下一次访问其他系统时就会自动带上这个cookie,然后系统去sso系统中去验证凭证的有效性实现单点登录
描述实现用户安全退出的思路
用户退出通过token(key)删除redis数据库中的数据
购物车模块
首先根据页面传来的id判断用户是否登录,没有登录的时候,把购物车的信息存进cookie,并不对数据库进行操作,但是这样做有个弊端就是只能存5kb。用户登录的时候,把数据缓存到redis中,redis是可以做持久化的永久保存的。登陆后将购物车列表的商品提交生成订单后,再清楚购物车中的数据
订单模块
1、创建订单(请求参数:HttpSession session,Integer shippingId)--难点
a、获取session中当前登陆用户
b、通过用户id查询购物车,从购物车获取数据
c、计算出订单的总价(获得总价)
d、生成订单
e、将订单批量插入到数据库
f、减少我们的产品库存
g、清空购物车
2、取消订单(请求参数:HttpSession session,Long orderNo)
a、获取session中当前登陆用户
b、通过用户id和订单id查询订单
c、新建一个订单,设置订单id和订单的状态
d、然后更新订单(主要就是更改订单的状态,变成取消)
3、获取购物车选择的商品(请求参数:HttpSession session)
a、获取session中当前登陆用户
b、通过用户id从购物车获取数据
保证支付接口的幂等性
在用户支付时,首先根据订单号去查询订单状态。
redis为什么可以做缓存?项目中使用redis的目的是什么?redis什么时候使用?
1.Redis是key-value形式的nosql数据库。可以快速的定位到所查找的key,并把其中的value取出来。并且redis的所有的数据都是放到内存中,存取的速度非常快,一般都是用来做缓存使用。
2.项目中使用redis一般都是作为缓存来使用的,缓存的目的就是为了减轻数据库的压力提高存取的效率。
3.在互联网项目中只要是涉及高并发或者是存在大量读数据的情况下都可以使用redis作为缓存。当然redis提供丰富的数据类型,除了缓存还可以根据实际的业务场景来决定redis的作用。例如使用redis保存用户的购物车信息、生成订单号、访问量计数器、任务队列、排行榜等。
acitveMQ的作用、原理?(生产者。消费者。 p2p、订阅实现流程)
Activemq的作用就是系统之间进行通信。当然可以使用其他方式进行系统间通信,如果使用Activemq的话可以对系统之间的调用进行解耦,实现系统间的异步通信。原理就是生产者生产消息,把消息发送给activemq。Activemq接收到消息,然后查看有多少个消费者,然后把消息转发给消费者,此过程中生产者无需参与。消费者接收到消息后做相应的处理和生产者没有任何关系。
activeMQ在项目中如何应用的?
Activemq在项目中主要是完成系统之间通信,并且将系统之间的调用进行解耦。例如在添加、修改商品信息后,需要将商品信息同步到索引库、同步缓存中的数据以及生成静态页面一系列操作。在此场景下就可以使用activemq。一旦后台对商品信息进行修改后,就向activemq发送一条消息,然后通过activemq将消息发送给消息的消费端,消费端接收到消息可以进行相应的业务处理。
activeMQ如果数据提交不成功怎么办?
Activemq有两种通信方式,点到点形式和发布订阅模式。如果是点到点模式的话,如果消息发送不成功此消息默认会保存到activemq服务端知道有消费者将其消费,所以此时消息是不会丢失的。
如果是发布订阅模式的通信方式,默认情况下只通知一次,如果接收不到此消息就没有了。这种场景只适用于对消息送达率要求不高的情况。如果要求消息必须送达不可以丢失的话,需要配置持久订阅。每个订阅端定义一个id,在订阅是向activemq注册。发布消息和接收消息时需要配置发送模式为持久化。此时如果客户端接收不到消息,消息会持久化到服务端,直到客户端正常接收后为止。
分布式事务解决方案
1、首先在订单库中建一张消息表
2、生成订单插入到订单表中,同时在消息表中插入一条消息,消息的状态为待发送
3、第二部处理成功了之后,发送消息到mq(投递消息),投递成功更新消息状态为已发送
4、库存服务到mq中消费这条消息
5、消费成功之后更新订单的状态
问题:
1、业务处理成功之后,不能保证一定能投递到mq中
有轮询任务来轮询消息表,根据消息到本地库中验证
2、投递到mq中之后,未收到ack(同第一问题)
3、消费方
如果最终库实在是出问题,不能保证一致,记录日志,报警,人工介入
浙公网安备 33010602011771号