## 电商项目面试问题 ##

电商项目面试问题

  1. 说说你最近做的这个项目的背景,简单的介绍一下你这个项目?

背景
电商项目的背景一般是由市场推动的,比如行业竞争或者经营方式的改变(营销理念)。竞争的形态也发生了巨大的变化,从以产品、价格为主的竞争转向以服务为主的竞争,服务成为主导竞争格局的重要因素。渠道作为企业完成客户沟通、产品/服务交换过程以及实现价值、产生效益的重要载体,发挥了采集、传达客户和竞争对手等市场信息,为买卖双方提供便利,协调供需矛盾,为客户提供合适的产品与服务,向客户传递产品/服务信息,实现营销/服务目标等重要的功能。
XXX商城之前主要以实体店为主,进行批发与零售。业务也相对比较传统,为了提升业务绩效,增强客户满意度和粘性,另一方面,也为基于互联网的商务模式创新奠定基础。针对上述行业环境变化和业务战略目标,xxx商城网上终端预约销售基础上,即将启动网上商城建设项目,用于建立网上终端、营销案在线销售及相关辅助功能,包含商品管理、订单管理、类目管理、客户管理、合作商管理、客服管理、购物平台、内容管理等,很大程度上分担了人工的压力,对提高客户服务效率和客户满意度能够起到较好的作用。基于此,XXX公司提出建设网上商城建设项目工程。
项目介绍
xxx商城项目打造的是“社区+电商”的模式,用户不只是在社区中有自己的圈子,还可以将电商加入到社区中,整个电商网站实现的功能非常之多,采用分布式的架构设计,包括后台管理、前台系统、订单系统、单点登录系统、搜索系统、会员系统等。
①该项目是自己公司的产品,我们公司负责整个网站的运营,属于B2C平台;
②系统的用途,主要是提供B2C的平台,其中自营商品也有商家入住,类似天猫。
③系统架构,采用分布式的系统架构,其中前台系统和单点登录系统采用了集群的方式部署,在后台管理系统中采用了Maven的多模块化的管理,其中采用了水平切分的方式,将pojo、dao、service、web分层开发,这样做的好处就是可以重用性更高。
系统内部接口调用采用Httpclient,并且使用Httpclient的连接池技术,接口提供端采用RESTful方式的接口定义;
系统之间的通知机制采用MQ的方式,使用RabbitMQ的实现,使用了RabbitMQ的消息订阅模式的消息机制;
系统的接口还对JS的跨域做了支持,采用了jsonp的解决方法,在后台接口中扩展了spirng提供的jackson数据转化器实现;
④部署方面,采用了Nginx+tomcat的模式,其中nginx的作用一方面是做反向代理、负载均衡、另一方面是做图片等静态资源的服务器。
项目介绍应该从这个项目的模式、功能、架构、解决了什么问题、部署以及投入使用情况来说。
2. 整个项目的架构如何?
一般情况这个问题要从两个方面去回答,从技术架构和功能架构去谈。
技术架构:本项目使用市场上较为主流的框架spring+springmvc+mybatis进行开发,采用分布式的系统架构,前台系统和单点登录系统采用了集群的方式部署,后台管理系统中采用了Maven的多模块化的管理,其中采用了水平切分的方式,将pojo、dao、service、web分层开发,这样做的好处就是可以重用性更高。系统内部接口调用采用Httpclient,并且使用Httpclient的连接池技术,接口提供端采用RESTful方式的接口定义;系统之间的通知机制采用MQ的方式,使用RabbitMQ的实现,使用了RabbitMQ的消息订阅模式的消息机制;系统的接口还对JS的跨域做了支持,采用了jsonp的解决方法,在后台接口中扩展了spirng提供的jackson数据转化器实现;搜索系统使用了solr实现,在保证系统高性能的前提下,尽可能为公司节约成本,我们使用MySQL数据库进行集群(oracle收费)。在部署方面,采用了Nginx+tomcat的模式,其中nginx的作用一方面是做反向代理、负载均衡、另一方面是做图片等静态资源的服务器。
功能架构:分布式系统架构

各个系统说明:
后台管理系统:管理商品、订单、类目、商品规格属性、用户管理以及内容发布等功能。
前台系统:用户可以在前台系统中进行注册、登录、浏览商品、首页、下单等操作。
会员系统:用户可以在该系统中查询已下的订单、收藏的商品、我的优惠券、团购等信息。
订单系统:提供下单、查询订单、修改订单状态、定时处理订单。
搜索系统:提供商品的搜索功能。
单点登录系统:为多个系统之间提供用户登录凭证以及查询登录用户的信息。
谈到分布式架构,我们必须对比传统架构才能彰显其优势。
①最为明显的一点,在传统的架构中,如果某个功能需要进行维护,那么我们必须停掉整个服务,这对于公司的运营会造成损失。分布式系统在核心功能模块使用单独服务器,维护部分模块不影响用户的其他操作。
②在海量数据处理方面,传统架构显得比较乏力;分布式系统架构采用服务器集群,使用负载均衡,海量数据处理游刃有余!
③在性能(检索)以及维护方面,分布式系统架构也有较为明显的优势。
传统架构:

  1. 这个项目为用户提供了哪些服务?包括哪些功能?
    u 商品管理模块:其中包括品牌管理,属性管理商品录入/上下架管理,商品添加审核,静态页面发布
    u 订单模块:其中包括使用activiti工作流订单的查询和订单的流转,定时作废
    u 商品前台首页:其中主要负责首页商品列表筛选,首页上动态展示筛选条件,点击每一个筛选条件下面的商品列表要做联动
    u 单品页面:采用freemarker来实现页面静态化,展示商品详情信息和商品购买,该页面采用静态化以减轻系统压力,使用了cxf框架发布服务
    u 提交订单页面:提交用户的订单信息, 处理并发问题。
    u 个人中心,包括用户的登录,个人信息的管理,收货地址的管理,用户所下的订单的管理
    u 购物车:把购物车的信息存在cookie里面管理
  2. 你承担这个项目的哪些核心模块?
    在项目中主要负责相关系统的开发,主要有:
    1) 后台管理系统,主要实现商品管理、商品规格参数管理、订单管理、会员管理等、CMS(内容管理系统)等,并且提供了跨域支持;
    2) 前台系统,主要是面向用户访问,使用Httpclient和后台系统接口做交互,并且该系统在部署上采用集群的方式;
    3) 单点登录系统,主要是提供集中用户登录凭证的集中解决方案,提供和用户信息相关的接口,比如说用户注册、查询等接口。
    4) 订单系统,主要是提供和订单相关的业务接口,在订单系统了做了严格的数据校验以及高并发写的支持(这里可以说使用队列实现),并且使用了Quartz定时任务实现对订单的定时扫描,比如说关闭超时未付款的订单;
    5) 搜索系统,主要是提供商品的搜索,采用开源企业级系统Solr实现,采用了MQ机制保证了商品数据可以及时同步到solr中;
    6) 会员系统,主要是维护用户的信息,已购买订单、优惠券、系统消息、修改密码、绑定手机等功能;
    7) 缓存,主要是用Redis实现,并且对Redis做了集群来保证Redis服务的高可用。8) 支付系统,主要是负责订单的支付、对账等功能,主要是对接了支付宝的接口;
  3. 这些模块的实现思路说一下?
    ①商品管理模块

品牌管理:
主要掌握的核心是品牌的添加
l 图片服务器的搭建,
l 上传图片到图片服务器
l 表单的验证,离开焦点的验证,点击完成时的验证,后台服务器的ajax验证,表单规范
l 防止表单的二次提交
l 编辑时不需要修改品牌名,区别readOnly和disabled
l 删除时的二次确认
注意:
自定义属性必须掌握:html中自定义的属性可以帮助索引元素
图片服务器的搭建
1. 创建一个maven的web工程,在工程中创建一个存放资源的目录
2. 把tomcat的web.xml中DefaultServlet的只读属性改成false

  1. 编写上传到图片服务器的代码
    由于应用服务器与图片服务器出于不同的两台机器之中,所以可以提高系统的性能,能起到负载均衡的作用。上传图片时使用Jersey 客户端 API 调用 REST 风格的 Web 服务, Jersey 1 是一个开源的、可以用于生产环境的 JAX-RS(RESTful Web Services 的 Java API 规范,JSR-311)实现。通过 Jersey 可以很方便的使用 Java 来创建一个 RESTful Web Services。
    byte[] fileByte = commFile.getBytes();
    //创建客服端,基于webservice
    Client client = Client.create();
    //指定资源路径
    WebResource webResource = client.resource(Constants.picPath+fileName);
    //使用put的请求方式把资源文件放到资源服务器上
    webResource.put(String.class, fileByte);
    前台使用ajax提交表单,需要使用jquery的jquery.form.js插件

(“#form”).ajaxSubmit({  
    url:url,  
    type:”post”,  
    dataType:”text”,  
    data:{  
        …  
    },  
    //beforeSubmit:validate,  
    success:function(responseText){  
        var obj =
.parseJSON(responseText);
},
error:function(){
}
});
4. 图片服务器中Upload文件夹中随便建立一个文件,防止空文件夹的情况下发布后upload消失

表单验证

  1. 提交时做验证
    做好约定,每个文本中设置reg属性和tip自定义的属性,reg存放正则表达式,tip中存放不合法时的提示信息,还有品牌名称重复的验证。
    reg2,tip属于自定义的属性,这种定义方式方便使用jquery的属性选择器

  1. 在表单提交时做验证使用 (form).submit(function()returnfalse);, (“#form111”).submit(function(){
    var isSubmit = true;
    (this).find([reg2]).each(function()varregStr=$(this).attr(reg2);//varvalue=$.trim($(this).val());vartip=$(this).attr(tip);//varreg=newRegExp(regStr);if(!reg.test(value))$(this).next(span).html(tip);isSubmit=false;//,jqueryeach使returnfalse;js使break;,return;:returnfalse;); (this).find(“[reg1]”).each(function(){
    var regStr = (this).attr(reg1);varvalue= .trim( (this).val());vartip= (this).attr(“tip”);
    var reg = new RegExp(regStr);
    if(value != null && value != “”){
    if(!reg.test(value)){
    $(this).next(“span”).html(tip);
    isSubmit = false;
    return false;
    }
    }
    });
    return isSubmit;
    });

  2. 使用离焦事件做友好的提示
    (“input[reg2]”).blur(function(){  
    var regStr =
    (this).attr(“reg2”);
    var value = .trim( (this).val());
    var tip = (this).attr(“tip”);  
    var reg = new RegExp(regStr);  
    if(!reg.test(value)){
    (this).next(“span”).html(tip);
    }else{
    $(this).next(“span”).html(“”);
    }
    });

  3. 表单的二次提交处理

l 锁屏
l 锁按钮
②商品的查询

商品查询需要组合条件加分页查询
l 组合条件:品牌,审核状态,商品名称,需要动态sql

select *
from (select a.*, rownum rm
from (
select *
from eb_item ei


ei.brand_id = #{brandId}


and ei.audit_status = #{auditStatus}


and ei.show_status = #{showStatus}


and ei.item_name like ‘%${itemName}%’


order by ei.item_id desc) a

猜你喜欢

转载自blog.csdn.net/qq_32332777/article/details/79053076