Bootstrap

怎么回答面试官:你对Spring的理解?

怎么回答面试官:你对Spring的理解?

小菜菜,刚想参加工作,求大牛给予指点,他日菜菜必有重谢
关注者
831
被浏览
141,050
26 个回答

首先Spring是一个大的概念,Spring从最开始的一个Library到现在一个系列,其中最主要的包括Spring Framework, Spring Data, Spring Security, Spring Batch等等,以及快速框架Spring Boot,其中最重要的项目是Spring Framework,这个项目包括了IoC, AOP, MVC以及Testing。

第一个需要明白的是Spring的核心思想是什么?
Spring整个系列的最最核心的概念当属IoC, AOP,什么是IoC和AOP就不展开了,简而言之,将对象创建过程的职责赋予容器,通过容器管理对象的生老病死, 将对象创建过程从编译时延期到运行时,即通过配置进行加载,这样一来就解决了不用编译后期选择具体实现,其实就是面向对象的核心理念,针对接口编程。IoC开始就是个factory加上依赖管理罢了,这样一来,一个系统的创建过程就从原先的new改为配置组装,内部通过注入解决了依赖关系,只要满足接口协议即插即用。通过IoC, AOP事实上形成了一个套路,通过这个套路完成了系统的整合。

所以Spring并没有说自己写一个ORM,而是用统一的套路完成了多个ORM的集成,这也是Spring越做越大的基础,慢慢就形成了Spring Way,其实这个才是Spring最有价值的地方。

第二当然就是一些实践,其实主流问的大概也就几个方向,用的最多的应该就是Spring MVC, Spring Data, Spring Security和Spring Boot这几块吧,因为毕竟这是实践性内容,很多时候都是show me the code,之前学习过程写过一个sample,基本全是标准Spring Way,你可以拿去参考一下,GitHub - nonocast/todolist: A simple todolist system implemented with Spring's backend and TypeScript/React's frontend. Enjoy it.



  • Spring Boot
  • Spring MVC
  • Spring Security
  • Gradle
  • Freemarker
  • WebJars
  • Spring Data JPA
  • Mysql
  • Wechat
  • React
  • TypeScript
  • webpack
  • Redis
May it helps.
不要话太多,主要表达出自己懂这个就行。
不要话太少,太少显得死记硬背骗工作的。
这样说:
是一个开源框架
让java开发模块化,并且全面。贯穿逻辑层,表现层,持久层。让每一个功能模块都可以独立分开,降低耦合,提高代码复用率!
spring通过控制反转降低耦合性,一个对象的依赖通过被动注入的方式而非主动new
还包括面向切面, mvc的整合等等,spring正如其字面意思,是程序员的春天,大大地降低了体力劳动~
以上仅仅是个人对Spring的浅显认识,更多的深入理解以后还要请教您!!!

啪,一个大嘴巴甩过去。

一字一句顿着念,你!懂!个!屁!










好,真这么做的,看起来智商有限,我已经帮你们把他自然淘汰了。

有这个问题上来,你可以理解,这个人,要么狠懂,要么狠不懂,多数是不懂的,你可以装逼来获取面试得分了。你谦虚地回答到:

spring呢,是pivotal公司维护的一系列开源工具的总称,最为人所知的是spring mvc,事实上,他们都是基于spring framework,并且再其上继续增强,为某一方面服务的java组件。最近spring framework 刚升级到5,非常不错。比较常见的有spring boot,spring mvc,spring webFlux。过去spring framework被成为XML地狱,目前的版本已经大为改善,并且在其十来个组件当中,基本上涵盖了java开发的绝大多数,是一套非常成熟稳健的java应用框架。

如果我是面试官,我问的这个问题其实是想让你系统的介绍一下你所掌握的Spring的知识和应用情况。
1. Spring是什么?讲一下Spring的由来、思想、特性
2. Spring都有哪些产品组成?每个产品的作用、特点、使用场景?
3. 我在工作中用到了Spring的哪些产品、哪些特性?怎么用的?为什么用?

因为一般问出这个问题的面试官都问不出特别高深的问题,如果你能给他系统的科普一下Spring知识,会有大大的加分!hahahahah
读 expert one on one j2ee design and development 这本书.

农业社会中,你需要一个对象,你必须亲手把它 new 出来。

工业社会中,你需要一个对象,可以去工厂那里获取。

共产主义社会中,你需要一个对象,只需要凭 ID 去对象池里面领。

这是何等的共产主义精神!

我有次面试被问到spring IOC的时候不想再官方话,打了个比方,IOC它就类似于一个菜筐,以前你需要自己去菜市场买菜,现在你只要在家门口放一个菜框applicationcontext.xml或者也叫???.xml,然后就有人给你发菜,你想要什么样的菜也就是bean,在菜筐留个纸条预定下,想要青菜会发青菜,想要蘑菇会发蘑菇,青菜你想要菠菜或者生菜再预定下property,蘑菇想要土菇或者金针菇也可以预定下property,然后就会发菜了,你就可以不出门坐家里等着发菜做饭了

⊙﹏⊙。。。。。。。。。。。


个人觉得spring就是一个容器,这个容器用于生产bean对象,并对其管理。如果看玄幻小说的话,就好比天道和生灵的关系,天道创建我们,管理我们,为我没提供资源,直到生命结束。说到spring 我们有必提一下他其中网们经常用到的核心配件,ioc 和 aop ,ioc(控制反转) 为们都知道他是把为们之前手动new对象的过程和管理对象的过程交给了spring,也就是控制权的转换,这样减轻了我们程序员的代码量,提高了开发效率,ioc就像天道的执法者,帮助我们做一些事情,aop技术是建立在java语言的反射机制与动态代理上的,他有两种动态代理 方式,分别是java自身的动态代理和cglib代理,应为我们一般都是将事物切进service层的所以一般采用的是java自身的动态代理,实现一个 InvocationHandler接口创建自己的调用处理器,通过proxy类来指定classloader对象和一组interface创建动态代理类通过反射机制来获取动态代理的构造函数,其唯一参数类型是调用处理器接口类型,通过构造函数来创建动态代理实例,构造调用时处理器对象作为参数传入。cglib的话一般使用是目标对象没有实现接口,比如说我们的controller 实现层一般不写接口 这个时候我们就需要用到cglib了。
就我了解到的关于spring的东西并不多,现在还是停留在会用的阶段,但是我觉得spring框架就是一个容器,这个容器最主要的作用就是创建对象,以前我们创建对象时通过new关键字,现在不需要这么麻烦了,只需要找到这个容器就可以找到你需要的对象,其实就是一个factory,这个工厂可以提供很多我们需要的对象,我们只需要知道对象对应的名字就行了,至于其他关于spring更多高深的东西就不是很清楚了,如果各位有什么好的见解可以分享一下互相学习一下
反问面试官用过spring-brother吗。
Spring就是Java语言的补丁
个人感觉,spring让程序的代码逻辑和元数据区分开了,程序猿可以更好的关注逻辑怎么优化,而不是元数据怎么处理。
控制反转(IOC),依赖注入(DI)

spring 全家桶。

从基础框架 spring framework 到 spring boot,从微服务架构spring cloud 到 spring data flow。
说到Spring,我们需要知道Spring是一个容器,它是来对我们的一些bean里面配置的对象进行生命周期的管理,这个其实就体现在Spring两大特性中的依赖注入上。说到这,首先我们要知道两个特性,一个是依赖注入、控制反转,这个的好处是简化我们对对象的管理,把这部分功能全部交给Spring去做;还有一个更重要的特性就是AOP,面向切面编程,在这里面有一个很好用的框架,AspectJ。面向切面编程可以让你的代码可读性很好,也可以让你代码的行数“变少”。建议这个特性要好好利用起来。可以学习起来,多学习一小时,可以让你的代码少一行!行动起来吧!
最后总结一下,Spring之所以这么多人用,原因就是大大提高了开发效率,并且让我们的code看起来更舒服,更简洁!所以学习Spring,这两大特性都要用来!大部分人就可能用了第一个特性,然后还用的模模糊糊的!所以,理解最重要!加油!
一份写好的配置文件和组件顶过会议上千言万语的沟通,便是spring最大的优点。。

spring我们可以把它看成一个容器,spring核心是IOC、AOP。ioc控制反转也可以叫依赖注入di,以前我们都是自己new对象,现在创建和管理对象都交给spring容器来做,现在只要做好配置,ioc容器通过注入解决依赖关系。aop指的是面向切面编程,就是在不修改源代码的基础上,通过预编译或者运行期动态代理的方式,给程序动态统一的添加功能的方式。aop可以对业务逻辑的各个部分进行隔离,降低了程序的耦合度,一般有大量相同功能,重复代码比较多的时候用。比如说管理事务、权限校验等等

我以前面试的回答是:spring是对面向对象设计五大原则实现,使用spring就很容易遵循面向对象设计五大原则

from enterprise java bean,取其精华,去其糟粕。

刚毕业一两年的时候,的确面试必有这个问题。然后现在好像已经问我这个了。其实就是理解IOC和AOP就行。再深入点就是弄懂spring是如何实现IOC和AOP的就没问题了。

一般面试官问的时候,他是想知道你对spring的理解深刻程度。只需要说spring core的内容。两大核心内容IOC,AOP。然后再逐个解释是什么,原理是怎样。为什么要这样用。

按上述回答,面试官80%会满意。如果想深入挖掘,会问你还知道spring的哪些方面吗?

春面不觉晓,处处问题鸟

全是大神

如何我回答不知道,也不干兴趣。 你会否定这个面试者吗?

神器呀
现在为了提高开发效率,很多公司都在用spring,所以这个问题一般来说都是考察候选人对spring的理解程度,考虑能不能很好的融入团队。
另外不用spring的也问,就是看候选人的学习深度了。
标准答案ioc和aop没什么难的,关键在后面的问题:对于ioc或者aop,候选人认为他们好在哪里,为什么好。
;