SSM相关知识面试题

1.springMVC中如何解决post请求的乱码问题?

        通过在web.xml文件中添加characterEncodingFilter过滤器的相关配置:

<filter>
        <filter-name>characterEncodingFilter</filter-name>
        <!--配置转码,将编码都转为UTF-8-->
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
</filter>
<filter-mapping>
      <filter-name>characterEncodingFilter</filter-name>
      <url-pattern>/*</url-pattern><!-- 拦截路径-->
</filter-mapping>

        其中encoding和forceEncoding为 characterEncodingFilter的两个参数:

        ①encoding:字符集,即将过滤到的request的字符集设置为encoding指定的值。

        ②forceEncoding:强制字符集,该参数的值是指定response的字符集是否也设置成encoding所指定的字符集,默认为false。当设为true时响应字符集使用所指定的值。

2.浅谈以下springMVC的工作流程?

        ①客户端向中央控制器DispatcherServlet发送请求;

        ②DispatcherServlet调用处理器映射器HandlerMapping查找处理器,并返回HandlerExecutionhCain(包含处理器对象和处理器拦截器);

        ③HandlerExecutionhCain通过处理器适配器HandlerAdapter调用具体的处理器Handler(即Controller),并返回ModelAndView;

        ④视图解析器ViewResolver通过对视图进行解析,并返回view实例;

        ⑤view经过render()方法渲染后响应用户。

3.Java事务传播的七种类型?          

        spring中配置事务,需要在类、类方法、接口或接口方法(一般不在接口或接口方法上添加)上添加@Transactional(propagation=Propagation.类型)注解。

        ①REQUIRED(默认值):如果当前有事务在运行,则当前方法就在该事务中运行;否则,启动一个新的事务并在新启动的事务中运行。

        ②REQUIRED_NEW:当前方法必须启动一个新的事务,并在新启动的事务中运行;如果有事务正在运行,则将其挂起。

        ③SUPPORTS:如果有事务在运行,则当前方法在该事务中运行;否则,可以不运行在事务中。

        ④NOT_SUPPORTS:当前方法不应该运行在事务中,如果当前有运行的事务,则将其挂起。

        ⑤MANDATORY:当前方法必须运行在事务中,如果没有正在运行的事务,则抛出异常。

        ⑥NEVER:当前方法不应该运行在事务中,如果有运行的事务,则抛出异常。

        ⑦NESTED:如果有运行的事务,则当前方法应该在这个事务的嵌套事务内运行:否则,启动一个新的事务,并在新启动的事务中运行。

        Java事务的四大特性:

        ①原子性:表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。
        ②一致性:表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。
        ③隔离性:表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。
        ④持久性:表示已提交的数据在事务执行失败时,数据的状态都应该正确。

        在Spring中,事务有两种实现方式,分别是编程式事务管理和声明式事务管理两种方式。 
        1、编程式事务管理: 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。 
        2、声明式事务管理: 建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。 

        注意:虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。
4.MyBatis中实体类中的属性名和表中的字段名不一致有几种解决方法?

        ①sql语句中对字段名起别名,使其与属性名一致;

<select id="接口方法的方法名" resultType="方法返回值的全类名">
    select 字节名 别名(同属性名) from 表名
</select>

        ②在MyBatis配置文件中开启全局配置中的驼峰命名规则;

<settings>
    <!--开启驼峰命名规则:user_name可以映射为userName-->
    <setting name="mapUnderScoreToCamelCase" value="true"/>
</settings>

        ③自定义resultMap映射规则;

<select id="接口方法的方法名" resultMap="resultMap的id">
    select 字节名 别名(同属性名) from 表名
</select>

<resultMap type="方法返回值的全类名" id="自己定义">
    <!--映射主键-->
    <id column="字段id名" property="属性id名">
    <!--映射其他列-->
    <result column="字段名" property="属性名"/>
</resultMap>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值