javaweb面试总结(二、电商项目)

版权声明: https://blog.csdn.net/bird73/article/details/79837314

电商架构:https://blog.csdn.net/yangbutao/article/details/12242441

九个模块:https://blog.csdn.net/belvine/article/details/79400813

电商类目:https://blog.csdn.net/qq_33620483/article/details/78265969

电商后台:https://blog.csdn.net/qq_33620483/article/details/78266088

redis主从:https://blog.csdn.net/qq_33620483/article/details/78188673

表设计:https://blog.csdn.net/chaunceyw/article/details/78249954

电商介绍:https://blog.csdn.net/lihang_1994/article/details/74620538



1. 订单号如何生成?


时间+序号方式



2. redis崩溃怎么办?


可以搭建redis集群;




3. 抢购如何解决高并发?


使用消息队列,如:下订单人数过多,异步通过消息队列进行订单支付,之后完成后返回到订单详情页面,点击“我已支付”,然后进行支付状态查询;
支付的异步处理请求;
1. (异步处理请求)后台获取用户请求,将请求信息存储到消息队列中,然后弹出支付确认框,包含“支付成功”,“支付异常” 信息给前台页面;消费方获取数据,然后慢慢处理结果;
2. (限制请求次数)访问并发较大时,可以限制用户的请求时间,比如每个用户1分钟内只能请求一次,将每个用户请求信息存入redis中,然后设置1分钟有效时长即可;避免反复点击;
3. (秒杀可以关闭接口)库存为0,或者超出秒杀时间,可以关闭接口;人为关闭,或者使用系统时间作限制;
4. (放入消息队列的数据不能过多),如果当前请求人数过多,不能全部放入消息队列,则适当关闭请求的接口;
5. (cdn页面加速)此方法可以将静态资源缓存道比较进的区域服务器中;





4. 高并发与多线程分别是什么?
高并发 ≠ 多线程


方式:多线程 - 同一时刻利用计算机闲置资源的一种方式 ; 多线程在这里只是在同/异步角度上解决高并发问题的其中的一个方法手段;


状态:高并发 - 短时间内遇到大量操作请求,严重消耗服务器资源;严重则OOM异常(java.lang.OutOfMemoryError)
https://blog.csdn.net/qq_33450379/article/details/53731318


如果要想系统能够适应高并发状态,则需要从各个方面进行系统优化,包括,硬件、网络、系统架构、开发语言的选取、数据结构的运用、算法优化、数据库优化……而多线程只是其中解决方法之一。






5. 如何避免多次重复提交订单?


进入订单确认页面前通过redis计数器生成一个唯一code(UUID),


点击确认生成订单后,后台获取此code值存入redis中,并设置expire为60秒;


后台并生成订单编号,然后返回给前台;


每次提交订单请求前,都需要判断此值是否存在,如果存在,则说明1分钟内重复提交过了,不予处理;

否则可以提交,订单生成结束,页面循环查询订单生成变化,如果成功,则跳转页面;


 
6. 何时变更数据库商品库存?


生成订单成功,则修改库存;




7. 如何保证库存不被超额售卖?

非抢购或秒杀情况,每次修改数据库库存,不会出现此问题;




8. 抢购或者秒杀如何避免超卖?


抢购可以利用redis原子性,维护库存信息;如果库存数量为0,则关闭此接口;


提高系统性能可以使用cdn网络加速。

避免重复抢购,同样在每个抢购页面生成唯一code,避免重复提交;


抢购发送请求后,生成订单号,直接返回“正在抢购,请稍后...”与订单号




?抢购时,订单号如何生成 ?
redis.incr 递增
  redis.decr 递减

抢购提交商品id,userID,然后放入activeMQ中,等待消费端监听数据并生成订单;


后台根据抢购先后顺序生成订单;


?activeMQ 阻塞了怎么办 ?
参考:https://blog.csdn.net/sinat_27371767/article/details/45026231
在项目使用activemq时,客户端发送消息而没有得到回复(在不考虑消费者是什么问题的情况下),导致持久化消息不断积压而得不到释放,最后造成队列堵塞而。。。
可以在配置文件中配置消息的过期时间和死信处理来防止消息的积压;


此时前台页面通过返回的订单号,使用ajax每10秒发送一次请求,查询抢购结果,并进行处理!


订单生成之后,修改redis中的库存信息;


9. ActiveMQ高并发处理方案
https://wenku.baidu.com/view/9d06e557c1c708a1284a44e5.html


10. jvm调优
JVM调优,是以server模式还是以clien模式运行,如何设置Heap、Stack、Eden的大小,如何选择GC策略,控制Full GC的频率等;


11. 常见的oom异常
https://blog.csdn.net/qq_33450379/article/details/53731318




12. 货到付款流程如何处理


创建货到付款运单,标记应收费用,生成发货记录表;
货物签收,物流公司收款;
每周或每月由会计核算运单信息以及金额;
货到付款订单,每天同步运单状态;



13. 支付过程中用到的表与字段
订单表(支付状态)
收货地址表
订单详情表
支付记录表(,支付人id,支付人昵称,支付人头像,支付类型,订单id,支付状态,支付时间) -- 生成订单后继续支付 --如果取消支付或者更换支付方式 ,支付完成后修改订单状态

订单中商户id 交易单号 订单号 订单状态  收款方式  付款方昵称


 
14. 在线客服怎么做到?

       购买第三方服务


阅读更多

没有更多推荐了,返回首页