0

1

2

3

4

5

6

7

8

9

0

1

{{ noReadMessageTotal }}

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

尚硅谷Java技术之深圳高频面试题:第三章 框架相关

晴天 晴天 | 279 | 558天前

尚硅谷Java技术之深圳高频面试题

版本:V1.0

尚硅谷Java技术中心

第三章 框架相关

1. SpringMVC工作流程

1. 用户发送请求至前端控制器DispatcherServlet

2. DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3.处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

4. DispatcherServlet调用HandlerAdapter处理器适配器

5. HandlerAdapter经过适配调用具体的处理器。

6. Controller执行完成返回ModelAndView

7.HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet

8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器

9. ViewReslover解析后返回具体View

10. DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。

11. DispatcherServlet响应用户

2. 谈一谈你对Spring的理解

Spring
是一个开源的轻量级容器框架,轻量级是相对于EJB这种重量级组件来说的,它有两大核心,IOC和AOP。

IOC(控制反转),传统的java
开发模式中,当需要一个对象时,我们会自己使用new 或者getInstance
等直接或者间接调用构造方法创建一个对象。而在spring 开发模式中,spring
容器使用了工厂模式为我们创建了所需要的对象,不需要我们自己创建了,直接调用spring
提供的对象就可以了,这是控制反转的思想。依赖注入(DI),spring
使用javaBean 对象的set
方法或者带参数的构造方法为我们在创建所需对象时将其属性自动设置所需要的值的过程,就是依赖注入的思想。

AOP(面向切面编程),是OOP思想的延续,能实现在程序运行的过程中,动态地切入代码段。在面向切面编程中,我们将一个个的对象某些类似的方面横向抽成一个切面,对这个切面进行一些如权限控制、事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。AOP
底层是动态代理,如果是接口采用JDK 动态代理,如果是类采用CGLIB
方式实现动态代理。

3. 对Spring AOP的理解

AOP(面向切面编程),是OOP思想的延续,能实现在程序运行的过程中,动态地切入代码段。在面向切面编程中,我们将一个个的对象某些类似的方面横向抽成一个切面,对这个切面进行一些如权限控制、事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。AOP
底层是动态代理,如果是接口采用JDK 动态代理,如果是类采用CGLIB
方式实现动态代理。

4. Spring事务管理

(1)声明式事务管理的定义:用在Spring
配置文件中声明式的处理事务来代替代码式的处理事务。这样的好处是,事务管理不侵入开发的组件,具体来说,业务逻辑对象就不会意识到正在事务管理之中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想要改变事务管理策划的话,也只需要在定义文件中重新配置即可,这样维护起来极其方便。

基于TransactionInterceptor
的声明式事务管理:两个次要的属性:transactionManager,用来指定一个事务治理器,并将具体事务相关的操作请托给它;其他一个是Properties
类型的transactionAttributes
属性,该属性的每一个键值对中,键指定的是方法名,方法名可以行使通配符,而值就是表现呼应方法的所运用的事务属性。

(2)基于@Transactional的声明式事务管理:Spring
2.x还引入了基于Annotation
的体式格式,具体次要触及@Transactional标注。@Transactional可以浸染于接口、接口方法、类和类方法上。算作用于类上时,该类的一切public方法将都具有该类型的事务属性。

(3)编程式事物管理的定义:在代码中显式挪用beginTransaction()、commit()、rollback()等事务治理相关的方法,这就是编程式事务管理。Spring对事物的编程式管理有基于底层API的编程式管理和基于TransactionTemplate的编程式事务管理两种方式。

5. Spring Bean的生命周期

1. 通过反射进行Bean对象创建

2. 给bean对象的属性注入属性值

3.判断当前bean有没有实现相应的Aware接口(如:BeanNameAware、BeanFactoryAware等),如果有,则执行相应的方法

4. 执行Bean后置处理器中的postProcessBeforeInitialization

5.调用初始化方法,进行初始化,初始化方法可以通过init-method或者@PostConstruct注解或者实现InitializingBean接口来指定

6. 执行Bean的后置处理器中postProcessAfterInitialization

7.判断当前对象是单例还是多例bean,如果是单例则放入单例池,如果是多例则进行返回(getBean()方法的调用)

8. 使用bean

9. IOC容器关闭时,销毁单例Bean对象

6. Spring如何解决循环依赖问题

Spring可以解决通过setter注入进行依赖的循环依赖问题,通过Spring的三级缓存来实现,利用Java引用对象的特性,将实例对象进行提前暴露。

具体细节参考:https://cloud.tencent.com/developer/article/1753539

7. SpringBoot自动化配置原理

总的来说,就是SpringBoot启动的时候会通过@EnableAutoConfiguration注解找到并加载所有Jar包下的META-INF下的spring.factories文件,读取文件中的org.springframework.boot.autoconfigure.EnableAutoConfiguration属性,属性值就是需要进行自动化配置的配置类的全限定类名,将着这些类进行筛选之后,将最后结果的全限定类名的集合返回给SpringBoot,SpringBoot通过反射加载相应的配置类,将配置类里边配置的组件加载到Spring的IOC容器进行管理。

具体细节可参考:https://blog.csdn.net/u014745069/article/details/83820511

8. 项目中用到哪些SpringCloud的组件及其作用

1.Nacos–作为注册中心和配置中心,实现服务注册发现和服务健康监测及配置信息统一管理

2.Gateway–作为网关,作为分布式系统统一的出入口,进行服务路由,统一鉴权等

3. OpenFeign–作为远程调用的客户端,实现服务之间的远程调用

4. Sentinel–实现系统的熔断限流

5. Sleuth–实现服务的链路追踪

相关文章:
第一章 Java基础
第二章 MySQL相关
第三章 框架相关
第四章 Redis相关
第五章 JVM相关
第六章 消息队列相关
第七章 项目相关

文章标签: SpringSpringCloud

真诚点赞 诚不我欺~

{{ praiseUserVoList.length }}人点赞

item.nickname

尚硅谷Java技术之深圳高频面试题:第三章 框架相关

{{ isPraise ? '已点赞' : '点赞'}}
{{ isCollect ? '已收藏' : '收藏'}}
评论
gOod mornIng
没有更多啦~ 加载中...

关于作者

晴天
晴天

人因梦想而伟大!