面试常问问题(一)

1.什么是雪花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并不是统一向上自增。

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

JWT 和 session 都是用于身份认证和授权的机制,但它们的实现方式不同。

session 是服务器存储用户状态的一种方式,通常通过在服务器上创建一个唯一的会话 ID,将用户的身份信息保存在会话中,然后将会话 ID 发送给客户端,客户端在后续请求中携带会话 ID,服务器通过会话 ID 来获取用户的身份信息。

JWT 则是通过在客户端和服务器之间传递一个加密的、自包含的 Token 来实现身份认证和授权,避免了服务器存储用户状态的问题,同时也降低了网络传输和服务器负载等问题。

概括:

存储位置:jwt将信息通常是存放在客户端,session是将信息存放在服务器

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

@EnableCaching 开启基于注解的缓存

@Cacheable 将数据存放在spring缓存中,在下次执行方法时,查询缓存中是否有数据,如果有则则执行方法,没有则返回

@Cacheput 将数据存放在缓存中,不管缓存中是否有数据,都将数据存放进去,通常用于更新操作。

  • @Cacheable 的逻辑是:查找缓存 - 有就返回 -没有就执行方法体 - 将结果缓存起来;
  • @Cacheput  的逻辑是:执行方法体 - 将结果缓存起来

@CacheEvict 将缓存中的数据清空

4.JWT 的优点是什么

jwt使用数字签名来验证身份,具有可靠的安全性

存放在客户端,无需去服务器中获取

具有自包含、易于传输和跨平台等特点:由于 JWT 中包含了用户的身份信息和其他声明信息,因此可以在多个应用之间共享用户的身份信 息,避免了重复登录和身份验证的过程,同时也降低了网络传输和服务器负载等问题。

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

RDB:在指定时间的间隔内,将内存中的数据以快照的方式写入磁盘,会有一个dump.rdb文件,适合大规模数据的恢复,对数据库的完整性和一致性要求不高,优点:只有一个dump.rdb文件,便于存储,性能最大化,子程序来进行写操作,主程序继续处理命令,缺点:数据安全性低,rdb每隔一段时间备份,再次期间,如果发生异常会导致数据不完整性。

AOF:以日志的形式记录每一个操作,只允许追加文件,不允许改写文件,它通过记录redis的所有命令,没执行一次就记录一次数据,保存在aof文件中。优点:保证了数据的完整性和安全性。缺点:文件大小比rdb文件大,如果数据较多的情况下,恢复数据的时间较长,启动速度慢。

6.列举Redis的常用数据类型

String、list、hash、set、zset

7.跨域的常用解决方案

使用注解@CrossOrigin

配置类实现WebMvcConfigurer

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

是指在某一个时间段,缓存集中过期失效。所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。

解决方案:

设置过期时间为随机,防止同一时间内所有key都过期,确保任何时候都有key存在。

保证缓存层服务高可用性。

对缓存系统做实时监控,报警。

依赖隔离组件为后端限流并降级。

做好持久化,以便数据的快速恢复。

9.什么是redis的缓存穿透?如何解决?

大量非法数据直接访问数据库,数据库压力过大导致崩溃

解决方案:设置布隆过滤器

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

个别热点key不存在,刚好对这些热点的访问量巨大,就刚好这些大量请求直接访问数据库,数据库压力变大导致崩溃

解决方案:设置热点key永不过期(或者在莫一段热点时期key永不过期)

11.Redis的数据过期策略?

定时删除
在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除
惰性删除
key过期的时候不删除,每次从数据库获取key的时候去检查是否过期,若过期,则删除,返回null。
定期删除
每隔一段时间执行一次删除(在redis.conf配置文件设置hz,1s刷新的频率)过期key操作

定期删除:每隔一段时间redis会检查一下这个key是否过期,如果过期就删除,但如果redis里有大量的key设置过期,全部去检索一遍cpu负载会很高,并且定期删除,可能还会导致大量key过期了但还未被删除,因此还需要要惰性删除。

惰性删除:在获得一个key时,redis会检查是否过期,如果过期就删除。

定期删除+惰性删除虽然会使那些过期的key最终被删除,但是没有及时去查,任然会导致redis中堆积大量的过期key导致redis内存耗尽,因此又引入了内存淘汰机制。

你可能感兴趣的:(面试,职场和发展)