Spring 和 Spring Boot , Spring Cloud的大总结

终于完成了一个微服务的项目,现在回过头来总结一下微服务这点事。可能写的比较乱,后期再改吧,时间比较紧,没有好好规划结构。主要是借鉴了一些技术视频和大佬讲的。还有一些文章,都是一年前自己收录到word中的,所以找不到在哪里借鉴的了,如果原作者看到了可以联系我备注上出处。

**加粗样式**

先简单的说一下他们都是什么

Springframework ,轻量级一站式构建企业级应用的解决方案
Springboot 快速构建工具
Spring cloud,微服务协调框架
SpringCloudDataFlow 微服务数据流(没有研究过)

在这里插入图片描述比如你选择ORM,他也给你诸多选择,比如mybatis等,向后兼容。

在这里插入图片描述

在这里插入图片描述

为什么选择用spring这一套东西?

比如你在官网下载一个项目,里边直接集成了一些,比如容器,数据库连接驱动,他会自动帮你配置好相关的bean,同时他也给你留了自定义配置的空间,你可以按照你需要的去定制。

而且他也提供了很多非功能性的东西,比如,安全,监控等。

我之前用一个非对称加密的东西,当时遇到问题就是本地window系统生成的密钥对,在Linux系统上不能用,也是用他提供的API就可以屏蔽不同系统之间的差异。

我觉得他最大的好处就是,让我们去专注业务逻辑的开发,而不是在一些其他的非功能性方面投入太多精力。

而且spring boot spring cloud有着比较强大的生态圈,对于一些比如redis,zookeeper,或者其他的中间件,都有支持。

从最开始的我的程序跑的好好的,保证不挂,到现在的考虑,高可用,高并发,考虑他的扩展性,还有遇到故障的时候,如何对系统不产生影响,迅速恢复。

Spring就是把这些东西固化到你的系统中,并且提供了很多解决方案,spring boot spring cloud也是继承了这些传统。

比如从外部容器到内部容器化,还有你可以监控系统的运行状态,还有怎么去管理你的配置文件,服务注册和发现,熔断等等。

让你的系统可以更强大。我觉得这也是现在越来越多的人使用他的原因。


Spring面试题

  1. 什么是Spring框架??

    轻量级一站式构建企业级应用的解决方案,是框架的框架。做资源整合,实现业务逻辑层和其他层之间的解耦。

  2. 开发中主要使用 Spring 的什么技术 ?
    ①. IOC 容器管理各层的组件
    ②. 使用 AOP 配置声明式事务
    ③. 整合其他框架.

  3. Spring的核心模块
    在这里插入图片描述
    在这里插入图片描述

  4. 使用Spring框架能带来哪些好处??

    1  容器化
          容器: Spring 包含 并管理应用中 对象的 生命周期和 配置     (很方便配置是单例 还是 原型 ,以及什么时候使用 什么时候销毁 )
       2   方便解耦,简化开发
              Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理,实现松耦合。符合高内聚低耦合的思想,这个特性也叫IOC 控制反转
       3   AOP编程的支持
              Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能,他是通过 动态代理 和CGlib实现的  这个底层是反射的原理                 
       4   声明式事务的支持
              不需通过编程的方式而进行管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码, 只需在配置文件中做相关的事务规则声明,便可将事务规则应用到业务逻辑中。
       5   方便程序的测试
                 Spring对Junit4支持,可以通过注解方便的测试Spring程序,需要加入 spring-test 的jar包  
       6   方便集成各种优秀框架
              Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架的直接支持 (如:Struts2、springmvc,Hibernate、MyBatis等)
       7  异常处理: Spring 提供方便的API把具体技术相关的异常转化为一致的unchecked 异常。(比如由JDBC,Hibernate or JDO抛出的)
    

    springMVC也有一个集中处理的思想 将异常抛给springmvc框架,由框架来处理异常。
    8 降低JavaEE API的使用难度
    Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低

  5. 什么是控制反转(IOC)?什么是依赖注入??

    **控制反转。**
    		spring通过控制反转实现对象间的松耦合。
    		
    Spring IOC 负责创建对象,管理对象。通过依赖注入(DI),装配对象,配置对象,并且管理这些对象的整个生命周期。
    
    IoC容器初始化的步骤:两大步骤,先定义,再初始化和依赖注入
    定义:bean的定义分为3步
    (1)resource资源定位
    (2)载入,将定位到的信息载入到bean的定义中,但是并不会创建bean的实例。
    (3)bean的注册,将bean的信息发布到IoC容器中。
    做完了这3步,bean就在容器中定义好了。
    
    默认是不会初始化bean的,只有用到IoC容器,getbean的时候,才开始对bean进行初始化,完成依赖注入。
    
    **什么是依赖注入,依赖注入的方式**
    就是一个概念,你不用创建对象,只需要在xml中描述哪些组件需要哪些服务,之后IoC负责把他们组装起来。
    方式:
    1:构造器注入---无参构造器、有参构造器
    2:工厂方式注入---静态工厂、动态工厂
    3:属性注入
    
    **面向切面编程AOP。**
    在不修改原有代码的基础上进行功能的扩展。Aop并不是spring框架独有的,spring只是支持aop编程的框架之一,有些aop能够对方法的参数进行拦截,有些aop对方法进行拦截,springAOP是基于方法拦截的AOP。有四种方法实现AOP的拦截功能:
    (1)proxyFactoryBean和对应的接口实现AOP
    (2)使用XML
    (3)使用@AspectJ
    (4)适应AspectJ注入切面
    
    AOP通过动态代理,来管控各个对象操作的切面环境,管理包括日志,数据库事务等操作,让我们可以在反射原有对象方法之前,正常返回、异常返回后,插入自己的业务代码,有时候甚至可以取代原有方法。
    
    底层默认使用jdk动态代理,代理模式就是真实对象和代理对象共同实现一个接口,接口里封装的就是要扩展的方法,AOP就是反射的思想,自己写一个类去实现一个动态代理的接口,里面需要重写的方法就是你想要扩展的功能,如果没有AOP,你写的什么方法,他运行时调用的就是什么方法,要做业务扩展要修改大量代码。配置AOP就相当于配置了一个说明书,我要对这个bean的方法进行扩展,AOP把不是核心的业务提取出来,另外实现,可以在不改变原有代码的基础上对业务进行扩展。Cglib动态代理也是一样的,只不过他是通过继承去实现的。
    
    基于AOP的事务管理,就是将springtx的相关管理代码配置成切面。切点bean就是业务bean,配置事务管理的bean,就是管理哪个数据库,事务管理方法。
    
  6. Spring有几种配置方式

    	1.	基于XML的配置
    	2.	基于注解的配置
    	3.	基于Java的配置
    
  7. Spring Bean的作用域(生命周期)

    •	singleton : bean在每个Spring ioc 容器中只有一个实例。
    •	prototype:一个bean的定义可以有多个实例。
    •	request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
    •	session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
    •	global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
    默认的Spring bean 的作用域是Singleton。
    
  8. Spring框架中的单例Beans是线程安全的么?

    Spring框架中的单例bean不是线程安全的。
    当多线程中存在线程改变了bean对象的可变成员变量时,其他线程无法访问该bean对象的初始状态,从而造成数据错乱

    有状态就是有数据存储功能。有状态对象(Stateful Bean),就是有实例变量的对象,可以保存数据,是非线程安全的。在不同方法调用间不保留任何状态。

    无状态就是一次操作,不能保存数据。无状态对象(Stateless Bean),就是没有实例变量的对象.不能保存数据,是不变类,是线程安全的。
    
  9. Springmvc的运行原理

    Springmvc的四大核心组件
    1.1 DispatchServlet: Servlet分发器,整个SPringMVC的前端控制器,框架入口。一般是在xml中配置servlet容器。
    1.2 HandlerMapping:寻找URL所请求的HandlerMethod(控制器方法controller),找@RequestMapping(),根据不同的映射器找到不同的映射。
    1.3 HandlerAdapter:实际调用HandlerMethod(controller)的组件,处理器适配器。
    1.4 ViewResovler:视图解析器.作用解析HandlerMethod返回值.把处理结果转换为需要调用的物理视图.

SpringBoot面试题

SpringCloud面试题

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值