• 第一场面试


    简单三分钟自我介绍

    自我介绍这里一笔带过,给对面介绍自己内在 + 外在 + 校园经历 + 校园项目 + 意向岗位

    技术面

    1. Spring 原理篇

    1.1 有使用过Spring吗,说一说它的 SpringMVC 原理

    主要有5个组件,前端控制器、映射器、处理器、处理器适配器、视图解析器

    • 前端控制器也就是中央处理器,它主要负责前端用户的请求和对其他组件的转发调用;

    • 前端控制器接收到请求后,会把请求转发给处理器映射器,处理器会根据配置或注解(@Controller)找到最终要执行的Handler;

    • 然后将Handler(自己的业务处理)对象以及其对应的拦截器,封装到HandlerExecutionChain对象中并以它的形式放回;

    • 前端控制器根据获取到的Handler(Controller),去选择一个合适的HandlerAdapter(它还支持Servlet、HttpRequestHandler、ThrowawayController),成功获取到会先去执行拦截器;

    • 这时将开始对提取Request中的模型数据,并且将Handler的入参进行数据填充,以至于我们写控制层方法时,入参是前端传来的值,在填充过程中,根据自己的配置,Spring还可以帮你做一些额外操作:

      • Json/Xml 数据转换成对象
      • 格式化请求数据
      • 校验
    • Handler执行完成后,返回一个ModelAndView(视图和视图需要填充的模型数据)

    • 前端控制器根据返回的ModelAndView,选择合适的ViewResolver

    • ViewResolver 结合Model和View,来渲染视图

    • 最终前端控制器将渲染结果返回给客户端

    1.2 springboot 有什么优点

    springboot 它可以帮我快速、使用最低代码最少时间开发出一个项目,不想 SpringMVC,需要繁琐写很多配置信息,我们只关注写业务代码即可。

    通过配置文件解耦代码,在一些可能改动的配置信息,可以不通过修改代码再打包部署,而是让代码去外部读取该配置文件,再去运行。

    还有SpringBoot是使用了maven 可以方便对版本的管理,能够让自己不需要考虑版本依赖问题和兼容版本的问题。

    Redis 篇

    有使用过 Redis吗

    有,它是一个缓存数据库,主要存储的是k-v类型的数据。

    那说说它的一个缓存雪崩?

    嗯?缓存雪崩的话,就是key集中失效,导致 Redis 相当于宕机,大量请求依旧打到mysql数据库上了。

    这里总结一下,其实雪崩Redis服务基本不可用了,存储层的调用量会暴增,造成存储层也会挂掉的情况,而且雪崩会出现周期性的峰值,因为就算缓存失效了,请求到了存储层,获取到数据后,是会再做一次缓存的,所以会出现周期性峰值。

    致命的原因是存储层在暴增的情况下扛不住调用后,导致数据库直接挂掉了。

    有什么解决措施?

    嗯?我们可以对那个 key 的缓存时间设置更长一些,缓存雪崩导致的原因是因为太过于集中失效,导致暴增,那么如果我们均摊一下时间,就能避免出现该情况,所以我们可以对缓存时效设置的更随机性一些,且对一些热点数据缓存时间设置永久性。

  • 相关阅读:
    强化学习代码实战(2) --- 多臂赌博机
    ReentrantReadWriteLock 读写锁的使⽤
    PHP生成一个英文大小写混排且不重复的5个字符封装函数
    洛谷 P1135 奇怪的电梯 P1135 Java
    口袋参谋:找关键词的三种方法!
    Gradle项目转Maven项目
    MVC升级swagger No operations defined in spec!
    Golang 包
    ubuntu18.04设置开机自动启动脚本(以自动启动odoo命令行为例讲解)
    Kafka基于Kraft下的权限控制
  • 原文地址:https://blog.csdn.net/F15217283411/article/details/127041083