java面试题7

071. 简单的说一下 MyBatis 的一级缓存和二级缓存

Mybatis 首先去缓存中查询结果集,如果没有则查询数据库,如果有则从缓存取出返回结果集就不走数据库。Mybatis 内部存储缓存使用一个 HashMap,key 为 hashCode+sqlId+Sql 语句。value 为从查询出来映射生成的 java对象.

Mybatis 的二级缓存即查询缓存,它的作用域是一个 mapper 的 namespace,即在同一个 namespace 中查询 sql 可以从缓存中获取数据。二级缓存是可以跨 SqlSession 的。

072. mybatismapper代理底层怎么实现?

     mybatis是先通过xml解析,反射,最后通过动态代理机制来生成mapper接口的实现类对象namespace的值等于mapper接口的类路径、sql标签的id值等于mapper接口的方法名,生成的Mapper代理对象的命名为接口的首字母小写。

073. Spring 框架的理解

Spring 是一个轻量级的 IoC 和 AOP 容器框架。是为 Java 应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。

常见的配置方式有三种:基于 XML 的配置、基于注解的配置、基于 Java 的配置。

主要由以下几个模块组成:

Spring Core:核心类库,提供 IOC 服务;

Spring Context:提供框架式的 Bean 访问方式,以及企业级功能(JNDI、定时任务等);

Spring AOP:AOP 服务; 

Spring ORM:对现有的 ORM 框架的支持;

Spring Web:提供了基本的面向 Web 的综合特性,例如多方文件上传;

Spring MVC:提供面向 Web 应用的 Model-View-Controller 实现。

074. spring 的优点

(1)spring 属于低侵入式设计,代码的污染极低;

(2)spring 的 DI 机制将对象之间的依赖关系交由框架处理,减低组件的耦合性;

(3)Spring 提供了 AOP 技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。

(4)spring 对于主流的应用框架提供了集成支持。

075. Spring 框架中都用到了哪些设计模式

(1)工厂模式:BeanFactory 就是简单工厂模式的体现,用来创建对象的实例;

(2)单例模式:Bean 默认为单例模式。

(3)代理模式:Spring 的 AOP 功能用到了 JDK 的动态代理和 CGLIB 字节码生成技术;

(4)模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。 

076. spring bean 的作用域

scope 配置项有 5 个属性,用于描述不同的作用域。

① singleton(单例) 使用该属性定义 Bean 时,IOC 容器仅创建一个 Bean 实例,IOC 容器每次返回的是同一个 Bean 实例。

② prototype(多例) 使用该属性定义 Bean 时,IOC 容器可以创建多个 Bean 实例,每次返回的都是一个新的实例。

③ request 该属性仅对 HTTP 请求产生作用,使用该属性定义 Bean 时,每次 HTTP 请求都会创建一个新的 Bean,适用于WebApplicationContext 环境。

④ session 该属性仅用于 HTTP Session,同一个 Session 共享一个 Bean 实例。不同 Session 使用不同的实例。

⑤ global-session 该属性仅用于 HTTP Session,同 session 作用域不同的是,所有的 Session 共享一个 Bean 实例。

077. spring IOC 原理

IOC 就是控制反转,原来我们需要创建对象的,必须自己 new,但是现在有了 spring 容器,我们不需要再自己 new了,有两个好处,1)解耦2)统一管理对象。

springIOC,用户只需要进行配置,容器会在容器中自动实例化依赖对象,并且是单例模式,直接通过@autowired 直接注入即可。

078. 构造注入和 Setter 注入的区别 

在 spring 中,“构造函数注入”和 “set 方法注入”唯一的区别在于 2 种方式创建合作者的顺序不同。

使用构造函数依赖注入时,Spring 保证所有一个对象所有依赖的对象先实例化后,才实例化这个对象。(没有他们就没有我原则)使用 set 方法依赖注入时,Spring 首先实例化对象,然后才实例化所有依赖的对象。

079. spring AOP 原理

AOP,一般称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”

AOP 实现的关键在于 代理模式,AOP 代理主要是通过反射动态代理实现。

(2)Spring AOP 使用的动态代理,所谓的动态代理就是说 AOP 框架不会去修改字节码,而是每次运行时在内存中临时为方法生成一个 AOP 对象,这个 AOP 对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。

在SSM项目中AOP的最常见使用就是为业务对象提供统一的事务管理器

080. JDK 动态代理和 CGLIB 动态代理的区别

一、概括来说

JDK 动态代理只能对实现了接口的类生成代理,而不能针对类

CGLIB 是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法(继承)

二、Spring 在选择用 JDK 还是 CGLiB 的依据:

(1)当 Bean 实现接口时,Spring 就会用 JDK 的动态代理

(2)当 Bean 没有实现接口时,Spring 使用 CGlib 是实现

(3)可以强制使用 CGlib(在 spring 配置中加入<aop:aspectj-autoproxy proxy-target-class="true"/>)

三、CGlib 比 JDK 快

更多请看主页分栏 java面试分栏

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值