面试题
SpringMVC执行流程?
1.由用户发起
http请求,由web容器转发到 DispatchServlet(前端控制器)
2.由前端控制器
DispatchServerlet调用 HandlerMapping(处理映射器),根据请求的url,匹配对应的Controller方法。返回一个拦截器
3.获取拦截器后,移交
HandlerAdapter(处理适配器)进行统一调配规则,执行Controller方法前触发拦截器的 preHandler方法,用于完成参数绑定转换操作
4.执行
Controller中定义的方法,在执行完后,会触发拦截器的 postHandler方法
5.由
ViewResolver进行视图解析渲染或者由 HttpMessageConvter转json数据
6.执行拦截器的
afterCompletion方法
SpringBoot启动原理
- 创建SpringApplication实例
- 执行
run()方法- 读取
applicaton.xml,准备环境配置 - 创建
Spring容器 - 自动装配,把需要的
Bean注入进来 - 启动服务
- 读取
SpringBoot自动装配原理
- 读取
@SpringApplication注解,找到@EnableAutoConfiguration注解 - 根据
@EnableAutoConfiguration注解,开启自动装配 - 根据核心选择器
AutoConfigurationImportSelect读取文件下事先写好的要自动配置类的全限定名 - 通过
@Contional系列注解,按需过滤出不满做的配置类 - 将筛选出来的配置类注册到
Spring容器中
Spring IOC 和 DI 的理解
- IOC,控制反转是一种设计思想,由容器统一管理内部的类,容器内部,有什么类直接拿来就使用,不需要子啊创建。没有的类,可以通过配置添加进容器。
- DI,依赖注入是IOC的实现。主流的实现依赖注入
- 构造器注入,能够保证对象不会为空
- Setter注入,能够灵活的更改依赖
- 字段注入,使用
@Autowried注解
Spring AOP是什么 ,底层原理是什么,使用场景呢
- 面向切面编程,能够将一些与业务无关的公共功能抽离出来,统一管理的技术
- 原理是基于
java的动态代理。在运行时为目标创建代理对象,并在代理对象的前后插入对应的逻辑。依托于spring的生命周期,当bean初始化完成后,判断是否需要生成对应的代理。如果需要则使用代理替换掉原本的对象。 - Spring中事务的控制,Spring的全局异常处理,权限控制
Spring AOP中的通知(Advice)类型有哪些
@Before:前置通知@AfterReturning:返回后通知@AfterThrowing:异常后通知@After:最终通知@Around:环绕通知
Spring如何实现全局异常处理
- 使用
@ControllerAdvice(@RestControllerAdvice),控制全局的Controller层 - 使用
@ExceptionHandler注解,捕获出现的异常。编写对应处理的方法。
Maven 中 dependencyManagement与普通 dependencies的区别
dependencyManagement,用于集中定义和管理依赖的版本号,不会引入依赖dependencies,一旦在这里面声明了某个,Maven就会立即进行下载
Maven继承和聚合理解
什么是事务的传播行为
- 在Spring中当一个带有事务的方法,被另外一个带有事务的方法调用时,该如何进行管理
- 常见的传播行为
- 支持当前事务
REQUIRED:存在当前事务,加入当前事务。不存在,则创建事务,加入当前事务SUPPOERT:存在当前事务,加入当前事务。不存在,正常执行MANDATORY:必须保证当前事务存在,不存在,报异常
- 不持支当前事务
REQUIRED_NEW:是否存在当前事务,都会挂起,创建一个新事务加入。NOT_SUPPORT:存在当前事务,挂起,正常执行。NEVER:存在事务,报异常
- 嵌套事务:存在当前事务,创建当前事务的嵌套事务。不存在,则执行
REQUIRED行为
- 支持当前事务
JWT 由哪三部分组成?如何保证其不被篡改
- 头部,载荷,签名
- 依赖第三部分的签名。
- 客户端发送请求时必须携带对应的token
- 服务端将接受的token,根据token头部中设置的算法,和载荷。用自己设置的密钥在服务端重新设置一次token,比较两次token。一致则放行。
MyBatis 中 #{} 和 ${} 的区别
- #{}为预编译占位符,能够自动识别类型,能够防止SQL注入
- ${}为字符串替换,不能处理类型,不能防止SQL注入
MyBatis中@Param注解的作用是什么?什么情况下必须使用它
- 给参数起别名,让Mybaits写SQL时,能够精确查找
- 多个参数时,传入集合/数组时,xml动态判断
MyBatis的一级缓存和二级缓存分别是什么
拦截器(Interceptor)和过滤器(Filter)的区别?
- 拦截器属性Spring框架,作用在Spring容器中,因此只能拦截Controller层上定义的请求,且能够被Spring定义的全局异常捕获。晚于过滤器。生命周期方法为
preHandler(),postHandler(),afterCompletion() - 过滤器属于Serlvert规范,作用在Web容器容器,因此能够拦截所有的请求,不能直接被Spring的全局异常捕获,早于拦截器。生命周期方法为
init(),doFilter(),destory()
Vue 路由的两种模式是什么?有什么区别
Vuex 的五个核心属性是什么
Content-Type 常见类型有哪些
- application/json,数据以json传输
- application/x-www-form-urlencoded,普通表单传输人
- multipart/form-data:文件分片传输
Cookie 和 Session 的区别,各自的存储位置和生命周期是什么
- Cookie:由服务端创建发送到前端,由前端控制存储在浏览器或者磁盘中,因此安全性低。存在4kb的大小限制,只能存储字符串
- 会话级:随浏览器的关闭而销毁
- 持久化:按设置的时间到期销毁,无关乎硬件
- Session:由服务端创建,存储到内存中,安全性高,理论上不存在大小限制,能够存储对象
- 创建:初始化
- 活跃:只要使用,就会延长使用时间
- 销毁:超时,主动销毁,服务器重启
Servlet 生命周期简述
- 实例化
- 服务启动,调用对应的构造函数方法
- 初始化
- 实例化完成后,调用
init()方法读取xml的内容
- 实例化完成后,调用
- 服务
- 每次客户端发送请求时,触发
service()方法,自动触发doGet()和doPost方法
- 每次客户端发送请求时,触发
- 销毁
- 服务器关闭,调用对应的
destory()方法
- 服务器关闭,调用对应的
RBAC 模型是什么
- 用户不直接绑定权限,而是通过‘角色’作为中间桥梁来间接获取权限。核心四要素,用户,角色,权限,会话
- 特点:解耦,将用户与权限解耦,当人员变动时,只需要调整对应角色,易于维护。
MyBatis Plus 相比 MyBatis 有哪些增强
Vue中data属性与计算属性有什么区别?分别在什么场景下使用
- data是存储组件状态的原始值,不惧有缓存,可读可写,需要存储数据状态时使用
- computed基于已有的响应式数据衍生的新值,具有缓存,值不改变时,不会重新计算,理论只可读。对已有数据的格式化,逻辑运算时使用
Vue钩子函数
beforeCreate():实例化初期,什么都没有created():data中的数据初始化完成beforeMount():虚拟dom初始化完成mounted():正式dom渲染完成beforeUpdate():数据改变,虚拟dom没变updated:dom 重新渲染后触发beforeDestroy:重新渲染后触发destroyed:完全销毁
Vue中v-if和v-show的区别是什么?各自介绍下使用场景
v-if真正的条件渲染。条件为假时,元素会从 DOM 中被完全销毁。会触发生命周期。能够配合使用v-else,v-else-if。适用于“运行时条件很少改变”的场景CSS切换。元素始终存在于 DOM 中,仅通过修改display: none来隐藏,适用于“需要非常频繁切换”的场景,或者需要动画的过度效果
Vue路由懒加载是什么?如何实现路由懒加载?它有什么优缺点
JDK动态代理和CGLIB代理有什么区别
@RestController与@Controller的区别是什么
@Controller返回视图名称@RestController直接返回json数据
@Autowired和@Resource注解的区别是什么
@Autowired属于spring框架,优先类型,后名称,指定名称需要额外注解,版本通用@Resource属于 java 自带,优先名称,后类型,注解自带name属性用于指定名字,只支持setter注入,jdk8+,要引用额外包
@PathVariable、@RequestParam、@RequestBody注解的作用分别是什么
@PathVariable:从url路径提取动态部分,帮到控制器参数上@RequestParam:从请求中的查询字符串或表单中提取键值对,并转为对象或基本数据类型@PathVariable:从url路径提取动态部分,帮到控制器参数上
评论