前言

先说一下本人情况吧,末流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面试题,果然大厂都爱问它们的更多相关文章

  1. 在阿里云容器服务上开发基于Docker的Spring Cloud微服务应用

    本文为阿里云容器服务Spring Cloud应用开发系列文章的第一篇. 一.在阿里云容器服务上开发Spring Cloud微服务应用(本文) 二.部署Spring Cloud应用示例 三.服务发现 四 ...

  2. java面试官最爱问的垃圾回收机制,这位阿里P7大佬分析的属实到位

    前言 JVM 内存模型一共包括三个部分: 堆 ( Java代码可及的 Java堆 和 JVM自身使用的方法区). 栈 ( 服务Java方法的虚拟机栈 和 服务Native方法的本地方法栈 ) 保证程序 ...

  3. 开发必备linux命令大全-稳赚不亏

    我们的服务一般都是在linux系统运行,因此了解一些关于linux命令是必须.接下来将一一详细介绍一些常用的linux的命令 文件操作 远程登录与操作 磁盘挂载 进程管理 启动和结束 系统性能参数查看 ...

  4. 阿里四面:你知道Spring AOP创建Proxy的过程吗?

    Spring在程序运行期,就能帮助我们把切面中的代码织入Bean的方法内,让开发者能无感知地在容器对象方法前后随心添加相应处理逻辑,所以AOP其实就是个代理模式. 但凡是代理,由于代码不可直接阅读,也 ...

  5. 最新 阿里java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.阿里等10家互联网公司的校招Offer,因为某些自身原因最终选择了阿里.6.7月主要是做系统复习.项目复盘.LeetCode ...

  6. 应聘阿里,字节跳动,美团必须掌握的Spring IOC与工厂模式

    Spring IOC与工厂模式 PS:本文内容较为硬核,需要对java的面向对象.反射.类加载器.泛型.properties.XML等基础知识有较深理解. (一)简单介绍 在讲Spring IOC之前 ...

  7. 阿里小哥带你玩转JVM:揭秘try-catch-finally在JVM底层都干了些啥?

    让我们准备一个函数:   然后,反编译他的字节码:   首先我们介绍异常表:在编译生成的字节码中,每个方法都附带一个异常表. 异常表中的每一个条目代表一个异常处理器,并且由 from 指针.to 指针 ...

  8. 为什么阿里、头条、美团这些互联网大厂都在用Spring Boot?

    前言 自 2014 年发布至今,Spring Boot 的搜索指数 一路飙升.没错 Spring Boot 越来越火了,作为一名行走一线的 Java 程序员,你可能在各个方面感受到了 Spring B ...

  9. 凭借着这份Spring面试题,我拿到了阿里,字节跳动美团的offer!

      一般问题 1.1. 不同版本的 Spring Framework 有哪些主要功能?   1.2. 什么是 Spring Framework? Spring 是一个开源应用框架,旨在降低应用程序开发 ...

随机推荐

  1. pv操作是否会造成死锁呢?

    看了一些pv操作的例子,有一些基本原理不是想得很清楚. 有一个进程 while(true) { p(s); ...... v(s); } s的初值为1. 那么我的问题是,当多个该进程需要执行时,是否会 ...

  2. JS逻辑运算符之“短路”

    逻辑与 && 如(表达式 1 && 表达式 2)参与运算时,程序只运行到对应的位置后,停止运行 二者都为 真(true) 时,返回表达式 2 二者有一个为 假 (fal ...

  3. WSL2和CUDA踩坑

    WSL2和CUDA踩坑   WSL2里可以直接跑cuda了, 目前(2020年10月) 功能可用, 但bug很多, 不够完善     1. 安装     主要参考: https://docs.nvid ...

  4. [阿里DIN]从论文源码学习 之 embedding_lookup

    [阿里DIN]从论文源码学习 之 embedding_lookup 目录 [阿里DIN]从论文源码学习 之 embedding_lookup 0x00 摘要 0x01 DIN代码 1.1 Embedd ...

  5. 第1天|12天搞定Python网络爬虫,吃里爬外?

    人力资源部漂亮的小MM,跑来问我:老陈,数据分析和爬虫究竟是关系呀?说实在的,我真不想理她,因为我一直认为这个跟她的工作关系不大,可一想到她负责我负责部门的招聘工作,我只好勉为其难地跟她说:数据分析, ...

  6. MySQL全面瓦解4:数据定义-DDL

    前言 SQL的语言分类主要包含如下几种: DDL 数据定义语言 create.drop.alter 数据定义语言 create.drop.alter 语句 . DML 数据操纵语言 insert.de ...

  7. 4G DTU的通信距离是多少

    4G是现今应用非常广泛的一种通信技术,主要是为广义的远程信息处理提供服务.随着计算机与各种具有处理功能的智能设备在各领域的日益广泛使用,数据通信的应用范围也日益扩大.在物联网领域中,4G是移动设备实现 ...

  8. LORA串口无线数据透明传输终端ZSL311

    ZSL311是由成都众山科技生产销售的一款LORA串口无线数据透明传输终端,采用的是LoRa扩频技术来进行无线数据传输,同时提供RS485和RS232串口,为用户提供全透明数据传输模式.支持星形.Me ...

  9. PHP百度地图开发之距离计算的实例分享

    /** * 计算两个坐标之间的距离(米) * @param float $fP1Lat 起点(纬度) * @param float $fP1Lon 起点(经度) * @param float $fP2 ...

  10. LWJGL3的内存管理,第二篇,栈上分配

    LWJGL3的内存管理,第二篇,栈上分配 简介 为了讨论LWJGL在内存分配方面的设计,本文将作为该系列随笔中的第二篇,用来讨论在栈上进行内存分配的策略,该策略在 LWJGL3 中体现为以 Memor ...