商城项⽬⾯试问题整理
1.⽹站并发数:
经过压⼒测试可以⽀持3000左右的并发,可以满⾜⽬前的业务需求。由于我们的系统是分布式架构,⽀持⽔平扩展,如果将来并发量提⾼的话,可以增加服务器来提⾼并发量。
2.⼈员配置
产品经理:3⼈,确定需求以及给出产品原型图。
项⽬经理:1⼈,项⽬管理。
前端团队:5⼈,根据产品经理给出的原型制作静态页⾯。
后端团队:20⼈,实现产品功能。
测试团队:5⼈,测试所有的功能。
运维团队:3⼈,项⽬的发布以及维护。
3.开发周期
采⽤迭代开发的⽅式进⾏,⼀般⼀次迭代的周期为⼀个⽉左右。
4.Sku/spu
最⼩库存量单位。
Sku==商品id
5.你说你⽤了redis缓存,你redis存的是什么格式的数据,是怎么存的
redis中存储的都是key-value格式的。拿商品数据来说,key就是商品id,value是商品相关信息的json数据。
6.你前台portal采⽤4台服务器集部署,那能前台⾼并发访问性能提上去了,那数据库会不会造成⼀个瓶颈,这⼀块你是怎么处理的?portal系统在⾼并发的情况下如果每次请求都请求都查询数据库确实会出现数据库的瓶颈。为了降低数据库压⼒,在服务层会添加⼀个缓存,⽤redis实现,这样的话请求先到缓存中查是否有缓存的内容,如果有直接从缓存中取数据,如果没有再到数据库中查询。这样数据库的压⼒就不会那么⼤了。
7.你购物车存cookie⾥边可以实现不登录就可以使⽤购物车那么我现在没有登录把商品存购物车了然后
登录了然后我换台电脑并且登录了还能不能看见我购物车的信息?如果看不到怎么做到cookie同步,就是在另外⼀台电脑上可以看到购物车信息
淘淘商城现阶段使⽤的仅仅是把购物车的商品写⼊cookie中,这样服务端基本上么有存储的压⼒。但是弊端就是⽤户更换电脑后购物车不能同步。打算下⼀步这么实现:当⽤户没有登录时向购物车添加商品是添加到cookie中,当⽤户登录后购物车的信息是存储在redis中的并且是跟⽤户id向关联的,此时你更换电脑后使⽤同⼀账号登录购物车的信息就会展⽰出来。
8.如果⽤户⼀直添加购物车添加商品怎么办?并且他添加⼀次你查询⼀次数据库?互联⽹上⽤户那么多,这样会对数据库造成很⼤压⼒你怎么办?
当前我们使⽤cookie的⽅式来保存购物车的数据,所以当⽤户往购物车中添加商品时,并不对数据库进⾏操作。将来把购物车商品放⼊redis 中,redis是可以持久化的可以永久保存,此时就算是频繁的往购物车中添加数据也没⽤什么问题。
9.电商活动倒计时⽅案
1. 确定⼀个基准时间。可以使⽤⼀个sql语句从数据库中取出⼀个当前时间。SELECT NOW();
2. 活动开始的时间是固定的。
3. 使⽤活动开始时间-基准时间可以计算出⼀个秒为单位的数值。
4. 在redis中设置⼀个key(活动开始标识)。设置key的过期时间为第三步计算出来的时间。
5. 展⽰页⾯的时候取出key的有效时间。Ttl命令。使⽤js倒计时。
6. ⼀旦活动开始的key失效,说明活动开始。
7. 需要在活动的逻辑中,先判断活动是否开始。
10.秒杀抢购库存解决⽅案
1. 把商品的数量放到redis中。
2. 秒杀时使⽤decr命令对商品数量减⼀。如果不是负数说明抢到。
3. ⼀旦返回数值变为0说明商品已售完。
11.dubbo服务开发流程,运⾏流程?zookeeper注册中⼼的作⽤?
使⽤流程:
第⼀步:要在系统中使⽤dubbo应该先搭建⼀个注册中⼼,⼀般推荐使⽤zookeeper。
第⼆步:有了注册中⼼然后是发布服务,发布服务需要使⽤spring容器和dubbo标签来发布服务。并且发布服务时需要指定注册中⼼的位置。
第三步:服务发布之后就是调⽤服务。⼀般调⽤服务也是使⽤spring容器和dubbo标签来引⽤服务,这样就可以在客户端的容器中⽣成⼀个服务的代理对象,在action或者Controller中直接调⽤service的⽅法即可。
Zookeeper注册中⼼的作⽤主要就是注册和发现服务的作⽤。类似于房产中介的作⽤,在系统中并不参与服务的调⽤及数据的传输。
1.Redis是key-value形式的nosql数据库。可以快速的定位到所查的key,并把其中的value取出来。并且redis的所有的数据都是放到内存中,存取的速度⾮常快,⼀般都是⽤来做缓存使⽤。
2.项⽬中使⽤redis⼀般都是作为缓存来使⽤的,缓存的⽬的就是为了减轻数据库的压⼒提⾼存取的效率。
3.在互联⽹项⽬中只要是涉及⾼并发或者是存在⼤量读数据的情况下都可以使⽤redis作为缓存。当然redis提供丰富的数据类型,除了缓存还可以根据实际的业务场景来决定redis的作⽤。例如使⽤redis保存⽤户的购物车信息、⽣成订单号、访问量计数器、任务队列、排⾏榜等。
13.acitveMQ的作⽤、原理?(⽣产者。消费者。 p2p、订阅实现流程)
Activemq的作⽤就是系统之间进⾏通信。当然可以使⽤其他⽅式进⾏系统间通信,如果使⽤Activemq的话可以对系统之间的调⽤进⾏解耦,实现系统间的异步通信。原理就是⽣产者⽣产消息,把消息发送给activemq。Activemq接收到消息,然后查看有多少个消费者,然后把消息转发给消费者,此过程中⽣产者⽆需参与。消费者接收到消息后做相应的处理和⽣产者没有任何关系。
14.activeMQ在项⽬中如何应⽤的?
Activemq在项⽬中主要是完成系统之间通信,并且将系统之间的调⽤进⾏解耦。例如在添加、修改商品信息后,需要将商品信息同步到索引库、同步缓存中的数据以及⽣成静态页⾯⼀系列操作。在此场景下就可以使⽤activemq。⼀旦后台对商品信息进⾏修改后,就向activemq发送⼀条消息,然后通过activemq将消息发送给消息的消费端,消费端接收到消息可以进⾏相应的业务处理。
15.activeMQ如果数据提交不成功怎么办?
Activemq有两种通信⽅式,点到点形式和发布订阅模式。如果是点到点模式的话,如果消息发送不成功此消息默认会保存到activemq服务端知道有消费者将其消费,所以此时消息是不会丢失的。
如果是发布订阅模式的通信⽅式,默认情况下只通知⼀次,如果接收不到此消息就没有了。这种场景只适⽤于对消息送达率要求不⾼的情况。如果要求消息必须送达不可以丢失的话,需要配置持久订阅。每个订阅端定义⼀个id,在订阅是向activemq注册。发布消息和接收消息时需要配置发送模式为持久化。此时如果客户端接收不到消息,消息会持久化到服务端,直到客户端正常接收后为⽌。
16.当被问到某个模快存在安全性问题(sso单点登录系统)时,如何回答?
⽬前商城的sso系统的解决⽅案中直接把token保存到cookie中,确实存在安全性问题。但是实现简单⽅便。如果想提⾼安全性可以使⽤cas 框架实现单点登录。
17.当技术⾯试官问到你某个技术点更深层次研究时,⾃⼰没有深⼊了解怎么回答?
如果没有深⼊研究就直接回答不知道就可以了。
18.solr怎么设置搜索结果排名靠前(得分)?
可以设置⽂档中域的boost值,boost值越⾼计算出来的相关度得分就越⾼,排名也就越靠前。此⽅法可以把热点商品或者是推⼴商品的排名提⾼。
19.solr的原理
Solr是基于Lucene开发的全⽂检索服务器,⽽Lucene就是⼀套实现了全⽂检索的api,其本质就是⼀个全⽂检索的过程。全⽂检索就是把原始⽂档根据⼀定的规则拆分成若⼲个关键词,然后根据关键词创建索引,当查询时先查询索引到对应的关键词,并根据关键词到对应的⽂档,也就是查询结果,最终把查询结果展⽰给⽤户的过程。
20.solr⾥⾯IK分词器的原理
IK分析器的分词原理本质上是词典分词。现在内存中初始化⼀个词典,然后在分词过程中逐个读取字符,和字典中的字符相匹配,把⽂档中的所有的词语拆分出来的过程。
21.⽀付接⼝是怎么做的?
⾯试中可以说⽀付这部分不是我们做的,我们项⽬中并没有涉及⽀付部分的处理。如果想了解⽀付是如何实现可以参考之前学过的易宝⽀付
相关处理以及⽀付宝、⽀付相关⽂档。
⽀付宝:
⽀付:
22.业务如何说?先说业务、说表、说具体实现?
先说总体的业务流程,然后再说具体业务的实现⽅法及使⽤的技术。最后说你在系统中负责的内容。不需要说表结构。
23.单点登录系统,如果cookie禁⽤,你们怎么解决?
如果禁⽤cookie可以使⽤url中带参数,把token传递给服务端。当然此⽅法涉及安全性问题,其实在cookie中保存token同样存在安全性问题。推荐使⽤sso框架CAS实现单点登录。
24.你们做移动端没有,如果没有移动端,你们为什么做单点登录?
单点登录并不是为移动端准备的,移动端有⾃⼰的登录⽅式。单点登录是解决在同⼀个公司内部多个互信⽹站之间进⾏跳转时不需要多次登录,多个系统统⼀登录⼊⼝。
25.单点登录的核⼼是什么?
单点登录的核⼼是如何在多个系统之间共享⾝份信息。
26.除了单点登陆,还做过什么登陆的⽅式?
这是什么狗屁问题?除了单点登录那就是普通登录⽅式,⽤户在同⼀个公司的多个系统之间跳转时需要多次登录。怎么看项目是什么框架
27.单点登录,http⽆状态的,别⼈模仿如何在后端处理
http是⽆状态的,如果别⼈模仿浏览器发送http请求,⼀般后台是⽆法识别的。如果对安全要求⾼的情况下应该是https协议。可以保证在通信过程中⽆法窃取通信内容。
28.安全性问题(别的⽹站使⽤爬⾍技术爬你的⽹站怎么办?有没有安全措施)
单位时间内请求次数超过某个阈值就让输⼊验证码,可以极⼤降低抓取的速度,如果多次超过某个阀值可以加⼊⿊名单。还有就是页⾯内容使⽤json返回,数据经常变⼀变格式,或者js动态⽣成页⾯内容。
29.商品存⼊数据库怎么保证数据库数据安全?
1.对⽤户安全管理
⽤户操作数据库时,必须通过数据库访问的⾝份认证。删除数据库中的默认⽤户,使⽤⾃定义的⽤户及⾼强度密码。
2.定义视图
为不同的⽤户定义不同的视图,可以限制⽤户的访问范围。通过视图机制把需要保密的数据对⽆权存取这些数据的⽤户隐藏起来,可以对数据库提供⼀定程度的安全保护。实际应⽤中常将视图机制与授权机制结合起来使⽤,⾸先⽤视图机制屏蔽⼀部分保密数据,然后在视图上进⼀步进⾏授权。
3.数据加密
数据加密是保护数据在存储和传递过程中不被窃取或修改的有效⼿段。
4.数据库定期备份
5)审计追踪机制
审计追踪机制是指系统设置相应的⽇志记录,特别是对数据更新、删除、修改的记录,以便⽇后查证。⽇志记录的内容可以包括操作⼈员的名称、使⽤的密码、⽤户的IP地址、登录时间、操作内容等。若发现系统的数据遭到破坏,可以根据⽇志记录追究责任,或者从⽇志记录中判断密码是否被盗,以便修改密码,重新分配权限,确保系统的安全。
30.订单表的数据量太⼤,我把订单分到许多表中,那么我我想⽤⼀条sql查处所有的订单,怎么解决?
分库情况下:可以使⽤mycat数据库中间件实现多个表的统⼀管理。虽然物理上是把⼀个表中的数据保存到多个数据库中,但是逻辑上还是⼀个表,使⽤⼀条sql语句就可以把数据全部查询出来。
单库情况下:需要动态⽣成sql语句。先查询订单相关的表,然后将查询多个表的sql语句使⽤union连接即可。
31.咱们单点登录模块中,别⼈伪造我们cookie中的token怎么办?
服务端是⽆法阻⽌伪造cookie的,如果对安全性要求⾼的话可以可使⽤cas框架。
32.第⼀个是当两个客户同时买⼀件商品时库存只有⼀个了,怎么控制?
可以使⽤mysql的⾏锁机制,实现乐观锁,在更新商品之前将商品锁定,其他⽤户⽆法读取,当此⽤户操作完毕后释放锁。当并发量⾼的情
况下,需要使⽤缓存⼯具例如redis来管理库存。
33.对数据库只是采⽤了读写分离,并没有完全解决数据库的压⼒,那么有什么办法解决?
如果数据库压⼒确实很⼤的情况下可以考虑数据库分⽚,就是将数据库中表拆分到不同的数据库中保存。可以使⽤mycat中间件。
34.同⼀账号以客户端登录怎么挤掉另⼀端。
⽤户登录后需要在Session中保存⽤户的id。当⽤户登录时,从当前所有的Session中判断是否有此⽤户id的存在,如果存在的话就把保存此⽤户id的Session销毁。
35.solr的索引查询为什么⽐数据库要快。
Solr使⽤的是Lucene API实现的全⽂检索。全⽂检索本质上是查询的索引。⽽数据库中并不是所有的字段都建⽴的索引,更何况如果使⽤like查询时很⼤的可能是不使⽤索引,所以使⽤solr查询时要⽐查数据库快。
36.solr索引库个别数据索引丢失怎么办。
⾸先Solr是不会丢失个别数据的。如果索引库中缺少数据,那就向索引库中添加。(靠!什么狗屁问题!!!)
37.Lucene索引优化。
直接使⽤Lucene实现全⽂检索已经是过时的⽅案,推荐使⽤solr。Solr已经提供了完整的全⽂检索解决⽅案。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论