大厂面试3

spring的aop

springboot4:

    try {
        环绕前代码
                前通知
                逻辑代码
        环绕后代码
                后通知
                返回通知
    }catch (Exception e){
        后通知
        异常通知
    }

执行顺序:  正常情况下  环绕通知前代码,  前置通知, 环绕通知后代码,  后置通知,  返回通知

执行顺序:  异常情况下  环绕通知前代码,  前置通知,  后置通知,  异常通知

 

springboot5:

环绕前代码
try {
    前通知
    逻辑代码
    返回通知
}catch (Exception e){
    异常通知
}finally(){
    后通知
}
环绕后代码

执行顺序:  正常情况下  环绕通知前代码,  前置通知,  返回通知,  后置通知,  环绕通知后代码

执行顺序:  异常情况下  环绕通知前代码,  前置通知,  异常通知,  后置通知,环绕通知后代码

循环引用:

在实际 项目中 禁止同层类注入同层对象作为属性;

循环引用可以使用set方式注入 对象可以解决;

spring内部是通过三级缓存解决循环依赖的.默认情况下  singleton的模式已经解决了循环依赖的问题.  一级依赖  singletonObjects   二级依赖  earlySingletonObject  三级依赖  singletonFactories

spring内部借助map实现 一级\二级\三级缓存 类似 google.guava 借助map实现缓存

spring处理循环引用的过程如下:

redis数据结构以及应用场景:

string: 点赞 和 点踩 数量的统计可以放到redis  某个城市 正在进行中的活动id 可以放到redis中

hash: 购物车可以使用两个 hash 进行存储 一个hash field对应的值存 商品信息和加入时间,另一个hash field对应的值存 商品数量;

list: 晒单分享存储 分享红包领取用户的用户id; 玩吧工作 用户关注某个用户之后其发布的动态信息会使用消息队列同步到redis 的list中;关注的人,拉黑的人

set:没有顺序并且不重复; 抽奖 逻辑可以使用set;  srandmember key  人抽奖品;  spop 奖品抽人 用户id 放到set中;

zset(sorted set): 各种排名可以使用

redis分布式锁: 设置分布式锁的key的过期时间一定要 和创建对象是原子性的操作,使用原子性的命令;redis 分布式锁删除的时候一定要使用 lua语言保证原子性. redisson 可以方便的实现分布式锁; 步骤: 1 注入redisson  2 获取RLock对象  RLock  3 加锁   4 在finally中释放锁  

redis的key淘汰策略 有两个维度 四个方式.  设置过期时间的键\所有键   lru  random  lfu  设置过期时间(ttl);  redis的淘汰方式: 定时(cpu占用大)\定期(折中)\惰性(内存占用大)

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值