自己总结Spring全家桶面试题3

Spring全家桶

一,spring

1,什莫是spring框架,使⽤有什么好处 ,谈谈你对Spring的理解

Spring是一个轻量级的java开发框架。简化了企业应用开发。Spring的出现是为了解耦合,由工厂模式和xml文件演化诞生的,使用对象我们只要调用工厂就行了,修改被调对象时只需要修改xml配置文件。Spring的核心是控制反转(IOC)和面向切面(AOP)。

3, spring 特性ioc,di是什么,实现原理是什么

IOC就是控制反转,以前使用的资源都需要自己new出来,而在Spring中所有的资源在创建时候,全部放到Spring的IOC容器中。当你需要用的时候,Spring把对应的资源给你就行了。

DI其实和IOC是一回事,IOC是站在Spring的角度来看,将资源交给spring进行控制,DI是站在应用程序的角度来看,应用程序要使用资源Spring就相应的资源给应用程序。

4, spring常⽤的注解

@Component, @Controller ,@Service , @Repository,

@Bean(用于加载第三方资源的)

@Value (用于注入非引用类型,也可以读取配置文件${} )

@PropertySource(用于加载配置文件)

@Autowired (自动注入引用类型,自动装配按照类型加载,如果类型一样按变量名匹配)

@PropertySource(value = "classpath:filename.properties")
public class ClassName {
    @Value("${propertiesAttributeName}")
    private String attributeName;
}

@Primary 提高bean优先级(如果两个bean的类型和名称都相同)

@Cofiguration (使用注解代替spring的配置文件) @ComponentScan(“scanPackageName”)

@Improt (导入第三方bean作为Spring的控制资源,弄一个配置类,配置类可以进行导入

5, @Autowird和@qualifier,@resourse区别

@Autowired和@qualifier(考雷fai耳)(“userDao”) 按照bean的id名称进行注入

上面两个是Spring中的提出的东西,@resourse是java提出的,模仿Spring的,功能和这两个一样

6, spring bean⽣命周期,⾃定⽣命周期⾏为 ***不好搞

Spring启动,查找并加载需要被Spring管理的bean,进行bean的实例化,

bean准备就绪,被应用程序使用,bean会一直驻留在应用上下文(容器)中,直到上下文被销毁。

如果bean标签中定义了w方法,该方法会在bean的创建时被执行。

如果bean标签中定义了destroy-method方法,容器销毁会调用destroy-method方法。

Spring可以管理singleton作用域的Bean的生命周期,Spring可以精确地知道该Bean何时被创建、何时被初始化完成、容器何时准备销毁该Bean实例。
对于prototype作用域的Bean,Spring容器仅仅负责创建,当容器创建Bean实例之后,Bean实例完全交给客户端代码管理,容器不再跟踪其生命周期。每次客户端请求prototype作用域的Bean时,Spring都会产生一个实例交给客户端程序,就不再过问了。之后等待GC进行垃圾回收。
对于singleton作用域的Bean,每次客户端代码请求时都返回同一个共享实例,客户端代码不能控制Bean的销毁,Spring容器负责跟踪Bean实例的产生、销毁。Spring容器可以在创建Bean之后,进行某些通用资源申请;还可以在销毁Bean实例之前,先回收某些资源,比如数据库连接。

在这里插入图片描述

Bean的生命周期:

如果我在程序中要生成一个Bean,并且注册到 ioc 容器中。

1, spring 拿到这个类,先从类中抽取出 一些属性和者方法,组成每个类的 beanDefinitionMap (bean 定义)

(bean定义中有,beanClass (bean是属于什么类的) , Scope(singleton,prototype (pro per type)) lazyInit )类定义描述了类中的所有信息。,由DefinitionListableBeanFactory (Bean工厂统一管理)。

2,然后下一步是Bean工厂后处理器,(可以对类定义进行修改 )

3,然后开始实例化 ,推断构造方法,使用合理的构造方法。

4,然后使用DB 工厂生成Object对象

5,执行bean的后置处理器 (在bean实例化对象之后做的事情,initiailzingBean 给bean的某些方法赋值,或者给bean的某些属性赋值 )

6,把bean放入singletonObjects (bean的一级缓存 ,单例池)

SpringBean的生命周期

如何理解spring的循环依赖:首先spring FrameWork的体系中,我们的Bean ,是由beanDefinition来创建的,beanDefinition可以理解位spring bean的一个建模。Bean的生命周期,首先我们的Spring容器启动扫描,把类变成beanDefinition存到beanDefinitionMap 中,进行遍历对beanDefinition进行验证,是否单例,是否懒加载。spring在实例化之前回去singletonObjects看有没有这个bean,没有就进行创建,bean的创建分为3步:

1.调用构造方法创建对象实例(这一步完成之后其它对象实例就可以引用它)

2.填充实例内部属性(会依次从三级缓存中获取依赖的bean,如果没有找到,则会先去创建依赖的bean,之后再返回继续填充属性)

3.执行initializeBean方法进行初始化

(当bean进行创建时,会先调用getbean方法->执行doGetBean方法,在doGetBean方法中会调用getSingleton方法,这一步就是从三级缓存中获取对象缓存,因为是刚开始创建bean所以缓存中肯定没有,之后会调用createBean方法,在createBean方法中会调用doCreateBean执行bean的创建过程就是上面的那三步,当bean创建成功之后会将其放入一级缓存之中,此时会将它从三级和二级缓存中删除。其中我们可以看到当第一步执行完毕后会将刚刚创建的实例放入singletonFactories(第三级缓存)中,那么我们下面了解下到底什么是spring的三级缓存。处于最上层的缓存是singletonObjects,它其中存储的对象是完全创建好,可以正常使用的bean,二级缓存叫做earlySingletonObjects,它其中存储的bean是仅执行了第一步通过构造方法实例化,并没有填充属性和初始化,第三级缓存singletonFactories存储的是对应bean的一个工场。

7,spring中的循环注⼊是什么意思,怎么解决 ?

循环依赖就是X中注入了Y , Y中注入了X, 其中有个ObjectFactory

Y进行加载的时候,会得到Y的beanDefinition,然后看Y对应的ObjectFactory 有没有提前暴露,没有就提前暴露,到Y进行属性填充式,发现X没有在spring的容器中,就开始X的生命周期,就开始X的初始化,然后进行到属性填充时,发现X中有Y,然后发现Y的ObjectFactory 中暴露出来了。然后用ObjectFactory 生产出Y。

8, spring注解扫描原理

Spring中存在一个专门用于包扫描的类 ClassPathBeanDefinitionScanner, 它有一个doScan()方法,去扫描指定的包;然后获取这个类的Class对象。通过放射获取到类的注解信息。判断是否是Spring的注解。如果是完成加载。

9, spring核⼼模块有哪些

七大核心模块

(1)核心容器(Spring Core)在实际开发中所要用到的组件,都通过IOC控制反转的方式,交给Spring 的容器进行管理。

(2)应用上下文(Spring Context)Spring的上下文是一个配置文件。向Spring框架提供上下文信息。

(3) Spring DAO模块 Spring的Dao 对JDBC进行封装。隐藏了JDBC的API ,更好的对数据库进行操作。可以是Mybatis

(4)spring 的 AOP

(5)spring 的 ORM 对象关系映射。使的数据库的表和java中的类一一对应。不用去手动进行封装了。

(6)Spring Web模块 Web模块建立在应用程序上下文模块之上,给Web模块提供上下文。Web层使用的框架可以是Spring的MVC 也可以是Struts(死chua si)。

(7) Spring MVC 是基于mvc模式的 轻量级web框架·

13, spring 框架中都⽤到了哪些设计模式

设计模式:

ioc的装饰者模式,动态代理

spring bean的单例模式

工厂模式

14, spring BeanFactory和FactoryBean区别

FactoryBean是bean标签的一个属性。作用是将工厂创建出来的对象,作为Spring的bean进行管理使用。

BeanFactory是Spring源码中一个工厂类,是一个接口,用于管理和生产bean,其实例有 DefaultListableBeanFactory、ApplicationContext等,如今用ApplicationContext创建bean。比起BeanFactory,BeanFactory创建bean,采用延迟加载,使用才创建,ApplicationContext创建bean才用容器创建时,及创建。

7, 什么是aop,aop实现原理

aop是面向切面编程,弥补oop(面向对象编程)的不足,基于oop横向发展。在运行期间通过动态代理的方式,向目标类注入增强代码。在不修改源码的情况下,对程序进行增强。

8,切⼊点、通知、植⼊点、切⾯是什么

连接点:接口或者实现类中的方法。

切入点:不是每个方法中都能挖掉共性功能的,能被挖掉共性功能的方法称为切入点。

通知:被挖掉的共性功能。

切面:告诉spring通知和切入点之间的关系。

通知类型:通知是位于前面的,还是位于后面的。

织入:就是将挖掉的功能回填的动态过程

目标对象:就是挖掉功能的方法对应的类产生的对象,这种对象是无法直接完成最终工作的

在项目中aop的使用好像就是全局异常处理器。日志记录。

9,代理⽅式有⼏种,怎么配置,实现原理是什么

静态代理:装饰者模式,和被装饰者对象实现相同的接口,写个构造方法,将被代理对象传进来,然后不进行装饰的方法,使用原来的对象中的方法就行。

JDK提供的Proxy动态代理:(1)将要增强的对象作为参数传入,(2)Poxy.newPoxyInstance(cl,classes,ih)三个参数,类加载器,所有接口,invocationHandler(监听被代理对象中的所有方法的调用)

CGLIB动态代理: 是一套动态字节码,AOP默认用的是jdk的proxy,可以在配置文件中指定为CGLIB

JDK中的动态代理是通过反射类Proxy以及InvocationHandler回调接口实现的,但是,JDK中所要进行动态代理的类必须要实现一个接口,也就是说只能对该类所实现接口中定义的方法进行代理,这在实际编程中具有一定的局限性,而且使用反射的效率也并不是很高。

使用CGLib实现动态代理,完全不受代理类必须实现接口的限制,而且CGLib底层采用ASM字节码生成框架(Java字节码操控框架),使用字节码技术生成代理类,比使用Java反射效率要高

10,spring的事务传播机制有那些?

为什么会有传播机制呢?

spring 对事务的控制,是使用 aop 切面实现的,我们不用关心事务的开始,提交 ,回滚,只需要在方法上加 @Transactional 注解,这时候就有问题了。

场景一: serviceA 方法调用了 serviceB 方法,但两个方法都有事务,这个时候如果 serviceB 方法异常,是让 serviceB 方法提交,还是两个一起回滚。
场景二:serviceA 方法调用了 serviceB 方法,但是只有 serviceA 方法加了事务,是否把 serviceB 也加入 serviceA 的事务,如果 serviceB 异常,是否回滚 serviceA 。
场景三:serviceA 方法调用了 serviceB 方法,两者都有事务,serviceB 已经正常执行完,但 serviceA 异常,是否需要回滚 serviceB 的数据。

事务的传播行为描述的是事务协调员对事务管理员所携带事务的处理态度。

事务的传播行为有七种:

(1)required 协调员看管理员有事务就加入,如果没事务就自己新建一个事务

(2)required new 管理员有事务,协调员也会新建一个事务

(3)supports 管理员有事务,协调员就加入。如果没有也不进行创建。

(4)not_supports (不支持事务) 管理员有事务,协调员也不开启事务

(5)mandatory (买 de chui )要求管理员必须携带事务,如果不带事务就报错

(6)never 要求管理员不能代事务,如果管理员代了事务就会报错。

(7)nested 用于设置回滚点(savePoint,一旦事务回滚,事务将回滚到回滚点)

事务传播行为的应用:订单业务

记录日志到数据库表X 和 保存订单数据到数据库表Y 是两个不同的事务。

订单号的生成,和保存订单数据是两个不同的事务。

11,spring事物配置⽅式有⼏种 ?(Spring管理事务的方式有几种)

(1)编程式事务,在代码中硬编码(不推荐使用)开启事务和提交事务,平台事务管理器,事务定义,事务状态。(使用sprng提供的事务API)

(2)声明式事务,在配置文件中配置(推荐使用)(因为格式都已经是固定的了所以spring帮我们写好了)

声明式事务又分为两种:

1,基于XML的声明式事务 (在xml文件中定义事务管理的通知类)

2,基于注解的声明式事务 (1)在Spring的配置类上加上@EnableTransactionManagement
(2)在方法,类上或者接口中加上@Transactional,(事务的超时时间基本上摆设。事务在执行的时候时常超过 一个值。)

12, spring事务能跨数据源吗?不能应该怎么解决

不可以。Spring Transaction默认是单数据源

分布式事务:一个事务中,涉及到对多个数据库的操作

采用分布式事务两阶段提交。

两阶段提交有两个阶段:

(1) 分别是准备阶段

(2) 提交阶段

在两阶段提交中会有一个协调者,和多个参与者。

准备阶段会有协调者开启事务。协调者向参与者发起事务执行的请求。

两阶段提交????????

两阶段提交:

存在一个负责协调各个本地资源管理器的事务管理器本地资源管理器一般是由数据库实现的,事务管理器在第一阶段的时候询问各个资源管理器是否就绪?如果收到每个资源的回复都是yes,则在第二阶段提交事务,如果存在一个资源的回复是no,则全部回滚事务。

二,springMVC

1. springmvc整合web,整合spring

SpringMVC是一个轻量级web框架,表现层框架。是基于MVC模式。(Model View Controller 一种表现层模式。浏览器请求过来 要的是数据,而我们将数据进行封装,组成一个Model, 光有数据用户看不到,我们还需要有页面视图 View 而Controller 是将数据和页面进行组合 ,通过Response相应给用户。)

比起Struts 使用更加简单,性能更加突出。

2. spring如何保证⾼并发下Controller安全 ,springmvc的controller线程安全吗?怎么解决

3. springmvc执⾏流程

请求过来,经过前端控制器,进行拦截 , 发送请求查询handler给 处理器映射器(HandleMapping), 处理器映射器查询出相应的handler ,返回一个处理器链 给前端控制器。然后前端控制器找能够执行handler的处理器适配器进行执行。执行完返回ModelAndView对象,给前端控制器。前端控制器有把ModelAndView给视图解析器(ViewResolver)解析成view对象(jsp,html)。给前端控制器。然后前端控制器进行渲染,返回给用户。

2. springmvc参数绑定原理 ,springmvc怎么进行参数绑定(借助方法的形参进行绑定)

表单穿过来的数据是键值对的形式。username=abin&password=1234 , springmvc接收,只需要在方法的参数中加 sayHello( String username , String password){} ;方法的参数名称只需要和请求参数名称保持一致就行了。mvc会自动赋值。

底层原理: 底层一定是按照反射来实现的,通过反射拿到方法的参数,然后进行赋值。

支持的数据类型:1,基本数据类型,2,实体类型(javaBean)3, 集合数据类型 (List , Map)

因为springmvc是一个web层框架。客户端一定会发送请求过来。请求一定会携带参数。springmvc拿到将数据拿到,过程就是参数绑定。

3. springmvc返回json格式数据

给前端相应数据,使用**@ResponseBody**注解即可。

4. springmvc⽂件上传

1,导入依赖,2,配置文件上传处理器, 3,在后端的代码方法的参数上加 MultipartFile file

5. springmvc和spring⼦⽗容器关系

Spring和springmvc是两个框架。spring是根容器,springmvc是子容器。有时没有配好。两个容器会产生冲突,@Controller注解的bean没有在springmvc的容器中,而是被spring加载到它的容器中。

解决方法:spring,和springmvc各扫个的包。

6. 为什么要选择springmvc框架 肯定和Struts做比较

7. SpringMVC有那些注解

@RequestParam ( 基本类型参数的封装 ,如果说请求参数的名称和方法形式参数的名称不一致,)

POJO类型的封装(请求参数的名称需要和POJO的属性名称保持一致

@RequsetMapping (在方法和类上使用) 用来指定请求路径

@ResponseBody (该注解可以将返回的JavaBean转换成json响应到前端。)

@PathVariable从路径中获取参数

@RequestBody从请求体中获取数据,获取的是json格式数据

@RequestParam 获取url拼接的值

@RestController (@RequestBody 和 @Controller的结合)

8. springmvc获得request,response, session的⼏种⽅式

这个很简单,只需要在处理器方法中定义这3种类型的形式参数即可

public String servletApi(HttpServletRequest request, HttpServletResponse response, HttpSession session)

9. 注解⽅式springmvc使⽤的是那个requestmapping,adapter(适配器)

10. springmvc怎么优化

11. springmvc的核⼼组件有哪些

也就是请求过来,那几个,视图解析器,处理器映射器,处理器适配器,前端控制器

12. springmvc怎样设定重定向和转发

此时不能使用@ResponseBody注解

return "forward:page.jsp"; == return "page.jsp";	//默认是转发
return "redirect:page.jsp";							//重定向

13. springmvc怎么处理异常

程序产生了异常,会交给Spring MVC中的异常处理器(HandlerExceptionResolver)进行处理。

14. springmvc拦截器怎么使用

拦截器在实际开发中用于拦截请求,权限校验,看是否有token

15. 拦截器和过滤器的区别

18, 什么是restful风格 ,springmvc支持resful风格,对应注解是?

把请求路径作为请求参数的一部分, 用http动作( GET , POST , Delete , PUT )描述动作。比如想要查询id为1的用户。

我们原始的post请求http://127.0.0.1/quest/user?1 , controller层需要对url进行判断,判断是查询,还是修改。然后转发业务层。

而使用restful风格,我们只需要http://127.0.0.1/user/1 这时发送个get请求。外人也看不出来我们这个是什么操作。

@PathVariable从路径中获取参数

@RequestBody从请求体中获取数据,获取的是json格式数据

@RequestParam 获取url拼接的值

19, restful风格怎么做crud(增删改查)

GET查询, POST添加, DELETE删除, PUT更新,

一般只有,get和post请求,只是一个规范而已

20, 乱码问题,静态资源放行

springmvc的前端控制器(DispathServlet 继承了httpServlet )中文乱码问题只需在web.xml使用springmvc提供的配置就行。一次配好就行了。

三,springboot

1,为什么选择springboot ,什么是springboot 和spring cloud的区别

springboot Spring家族中的一个框架,用来简化spring的开发。

比如以前开发个springMVC

1、在pom.xml文件中导入依赖

2、在web.xml文件中去配置Spring MVC所需要的前端控制器(DispatcherServlet)

3、创建一个Spring MVC的配置文件

  • 配置注解扫描路径
  • 开启注解驱动
  • 配置视图解析器
  • 配置CommonsMultipartResolver
  • 配置HandlerExceptionResolver

4、编写Controller,启动程序进行测试

使用Spring Boot开发一个web应用(基于Spring MVC)步骤:

1、在pom.xml文件中导入依赖

2、编写Controller方法

3、编写一个启动类(代码有main方法的类),启动程序进行测试

2,springboot提供了哪些核⼼功能

自动装配

起步依赖: springboot有两个起步依赖

(1)springboot需要继承的父工程 spring-boot-starter-parent

(2)web 开发需要的起步依赖 spring-boot-starter-web

一前我们开发时候需要自己导入对应的依赖,添加用那些版本,有时会出现版本冲突

而Spring boot通过起步依赖来帮助项目管理依赖,对版本锁定, dependencyManagement。

比如,web 开发需要的起步依赖 spring-boot-starter-web中有spring的依赖,mvc的依赖,tomcat的依赖,json的依赖,在spring-boot-starter-web中都有。

3,springboot中的 Starter 是什么

起步依赖:是一种可以指定基于功能依赖,是利用Maven的依赖传递性,把常用类库组合在一起,>为提供特定功能定制的依赖,并且不会存在版本冲突等问题。

4,springboot常⽤的 Starter 有哪些

spring-boot-starter-parent:SpringBoot的父依赖,SpringBoot项目必须实现的
spring-boot-starter-logging:提供Logging日志功能
spring-boot-starter-thymeleaf:使用Thymeleaf视图构造MVC Web应用程序的启动器
spring-boot-starter-web:web项目的依赖,里面有json spring tomcat mvc的依赖
spring-boot-starter-test:整合Junit测试
spring-boot-starter-data-redis:操作Redis客户端
spring-boot-starter-actuator:应用监控功能
spring-boot-starter-dubbo:使用Dubbo框架相关功能 浅绿色文字

5,springboot的配置⽂件有哪⼏种格式

properties > yml > yaml;三种,同目录优先级

6,springboot有哪⼏种读取配置的⽅式?

(1)使用@Value注解

(2)使用springboot 自带的 Evironment 对象,里面封装了配置文件中的数据。

(3)直接将数据封装到对象中。在对象上加@ConfigurationProperties(prefix = “person”), 类要有set方法

7,springboot怎么管理配置⽂件版本 吗,版本控制

Springboot多环境切换。

采用多个profile文件的方式,提供多个文件,每个代表一种环境。

application-dev.properties/yml 开发环境

application-test.properties/yml 测试环境

application-pro.properties/yml 生产环境

profile激活方式

1,配置文件: 再配置文件中配置:spring.profiles.active=dev

2,测试时在idea中配置虚拟机参数:在VM options 指定:-Dspring.profiles.active=dev

3,部署时使用命令行参数:java –jar xxx.jar --spring.profiles.active=dev

8,springboot的核⼼注解是哪个

@EnableAutoConfiguration , 这个注解底层也是是使用 @Import这个注解来导入配置类,实现Bean的动态加载。里面的参数是AutoConfigurationImportSelector.class (ImprotSelector的实现类)

9, springboot⾃动配置原理是什么?

(1)springboot的启动类上 有 @SpringBootApplication注解 ,这个注解是一个复合注解。

核心的注解就有3个:@SpringBootConfiguration,@EnableAutoConfiguration ,@ComponentScan()

自动配置就是@EnableAutoConfiguration 它也是复合注解

里面有个注解@Import( {@AutoConfigurationImportSelector.Class } ) 利用AutoConfigurationImportSelector选择器给spring容器中导一些组件。

@AutoConfigurationImportSelector中有一个selectImprot 方法,这个方法就是要告诉springboot导入那些组件。 将所有要导入的组件以全类名的方式返回, 这些组件就会被添加到容器中。这些组件都叫做什么什么AutoConfiguration, 这些都是自动配置类。 这些配置类的作用就是给容器中导入这个场景所需要的所有组件,并配置好这些组件。

List configurations = getCandidateConfigurations( ) // 获取候选的配置文件

SpringFactoriesLoader.loaderFactoryNames()

这个方法的作用就是扫描所有jar包类路径下的 META -INF / Spring.factories

把扫描到的这些文件的内容包装成properties对象,它从properties对象获取FactoryClassName ,将结果返回交给容器中的各个组件。


ImportSelector,其主要作用是收集需要导入的配置类

(1) 在启动类上有 @SpringBootApplication注解 跟进去。是一个复合注解,

package com.yizheng.api;

@SpringBootApplication
public class ApiAcceptApplication {}

在idea中按住Ctrl点击进去,会看到下面两个关键注解(其他注解没有列出来)

@SpringBootConfiguration  //该类为配置类
@EnableAutoConfiguration  //启动自动配置
@ComponentScan() // 对那些包进行扫描
public @interface SpringBootApplication {}

其自动配置的核心就是@EnableAutoConfiguration,这个注解内部使用了@Import(AutoConfigurationImportSelector.Class) 来加载配置类。

这个类中有个方法getAutoConfigurationEntry() , 去在META-INF/spring.factories (该文件定义了许多的配置类), 找配置类,会自动加载这些配置类,初始化成Bean。 不是所有的bean都会被加载,只有满足Condition条件的,才会被加载。

四,springcloud

1,什么是微服务架构?

单体架构 > 分布式架构 > SOA架构 > 微服务

微服务是系统架构的一种风格。它是将原本独立的系统,拆分成多个微小的服务。(解耦合,有利于开发,有利于调试 )。这些微服务各个都能独立运行(独立进程,有自己独立的数据库)。各个服务之间通过HTTP的Restful 风格 进行通信协作。(比如订单微服务可能会用到商品微服务中的商品信息)

2,什么是SOA

3,什么是spring cloud

SpringCloud就是一系列框架的集合,它只是将目前各家公司开发的比较成熟的微服务框架组合起来。比如(Nacos,Feign , Gateway )。通过Spring Boot 框架, 进行项目的构建和开发。 屏蔽掉各个框架复杂的配置,和API。 springboot 和 springCloud 的区别。springCloud 啥都没干,就是把别人的框架整合起来。用springboot简化了他们之间的开发和配置。形成了一套框架的集合。springcloud是基于springcloud做开发的。

4,SpringCloud和Dubbo做对比

Dubbo (是阿里开发的一套rpc框架)的注册中心Zookeeper(注册中心就是服务治理) , SpringCloud的注册中心是Nacos 。dubbo 服务的调用方式:RPC ,SpringCloud 是采用Rest API , 服务监控才用的是Dubbo-monitor, SpringCloud 采用的是 Spring boot Admin 。断路器,服务网关,分布式配置这些都没有。

Dubbo 使用RPC通信协议(底层是基于Socket 相对于底层)完成通信,Spring Cloud使用Restful (底层是基于http的,http是相对于Socket的上层建筑, 但是上层建筑功能更多)

5, 几种注册中心的对比

服务治理就是注册中心(注册中心就是用于服务的注册和发现的)

Eureka , Consul , Nacos

Eureka是Netflix公司开发的组件 , Eureka中有俩个组件 Eureka Server(注册中心 @EnableEurekaServer),Eureka Client (服务的提供者,服务的消费者@EnableEurekaClient),@EnableDiscoveryClient // 激活DiscoveryClient 激活服务发现

Eureka 2.0遇到了一些瓶颈,停止维护,停止更新了

服务治理的作用,比如一个微服务对外提供服务,另一个微服务需要知道它在哪里。通过远程调用进行(远程调用有三要素协议,ip , 端口)。

Consul 也是一家外国的

Nacos = Spring Cloud eureka + Spring Cloud Config + Spring Cloud Bus (消息总线)

Nacos 是 阿里的, 18年开源的, 功能比上面两个要强大,可以是注册中心,也可以是配置中心。

  • 界面:中文界面,符合国人习惯
  • 上手:极易,中文文档,案例,社区活跃

6,eureka注册中⼼实现原理 (这个应该不会问,问就说eureka的组成)

7,eureka和zookeeper都可以实现注册于发现的功能 ,说说两个的区别。

在注册中心上查询服务列表时,我们可以容忍返回慢,但不能容忍直接宕机。服务的注册功能对高可用要求非常高。zk不高可用,当master节点因为网络故障挂掉,剩余节点会重新选leader,选取leader的时间较长,30~120s,且在选取zk集群期间,集群是不可用的。这样会导致注册中心在选举期间瘫痪。

Eureka保证 用性,Eureka各个节点是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点仍然可以提供注册和查询服务。

8,ribbon的负载均衡

通过一定的负载均衡算法,把我们压下来的请求分摊到配置的服务器上。通过轮询的策略进行的。(通常是轮询的策略,但还有看那个性能好,用那个。设置负载均衡的权重)

RestTemplate配置类添加@LoadBalanced注解即可

3,ribbon继承rest实现负载均衡原理

4, zuul实现原理

5,⾃⼰实现配置中⼼思路

6,hystrix(黑 死 吹 可 死)熔断机制原理

12, appllo和springcloudconfig有什么区别

13,微服务监控⽤的是什么技术

-------远程调用----------------

17、httpcleint

18、Restfultemplete Spring提供的

19、Springcloud feign

设计模式:

ioc的装饰者模式,动态代理

spring bean的单例模式

工厂模式

原文地址:https://blog.csdn.net/Baldy_baby/article/details/117969410

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


开发过程中是不可避免地会出现各种异常情况的,例如网络连接异常、数据格式异常、空指针异常等等。异常的出现可能导致程序的运行出现问题,甚至直接导致程序崩溃。因此,在开发过程中,合理处理异常、避免异常产生、以及对异常进行有效的调试是非常重要的。 对于异常的处理,一般分为两种方式: 编程式异常处理:是指在代
说明:使用注解方式实现AOP切面。 什么是AOP? 面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 通俗描述:不通过修改源代码方式,在主干功能里面添加新功能。 AOP底层使用动态代理。 AOP术语 连接点
Spring MVC中的拦截器是一种可以在请求处理过程中对请求进行拦截和处理的机制。 拦截器可以用于执行一些公共的操作,例如日志记录、权限验证、数据转换等。在Spring MVC中,可以通过实现HandlerInterceptor接口来创建自定义的拦截器,并通过配置来指定拦截器的应用范围和顺序。 S
在 JavaWeb 中,共享域指的是在 Servlet 中存储数据,以便在同一 Web 应用程序的多个组件中进行共享和访问。常见的共享域有四种:ServletContext、HttpSession、HttpServletRequest、PageContext。 ServletContext 共享域:
文件上传 说明: 使用maven构建web工程。 使用Thymeleaf技术进行服务器页面渲染。 使用ResponseEntity实现下载文件的功能。 @Controller public class FileDownloadAndUpload { @GetMapping("/file/d
创建初始化类,替换web.xml 在Servlet3.0环境中,Web容器(Tomcat)会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来配置Servlet容器。 Spring提供了这个接口的实现,名为SpringS
在 Web 应用的三层架构中,确保在表述层(Presentation Layer)对数据进行检查和校验是非常重要的。正确的数据校验可以确保业务逻辑层(Business Logic Layer)基于有效和合法的数据进行处理,同时将错误的数据隔离在业务逻辑层之外。这有助于提高系统的健壮性、安全性和可维护
什么是事务? 事务(Transaction)是数据库操作最基本单元,逻辑上一组操作,要么都成功,要么都失败,如果操作之间有一个失败所有操作都失败 。 事务四个特性(ACID) 原子性 一组操作要么都成功,要么都失败。 一致性 一组数据从事务1合法状态转为事务2的另一种合法状态,就是一致。 隔离性 事
什么是JdbcTemplate? Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作。 准备工作 引入jdbcTemplate的相关依赖: 案例实操 创建jdbc.properties文件,配置数据库信息 jdbc.driver=com.mysql.cj.
SpringMVC1.MVC架构MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范是将业务逻辑、数据、显示分离的方法来写代码MVC主要作用是:降低了视图和业务逻辑之间的双向耦合MVC是一个架构模型,不是一种设计模式。1.model(模型)数据模型,提供要展示的数据,因此包
SpringMVC学习笔记1.SpringMVC应用1.1SpringMVC简介​SpringMVC全名叫SpringWebMVC,是⼀种基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于SpringFrameWork的后续产品。​MVC全名是ModelViewController,是模型(model)-视图(view)-控制器(co
11.1数据回显基本用法数据回显就是当用户数据提交失败时,自动填充好已经输入的数据。一般来说,如果使用Ajax来做数据提交,基本上是没有数据回显这个需求的,但是如果是通过表单做数据提交,那么数据回显就非常有必要了。11.1.1简单数据类型简单数据类型,实际上框架在这里没有
一、SpringMVC简介1、SpringMVC中重要组件DispatcherServlet:前端控制器,接收所有请求(如果配置/不包含jsp)HandlerMapping:解析请求格式的.判断希望要执行哪个具体的方法.HandlerAdapter:负责调用具体的方法.ViewResovler:视图解析器.解析结果,准备跳转到具体的物
1.它们主要负责的模块Spring主要应用于业务逻辑层。SpringMVC主要应用于表现层。MyBatis主要应用于持久层。2.它们的核心Spring有三大核心,分别是IOC(控制反转),DI(依赖注入)和AOP(面向切面编程)。SpringMVC的核心是DispatcherServlet(前端控制器)。MyBatis的核心是ORM(对
3.注解开发Springmvc1.使用注解开发要注意开启注解支持,2.注解简化了,处理映射器和处理适配器,只用去管视图解析器即可案例代码:1.web.xml,基本不变可以直接拿去用<!--调用DispatcherServlet--><servlet><servlet-name>springmvc</servlet-name>
拦截器概述SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。**过滤器与拦截器的区别:**拦截器是AOP思想的具体应用。过滤器servlet规范中的一部分,任何javaweb工程都可以使用
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:xsi="
学习内容:1、SSH&SSM2、Spring3、Struts2&SpringMVC4、Hibernate&MyBatis学习产出:1.SSH和SSM都是有Spring框架的,他们两个差不多。2.Spring分为四个模块,持久层,表示层,检测层,还有核心层,核心层分为2个关键核心功能。分别为,控制反转(IOC),依赖注入(DI),和面向切面编程
一、SpringMVC项目无法引入js,css的问题具体原因是css和js等被SpringMVC拦截了:解决方案:在spring-mvc.xml中配置<mvc:default-servlet-handler/><?xmlversion="1.0"encoding="UTF-8"?><beansxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
开发环境:Eclipse/MyEclipse、Tomcat8、Jdk1.8数据库:MySQL前端:JavaScript、jQuery、bootstrap4、particles.js后端:maven、SpringMVC、MyBatis、ajax、mysql读写分离、mybatis分页适用于:课程设计,毕业设计,学习等等系统介绍