[单选题]
1. JWT 的签名部分是用来做什么的?
A. 确保消息的完整性
B.确保消息的机密性
C.确保消息的可用性
D.以上都不是
答案: A
2.JWT 的头部部分是用来做什么的?
A.声明类型和加密算法
B.存储用户信息
C.存储访问权限
D.储存数据加密方式
答案: A
3.JWT 可以被用作什么?
A.用户认证
B.数据加密
C.传输数据
D.A、B、C 都是
答案: D
4.以下哪个不是 JWT 的组成部分?
A.头部
B.载荷
C.签名
D.数据库
答案: D
5.关于SpringCache中的Cacheable注解,说法错误的是?
A.标注在方法上,也可以标注在类上
B.value缓存名、 key缓存键值
C.只能标注在方法上
D.标注在方法上表示缓存该方法的返回值
答案: C
6.下面哪种 ID 生成机制需要访问数据库?
A.自增长 ID
B.UUID
C.Snowflake
D. 短 ID
答案: A
7.JWT 的签名部分是怎么实现的?
A.使用密钥对整个 JWT 进行签名
B.使用密钥对头部和载荷分别进行签名
C.使用非对称加密算法对整个 JWT 进行签名
D.不需要签名
答案: B
8.JWT 可以使用哪些算法来对载荷进行签名和加密?
A. HS256
B.RS256
C.ES256
D.以上都是
答案: D
[多选题]
9.关于SpringCache中,CacheAble和CachePut注解说法正确的是?
A.@Cacheable 的逻辑是:查找缓存 - 有就返回 -没有就执行方法体 - 将结果缓存起来
B.@Cacheable 的逻辑是:执行方法体 - 将结果缓存起来
C.@CachePut 的逻辑是:执行方法体 - 将结果缓存起来
D.@CachePut 的逻辑是:查找缓存 - 有就返回 -没有就执行方法体 - 将结果缓存起来
答案: A C
[简答题]
10.什么是雪花id,简述雪花id的优缺点?
回答:
snowflake是Twitter开源的分布式ID生成算法,结果是64bit的Long类型的ID,有着全局唯一和有序递增的特点。
优点
1、生成速度快经测试,SnowFlake每秒能够产生26万ID左右。
2、生成id有序,雪花算法生成的id整体是递增的,但是不是连续的。
3、本地即可生成,无需消耗额外的资源,如zookeeper、redis等。
缺点
1、id长度比较长(大概18位)
2、id不连续,生成的id是无规则的。
3、如果机器时钟回拨,就会导致id生成失败。
4、不同机器的时钟不是完全一致的,导致全局的id并不是统一向上自增。
11. JWT 和 session 的区别是什么?
回答:
JWT 和 session 都是用于身份认证和授权的机制,但它们的实现方式不同。
session 是服务器存储用户状态的一种方式,通常通过在服务器上创建一个唯一的会话 ID,将用户的身份信息保存在会话中,然后将会话 ID 发送给客户端,客户端在后续请求中携带会话 ID,服务器通过会话 ID 来获取用户的身份信息。
JWT 则是通过在客户端和服务器之间传递一个加密的、自包含的 Token 来实现身份认证和授权,避免了服务器存储用户状态的问题,同时也降低了网络传输和服务器负载等问题。
做个游乐场的比喻:
session 就是登录后,我们允许你进入我们公司的游乐场游玩。 jwt 就是登录后,我们会给你一个令牌,这个令牌,代表着你是我们公司的用户。你拿着这个令牌,可以去与我们公司合作的游乐场,也可以进我们公司的游乐场。
也就是说,session是连着服务器的,session能影响到的就只有与session相关联的,相当于当你登录的时候,session告诉其他所有它能寻找到的服务说你已登录。
但是jwt是一个令牌,也就是说,当你登录的时候,每个服务不需要相互告知。而当你需要某个服务的时候,这个服务只要要求你给它看令牌即可,这就相当于古时候的士兵,不是看某个固定人的指挥,而是看拿着虎符的人的指挥,权限由物品来证明。
12.简要描述SpringCache的常用注解
回答:
@Cacheable
定义在方法上,待方法运行结束时,缓存该方法的返回值。
每次执行该方法前,会先去缓存中查有没有相同条件下,缓存的数据,有的话直接拿缓存的数据,没有的话执行方法,并将执行结果返回。
@CachePut
通常用于更新操作。
@Cacheable 的逻辑是:查找缓存 - 有就返回 -没有就执行方法体 - 将结果缓存起来;
@CachePut 的逻辑是:执行方法体 - 将结果缓存起来
@CacheEvit
删除缓存,每次调用它注解的方法,就会执行删除指定的缓存
13.JWT 的优点是什么?
回答:
JWT 的优点在于它具有自包含、易于传输和跨平台等特点。由于 JWT 中包含了用户的身份信息和其他声明信息,因此可以在多个应用之间共享用户的身份信 息,避免了重复登录和身份验证的过程,同时也降低了网络传输和服务器负载等问题。
14.简述Redis的持久化策略?
回答:
RDB是Redis的一种数据持久化到磁盘的策略,是一种以内存快照形式保存Redis数据的方式。所谓快照,就是把某一时刻的状态以文件的形式进行全量备份到磁盘,这个快照文件就称为RDB文件,其中RDB是Redis DataBase的缩写。
AOF 持久化功能则提供了一种更为可靠的持久化方式。 每当 Redis 接受到会修改数据集的命令时,就会把命令追加到 AOF 文件里,当你重启 Redis 时,AOF 文件里的命令会被重新执行一次,重建数据。
这就好比做一个视频的时候,RDB的呈现方式是使用多个图片,每一帧放入每一帧的图片,AOF就是使用录像的方式。
RDB就是将每一张图片拼接成一个视频。
AOF则会将所有细节记录下来。
比如你在5s内拿起一个杯子,又放下(即在RDB间隔内做了一个不会对数据有变化的操作)。RDB的记录就不会有这个行为的记录,而AOF则会记录下来。
15.列举Redis的常用数据类型?
回答:
字符串,集合,哈希数据, 列表, 有序集合
16.跨域的常用解决方案?(SpringBoot)
回答:
@CrossOrgin
配置类实现WebMvcConfigurer
17.什么是redis的缓存雪崩?如何解决
回答:
【缓存雪崩】是指在某一个时间段,缓存集中过期失效。所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。
解决方案:
- 保证缓存层服务高可用性。
- 对缓存系统做实时监控,报警。
- 依赖隔离组件为后端限流并降级。
- 做好持久化,以便数据的快速恢复。
18.什么是redis的缓存穿透?如何解决
回答:
是指缓存和数据库中都没有的数据,而用户(黑客)不断发起请求。
解决方法:使用布隆过滤器,设置用户白名单,只有白名单中的用户才能查询。又或者设置用户黑名单,当某种个请求(同一个ip)多次请求时,就把它直接拉黑,直接拒绝所有黑名单中的用户。
19.什么是redis的缓存击穿?如何解决
回答:
而缓存击穿是一个热点的Key,有大并发集中对其进行访问,突然间这个Key失效了,导致大并发全部打在数据库上,导致数据库压力剧增。这种现象就叫做缓存击穿。
对于热点的key可以设置永不过期的key。
20. Redis的数据过期策略?
回答:
定时删除
在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除
惰性删除
key过期的时候不删除,每次从数据库获取key的时候去检查是否过期,若过期,则删除,返回null。
定期删除
每隔一段时间执行一次删除(在redis.conf配置文件设置hz,1s刷新的频率)过期key操作