Java框架最全面试攻略,吃透这些问题,面试官奈你不何

篇幅所限,关于Java框架面试我也不可能全写完了,只能挑一些基础与比较有代表性的写一写,有同学就会说了,光讲这些理论有什么用,这些谁不知道,能帮我拿到offer吗?

别急,我早就预判了你的预判,这两年的各大厂Java岗面试真题我都有在收集整理,去芜存菁之后分门别类给你们弄好了,如图

好了,话不多说,直接开始正文!!

Spring

概念

spring是个java企业级应用的开源框架。spring主要用来开发java应用,但是有些扩展是针对

J2EE平台的文本应用。Spring框架目标是简化java企业级应用的开发,并通过pojo为基础的

编程模型促进良好的编程习惯。

优点

  • 轻量:spring是轻量的,基本的版本大约2MB;

  • 控制反转:spring通过控制反转实现了松散耦合,对象们给出他们的依赖,而不是创建或查找依赖的对象们;

  • 面向切面编程(AOP):spring支持面向切面的编程,并且应用业务逻辑和系统服务分开;

  • 容器:spring包含并管理应用中对象的生命周期和配置;

  • MVC框架:spring的web框架是个精心设计的框架,是web框架的一个很好的替代品;

  • 事务管理:spring提供一个特殊的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA);

  • 异常处理:spring提供方便的API把具体技术相关的异常(列如JDBC)转化为一致的unchecked异常;

spring中使用的设计模式

  • 简单工厂模式:又叫静态工厂方法模式,spring中的BeanFactory就是一个简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象;

  • 工厂方法模式:通常有应用程序直接使用new创建新的对象,为了将对象的创建和使用分离,采用工厂模式,即应用程序将对象的创建及初始化职责交给工厂对象。一般情况下,应用程序有自己的工厂对象类创建bean,如果将应用程序自己的工厂对象交给spring管理,那么spring管理的就不是bean,而是工厂bean;

  • 单列模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点。在spring中提供了全局的访问点BeanFactory,但没有从构造器级别去控制单列,这是因为spring管理的是任意的java对象;

  • 适配器模式:在spring中的AOP中,使用Advice(通知)来增强被代理类的功能。spring实现这一AOP功能的原理就是代理模式(jdk动态代理和CGLib代理)对类进行方法级别的切面增强,来实现的面向切面编程;

  • 包装器模式:spring中用到的包装器模式在类名上有两种表现:一种是类名中含有Wrapper,另一种是类名含有Decorator。(多数据源的切换列子);

  • 代理模式:为其他对象提供一种代理以控制对这个对象的访问(spring的Proxy模式在AOP中有体现);

  • 观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于他的对象都得到通知并自动更新;(spring中Observer模式常用的地方是listener的实现);

  • 策略模式:定义一系列的算法,把他们一个个封装起来,并且使他们可互相替换。(spring中在实例化对象的时候用到Strategy模式);

  • 模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中(spring中的JdbcTemplate的使用);

Spring AOP

AOP(可以说是对oop的补充和完善)它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

关键点:

  • 横切关注点:对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点;

  • 切面(aspect):类是对物体特征的抽象,切面就是对横切关注点的抽象;

  • 连接点(joinpoint):被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器;

  • 切入点(pointcut):对连接点进行拦截的定义;

  • 通知(advice):所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类目标对象;

  • 目标对象:代理的目标对象;

  • 织入(weave):将切面应用到目标对象并导致代理对象创建的过程;

  • 引入(introduction):在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段。

Spring IOC

IOC(控制反转)意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。IOC 不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。

  • 谁控制谁?当然是IoC容器控制了对象;

  • 控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。

  • 为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;

  • 哪些方面反转了?依赖对象的获取被反转了。

依赖注入方式

  • 构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。

  • Setter方法注入:Setter方法注入是容器通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。

Spring DI

DI(依赖注入)组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

  • 谁依赖于谁:当然是应用程序依赖于IoC容器;

  • 为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;

  • 谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;

  • 注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)

IoC和DI由什么关系呢?其实它们是同一个概念的不同角度描述,由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值