【八股必备】框架篇面试题
八股思维导图集合--可点击看集合框架篇spring面试官:Spring框架中的单例bean是线程安全的吗?候选人: 嗯! 不是线程安全的是这样的 当多用户同时请求一个服务时容器会给每一个请求分配一个线程这是多个线程会并发执行该请求对应的业务逻辑(成员方法)如果该处理逻辑中有对该单列状态的修改(体现为该单例的成员属性)则必须考虑线程同步问题。 Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。 比如:我们通常在项目中使用的Springbean都是不可变的状态(比如Service类和DA0类)所以在某种程度上说Spring的单例bean是线程安全的。 如果你的bean有多种状态的话(比如View Model对象)就需要自行保证线程安全。最浅显的解决办法就是将多态bean的作用由“singleton”变更为prototype”。什么是AOP面向切面编程用于将那些与业务无关但却对多个对象产生影响的公共行为和逻辑抽取公共模块复用降低耦合你们项目中有没有使用到A0P记录操作日志缓存spring实现的事务 核心是:使用aop中的环绕通知切点表达式(找到要记录日志的方法》通过环绕通知的参数获取请求方法的参数(类、方法、注解、请求方式等)获取到这些参数以后保存到数据库Spring中的事务是如何实现的其本质是通过A0P功能对方法前后进行拦截在执行方法之前开启事务在执行完目标方法之后根据执行情况提交或者回滚事务。Spring中事务失效的场景有哪些异常捕获处理自己处理了异常没有抛出解决:手动抛出抛出检查异常配置rollbackFor属性为Exception非public方法导致的事务失效改为publicSpring的bean的生命周期1.通过BeanDefinition获取bean的定义信息2.调用构造函数实例化bean3.bean的依赖注入4.处理Aware (BeanNameAware BeanFactoryAware ApplicationContextAware)5.Bean的后置处理器BeanPostProcessor-前置6.初始化方法(InitializingBean、init-method)7.Bean的后置处理器BeanPostProcessor-后置8.销毁beanSpring中的循环引用循环依赖循环依赖其实就是循环引用,也就是两个或两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于A循环依赖在spring中是允许存在spring框架依据三级缓存已经解决了大部分的循环依赖一级缓存单例池缓存已经经历了完整的生命周期已经初始化完成的bean对象二级缓存缓存早期的bean对象生命周期还没走完三级缓存缓存的是ObjectFactory表示对象工厂用来创建某个对象的构造方法出现了循环依赖怎么解决A依赖于BB依赖于A注入的方式是构造函数原因由于bean的生命周期中构造函数是第一个执行的spring框架并不能解决构造函数的的依赖注入解决方案使用Lazy进行懒加载什么时候需要对象再进行bean对象的创建public A(Lazy B b){ System.out.println(A的构造方法执行了...); this.b b ; }SpringMVC的执行流程知道嘛用户发送出请求到前端控制器DispatcherServletDispatcherServlet收到请求调用HandlerMapping处理器映射器HandlerMapping找到具体的处理器生成处理器对象及处理器拦截器(如果有)再一起返回给DispatcherServlet。DispatcherServlet调用HandlerAdapter处理器适配器HandlerAdapter经过适配调用具体的处理器Handler/Controller方法上添加了ResponseBody通过HttpMessageConverter来返回结果转换为JSON并响应Springboot自动配置原理1, 在Spring Boot项目中的引导类上有一个注解SpringBootApplication这个注解是对三个注解进行了封装分别是SpringBootConfigurationEnableAutoConfigurationComponentScan2, 其中EnableAutoConfiguration是实现自动化配置的核心注解。 该注解通过Import注解导入对应的配置选择器。内部就是读取了该项目和该项目引用的Jar包的的classpath路径下META-INF/spring.factories文件中的所配置的类的全类名。 在这些配置类中所定义的Bean会根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。3, 条件判断会有像ConditionalOnClass这样的注解判断是否有对应的class文件如果有则加载该类把这个配置类的所有的Bean放入spring容器中使用。mybaitsMyBatis执行流程Ø 读取MyBatis配置文件mybatis-config.xml加载运行环境和映射文件Ø 构造会话工厂SqlSessionFactoryØ 会话工厂创建SqlSession对象包含了执行SQL语句的所有方法Ø 操作数据库的接口Executor执行器同时负责查询缓存的维护Ø Executor接口的执行方法中有一个MappedStatement类型的参数封装了映射信息Ø 输入参数映射Ø 输出结果映射Mybatis是否支持延迟加载Ø 延迟加载的意思是就是在需要用到数据时才进行加载不需要用到数据时就不加载数据。Ø Mybatis支持一对一关联对象和一对多关联集合对象的延迟加载Ø 在Mybatis配置文件中可以配置是否启用延迟加载lazyLoadingEnabledtrue|false默认是关闭的延迟加载的底层原理知道吗使用CGLIB创建目标对象的代理对象当调用目标方法时进入拦截器invoke方法发现目标方法是null值执行sql查询获取数据以后调用set方法设置属性值再继续查询目标方法就有值了Mybatis的一级、二级缓存用过吗一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存其存储作用域为 Session当Session进行flush或close之后该Session中的所有Cache就将清空默认打开一级缓存二级缓存是基于namespace和mapper的作用域起作用的不是依赖于SQL session默认也是采用 PerpetualCacheHashMap 存储。需要单独开启一个是核心配置一个是mapper映射文件Mybatis的二级缓存什么时候会清理缓存中的数据当某一个作用域(一级缓存 Session/二级缓存Namespaces)的进行了新增、修改、删除操作后默认该作用域下所有 select 中的缓存将被 clear。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2444497.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!