JAVA企业面试题精选 Spring 1-10

第四部分

1.Spring

1.1.描述Spring框架的作用和优点

参考答案:

  Spring框架的作用和优点如下:
  1.Spring是一个开源的轻量级的应用开发框架,其目的是用于简化企业级应用程序开发,减少侵入;
  2.Spring提供的IoC和AOP应用,可以将组建的耦合度降至最低,即解耦,便于系统日后的维护和升级;
  3.Spring为系统提供了一个整体的解决方案,开发者可以利用它本身提供的功能外,也可以与第三方框架合计数整合应用,可以自由选择采用哪种技术进行开发.

1.2.如何控制Bean对象的作用域,默认作用域是什么

参考答案:

  1.可以通过<bean>定义的scope属性指定Bean对象的作用域或者使用注解@Scope指定Bean对象的作用域.
  2.默认Bean对象的作用域为singleton.

1.3.描述下列注解标记的作用

@Component,@Repository,@Service,@Autowired,@Inject,@Value

参考答案:

  1.@Component为通用注解.
  2.@Repository为持久层组件注解.
  3.@Service为业务层组件注解.
  4.@Scope为Bean的作用域注解.
  5.@Autowired,@Inject为指定Bean之间依赖关系的注解.
  6@Value为注入Spring表达式值的注解.

1.4.描述Spring Web MVC的工作流程

参考答案:

  Spring Web MVC的共工作流程如下:
  1.浏览器发出spring mvc请求,请求嫁给前端控制器DispatcherServlet处理.
  2.控制器通过HandlerMapping维护的请求和Controller映射信息,找到相应的Controller组件处理请求.
  3.执行Controller组件约定方法处理请求,在约定方法中可以调用Service和DAO等组件完成数据库操作.约定方法可以返回一个ModelAndView对象,封装了模型数据和视图名称信息.
  4.控制器接受ModelAndView之后,调用ViewResolver组件,定位View的JSP并传递Model信息,生成响应界面结果.

1.5.Spring有什么缺点?

参考答案:

  Spring有什么缺点如下:
  1.jsp中要写很多代码;
  2.控制器过于灵活,缺少一个公用控制器;
  3.不支持分布式部署.

1.6.Spring中的IOC和AOP是什么含义,它们在项目中起到什么作用,并举例说明

参考答案:

  IOC:控制反转,是一种设计模式.一层哈尼是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制;第二层是依赖注入:将相互以来的对象分离,在Spring配置文件中描述他们的依赖关系.他们的依赖关系只在使用的时候才建立.
  AOP:面向切面,是一种编程思想,OOP的延续.将系统中非核心的业务提取出来,进行单独处理.
  Spring的AOP和IOC在项目中都是为了解决系统代码耦合度过高的问题.使代码重用度高,易于维护.比如事务,日志和安全等.

1.7.简述Spring事务有几种管理方法,写出一种配置方式

参考答案:

  Spring事务有两种方式:
  1.编程式事务:(代码中嵌入)
  2.声明式事务:(注解,XML)
  注解方式配置事务的方式如下:
  首先,需要在applicationContext.xml中添加启用配置,代码如下所示:

<!-- 定义事务管理器 -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactor" ref="sessionFactory">
</bean>
<tx:annotation=driven transaction-manager="txManager"/>
    
    
  • 1
  • 2
  • 3
  • 4
  • 5

  然后,使用@Transactional注解,代码如下所示:

@Transactional
public class DefaultFooService implements FooService{
    //@Transactional
    public void insertFoo(Foo foo){...}
    public void updateFoo(Foo foo){...}
}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

  @Transactional注解标记可以用子安类定义和方法定义前,方法的事务设置将优先于类级别注解的事务设置.

1.8.简单解释一下事务拦截器的实现原理

参考答案:

  Spring中的事务管理是通过AOP代理来实现的,被代理对象的每个方法进行来接,在方法执行前启动事务,方法执行完后根据是否有异常和异常的种类进行提交或回滚.

1.9.请说明Spring事务管理中的传播行为和隔离等级

参考答案:

  Spring事务的传播行为如下:
  1.PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择.
  2.PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行.
  3.PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常.
  4.PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起.
  5.PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起.
  6.PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常.
  7.PROPAGATION_NESTED–如果当前存在事务,则在嵌套事务内执行.如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作.
  Spring事务的隔离级别如下:
  数据库系统提供了四种事务隔离级别供用户选择.不同的隔离级别采用不同的锁类型来实现,在四种隔离级别中,Serializable的隔离级别最高,ReadUncommitted的隔离级别最低.大多数数据库默认的隔离界别为ReadCommited,如SqlServer,当然也有少部分数据库默认的隔离级别为RepeatableRead,如MySQL.
  1.ReadUncommitted:读未提交数据(会出现脏读,不可重复读和幻读).
  2.ReadCommited:读已提交数据(会出现不可重复渡河幻读).
  3.RepeatableRead:可重复读(会出现幻读).
  4.Serializable:串行化.
  脏读:一个事务读取到另一个事务未提交的更新数据.
  不可重复读:在同一个事务中,多次读取同一个数据返回的结果有所不同.换句话收就是,后续读取可以读到另一事物已提交的更新数据.相反,”可重复读”在同一事物中多次读取数据时,能够保证所读数据一样,也就是,后续读取不能读到另一事务已提交的更新数据.
  幻读:一个事务读取到另一个事务已提交的insert数据.

1.10.Spring的Bean有哪些作用域?

参考答案:

  Spring的Bean有以下五种作用域:
  1.singleton:SpringIOC容器只会创建该Bean的唯一实例;
  2.prototype:每次请求都创建一个实例;
  3.request:每次HTTP请求都会产生一个新的bean.需要注意的是,该作用域仅在基于Web的Spring ApplicationContext情形下有效,以下的session和global Session也是如此;
  4.session:每次回话创建一个实例;
  5.global session:全局的HttpSession中,容器会返回该bean的同一个实例.

第四部分

1.Spring

1.1.描述Spring框架的作用和优点

参考答案:

  Spring框架的作用和优点如下:
  1.Spring是一个开源的轻量级的应用开发框架,其目的是用于简化企业级应用程序开发,减少侵入;
  2.Spring提供的IoC和AOP应用,可以将组建的耦合度降至最低,即解耦,便于系统日后的维护和升级;
  3.Spring为系统提供了一个整体的解决方案,开发者可以利用它本身提供的功能外,也可以与第三方框架合计数整合应用,可以自由选择采用哪种技术进行开发.

1.2.如何控制Bean对象的作用域,默认作用域是什么

参考答案:

  1.可以通过<bean>定义的scope属性指定Bean对象的作用域或者使用注解@Scope指定Bean对象的作用域.
  2.默认Bean对象的作用域为singleton.

1.3.描述下列注解标记的作用

@Component,@Repository,@Service,@Autowired,@Inject,@Value

参考答案:

  1.@Component为通用注解.
  2.@Repository为持久层组件注解.
  3.@Service为业务层组件注解.
  4.@Scope为Bean的作用域注解.
  5.@Autowired,@Inject为指定Bean之间依赖关系的注解.
  6@Value为注入Spring表达式值的注解.

1.4.描述Spring Web MVC的工作流程

参考答案:

  Spring Web MVC的共工作流程如下:
  1.浏览器发出spring mvc请求,请求嫁给前端控制器DispatcherServlet处理.
  2.控制器通过HandlerMapping维护的请求和Controller映射信息,找到相应的Controller组件处理请求.
  3.执行Controller组件约定方法处理请求,在约定方法中可以调用Service和DAO等组件完成数据库操作.约定方法可以返回一个ModelAndView对象,封装了模型数据和视图名称信息.
  4.控制器接受ModelAndView之后,调用ViewResolver组件,定位View的JSP并传递Model信息,生成响应界面结果.

1.5.Spring有什么缺点?

参考答案:

  Spring有什么缺点如下:
  1.jsp中要写很多代码;
  2.控制器过于灵活,缺少一个公用控制器;
  3.不支持分布式部署.

1.6.Spring中的IOC和AOP是什么含义,它们在项目中起到什么作用,并举例说明

参考答案:

  IOC:控制反转,是一种设计模式.一层哈尼是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制;第二层是依赖注入:将相互以来的对象分离,在Spring配置文件中描述他们的依赖关系.他们的依赖关系只在使用的时候才建立.
  AOP:面向切面,是一种编程思想,OOP的延续.将系统中非核心的业务提取出来,进行单独处理.
  Spring的AOP和IOC在项目中都是为了解决系统代码耦合度过高的问题.使代码重用度高,易于维护.比如事务,日志和安全等.

1.7.简述Spring事务有几种管理方法,写出一种配置方式

参考答案:

  Spring事务有两种方式:
  1.编程式事务:(代码中嵌入)
  2.声明式事务:(注解,XML)
  注解方式配置事务的方式如下:
  首先,需要在applicationContext.xml中添加启用配置,代码如下所示:

<!-- 定义事务管理器 -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactor" ref="sessionFactory">
</bean>
<tx:annotation=driven transaction-manager="txManager"/>
  
  
  • 1
  • 2
  • 3
  • 4
  • 5

  然后,使用@Transactional注解,代码如下所示:

@Transactional
public class DefaultFooService implements FooService{
    //@Transactional
    public void insertFoo(Foo foo){...}
    public void updateFoo(Foo foo){...}
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

  @Transactional注解标记可以用子安类定义和方法定义前,方法的事务设置将优先于类级别注解的事务设置.

1.8.简单解释一下事务拦截器的实现原理

参考答案:

  Spring中的事务管理是通过AOP代理来实现的,被代理对象的每个方法进行来接,在方法执行前启动事务,方法执行完后根据是否有异常和异常的种类进行提交或回滚.

1.9.请说明Spring事务管理中的传播行为和隔离等级

参考答案:

  Spring事务的传播行为如下:
  1.PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择.
  2.PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行.
  3.PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常.
  4.PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起.
  5.PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起.
  6.PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常.
  7.PROPAGATION_NESTED–如果当前存在事务,则在嵌套事务内执行.如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作.
  Spring事务的隔离级别如下:
  数据库系统提供了四种事务隔离级别供用户选择.不同的隔离级别采用不同的锁类型来实现,在四种隔离级别中,Serializable的隔离级别最高,ReadUncommitted的隔离级别最低.大多数数据库默认的隔离界别为ReadCommited,如SqlServer,当然也有少部分数据库默认的隔离级别为RepeatableRead,如MySQL.
  1.ReadUncommitted:读未提交数据(会出现脏读,不可重复读和幻读).
  2.ReadCommited:读已提交数据(会出现不可重复渡河幻读).
  3.RepeatableRead:可重复读(会出现幻读).
  4.Serializable:串行化.
  脏读:一个事务读取到另一个事务未提交的更新数据.
  不可重复读:在同一个事务中,多次读取同一个数据返回的结果有所不同.换句话收就是,后续读取可以读到另一事物已提交的更新数据.相反,”可重复读”在同一事物中多次读取数据时,能够保证所读数据一样,也就是,后续读取不能读到另一事务已提交的更新数据.
  幻读:一个事务读取到另一个事务已提交的insert数据.

1.10.Spring的Bean有哪些作用域?

参考答案:

  Spring的Bean有以下五种作用域:
  1.singleton:SpringIOC容器只会创建该Bean的唯一实例;
  2.prototype:每次请求都创建一个实例;
  3.request:每次HTTP请求都会产生一个新的bean.需要注意的是,该作用域仅在基于Web的Spring ApplicationContext情形下有效,以下的session和global Session也是如此;
  4.session:每次回话创建一个实例;
  5.global session:全局的HttpSession中,容器会返回该bean的同一个实例.

猜你喜欢

转载自blog.csdn.net/a639735331/article/details/81666862