面试题

SpringMVC执行流程?

1.由用户发起

http请求,由web容器转发到 DispatchServlet(前端控制器)

2.由前端控制器

DispatchServerlet调用 HandlerMapping(处理映射器),根据请求的url,匹配对应的Controller方法。返回一个拦截器

3.获取拦截器后,移交

HandlerAdapter(处理适配器)进行统一调配规则,执行Controller方法前触发拦截器的 preHandler方法,用于完成参数绑定转换操作

4.执行

Controller中定义的方法,在执行完后,会触发拦截器的 postHandler方法

5.由

ViewResolver进行视图解析渲染或者由 HttpMessageConvter转json数据

6.执行拦截器的

afterCompletion方法

SpringBoot启动原理

  1. 创建SpringApplication实例
  2. 执行 run()方法
    1. 读取 applicaton.xml,准备环境配置
    2. 创建 Spring容器
    3. 自动装配,把需要的 Bean注入进来
    4. 启动服务

SpringBoot自动装配原理

  1. 读取 @SpringApplication注解,找到 @EnableAutoConfiguration注解
  2. 根据 @EnableAutoConfiguration注解,开启自动装配
  3. 根据核心选择器 AutoConfigurationImportSelect读取文件下事先写好的要自动配置类的全限定名
  4. 通过 @Contional系列注解,按需过滤出不满做的配置类
  5. 将筛选出来的配置类注册到 Spring容器中

Spring IOC 和 DI 的理解

  1. IOC,控制反转是一种设计思想,由容器统一管理内部的类,容器内部,有什么类直接拿来就使用,不需要子啊创建。没有的类,可以通过配置添加进容器。
  2. DI,依赖注入是IOC的实现。主流的实现依赖注入
    1. 构造器注入,能够保证对象不会为空
    2. Setter注入,能够灵活的更改依赖
    3. 字段注入,使用 @Autowried注解

Spring AOP是什么 ,底层原理是什么,使用场景呢

  1. 面向切面编程,能够将一些与业务无关的公共功能抽离出来,统一管理的技术
  2. 原理是基于 java的动态代理。在运行时为目标创建代理对象,并在代理对象的前后插入对应的逻辑。依托于spring的生命周期,当 bean初始化完成后,判断是否需要生成对应的代理。如果需要则使用代理替换掉原本的对象。
  3. Spring中事务的控制,Spring的全局异常处理,权限控制

Spring AOP中的通知(Advice)类型有哪些

  1. @Before:前置通知
  2. @AfterReturning:返回后通知
  3. @AfterThrowing:异常后通知
  4. @After:最终通知
  5. @Around:环绕通知

Spring如何实现全局异常处理

  1. 使用 @ControllerAdvice(@RestControllerAdvice),控制全局的Controller层
  2. 使用 @ExceptionHandler注解,捕获出现的异常。编写对应处理的方法。

Maven 中 dependencyManagement与普通 dependencies的区别

  1. dependencyManagement,用于集中定义和管理依赖的版本号,不会引入依赖
  2. dependencies ,一旦在这里面声明了某个,Maven就会立即进行下载

Maven继承和聚合理解

什么是事务的传播行为

  1. 在Spring中当一个带有事务的方法,被另外一个带有事务的方法调用时,该如何进行管理
  2. 常见的传播行为
    1. 支持当前事务
      1. REQUIRED:存在当前事务,加入当前事务。不存在,则创建事务,加入当前事务
      2. SUPPOERT:存在当前事务,加入当前事务。不存在,正常执行
      3. MANDATORY:必须保证当前事务存在,不存在,报异常
    2. 不持支当前事务
      1. REQUIRED_NEW:是否存在当前事务,都会挂起,创建一个新事务加入。
      2. NOT_SUPPORT:存在当前事务,挂起,正常执行。
      3. NEVER:存在事务,报异常
    3. 嵌套事务:存在当前事务,创建当前事务的嵌套事务。不存在,则执行 REQUIRED行为

JWT 由哪三部分组成?如何保证其不被篡改

  1. 头部,载荷,签名
  2. 依赖第三部分的签名。
    1. 客户端发送请求时必须携带对应的token
    2. 服务端将接受的token,根据token头部中设置的算法,和载荷。用自己设置的密钥在服务端重新设置一次token,比较两次token。一致则放行。

MyBatis 中 #{} 和 ${} 的区别

  1. #{}为预编译占位符,能够自动识别类型,能够防止SQL注入
  2. ${}为字符串替换,不能处理类型,不能防止SQL注入

MyBatis中@Param注解的作用是什么?什么情况下必须使用它

  1. 给参数起别名,让Mybaits写SQL时,能够精确查找
  2. 多个参数时,传入集合/数组时,xml动态判断

MyBatis的一级缓存和二级缓存分别是什么

拦截器(Interceptor)和过滤器(Filter)的区别?

  1. 拦截器属性Spring框架,作用在Spring容器中,因此只能拦截Controller层上定义的请求,且能够被Spring定义的全局异常捕获。晚于过滤器。生命周期方法为 preHandler(),postHandler(),afterCompletion()
  2. 过滤器属于Serlvert规范,作用在Web容器容器,因此能够拦截所有的请求,不能直接被Spring的全局异常捕获,早于拦截器。生命周期方法为 init()doFilter()destory()

Vue 路由的两种模式是什么?有什么区别

Vuex 的五个核心属性是什么

Content-Type 常见类型有哪些

  1. application/json,数据以json传输
  2. application/x-www-form-urlencoded,普通表单传输人
  3. multipart/form-data:文件分片传输
  • Cookie:由服务端创建发送到前端,由前端控制存储在浏览器或者磁盘中,因此安全性低。存在4kb的大小限制,只能存储字符串
    • 会话级:随浏览器的关闭而销毁
    • 持久化:按设置的时间到期销毁,无关乎硬件
  • Session:由服务端创建,存储到内存中,安全性高,理论上不存在大小限制,能够存储对象
    • 创建:初始化
    • 活跃:只要使用,就会延长使用时间
    • 销毁:超时,主动销毁,服务器重启

Servlet 生命周期简述

  1. 实例化
    • 服务启动,调用对应的构造函数方法
  2. 初始化
    • 实例化完成后,调用 init()方法读取xml的内容
  3. 服务
    • 每次客户端发送请求时,触发 service()方法,自动触发 doGet()doPost方法
  4. 销毁
    • 服务器关闭,调用对应的 destory()方法

RBAC 模型是什么

  1. 用户不直接绑定权限,而是通过‘角色’作为中间桥梁来间接获取权限。核心四要素,用户,角色,权限,会话
  2. 特点:解耦,将用户与权限解耦,当人员变动时,只需要调整对应角色,易于维护。

MyBatis Plus 相比 MyBatis 有哪些增强

Vue中data属性与计算属性有什么区别?分别在什么场景下使用

  1. data是存储组件状态的原始值,不惧有缓存,可读可写,需要存储数据状态时使用
  2. computed基于已有的响应式数据衍生的新值,具有缓存,值不改变时,不会重新计算,理论只可读。对已有数据的格式化,逻辑运算时使用

Vue钩子函数

  1. beforeCreate():实例化初期,什么都没有
  2. created():data中的数据初始化完成
  3. beforeMount():虚拟dom初始化完成
  4. mounted():正式dom渲染完成
  5. beforeUpdate():数据改变,虚拟dom没变
  6. updated:dom 重新渲染后触发
  7. beforeDestroy:重新渲染后触发
  8. destroyed:完全销毁

Vue中v-if和v-show的区别是什么?各自介绍下使用场景

  1. v-if真正的条件渲染。条件为假时,元素会从 DOM 中被完全销毁。会触发生命周期。能够配合使用 v-else,v-else-if。适用于“运行时条件很少改变”的场景
  2. CSS 切换。元素始终存在于 DOM 中,仅通过修改 display: none 来隐藏,适用于“需要非常频繁切换”的场景,或者需要动画的过度效果

Vue路由懒加载是什么?如何实现路由懒加载?它有什么优缺点

JDK动态代理和CGLIB代理有什么区别

@RestController与@Controller的区别是什么

  1. @Controller 返回视图名称
  2. @RestController直接返回json数据

@Autowired和@Resource注解的区别是什么

  1. @Autowired属于spring框架,优先类型,后名称,指定名称需要额外注解,版本通用
  2. @Resource 属于 java 自带,优先名称,后类型,注解自带name属性用于指定名字,只支持setter注入,jdk8+,要引用额外包

@PathVariable、@RequestParam、@RequestBody注解的作用分别是什么

  1. @PathVariable:从url路径提取动态部分,帮到控制器参数上
  2. @RequestParam:从请求中的查询字符串或表单中提取键值对,并转为对象或基本数据类型
  3. @PathVariable:从url路径提取动态部分,帮到控制器参数上

简述下你用过的spring相关的注解,分别是干什么的