zoukankan      html  css  js  c++  java
  • 面试准备 (框架ssm和springboot)

    一、Spring面试题

    Spring MVC Framework有这样一些特点:
    它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是java组件.并且和Spring提供的其他基础结构紧密集成.
    不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet的)
    可以任意使用各种视图技术,而不仅仅局限于JSP
    支持各种请求资源的映射策略
    它应是易于扩展的

    2) 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响应用户

    3) 如果你也用过struts2.简单介绍下springMVC和struts2的区别有哪些?

    1. springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过虑器。
    2. springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
    3. Struts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。

    4) SpringMvc原理?
    这里写图片描述

    5) SSM优缺点、使用场景?

    1. Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。

    2. Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。

    3. Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。但是Hibernate的学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。

    4. 总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。

    Mybatis
    1) 简单介绍下你对mybatis的理解?

    1. mybatis配置
    2. SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
    3. mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
    4. 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
    5. 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
    6. mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
    7. Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
    8. Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
    9. Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

    (1) Spring在SSM起什么作用
    Spring是一个轻量级框架,也是一个容器,Spring实质上讲就是一个Bean工厂,主要用来管理Bean的生命周期和框架集成。有IOC控制反转,DI依赖注入,控制反转是把dao依赖注入到servic层,然后service层反转给action层,Spring的顶层容器为BeanFactory,常用的ApplicationContext为它的子接口,实现了工厂模式,Spring还提供了AOP的支持,方便在切面级开发,

    (2) 怎么样理解IOC和DI
    在使用Spring框架的过程中、一定会用到控制反转、但是往往所需要的资源还需要其他资源的支持、个过程就需要依赖注入的支持

    (3)Spring的事务,事务的作用。
    • 编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。
    • 声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和XML配置来管理事务。

    (4) Spring的IOC你在项目中是怎么使用的?
    • IOC主要来解决对象之间的依赖问题,把所有的bean的依赖关系通过配置文件或者注解关联起来,降低了耦合度

    (5)Spring的配置文件有哪些内容?
    • 开启事务注解驱动
    • 事务管理器
    • 开启注解功能,并配置扫描包
    • 配置数据源
    • 配置SQL会话工厂、别名、映射文件
    • 不用编写DAO层的实现类(代理模式)
    (6)说下Spring的注解
    @Controller
    @Service
    @Component
    @RequestMapping
    @Resource、@Autowired
    @ResponseBody
    @Transactional

    (7)为什么要用Spring
    • 降低对象耦合度,让代码更加清晰,提供一些常见的模版

    (8)Spring DI的几种方式
    (1)构造器注入:通过构造方法初始化
    < constructor-arg name=”dao”< /constructor-arg>
    (2)setter注入:通过setter方法初始化注入
    < property name=”dao” ref=”dao2”>< / property >
    注意:在实际开发中常用setter注入。

    (1)SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决
    是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段

    (2)SpingMvc中的控制器的注解
    @Controller 注解:该注解表明该类扮演控制器的角色,Spring不需要你继承任何其他控制器基类或引用Servlet API。

    (3)@RequestMapping注解用在类上面有什么作用
    该注解是用来映射一个URL到一个类或一个特定的方处理法上。

    (4) 我想在拦截的方法里面得到从前台传入的参数,怎么得到
    直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样

    (5)如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象
    直接在方法中声明这个对象,SpringMvc就自动会把属性赋值到这个对象里面

    (6)SpringMvc中函数的返回值是什么
    返回值可以有很多类型,有String, ModelAndView,List,Set等,一般用String比较好,如果是AJAX请求,返回的可以是一个集合

    (7)SpringMvc怎么处理返回值的
    SpringMvc根据配置文件中InternalResourceViewResolver(内部资源视图解析器)的前缀和后缀,用前缀+返回值+后缀组成完整的返回值

    (8)SpringMVC怎么样设定重定向和转发的
    在返回值前面加”forward:”就可以让结果转发,譬如”forward:user.do?name=method4” 在返回值前面加”redirect:”就可以让返回值重定向,譬如”redirect:http://www.uu456.com

    (9)SpringMvc中有个类把视图和数据都合并的一起的,叫什么
    ModelAndView

    (10)怎么样把数据放入Session里面
    可以声明一个request,或者session先拿到session,然后就可以放入数据,或者可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key

    (11)SpringMvc怎么和AJAX相互调用的
    通过Jackson框架就可以把Java里面的对象直接转化成js可以识别的Json对象 具体步骤如下 :
    1.加入Jackson.jar
    2.在配置文件中配置json的映射
    3.在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解

    (12)当一个方法向AJAX返回对象,譬如Object,List等,需要做什么处理
    要加上@ResponseBody注解

    (13)讲下SpringMvc的执行流程
    系统启动的时候根据配置文件创建spring的容器, 首先是发送http请求到核心控制器DispatcherServlet,spring容器通过映射器去寻找业务控制器,
    使用适配器找到相应的业务类,在进业务类时进行数据封装,在封装前可能会涉及到类型转换,执行完业务类后使用ModelAndView进行视图转发,
    数据放在model中,用map传递数据进行页面显示。

    (1)什么是MyBatis的接口绑定,有什么好处
    接口映射就是在IBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,我们直接调用接口方法就可以,这样比起原来了SqlSession提供的方法我们可以有更加灵活的选择和设置.

    (2)什么情况下用注解绑定,什么情况下用xml绑定
    当Sql语句比较简单时候,用注解绑定,当SQL语句比较复杂时候,用xml绑定,一般用xml绑定的比较多

    (3)如果要查询的表名和返回的实体Bean对象不一致,那你是怎么处理的?
    在MyBatis里面最主要最灵活的的一个映射对象的ResultMap,在它里面可以映射键值对, 默认里面有id节点,result节点,它可以映射表里面的列名和对象里面的字段名. 并且在一对一,一对多的情况下结果集也一定要用ResultMap

    (4)MyBatis在核心处理类叫什么
    MyBatis里面的核心处理类叫做SqlSession

    (5)讲下MyBatis的缓存
    MyBatis的缓存分为一级缓存和二级缓存,一级缓存放在session里面,默认就有,二级缓存放在它的命名空间里,
    默认是打开的,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置
    < cache/ >

    (6)MyBatis(IBatis)的好处是什么
    ibatis把sql语句从Java源程序中独立出来,放在单独的XML文件中编写,给程序的
    维护带来了很大便利。
    ibatis封装了底层JDBC API的调用细节,并能自动将结果集转换成JavaBean对象,大大简化了Java数据库编程的重复工作。
    因为Ibatis需要程序员自己去编写sql语句,程序员可以结合数据库自身的特点灵活控制sql语句,
    因此能够实现比hibernate等全自动orm框架更高的查询效率,能够完成复杂查询。

    (7)MyBatis怎么配置一对多?
    一对多的关系 :property: 指的是集合属性的值, ofType:指的是集合中元素的类型

    (8)MyBatis怎样配置多对一?
    多对一的关系:property: 指的是属性的值, javaType:指的是属性的类型

     

    1、Spring 在ssm中起什么作用?

    • Spring:轻量级框架

    • 作用:Bean工厂,用来管理Bean的生命周期和框架集成。

    • 两大核心:
      ①. IOC/DI(控制反转/依赖注入) :把dao依赖注入到service层,service层反转给action层,Spring顶层容器为BeanFactory。
      ②. AOP:面向切面编程

    2、Spring的事务?

    • 编程式事务管理:编程方式管理事务,极大灵活性,难维护。

    • 声明式事务管理:可以将业务代码和事务管理分离,用注解和xml配置来管理事务。

    3、IOC 在项目中的作用?

    • 作用:Ioc解决对象之间的依赖问题,把所有Bean的依赖关系通过配置文件或注解关联起来,降低了耦合度。

    4、Spring的配置文件中的内容?

    • 开启事务注解驱动

    • 事务管理器

    • 开启注解功能,并配置扫描包

    • 配置数据库

    • 配置SQL会话工厂,别名,映射文件

    • 不用编写Dao层的实现类

    5、Spring下的注解?

    • 注册:@Controller @Service @Component

    • 注入:@Autowired @Resource

    • 请求地址:@RequestMapping

    • 返回具体数据类型而非跳转:@ResponseBody

    6、Spring DI 的三种方式?

    • 构造器注入:通过构造方法初始化

    <constructor-arg index="0" type="java.lang.String" value="宝马"></constructor-arg>
    • setter方法注入:通过setter方法初始化

    <property name="id" value="1111"></property>
    • 接口注入

    7、Spring主要使用了什么模式?

    • 工厂模式:每个Bean的创建通过方法

    • 单例模式:默认的每个Bean的作用域都是单例

    • 代理模式:关于Aop的实现通过代理模式

    8、IOC,AOP的实现原理?

    • IOC:通过反射机制生成对象注入

    • AOP:动态代理

     


    二、SpringMvc面试题

    1、SpringMvc 的控制器是不是单例模式,如果是,有什么问题,怎么解决?

    • 问题:单例模式,在多线程访问时有线程安全问题

    • 解决方法:不要用同步,在控制器里面不能写字段

    2、SpringMvc 中控制器的注解?

    • @Controller:该注解表明该类扮演控制器的角色

    3、@RequestMapping 注解用在类上的作用?

    • 作用:用来映射一个URL到一个类或者一个特定的处理方法上

    4、前台多个参数,这些参数都是一个对象,快速得到对象?

    • 方法:直接在方法中声明这个对象,SpringMvc就自动把属性赋值到这个对象里面

    5、SpringMvc中函数的返回值?

    String,ModelAndView,List,Set 等
    一般String,Ajax请求,返回一个List集合

    6、SpringMvc中的转发和重定向?

    • 转发: return:“hello”

    • 重定向 :return:“redirect:hello.jsp”

    7、SpringMvc和Ajax之间的相互调用?

    通过JackSon框架把java里面对象直接转换成js可识别的json对象,具体步骤如下:

    1. 加入JackSon.jar

    2. 在配置文件中配置json的映射

    3. 在接受Ajax方法里面直接返回Object,list等,方法前面需要加上注解@ResponseBody

    8、SpringMvc的工作流程图?

    9、Struts2 和 SpringMvc的区别?

    1. 入口不同:

    • Struts2:filter过滤器

    • SpringMvc:一个Servlet即前端控制器

    1. 开发方式不同:

    • Struts2:基于类开发,传递参数通过类的属性,只能设置为多例

    • SpringMvc:基于方法开发(一个url对应一个方法),请求参数传递到方法形参,可以为单例也可以为多例(建议单例)

    1. 请求方式不同:

    • Struts2:值栈村塾请求和响应的数据,通过OGNL存取数据

    • SpringMvc:通过参数解析器将request请求内容解析,给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过request域传输到页面,jsp视图解析器默认使用的是jstl。


    三、Mybatis面试题

    1、Ibatis和Mybatis?

    • Ibatis:2010年,apache的Ibatis框架停止更新,并移交给了google团队,同时更名为MyBatis。从2010年后Ibatis在没更新过,彻底变成了一个孤儿框架。一个没人维护的框架注定被mybatis拍在沙滩上。

    • Mybatis:Ibatis的升级版本。

    2、什么是Mybatis的接口绑定,有什么好处?

    Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。

    3、什么情况用注解,什么情况用xml绑定?

    • 注解使用情况:Sql语句简单时

    • xml绑定使用情况:xml绑定 (@RequestMap用来绑定xml文件)

    4、Mybatis在核心处理类叫什么?

    SqlSession

    5、查询表名和返回实体Bean对象不一致,如何处理?

    映射键值对即可

    <result column="title" property="title" javaType="java.lang.String"/>
    • column:数据库中表的列名

    • property:实体Bean中的属性名

    6、Mybatis的好处?

    • 把Sql语句从Java中独立出来。

    • 封装了底层的JDBC,API的调用,并且能够将结果集自动转换成JavaBean对象,简化了Java数据库编程的重复工作。

    • 自己编写Sql语句,更加的灵活。

    • 入参无需用对象封装(或者map封装),使用@Param注解

    7、Mybatis配置一对多?

    <collection property="topicComment" column="id" ofType="com.tmf.bbs.pojo.Comment" select="selectComment" />
    • property:属性名

    • column:共同列

    • ofType:集合中元素的类型

    • select:要连接的查询

    8、Mybatis配置一对一?

    <association property="topicType" select="selectType" column="topics_type_id" javaType="com.tmf.bbs.pojo.Type"/>
    • property:属性名

    • select:要连接的查询

    • column:共同列

    • javaType:集合中元素的类型

    9 、${} 和 #{}的区别?

    • ${}:简单字符串替换,把${}直接替换成变量的值,不做任何转换,这种是取值以后再去编译SQL语句。

    • #{}:预编译处理,sql中的#{}替换成?,补全预编译语句,有效的防止Sql语句注入,这种取值是编译好SQL语句再取值。
      总结:一般用#{}来进行列的代替

    10、获取上一次自动生成的主键值?

    select last _insert_id()

    11、Mybatis如何分页,分页原理?

    • RowBounds对象分页

    • 在Sql内直接书写,带有物理分页

    12、Mybatis工作原理?


    原理:

        • 通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件中构建出SqlSessionFactory。

        • SqlSessionFactory开启一个SqlSession,通过SqlSession实例获得Mapper对象并且运行Mapper映射的Sql语句。

        • 完成数据库的CRUD操作和事务提交,关闭SqlSession

  • 相关阅读:
    HDU 4825 字典树
    HDU4287 字典树
    HDU 3973 AC's String 字符串哈希
    HDU5296 Annoying problem(LCA)
    Gym 100712L Alternating Strings II(单调队列)
    数据结构专题
    HDU5033 Building(单调栈)
    HDU2888 Check Corners(二维RMQ)
    HDU 4123 Bob’s Race(RMQ)
    HDU3530 Subsequence(单调队列)
  • 原文地址:https://www.cnblogs.com/Treesir/p/11753134.html
Copyright © 2011-2022 走看看