Spring SpringMVC MyBatis

  1. Servlet的生命周期方法有哪几个?)分别什么情况被调用?

1、Init:servlet对象被创建后立即调用,一次生命周期只会被调用一次

    2、Service:每次被请求时服务器都会调用service处理用户请求

3、Destroy:项目被销毁时服务器会调用destroy销毁servlet对象

        

   

  1. 转发和重定向的区别?(至少写3个)

1、请求次数: 转发一次,重定向两次

    2、浏览器地址:转发不变,重定向改变

    3、使用request域共享数据:转发是一次请求可以共享数据,重定向浏览器发起两次请求,不能共享数据

    4、相对路径: 转发地址不变会造成转发后的页面中的相对位置发生改变引起相对路径失效,重定向不会

    5、效率:转发浏览器一次请求效率高,重定向效率低

    6、WEB-INF下资源:转发可以访问,重定向不可以

3、说出几种vue当中的指令及其用法?

v-model双向数据绑定;
v-for循环;
v-if v-show 显示与隐藏;
v-on事件;v-once: 只绑定一次。

4、get 和 post 的区别?(至少写2个)

① 浏览器和表单的默认提交方式是get,get请求效率比post高

② get请求参数在url地址后拼接,所以有以下特点:

    请求报文没有请求体

    少了和请求体相关的请求头参数

    参数在url地址中拼接,上传参数大小有限制,不能用来上传文件,相对post请求不安全

③ post请求参数在请求报文的请求体中携带,有以下特点:

        请求报文有请求体,相对安全

        请求头多了和请求体相关的参数

        请求体数据没有大小限制可以用来上传文件

5、Cookie过期和Session超时有什么区别?

1、Cookie是服务   器创建,然后通过响应头的形式交给浏览器保存,每个Cookie浏览器在保存时都有过期时间,默认浏览器关闭后过期,超过过期时间浏览器就不会再保存Cookie了。

    2、Session是服务器中的一个对象,服务器内部会管理每个Session对象,从浏览器最后一次使用Session对象开始计时,如果超过Session对象的超时时间,服务器会销毁Session对象。

    3、Session是服务器端的技术

4、Cookie是浏览器端技术

6、四大域对象及其范围?

1、pageContext:当前页面的上下文,在页面范围中共享数据,JSP页面特有的,每个页面都有自己的pageContext对象。

    2、request:请求域,在一次请求中共享数据,转发也是一次请求能使用request共享数据

    3、session:会话对象,浏览器打开第一次访问服务器开始到浏览器关闭的一次过程中可以共享数据

    4、application:项目上下文对象,项目的一次运行过程中可以共享数据

7、请写出 spring 中常用的依赖注入方式。

1、通过 setter 方法注入

2、通过构造方法注入

8、简述Spring中如何基于注解配置Bean和装配Bean

1、首先要在Spring中配置开启注解扫描

<context:component-scan base-package=” ”></ context:component-scan>

    2、在具体的类上加上具体的注解.

    3、Spring 中通常使用@Autowired或者是@Resource等注解进行bean的装配.

9、说出Spring 或者 Springmvc中常用的5个注解 ,并解释含义

    [1]. @Component  基本注解,标识一个受Spring管理的组件

    [2]. @Controller标识为一个表示层的组件

    [3]. @Service       标识为一个业务层的组件

    [4]. @Repository    标识为一个持久层的组件

    [5]. @Autowired     自动装配

    [6]. @Qualifier(“”)    具体指定要装配的组件的id值

    [7]. @RequestMapping()  完成请求映射

    [8]. @PathVariable    映射请求URL中占位符到请求处理方法的形参

10、MyBatis中 #{}和${}的区别是什么?

#{}是预编译处理,${}是字符串替换。

Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement   的set方法来赋值;

Mybatis在处理${}时,就是把${}替换成变量的值。

使用#{}可以有效的防止SQL注入,提高系统安全性。

11、Mybatis 结果集 的 映射方式有几种,并分别解释每种映射方式如何使用。

自动映射 ,通过resultType来指定要映射的类型即可。

自定义映射 通过resultMap来完成具体的映射规则,指定将结果集中的哪个列映射到    对象的哪个属性。

12、简述Mybatis的动态SQL,列出常用的5个标签及作用

动态SQL是MyBatis的强大特性之一 基于功能强大的OGNL表达式。

动态SQL主要是来解决查询条件不确定的情况,在程序运行期间,根据提交的条件动态的完成查询

常用的标签:

    <if> : 进行条件的判断

<where>:在<if>判断后的SQL语句前面添加WHERE关键字,并处理SQL语句开始位置的AND 或者OR的问题

<trim>:可以在SQL语句前后进行添加指定字符 或者去掉指定字符.

<set>:  主要用于修改操作时出现的逗号问题

<choose><when><otherwise>:类似于java中的switch语句.在所有的条件中选择其一

<foreach>:迭代操作

13、简述Spring中ContextLoaderListener的作用以及实现原理

1、作用:ContextLoaderListener的作用是通过监听的方式在WEB应用服务器启动时将Spring的容器对象进行初始化.

2、原理: ContextLoaderListener 实现了ServletContextListener接口,用于监听ServletContext的创建,当监听到ServletContext创建时,在对应contextInitialized方法中,将Spring的容器对象进行创建,并将创建好的容器对象设置到ServletContext域对象中,目的是让各个组件可以通过ServletContext共享到Spring的容器对象

14、简述Mybatis提供的两级缓存,以及缓存的查找顺序

1、MyBatis的缓存分为一级缓存和二级缓存。

2、一级缓存是SqlSession级别的缓存,默认开启。

3、二级缓存是NameSpace级别(Mapper)的缓存,多个SqlSession可以共享,使用时需要进行配置开启。

4、缓存的查找顺序:二级缓存一级缓存 数据库

15、简述MyBatis的单个参数、多个参数如何传递及如何取值

1、MyBatis传递单个参数,如果是普通类型(String+8个基本)的,取值时在#{}中可以任意指定,如果是对象类型的,则在#{}中使用对象的属性名来取值

2、MyBatis传递多个参数,默认情况下,MyBatis会对多个参数进行封装Map. 取值时

在#{}可以使用012 .. 或者是param1 param2..

3、MyBatis传递多个参数,建议使用命名参数,在Mapper接口的方法的形参前面使用

@Param() 来指定封装Map时用的key. 取值时在#{}中使用@Param指定的key.

法一:顺序传参

public User select(String name,int id);

<select id="select" resultMap="UserResultMap">

select * from user where name=#{0} and id=#{1}

</select>

#{}里面的数字代表你传入参数的顺序。

这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错。

方法二:@Param注解传参

public User select(@Param("paramName") String name,@Param("paramId") int id);

<select id="select" resultMap="UserResultMap">

select * from user where name=#{paramName} and id=#{paramId}

</select>

#{}里面的名称对应的是注解 @Param括号里面修饰的名称。

这种方法在参数不多的情况还是比较直观的,推荐使用。

方法三:Map传参

Map<String,Object> map = new HashMap<String, Object>();

map.put("mapName","zhangsan");

map.put("mapId",2);

public User select(Map<String,Object> map);

<select id="select" parameterType="java.util.Map" resultMap="UserResultMap">

select * from user where name=#{mapName} and id=#{mapId}

</select>

#{}里面的名称对应的是 Map里面的key名称。

这种方法适合传递多个参数,且参数易变能灵活传递的情况。

16、写成http 常见的状态码和表示的含义(至写出4个)

200 OK    //客户端请求成功

301   Moved Permanently(永久移除),请求的 URL 已移走。Response 中应该包含一个 Location URL, 说明资源现在所处的位置

302   found 重定向

400   Bad Request //客户端请求有语法错误,不能被服务器所理解

401   Unauthorized //请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用

403   Forbidden //服务器收到请求,但是拒绝提供服务

404   Not Found //请求资源不存在,eg:输入了错误的 URL

500   Internal Server Error //服务器发生不可预期的错误

503   Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

17、简述Springmvc中如何返回JSON数据

Step1:在项目中加入json转换的依赖,例如jackson,fastjson,gson等

Step2:在请求处理方法中将返回值改为具体返回的数据的类型,例如数据的集合类List<Employee>等

Step3:在请求处理方法上使用@ResponseBody注解

18、Spring通知有哪些类型,以及该通知的执行时机?

(1)前置通知(Before advice):在某连接点(join point)之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出一个异常)。

(2)返回后通知(After returning advice):在某连接点(join point)正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。

(3)抛出异常后通知(After throwing advice):在方法抛出异常退出时执行的通知。

(4)后置通知(After (finally) advice):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。

(5)环绕通知(Around Advice):包围一个连接点(join point)的通知,如方法调用。这是最强大的一种通知类型。 环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。 环绕通知是最常用的一种通知类型。大部分基于拦截的AOP框架,例如Nanning和JBoss4,都只提供环绕通知。

19、介绍一下Spring bean 的生命周期

默认情况下,IOC容器中bean的生命周期分为五个阶段:

调用构造器或者是通过工厂的方式创建Bean对象

给bean对象的属性注入值

调用初始化方法,进行初始化,初始化方法是通过init-method来指定的.

使用

IOC容器关闭时,销毁Bean对象.

20、Mapper接口开发需要注意的四个点:

1 Mapper.xml配置文件的名称空间值必须是Mapper接口的全类名

2 Mapper.xml配置文件中的id值必须是Mapper接口的方法名

3 Mapper.xml配置文件文件中参数的类型parameterType必须和Mapper接口的类型一致( parameterType参数可选 )
4 Mapper.xml配置文件中返回值类型resultType必须和Mapper接口的返回值类型一致

  1. 简述SpringMVC 的工作原理

(1)用户向服务器发送请求,请求被springMVC 前端控制器 DispatchServlet 捕获;

(2)DispatcherServle 对请求 URL 进行解析,得到请求资源标识符(URL),然后根据该 URL 调用 HandlerMapping将请求映射到处理器 HandlerExcutionChain;

(3)DispatchServlet 根据获得 Handler 选择一个合适的HandlerAdapter 适配器处理;

(4)Handler 对数据处理完成以后将返回一个 ModelAndView()对象给 DisPatchServlet;

(5)Handler 返回的 ModelAndView() 只是一个逻辑视图并不是一个正式的视图, DispatcherSevlet  通过ViewResolver 试图解析器将逻辑视图转化为真正的视图View;

(6)DispatcherServle 通过 model 解析出 ModelAndView()中的参数进行解析最终展现出完整的 view 并返回给客户端;

  1. 简述REST中的四种请求方式及对应的操作

    GET   查询操作

POST  添加操作

DELETE  删除操作

PUT   修改操作

  1. 简述Spring声明式事务中@Transaction中常用的两种事务传播行为

通过propagation来执行事务的传播行为

REQUIRED: 使用调用者的事务,如果调用者没有事务,则启动新的事务运行REQUIRES_NEW: 将调用者的事务挂起,开启新的事务运行

  1. 简述Spring与Mybatis整合时,主要整合的两个地方:
  1. SqlSession创建的问题,通过SqlSessionFactoryBean来配置用于创建SqlSession的信息。例如: Mybatis的核心配置文件、Mapper映射文件、数据源等
  2. Mapper接口创建的问题, 使用MapperScannerConfigurer批量为MyBatis的Mapper接口生成代理实现类并将具体的对象交给Spring容器管理

  1. 简述REST中  HiddenHttpMethodFilter过滤器的作用

该过滤器主要负责转换客户端请求的方式,当浏览器的请求方式为POST,并且在请求中能通过 _method获取到请求参数值,

该过滤器就会进行请求方式的转换.

一般在REST中,都是将POST请求转换为对应的DELETE 或者是PUT

  1. Springmvc中如何解决POST请求中文乱码问题

Springmvc中通过CharacterEncodingFilter解决中文乱码问题.

在web.xml中加入:

    <filter>

        <filter-name>CharacterEncodingFilter</filter-name>

        <filter-class>

org.springframework.web.filter.CharacterEncodingFilter</filter-class>

    <init-param>

        <param-name>encoding</param-name>

       <param-value>utf-8</param-value>

    </init-param>

    </filter>

    <filter-mapping>

        <filter-name>CharacterEncodingFilter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

  1. Spring中常用的设计模式
  1. 代理模式——spring 中两种代理方式,若目标对象实现了若干接口,spring 使用jdk 的java.lang.reflect.Proxy类代理。若目标兑现没有实现任何接口,spring 使用 CGLIB 库生成目标类的子类。
  2. 单例模式——在 spring 的配置文件中设置 bean 默认为单例模式。
  3. 模板方式模式——用来解决代码重复的问题。

   比如:RestTemplate、JmsTemplate、JpaTemplate

  1. 工厂模式——在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用同一个接口来指向新创建的对象。Spring 中使用 beanFactory 来创建对象的实例。

  1. 谈谈你对Spring 的理解

Spring 是一个开源框架,为简化企业级应用开发而生。Spring 可以是使简单的JavaBean 实现以前只有EJB 才能实现的功能。Spring 是一个 IOC 和 AOP 容器框架。

Spring 容器的主要核心是:

控制反转(IOC),传统的 java 开发模式中,当需要一个对象时,我们会自己使用 new 或者 getInstance 等直接或者间接调用构造方法创建一个对象。而在 spring 开发模式中,spring 容器使用了工厂模式为我们创建了所需要的对象,不需要我们自己创建了,直接调用spring 提供的对象就可以了,这是控制反转的思想。

依赖注入(DI),spring 使用 javaBean 对象的 set 方法或者带参数的构造方法为我们在创建所需对象时将其属性自动设置所需要的值的过程,就是依赖注入的思想。

面向切面编程(AOP),在面向对象编程(oop)思想中,我们将事物纵向抽成一个个的对象。而在面向切面编程中,我们将一个个的对象某些类似的方面横向抽成一个切面,对这个切面进行一些如权限控制、事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。AOP 底层是动态代理,如果是接口采用 JDK 动态代理,如果是类采用CGLIB 方式实现动态代理。

  1. 简述Springmvc中ContextLoaderListener的作用以及实现原理
  1. 作用:ContextLoaderListener的作用是通过监听的方式在WEB应用服务器启动时将Spring的容器对象进行初始化.
  2.  原理: ContextLoaderListener 实现了ServletContextListener接口,用于监听

           ServletContext的创建,当监听到ServletContext创建时,在对应contextInitialized

          方法中,将Spring的容器对象进行创建,并将创建好的容器对象设置到ServletContext域对象中,

          目的是让各个组件可以通过ServletContext共享到Spring的容器对象

  1. 请解释@Autowired注解的工作机制及required属性的作用
  1. 首先会使用byType的方式进行自动装配,如果能唯一匹配,则装配成功,

      如果匹配到多个兼容类型的bean, 还会尝试使用byName的方式进行唯一确定.

      如果能唯一确定,则装配成功,如果不能唯一确定,则装配失败,抛出异常.

  1.   默认情况下, 使用@Autowired标注的属性必须被装配,如果装配不了,也会抛出异常.

       可以使用required=false来设置不是必须要被装配.

  1. 请描述一下Spring的事务管理

1、声明式事务管理的定义:用在 Spring 配置文件中声明式的处理事务来代替代码式的处理事务。这样的好处是,事务管理不侵入开发的组件,具体来说,业务逻辑对象就不会意识到正在事务管理之中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想要改变事务管理策划的话,也只需要在定义文件中重新配置即可,这样维护起来极其方便。

基于 TransactionInterceptor  的声明式事务管理:两个次要的属性: transactionManager,用来指定一个事务治理器, 并将具体事务相关的操作请托给它; 其他一个是 Properties 类型的transactionAttributes 属性,该属性的每一个键值对中,键指定的是方法名,方法名可以行使通配符, 而值就是表现呼应方法的所运用的事务属性。

  1. 基于 @Transactional 的声明式事务管理:Spring 2.x 还引入了基于 Annotation 的体式格式,具体次要触及@Transactional 标注。@Transactional 可以浸染于接口、接口方法、类和类方法上。算作用于类上时,该类的一切public 方法将都具有该类型的事务属性。

3、编程式事物管理的定义:在代码中显式挪用 beginTransaction()、commit()、rollback()等事务治理相关的方法, 这就是编程式事务管理。Spring 对事物的编程式管理有基于底层 API 的编程式管理和基于 TransactionTemplate 的编程式事务管理两种方式。

  1. 解析Json数组并渲染到页面中

Json字符串如下:

[{"name":"王晓明","age":"23","hobby":["乒乓球","玩游戏","爬山运动"]},

{"name":"李娜","age":"22","hobby":["唱歌","跳舞"]}]

渲染结果如下图所示:

提示:可能会用到的知识点:

1.<table>,<tr>,<td>

2. $(“#...”).html(“”);

3. for循环

4. join方法

答案:

    <script type=text/javascript">

        var jsonArr=[];

        var $tab=$("<table border='1'></table>").append("<tr><td>姓名</td><td>年龄</td><td>爱好</td></tr>");

        for(var i=0;i<jsonArr.length;i++){

           var hobbyStr=jsonArr[i].hobby.join("、");

          

           var tr=$("<tr><td>"+jsonArr[i].name+"</td><td>"+jsonArr[i].age+"</td><td>"+hobbyStr+"</td></tr>");

        }

        $tab.appendTo("body");

    </script>

  1. Jquery常见选择器有哪些、常见的事件有哪些?

[常见选择器写出10个即可、事件写出四个即可]

基本: id、class、标签

层级:子、后代、兄弟

基本过滤选择器: :eq(index)、 :first 、:last

属性过滤选择器: [属性名=”属性值”]

可见性选择器: :hidden  、 :visibale

事件:Click()、dblclick()、mouseenter()、mouseleave()、mousemove()、change()

  1. 请解释Spring Bean的生命周期?

1.默认情况下,IOC容器中bean的生命周期分为五个阶段:

  • 调用构造器 或者是通过工厂的方式创建Bean对象
  • 给bean对象的属性注入值
  •  调用初始化方法,进行初始化, 初始化方法是通过init-method来指定的.
  • 使用

IOC容器关闭时, 销毁Bean对象.

2.当加入了Bean的后置处理器后,IOC容器中bean的生命周期分为七个阶段:

    ① 调用构造器 或者是通过工厂的方式创建Bean对象

    ② 给bean对象的属性注入值

    ③ 执行Bean后置处理器中的 postProcessBeforeInitialization

  •  调用初始化方法,进行初始化, 初始化方法是通过init-method来指定的.
  •  执行Bean的后置处理器中 postProcessAfterInitialization  
  •  使用
  •  IOC容器关闭时, 销毁Bean对象

  1. 简述Mybatis提供的两级缓存,以及缓存的查找顺序

1、MyBatis的缓存分为一级缓存和 二级缓存。

2、一级缓存是SqlSession级别的缓存,默认开启。

3、二级缓存是NameSpace级别(Mapper)的缓存,多个SqlSession可以共享,使用时需要进行配置开启。

4、缓存的查找顺序: 二级缓存    一级缓存    数据库

  1. 简述Springmvc中处理模型数据的两种方式

1、使用ModelAndView 作为方法的返回值,将 模型数据  和 视图信息封装到ModelAndView中

2、使用Map  或者是Model 作为方法的形参.  将模型数据添加到Map或者是Model中.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值