一些基础练习题

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 的逻辑是:查找缓存 - 有就返回 -没有就执行方法体 - 将结果缓存起来
答案:ac

10.什么是雪花id,简述雪花id的优缺点?

答案:

雪花ID(Snowflake ID)是一种分布式唯一ID生成算法,它可以生成一个64位的唯一ID,由于其高性能和高可用性,已经被广泛应用于分布式系统中。

雪花ID的优点包括:

1. 唯一性:由于其算法设计,每个ID都是唯一的,不会重复。

2. 时间戳有序:雪花ID的高位部分是时间戳,因此生成的ID是按照时间有序的,可以用于排序。

3. 高性能:雪花ID的生成速度非常快,可以达到每秒数百万个ID的生成速度。

4. 分布式:由于其算法设计,可以在分布式系统中生成唯一ID,不需要集中式的ID生成器。

雪花ID的缺点包括:

1. 依赖于系统时钟:雪花ID的高位部分是时间戳,因此需要保证系统时钟的准确性,如果系统时钟回拨,则会导致ID重复。

2. 无法保证全局唯一性:由于雪花ID的生成依赖于机器ID和序列号,如果机器ID或序列号重复,则会导致ID重复。

总的来说,雪花ID是一种高性能、高可用、分布式唯一ID生成算法,可以在分布式系统中广泛应用。但是,需要注意时钟回拨和机器ID、序列号重复等问题。

11.JWT 和 session 的区别是什么?

答案:

JWT和Session都是用于认证和授权的机制,但它们有着不同的实现方式和应用场景。

JWT(JSON Web Token)是一种基于JSON的开放标准(RFC 7519),用于在网络上传递声明,通常用于身份认证和授权。JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature),其中头部和载荷都是JSON格式的数据,签名用于验证数据的完整性和真实性。JWT的优点包括无状态、可扩展、跨语言支持等,适用于分布式系统和移动端应用等场景。

Session是一种服务器端的会话管理机制,用于跟踪用户的状态和数据。当用户登录时,服务器会创建一个Session对象,将Session ID发送给客户端,客户端在之后的请求中携带Session ID,服务器通过Session ID来识别用户。Session的优点包括安全、可控、可扩展等,适用于Web应用等场景。

JWT和Session的区别主要体现在以下几个方面:

1. 存储位置:Session存储在服务器端,JWT存储在客户端。

2. 无状态 vs 有状态:JWT是无状态的,每个请求都包含了所有必要的信息,不需要在服务器端存储任何信息;而Session是有状态的,需要在服务器端存储会话状态。

3. 扩展性:JWT可以通过添加新的声明来扩展功能,而Session需要在服务器端进行修改才能扩展功能。

4. 跨域支持:JWT可以跨域使用,而Session在跨域时需要进行一些特殊处理。

总的来说,JWT适用于分布式系统和移动端应用等场景,而Session适用于Web应用等场景。


12.简要描述SpringCache的常用注解

答案:

SpringCache是Spring框架中的一个缓存抽象层,它提供了一系列注解,用于缓存的配置和使用。常用的注解包括:

1. @Cacheable:用于标记方法的结果可以被缓存,当下次请求相同的方法时,可以直接从缓存中获取结果,而不用执行方法体。

2. @CachePut:用于标记方法的结果需要被更新到缓存中,即使缓存中已经存在相同的key,也会重新执行方法体,并将结果更新到缓存中。

3. @CacheEvict:用于标记方法的结果需要从缓存中移除,可以指定移除的key或清除所有缓存。

4. @Caching:用于组合多个缓存注解,可以在同一个方法中使用多个缓存注解。

5. @CacheConfig:用于配置缓存的公共属性,可以在类级别上使用,指定缓存的名称、缓存管理器等属性。

这些注解可以与不同的缓存实现结合使用,例如EhCache、Redis、Guava等,方便开发人员快速实现缓存功能。同时,SpringCache还提供了一些高级特性,如缓存的条件判断、缓存的过期时间等,可以根据具体的业务需求进行配置。


13.JWT 的优点是什么?

答案:

JWT(JSON Web Token)的优点包括:

1. 无状态:JWT本身包含了所有的认证和授权信息,不需要在服务端存储任何状态信息,因此可以避免服务端存储大量的Session信息,降低了服务器的负担。

2. 可扩展:JWT使用JSON格式来存储信息,可以很方便地扩展自定义的字段,满足不同的业务需求。

3. 跨语言支持:由于JWT使用标准的JSON格式,因此可以被多种编程语言解析和使用,方便不同系统之间的集成和交互。

4. 安全性高:JWT使用签名来保证数据的完整性和真实性,可以防止数据被篡改或伪造。

5. 适用范围广:JWT适用于各种场景,包括Web应用、移动端应用、分布式系统等,可以实现统一的认证和授权机制。

14.简述Redis的持久化策略?

答案:

Redis的持久化策略有两种:RDB和AOF。

1. RDB持久化:RDB持久化是将Redis在内存中的数据定期写入磁盘中的快照文件,该文件是一个二进制文件,包含了Redis在某个时间点上的数据状态。RDB持久化的优点是占用磁盘空间小,恢复速度快,适合用于备份和灾难恢复。缺点是如果Redis在定期持久化之前宕机,会丢失最后一次持久化后的数据。

2. AOF持久化:AOF持久化是将Redis的所有写操作追加到一个日志文件中,每个写操作都会被记录下来,以文本格式存储。AOF持久化的优点是数据安全性高,即使Redis宕机,也可以通过重放日志文件来恢复数据。缺点是占用磁盘空间大,恢复速度相对较慢。

Redis也支持将RDB和AOF持久化策略同时使用,这样可以兼顾两种持久化策略的优点,提高数据的安全性和恢复速度。

15.列举Redis的常用数据类型?

答案:

Redis支持多种数据类型,包括:

1. 字符串(string):最基本的数据类型,可以存储字符串、整数或者浮点数。
2. 列表(list):按照插入顺序排序的字符串元素集合,可以在列表的两端进行插入和删除操作。
3. 集合(set):不允许重复元素的无序集合,支持交集、并集、差集等操作。
4. 有序集合(sorted set):与集合类似,但是每个元素都关联着一个分数,根据分数进行排序。
5. 哈希(hash):由字段和值组成的无序散列表,适合存储对象。
6. 地理位置(geospatial):支持地理位置信息存储和查询的数据类型,可以用于实现附近的人、附近的店等功能。

这些数据类型都可以通过Redis提供的命令进行操作和管理。


16.跨域的常用解决方案?

答案:

跨域是指在浏览器中,当前网页所在的域名与请求资源的域名不同,浏览器会阻止页面发起跨域请求。常用的跨域解决方案包括:

1. JSONP:通过在页面中添加一个 `<script>` 标签来加载远程的 JavaScript 文件,该文件返回一个函数调用,从而实现跨域请求。
2. CORS:跨域资源共享,是一种标准的跨域解决方案,需要服务器端设置响应头,允许指定的域名访问资源。
3. 代理:通过在服务器端设置代理,让服务器去请求需要访问的资源,并将结果返回给客户端,从而实现跨域请求。
4. WebSocket:通过 WebSocket 协议实现跨域通信。
5. postMessage:通过 HTML5 的 postMessage 方法实现跨窗口通信,从而实现跨域请求。


17.什么是redis的缓存雪崩?如何解决

答案:

Redis缓存雪崩指的是由于某些原因(如缓存数据的过期时间相同、大量请求同时访问缓存、服务器宕机等)导致缓存中的大量数据同时失效或者被清空,导致大量请求直接访问数据库,从而引发数据库压力过大,甚至崩溃的现象。

为了避免Redis缓存雪崩,可以采取以下措施:

1. 设置不同的过期时间:通过设置不同的过期时间,避免所有缓存同时失效,减少缓存雪崩的发生。
2. 预热缓存数据:在系统启动时,将一些常用的数据预先放入缓存中,避免在缓存失效时,大量请求直接访问数据库。
3. 使用分布式锁:通过使用分布式锁,保证同一时刻只有一个请求访问数据库,避免大量请求同时访问数据库。
4. 使用缓存降级:在缓存失效的情况下,可以通过缓存降级,直接访问数据库,避免数据库崩溃。
5. 使用多级缓存:通过使用多级缓存,将数据分散到多个缓存中,避免所有缓存同时失效,减少缓存雪崩的发生。


18.什么是redis的缓存穿透?如何解决
答案:

Redis缓存穿透指的是恶意请求或者非法请求,请求的数据在缓存中不存在,导致大量请求直接访问数据库,从而引发数据库压力过大。常见的解决方案包括:

1. 布隆过滤器:将所有可能存在的数据哈希到一个足够大的 bitmap 中,请求时先对请求参数进行哈希,再在 bitmap 中查询是否存在,如果不存在则可以直接返回,否则再访问数据库。
2. 在缓存中保存不存在的数据:将请求的 key 对应的 value 设置为 null 或者一个特定的值,这样在缓存中就有了对应的值,可以避免缓存穿透导致数据库压力过大。
3. 设置较短的过期时间:对于一些热点数据,可以将过期时间设置为短暂的时间,让缓存数据能够及时更新,避免缓存过期后大量请求直接访问数据库。
4. 预热缓存数据:在系统启动时,预先将一些热点数据放入缓存中,避免缓存穿透导致大量请求直接访问数据库。
5. 互斥锁:在缓存失效的时候,使用互斥锁,只允许一个请求访问数据库,其他请求等待,从而避免缓存穿透。
6. 分布式锁:在分布式环境下,使用分布式锁,保证同一时间只有一个请求访问数据库,避免缓存穿透。
7. 限流策略:通过限制请求的 QPS(每秒查询率)或者并发数,避免大量请求同时访问数据库,从而避免缓存穿透。


19.什么是redis的缓存击穿?如何解决

答案:

Redis缓存击穿指的是某个热点数据缓存失效时,大量请求直接访问数据库,从而引发数据库压力过大。常见的解决方案包括:

1. 设置较短的过期时间:通过设置较短的过期时间,可以避免缓存失效时,大量请求直接访问数据库,减轻数据库压力。
2. 预热缓存数据:在系统启动时,将一些常用的数据预先放入缓存中,避免在缓存失效时,大量请求直接访问数据库。
3. 互斥锁:在缓存失效时,通过互斥锁保证只有一个请求访问数据库,其他请求等待,避免大量请求同时访问数据库。
4. 分布式缓存:通过使用分布式缓存,将热点数据分散到多个缓存节点上,避免单个节点失效引发缓存击穿问题。


20.Redis的数据过期策略?

答案:

Redis的数据过期策略主要有两种:惰性过期和定期过期。

1.惰性过期:当一个键过期时,不会立即从内存中删除,而是在下次访问该键时,判断该键是否过期。如果过期,则删除该键并返回空值。这种方式可以避免过多的CPU资源消耗,但也会导致内存占用较高。

2.定期过期:Redis默认每隔100ms检查过期键并删除。可以通过修改配置文件中的`hz`参数来调整检查频率。这种方式可以及时释放内存,但会占用一定的CPU资源。

在使用Redis时,可以根据具体的场景选择合适的过期策略。同时,Redis也提供了手动删除过期键的命令`DEL`和手动设置过期时间的命令`EXPIRE`和`EXPIREAT`。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值