第3题 面向对象编程的程序设计原则有哪些?(至少答出五条)
答:依赖倒置 针对接口编程
开闭原则 对扩展开放 对修改关闭
多用组合少用继承
单一职责原则
松耦合
正确答案:
1、找出变化,分开变化和不变的隔离,封装变化的部分,让其他部分不受它的影响。
2、面向接口编程隔离变化的方式使用者使用接口,提供者实现接口。“接口”可以是超类!
3、依赖倒置原则隔离变化的方式依赖抽象,不要依赖具体类!
4、对修改闭合,对扩展开放隔离变化的方式
5、多用组合,少用继承灵活变化的方式“有一个”:可能比“是一-个”更好。
6、单一职责原则方法设计的原则
第4题 Spring中都用了哪些设计模式,并举例说明?(每答出一条得2分)
答:工厂模式 sessionfactory
代理模式 aop
适配器模式 handleradapter
正确答案:
工厂模式---BeanFactory
单例模式---单例Bean
模板方法模式---AbstractApplicationContext
观察者模式---ApplicatonListenerBean PostProcessorBeanFactory PostProcessor
代理模式---AOP
策略模式---
事务管理适配器模式---HandlerAdapter
第5题 Spring的ApplicationContext 容器的创建、刷新过程是怎么的?
答:调用父类构造器、准备刷新、刷新、初始化bean
正确答案:
创建过程:
1、获取到Bean定义(xml、注解、javacodeBased)
2、刷新容器
刷新过程会经历如下的步骤:
1.Context为刷新做准备
2.获得子类中刷新的Bean工厂
3.对Bean工厂做准备工作
4.对Bean工厂进行前期处理
5.调用以Bean配置方式指定的BeanFactoryPostProcessor
6.向BeanFactory注册BeanPostProcessor
7.初始化国际化资源源
8.初始化应用事件广播器
9.执行子Context实现提供的onRefresh逻辑
10.注册Bean定义方式配置的应用事件Listener
11.完成BeanFactory的bean实例化
12.完成刷新的后处理
13.重置清理缓存
第6题 Spring IOC容器 ApplicationContext的扩展点有哪些?(每答出一条得2分)
答:beanfactory postprocesser
正确答案:
答案:
【扩展点1】模块扩展xml配置元素名称空间
【扩展点2】BeanFactory PostProcessorBeanDefinition RegistryPostProcessor
【扩展点3】BeanPostProcessor
【扩展点4】自定义组件标注注解https://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/core.html#beans-meta-annotations
【扩展点5】组件扫描的过滤器TypeFilterhttps://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/core.html#beans-scanning-filters
【扩展点6】ApplicationListener
【扩展点7】InstantiationAwareBeanPostProcessor
【扩展点8】AbstractApplicationContext中定义了很多模板方法,
第7题 Spring DI 依赖注入中什么情况下可以循环依赖,什么情况下不可以循环依赖?
答:。。。
正确答案:
答案:
1、构造参数依赖不允许循环依赖;
2、属性依赖中,有单例Bean参与时可以循环依赖。都是原型Bean则不可以。
第8题 简述Spring AOP的实现原理。
答:通过动态代理、cglib等实现
正确答案:
答案:
1、SpringAOP基于动态代理实现
2、采用了JDK动态代理来创建接口的代理对象
3、采用Cglib来创建类的代理对象
第9题 简述spring 事务管理的核心api及声明式事务管理的实现原理。
答:transactiondefinition、transactionstatus、platformtransactionmanager
通过aop对方法前后进行拦截开始时开启事物结束后提交或者回滚
正确答案:
核心API: PlatformTransactionManager、TransactionDefinition、TransactionStatus;
声明式事务管理的实现原理:AOP
第10题 简述spring-mvc的工作原理
答:dispatcherserlvlet收到请求后根据mapping配置转发对应的处理方法处理完成后通过modekandview返回给前端视图
正确答案:
答案:(每答对一点得1分)
1、DispatcherServlet初始化时将完成如下准备工作:
a)创建ApplicationContext容器;
b)从ApplicationContext容器中获得所有HandlerMapping、HandlerAdapter、ViewResolver、国际化资源器、ExceptionResolver等;
c)HandlerMapping实例化时通过扫描获得RequestMappingInfo
2、请求的处理流程:
a)DispatcherServlet接收到请求,通过HandlerMapping查找到该请求的Handler;
b)再找到Handler对应的HandlerAdapter;
c)执行HandlerAdapter得到结果
d)渲染视图作出响应i.如果返回的是视图名,则通过ViewResolver得到对应的Viewii.通过View作出响应。
第11题 简述spring-boot starter机制
答:通过读取spring.factories文件autoconfiguration自动配置
正确答案:
答案:
spring-bootstarter机制完成两件事:
1、依赖jar的引入
2、自动配置Bean,自动配置的原理:
a)基于@Configuration以及springboot中的条件配置注解@ConditionOnXXX来定义Bean。
b)通过META-INF/spring.factories文件来指定自动配置的Bean定义类
c)Spring-boot通过扫描META-INF/spring.factories文件来获得要注册的Bean定义。
第12题 Bean工厂和工厂Bean的区别是什么?
答:bean工厂是生产bean的工厂
工厂bean是用来产生新的brean的工通过getObject返回一个新的bean而不是其本身
正确答案:
答案:
Bean工厂是负责生产所有Bean、完成依赖注入的总工厂。
而工厂Bean,是实现了FactoryBean接口的Bean,它本身是一个Bean,同时它还负责某类Bean实例的创建工作。