收下这份!Java应⽤场景⾯试题集(各知识点不同使⽤场景选
型),就等于收下offer!
应⽤场景⾯试题集(各知识点不同使⽤场景选型)
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 中如何实现时间处理?
在 l 中配置事件源、,先得到事件源,调⽤事件 源的⽅法,通知。
4. Spring 中如何更⾼效的使⽤ JDBC ?
传统的 JDBC 实现有两个不⾜之处:
连接需要⾃⼰管理操
JDBC 操作代码封装与编写重复实现
Spring 实现了 JdbcTemplate,在 JDBC API 的基础做了科学的封装。
JdbcTemplate 的优点有:
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 的定义可以有多个实例。
spring ioc注解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.PropertyCalue(”msg”));
2. 使⽤ BeanFactory
InputStream is=new FileInputStream(”l”);
XmlBeanFactory factory=new XmlBeanFactory(is);
HelloWorld hw=(HelloWorld) Bean(”HelloWorld”);
system.out.Msg());
3. 使⽤ ApplicationConttext
ApplicationContext actx=new FleSystemXmlApplicationContext(”l”);
HelloWorld hw=(HelloWorld) Bean(”HelloWorld”);
System.out.Msg());
使⽤ @ResponseBody 注解。
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. 同时⽀持声明式事物和编程时事物两种⽅式
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论