关于电商项目面试遇到的问题

关于电商项目面试遇到的问题:

1、电商项目中有没有用到多线程,哪些地方要用多线程?

2、你项目对于订单是怎么处理的,假如一个客户在下订单的时候没有购买怎么办,对于顾客在购买商品的时候你们怎么处理你们的库存?

3、计算一下133平方是多少?

4、你平时测试的流程?

5、你们数据库怎么设计的?

6、你们怎么处理redis缓存的数据,怎么删除的?

7、你觉得分布式开发的缺点是什么?

8、缓存技术你觉得在什么时候用的比较多?

9、你们怎么管理你们的内存?

10、说说你对于web前端的优化?

11、插入商品的话,要求级联插入几张表,你们当时是怎么实现的?

12、支付接口是怎么做的?

13、redis为什么可以做缓存?

14、当被问到某个模快存在安全性问题(sso单点登录系统)时,如何回答?

15、solr怎么设置搜索结果排名靠前(得分)?

16、activeMQ在项目中如何应用的?

17、activeMQ如果数据提交不成功怎么办?

 

 

 

1、电商项目中有没有用到多线程,哪些地方要用多线程? 
项目中自己写的程序没有用到多线程,通常使用开源框架编写程序,框架中已将多线程进行了封装。


2、你项目对于订单是怎么处理的,假如一个客户在下订单的时候没有购买怎么办,对于顾客在购买商品的时候你们怎么处理你们的库存?

按照我们的理解:

如果客户在下订单的时候没有支付成功,最终订单没有完成,此商品信息还在购物车。

如果未完成的订单在一定的时间内不支付,自动取消。

 

如果管理库存?

 对于库存的管理,我们有专门的团队负责一个进销存系统的来管理库存。
    我们是在用户付款后再调用进销存系统的接口,更改库存。



3、计算一下133平方是多少?
需要详细确定题目意思?


4、你平时测试的流程?
开发过程中自己编写单元测试类对dao、service方法进行测试。

一个模块开发完成我会对模块的业务流程进行测试。

整个系统开发完成我们团队进行集成测试,测试通过后提交给测试人员

系统进行测试阶段,我会协助测试人员进行缺陷修复。

 



5、你们数据库怎么设计的?
先对自己负责模块的需求进行分析,搞清楚业务需求。

定义出一个一个实体(表)

根据分析的业务需求定义表的一个一个字段

分析表与表之间的关系,定义外键。

 


6、你们怎么处理redis缓存的数据,怎么删除的?
redis缓存的数据有一些是常驻缓存的,当数据库中数据有变化时做数据同步。
有一些缓存是设置有效期的,当缓存到期后会自动删除。
删除redis缓存使用del或者hdel命令。

7、你觉得分布式开发的缺点是什么?
    1. 和集中式相比,功能之间的调用使用的是接口调用,而不是直接调用。需要编写稳定有效的API。
    2. 分布式系统之间的通信无法直接通知,需要使用消息机制(MQ)进行通知。
    3. 分布式开发涉及到多个开发团队,开发过程中需要频繁的进行沟通
    4. 分布式开发中测试更加复杂,有效的测试用例可以帮助我们更好的剥离项目逻辑与协调组件系统。而小的集中系统开发甚至可以不使用测试用例。
    5. 集中式系统开发可以使用debug从头到尾进行调试,而分布式层次太深,组件调用太多,使用debug很难整体调试。需要有效使用日志组件,更好的帮助我们找到问题。


8、缓存技术你觉得在什么时候用的比较多?
    不是什么地方都需要使用缓存,符合以下两个条件才需要使用缓存。
    1.  数据访问的频率很高
    2.  数据修改的频率低
    另外在使用缓存的时候,要注意缓存是否有效利用,需要及时清理掉缓存中不常用的数据

9、你们怎么管理你们的库存?
    我们主要是负责商城功能的开发,不直接管理商品库存。
    对于库存的管理,我们有专门的团队负责一个进销存系统的来管理库存
    我们是在用户付款后再调用进销存系统的接口,查询商品的库存数量。如果没有库存,则付款失败并提示用户。

10、说说你对于web前端的优化?

前端是庞大的,包括 HTML、 CSS、 Javascript、Image 、Flash等等各种各样的资源。前端优化是复杂的,针对方方面面的资源都有不同的方式。那么,前端优化的目的是什么 ?
1. 从用户角度而言,优化能够让页面加载得更快、对用户的操作响应得更及时,能够给用户提供更为友好的体验。
2. 从服务商角度而言,优化能够减少页面请求数、或者减小请求所占带宽,能够节省可观的资源。
  总之,恰当的优化不仅能够改善站点的用户体验并且能够节省相当的资源利用。
  前端优化的途径有很多,按粒度大致可以分为两类,第一类是页面级别的优化,例如 HTTP请求数、脚本的无阻塞加载、内联脚本的位置优化等 ;第二类则是代码级别的优化,例如 Javascript中的DOM 操作优化、CSS选择符优化、图片优化以及 HTML结构优化等等。另外,本着提高投入产出比的目的,后文提到的各种优化策略大致按照投入产出比从大到小的顺序排列

11、插入商品的话,要求级联插入几张表,你们当时是怎么实现的?

 此问题主要是考察商品表设计问题:

 电商网站中,商品表设计是电商的核心业务,在电商系统中占有很重要的地位:那么在商品业务系统中,保存商品表,就需要涉及很多相关表保存:

        商品表涉及简单业务流程表:

1)商品分类表

2)分类属性表

3)货品表

4)货品表规格参数

5)商品表

6)品牌表

    商品在保存时基本需要考虑以上几张表的关系,保存商品表必须级联保存商品属性表,同时必须保存货品表以及货品对应的规格参数表,同时必须维护商品对应的商品规格属性表

12、支付接口是怎么做的?

    企业支付可以使用银联进行支付,如果使用银联进行支付,那么需要去申请,填写申请材料,获取银联提供的密钥。

    企业还可以是使用第三方支付进行支付。

    一般支付接口流程都大同小异。下面以支付宝为例: 

    接口开发最重要的应该是理解数据交互流程了,流程弄清了,并理解为何这么设计,开发起来也是事半功倍

   首先,要准备下面几个参数:

   企业支付宝账号的PID(也叫ParnerID)KEY,如果使用RSA签名而不是MD5的话,还要把RSA私钥准备好支付时用户看到的东西:商品名称(subject)、支付总额(total_fee)、购买数量交易后的跳转地址,交易成功后用户可以手工点击,或页面延迟自动跳转到这个地址(return_url)交易状态异步通知地址,交易成功或交易关闭会把消息POST到这个地址(notify_url)

        发起支付流程如下:

  1. 网站按照指定要求,用token和自己的私钥,构造一个重定向得到支付地址(调用支付接口)
  2. 网站把重定向地址返回给浏览器
  3. 浏览器自动重定向到该地址,即包含了token、网站签名的支付宝交易页面
  4. 支付宝显示当前交易金额、数量、卖家等信息
  5. 用户用自己的支付宝账号支付这笔金额
  6. 支付宝把用户支付成功(或失败)这个消息和订单号加上支付宝的签名,使用HTTP POST的方式通知网站(失败的话,会隔段时间重新发送)
  7. 网站处理交易后续逻辑(发货、订单状态存储之类的)
  8. 网站返回"success"字符串给支付宝,表示该通知已经处理,不用再重发
  9. 支付宝显示支付成功页面给用户(这一步和第10步是不分先后发生的)
  10. 支付成功页面延迟自动跳转,或用户点击“返回商户页面”,跳转到网站的支付结束页面(此时不一定成功处理支付宝发来的通知),但会在URL带上当前的订单号和状态。

 

 

13redis为什么可以做缓存?

Redis就是一个高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

第一次发送请求时,从RDBMS中获取数据并返回,同时将该数据保存分布式缓存系统中;当用户再次发送请求时直接从缓存中获取,提高性能。

 

 

14、当被问到某个模快存在安全性问题(sso单点登录系统)时,如何回答?

1、票据ticket超时

2、登录一次,所有授权的应用系统都可以访问,可能导致一些信息泄露。

3、通过cookie维护的票据ticket应该加密

4、防止cookie被伪造或者被窃取

 

15solr怎么设置搜索结果排名靠前(得分)?

1、配置solr的solrconfig.xml中edismax,来改变Boost打分规则

2、或者在solr的schema中增加一个字段,该字段专门用于排序



16、activeMQ在项目中如何应用的?
答:
如何应用:activemq作为消息中间件,首先需要对activemq进行安装;其次要根据需求,分析消息的生产者和发布者;最后发送消息时,需要添加异常处理机制。
应用场景:activemq在电商项目中的应用场景比较广泛,比如索引同步、详情页静态化、商品上下架申请、调价申请、订单状态已支付后需要通知库房发货等。


17、activeMQ如果数据提交不成功怎么办?
答:该问题比较模糊,具体activemq的问题如下:
1、消费者接收消息不成功,怎么办?
对于activemq来说,如果消息生产者没有把消息发送到mq中的broker里面,则消息不会重新发送。
如果消息生产者已经把消息发送到mq中的broker里面,但是消息的消费者没有应答(可能没有接收到,也可能是接收到之后,处理业务逻辑时出现异常)。此时activemq会默认最多重发6次消息,如果依然没有接收到消息,那么该消息会进入DLQ(Dead Letter Queue死信队列)。

2、消息接收成功,但是处理出现异常,或者没有应答怎么办?
在程序中捕获异常,将消息重新放入MQ,由其它消费方再次处理。

你可能感兴趣的:(面试)