2020年3月23日一次java电话面试

一、你本身以前的项目开发中, 所涉及的技术栈有哪些?html

二、springMVC的流程是什么?主要组件说明?SpringMVC的优势?前端

----------------springMVC的流程------------------------

  • 第一步:发起请求到前端控制器(DispatcherServlet)
  • 第二步:前端控制器请求HandlerMapping查找 Handler (能够根据xml配置、注解进行查找)
  • 第三步:处理器映射器HandlerMapping向前端控制器返回Handler,HandlerMapping会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象,多个HandlerInterceptor拦截器对象),经过这种策略模式,很容易添加新的映射策略
  • 第四步:前端控制器调用处理器适配器去执行Handler
  • 第五步:处理器适配器HandlerAdapter将会根据适配的结果去执行Handler
  • 第六步:Handler执行完成给适配器返回ModelAndView
  • 第七步:处理器适配器向前端控制器返回ModelAndView (ModelAndView是springmvc框架的一个底层对象,包括 Model和view)
  • 第八步:前端控制器请求视图解析器去进行视图解析 (根据逻辑视图名解析成真正的视图(jsp)),经过这种策略很容易更换其余视图技术,只须要更改视图解析器便可
  • 第九步:视图解析器向前端控制器返回View
  • 第十步:前端控制器进行视图渲染 (视图渲染将模型数据(在ModelAndView对象中)填充到request域)
  • 第十一步:前端控制器向用户响应结果 

----------------主要组件说明------------------------

首先,咱们得说出每一个组件是作什么的,固然要每一个单词读出来最好。DispatcherServlet:web

spring mvc的入口,整个框架运行就是在这个servlet中完成。spring

HandlerMapping:处理器映射起。用于映射每一个处理方法对应的请求路径。是一个map结构<url,method>。sql

handler:处理器。实际上就是控制器中的每一个处理方法。数据库

HandlerAdapter:处理器适配器。专门用来调用handler,由于在spring mvc中每一个处理方法参数以及返回类型都不同,所以须要用适配器来适配。json

ViewResovler:视图解析器。用于指定视图技术,以及视图技术相关的配置。api

View:视图。springmvc 中支持多种视图,除了jsp外 还有xml,json,pdf等。tomcat

---------------------SpringMVC的优势-----------------

1.清晰的角色划分:控制器(controller)、验证器(validator)、命令对象(command obect)、表单对象(form object)、模型对象(model object)、Servlet分发器(DispatcherServlet)、处理器映射(handler mapping)、试图解析器(view resoler)等等。每个角色均可以由一个专门的对象来实现。安全

2.强大而直接的配置方式:将框架类和应用程序类都能做为JavaBean配置,支持跨多个context的引用,例如,在web控制器中对业务对象和验证器validator)的引用。

3.可适配、非侵入:能够根据不一样的应用场景,选择何事的控制器子类(simple型、command型、from型、wizard型、multi-action型或者自定义),而不是一个单一控制器(好比Action/ActionForm)继承。

4.可重用的业务代码:可使用现有的业务对象做为命令或表单对象,而不须要去扩展某个特定框架的基类。

5.可定制的绑定(binding)和验证(validation):好比将类型不匹配做为应用级的验证错误,这能够保证错误的值。再好比本地化的日期和数字绑定等等。在其余某些框架中,你只能使用字符串表单对象,须要手动解析它并转换到业务对象。

6.可定制的handler mapping和view resolution:Spring提供从最简单的URL映射,到复杂的、专用的定制策略。与某些web MVC框架强制开发人员使用单一特定技术相比,Spring显得更加灵活。

7.灵活的model转换:在Springweb框架中,使用基于Map的键/值对来达到轻易的与各类视图技术集成。

8.可定制的本地化和主题(theme)解析:支持在JSP中可选择地使用Spring标签库、支持JSTL、支持Velocity(不须要额外的中间层)等等。

9.简单而强大的JSP标签库(Spring Tag Library):支持包括诸如数据绑定和主题(theme)之类的许多功能。他提供在标记方面的最大灵活性。

10.JSP表单标签库:在Spring2.0中引入的表单标签库,使用在JSP编写表单更加容易。

11.Spring Bean的生命周期:能够被限制在当前的HTTp Request或者HTTp Session。准确的说,这并不是Spring MVC框架自己特性,而应归属于Spring MVC使用的WebApplicationContext容器。

------------------mybatis 的 #和$ 的区别是什么----------------

三、mybatis 的 #和$ 的区别是什么?

#{}是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql的?号占位符设置参数值

mybatis 在对 sql 语句进行预编译以前,会对 sql 进行动态解析,解析为一个 BoundSql 对象,也是在此处对动态 SQL 进行处理的。在动态 SQL 解析阶段, #{ } 和 ${ } 会有不一样的表现

#{} 在动态解析的时候, 会解析成一个参数标记符。select * from user where name = ?;

${}在动态解析的时候,会将咱们传入的参数当作String字符串填充到咱们的语句中,select * from user where name = “dato”; 预编译以前的 SQL 语句已经不包含变量了,彻底已是常量数据了。

 ${ } 变量的替换阶段是在动态 SQL 解析阶段,而 #{ }变量的替换是在 DBMS (数据库管理系统)中。

#方式可以很大程度防止sql注入,$方式没法防止Sql注入。

$方式通常用于传入数据库对象,例如传入表名.

-----------深刻理解Spring两大特性:IoC和AOP----------------

http://www.javashuo.com/article/p-ypnucozp-gt.html

---------Spring的优缺点-----------------------

1,下降了组件之间的耦合性,实现了软件各层之间的解耦。

2,可使用容器提供的众多服务,如事务管理,消息服务等。

3,容器提供单例模式支持。

4,容器提供了AOP技术,利用它能够很容易实现一些拦截,如权限拦截,运行期监控等。

5,容器提供了众多的辅助类,可以加快应用的开发。

6,spring对于主流的应用框架提供了很好的支持,例如mybatis等。

7,spring属于低入侵式设计。

8,独立于各类应用服务器。

9,spring的DI机制下降了业务对象替换的复杂性。

10,spring的高度开放性,并不强制应用彻底依赖于它,开发者能够自由选择spring的部分或者所有。

spring的缺点:

使用了大量的反射机制,反射机制很是占用内存。

------------SpringBoot是什么?SpringBoot的优缺点有哪些?-------

什么是SpringBoot

  • SpringBoot是基于Spring的一个微框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。

SpringBoot的优势

  1. 能够建立独立的Spring应用程序,而且基于其Maven或Gradle插件,能够建立可执行的JARs和WARs;
  2. 内嵌Tomcat或Jetty等Servlet容器;
  3. 提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
  4. 尽量自动配置Spring容器;
  5. 提供准备好的特性,如指标、健康检查和外部化配置;
  6. 绝对没有代码生成,不须要XML配置。

SpringBoot的缺点

  1. 只是为了提升开发效率和提高生产力。
  2. 没有相应的服务发现、注册和安全管控方案的配套功能,监控功能也须要与现有的监控对接。
  3. 仅适用于全新Spring项目,与传统项目的转换很是困难。
 
 

------------------------SpringBoot与Spring的区别---------------

SpringBoot不是Spring官方的框架模式,而是一个团队在Spring4.0版本上二次开发并开源公布出来的。简而言之,SpringBoot就是一个轻量级,简化配置和开发流程的web整合框架。SpringBoot是最近这几年才火起来的,那么它到底与Spring有啥区别呢?想了解区别,其实就是SpringBoot提供了哪些特性:

Spring Boot能够创建独立的Spring应用程序;内嵌了如Tomcat,Jetty和Undertow这样的容器,也就是说能够直接跑起来,用不着再作部署工做了;无需再像Spring那样搞一堆繁琐的xml文件的配置;能够自动配置Spring。SpringBoot将原有的XML配置改成Java配置,将bean注入改成使用注解注入的方式(@Autowire),并将多个xml、properties配置浓缩在一个appliaction.yml配置文件中。提供了一些现有的功能,如量度工具,表单数据验证以及一些外部配置这样的一些第三方功能;整合经常使用依赖(开发库,例如spring-webmvc、jackson-json、validation-api和tomcat等),提供的POM能够简化Maven的配置。当咱们引入核心依赖时,SpringBoot会自引入其余依赖。

相关文章
相关标签/搜索