面试有两点:1、技术过硬。2、能说会道

如果自己的技术还过的去,但是表述的不尽人意,其实是吃了很大亏的,下面我来介绍一个大神的面试过程:

面试官:请介绍一下你的电商项目。


大神:该商城是一个综合性的B2C平台,主要针对女性消费者,主要销售女性化妆品,首饰,服装等女性用品。商家入驻商城销售自家的产品,并且可以得到商城提供的各种服务。

在整个项目中,我们采用的是nginx+tomcat来部署的(面试官会可能问nginx是谁来部署的?如何部署的?Nginx的执行流程,优点),nginx一方面做加载静态资源的服务器,另一方面来做反向代理和负载均衡。因为该项目需要在多个环境中运行,我们利用了nginx的反向代理解决了不同环境同系统访问地址不统一带来的问题。

因为整个项目实现的功能较多, 所以采用分布式的架构设计,整个项目包括后台管理系统、前台系统、订单系统、登录系统、搜索系统、购物车系统等,这样做的好处是使每个功能模块独立出来,降低了各系统之间的耦合度,增删一个功能不会影响其他功能模块。

因为项目是采用分布式架构设计的,各模块之间是相互独立的,而各模块的访问路径又是不同的,所以当跨域请求数据的时候会遇到跨域受限的问题。比如当用户首次访问该网站首页时,首页页面会异步请求后台管理系统加载商品的类目,这是就会出现跨域受限的问题,以前开发时,如果在本模块内,我们是通过ajax异步请求数据的,但Ajax不支持跨域,所以用ajax无法解决跨域请求数据的问题。最后我们使用的是jsonp来解决这个问题的。jsonp通过script标签的src可以跨域请求的特性,加载资源,将加载的资源(通过一个方法名将数据进行包裹)当做是js脚本解析,定义一个回调函数(是怎么实现的?),获取传入的数据。我们使用jsonp是因为Jsonp的兼容性比较好,并且在请求完毕后可以通过callback的方式回传结果。但jsonp有一个缺点是只支持get请求而不支持post等其他类型的http请求。

这样我们解决了浏览器访问当前页面去加载后台系统数据出现的跨域问题,但是另一个问题又来了,其他系统该如何得到调用后台系统的数据呐?我们想可以发送http请求来访问后台数据,我们想到的是使用httpclient来解决此问题,因为httpclient可以使用java代码模拟浏览器发送http请求(get方法如何传递参数?定义uribuilder对象,在uribuilder里设置参数,以key和value,都是string类型的,然后将uribuilder放到uri中,在后将uri讲给httpget请求。Post方法如果传输数据?模拟表单提交,将数据封装到list集合中,然后将集合数据放入构造的表单实体中,在将表单实体请求放到httppost对象中)。向外抛出一个接口,执行过程是:1、创建httpclient 对象2、构建请求对象post ,get请求3、如果有参数,就去构造请求参数

3.1 get

使用uribuilder去构造请求参数

3.2 post

构建表单实体,把表单实体放入到 post请求对象中。

4、执行请求 ,并且接受响应

5、处理响应结果

6. 释放连接。无论执行方法是否成功,都必须释放连接。

HttpClient实现认为是线程安全的。

每次连接发起Http请求的时候都会重新建立连接(经历3次握手),用完就会关闭连接(4次挥手),这样会消耗很多时间,所有我们采用了连接池。如果不采用连接池,每次连接都会打开一个端口,在大并发的情况下系统的端口资源很快就会被用完,导致无法建立新的连接。

像项目中首页的大广告和商品类目这些不需要经常修改的数据,如果用户每次刷新页面的时候都要去数据库中查询,这样会浪费资源和增加数据库的压力。所以我们想当把这些数据添加到一个缓冲中,用户去访问的时候,先去缓存中命中,如果命中失败,再去数据库中查询,然后把查询到的数据添加到缓存中。目前比较主流的缓存技术有Redis和Memcached,单纯从缓存命中的角度来说,Memcached要高一些,可redis和Memcache的差距其实并不大,但Redis提供的功能更加强大一些,读写速度也很快。所以我们选用了redis来缓存数据。Redis把数据以key—value的形式缓存到内存中,并提供了多种数据存储类型(string,set,list,hash等),还自身提供了持久化功能(2种),还可以把数据备份到磁盘中(Redis的SAVE命令用于创建当前 Redis 数据库的备份),防止redis宕机时的数据丢失。(会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步)。我们使用的是spring与jedis整合的客户端,可以利用jedis做分片式集群,解决了redis内存受限的问题。

之前实现的登录和注册是在同一个tomcat内部完成,而现在系统架构是每一个系统都是由一个团队进行维护,每个系统都是单独部署运行一个单独的tomcat,所以,不能将用户的登录信息保存到session中(多个tomcat的session是不能共享的)(session共享?),所以我们需要一个单独的系统来维护用户的登录信息。我们是这样做的,用户去登录页面登录,去数据库查询是否有该用户,如果没有提示用户,如果有就把用户信息保存到redis中,并生成一个token保存到cookie中,

在后台管理系统中采用了Maven的多模块化的管理,其中采用了水平切分的方式(垂直与水平划分的区别:垂直:功能模块明确,层次不够清晰,代码重用性差。水平:层次清晰,代码重用性高,独立维护。),将各层分层开发,这样做的好处是代码重用性高,层次清晰,易于独立维护。系统内部接口调用采用Httpclient,接口提供端采用RESTful方式的接口定义(一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件),系统之间的通知机制采用MQ的方式,使用RabbitMQ的实现,使用了RabbitMQ的消息订阅模式的消息机制;部署方面,采用了Nginx+tomcat的模式,其中nginx的作用一方面是做反向代理、负载均衡、另一方面是做图片等静态资源的服务器;

在此项目中我主要负责后台管理模块,主要实现商品管理和商品规格参数管理,对商品和商品规格进行CRUD操作。;在实现前台调用后台数据时,为了实现系统间的调用,便使用了httpclient技术来实现此功能,在后台提供了需要调用的接口。(httpclient介绍,工作原理,优缺点)。如果在后台对商品进行操作,为了使前台数据与后台数据实现同步,我们使用了RabbitMQ 消息队列机制实现商品同步功能(RabbitMQ介绍,工作原理,优缺点);

在此项目中,我还参与了购物车模块的开发。在开发这个模块时候,我们考虑了会员在未登录和登录两种情况下把商品加入购物车,后台如何该保存商品信息。

在用户商品详情页点击加入购物车的时候,我们用了登录拦截器来判断用户是否登录;

如果没有登录,将商品信息保存到cookie中,当用户登录后,再把商品持久到数据库中;但是考虑到cookie储存大小的问题,还有当cookie储存的数据越多就会影响响应速度,我们决定使用redis来缓存用户在未登录状态下的商品信息(redis介绍,原理,优缺点),在redis中设置缓存生存时间(如何做到的?),如果用户在规定时间内没有登录,数据便会自动删除。如果用户在规定时间内登录了,便会通过RabbitMQ消息队列机制将数据同步到数据库中;

如何清晰、高质量的给面试官介绍自己的电商项目相关推荐

  1. 魔鬼面试官:用户在电商网站中购买成功了,那么它在微服务中经历了什么?...

    点击上方"朱小厮的博客",选择"设为星标" 做积极的人,而不是积极废人 面试的时候,面试官问:用户在电商网站中购买成功了,那么它在微服务中经历了什么?你该如何作 ...

  2. 电商项目相关面试问题及答案

    请描述一下这个系统? [回答技巧] 从3个方面来回答这个问题: |–系统背景及系统概述 |–系统包括的业务模块及主业务流程 |–责任模块 [回答示例] 第一个方面:系统背景及系统概述 优购时尚商城是香 ...

  3. 从面试官角度告诉大家如何准备项目方面的描述

    之前写了篇博文,你的简历能帮你争取到面试机会吗,反响不错,也承蒙管理员抬爱,放在首页,为了答谢大家,在这篇博文里,我来分享些如何准备和叙述项目经验的技巧. 本文的内容是根据java web轻量级开发面 ...

  4. 软件测试面试官让你介绍项目你怎么回答?最全模板来了(包含电商项目、在线教育、互联网金融等)

    目录 1.自我介绍 2.项目介绍 2.1.最全电商项目介绍 2.2.电商项目介绍 2.3.在线教育项目介绍 2.4.互联网金融项目介绍 3.总结 4.重点:配套学习资料和视频教学 1.自我介绍 以XX ...

  5. 在面试时,向面试官介绍项目的基本要点

    面试官:你给我简要介绍一下银行柜台系统(功能)? 答:1.简易银行柜台系统是模拟银行柜台的基本功能而做的一个系统. 2.系统分前台和后台部分,前台部分是银行柜台人员操作的,包括:注册登录模块.开销户模 ...

  6. 面试官问:前后端分离项目,有什么优缺点?

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:推荐19个github超牛逼项目!个人原创100W +访问量博客:点击前往,查看更多 来源:blog.csdn.n ...

  7. 面试专题-电商项目面试篇

    找工作面试的过程中,项目将会是整个流程的核心灵魂,也是能在面试中能让面试官尽快认同你的一个强有力的依据,所以在面试中把电商项目清晰的表述出来是极为关键的. 1.说说你最近做的这个项目的背景,简单的介绍 ...

  8. 简历里写了电商项目 ,面试的时候怎么回答

    商项目里的技术特点? ①技术更新较快:根据市场的需求,不断迭代更新. ②技术涉及面广:除了 PHP,还会用到 Python,GO 等其他的一些语言:数据库中 MySQL,nosql 是最频繁使用的(当 ...

  9. 谷粒商城电商项目 高可用集群篇

    更多视频,JAVA收徒 QQ:987115885谷粒商城电商项目 高可用集群篇339.k8s-简介.mp4340.k8s-架构原理&核心概念.mp4341.k8s-集群搭建-环境准备.mp43 ...

最新文章

  1. 蜜蜂实训平台c语言考试答案,北理c语言上机答案(全)
  2. etcd 日志压缩_etcd集群备份和数据恢复以及优化运维
  3. mysql深入使用教程_深入mysql基础知识的详解
  4. TrueNorth:IBM的百万神经元类人脑芯片
  5. ServiceMix中部署:OSGi Bundle和Feature
  6. 为窗体添加 最大化,最小化,还原等 事件
  7. could not change product header data even after switching to change mode
  8. html设置页面的高度和宽度,web显示页面有图像上设置高度和宽度很重要
  9. archlinux使用sudo
  10. ZZULIOJ 1077: 空心菱形
  11. 基于vhdl的分频器设计
  12. 工业物联网设计普遍存在哪些问题?
  13. 注意!这13件事会毁掉你的信用,千万别做!
  14. Dracoo Master天龙卡牌大师
  15. linux:挂载、rpm、yum、scp、ssh、crontab、时钟同步
  16. python怎么保留整数输出_python怎么保留整数
  17. linux 命令行下的复制和黏贴
  18. 【docker】出现segmentation fault,如何导出转储
  19. 快速提高网站排名工具大全
  20. win2008降级为成员服务器_Windows2008R2 AD降级错误解决方案

热门文章

  1. 【评测】CRISPR/Cas9基因编辑系统
  2. 内螺纹管密封接头该怎么选
  3. linux shell输出时间,Linux Shell输出格式化日期(转)
  4. 泛微E9后端学习笔记 - IDEA远程调试
  5. mysql 清空数据库所有表最简单的方法
  6. Python:ElGamal
  7. 结构体习题:通过学生学号查询学生信息
  8. Meterpreter木马技术分析与防范
  9. telerik:RadGrid导出Excel隐藏列
  10. 盘点影响光化学合成反应的几个重要因素