前言:

前几天好朋友发来喜讯,跳槽一个月了,面试了有二十家公司,在面试官的狂轰滥炸下终于拿到了不错的offer。但是比较可惜的是朋友内推的大厂面试失败了,而且还是在Spring上,就令人挺无语的。他说本来以为大厂的面试会问一下高并发线程组件方面的知识,所以就着重看了一下这些,没想到栽倒了Spring上,真是可惜了!

所以今天我就总结一下几个关于Spring的高频面试题,比如:SpringAOP和aspectJ AOP有什么区别?springbean的生命周期等,希望对大家有所帮助。

另外本人整理收藏了20年多家公司面试知识点整理 ,以及各种Java核心知识点免费分享给大家,想要资料的话请点795983544暗号CSDN。

IOC

IOC(Inversion Of Controll,控制反转)是一种设计思想,将原本在程序中手动创建对象的控制权,交由给Spring框架来管理。IOC容器是Spring用来实现IOC的载体,IOC容器实际上就是一个Map(key, value),Map中存放的是各种对象。

这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。IOC容器就像是一个工厂,当需要创建一个对象,只需要配置好配置文件/注解即可,不用考虑对象是如何被创建出来的,大大增加了项目的可维护性且降低了开发难度。

AOP

AOP(Aspect-Oriented Programming,面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可扩展性和可维护性。使用AOP之后我们可以把一些通用功能抽象出来,在需要用到的地方直接使用即可,这样可以大大简化代码量,提高了系统的扩展性。

Spring AOP是基于动态代理的,如果要代理的对象实现了某个接口,那么Spring AOP就会使用JDK动态代理去创建代理对象;而对于没有实现接口的对象,就无法使用JDK动态代理,转而使用CGlib动态代理生成一个被代理对象的子类来作为代理。

Spring AOP / AspectJ AOP 的区别?

Spring AOP属于运行时增强,而AspectJ是编译时增强。

Spring AOP基于代理(Proxying),而AspectJ基于字节码操作(Bytecode Manipulation)。

AspectJ相比于Spring AOP功能更加强大,但是Spring AOP相对来说更简单。如果切面比较少,那么两者性能差异不大。但是,当切面太多的话,最好选择AspectJ,它比SpringAOP快很多。

Spring框架中都用到了哪些设计模式?

  1. 代理模式:在AOP和remoting中被用的比较多。

  2. 单例模式:在spring配置文件中定义的bean默认为单例模式。

  3. 模板方法模式:用来解决代码重复的问题。

  4. 前端控制器模式:Spring提供了DispatcherServlet来对请求进行分发。

  5. 依赖注入模式:贯穿于BeanFactory / ApplicationContext接口的核心理念。

  6. 工厂模式:BeanFactory用来创建对象的实例。

springmvc的核心是什么,请求的流程是怎么处理的,控制反转怎么实现的

核心:控制反转和面向切面

请求处理流程:

首先用户发送请求到前端控制器,前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分;
页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,并进行验证,然后将命令对象委托给业务对象进行处理;处理完毕后返回一个ModelAndView(模型数据和逻辑视图名);
前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染;
前端控制器再次收回控制权,将响应返回给用户。
控制反转如何实现:

我们每次使用spring框架都要配置xml文件,这个xml配置了bean的id和class。
spring中默认的bean为单实例模式,通过bean的class引用反射机制可以创建这个实例。
因此,spring框架通过反射替我们创建好了实例并且替我们维护他们。
A需要引用B类,spring框架就会通过xml把B实例的引用传给了A的成员变量。

你用过哪些重要的 Spring 注解?

@Controller - 用于 Spring MVC 项目中的控制器类。
@Service - 用于服务类。
@RequestMapping - 用于在控制器处理程序方法中配置 URI 映射。
@ResponseBody - 用于发送 Object 作为响应,通常用于发送 XML 或 JSON 数据作为响应。
@PathVariable - 用于将动态值从 URI 映射到处理程序方法参数。
@Autowired - 用于在 spring bean 中自动装配依赖项。
@Qualifier - 使用 @Autowired 注解,以避免在存在多个 bean 类型实例时出现混淆。
@Scope - 用于配置 spring bean 的范围。
@Configuration,@ComponentScan 和 @Bean - 用于基于 java 的配置。
@Aspect,@Before,@After,@Around,@Pointcut - 用于切面编程(AOP)。

@Component, @Controller, @Repository, @Service 有何区别?

  • @Component:这将 java 类标记为 bean。它是任何 Spring 管理组件的通用构造型。spring
    的组件扫描机制现在可以将其拾取并将其拉入应用程序环境中。
  • @Controller:这将一个类标记为 Spring Web MVC 控制器。标有它的 Bean 会自动导入到 IoC 容器中。
  • @Service:此注解是组件注解的特化。它不会对 @Component 注解提供任何其他行为。您可以在服务层类中使用
  • @Service 而不是 @Component,因为它以更好的方式指定了意图。
  • @Repository:这个注解是具有类似用途和功能的 @Component 注解的特化。它为 DAO 提供了额外的好处。它将 DAO导入 IoC 容器,并使未经检查的异常有资格转换为 Spring DataAccessException。

SpringMVC 流程?

1)用户发送请求至前端控制器 DispatcherServlet。
2)DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。
3)处理器映射器找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。
4)DispatcherServlet 调用 HandlerAdapter 处理器适配器。
5)HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)
6)Controller 执行完成返回 ModelAndView。
7)HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet。8)DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器。
9)ViewReslover 解析后返回具体 View。
10)DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。
11)DispatcherServlet 响应用户。

SpringMvc 怎么和 AJAX 相互调用的?

通过 Jackson 框架就可以把 Java 里面的对象直接转化成 Js 可以识别的 Json 对象具体步骤如下
1)加入 Jackson.jar
2)在配置文件中配置 json 的映射
3)在接受 Ajax 方法里面可以直接返回 Object,List 等,但方法前面要加上@ResponseB注解

有哪些不同类型的依赖注入实现方式?

依赖注入是时下最流行的IoC实现方式,依赖注入分为接口注入(Interface Injection),Setter方法注入(Setter Injection)和构造器注入(Constructor Injection)三种方式。其中接口注入由于在灵活性和易用性比较差,现在从Spring4开始已被废弃。

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

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

Spring Beans

什么是Spring beans?

Spring beans 是那些形成Spring应用的主干的java对象。它们被Spring IOC容器初始化,装配,和管理。这些beans通过容器中配置的元数据创建。比如,以XML文件中 的形式定义。

一个 Spring Bean 定义 包含什么?

一个Spring Bean 的定义包含容器必知的所有配置元数据,包括如何创建一个bean,它的生命周期详情及它的依赖。

如何给Spring 容器提供配置元数据?Spring有几种配置方式

这里有三种重要的方法给Spring 容器提供配置元数据。

XML配置文件。
基于注解的配置。
基于java的配置。

Spring配置文件包含了哪些信息

Spring配置文件是个XML 文件,这个文件包含了类信息,描述了如何配置它们,以及如何相互调用。

Spring基于xml注入bean的几种方式

Set方法注入;
构造器注入:①通过index设置参数的位置;②通过type设置参数类型;
静态工厂注入;
实例工厂;

面试总结:

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

另外本人整理收藏了20年多家公司面试知识点整理 以及各种知识点整理 下面有部分截图 想要资料的话点击1065653031 暗号CSDN自行领取,希望能对大家有所帮助。

去大厂面试Java开发,被Spring问自闭了...相关推荐

  1. java开发面试复试_面试java开发,面试官会问哪些问题?

    作为一个当初从学校刚毕业找工作而被面试饱经摧残的小白,到现在的java开发从业人员,中间不可谓之不艰辛,当初的屡屡碰壁,工作受挫,一直到现在我仍然认为那是我人生中不可或缺的一段经历. 关于面试的艰辛这 ...

  2. 去大厂面试,说了没高并发经验,面试官还是抓着这个问!

    我真服了,我tm现在满脑子都是"高并发",不得不说这个词真是技术圈的一个高频词. 如果不拿出这个说道说道就感觉技术非常欠缺似的.不过确实,高并发几乎是每个程序员都想拥有的经验. 原 ...

  3. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)

    ⭐欢迎订阅<大厂面试突击>专栏,面试10多家大厂总结出的重点知识,仅前50名免费⭐ 在日落大道浪漫出逃 除了风没有人知道 前言 哈喽大家好,我是一条 最近3天面了大约有10家公司,平均一天 ...

  4. 面试java试岗,面试java开发,让去试岗一般机会大吗?

    我经常会被邀请做一些科技企业的面试官,参与过很多企业的研发人员面试工作,这其中就包括Java开发工程师的面试.至今为止,我没有听过有试岗这个说法.如果面试后我们认为面试者的表现符合我们的预期,会发出试 ...

  5. 网易面试Java开发凉凉经,面试官:基础不牢,技术不够深入,无缘offer,无缘网易......

    前言 我也是经朋友介绍来的网易,先是投了简历,然后朋友通知我说可以面试了,于是我就带着忐忑的心理来到网易公司.面试的是一位帅气的光头叔叔,下午三点开始,之前准备了很多准备应付技术问答,结果基础还是太差 ...

  6. 冲大厂:Java并发六十问,快来看看你会多少道

    这篇文章有点长,四万字,图文详解六十道Java并发面试题.人已经肝麻了,大家可以点赞.收藏慢慢看!扶我起来,我还能肝! 基础 1.并行跟并发有什么区别? 从操作系统的角度来看,线程是CPU分配的最小单 ...

  7. 去大厂面试又栽了,败在了算法的理论面试...

    曾经我以为只要每天加班,努力工作就可以一年加薪,两年升职. 可体力拼不过大学生,资源拼不过老同事的我, 却被缺少核心竞争力这件事挡住了升职逆袭的去路. 那我该怎样快速提高开发竞争力? 我们采访了很多一 ...

  8. 去阿里面试Java岗位,一个Spring问题就给干趴下了

    上周公司让我面了个32岁的Java程序员,各方面都挺好,问啥都会,对于Spring问题,答得还行,最后问了个亿级流量Spring的实战题,就答不上来了,走时几乎落泪-唉! 小编这里有一套Spring面 ...

  9. 22届SHEIN校招面试--JAVA开发工程师面经

    这里写自定义目录标题 个人背景 性格测评+笔试 一面 8.30 同事面 二面 9.08 tl面 三面 9.13 hr面 四面 9.16 部门总监面 五面 9.25 CEO面 面试总结+实习期的感受 今 ...

最新文章

  1. 切歌请按3或4!我把树莓派装进了旋转电话里,现在它成了一部MP3
  2. Bazel构建工具的安装
  3. 数据结构与算法专题——第二题 优先队列
  4. springmvc执行流程_SpringMVC
  5. Google cloud 存储 Storage
  6. 巨杉数据库入选2021年广州独角兽创新企业榜单
  7. 发布量子加密手机,浓眉大眼的三星也开始技术碰瓷了?
  8. [转]file_get_contents(php://input)
  9. [iOS]Xcode8 搭建 .framework
  10. 电商设计师如何正确认知自己的价值
  11. Rancher管理k8s集群
  12. 网络毕业设计--基于华为ensp防火墙双出口负载拟真实验
  13. 在Outlook2007中设置QQ邮箱为IMAP/SMTP服务器
  14. ABAP 动态控制选择屏幕 / Free Selection
  15. web实验2 制作简单网页(HTML+CSS)
  16. 【英语语法学习笔记-主语】
  17. 全球共模扼流圈行业收入预计2028年达到9.167亿美元
  18. 快手2017校园招聘_笔试_面试
  19. java英语面试自我介绍_java自我介绍的英文面试
  20. 欧几里得算法(除法表达式)

热门文章

  1. python新浪api_python调用新浪微博API | 学步园
  2. 如何策划一场银行校招线上笔试?
  3. 关于冒充我司名义从事诈骗活动的严重声明!
  4. TP5 中引入第三方类库
  5. python上传Excel返回解析的数据
  6. 阿里云发布BYOIP自带IP上云解决方案,助力企业平滑上云
  7. 微信营销八(朋友圈活动技巧)
  8. 【LeetCode】自由之路 [H](记忆化搜索)
  9. 爱彼迎发布父亲节全球热门户外房源榜单 | 美通社头条
  10. 基于科大讯飞的语音识别 windows平台开发