淘淘商城-面试问题汇总_第1页
淘淘商城-面试问题汇总_第2页
淘淘商城-面试问题汇总_第3页
淘淘商城-面试问题汇总_第4页
淘淘商城-面试问题汇总_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

传智播客 Java学院 传智.入云龙1 描述一下你的项目淘淘网上商城是一个综合性的B2C平台,类似京东商城。会员可以在商城浏览商品、搜索商品、使用购物车、购买商品下订单,以及参加各种活动。后台管理系统中管理员、运营可以在平台后台管理系统中管理商品、订单、会员等。客服可以在后台管理系统中处理用户的询问以及投诉。2 描述一下你的系统架构采用当前最流行的ssm(springmvc+spring+mybatis)框架开发,是当前电商网站首选的技术架构。系统是基于SOA架构设计,采用dubbo作为服务中间件,系统后台使用jsp+easyUI作为视图层,操作简便用户体验好。商城系统使用freemarker做静态化页面来提高系统的性能,使用nginx做负载均衡服务器以应对大规模的用户量的并发。电商搜索系统采用当前最流行的全文检索技术solr实现。系统中使用redis做缓存,使用Activemq做消息中间件。后台数据库使用mysql数据库,做读写分离。3 说一下dubbo的使用方法。Dubbo是一个分布式服务框架,提供了统一的高性能的远程服务调用平台。所有的业务逻辑都使用dubbo发布供表现层工程调用。发布dubbo服务需要使用spring容器的支持来发布服务,调用服务同样使用spring容器来应用服务。其中服务的发布和服务的发现都是通过注册中心来实现,我们使用zookeeper作为注册中心。使用dubbo的监控中心监控中心来统计各服务调用次数,调用时间等。4 持久层框架为什么选择mybatis?互联网项目追求的是高性能,尤其是数据库查询的时候,在并发量高的情况下需要对sql语句进行调优。Mybatis就是面向sql语句的,所以操作起来笔记容易入手。所以一般互联网项目中大多采用mybatis作为持久层框架。5 电商项目中会有很多图片需要保存,你们系统中是如何保存图片的?在电商项目中需要保存大量的图片,需要一个独立的图片服务器来保存,而且存储的容量需要可扩展。并且还需要解决在高并发及高可用的问题。所以我们采用一个FastDFS一个分布式文件系统来保存图片。FastDFS可以搭建服务器集群,解决了存储空间的水平扩展、负载均衡以及服务器的高可用问题。6 你们系统的并发是多少?如何解决高并发的问题?经过我们对系统的调优,保证压力测试时每个tomcat的并发量达到400。现在我们有5台web服务器提供服务,基本上也就是2000左右的并发,如果将来并发量进一步提高是可以再增加服务器来提供并发能力。解决高并发问题首先要提高本系统的吞吐能力,例如在系统中添加缓存、实现网页静态化等方式。如果在系统优化之后还不能满足业务的需要就需要增加服务器,做服务器集群。前端使用nginx做负载均衡服务器,并实现nginx的高可用。目前可以满足当前的业务需要,如果将来业务量增加的话可以考虑添加服务器及F5硬负载等设备。7 你们商城是否做过seo处理。是如何做的?我们做过seo处理,也就是配合seo人员做一些工作。在页面中添加一个关键词、做网页的伪静态化或者是纯静态化等处理。还有就是在页面的关键词中中添加一些链接等。8 网页静态化的实现方案。创建一个独立的工程,此功能的功能就是生成静态化页面的,例如商品详情页面静态化。将此工程独立部署到一个服务上,页面就生成到当前服务的磁盘上,并且此工程监听MQ的消息,一旦后台工程添加商品,此工程将接收到消息并且生成静态页面。在此服务器上安装一个nginx做为访问静态资源的http服务器。9 你们项目中是redis做缓存,你redis存的是什么格式的数据,是怎么存的?redis中存储的都是key-value格式的。拿商品数据来说,key就是商品id,value是商品相关信息的json数据。10 你们项目中缓存的应用场景?在商城系统中当并发量比较高,频繁的对数据库进行读操作的时候都需要添加缓存。例如页面中内容数据的缓存、商品数据的缓存以及用户数据的缓存等。11 你们把商品数据放到缓存中,如何提高缓存的利用率?做商品数据的缓存时,因为商品的数据量很大,而且缓存是把数据保存到内存中,此时不可能把所有的商品数据都放到缓存中。所以需要设置商品数据缓存的有效期,当用户访问到非热点数据后,此数据放到缓存中,当缓存到期后就从缓存中删除,而且长时间不会添加到缓存。而热点数据一旦从缓存中删除会马上又添加到缓存。这样可以提高缓存的利用率,同时也减轻了数据库的压力。12 项目中使用到了缓存,那么如何实现缓存同步的?只要使用了缓存就涉及到缓存同步的问题。缓存同步其实就是当缓存的信息发生变化,也就是对后台对缓存的数据进行增、删、改操作后,数据库中的数据发生了变化同时要把缓存中的数据对应删除即可。当页面再次请求数据时,缓存中不能命中就会从数据库中查询并且添加到缓存中,即实现了缓存同步。13 Redis是nosql数据库,是否适合存储大数据?Redis是nosql数据库,但是redis是key-value形式的nosql数据库,数据是存储到内存中的,适合于快速存取一般作为缓存使用。所以不适合于大数据的存储。并且redis是单线程的如果某个操作进行大数据的存储的话其他的进程都处于等待状态,这样就降低了性能。所以在redis中不适合于大数据的存储。14 你们系统中搜索是怎么实现的?电商搜索一般也是使用全文检索实现,我们使用的是solr作为全文检索服务器,实现搜索功能。我们在solr中配置跟业务相关的业务域,从数据库中把相关的数据导入到索引库中。例如商品搜索功能就把商品表中的数据导入到索引库中。然后使用solr实现商品搜索,然后在页面中把搜索结果展示出来。15 如何处理数据量大、并发量高的搜索?如果要搜索的内容数据量很大并且并发量很高的情况下,一个solr服务是不能满足要求的,所以此时需要SolrCloud来解决。SolrCloud也就是solr的分布式解决方案。是zookeeper+solr实现的。16 你们项目搜索功能中是如何处理分词的?新上市的商品如何处理分词?在项目中搜索功能使用solr实现,在solr中配置中文分析器,我们使用IKAnalyzer来实现中文分词。如果是新上市的商品可能会出现一些新的关键词,为了查询的准确性,我们会把新的关键词添加到IKAnalyzer的扩展词典中。17 你们的项目中的系统之间是如何通信的?系统之间通信可以有多种方式,例如使用HttpClient调用restful形式的服务,使用jsonp跨域调用http服务,使用dubbo进行服务的远程调用。还有就是使用Activemq实现系统之间消息传到。18 项目中是否使用消息中间(MQ)件进行通信?有什么好处?项目中使用到了Activemq,可以实现系统之间的异步通信,从而实现业务的解耦。19 Activemq有几种消息通信方式?使用MQ中间件可以有两种通信方式queue和topic。Queue可以实现点到点之间的通信,可以有多个Producer也可以有多个Consumer,但是消息只能被一个Consumer接收,一旦消息被消费后就没有了。Topic可以实现类似广播的通信方式,可以有多个Producer和多个Consumer,一旦有Producer发送消息后,此消息可以被所有Consumer接收。20 Activemq在你项目中的应用场景是什么?我知道的是在本项目中,当后台系统对商品数据进行添加、删除、修改后,将会发送一个消息变化的消息,此消息通过topic进行通信,有多个消费端,搜索系统会把索引库进行同步,商品的缓存数据会进行同步、商品详情页面的静态页面会重新生成。21 如何处理集群环境下的登录问题。在我们的项目中,我们使用一个sso系统来解决集群环境下的登录问题,只需要在单点登录系统中登录一次就可以访问其他的互信,网站。原理是不再使用tomcat提供的Session,而是使用redis来模拟Session,一旦用户登录后会生成一个token,类似于jsessionid的功能。将用户信息访问redis,key就是token,value就是用户信息。然后把token信息写入cookie中,并且实现cookie可以跨域访问。当需要对用户身份进行验证时,需要先从cookie中把token取出,然后根据token查询redis,来判断用户的登录状态。22 你的项目中购物车是如何实现的?我们的项目中暂时是把购物车信息放到cookie中,并且是用户不登陆的时候也可以使用购物车。读写购物车的信息都是通过读写cookie实现的。23 如果把购物车放到cookie中,换一台电脑是否可以看到购物车信息?如何实现?如果把购物车放到cookie中,更换电脑是不能看到购物车信息的。如果想更换设备实现购物车同,需要把购物车信息保存到redis中。实现购车商品数据同步:1、 要求用户登录。2、 把购物车商品列表保存到数据库中。推荐使用redis。3、 Key:用户id,value:购车商品列表。推荐使用hash,hash的field:商品id,value:商品信息。4、 在用户未登录情况下写cookie。当用户登录后,访问购物车列表时,a) 把cookie中的数据同步到redis。b) 把cookie中的数据删除c) 展示购物车列表时以redis为准。d) 如果redis中有数据cookie中也有数据,需要做数据合并。相同商品数量相加,不同商品添加一个新商品。5、 如果用户登录状态,展示购物车列表以redis为准。如果未登录,以cookie为准。24 你们系统中订单号是怎么生成的?订单号首先决定不允许重复,并且可读性要好,并且订单号需要有一个初始值。所以我们采用redis的incr命令来生成订单号,每次加一。由于redis是单线程的所以使用此命令不会出现重复的订单号,并且可读性好。25 网站经常搞活动,你说一下抢购的倒计时如何实现?1、确定一个基准时间。可以使用一个sql语句从数据库中取出一个当前时间。SELECT NOW();2、活动开始的时间是固定的。3、使用活动开始时间-基准时间可以计算出一个秒为单位的数值。4、在redis中设置一个key(活动开始标识)。设置key的过期时间为第三步计算出来的时间。5、展示页面的时候取出key的有效时间。Ttl命令。使用js倒计时。6、一旦活动开始的key失效,说明活动开始。7、需要在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论