S学长阿里一面&&Spring杂谈

S学长阿里一面&&Spring杂谈,第1张

S学长阿里一面&&Spring杂谈 阿里一面

总结起来很一般,不过之前背过的东西还是用上不少,感觉面试官挺不错的吧,面试体验还可以

  1. 项目介绍 这里感觉自己还需要在项目上做一个扩充,说的项目感觉都没什么难点。尤其是技术上的
  2. 算法:快排,最小堆
  3. 微服务之间是如何通信的
  4. 线程池中核心线程数、最大线程数、阻塞队列之间的关系
  5. 了解的工作队列
  6. 了解的GC算法
  7. Java内存模型
  8. Redis缓存雪崩 缓存击穿
  9. Spring动态代理
  10. 了解的MySQL存储引擎
  11. 数据库隔离级别
  12. InnoDB可重复读隔离级别如何防止幻读
  13. 线程之间的通信方式
  14. 消息队列(多背背)
Spring是什么?

Spring是一个轻量级的开源的j2EE框架,它## 二级标题是一个容器框架,用来装JavaBean(Java对象),中间层框架,可以起一个链接作用,比如说把Struts和hibernate粘合在一起运用,可以让我们企业开发更快更简洁。 Spring是一个轻量级的控制翻转(IOC)和面向切面编程(AOP)的容器框架

  • 从大小与开销两方面而言Spring都是轻量级的。
  • 通过控制翻转(IOC)的技术达到松耦合
  • 提供了面向切面编程的丰富支持
  • 包含并管理应用对象(Bean)的配置和生命周期,这个意义上是一个对象Bean的容器
  • 将简单的组件配置,组合成为复杂的应用,这个意义上是一个框架。
谈谈你对AOP的理解

系统是由许多不同的组件所组成的,每一个组件各负责一块特定的功能。除了实现自身核心功能之外,这些组件还经常承担着额外的职责。例如日志、事务管理和安全这样的核心服务经常融入到自身具有核心业务逻辑的组件中去。这些系统服务经常被成为横切关注点,因为它们会跨越系统的多个组件。

当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系。例如日志功能。

日志代码往往水平的散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。

在OOP设计中,它导致大量的代码重复,不利于各个模块的重用。

AOP:将程序中的交叉业务逻辑(比如安全、日志、事务)等封装成一个切面,然后注入到目标对象(具体的业务逻辑)中去。AOP可以对某个对象的功能进行增强,比如对象中的方法进行增强,可以在执行某个方法之前额外的做一些事情,在某个方法执行之后额外做一些事情。

谈谈你对IOC的理解

IOC容器:实际上IOC容器是一个Map(key,value),里面存的都是各种对象(在xml中配置的bean节点,@repository、@Service、@controller、@Component),在项目启动的时候会读取配置文件里面的bean节点,根据全限定类名使用反射创建对象放到map里、扫描到打上上述的类还是通过反射创建对象放到map里。

这个时候map里就有各种对象了,接下来我们在代码里需要用到里面的对象时,再通过DI注入(autowired、resource等注解)

控制翻转

没有引用IOC之前,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手里。

引入IOC容器之后,对象A与对象B之间失去了直接联系,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。

通过前后对比不难看出:对象A获得以来对象B的过程由主动行动变为被动行动,控制权颠倒过来,这就是“控制翻转”这一名称的由来。

全部对象的控制权全部上缴给第三方IOC容器,所以,IOC容器成为了整个系统的关键核心,它起到了一种类似粘合剂的作用,把系统中的所有对象粘合在一起发挥作用,如果没有“粘合剂”,对象与对象之间就彼此失去联系,这就是有人把IOC容器比喻成粘合剂的由来。

依赖注入

获得依赖的对象的过程翻转了。控制反转之后,获得以来对象的过程由自身管理变味了由IOC容器主动注入。依赖注入是实现IOC的方法,就是由IOC容器在运行期间,动态地将某种依赖关系注入到了对象之中。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5693175.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存