自己理解SSM框架可能问到的面试问题

  

  一、需要知道的SSM基础知识

     1.什么是Spring?

          Spring 是一款轻量级的 IOC (依赖反转) 和  APO (面向切面) 容器框架。(个人理解: 就是一个Bean对象容器,不用我们new 对象了,将对象的创建交给容器系统来管理了)

          常见的配置方式有三种 :

              1.基于 xml 的配置方式              2.基于注解的配置方式              3.基于Java的配置方式 (虽然这种我没怎么用过吧,但是确实是存在)

        

     2.Spring Bean对象的作用范围

          1 ) .  singleton :这种bean的范围是默认的,不管来了多少请求返回的都是这个对象,单例模式 ,正是这个原因(全局共享一个变量) 可能会造成线程不安全,但是只有 有状态Bean的时候才可能会出现  

              prototype : 原形范围与单例范围相反,为每一个请求都创建一个对象

              request :   在请求bean范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。

              session :与请求范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效。

              global-session :global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。(这个是直接复制粘贴的,并没有直接理解)

    3.Spring 用到的设计模式

         答:   简单工厂模式、工厂模式、代理模式、单例模式、模板模式......(暂时没有理解到的,还有好多)

       4.Spring 基于xml 注入bean的几种方法:

        答:

           1.set方法

           2.构造器方法    (两个参数同类型:可以使用index中)

          3.静态工厂方法

          4.实例工厂方法

    5.使用Spring的优点

          1.可以解耦合

          2.通过使用AOP可以方便的进行事务管理  、权限控制、日志管理

          3.Spring 对主流框架进行了支持如 Struts2  和 Hibernate等

    6.Spring事务管理的两种方式:

          1.编程式事务:在代码中使用编程来完成事务管理 ,硬编码不推荐使用 (这个我还真的没有具体使用过,等使用过在来发表评论)

          2.声明式事务: 在配置文件中进行声明配置,也可以使用注解进行配置   (推荐使用)

              申声明式事务也分为两种:

               1.基于注解的声明式事务

               2.基于xml的声明式事务

    7.Spring中的核心类有哪些?各有什么作用

          好吧,我坦言 在Spring中我知道的类没有几个,一个手都能数过来,希望以后能好好的读一下Spring 的底层源码,但是我知道的有以下两个

          BeanFactory : 对象的工厂,里面有对 对象的基本操作,比如说getBean,可以产生一个新的对象。

          ApplicationContext: 继承了BeanFactory 功能比  BeanFactory更多

           ..........

           未完。待续

    8.DI 和 IOC的理解

       

        一、IOC介绍

          IOC是控制反转。

          创建对象实例的控制权从代码控制剥离到IOC容器控制(之前的写法,由程序代码直接操控使用new关键字),实际就是你在xml文件控制,控制权的转移是所谓反转,侧重于原理。

        二、DI介绍

          DI是依赖注入

          创建对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现。

        三、区别

          1.它们是spring核心思想的不同方面的描述。

          2.依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。

              依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;

                   而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。

     9.什么是SpringMVC:

          SpringMVC是一款基于Java实现的MCV设计模式的一款轻量级web框架,他实现了web内容的解耦合。

       10.SpringMVC处理用户请求的流程:

            1.用户发送请求至前端控制器DispatcherServlet

            2.DispatcherServlet收到请求调用HandlerMapping处理器映射器。

            3.处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

            4.DispatcherServlet通过HandlerAdapter处理器适配器调用处理器

            5.执行处理器(Controller,也叫后端控制器)。

            6.Controller执行完成返回ModelAndView

            7.HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet

            8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器

            9.ViewReslover解析后返回具体View

            10.DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。

            11.DispatcherServlet响应用户

     11.SpringMVC 如何解决中文POST 和 GET请求乱码问题

            1.get请求 可以使用手动转换    String name = new String(xx.getBytes(“iso-8859-1”),”utf-8”);

                 如果不起作用的话可以修改  server.xml 和工程的编码都为 utf-8

            2.post 请求中文乱码问题解决方式

                在web.xml 文件中配置Spring中的  CharacterEncoding Filter

     12.SpringMVC如何响应JSON数据给Ajax使用

          1.使用Jaskon jar包

          2.配置ResponseBody  

          3.在配置文件中配置   <mvc:annotation-driven />

       13.什么是Mybatis?

            1. mybatis 是一款半ORM框架(他内部封装了JDBC的操作 是开发者专注于sql的编写,并不用关心驱动的加载,连接对象的创建、创建statement对象等复杂的操作过程)灵活性高。

            2.mybatis可以使用xml 或者注解来进行对Entity对象于数据库表中的字段进行对应,避免了JDBC返回结果集的设置

            3.通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和 statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。(从执行sql到返回result的过程)。                        (这个是我抄的。。。。。)

      14.Mybatis的优点

            1.可以灵活的编写sql语句

            2.对各种数据库有很好的兼容

            3.与JDBC相比 减少了50%的代码,减少了大量的冗余代码,不用手动 创建和关闭连接  

            4.能够与Spring进行很好的集成

      15.Mybatis的缺点

             1.如果涉及的业务逻辑比较负责,涉及到多表关联,对程序开发人员的sql语句功底掌握要求较高

              2. 可移植性差   sql语句与具体使用的数据库有很大关系,如果更换数据库,sql语句可能需要重新编写。

      16.  ${} 和 #{}的区别

              # 是预编译处理

              $ 是字符串替换

            Mybatis  在处理 #{}  会将sql 中的#{} 替换成 ? 并调用  PreparedStatement的set方法来设置值

            Mybatis 在处理${}   会直接将sql 中的${} 直接替换成字符串  ,存在sql 注入问题

      

      17. 当实体类中的属性和表中的字段名称不一致该怎么解决?

            解决方案1: 在查询的sql 语句中定义字段的别名,让别名和类属性的名称一致

              

             <select id=”selectorder” parametertype=”int” resultetype=”me.gacl.domain.order”>
              select order_id id, order_no orderno ,order_price price form orders where order_id=#{id};
          </select>

             

            解决方案2:   通过<resultMap>来映射字段名和实体类属性名的一一对应的关系。

              

           <select id="getOrder" parameterType="int" resultMap="orderresultmap">
          select * from orders where order_id=#{id}
         </select>          <resultMap type=”me.gacl.domain.order” id=”orderresultmap”>
      <!–用id属性来映射主键字段–>
         <id property=”id” column=”order_id”>         <!–用result属性来映射非主键字段,property为实体类属性名,column为数据表中的属性–>
        <result property = “orderno” column =”order_no”/>
        <result property=”price” column=”order_price” />
        </reslutMap>

  

    18.通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?

      Dao接口里的方法,参数不同时,方法能重载吗?

          Dao接口即Mapper接口。接口的全限名,就是映射文件中的namespace的值;接口的方法名,就是映射文件中Mapper的Statement的id值;接口方法内的参数,就是传递给sql的参数。

Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可唯一定位一个MapperStatement。在Mybatis中,每一个<select>、<insert>、<update>、<delete>标签,都会被解析为一个MapperStatement对象。

举例:com.mybatis3.mappers.StudentDao.findStudentById,可以唯一找到namespace为com.mybatis3.mappers.StudentDao下面 id 为 findStudentById 的 MapperStatement。

Mapper接口里的方法,是不能重载的,因为是使用 全限名+方法名 的保存和寻找策略。Mapper 接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Mapper接口生成代理对象proxy,代理对象会拦截接口方法,转而执行MapperStatement所代表的sql,然后将sql执行结果返回。

    ————————————————————————还有好多知识,但是日后在补充————————————————————————————————

 

  

《Java 面试问题 一 Spring 、SpringMVC 、Mybatis》的更多相关文章

  1. 如约而至,Java 10 正式发布! Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势 努力的孩子运气不会太差,跌宕的人生定当更加精彩 优先队列详解(转载)

    如约而至,Java 10 正式发布!   3 月 20 日,Oracle 宣布 Java 10 正式发布. 官方已提供下载:http://www.oracle.com/technetwork/java ...

  2. Java架构学习 转(Spring+SpringMVC+MyBatis+easyUI)

    Spring+SpringMVC+MyBatis+easyUI : http://www.cnblogs.com/han-1034683568/p/6730869.html

  3. Java Web开发之Spring | SpringMvc | Mybatis | Hibernate整合、配置、使用

    1.Spring与Mybatis整合 web.xml: <?xml version="1.0" encoding="UTF-8"?> <web ...

  4. JAVA 整合 SSM (Spring + SpringMVC + MyBatis)

    < 一 > POM 配置文件 ( 如果出现 JAR 包 引入错误, 请自行下载 ) <project xmlns="http://maven.apache.org/POM/ ...

  5. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现)

    写在前面的话 原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做: 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的. 而且这次 ...

  6. java实现微信支付宝等多个支付平台合一的二维码支付(maven+spring springmvc mybatis框架)

    首先申明,本人实现微信支付宝等支付平台合多为一的二维码支付,并且实现有效时间内支付有效,本人采用的框架是spring springmvc mybatis 框架,maven管理.其实如果支付,不需要my ...

  7. 【JAVA】SSM开源项目源码--城市学院移动后勤-毕业设计(Spring SpringMvc Mybatis Mui Redis )

    项目简介 大学时期老师给我做的项目,学校后勤管理中心,也作为毕业设计项目. 有 后勤保修 二手交易 失物招领 后勤通知 等功能. 城市学院移动后勤 有APP端(webapp)和WEB端(PC) 后端使 ...

  8. 基于Spring+SpringMVC+Mybatis的Web系统搭建

    系统搭建的配置大同小异,本文在前人的基础上做了些许的改动,重写数据库,增加依据权限的动态菜单的实现,也增加了后台返回json格式数据的配置,详细参见完整源码. 主要的后端架构:Spring+Sprin ...

  9. IDEA中maven搭建Spring+SpringMVC+mybatis项目

    一.介绍 使用IDEA搭建maven web项目,整合框架Spring+SpringMVC+mybatis 项目结构图:

  10. 【JavaWeb】Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架(三)

    Spring+SpringMVC MVC呢,现在似乎越来越流行使用SpringMVC框架,我自己用的感觉,是非常好,确实很舒服,配置一开始是麻烦了一点点,但是后续的开发真的是很清爽! SpringMV ...

随机推荐

  1. kafka java代码实现消费者

    public class KafkaConsumer { public static void main(String[] args) { Properties props = new Propert ...

  2. SVN常见错误和版本冲突解决

    之前在Eclipse下面误删除了svn的一些插件包,后来重装了就问题重重,在这里还是建议, Windows下SVN最好使用桌面版,在文件管理器下面更新和提交. 1.常见错误整理 #, c-format ...

  3. JS操作SELECT方法

    1.判断select选项中 是否存在Value="paraValue"的Item2.向select选项中 加入一个Item3.从select选项中 删除一个Item4.修改sele ...

  4. Solr使用solr4J操作索引库

    Solrj是Solr搜索服务器的一个比较基础的客户端工具,可以非常方便地与Solr搜索服务器进行交互.最基本的功能就是管理Solr索引,包括添加.更新.删除和查询等.对于一些比较基础的应用,用Solj ...

  5. js排序的方法

    //排序算法 window.onload = function(){     var array = [0,1,2,44,4,                 324,5,65,6,6,        ...

  6. Flex外包公司——Flex案例展示

    Flex案例展示 做的mail系统:  http://gowebtop.com/webtop/ 在线购书网站  http://book.orzar.net/ eBay购物网站  http://www. ...

  7. React中的“双向绑定”

    概述 React并不是一个MVVM框架,其实它连一个框架都算不上,它只是一个库,但是react生态系统中的flux却是一个MVVM框架,所以我研究了一下flux官方实现中的"双向绑定&quo ...

  8. python3_字符串

    一.字符串的表示 >>> s = "narjaja never give up" #字符串的创建和初始化 >>> s = 'narjaja ne ...

  9. linux 软/硬链接详解

    SYNOPSIS ln [OPTION]... [-T] TARGET LINK_NAME (1st form) ln [OPTION]... TARGET (2nd form) ln [OPTION ...

  10. [原创.数据可视化系列之八]使用等d3进行灰度图转伪彩色

    对灰度图进行彩色化是数据可视化中常见的需求,使用d3在客户端比较容易实现,本文使用d3生成图片,并显示: 代码如下: 代码中首先下载数据文件,然后设定d3的色带信息,生成一个空白的canvas元素,并 ...