阿里四面P7稳了,得亏我会这些Spring面试题,果然大厂都爱问它们
前言
先说一下本人情况吧,末流985毕业,毕业之后一直在一家不大不小的公司里安稳上班。上半年因为疫情的原因公司调整了工资,我也是随波逐流跟随大家辞了职。辞职之后向阿里。字节这些都投了简历(但是只收到了阿里的回复)。一路居然惊险但也是成功斩下offer,问的都是最近两年新出的面试频度较高的面试题!,现在我把我所学的分享给大家!
作为一名Java方向的程序员,在面试大厂的时候,其实关于spring这一块是问的非常多的,尤其是源码这一块,几乎是逢面试必问,虽然说现在技术更新比较快,但是掌握好spring以及它的源码绝对是你面试的一个杀手锏。以下这份文档就包括了spring从基础到源码主要涉及到的内容有如下
- Spring框架功能整体介绍
- Spring IOC容器底层注解使用
- Spring Ioc容器源码解析
- Spring 是如何解决循环依赖的
- Spring Aop源码分析
- spring 事务源码解析
首先跟大家说一下就是我碰到的面试题,关于spring循环依赖的
什么是循环依赖?
循环依赖其实就是循环引用,也就是两个或者两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图:
注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。
Spring中循环依赖场景有:
(1)构造器的循环依赖
(2)field属性的循环依赖
其中,构造器的循环依赖问题无法解决,只能拋出BeanCurrentlyInCreationException异常,在解决属性循环依赖时,spring采用的是提前暴露对象的方法。
Spring怎么解决循环依赖
这里附上一张解决Spring循环依赖的流程图
由于图片过大可能导致模糊,需要这套图的可以关注我的公众号:前程有光直接获取
面对大厂问Spring源码而言,很多的Java面试者都纷纷败北,源码没有一个正确的方法学起来确实挺吃力的,在这把之前学源码的一些经验和笔记分享给大家,希望对那些还在学习Spring源码的朋友有所帮助!
一、 Spring框架功能整体介绍
- Sring Core Container
- Beans (BeanFacotry的作用)
- Context
- Expression Language )
- Spring Data Access/Integration
- Transaction
- Spring Web
- Spring Aop
- Instrumentation
- 控制反转和依赖注入
- 什么是控制反转?
二、Spring IOC容器底层注解使用
- xml配置文件的形式 VS 配置类的形式
- 基于xml的形式定义Bean的信息
- 基于读取配置类的形式定义Bean信息
- 在配置类上写@CompentScan注解来进行包扫描
- 排除用法 excludeFilters
- 包含用法 includeFilters
- @ComponentScan.Filter type的类型
- FilterType.CUSTOM 自定义类型如何使用
三、Spring Ioc容器源码解析
- Spring源码解析之扩展原理
- ApplicationListener:Spring是如何发布事件的? )
- BeanDefinitionRegistryPostProcessor的处理源码流程
- BeanFactoryPostProcessor 处理流程
- Spring Bean的实例化过程
- bean实例化过程的调用链
- bean的实例化过程源码分析
- SpringIOC容器启动源码的分析
四、Spring 是如何解决循环依赖的
- 什么是循环依赖?
- 代码实例:
- 可能存在的问题:
- 解决方案:
- 什么是早期引用?
五、 Spring Aop源码分析
- AOP
- 基本概念
- 简单案例
- @EnableAspectJAutoProxy
- Import(AspectJAutoProxyRegistrar.class)
- 所以我们来分析AspectJAutoProxyRegistrar类是用来干什么的?
六、spring 事务源码解析
- 事务概念解析
- 什么是事物?
- 事物的特性(ACID)
- Spring事务三大接口介绍
- PlatformTransactionManager接口介绍
- TransactionDefinition 事务属性的定义
七、Spring5.0新特性之日志框架
- 日志框架场景
- 我们Java中常用的日志框架是什么?
- 我们常常听说的就是如下的日子框架,还不知道怎么选?
- 加入我们系统使用的是SLF4J作为日志门面,我们是如何匹配?
- Spring4.Xspring底层使用的日志技术
- Spring5.x 底层使用的日志技术
以上就是这份文档的概况,一次搞懂spring以及核心源码,不管是架构师还是开发者,又或是运维,都能够从中学到不少。
由于篇幅原因,这份spring核心笔记已经被整理成了PDF文档,有需要这份spring核心笔记完整文档的可以关注我的公众号:前程有光免费获取
阿里四面P7稳了,得亏我会这些Spring面试题,果然大厂都爱问它们的更多相关文章
- 在阿里云容器服务上开发基于Docker的Spring Cloud微服务应用
本文为阿里云容器服务Spring Cloud应用开发系列文章的第一篇. 一.在阿里云容器服务上开发Spring Cloud微服务应用(本文) 二.部署Spring Cloud应用示例 三.服务发现 四 ...
- java面试官最爱问的垃圾回收机制,这位阿里P7大佬分析的属实到位
前言 JVM 内存模型一共包括三个部分: 堆 ( Java代码可及的 Java堆 和 JVM自身使用的方法区). 栈 ( 服务Java方法的虚拟机栈 和 服务Native方法的本地方法栈 ) 保证程序 ...
- 开发必备linux命令大全-稳赚不亏
我们的服务一般都是在linux系统运行,因此了解一些关于linux命令是必须.接下来将一一详细介绍一些常用的linux的命令 文件操作 远程登录与操作 磁盘挂载 进程管理 启动和结束 系统性能参数查看 ...
- 阿里四面:你知道Spring AOP创建Proxy的过程吗?
Spring在程序运行期,就能帮助我们把切面中的代码织入Bean的方法内,让开发者能无感知地在容器对象方法前后随心添加相应处理逻辑,所以AOP其实就是个代理模式. 但凡是代理,由于代码不可直接阅读,也 ...
- 最新 阿里java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.阿里等10家互联网公司的校招Offer,因为某些自身原因最终选择了阿里.6.7月主要是做系统复习.项目复盘.LeetCode ...
- 应聘阿里,字节跳动,美团必须掌握的Spring IOC与工厂模式
Spring IOC与工厂模式 PS:本文内容较为硬核,需要对java的面向对象.反射.类加载器.泛型.properties.XML等基础知识有较深理解. (一)简单介绍 在讲Spring IOC之前 ...
- 阿里小哥带你玩转JVM:揭秘try-catch-finally在JVM底层都干了些啥?
让我们准备一个函数: 然后,反编译他的字节码: 首先我们介绍异常表:在编译生成的字节码中,每个方法都附带一个异常表. 异常表中的每一个条目代表一个异常处理器,并且由 from 指针.to 指针 ...
- 为什么阿里、头条、美团这些互联网大厂都在用Spring Boot?
前言 自 2014 年发布至今,Spring Boot 的搜索指数 一路飙升.没错 Spring Boot 越来越火了,作为一名行走一线的 Java 程序员,你可能在各个方面感受到了 Spring B ...
- 凭借着这份Spring面试题,我拿到了阿里,字节跳动美团的offer!
一般问题 1.1. 不同版本的 Spring Framework 有哪些主要功能? 1.2. 什么是 Spring Framework? Spring 是一个开源应用框架,旨在降低应用程序开发 ...
随机推荐
- HTML轮播(2)
前言 现在在完成轮播的框架上进行扩展更多的功能,上下切换图片,以及添加动画滚动更加平滑过渡 CSS <style> #LB { width: 100%; height: 948px; ov ...
- JAVA 基于Jusup爬虫
java爬虫核心:httpclient slf4j jsoup slf4j 配置文件log4j.properties log4j.rootlogger=DEBUG,A1log4j.logger.cn. ...
- linux上安装mitmproxy
一.去git上下载安装包 下载mitmproxy二进制安装包:https://github.com/mitmproxy/mitmproxy/releases/ 二.安装 #上传 rz 安装包的本地路径 ...
- (PatchGANs)Pecomputed Real-time Texture Synthesis With Markovian Generative Adversarial Networks
Introduction: Deconvolution; Computational costs; Strided convolutional nets; Markov patches; 1. Q ...
- windows7 安装配置NodeJS、NPM
转载自https://blog.csdn.net/dengxw00/article/details/82974808 windows7 安装配置NodeJS.NPM一.安装 NodeJS1.登陆官网( ...
- 20202405李昕亮《BASE64编码》
BASE64编码 20202405李昕亮 参考网址: 1.https://baike.baidu.com/item/base64/8545775?fr=aladdin 2.https://blog.c ...
- Luogu P4546 [THUWC2017]在美妙的数学王国中畅游
题意 题意奇奇怪怪,这里就不写了. \(\texttt{Data Range:}1\leq n\leq 10^5,1\leq m\leq 2\times 10^5\) 题解 为什么你们都是卡在数学方面 ...
- 4G DTU模块带有MQTT协议吗?
DTU作为一种通讯设备,其应用场合十分广泛.从广义上讲,在进行通信时,传输数据链路两端负责发送数据信息的模块单元都称之为DTU,在它的作用下对所传信息格式转换和数据整理校验.在狭义上的定义,DTU一般 ...
- Java学习的第四十天
1.例4.1在其他函数中调用主函数 package bgio; public class cjava { public static void main(String[] args) { prints ...
- vue3.0-如何切换路由-路由模式ts
如何更换路由模式 vue3版本如何切换路由模式?(注:更改后要重启下项目才能看到效果.) 博主,我搜了大半天的,你是怎么找到的? 如下图可看到