今日分享开始啦,请大家多多指教~
本篇总结SSM三大框架相关面试题~
1、什么是有状态登录和无状态登录?
有状态登录:当客户端第一次请求服务器时(请求登录),服务器创建Session,然后将登录用户身份信息保存到Session中,并将用户身份信息作为“门卡”,响应回客户端,客户端将服务器响应的“门卡”信息保存在本地Cookie中。
当下一次客户端再次请求服务器时,这时候就直接将客户端的Cookie中存放的“门卡”带到服务器端,服务器端从Session中拿出数据和“门卡”进行对比,判断是否可以同行。
无状态登录的缺点:服务端保存大量用户身份标识,增加服务端压力。
客户端请求依赖服务端,多次请求必须访问同一台服务器(如果是集群,相当于启动了多个Tomcat,这时候无法在多个Tomcat直接共享Session数据)。
无状态登录:服务器不保存任何客户端用户的登录信息!
客户端的每次请求服务器必须自己具备身份信息标识(jwt),服务器端通过身份信息标识识别客户端身份。
无状态登录的好处:客户端请求不依赖服务端的信息,任何多次请求不需要必须访问到同一台服务器。
减小服务端存储压力。
如何实现无状态登录?
如图所示:
当客户端第一次请求服务时,服务端对用户进行信息认证(登录)。认证通过,将用户身份信息(不包含密码)进行加密形成token,返回给客户端,作为登录凭证。以后每次请求,客户端都携带认证的token。服务的对token进行解密,判断是否有效。2、过滤器,拦截器,Aop区别?
过滤器和拦截器均体现了AOP的编程思想,都可以实现诸如日志记录、登录鉴权等功能,但二者的不同点也是比较多的。
1、实现原理不同
过滤器和拦截器底层实现方式大不相同,过滤器是基于函数回调的,拦截器则是基于Java的反射机制(动态代理)实现的。
2、使用范围不同
我们看到过滤器实现的是javax.servlet.Filter接口,而这个接口是在Servlet规范中定义的,也就是说过滤器Filter的使用要依赖于Tomcat等容器,导致它只能在web程序中使用。
而拦截器(Interceptor)它是一个Spring组件,并由Spring容器管理,并不依赖Tomcat等容器,是可以单独使用的。不仅能应用在web程序中,也可以用于Application、Swing等程序中。
3、触发时机不同
过滤器Filter是在请求进入容器后,但在进入servlet之前进行预处理,请求结束是在servlet处理完以后。
拦截器Interceptor是在请求进入servlet后,在进入Controller之前进行预处理的,Controller中渲染了对应的视图之后请求结束。
4、拦截的请求范围不同
5、注入Bean情况不同
在实际的业务场景中,应用到过滤器或拦截器,为处理业务逻辑难免会引入一些service服务。
6、控制执行顺序不同
实际开发过程中,会出现多个过滤器或拦截器同时存在的情况,不过,有时我们希望某个过滤器或拦截器能优先执行,就涉及到它们的执行顺序。
3、什么是SpringMvc,说一说它的几个核心组成?
①前端控制器(DispatcherServlet):主要用于接收客户端发送的HTTP请求、响应结果给客户端。
②处理器映射器(HandlerMapping):根据请求的URL来定位到对应的处理器(Handler)。
③处理器适配器(HandlerAdapter):在编写处理器(Handler)的时候要按照处理器适配器(HandlerAdapter)要求的规则去编写,通过适配器可以正确地去执行Handler。
④处理器(Handler):就是我们经常写的Controller层代码,例如:UserController。
⑤视图解析器(ViewResolver):进行视图的解析,将ModelAndView对象解析成真正的视图(View)对象返回给前端控制器。
⑥视图(View):View是一个接口,它的实现类支持不同的视图类型(JSP,FreeMarker,Thymleaf等)。
4、Springmvc执行流程?
①首先,用户发送HTTP请求给SpringMVC前端控制器DispatcherServlet。
②DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,根据请求URL去定位到具体的处理器Handler,并将该处理器对象返回给DispatcherServlet。
③接下来,DispatcherServlet调用HandlerAdapter处理器适配器,通过处理器适配器调用对应的Handler处理器处理请求,并向前端控制器返回一个ModelAndView对象。
④然后,DispatcherServlet将ModelAndView对象交给ViewResoler视图解析器去处理,并返回指定的视图View给前端控制器。
⑤DispatcherServlet对View进行渲染(即将模型数据填充至视图中)。View是一个接口,它的实现类支持不同的视图类型(JSP,FreeMarker,Thymleaf等)。
⑥DispatcherServlet将页面响应给用户。
5、什么是MyBatis一、二级缓存?
一级缓存:作用域是SqlSession,同一个SqlSession中执行相同的SQL查询(相同的SQL和参数),第一次会去查询数据库并写在缓存中,第二次会直接从缓存中取。
一级缓存是基于PerpetualCache的HashMap本地缓存,默认打开一级缓存。失效策略:当执行SQL时候两次查询中间发生了增删改的操作,即insert、update、delete等操作