百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

面试官:看你简历上写熟悉Spring框架,谈谈对Spring的理解

ccwgpt 2024-10-16 08:10 27 浏览 0 评论

今天只谈一下我们在面试中的如果面试官问到Spring,你应该怎么去回答,来获取面试官的青睐。在我的印象中,Spring框架可以说是Java世界里面最为成功的框架了,在企业的实际的应用里面,大部分的企业架构都是基于Spring框架的,它的成功来自于他的理念而不是技术,最为核心的理念是IOC和AOP。接下来我们就来讲讲这个Spring吧!同时讲解完详情后面还有我准备的Java面试高频常问的50道Spring面试题和我的Spirng学习导图笔记!

压缩原因不是很清晰,但有需要的朋友只要转发关注下我,私信回复【Spring】即可拿到Xmind源文件及,我会一一回复下载链接!

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上升到百分之八十了。

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

Spring高级面试题

由于篇幅原因我这里展示截图已整理答案解析生成了PDF文档,同时还有上面的学习导图笔记和往期Spring全家桶学习笔记都免费分享给大家往期文章:手把手教你手写SpringMVC,剑指优秀开源框架灵魂

资料领取方式:只要转发+关注后,私信回复关键词【Spring】即可拿到,我会一一回复网盘链接!重要的事说三遍,转发转发转发关注后才能拿到!

答案解析展示


相关推荐

用Steam启动Epic游戏会更快吗?(epic怎么用steam启动)

Epic商店很香,但也有不少抱怨,其中一条是启动游戏太慢。那么,如果让Steam启动Epic游戏,会不会速度更快?众所周知,Steam可以启动非Steam游戏,方法是在客户端左下方点击“添加游戏”,然...

Docker看这一篇入门就够了(dockerl)

安装DockerLinux:$curl-fsSLhttps://get.docker.com-oget-docker.sh$sudoshget-docker.sh注意:如果安装了旧版...

AYUI 炫丽PC开发UI框架2016年6月15日对外免费开发使用 [1]

2016年6月15日,我AY对外发布AYUI(WPF4.0开发)的UI框架,开发时候,你可以无任何影响的去开发PC电脑上的软件exe程序。AYUI兼容XP操作系统,在Win7/8/8.1/10上都顺利...

别再说C#/C++套壳方案多了!Tauri这“借壳生蛋”你可能没看懂!

浏览器套壳方案,C#和C++有更多,你说的没错,从数量和历史积淀来看,C#和C++确实有不少方式来套壳浏览器,让Web内容在桌面应用里跑起来。但咱们得把这套壳二字掰扯清楚,因为这里面学问可大了!不同的...

OneCode 核心概念解析——Page(页面)

在接触到OneCode最先接触到的就是,Page页面,在低代码引擎中,页面(Page)设计的灵活性是平衡“快速开发”与“复杂需求适配”的关键。以下从架构设计、组件系统、配置能力等维度,解析确...

React是最后的前端框架吗,为什么这么说的?

油管上有一位叫Theo的博主说,React是终极前端框架,为什么这么说呢?让我们来看看其逻辑:这个标题看起来像假的,对吧?React之后明明有无数新框架诞生,凭什么说它是最后一个?我说的“最后一个”不...

面试辅导(二):2025前端面试密码:用3个底层逻辑征服技术官

面试官放下简历,手指在桌上敲了三下:"你上次解决的技术难题,现在回头看有什么不足?"眼前的候选人瞬间僵住——这是上周真实发生在蚂蚁金服终面的场景。2025年的前端战场早已不是框架熟练...

前端新星崛起!Astro框架能否终结React的霸主地位?

引言:当"背着背包的全能选手"遇上"轻装上阵的短跑冠军"如果你是一名前端开发者,2024年的框架之争绝对让你眼花缭乱——一边是React这位"背着全家桶的全能选...

基于函数计算的 BFF 架构(基于函数计算的 bff 架构是什么)

什么是BFFBFF全称是BackendsForFrontends(服务于前端的后端),起源于2015年SamNewman一篇博客文章《Pattern:BackendsFor...

谷歌 Prompt Engineering 白皮书:2025年 AI 提示词工程的 10 个技巧

在AI技术飞速发展的当下,如何更高效地与大语言模型(LLM)沟通,以获取更准确、更有价值的输出,成为了一个备受关注的问题。谷歌最新发布的《PromptEngineering》白皮书,为这一问题提供了...

光的艺术:灯具创意设计(灯光艺术作品展示)

本文转自|艺术与设计微信号|artdesign_org_cn“光”是文明的起源,是思维的开端,同样也是人类睁眼的开始。每个人在出生一刻,便接受了光的照耀和洗礼。远古时候,人们将光奉为神明,用火来...

MoE模型已成新风口,AI基础设施竞速升级

机器之心报道编辑:Panda因为基准测试成绩与实际表现相差较大,近期开源的Llama4系列模型正陷入争议的漩涡之中,但有一点却毫无疑问:MoE(混合专家)定然是未来AI大模型的主流范式之一。...

Meta Spatial SDK重大改进:重塑Horizon OS应用开发格局

由文心大模型生成的文章摘要Meta持续深耕SpatialSDK技术生态,提供开自去年9月正式推出以来,Meta持续深耕其SpatialSDK技术生态,通过一系列重大迭代与功能增强,不断革新H...

"上云"到底是个啥?用"租房"给你讲明白IaaS/PaaS/SaaS的区别

半夜三点被机房报警电话惊醒,顶着黑眼圈排查服务器故障——这是十年前互联网公司运维的日常。而现在,程序员小王正敷着面膜刷剧,因为公司的系统全"搬"到了云上。"部署到云上"...

php宝塔搭建部署thinkphp机械设备响应式企业网站php源码

大家好啊,欢迎来到web测评。本期给大家带来一套php开发的机械设备响应式企业网站php源码,上次是谁要的系统项目啊,帮你找到了,还说不会搭建,让我帮忙录制一期教程,趁着今天有空,简单的录制测试了一下...

取消回复欢迎 发表评论: