目录
一、简单介绍一下项目
二、单点登录
(一)什么是单点登录
(二)单一服务器的登录
(三)单点登录实现方式
(五)同一账号以客户端登录怎么挤掉另一端
三、购物车功能
(一)说一下购物车都有哪些功能
(二)说一下购物车功能是怎么做的
四、redis部分
(一)你说你用了redis缓存,你redis存的是什么格式的数据,是怎么存的
(二)redis为什么可以做缓存?项目中使用redis的目的是什么?redis什么时候使用?
(三)redis常见面试题
五、rabbitmq
(一)rabbitMQ的作用、原理?
(二)activeMQ在项目中如何应用的?
(三)MQ的优点。
(四)mq常见面试题
一、简单介绍一下项目
商城项目是一个b2c项目,基于高并发、海量数据环境进行实现。 是一个分布式项目,分为前后台两套系统实现,前台系统使用Redis实现缓存数据查询,包含首页服务,单点登录服务、购物车服务等。 后台系统包括商品管理,订单管理、权限管理等,主要使用的技术包括spring boot、spring mvc、mybatis plus、rabbitmq、redis等技术实现。
二、单点登录
(一)什么是单点登录
单点登录(Single Sign On),简称SSO. 用户只需要登陆一次就可以访问所有相互信任的应用系统
(二)单一服务器的登录
当⽤户第⼀次访问淘宝的时候,因为还没有登录,会被引导到认证中⼼进⾏登录。
根据⽤户提供的登录信息,认证系统进⾏身份验证,如果通过,则登录成功,并返回给⽤户⼀个认证的凭据(JWT token)。
当⽤户访问天猫时,就会将这个 JWT token 带上,作为⾃⼰认证的凭据。
应⽤系统接收到请求后会把 JWT token 送到认证中⼼进⾏校验。
如果通过校验,⽤户就可以在不⽤再次登录的情况下访问天猫了。
补充:token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 token 给前端。前端可以在每次请求的时候带上 token 证明自己的合法地位。如果这个 token 在服务端持久化(比如存入数据库),那它就是一个永久的身份令牌。
(三)单点登录实现方式
1、token
token是什么: token是按照一定规则生成字符串,字符串可以包含用户信息等
比如: ip#用户名#用户信息 把他们经过加密,得到的字符串。这是一般存储的字符串
用法:
在项目某个模块登陆,登陆后,按照规则生成字符串,把登录之后的信息包含到生成的字符串中,把字符串经过一系列处理(编码+加密),得到它。
把字符串通过cookie返回
再去访问其他模块,在地址栏都带着字符串,在访问模块里面获取到地址栏字符串。
根据字符串获取里面的用户信息,如果可以在cookie中获取到就是登陆成功
2、cookie+ redis实现
在项目的任何一个模块进行登录,登录之后,把数据放到两个地方
redis:在key中:唯一的随机值,在value中:用户数据
cookie:把redis里面生成key的值放到cookie中
访问项目中的其他模块是,发送请求带着cookie进行发送,获取cookie值,拿着cookie做事情
把cookie获取值,到redis进行查询,根据key进行查询,如果查询出来数据就是登陆
cookie机制
1)cookie机制采用的是在客户端保持 HTTP 状态信息的方案。当浏览器访问WEB服务器的某个资源时,WEB服务器会在HTTP响应头中添加一个键值对传送给浏览器,再由浏览器将该cookie放到客户端磁盘的一个文件中,该文件可理解为cookie域(键值对的集合),往后每次访问某个网站时,都会在请求头中带着这个网站的所有cookie值。(至于怎么区分不同网站的cookie的,很简单,每个网站都给他一个唯一标识比如网址等,每次打开某网址时,就查询该网站下的所有cookie值即可。)
2)每一个cookie都有一个name和一个value,且name是唯一的。相同名字时,后者会覆盖掉前者(类似哈希表的key的效果)。
3)一个WEB浏览器也可以存储多个WEB站点提供的Cookie。浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
(四)单点登录系统,如果cookie禁用,你们怎么解决?
如果禁用cookie可以使用url中带参数,把token传递给服务端。当然此方法涉及安全性问题,其实在cookie中保存token同样存在安全性问题。推荐使用sso框架CAS实现单点登录。
(五)同一账号以客户端登录怎么挤掉另一端
用户登录后需要在Cookie中保存用户的id。当用户登录时,从当前所有的Cookie中判断是否有此用户id的存在,如果存在的话就把保存此用户id的Cookie销毁。
三、购物车功能
(一)说一下购物车都有哪些功能
把商品添加到购物车(订购)
删除购物车中已订购的商品、
修改购物车中某一商品的订购数量
清空购物车
显示购物车中商品的清单及数量、价格
(二)说一下购物车功能是怎么做的
一个用户对应一个购物车,一个用户不管买多少商品,都会存在属于自己的购物车中,单点登录一定要在购物车之前。用户添加购物车,登录状态会存放在Redis缓存中
当用户点击购物车跳转的时候判断用户是否没有登录的话就跳转到登录页面
当用户登录之后他得用户信息就会被保存下来,我们就可以将用户的username(单点登录的时候将用户对象封装到字符串中放到redis中)取出来(将封装的用户的字符串转换 成对象)作为redis的key,商品的信息作为value存放在redis中。
1、购物车第一步先判断cookie传递过来的值car+取出的redis里面的存储的字符串转化的对象的username(username唯一)
2、然后判断redis是否存在
3、如果不存在的话就创建一个购物车存放在redis中 key为car+username
4、不能用car+uuid因为每次登陆uuid是会变化的所以用不变的就是username
5、获取用户的名字
//判断是否有购物车
if(dao.exists(key))
{
//若果存在的话 判断集合中是否存在该商品
String redisResult = dao.get(key);
List list = JsonUtils.jsonToList(redisResult, TbItemImages.class);
boolean isExist = false;
//如果购物车存在但是id不存在就重新添加一个并重新set进去
//没有key表示没有购物车 将购物车装到redis中
//查询购物车中的商品 利用tttoken获得redis里面的对象在获得其username
在用户加入购物车的时候,我们需要先看一下 当前商品和规格 在redis里面是否已经存在 如果存在 就直接在数量上面加减 不存在的就直接加入就可以了
四、redis部分
(一)你说你用了redis缓存,你redis存的是什么格式的数据,是怎么存的
redis中存储的都是key-value格式的。拿商品数据来说,key就是商品id,value是商品相关信息的json数据。
(二)redis为什么可以做缓存?项目中使用redis的目的是什么?redis什么时候使用?
1.Redis是key-value形式的nosql数据库。可以快速的定位到所查找的key,并把其中的value取出来。并且redis的所有的数据都是放到内存中,存取的速度非常快,一般都是用来做缓存使用。
2.项目中使用redis一般都是作为缓存来使用的,缓存的目的就是为了减轻数据库的压力提高存取的效率。
3.在互联网项目中只要是涉及高并发或者是存在大量读数据的情况下都可以使用redis作为缓存。当然redis提供丰富的数据类型,除了缓存还可以根据实际的业务场景来决定redis的作用。例如使用redis保存用户的购物车信息、生成订单号。
(三)redis常见面试题
https://blog.csdn.net/m0_48795607/article/details/115642129
五、rabbitmq
(一)rabbitMQ的作用、原理?
采用AMQP高级消息队列协议的一种消息队列技术,最大的特点就是消费并不需要确保提供方存在,实现了服务之间的高度解耦。
rabbitmq的作用就是系统之间进行通信。当然可以使用其他方式进行系统间通信,如果使用rabbitmq的话可以对系统之间的调用进行解耦,实现系统间的异步通信。原理就是生产者生产消息,把消息发送给rabbitmq。rabbitmq接收到消息,然后查看有多少个消费者,然后把消息转发给消费者。
(二)activeMQ在项目中如何应用的?
Activemq在项目中主要是完成系统之间通信,并且将系统之间的调用进行解耦。例如在添加、修改商品信息后,需要将商品信息同步到索引库、同步缓存中的数据以及生成静态页面一系列操作。在此场景下就可以使用activemq。一旦后台对商品信息进行修改后,就向activemq发送一条消息,然后通过activemq将消息发送给消息的消费端,消费端接收到消息可以进行相应的业务处理。
(三)MQ的优点。
异步处理 - 相比于传统的串行、并行方式,提高了系统吞吐量。
应用解耦 - 系统间通过消息通信,不用关心其他系统的处理。
流量削锋 - 可以通过消息队列长度控制请求量;可以缓解短时间内的高并发请求。
日志处理 - 解决大量日志传输。
消息通讯 - 消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等。
(四)mq常见面试题
https://blog.csdn.net/m0_48795607/article/details/116064045



