A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

面试的时候如何进行项目讲解?

(本文稿由就业部陈老师提供)

我们这个项目是基于SOA的架构来实现的。采用的是dubbo中间件来实现表现层跟服务层之间的通信。我们项目分为前台后台,前台提供内容展示,商品展示,商品搜索,购物车,订单等模块,支付,客服中心等模块,后台提供管理商品,内容管理,订单管理,采购财务管理等模块。

下面我给您具体介绍一下。

首先进入我们的网站首页:最上面是我们的网站的logo,搜索框,下面左边是测分类栏对商品进行分类,轮中间是轮播图广告位,跟着下面是新闻公告栏,再下面是一些热门商品的展示。这上面内容都是动态的展示出来的,所以我们要有一个后台来管理这些内容。

我介绍下我参与的两个模块:

比如说广告位的展示吧,我们后台要管理这些内容,在后台页面最左边就会有一个网站内容管理模块,内容模块包含内容分类管理,内容管理。当我们点击内容分类,在右边就会显示所有商品的一个分类,在点击子节点,比如说我们这里的广告位,就会异步加载数据的显示查出广告内容。我们再在这个基础上对广告进行增删改查。考虑高并发量,为了避免频繁的与数据库交互,我们将数据存在了redis中,当在首页中点击广告时,我们将不再直接去数据库中查找数据,而是先判断缓存中是否有数据,如果有直接返回数据,如果没有就去查数据库并将数据缓存在radis中,另外我们修改内容后,会将原来的缓存删除掉,来同步数据库。
后台模块还有商品管理模块,这一块是对商品的列表展示,以及增删改查操作,分页采用的是pagehelp插件,将商品信息查询出来的信息放到pageinfo对象里面,设置分页信息,返回数据给datagrid;新增商品的话,在商品添加界面录入商品信息,商品的id,商品标题,商品卖点,商品价格,库存数量,商品条形码,商品图片,商品类别,商品状态(1-正常,2-下架,3-删除'),创建时间,更新时间,商品的描述。其中图片存储考虑到数量比较多,采用的是分布式文件存储系统(fastdfs),图片多了可以搭建集群。商品的描述采用的是富文本编辑器,将录入的商品信息分别插入对应的不同的表.

然后我们再来说下首页的其他部分,最上面有个搜索框,当用户在首页没有看到想要的商品时,可以有针对性的进行搜索,使用了solr技术,根据IK分词器,对查询的条件进行查询,首先创建一个SolrQuery对象作为商品搜索的查询条件,设置分页条件,指定默认的搜索域,设置高亮,执行查询,计算出总页数和总条数,返回一个QueryResponse结果集,在将结果集循环遍历添加到自己定义的集合里面,返回给页面,一个商品的图片有多个地址,需要将图片的地址分切转化成数组,页面显示的时候取数组的下标为0,取出一张图片就可以了,这样我们就搜索到我们想要的一些商品。

这里有一个问题就是索引库要同步,当我们添加商品的时候,我们使用了一个消息中间件ActiveMQ来同步索引库,添加商品时,发送消息。在搜索模块中,创建MessageListener接口的实现类接收消息,取商品id,根据商品id查询数据库,创建一SolrInputDocument对象,使用SolrServer对象写入索引库。

当用户搜索到自己想要的商品时,就会去点击那个商品图片或者名称进入商品详情页面。商品详情展示要查两个表,一个是商品表,一个是商品描述表,当访问量很大时,如热门商品,就会频繁的跟数据库交互,为了减轻数据库的压力,考虑使用缓存。热门商品访问量比较大,需要做缓存,普通商品却需求不大。要区别对待,我们考虑到使用记录访问量来记录访问次数,来区别热门商品,针对的做缓存,但这样操作麻烦。最终我们采用设置redis过期时间来处理这个问题, 热门商品访问比较深多,过期了又会存进去。

不过我们为了进一步减少数据库的压力,商品详情页采用了FreeMarker模板引擎技术,生成一个静态化页面。这样能减轻服务器的压力。当我们添加商品的时候,我们使用了一个消息中间件ActiveMQ发送消息。再创建MessageListener接口的实现类接收消息,取商品id。

根据商品id查询数据库,过得商品基本信息和商品描述,创建商品详情模板,指定下商品输出文件路径,生成静态文件,用nginx作为http服务器来访问静态页面。如果一台服务器不够,可以采用分布式扩容,我们还可以使用nginx来反向代理,负载均衡。

我再讲下购物车模块,当客户查看商品详情后,想购买了,就会加入购物车。为了减少用户流失量,在不登陆的情况下,可以把购物车信息写入cookie,这样用户体验好。读写cookie我们封装了CookieUtils工具类来实现。加入时先判断商品id在商品列表中是否存在。如果存在,商品数量相加。不存在,根据商品id查询商品信息,把商品添加到购车列表,把购车商品列表写入cookie。购物车列表转换成json数据。需要对数据进行编码。Cookie的有效期:保存7天。展示购物车列表时,从cookie中取商品列表把,商品列表传递给页面。修改商品数量时,页面发送一个异步请求,后台接收两个参数商品id和数量,再从cookie中取商品列表,遍历商品列表找到对应商品,更新商品数量,把商品列表写入cookie。这里有个问题时,数量有上线,当库存不足时,我们是在提交订单时,去查询数据库,当库存不足时,给用户提醒。

最后我讲一下订单模块,购物车完成后要生成订单,订单中有配送信息,因此我们必须要求用户登录。我们使用的是单点登录,使用redis模拟Session,实现Session的统一管理,这样用户只需要登录一次就可以访问所有相互信任的应用。用户登录成功后,生成token,相当key, 把用户对象转换成json当value存入redis,模拟Session的过期时间。一般半个小时。最后把token写入cookie中(Cookie需要跨域)。

当点击生成订单时,先配置一个springmvc的拦截器,实现接口HandlerInterceptor,从cookie中取token,没有token,需要跳转到登录页面;有token,调用sso系统的服务,根据token查询用户信息,如果查不到用户信息,说明用户登录已经过期。需要跳转到登录页面,查询到用户信息,放行。

放行后,提交购物车OrderInfo,接收表单的数据,不全一些数据,生成订单id,向订单表插入数据。向订单明细表插入数据,向订单物流表插入数据。返回逻辑视图展示订单生成成功。在调用第三方接口,完成订单支付。

333 个回复

倒序浏览
谢谢老师分享哦
回复 使用道具 举报
谢谢老师分享,很实用
回复 使用道具 举报
....
121212312
回复 使用道具 举报
32132132132132132
回复 使用道具 举报
常得到v
回复 使用道具 举报
gfnddftdtdtjjt
回复 使用道具 举报
干货,学习ing......
回复 使用道具 举报
正在找工作中,急需学习学习
回复 使用道具 举报
ewwqe 初级黑马 2017-7-27 18:02:42
10#
谢谢分享
回复 使用道具 举报
感谢分享!
回复 使用道具 举报
感谢分享!最近刚好在面试
回复 使用道具 举报
aaaaaaaaaaaaaaaaaaa
回复 使用道具 举报
hhhh
回复 使用道具 举报
好人一生平安!!!!
回复 使用道具 举报
66666666666
回复 使用道具 举报
歇息分享
回复 使用道具 举报
没事就来看看论坛
回复 使用道具 举报
路过         
回复 使用道具 举报
我来看一看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马