收下这份!Java应用场景面试题集(各知识点不同使用场景选型),

2021-01-13  本文已影响0人  套马杆的程序员

应用场景面试题集(各知识点不同使用场景选型)

1. Spring 配置 Bean 实例化有哪些方式?

  1. 使用类构造器实例化(默认无参数)
    <bean id="bean1" class="cn.itcast.spring.b_instance.Bean1"></bean>
  2. 使用静态工厂方法实例化(简单工厂模式)
    //下面这段配置的含义:调用 Bean2Factory 的 getBean2 方法得到 bean2
    <bean id="bean2" class="cn.itcast.spring.b_instance.Bean2Factory"
    factorymethod="getBean2"></bean>
  3. 使用实例工厂方法实例化(工厂方法模式)
    //先创建工厂实例 bean3Facory,再通过工厂实例创建目标 bean 实例
    <bean id="bean3Factory" class="cn.itcast.spring.b_instance.Bean3Factory"/><bean
    id="bean3" factorybean="bean3Factory" factorymethod="getBean3"></bean>

2. Bean 注入属性有哪几种方式

  1. 属性注入方式,通过 setXXX() 方法注入 Bean 的属性值或者依赖对象
  2. 构造函数注入方式,使用的前提:Bean 必须提供带参的构造函数
  3. 工厂方法注入方式

3. 在 Spring 中如何实现时间处理?

在 applicationContext.xml 中配置事件源、监听器,先得到事件源,调用事件 源的方法,通知监听器。

4. Spring 中如何更高效的使用 JDBC ?

传统的 JDBC 实现有两个不足之处:

  1. 配置基于模板化处理
  2. JdbcTemplate 是线程安全类
  3. 实例化操作比较简单,仅需要传递 DataSource
  4. 自动完成资源的创建和释放工作
  5. 对 JDBC 的核心流程进行了封装,简化了对 JDBC 的操作
  6. 创建一次 JdbcTemplate,到处可用,避免重复开发

5. 请介绍一下设计模式在 Spring 框架中的使用?

  1. 工厂模式:BeanFactory 就是简单工厂模式的体现,用来创建对象的实 例。
  2. 单例模式:Bean 默认为单例模式。
  3. 代理模式:Spring 的 AOP 功能用到了 JDK 的动态代理和 CGLIB 字 节码生成技术。
  4. 模板方法:用来解决代码重复的问题。比如:RestTemplate, JmsTemplate, JpaTemplate。
  5. 观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生
    改变时,所有依赖于它的对象都会得到通知被制动更新,如 Spring 中
    listener 的实现:ApplicationListener。

6. 讲讲 Spring 框架的优点有哪些?

  1. 非侵入式设计:代码与框架的依赖性比较低。
  2. 代码解耦:提供控制反转能力,对象的创建和依赖关系的维护工作都交给
    Spring 容器的管理,大大的降低了对象之间的耦合性。
  3. 可复用性提高:支 AOP ,允许将一些通用能力(打印日志、事务处理、 安全操作等)
    进行集中式处理。
  4. MVC 框架:Spring 的 Web 框架是个精心设计的框架,是 Web 框架 的一个很好的替代品。
  5. 事务支持方便:Spring 提供一个持续的事务管理接口,配置化完成对事 物的管理,减少手动编程。
  6. 异常处理:Spring 提供方便的 API 把具体技术相关的异常(比如由 JDBC、Hibernate or JDO 抛出的)
    转化为一致的 unchecked 异常。
  7. 方便程序测试:提供了对 Junit4 的支持,可以通过注解方便的测试 Spring 程序。

7. 哪种依赖注入方式你建议使用,构造器注入,还是 Setter 方法注 入?

你两种依赖方式都可以使用,构造器注入和 setter 方法注入。最好的解决方案 是用构造器参数实现强制依赖,setter 方法实现可选依赖。

8. 你怎样定义类的作用域?

当定义一个 <bean> 在 Spring 里,我们还能给这个 Bean 声明一个作用域。
它可以通过 Bean 定义中的 scope 属性来定义。如,当 Spring 要在需要的
时候每次生产一个新的Bean实例 , Bean的scope属性被指定为prototype。
另一方面,一个 Bean 每次使用的时候必须返回同一个实例,这
个 Bean 的 scope 属性必须设为 singleton。

9. 解释 Spring 支持的几种 Bean 的作用域

Spring 框架支持以下五种 Bean 的作用域:

  1. singleton:Bean 在每个 Spring IoC 容器中只有一个实例。
  2. prototype:一个 Bean 的定义可以有多个实例。
  3. request:每次 http 请求都会创建一个 Bean,该作用域仅在基于 Web 的 Spring ApplicationContext
    情形下有效。
  4. session:在一个 HTTP Session 中,一个 Bean 定义对应一个实例。 该作用域仅在基于 Web 的 Spring ApplicationContext 情形下有效。
  5. global-session:在一个全局的 HTTP Session 中,一个 Bean 定义对 应一个实例。该作用域仅在基于 Web 的 Spring ApplicationContext 情形下有效。
    缺省的 Spring Bean 的作用域是 Singleton。

10. 在 Spring 中如何注入一个 Java 集合?

Spring 提供以下几种集合的配置元素:

  1. <list> 类型用于注入一列值,允许有相同的值。
  2. <set> 类型用于注入一组值,不允许有相同的值。
  3. <map> 类型用于注入一组键值对,键和值都可以为任意类型。
  4. <props> 类型用于注入一组键值对,键和值都只能为 String 类型。

11. 你可以在 Spring 中注入一个 null 和一个空字符串吗?

可以

12. 什么是基于 Java 的 Spring 注解配置?

给一些注解的例子 基于 Java 的配置,允许你在少量的 Java 注解的帮助下,进行你的大部分
Spring 配置而非通过 XML 文件。
以 @Configuration 注解为例,它用来标记类可以当做一个 Bean 的定义,被
Spring IOC 容器使用。另一个例子是 @Bean 注解,它表示此方法将要返回一
个对象,作为一个 Bean 注册进 Spring 应用上下文。

13. 你更倾向用那种事务管理类型?

声明式事务管理,因为它对应用代码侵入性很少,更符合一个无侵入的轻量级容 器的思想。
声明式事务管理要优于编程式事务管理,虽然比编程式事务管理(这种方式允许
你通过代码控制事务)少了一点灵活性。

14. Bean 的调用方式有哪些?

有三种方式可以得到 Bean 并进行调用。

  1. 使用 BeanWrapper
    HelloWorld hw=new HelloWorld();
    BeanWrapper bw=new BeanWrapperImpl(hw);
    bw.setPropertyvalue(”msg”,”HelloWorld”);
    system.out.println(bw.getPropertyCalue(”msg”));
  2. 使用 BeanFactory
    InputStream is=new FileInputStream(”config.xml”);
    XmlBeanFactory factory=new XmlBeanFactory(is);
    HelloWorld hw=(HelloWorld) factory.getBean(”HelloWorld”);
    system.out.println(hw.getMsg());
  3. 使用 ApplicationConttext
    ApplicationContext actx=new FleSystemXmlApplicationContext(”config.xml”);
    HelloWorld hw=(HelloWorld) actx.getBean(”HelloWorld”);
    System.out.println(hw.getMsg());
    使用 @ResponseBody 注解。

15. Spring MVC 里面拦截器是怎么写的

有两种写法,一种是实现接口,另外一种是继承适配器类,然后在 Spring MVC
的配置文件中配置拦截器即可:

<!-- 配置 SpringMvc 的拦截器 --> <mvc:interceptors> 
<!-- 配置一个拦截器的 Bean 就可以了 默认是对所有请求都拦截 --> 
<bean id="myInterceptor" class="com.et.action.MyHandlerInterceptor"/> 
<!-- 只针对部分请求拦截 --> 
<mvc:interceptor>
<mvc:mapping path="/modelMap.do" /> 
<bean class="com.et.action.MyHandlerInterceptorAdapter" />
 </mvc:interceptor> </mvc:interceptors> 

16. 当一个方法向 AJAX 返回特殊对象,譬如 Object、List 等,需要 做什么处理?

要加上 @ResponseBody 注解。

17. 如何使用 Spring MVC 完成 JSON 操作

  1. 配置 MappingJacksonHttpMessageConverter
  2. 使用 @RequestBody 注解或 ResponseEntity 作为返回值

18. Spring 如何整合 Hibernate

整合 Hibernate,即由 IoC 容器生成 SessionFactory 对象, 并使用 Spring
的声明式事务。

  1. 利用 LocalSessionFactoryBean 工厂 Bean,声明一个使用 XML 映射
    文件的 SessionFactory 实例
  2. 利用 HibernateTransactionManager 配置 Hibernate 的事务管理器

19. Spring 如何整合 Struts2 ?

整合 Struts2,即由 IoC 容器管理 Struts2 的 Action:

20. 开发中主要使用 Spring 的什么技术 ?

  1. IoC 容器管理各层的组件
  2. 使用 AOP 配置声明式事务
  3. 整合其他框架

21. 介绍一下 Spring MVC 常用的一些注解

  1. @RequestMapping:处理请求地址映射的注解,可用于类或方法上。
  2. @PathVariable:绑定 URI 模板变量值是用来获得请求 url 中的动态参
  3. @RequestParam:用于将指定的请求参数赋值给方法中的形参
  4. @RequestBody:读取 Request 请求的 body 部分数据
  5. @ResponseBody:用于将 Controller 的方法返回的对象,通过适当的 HttpMessageConverter
    转换为指定格式后,写入到 Response 对象 的 body 数据区

22. Spring 框架的事务管理有哪些优点

  1. 为不同的事务 API( JDBC、Hibernate、JPA )提供统一的编程模型
  2. 封装了简单统一的 API 对事物进行管理操作
  3. 同时支持声明式事物和编程时事物两种方式
上一篇下一篇

猜你喜欢

热点阅读