ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring面试题

2019-10-28 17:03:41  阅读:121  来源: 互联网

标签:面试题 分页 Spring Bean 接口 bean 实例 方法


1、什么是依赖注入

  依赖注入,是IOC的一个方面,是个通常的概念,它有多种解释。这概念是说你不用创建对象,而只需要描述它如何被创建。你不在代码里直接组装你的组件和服务,但是要在配置文件里描述哪些组件需要哪些服务,之后一个容器(IOC容器)负责把他们组装起来。

2、有哪些不同类型的IOC(依赖注入)方式?

  构造器依赖注入: 构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。

  Setter方法注入: Setter方法注入是容器通过调用无参构造器或无参static工厂 方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。

  静态工厂的方法注入:利用静态工厂方法可以把bean注入到IOC容器中。在XML文件中配置bean时,要指定class的属性为工厂的类;factory-method属性指定工厂类中工厂方法,用于创建bean;constrctor-arg用于给工厂方法传递参数

  实例工厂方法注入:将对象的创建过程封装到另外一个对象实例的方法里。当客户端需要请求对象时 , 只需要简单的调用该实例方法而不需要关心对象的创建细节。

3、最佳实践中,通常一个xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗(京东面试题)

  Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名,就是映射文件中 MappedStatement的id值,接口方法内的参数,就是传递给sql的参数。Mapper接口是没有实现类的,当调用接口方法时,接口全限名+ 方法名拼接字符串作为key值,可唯一定位一个MappedStatement,举 例:com.mybatis3.mappers.StudentDao.findStudentById,可以唯一找到namespace为 com.mybatis3.mappers.StudentDao下面id = findStudentById的MappedStatement。在Mybatis中,每一个<select>、< insert>、<update>、<delete>标签,都会被解析为一个MappedStatement对象。

  Dao接口里的方法,是不能重载的,因为是全限名+方法名的保存和寻找策略。

  Dao接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Dao接口生成代理proxy对象,代理对象proxy会拦截接口方法,转而执行MappedStatement所代表的sql,然后将sql执行结果返回。

4、Mybatis是如何进行分页的?分页插件的原理是什么?

  Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。

  分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。

  举例:select * from student,拦截sql后重写为:select t.* from (select * from student)t limit 0,10

5、Java中9大隐式对象有哪些?

  application---所有用户和整个服务器都可访问
  session---当前用户登录有效
  request---一次请求有效,通常在2个JSP中有效
  pageContext---当前用户一个JSP页面有效
  response 响应请求
  out 输出内容
  page 相当于JAVA中的this
  config 初始化的配置文件(web.xml)访问对象
  exception JSP中的异常处理

 

6、数据库里面的索引和约束是什么?

索引:

  索引是最为常用的改善数据库性能的技术。SQL Server引入索引主要是为了提高查询的效率,它能够加速ORDER BY和GROUP BY子句的操作,保证数据的唯一性,并加快表连接的速度。

约束:

  设计数据库完整性的目的是为了防止数据库存在不符合语义的数据,防止错误信息的输入和输出。SQL Server提供的用来实施数据完整性的途径主要是约束(Constraint)、标识列(Identity Column)、默认(Default)、规则(Rule)、触发器(Trigger)、数据类型(Data Type)、索引(Index)和存储过程(Stored Procedure)等

使用约束实施数据的完整性

  约束的用途是限制用户输入到表中的数据的值的范围,一般分为列级约束和表级约束两种。

7、Spring Bean的生命周期和作用域

7.1 bean的作用域

  

 

  • singleton:单例模式,Spring IoC容器中只会存在一个共享的Bean实例,无论有多少个Bean引用它,始终指向同一对象。
  • prototype:原型模式,每次通过Spring容器获取prototype定义的bean时,容器都将创建一个新的Bean实例,每个Bean实例都有自己的属性和状态。
  • request:在一次Http请求中,容器会返回该Bean的同一实例。而对不同的Http请求则会产生新的Bean,而且该bean仅在当前Http Request内有效。
  • session:在一次Http Session中,容器会返回该Bean的同一实例。而对不同的Session请求则会创建新的实例,该bean实例仅在当前Session内有效。
  • global Session:在一个全局的Http Session中,容器会返回该Bean的同一个实例,仅在使用portlet context时有效

7.2 bean的生命周期

  

 

  ①Spring对bean进行实例化,默认bean是单例;

  ②Spring对bean进行依赖注入;

  ③如果bean实现了BeanNameAware接口,spring将bean的id传给setBeanName()方法;

  ④如果bean实现了BeanFactoryAware接口,spring将调用setBeanFactory方法,将BeanFactory实例传进来;

  ⑤如果bean实现了ApplicationContextAware接口,它的setApplicationContext()方法将被调用,将应用上下文的引用传入到bean中;

  ⑥如果bean实现了BeanPostProcessor接口,它的postProcessBeforeInitialization方法将被调用;

  ⑦如果bean实现了InitializingBean接口,spring将调用它的afterPropertiesSet接口方法,类似的如果bean使用了init-method属性声明了初始化方法,该方法也会被调用;

  ⑧如果bean实现了BeanPostProcessor接口,它的postProcessAfterInitialization接口方法将被调用;

  ⑨此时bean已经准备就绪,可以被应用程序使用了,他们将一直驻留在应用上下文中,直到该应用上下文被销毁;

  ⑩若bean实现了DisposableBean接口,spring将调用它的distroy()接口方法。同样的,如果bean使用了destroy-method属性声明了销毁方法,则该方法被调用

标签:面试题,分页,Spring,Bean,接口,bean,实例,方法
来源: https://www.cnblogs.com/Zzzzn/p/11753456.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有