1. 项目总结
总结淘淘商城中用到的技术点:
1.1. 项目工程搭建。
1、使用maven构建工程。Maven的继承、聚合、依赖管理。
2、Svn的使用,svn上传下载代码。
1.2. ssm框架整合。
1、mybatis逆向工程。
2、后台管理系统搭建,前台技术使用EasyUI框架。了解easyUI的dategrid的使用方法。
1.3. 实现商品添加。
1、商品类目选择。EasyUI的异步tree的使用方法。
2、图片服务器的搭建。使用ftp+http配合,实现图片服务。ftp服务使用vsftpd实现,http服务使用nginx实现。
3、KindEditor富文本编辑器的使用方法。
1.4. 规格参数实现。
1、规格参数的解决方案。
a) 方案一:创建多个表进行关联实现商品类目。
b) 方案二:使用模板方式实现。
2、java对象、json之间的转换。
1.5. 前台工程搭建。
1、理解分布式系统架构思想。
2、Jsonp解决ajax跨域调用的问题。
1.6. 第六天:CMS系统的实现
1、CMS系统的实现思路
2、Httpclient的使用方法
3、首页大广告位的实现
1.7. 内容系统添加缓存
1、redis的使用方法及redis集群的搭建
2、系统中添加缓存逻辑
3、缓存的同步方法。
1.8. 搜索功能实现
1、solr服务在linux环境的搭建
2、使用solr实现搜索功能。
3、索引库中商品的同步
1.9. 商品详情页面实现
1、商品详情页面内容异步加载
2、规格参数按需加载
3、商品详情页面添加缓存及缓存同步
1.10. 单点登录系统实现
1、服务接口的开发
2、在分布式环境中使用redis实现session共享
3、使用cookie在多个系统中共享。
4、拦截器的使用方法
1.11. 购物车、订单
1、使用cookie保存购物车信息
2、创建订单系统。发布服务,支持post请求提交json格式的数据。
3、在用户提交订单之前,检查用户的登录状态(拦截器)
1.12. nginx安装、配置
1、nginx的虚拟机的配置
2、Nginx的反向代理
3、Nginx的负载均衡
4、Nginx的高可用
1.13. solr集群的搭建、系统部署
1、solrCloud的搭建。Zookeeper的配置、solr集群的分片。
2、Mysql数据库在linux环境的安装
3、使用maven进行系统的热部署。
1.14. 项目总结
2. 淘淘商城简历中描述
见之前文章。
3. 面试中的问题回答
3.1. 淘淘网站并发数:
1000-2000左右并发。
3.2. 人员配置
产品经理:3人,确定需求以及给出产品原型图。
项目经理:1人,项目管理。
前端团队:5人,根据产品经理给出的原型制作静态页面。
后端团队:20人,实现产品功能。
测试团队:5人,测试所有的功能。
运维团队:3人,项目的发布以及维护。
3.3. 开发周期
采用迭代开发的方式进行,一般一次迭代的周期为一个月左右。
3.4. 你说你用了redis缓存,你redis存的是什么格式的数据,是怎么存的
redis中存储的都是key-value格式的。拿商品数据来说,key就是商品id,value是商品相关信息的json数据。
3.5. 你前台portal采用4台服务器集群部署,那能前台高并发访问性能提上去了,那数据库会不会造成一个瓶颈,这一块你是怎么处理的?
portal系统在高并发的情况下如果每次请求都请求都查询数据库确实会出现数据库的瓶颈。为了降低数据库压力,在服务层会添加一个缓存,用redis实现,这样的话请求先到缓存中查找是否有缓存的内容,如果有直接从缓存中取数据,如果没有再到数据库中查询。这样数据库的压力就不会那么大了。
3.6. 你购物车存cookie里边 可以实现不登录就可以使用购物车 那么我现在没有登录把商品存购物车了 然后登录了然后我换台电脑并且登录了还能不能看见我购物车的信息?如果看不到怎么做到cookie同步,就是在另外一台电脑上可以看到购物车信息
回答:
淘淘商城现阶段使用的仅仅是把购物车的商品写入cookie中,这样服务端基本上么有存储的压力。但是弊端就是用户更换电脑后购物车不能同步。打算下一步这么实现:当用户没有登录时向购物车添加商品是添加到cookie中,当用户登录后购物车的信息是存储在redis中的并且是跟用户id向关联的,此时你更换电脑后使用同一账号登录购物车的信息就会展示出来。
3.7. 如果用户一直添加购物车添加商品怎么办?并且他添加一次你查询一次数据库?互联网上用户那么多,这样会对数据库造成很大压力你怎么办?
当前我们使用cookie的方式来保存购物车的数据,所以当用户往购物车中添加商品时,并不对数据库进行操作。将来把购物车商品放入redis中,redis是可以持久化的可以永久保存,此时就算是频繁的往购物车中添加数据也没用什么问题。
4. 电商活动解决方案
4.1. 电商活动倒计时方案:
1、确定一个基准时间。可以使用一个sql语句从数据库中取出一个当前时间。SELECTNOW();
2、活动开始的时间是固定的。
3、使用活动开始时间-基准时间可以计算出一个秒为单位的数值。
4、在redis中设置一个key(活动开始标识)。设置key的过期时间为第三步计算出来的时间。
5、展示页面的时候取出key的有效时间。Ttl命令。使用js倒计时。
6、一旦活动开始的key失效,说明活动开始。
7、需要在活动的逻辑中,先判断活动是否开始。
4.2. 秒杀方案:
1、把商品的数量放到redis中。
2、秒杀时使用decr命令对商品数量减一。如果不是负数说明抢到。
3、一旦返回数值是负数说明商品已售完。