史上最全,电商项目测试+常遇面试题回答(详细十一)
电商项目中有没有用到多线程,哪些地方要用多线程?项目中自己写的程序没有用到多线程,通常使用开源框架编写程序,框架中已将多线程进行了封装。你项目对于订单是怎么处理的,假如一个客户在下订单的时候没有购买怎么办,对于顾客在购买商品的时候你们怎么处理你们的库存?按照我们的理解:如果客户在下订单的时候没有支付成功,最终订单没有完成,此商品信息还在购物车。如果未完成的订单在一定的时间内不支付,自动取消。如果管
目录:导读
前言
电商项目中有没有用到多线程,哪些地方要用多线程?
项目中自己写的程序没有用到多线程,通常使用开源框架编写程序,框架中已将多线程进行了封装。
你项目对于订单是怎么处理的,假如一个客户在下订单的时候没有购买怎么办,对于顾客在购买商品的时候你们怎么处理你们的库存?
按照我们的理解:
如果客户在下订单的时候没有支付成功,最终订单没有完成,此商品信息还在购物车。
如果未完成的订单在一定的时间内不支付,自动取消。
如果管理库存?
对于库存的管理,我们有专门的团队负责一个进销存系统的来管理库存。
我们是在用户付款后再调用进销存系统的接口,更改库存。
你平时测试的流程?
开发过程中自己编写单元测试类对dao、service方法进行测试。
一个模块开发完成我会对模块的业务流程进行测试。
整个系统开发完成我们团队进行集成测试,测试通过后提交给测试人员
系统进行测试阶段,我会协助测试人员进行缺陷修复。
你们数据库怎么设计的?
先对自己负责模块的需求进行分析,搞清楚业务需求。
定义出一个一个实体(表)
根据分析的业务需求定义表的一个一个字段
分析表与表之间的关系,定义外键。
你们怎么处理redis缓存的数据,怎么删除的?
redis缓存的数据有一些是常驻缓存的,当数据库中数据有变化时做数据同步。
有一些缓存是设置有效期的,当缓存到期后会自动删除。
删除redis缓存使用del或者hdel命令。
你觉得分布式开发的缺点是什么?
1)和集中式相比,功能之间的调用使用的是接口调用,而不是直接调用。需要编写稳定有效的API。
2)分布式系统之间的通信无法直接通知,需要使用消息机制(MQ)进行通知。
3)分布式开发涉及到多个开发团队,开发过程中需要频繁的进行沟通
4)分布式开发中测试更加复杂,有效的测试用例可以帮助我们更好的剥离项目逻辑与协调组件系统。而小的集中系统开发甚至可以不使用测试用例。
5)集中式系统开发可以使用debug从头到尾进行调试,而分布式层次太深,组件调用太多,使用debug很难整体调试。需要有效使用日志组件,更好的帮助我们找到问题。
你们怎么管理你们的库存?
我们主要是负责商城功能的开发,不直接管理商品库存。
对于库存的管理,我们有专门的团队负责一个进销存系统的来管理库存
我们是在用户付款后再调用进销存系统的接口,查询商品的库存数量。如果没有库存,则付款失败并提示用户。
说说你对于web前端的优化?
前端是庞大的,包括 HTML、 CSS、 Javascript、Image 、Flash等等各种各样的资源。前端优化是复杂的,针对方方面面的资源都有不同的方式。那么,前端优化的目的是什么 ?
1)从用户角度而言,优化能够让页面加载得更快、对用户的操作响应得更及时,能够给用户提供更为友好的体验。
2)从服务商角度而言,优化能够减少页面请求数、或者减小请求所占带宽,能够节省可观的资源。
总之,恰当的优化不仅能够改善站点的用户体验并且能够节省相当的资源利用。
前端优化的途径有很多,按粒度大致可以分为两类,第一类是页面级别的优化,例如 HTTP请求数、脚本的无阻塞加载、内联脚本的位置优化等;
第二类则是代码级别的优化,例如 Javascript中的DOM 操作优化、CSS选择符优化、图片优化以及 HTML结构优化等等。另外,本着提高投入产出比的目的,后文提到的各种优化策略大致按照投入产出比从大到小的顺序排列
插入商品的话,要求级联插入几张表,你们当时是怎么实现的?
此问题主要是考察商品表设计问题:
电商网站中,商品表设计是电商的核心业务,在电商系统中占有很重要的地位:那么在商品业务系统中,保存商品表,就需要涉及很多相关表保存:
商品表涉及简单业务流程表:
1)商品分类表
2)分类属性表
3)货品表
4)货品表规格参数
5)商品表
6)品牌表
商品在保存时基本需要考虑以上几张表的关系,保存商品表必须级联保存商品属性表,同时必须保存货品表以及货品对应的规格参数表,同时必须维护商品对应的商品规格属性表
支付接口是怎么做的?
企业支付可以使用银联进行支付,如果使用银联进行支付,那么需要去申请,填写申请材料,获取银联提供的密钥。
企业还可以是使用第三方支付进行支付。
一般支付接口流程都大同小异。下面以支付宝为例:
接口开发最重要的应该是理解数据交互流程了,流程弄清了,并理解为何这么设计,开发起来也是事半功倍
首先,要准备下面几个参数:
企业支付宝账号的PID(也叫ParnerID)和KEY,如果使用RSA签名而不是MD5的话,还要把RSA私钥准备好支付时用户看到的东西:商品名称(subject)、支付总额(total_fee)、购买数量交易后的跳转地址,交易成功后用户可以手工点击,或页面延迟自动跳转到这个地址(return_url)交易状态异步通知地址,交易成功或交易关闭会把消息POST到这个地址(notify_url)
发起支付流程如下:
网站按照指定要求,用token和自己的私钥,构造一个重定向得到支付地址(调用支付接口)
网站把重定向地址返回给浏览器
浏览器自动重定向到该地址,即包含了token、网站签名的支付宝交易页面
支付宝显示当前交易金额、数量、卖家等信息
用户用自己的支付宝账号支付这笔金额
支付宝把用户支付成功(或失败)这个消息和订单号加上支付宝的签名,使用HTTP POST的方式通知网站(失败的话,会隔段时间重新发送)
网站处理交易后续逻辑(发货、订单状态存储之类的)
网站返回"success"字符串给支付宝,表示该通知已经处理,不用再重发
支付宝显示支付成功页面给用户(这一步和第10步是不分先后发生的)
支付成功页面延迟自动跳转,或用户点击“返回商户页面”,跳转到网站的支付结束页面(此时不一定成功处理支付宝发来的通知),但会在URL带上当前的订单号和状态。
当被问到某个模快存在安全性问题(sso单点登录系统)时,如何回答?
1)票据ticket超时
2)登录一次,所有授权的应用系统都可以访问,可能导致一些信息泄露。
3)通过cookie维护的票据ticket应该加密
4)防止cookie被伪造或者被窃取
什么是数据库分片?
简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库上面,以达到分散单台设备负载的效果。
数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。
1)一种是按照不同的表来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直切分
2)另外一种则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库上面,这种切分称之为数据的水平切分。
如何实现数据库分片:
当数据库分片后,数据由一个数据库分散到多个数据库中。此时系统要查询时需要切换不同的数据库进行查询,那么系统如何知道要查询的数据在哪个数据库中?当添加一条记录时要向哪个数据库中插入呢?这些问题处理起来都是非常的麻烦。
这种情况下可以使用一个数据库中间件mycat来解决相关的问题。
什么是Mycat?
简单的说,MyCAT就是:一个新颖的数据库中间件产品,支持mysql集群,提供高可用性数据分片集群。你可以像使用mysql一样使用mycat。对于开发人员来说根本感觉不到mycat的存在。
Mycat读写分离
数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能。对于MySQL来说,标准的读写分离是主从模式,一个写节点Master后面跟着多个读节点,读节点的数量取决于系统的压力,通常是1-3个读节点的配置
单点登录系统
主要解决的是Session共享的问题。
1、使用redis管理Session。
1)key:token
2)value:用户信息
3)可以需要设置有效期。
4)需要把token保存到cookie中。
购物车
未登录:使用cookie保存购物车数据
登录后:把购物车数据保存到redis。
购物车合并,应该以服务端的购物车为准。
电商活动倒计时方案:
1)确定一个基准时间。可以使用一个sql语句从数据库中取出一个当前时间。SELECT NOW();
2)活动开始的时间是固定的。
3)使用活动开始时间-基准时间可以计算出一个秒为单位的数值。
4)在redis中设置一个key(活动开始标识)。设置key的过期时间为第三步计算出来的时间。
5)展示页面的时候取出key的有效时间。Ttl命令。使用js倒计时。
6)一旦活动开始的key失效,说明活动开始。
7)需要在活动的逻辑中,先判断活动是否开始。
秒杀方案:
1)把商品的数量放到redis中。
2)秒杀时使用decr命令对商品数量减一。如果不是负数说明抢到。
3)一旦返回数值变为0说明商品已售完。
dubbo服务开发流程,运行流程?zookeeper注册中心的作用?
使用流程:
第一步:要在系统中使用dubbo应该先搭建一个注册中心,一般推荐使用zookeeper。
第二步:有了注册中心然后是发布服务,发布服务需要使用spring容器和dubbo标签来发布服务。并且发布服务时需要指定注册中心的位置。
第三步:服务发布之后就是调用服务。一般调用服务也是使用spring容器和dubbo标签来引用服务,这样就可以在客户端的容器中生成一个服务的代理对象,在action或者Controller中直接调用service的方法即可。
Zookeeper注册中心的作用主要就是注册和发现服务的作用。类似于×××中介的作用,在系统中并不参与服务的调用及数据的传输。
电商项目中是如何解决高并发和高可用的?
1)页面静态化
2)fastDFS图片服务器
3)数据缓存服务器
4)数据库集群、库表散列(数据库的各种优化、数据库的拆分)
5)负载均衡
什么是负载均衡
当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。
我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。
如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。
完整版!企业级性能测试实战,速通Jmeter性能测试到分布式集群压测教程
| 下面是我整理的2025年最全的软件测试工程师学习知识架构体系图 |
一、Python编程入门到精通

二、接口自动化项目实战

三、Web自动化项目实战

四、App自动化项目实战

五、一线大厂简历

六、测试开发DevOps体系

七、常用自动化测试工具

八、JMeter性能测试

九、总结(尾部小惊喜)
人生最动人的风景,往往藏在最难攀爬的高处。当你觉得力竭时,请记住:每一次坚持都在雕刻更强大的自己。别问路有多远,只管迈步向前;别怕山有多高,向上攀登就是答案!
你体内沉睡着改变世界的力量!每个清晨都是改写命运的新机会,每次挫折都是精心包装的礼物。当全世界都在说"不可能"时,正是你证明"可能"的最好时机!
更多推荐

所有评论(0)