2025年3月19日面试总结(二)

软通:
1.redis知识点合集:

(1)项目中一般哪里会用到redis?
               热点数据缓存或者接口数据缓存
               使用redis来缓存一些业务数据的敏感信息,比如:验证码,用户信息,排行榜信息等等
               使用redis来实现分布式锁,解决并发环境下的共享数据的问题


(2)redis常用的数据类型
                list,set,hash,String,Zset


(3)redis的key和value的值都是有限制的,都是上限512M


(4)Redis数据持久化策略:
        RDB:在指定时间间隔内将内存中的数据集以快照形式存入磁盘
                (全量,快照形式,只保存内存数据,体积小,恢复速度快--直接读取数据到内存)
        AOF:以日志形式记录服务器的读写操作
                (增量,指令形式,保存指令,体积大,恢复时间慢--需要一个一个执行指令)


(5)redis数据过期策略
        惰性删除:只有当key的值拿出来的时候才会对数据进行过期检查,这样会导致大量过期的key保存在内存中;
        定期删除:每隔一段时间来抽取一批key来进行过期检查操作并删除key,Redis 底层会通过限制删除操作执行的时长和频率来减少删除操作对 CPU 时间的影响。(默认每秒扫描10次)


(6)redis的数据淘汰策略:
        1:针对有过期时间的key:
                (1)挑选最近最少使用的key进行淘汰
                (2)挑选最不经常使用的key进行淘汰
                (3)挑选将要过期的key进行淘汰
                (4)挑选任意key进行淘汰
        2.淘汰全库数据:
                (1)内存不足时,淘汰最近最少使的数据
                (2)内存不足时,淘汰最不经常使用的key
                (3)选择任意数据集进行淘汰
        3.不淘汰数据
                当内存不足时,插入新数据报错


(7)redis集群模式
                主从,哨兵,Cluster分片集群


(8)redis主从同步

        Redis 的主从同步(replication)机制,允许 Slave 从 Master 那里,通过网络传输拷贝到完整的数据备份,从而达到主从机制。

        主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据。一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库。

(9)redis如何保证和mysql保持数据一致?
        同步双写--》先更新Mysql,再更新Redis,这个时候如果更新Redis失败,可能仍然不⼀致
        删除缓存重新加载--》先删除缓存,在更新Mysql,再次查询时将数据添加到缓存中,仍然可能不一致,多线程环境下,一个线程删除了缓存,还没来得及更新mysql,另一个线程来查询了,会把mysql的老数据查询到缓存中
        延迟双删--》先删除Redis缓存数据再更新Mysql,再次查询的时候在将数据添加到缓存中 , 这种方案可能仍然会有数据 , 这个时候我们可以在删除之后稍微延迟(1-2S)时间 , 再将数据删除 , 再次查询的时候进行缓存 , 这个时候就能保持一致了

(10)数据库有1000万数据 ,Redis只能缓存20w数据, 如何保证Redis中的数据都是热点数据?
        配置Redis的内容淘汰策略为LFU算法 , 这样会把使用频率较低的数据淘汰掉 , 留下的数据都是热点数据。(缓存淘汰策略)

(11)redis的分布式锁怎么实现?
                通过一个指令”SETNX“ ->set if  not exist
               死锁:加超时时间
               超时:看门狗机制,自动为锁续期

 2.springboot的启动注解
        @SpringBootApplication
                (1)@Configuration:将该类标记为应用程序的配置源
                (2)@EnableAutoConfiguration:启用 Spring Boot 的自动配置机制
                (3)@ComponentScan:启用组件扫描(扫描注解)
        我如果想要在springboot启动之前加载一些数据,应该怎么做?
                实现commandLineRunner或者ApplicationRunner的接口来实现初始化数据。

3.线程池的七大参数:
        (1)核心线程数   -》处理器核心数
        (2)最大线程数   -》系统的负载能力和硬件条件
        (3)空闲值   -》针对要处理的任务类型
        (4)空闲值的时间单位
        (5)阻塞队列  --》new  ArrayBlockQueue
        (6)创建线程的方式--》线程工厂  Executors.defaultThreadFactory()
        (7)线程拒绝策略
                        线程拒绝策略:
                        (1)丢弃任务,抛出异常(默认)
                        (2)丢弃任务,不抛出异常
                        (3)抛弃等待最久的任务并把当前任务加入到队列之中
                        (4)直接调用run方法绕过线程池直接执行

4.mysql中explain命令会返回哪些结果?
         select_type: 查询的类型
         type: 访问类型,表示MySQL如何查找索引行。按效率排序从好到坏依次是:systemconsteq_refrefrangeindexALL
   
possible_keys: 可能使用的索引列表
         key: 实际使用的索引
         key_len: 使用的索引长度

         

            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值