面试题3-Spring和Mybatis

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27232757/article/details/83446183

1.Spring的IOC和DI?
1)控制反转IOC(Inversion of Control):IOC意味着将你设计好的对象交给容器控制,而不是在你的对象内部控制。容器帮我们查找及注入依赖的对象,对象只是被动的接受依赖的对象;
2)依赖注入DI(Dependency Injection):组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。
2.BeanFactory 接口和 ApplicationContext 接口有什么区别 ?
1)ApplicationContext 接口继承BeanFactory接口,Spring核心工厂是BeanFactory ,BeanFactory采取延迟加载,第一次getBean时才会初始化Bean, ApplicationContext是会在加载配置文件时初始化Bean;
2)ApplicationContext是对BeanFactory扩展,它可以进行国际化处理、事件传递和bean自动装配以及各种不同应用层的Context实现 ;
3.Spring配置Bean实例化的方式?
1)使用类的构造器实例化
2)使用静态工厂方法实例化
3)使用实例工厂方法实例化
4.Spring中Bean的生命周期?
1)实例化一个Bean(new);
2)按照Spring的上下文对实例化的Bean进行配置(DI);
3)如果实现了BeanNameAware接口,调用setBeanName(String name)方法(可以获取到Spring配置文件中bean的ID的值);
4)如果实现了BeanFactoryAware接口,调用setBeanFactory(BeanFactory beanFactory)(可以获取Spring容器,通过容器可以获取其它的Bean);
5)如果实现了ApplicationContextAware接口,调用setApplicationContext(ApplicationContext context)方法(可以获取Spring的上下文);
6)如果实现了BeanPostProcessor接口,调用postProcessBeforeInitialization(Object obj, String s)方法( 第一个参数初始化的Bean,第二个参数是Bean 实例的名称,可以用作Bean内容的修改);
7)如果Bean在Spring配置文件中配置了init-method属性会自动调用其配置的方法;
8)如果实现了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法;
9)执行业务处理
10)当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用destroy()方法;
11)如果Bean在Spring中配置了destroy-method属性,会自动调用其配置的销毁方法;
5.Spring中Bean的属性注入有哪几种方式?
1)接口注入
2)构造器注入
3)set注入
6.Spring中Bean的作用域?
1)singleton:Spring的IOC容器中只会存在一个共享的Bean的实例;
2)prototype:每次对Bean的请求(将其注入到另一个Bean中,或者调用getBean())都会创建一个新的Bean的实例;
3)request:在一个HTTP请求中,一个Bean定义对应一个实例,每个HTTP请求都会创建各自的Bean实例(ApplicationContext情形下有效);
4)session:HTTP Session中,一个Bean对应一个实例(ApplicationContext情形下有效);
5)global session:在一个全局的HTTP Session中,一个Bean对应一个实例(ApplicationContext情形下有效);
7.Spring中的注解?
1)@Component:标准的一个普通的Spring Bean类;
2)@Controller:标注一个控制器组件类;
3)@Service:标注一个业务逻辑组件类;
3)@Repository:标注一个DAO组件类;
4)@Resource:为目标的Bean指定协作的Bean,修饰属性和方法,默认按照ByName自动注入;
5)@Scope:指定Bean实例的作用域;
6)@PostConstruct:修饰的方法是Bean的初始化之前的方法;
7)@PreDestory:修饰的方法是Bean销毁之前的方法;
8.Spring MVC 中的注解?
1)@Controller:控制器Controller负责处理由DispatcherServlet分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model,然后再把该Model返回给对应的View进行展示;
2)@RequestMapping:RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径;
3)@Autowired:Autowired注解是按照类型装配依赖对象,如果想按照名称(byName)来装配,可以结合@Qualifier注解一起使用;
4)@ModelAttribute 和 @SessionAttributes :该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。@SessionAttributes即将值放到session作用域中,写在class上面。
5)@PathVariable:用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。
9.TransactionDefinition接口中定义的五个隔离级别?
1)ISOLATION_DEFAULT:使用数据库默认的事物的隔离级别;
2)ISOLATION_READ_UNCOMMITTED:事务隔离的最低级别,它允许另外一个事务可以看到这个事务未提交的数据,这种隔离可能产生脏读,不可重复读和幻像读;
3)ISOLATION_READ_COMMITTED:保证一个事务修改的数据提交后才能被另外一个事务读取,这一避免脏读的产生,但是可能出现不可重复读和幻像读;
4)ISOLATION_REPEATABLE_READ:保证一个事务不能读取另一个事务未提交的数据外还能避免不可重复读的产生,可能出现幻像读;
5)ISOLATION_SERIALIZABLE:事务被处理为顺序执行,可以防止所有的问题;
10.脏读、不可重复读、幻像读?
1)脏读:事务A未提交的数据被事务B读走,如果事务A失败回滚,会导致事务B所读取的数据是错误的;
2)数据不可重复读:比如事务A中两处读取数据的值,第一次读取时100,然后事务B把数据的值改为200,事务A再读取的时候数据就改变了;
3)幻像读:数据不可重复读改变的是数据本身的值,而幻像读改变的是条件数据及,可能读取的数据的条数会变多;
11.Spring中事务传播的行为?
1)PROPAGATION_REQUIREDS:如果存在一个事务,则支持当前事务,如果没有事务则开启一个新的事务;
2)PROPAGATION_SUPPORTS:如果存在一个事务,则支持当前事务。如果没有事务,则非事务的执行。但是对于事务同步的事务管理器,PROPAGATION_SUPPORTS与不使用事务有少许不同;
3)PROPAGATION_MANDATORY:如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常;
4)PROPAGATION_REQUIRES_NEW:总是开启一个新的事务,如果事务已经存在,则将这个存在的事务挂起;
5)PROPAGATION_NOT_SUPPORTED:总是非事务的执行,并挂起任何存在的事务;
6)PROPAGATION_NEVER:总是非事务的执行,如果存在一个活动的事务,则抛出异常;
7)PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中,如果没有活动的事务,则按PROPAGATION_REQUIRED属性执行;

面试题1-Java基础:https://blog.csdn.net/qq_27232757/article/details/83032601
面试题2-操作系统和计算机网络:https://blog.csdn.net/qq_27232757/article/details/83446164
面试题4-算法:
https://blog.csdn.net/qq_27232757/article/details/83474056

猜你喜欢

转载自blog.csdn.net/qq_27232757/article/details/83446183