spring的面试题

Spring是什么?

spring是一个轻量级的AOP和IOC的轻量级框架。是为Java应用程序提供基础性服务的一道框架,目的是简化企业级应用开服。使得它只需关注业务需求即可。
Spring的组成 core, beans, context, Aspects, Aop,Transactions,jdbc, ORM, OXM 等等。

spring的优点。

1 轻量:spring是轻量级的,基本的版本大约2MB。
2 控制反转:Spring通过控制反转实现了松散耦合,对象们给出他们的依赖,而不是创建或查询依赖的对象们。
3 事物管理:Spring提供一个持续的事物管理接口,可以扩展本地事物和全局事物。
4 异常处理:Spring提供异常处理。
5 提供MVC框架:Spring的web框架是个精心设计的框架。

Aop。

它一般称为面向切面,作为面向对象的一种补充。用于将那些于业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取出来封装成可以复用的模块。这样就可以减少重复代码,同时也提高系统的可维护性。

什么是控制反转和依赖注入?

依赖注入:应用程序容器创建并注入它所需要的外部资源。
控制反转:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。
依赖注入:1)构造器注入
2)setter注入
3)接口注入

BeanFactory和ApplicationContext有什么区别?

BeanFactory是Spring是最底层的接口,包含各种Beans的定义,读取Bean配置文档,管理beand的加载,实例化,控制Bean的生命周期,维护Beans之间的依赖关系。
ApplicationContext作为BeanFactory的子接口,既有BeanFactory的共功能又有您的功能。
1)统一了资源的访问方式。
2)可以同时加载多个配置文档。
3)提供在监听器中注册的bean事件。
4)继承MessAgeSource因些支持国际化。
但对于BeanFactory采用的是延迟加载注入bean的,即只有使用到某个Bean时,才对该Bean进行加载实例化。ApplicationContext则是容器启动时,一次性创建所有的Bean

Spring支持几种Bean的作用域?

1)singletion 默认只有一个bean实例化。
2)prototype 为每一个bean实例化,
3)request 每一个网络请求创建一个实例。
4)session 每一个session就有一个实例。
5) global-session 全局作用。

Spring基于XMl注入bean的几种方式。

1)set方法注入
2)构造器注入
3)静态工厂注入
4)实例工厂

Spring的自动装配。

1)no
2)byname
3)bytype
4)constructor 利用构造函数进行装配
5)autodelect 自动探测,如果construct的方法自动装配,否则使用bytyped的方式自动装配。

Spring框架都用到那些设计模式?

1)工厂模式:BeanFactory就是简单工厂模式的体现。
2)单例模式:Bean默认单例模式。
3)模板模式:解决代码重复问题,如JDBC的模板。
4)代理模式:Spring的代理模式。
5)观察者模式:

Spring的通知有哪些类型。

1)前置通知:在某连接点之前执行的通知。
2)后置通知:在某连接点之后执行的通知。
3)抛出异常通知:方法抛出异常推出时执行的通知。
4)后通知:当某连接点退出的时候执行的通知。
5) 环绕通知:包围一个连接点的通知,如方法调用,这是一个强大的一种通知类型,它也是选择是否继续执行连接点或直接返回他们的返回值或抛出异常来结束执行。

Spring种AOP里面的几个名词。

1)切面:被抽取的公共模块,可能会横切多个对象。
2)连接点:指方法,SpringAOP中,一个连接点代表一个方法的执行。
3)通知:在切面的某个特点的连接点上执行的动作。
4)切入点:切入点是指我们们要对哪些连接点进行拦截的定义。
5)引入:声明额外的方法或者某个类型的字段。
6)目标对象:被一个或者多个切面所通知的对象。
7)织入:把增强应用到目标对象来创建新的代理的过程,Spring在运行时完成织入。

Spring的事务如何实现的?

Spring事务分为 1)编程式的事务
2)声明式的事务 1)基于事务代理工厂的事务声明式。
2)基于事务注解声明式事务管理。
3)基于ASpectj Aop配置事务。

事务的隔离级别。

1)read uncommited(读未提交)隔离级别最低,另一个事务可以读取这个事务未提交的数据。
2)read commited(读提交) 保证一个事务提交后才能被另一个事务读取。
3)repeatable(可重复读) 这个是隔离防止脏读,不可重复读,不能出现幻读。
4)serializable 事务隔离级别最高花费代价最高但可靠,可以防止脏读,幻读,不可重复读。
脏读:数据还未提交就被一个事务读取。
不可重复读:其一个事务进行一次读取数据,再次读取数据时就读到其他事务修改过的数据,导致俩次读取数据不匹配。
幻读:一个事务先后读取一个范围的数据,但是俩次读取的数据不一致(会新增一条数据)
注:不可重复读重点在 update和delete
幻读:insert

Spring的多线程实现?

Spring是通过TaskExecutor任务执行器来实现多线程和并发编程的,使用ThreadPoolTaskExecutor可实现一个基于线程池TaskExecutor。一般在开发是非阻塞的,即异步的,所有我们在配置类通过EnableAsync开启异步的支持,并通过在实现执行的Bean方法中使用@async注解@async注解来声明其是一个异步任务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
spring 的优点? 1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 7.spring属于低侵入式设计,代码的污染极低 8.独立于各种应用服务器 9.spring的DI机制降低了业务对象替换的复杂性 10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部 什么是DI机制? 依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色 需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中 创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者 因此也称为依赖注入。 spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。 设置注入的优点:直观,自然 构造注入的优点:可以在构造器中决定依赖关系的顺序。 什么是AOP? 面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面 1.面向切面编程提供声明式事务管理 2.spring支持用户自定义的切面 面向切面编程(aop)是对面向对象编程(oop)的补充, 面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。 AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象, 是对应用执行过程中的步骤进行抽象,,从而获得步骤之间的逻辑划分。 aop框架具有的两个特征: 1.各个步骤之间的良好隔离性 2.源代码无关性 Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory 为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 2. Hibernate是如何延迟加载? 1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection) 2. Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。 3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、 4. 说下Hibernate的缓存机制 1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存 2. 二级缓存: a) 应用及缓存 b) 分布式缓存 条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键数据 c) 第三方缓存的实现 5. Hibernate的查询方式 Sql、Criteria,object comptosition Hql: 1、 属性查询 2、 参数查询、命名参数查询 3、 关联查询 4、 分页查询 5、 统计函数 6. 如何优化Hibernate? 1.使用双向一对多关联,不使用单向一对多 2.灵活使用单向一对多关联 3.不用一对一,用多对一取代 4.配置对象缓存,不使用集合缓存 5.一对多集合使用Bag,多对多集合使用Set 6. 继承类使用显式多态 7. 表字段要少,表关联不要

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值