面试中的被问到Spring,我们该怎么去回答

今天只谈一下我们在面试中的如果面试官问到Spring,你应该怎么去回答,来获取面试官的青睐。在我的印象中,Spring框架可以说是Java世界里面最为成功的框架了,在企业的实际的应用里面,大部分的企业架构都是基于Spring框架的,它的成功来自于他的理念而不是技术,最为核心的理念是IOC和AOP。接下来我们就来讲讲这个Spring吧!

Spring的历史

Spirng从2004年第一个版本至今已经有十多年了,Spring的出现是因为当时Sun公司EJB的失败,因为当时的EJB2的时代,那配置文件可是非常的多呀,亏了我没在那个时代去做开发,去写代码,不然我估计自己可能怎么凉的都不知道。

而在之后的EJB3客服了配置方面的冗余,但是对于JAVAEE开发来说,更为致命的是对EJB容器的依赖,也就是EJB智能运行在EJB容器中,EJB容器的笨重,让很多企业感到熟手无策。

正是因为EJB的没落,导致了Spring的崛起,在Spring中,它会认为一切Java的类都是资源,而自愿都是BEan,容纳这些Bean的Spring所提供的IOC容器,所以Spring是一种基于Bean的编程。

面试问法一:什么是Spring

回答:Spring是一个J2EE的框架,这个框架提供了对轻量级IOC的良好支持,同时也提供了对AOP技术非常好的封装,相比于其他的框架,Spring框架的设计更加模块化,框架内的每个模块都能完成特定的工作, 而且各个模块可以独立的运行,不会相互的前置,因此,在使用Spring框架的时候,我们可以使用整个框架,也可以使用框架中的一部分,例如只使用AOP模块的日志管理。

回答这个问题的时候,不需要去特别的背诵到底什么是Spring,我们要说出自己对Spring框架的理解就可以了,很多时候面试官可能是问你的是你自己对框架的理解,而不是全篇背诵。

面试问法二:Spring有哪些模块

图解如下,

上面就是Spring的一些模块,在面试中,我们把这七个模块说完,要做出相应的一些讲解。比如说:

  • SpringAOP:采用了面向切面的思想,使Spring框架管理对象支持AOP,同事这个模块也提供了事务管理,可以不依赖具体的EJB组件,就可以将事务管理集成到应用程序中。
  • SpringORM:提供了对现有的ORM框架的支持,例如Hibernate,JDO,Mybatis等。
  • SpringDAO:提供了对数据访问对象(Data Access Object,DAO)模式和JDBC的支持,把实现业务逻辑和数据库访问的代码实现分离等。
  • SpringWeb:提供了Servlet监听器的Context和Web应用的上下文,同时还集成了一些现有的Web框架,如Struts。
  • SpringContext:扩展核心容器,提供了Spring上下文环境,给开发人员提供了有用的服务。
  • SpringWebMVC:提供了一个构件Web应用程序的MVC实现。
  • SpringCore:Spring框架的核心容器,他提供了Spring框架的基本的功能,这个模块最主要的是BeanFactory,它使用工厂模式来创建所需要的对象,同时Beanfactory使用IOC的思想,通过读取XML文件的方式来实例化对象。

上面介绍只是在面试的时候一些简单的介绍,可以自行理解,问到这个问题的时候,面试官可能并不是让你把每个模块都分析的特别透彻,很多情况下都是想看你到之对Spring的理解有多深。

面试问法三:Spring的核心是哪两个?

Spring核心内容:IOC和AOP。

在面试过程中,说完核心内容之后,一定要把什么是IOC,什么是AOP解释清楚,并且举个你们项目中的例子来加以验证。这个时候,面试官可能就会觉得,你对Spring的应用已经很透彻了。

要点一:什么是IOC?

控制反转(Inverse of Control,IOC)有时候也被称之为依赖注入,是一种降低对象之间耦合关系的设计思想。一般来说,在分层体系结构中,都是上层调用下层的接口,依赖注入最直接的提现,@AutoWired,@Resource这个注解,

上层调用下层的接口,上层依赖于下层的执行,也就是调用者依赖被调用者,而通过IOC方式,是的上层不再依赖下层的接口,通过注入实例化对象来选择不同的下层实现,来是先控制反转。

采用IOC机制能过提高系统的可扩展性,如果对象之间通过显式调用进行交互会导致调用者和被调用者存在非常紧密的联系,其中一方如果出现变动,那么系统也会进行相应的修改。

就举个例子,一家商店,出售茶叶,刚开始,店主就只有绿茶出售,那么相当于是 AbstractTea1 = new GreenTea();但是如果说店家发现绿茶销售不如隔壁的红茶销售好,就想着进红茶卖,那么在这个售货系统过中,凡事出现过AbstractTea1 = new GreenTea(),都得修改成AbstractTea1 = new BlackTea()。

而这种创建对象实例的方法往往会对导致程序做大幅度的修改。

画个图来看一下

通过图中的方法,可以把创建对象的过程委托给TeaFactory来完成,在我们需要使用对象的时候,我们就直接调用Factroy类中的getTea方法即可,具体创建对象逻辑放在了TeaFactory中来实现,我们只需要把Greentea换成BlackTea,那么系统中所有的AbstractTea1 = new GreenTea()这个方法就会替换成BlackTea了,只需要在一个地方做改动就能完成很复杂的事情了。

虽然说采用工厂模式之后,增强了系统的可扩展性,但是从本质上讲,工厂模式只不过是把程序中变动的逻辑全部都放到了工厂类中了,当系统的类比较多的时候, 就会经常的去改动工厂类中的代码,我们采用IOC实现方法之后,就会有另外一种。

Spring容器将会根据配置文件来创建调用者对象,同时把被调用的实例化对象通过构造函数或者set()方法的形式注入到调用者对象中。

而我们回答面试官的问题的时候,同时需要把IOC的优点也要说出来。

IOC优点:

  1. 通过IOC容器,开发人员不需要关注对象是怎么去创建的,同时增加新的类也比较方便了。
  2. IOC容器可以通过配置文件来确定需要注入的实例化对象,因此很方便进行单元测试。

要点二:什么是AOP?

面向切面编程(Aspect Oriented Programming)是面向对象开发的一种补充,他允许开发人员在不改变原来模型的基础上动态的去修改模型用来满足新的需求,例如,开发人员可以在不更改原来业务逻辑模型的基础上动态的增加日志,安全或者异常处理的功能。

AOP的基本概念

  1. Aspect(切面):通常是一个类,里面可以定义切入点和通知
  2. JointPoint(连接点):程序执行过程中明确的点,一般是方法的调用
  3. Advice(通知):AOP在特定的切入点上执行的增强处理,有before,after,afterReturning,afterThrowing,around
  4. Pointcut(切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式
  5. AOP代理:AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类

上面这些内容其实很多时候在面试的时候不用说的这么清楚,因为我们在面试的过程中,并不一定能够记得这么清楚,到时候需要我们表述一个大概的内容即可。

实现代理的两种代理方式:

  • 静态代理(个人理解)

针对具体的类编写代理类。 针对一个接口编写一个代理类。

  • 动态代理

而动态代理也可以分为2种,一种是JDK Proxy,另外一种是cglib代理。Spring对于有接口的类使用JDK Proxy,对于无接口和抽象类用Cglib代理,虽然Cglib可以进行代理,但是Cglib代理是有例外,就是代理类中不能出现final修饰的类或者类中有final修饰的方法。

如果以上的内容你在面试的过程中,大致上都说出来了,那么对于面试Spring这一块,可能几率从百分之50上升到百分之八十了。

也祝大家在未来的面试过程中,一直稳如泰山!

写在最后

  • 第一:看完点赞,感谢您的认可;
  • ...
  • 第二:随手转发,分享知识,让更多人学习到;
  • ...
  • 第三:记得点关注,每天更新的!!!
  • ...

原文地址:https://www.cnblogs.com/Java-no-1/p/11116733.html

时间: 2024-07-29 03:57:07

面试中的被问到Spring,我们该怎么去回答的相关文章

[HTML面试]HTML5 面试中最常问到的 10 个问题

1. HTML5 新的 DocType 和 Charset 是什么?HTML5 现在已经不是 SGML 的子集,DocType 简化为:                  <!doctype html>HTML 5 指定 UTF-8 编码的方式如下:                 <meta charset="UTF-8"> 2. 如何在 HTML5 页面中嵌入音频?HTML 5 包含嵌入音频文件的标准方式,支持的格式包括 MP3.Wav 和 Ogg:<

Android重难点解析——面试中可能被问到的那些问题

这篇项目主要介绍Android中的一些重难点概念,也包括面试中可能被问到的经典问题. 因为这些知识点比较琐碎,不太适合写成一篇文章,所以采用Github管理,内容会首先在Github更新,这里不定时同步,如果你想第一时间收到通知,请关注Github中的该项目. 项目地址 Android重难点解析,欢迎star,follow,将持续分享Android开发知识 文章列表 谈谈你对Application类的理解 Android为什么要设计出Bundle而不是直接使用HashMap来进行数据传递? 谈谈

面试请不要再问我Spring Cloud底层原理

概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓.因此本文将通过大量的手绘图,给大家谈谈Spring Cloud微服务架构的底层原理. 实际上,Spring Cloud是一个全家桶式的技术栈,包含了很多组件.本文先从其最核心的几个组件入手,来剖析一下其底层的工作原理.也就是Eureka.Ribbon.Feign.Hystrix.Zuul这几个组件

面试中,应聘者问面试官的问题

每次面试之后,都有一个应聘者可以询问问题的机会. 我是一个很不会问问题的人,通常没有问题可问.除非真想知道的,也早就问出口.大多数时间是摇头没问题. 给面试官留下的印象,大概是: 这妞真傻: 对我们公司不感兴趣: .... 问不出问题的人,应该是个减分项吧. 前两天去上海面试了.现在倒是有些问题想知道. 于是总结下: 1.[电话面试结束后询问] 你们想招一个什么样的测试?一般测试内容是什么,需要会什么技能?写自动化框架,一般用什么语言? [一面的询问环节]测试开发比例是多少? 测试时一个团队,位

拜托!面试请不要再问我Spring Cloud底层原理

概述  毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓.因此本文将通过大量的手绘图,给大家谈谈Spring Cloud微服务架构的底层原理. 实际上,Spring Cloud是一个全家桶式的技术栈,包含了很多组件.本文先从其最核心的几个组件入手,来剖析一下其底层的工作原理.也就是Eureka.Ribbon.Feign.Hystrix.Zuul这几个组

Python 面试中可能会被问到的30个问题

第一家公司问的题目 1 简述解释型和编译型编程语言? 解释型语言编写的程序不需要编译,在执行的时候,专门有一个解释器能够将VB语言翻译成机器语言,每个语句都是执行的时候才翻译.这样解释型语言每执行一次就要翻译一次,效率比较低. 用编译型语言写的程序执行之前,需要一个专门的编译过程,通过编译系统,把源高级程序编译成为机器语言文件,翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高,但也不能一概而论, 部分解释型语言的解释器通过在运行时动态优化代码,甚至能够使解释型语言的性能超过编译型

为何关键字static在面试中频频被问?

关键字static的神奇妙用在今天的学习中,我了解到关键字static的作用,下面我来给大家分享一下.①static 修饰局部变量只改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束生命周期才结束,但是变量的作用域没有改变.代码实现对比如下图所示 ②//全局变量支持跨文件访问static修饰全局变量,那么该全局变量只能在本文件有效,只能在本文件被访问.③//函数支持跨文件访问static修饰函数,那么该函数只能在本文件有效,只能在本文件使用.#这就是我想分享给大家的,希望对你们有

[转载]java面试中经常会被问到的一些算法的问题

Java面试中经常会被问到的一些算法的问题,而大部分算法的理论及思想,我们曾经都能倒背如流,并且也能用开发语言来实现过, 可是很多由于可能在项目开发中应用的比较少,久而久之就很容易被忘记了,在此我分享一下在面试中经常被问到的一些基本的算法,也当做一次知识的巩固. 排序算法的一些特点: * 排序算法的分类如下:* 1.插入排序(直接插入排序.折半插入排序.希尔排序):* 2.交换排序(冒泡泡排序.快速排序):* 3.选择排序(直接选择排序.堆排序):* 4.归并排序:* 5.基数排序.* * 关于

面试中注意3个javascript的问题

JavaScript 是所有现代浏览器的官方语言.因此,各种语言的开发者面试中都会遇到 JavaScript 问题. 本文不讲最新的 JavaScript 库,通用开发实践,或任何新的 ES6 函数.而是讲讲面试中经常出现的 3 个 JavaScript 问题.我问过这些问题,我的朋友说他们也问. 当然不是说你在准备 JavaScript 面试时只要学习这 3 个问题 -- 你还有很多途径去更好的准备即将到来的面试 -- 但面试官很有可能通过下面 3 个问题来判断你了解和掌握 JavaScrip