本文章会持续更新,建议收藏!!!
Java面试复习手册(框架篇)
spring
spring概述
- 使用Spring框架的好处是什么?答:
- 解耦合,简化开发。spring为我们提供IOC容器,可以将对象之间依赖关系交给spring来管理,用户不再为单列模式、属性文件解析等一些底层操作写代码,专注到业务开发上。
- 对AOP编程的支持,好多不适用于OOP编程的地方可以使用AOP轻松完成。
- 声明式事务支持。通过声明式灵活对事务管理,比编程式事务提高开发效率。
- 方便测试程序。spring对junit的支持,让测试不再麻烦。
- 降低了JavaAPI的使用难度,比如JDBC等。
- 轻量级框架,并且方便集成其他框架.
- Spring由哪些模块组成?
答:核心容器模块(core,主要是beanFactory创建bean)、上下文模块(context)、AOP模块、JDBC/DAO模块、WEB模块、MVC模块、对象关系映射模块。
- 谈谈对AOP的理解?
答:aop就是面向切面编程。通过配置可以将一些与业务无关的却为业务模块共同调用的逻辑或责任(事务管理、日志管理)封装起来,方便了代码的维护和降低了模块的耦合度。代理时,如果每个类实现了接口则会使用jdk的动态代理,如果继承了某个类,则使用cglib代理技术。
- 谈谈对IOC的理解?
答:ioc是一种设计思想,它和DI一块使用才会达到最终目的。将创建对象的控制权有spring管理。ioc容器其实就是就是一个map,map中存放的是对象的信息。将对象的依赖关系交给IOC容器来管理,并由IOC容器完成对象的注入(DI)。这样可以简化我们的开发,把应用从复杂的依赖关系解脱出来。当我们需要时,直接从IOC容器取即可以。
- IOC的优点是什么?
答:实现了各组件之间的解耦,提高了程序的灵活性和可重复性。(缺点:创建对象过程复杂了,因为是反射创建对象效率相对低。)
- 解释一下WEB模块?
答:spring的web模块是构建再application context模块基础之上,提供了一个web应用的上下文。这个模块也包括多种面向web的任务,如透明的文件上传和程序级的请求参数绑定到你的业务对象。
- 解释核心容器(应用上下文) 模块?
答:核心容器提供了spring的基本功能。它的核心功能是通过IOC容器来管理类。spring的管理模式是调用者不理会调用者的实例创建,而是由spring创建,之后在程序中通过注入来使用。实现了解耦
- ApplicationContext通常的实现是什么?
答:类名称 意义 FileSystemXmlApplicationContext 此容器从XML文件中加载bean的定义,bean配置文件的全路径必须提供给它的构造函数 ClassPathXmlApplicationContext 此容器从XML文件中加载bean的定义,这里需要设置classpath,因为容器将在classpath找bean配置 WebXmlApplicationContext 此容器加载一个XML文件,此文件定义了所有web应用的bean
- Bean 工厂和 Application contexts 有什么区别?
答:两者都是装入bean的定义信息,装配bean,根据需求分发bean。而后者功能更加全面,它提供了bean工厂所没有的解析信息文本工具,提供了国际化的支持。另外一个很重要的不同是单例bean加载方式。bean工厂是延迟加载所有的bean,直到getBean方法被调用;而后者是提前预装好所有的单例bean,确保单例bean已经准备好,这样我们应用就不用等待bean的创建了。
spring依赖注入
- 什么是Spring的依赖注入?
答:使用spring框架,他会管理我们所有的bean,每个对象之间会有依赖关系,在程序运行时,spring帮我们把所需要的对象已经拼装好,我们直接使用就可以。
- 有哪些不同类型的IOC(依赖注入)方式?
答: setter方法注入、构造器注入、静态工厂注入、注解注入。
- 什么是Spring beans?
答:就是形成spring应用的Java对象,这些对象又spring的IOC容器初始化、装配和管理,这些bean通过容器中配置的元数据创建。
- 一个 Spring Bean 定义 答:包含什么?
包含容器中必知的所有配置的元数据。包括如何创建一个bean、生命周期以及依赖。
- 解释Spring支持的几种bean的作用域。
作用域 描述 singleton 单例模式,整个IOC容器中,只有这一个对象的实例 prototype 原型模式,IOC容器每执行一次getBean方法就会创建一个新的实例 request 在web应用中,每发生一次http请求就产生一个新的实例 session 在web应用中,没发生一次HTTP session都将会产生一个实例 globalSession 每个全局的HTTPSession会产生一个实例
- Spring框架中的单例bean是线程安全的吗?
答:spring框架中没有对单例的bean进行多线程的封装,需要用户自己去定义搞定。开发中,大多数spring bean(setvice和dao等)并没有可执行变化,这种情况是线程安全的。如果你的bean需要多个线程运行需要自己进行定义。
- 解释Spring框架中bean的生命周期?
答:bean的定义 -> 初始化(实现InitializingBean接口) -> 使用 -> 销毁(实现DisposableBean接口)。
- 哪些是重要的bean生命周期方法? 你能重载它们吗?
答:有两个重要的方法,一个是setup方法,它在容器中加载bean时使用。另一个teardown方法,它在卸载bean时调用。还有两个重要的属性init-method和destory-method,你可以在这里重新定义他们。
- 什么是bean装配?
答:可以理解为依赖注入。通常用的是注解注入和xml注入。
- 什么是bean的自动装配?
答:spring通过类型或者名称自动完成bean的配置。可以在xml文件配置或者使用注解。
- 解释不同方式的自动装配 。
答:有五种。方式 方法 no 默认方式是不自动进行配置,通过ref属性来设置 byType 通过参数类型进行自动装配,先将配置中的autowire的属性设置为byType。容器试着匹配、装配和该bean有相同属性的bean,如果有多个则抛出异常 byName 通过参数名进行自动装配,先将配置中autowire中设置为byName。容器试着匹配、装配和该bena有相同名字的bean。 constructor 类似于byType,提供构造器参数,然后试着匹配,如果有多个则抛出异常 autodetect 首先使用构造器装配,如果失败则使用byType
- 自动装配有哪些局限性 ?
答:基本类型的值、字符串 无法进行自动装配,如果使用setter或者构造器注入,则将自动覆盖自动装配的依赖关系。
Spring的注解和数据访问
- 怎样开启注解装配?
答:spring默认是不开启的,在spring的配置文件中配置context:annotation-config/。
- 谈谈@Required、 @Autowired、 @Qualifier注解?
答:@Required注解用于setter方法,表明这个属性是必要的,注入值必须在构造函数之前加此注解(基本不再使用)。@Autowired是自动装配和@Required作用一样。@Qualifier是和@Autowired一块使用,在前者里面配置bean的名称就会自动注入。
- 在Spring框架中如何更有效地使用JDBC?
答:使用它的模板类,JDBCTemplate。
- 使用Spring通过什么方式访问Hibernate?
答:控制反转Hibernate Template和 Callback;继承HibernateDAOSupport提供一个AOP 拦截器。
- Spring框架的事务管理有哪些优点?
答:spring支持声明式事务和编程式事务。当使用声明式事务,只需编写少量的和事务有关代码即可。并且spring事务的api其它事务api没有耦合。
Spring的AOP
- 解释一下AOP?
答:AOP即面向切面编程,是对OOP的补充。AOP编程可以将系统性的相关编程,抽取独立出来。然后通过切面植入。避免了业务逻辑中参杂着系统性的内容,如日志和事务等。AOP分为静态代理和动态代理。静态代理是AspectJ实现的AOP,动态代理则是通过JDK动态代理(实现接口)和cglib动态代理(继承类)来实现。
- AOP的相关概念?
答:名称 概念 Aspect 切面,切入系统的一个切面。比如日志记录,事务管理都可以是 Join point 连接点,可以进行横向切入的位置 advice 通知,切点在某个连接点发生的操作,比如前置通知,环绕通知等 pointcut 切点,符合切点表达式的连接点,也就是真正切入的地方
- 在Spring AOP 中,关注点和横切关注的区别是什么?
答:关注点是一个模块中的行为,一个关注点可能会被定义成我们实现的功能。横切关注点是一个关注点,有可能是整个应用都会使用,并影响整个应用,比如日志管理,几乎每个模块都会需要。
- 有几种不同类型的自动代理?
答:三种。基于bean配置名规则的自动代理创建器;基于advisor匹配机制自动代理创建器;基于bean中Aspect注解自动代理创建器。
- 什么是织入。什么是织入应用的不同点?
答:织入是将切面和其它应用类型或对象连接或一个被通知的过程。织入可以在编译、加载或运行时进行。
SpringMVC
- 什么是Spring的MVC框架?
答:springMVC是spring框架内置MVC的实现。MVC框架解决web开发中常见问题(文件传输、参数传递、国际化)。支持restful的url的请求。
- 解释DispatcherServlet?
答:他是springMVC的核心,其实他就是一个httpServlet。它来负责请求的分发。当客户端发送请求,请求会先到dispatcherServlet,它会对url进行解析,获得uri。然后调用handledMapping获得对应的hand对应的controller方法。当执行完后,会根据modelandview的对象选择一个合适的视图解析器给dispatcherServlet。
- 解释WebApplicationContext?
答:它是springweb应用中的上下文对象。继承了applicationContext接口,扩展了它的功能。
- 什么是Spring MVC框架的控制器?答:dispatcherServlet。解释请看回答2.
- @Controller 注解?
答:它用于标记一个类,表示该类就是spring的conteoller对象,即控制器。 - @RequestMapping 注解?
答:它可以用于类上和方法上。用在类上就好比web项目的根目录,用在方法上就是更细一步的分化。它的value、method、param、header分别对应于客户端请求的url、方法、请求参数和请求头。