阿里的Spring框架面试题到底有多难?这五大问题你又掌握了多少!

181 阅读5分钟

前言

还在机械地打代码?我们很多开发者在开发 Spring 的程序的时候,很多的情况下,都是被动的接受了前辈们为我们做好的 Spring 特性案例。这样以来,确实在很大的程度上减少了我们开发的成本,但是也同时丧失了一个极好的学习机会,从而限制我们开发员的横向扩展能力。

只知道如何使用,却不知道做了什么,那么你注定只能是一个码农。Spring 框架几乎集成一半 Javaweb 开发的江山,但是你只知道如何写,不知道为什么要这么写,也不知道要如何优化。

Spring 作为一个轻量级的 Java 开发框架,将面向接口的编程思想贯穿整个 Java 系统应用,因此在 Java 面试中常被提。本文通过代理模式和Spring面试中的一些问题来聊一聊Spring框架中的重要知识点!

代理模式相关问题

  1. 为什么需要代理模式?
  2. 讲讲静态代理模式的优点及其瓶颈?
  3. 对Java 接口代理模式的实现原理的理解?
  4. 如何使用 Java 反射实现动态代理?
  5. Java 接口代理模式的指定增强?
  6. 谈谈对Cglib 类增强动态代理的实现?

Spring AOP相关问题

  1. 什么是 AOP?
  2. point cut,advice,Join point是什么?
  3. join point 和 point cut 的区别?
  4. 怎么理解面向切面编程的切面?
  5. 谈谈对SpringAOP Weaving(织入)的理解?
  6. 谈谈SpringAOP Introduction(引入)的理解?
  7. 讲解OOP与AOP的简单对比?
  8. 讲解JDK 动态代理和 CGLIB 代理原理以及区别?
  9. 讲解Spring 框架中基于 Schema 的 AOP 实现原理?
  10. 讲解Spring 框架中如何基于 AOP 实现的事务管理?

Spring IOC相关问题

  1. 什么是 IOC?
  2. 谈谈对控制反转的设计思想的理解?
  3. 怎么理解 Spring IOC 容器?
  4. Spring 中有多少种 IOC 容器?
  5. Spring IOC 怎么管理 Bean 之间的依赖关系,怎么避免循环依赖?
  6. 对Spring IOC 容器的依赖注入的理解?
  7. 说说对Spring IOC 的单例模式和高级特性?
  8. BeanFactory 和 FactoryBean 有什么区别,BeanFactory 和 ApplicationContext 又有什么不同?
  9. Spring 在 Bean 创建过程中是如何解决循环依赖的?
  10. 谈谈Spring Bean 创建过程中的设计模式?

注解相关问题

  1. 注解是一种什么样的编程思想?
  2. 为何能够直接使用@Autowired进行依赖注入?是如何工作的?
  3. Spring 是如何通过@AutoWired 自动注入 Bean 属性和 Map,List 集合的?
  4. @Required 是如何起到检查xml里面属性有没有被配置的?
  5. Spring 框架是如何把标注@Component 的 Bean 注入到容器?
  6. @Configuration,@ComponentScan,@Import,@Bean 注解是是如何工作的?
  7. 使用@PropertySource 引入配置文件,那么配置文件里面的配置是如何被注册到 Spring 环境里面的?
  8. 讲解如何通过自定义注解实现一个简单的树形文档生成?

事务相关问题

  1. 在 XML 里面配置了一个 SqlSessionFactoryBean 后,其究竟做了什么?
  2. 在 XML 里面配置了一个 MapperScannerConfigurer 后,其究竟做了什么?
  3. 在执行 Mapper 接口的查询方法后,发生了什么?
  4. tx:advice/aop:config 标签如何创建事务切面的?
  5. 标签添加后为何就可以使用注解式事务了?
  6. 为什么会报 Transaction rolled back because it has been marked as rollback-only 异常?
  7. Transactional 注解是否可以加在 private、protected 方法上?
  8. 事务的传播属性到底有什么用,嵌套事务到底又是怎么一回事?
  9. 为什么抛出了异常,事务却没有回滚?
  10. Spring 事务是如何保证线程安全的?

如何系统正确的学习

我认为有三个维度来说明:这个框架是为了解决什么问题而诞生的?这个框架的核心思想是什么?这个框架适合应用到哪些场景?说到思想,我觉得编程的灵魂就是思想,没有思想的编程和咸鱼没什么区别。“不要重复造轮子”,当时听了赶脚这句话挺高大上的,现在我认为这句话只能在某一方面是正确了。

首先我来说一下为什么要学会造轮子--因为你会造轮子后,用别人的轮子时才会明白其原理,用的时候才会得心应手,如果你对一个框架的理解只是停留在用,用的多熟练的阶段的话,那么你就是一个“码畜”,别人随时可以替代你。或许有人会说,项目时间紧根本不允许你写一个轮子、你写的还有那些大牛们写的好吗等理由反驳。但我想说的是:我没说项目中非得用自己写的轮子,自己写的轮子不一定要和别人比,因为造轮子的目的是要理解这些轮子的思想。

说这么多其实就是想告诉大家学习框架要理解框架的底层的原理,要掌握的就是最常用的原理。在这我分享一个开源框架的系统的思维学习树图给大家,希望能给有需要的朋友提供一些帮助!

===