自学内容网 自学内容网

面经学习(越亮传奇实习)

个人评价

有两个面试官,两个面试官气场还是挺强的,八股文还是问的比较多的,整体的难度还是比较小的。

介绍一下实习项目吧? (合并写请求)

的实习项目主要就是做C端的在线教育项目,并且呢,它采用的基于alibaba那套落地的微服务方案。可能也是因为我是实习生的源固,我没有负责黄金链路,从用户登录到用户下单再到用户观看视频的整个流程,我主要负责的就是负责辅助模块的开发。评论区,点赞,排行榜模块的开发。

那我给您介绍一下我记得比较清楚的难点吧。

当时要做一个续播功能,也就是用户切换其他设备的时候也能从对应的位置上继续观看,本质上就是去修改数据库中观看记录表的数据,在刚刚开始的想法就是直接去操作数据库,对了,每个用户前端每隔15秒会提交一次观看位置的请求,并且上级这边说qps会达到3000左右,也就是同时观看人数最多会有3000人左右,因此我们要进行优化,我们会发现这些请求中只有最后一次的观看位置是有用的,所以设计的解决方案就是使用redis的hash结构+延迟消息来实现的。Hash结构中,使用大key存储课表Id,课表用来关联userId和课程的Id,使用小key存储节Id,value存储观看位置的数据,在每次请求进来后直接修改Hash中的数据,并且每次发送一个延迟消息,使用RabbitMq的死信发送一个延迟15秒消息,并且也是当前的节点去监听该消息,监听到消息后,使用监听到的观看位置和当前在Hash结构中的观看位置进行比较,如果发现二者的相同,说明在这15秒内没有再次进行观看了,这个时候就去修改数据库。反之,如果不相同的话,说明此时用户还在进行观看,我们就直接丢掉消息。最终减少99%的DB操作。

那我在做完这个业务之后,也在思考,因为我们使用的是RabbitMq来存储观看位置的消息,此时可能就会出现问题,消费者的消费速度小于生成者生成速度。我目前主要了解到的解决方案就是增加消费者的个数,因为采用的是微服务的落地方案,所以我们可以增加消费者的个数。提升消费者的消费能力,我会创建线程池,使用多线程来消费消息,对消息队列进行扩容,我们可以使用惰性队列来存储消息,因为惰性队列使用磁盘进行存储,就导致它的容量非常大,但是呢,涉及到大量的文件IO操作,所以在速度上效率是比较低的。

设计模式你了解过哪些?

单例模式:我比较了解就是Spring中IOC默认情况下采用的就是单例模式。

工厂模式和策略模式:我们当时在实现动态获取分布式锁及对应策略,使用自定义注解+工厂模式+策略模式。自定义注解主要就是控制对应的枚举。我们会创建一个工厂类,里面有一个属性EunmMap,key存储对应的枚举,value存储对应分布式锁的实现方法,最终设置枚举即可获得对应的类。策略模式则就会在枚举中编写一个抽象方法,会有多个方法实现该抽象方法,最终这些实现的方法就是策略。

责任链模式:最常见的就是Stream流式编程,通过返回原型继续执行方法。

在Spring中怎么解决循环依赖的问题?

Spring中使用三级缓存来解决缓存依赖,一级缓存主要就是存储完整的实例,二级缓存主要就是次存储代理对象,三级缓存就是ObjectFactory。当A和B相互依赖的时候就是使用三级缓存。

加载A,并将A的ObjectFactory存放到三级缓存,去加载B,并将B的ObjectFactory存放到三级缓存中。当发现B中需要依赖A,此时将使用A的ObjectFactory生成A的代理对象,并将A的代理对象存放到二级缓存中,将A注入到B中,将完整的B存放到一级缓存中,此时回溯,将完整的B注入到A中,最终解决三级缓存的问题。

redis的缓存问题有了解过吗?

主要就是三个问题就是缓存穿透,缓存击穿,缓存雪崩。

1.缓存击穿:当某个热点key突然过期导致大量的请求打db,最终压垮我们的数据库。

解决方案:使用分布式锁来解决,在每次访问数据库前都会获取缓存如果缓存不存在就会上锁然后做db操作,保证每次只有一个请求打数据库。

2.缓存雪崩:有两种情况,当大量的key设置了相同的过期时间,导致大量的key同时过期,导致到大量的请求大db,最终压垮数据库,或者是redis服务宕机了。

解决方案:redis搭建集群,搭建二级缓存,错开过期时间。

3.缓存穿透:一些数据,即不存在于数据库中,又不存在于redis中,在每次查询的时候都不会创建缓存,导致后续查询的时候都走数据库。

解决方案:使用布隆过滤器,因为它是基于BitMap来实现的,通过位置0和1来判断数据是否存在,这样就可以保证不会直接走数据库,防止压垮数据库。


原文地址:https://blog.csdn.net/Ostkakah/article/details/140550123

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!