企业面试题整理html
淘淘商城前端
1. 淘淘网站并发数:
通过压力测试能够支持3000左右的并发,能够知足目前的业务需求。因为咱们的系统是分布式架构,支持水平扩展,若是未来并发量提升的话,能够增长服务器来提升并发量。mysql
2. 人员配置
产品经理:3人,肯定需求以及给出产品原型图。面试
项目经理:1人,项目管理。redis
前端团队:5人,根据产品经理给出的原型制做静态页面。spring
后端团队:20人,实现产品功能。sql
测试团队:5人,测试全部的功能。数据库
运维团队:3人,项目的发布以及维护。json
3. 开发周期
采用迭代开发的方式进行,通常一次迭代的周期为一个月左右。后端
4. Sku
最小库存量单位。
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. 电商活动倒计时方案
一、肯定一个基准时间。可使用一个sql语句从数据库中取出一个当前时间。SELECT NOW();
二、活动开始的时间是固定的。
三、使用活动开始时间-基准时间能够计算出一个秒为单位的数值。
四、在redis中设置一个key(活动开始标识)。设置key的过时时间为第三步计算出来的时间。
五、展现页面的时候取出key的有效时间。Ttl命令。使用js倒计时。
六、一旦活动开始的key失效,说明活动开始。
七、须要在活动的逻辑中,先判断活动是否开始。
10. 秒杀抢购库存解决方案
一、把商品的数量放到redis中。
二、秒杀时使用decr命令对商品数量减一。若是不是负数说明抢到。
三、一旦返回数值变为0说明商品已售完。
11. dubbo服务开发流程,运行流程?zookeeper注册中心的做用?
使用流程:
第一步:要在系统中使用dubbo应该先搭建一个注册中心,通常推荐使用zookeeper。
第二步:有了注册中心而后是发布服务,发布服务须要使用spring容器和dubbo标签来发布服务。而且发布服务时须要指定注册中心的位置。
第三步:服务发布以后就是调用服务。通常调用服务也是使用spring容器和dubbo标签来引用服务,这样就能够在客户端的容器中生成一个服务的代理对象,在action或者Controller中直接调用service的方法便可。
Zookeeper注册中心的做用主要就是注册和发现服务的做用。相似于房产中介的做用,在系统中并不参与服务的调用及数据的传输。
12. redis为何能够作缓存?项目中使用redis的目的是什么?redis何时使用?
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框架实现单点登陆。
https://www.apereo.org/projects/cas
17. 当技术面试官问到你某个技术点更深层次研究时,本身没有深刻了解怎么回答?
若是没有深刻研究就直接回答不知道就能够了。
18. solr怎么设置搜索结果排名靠前(得分)?
能够设置文档中域的boost值,boost值越高计算出来的相关度得分就越高,排名也就越靠前。此方法能够把热点商品或者是推广商品的排名提升。
19. solr的原理
Solr是基于Lucene开发的全文检索服务器,而Lucene就是一套实现了全文检索的api,其本质就是一个全文检索的过程。全文检索就是把原始文档根据必定的规则拆分红若干个关键词,而后根据关键词建立索引,当查询时先查询索引找到对应的关键词,并根据关键词找到对应的文档,也就是查询结果,最终把查询结果展现给用户的过程。
20. solr里面IK分词器的原理
IK分析器的分词原理本质上是词典分词。如今内存中初始化一个词典,而后在分词过程当中逐个读取字符,和字典中的字符相匹配,把文档中的全部的词语拆分出来的过程。
21. 支付接口是怎么作的?
面试中能够说支付这部分不是咱们作的,咱们项目中并无涉及支付部分的处理。若是想了解支付是如何实现能够参考以前学过的易宝支付相关处理以及支付宝、微信支付相关文档。
支付宝:
https://doc.open.alipay.com/doc2/apiDetail.htm?spm=a219a.7629065.0.0.eeTXH8&apiId=850&docType=4#
微信支付:
https://mp.weixin.qq.com/cgi-bin/readtemplate?t=business/faq_tmpl
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已经提供了完整的全文检索解决方案。