1.数据结构有哪些?
- 线性结构非线性结构。
- 线性结构有:数组、队列、链表、栈。
- 非线性结构有:二维数组、多维数组、树结构、广义表、图结构。
- 线性结构:是一个有序数据元素的集合。
- 非线性结构:其逻辑特征是一个结点元素可能有多个直接前趋和多个直接后继。
2.设计模式
- 工厂模式:
- 实例化对象不用new,而是用工厂方法代替。
- 将选择实现类,创建对象统一管理控制。从而将调用者和我们的实现类解耦。
- 单例模式:
- 定义:一个类自己负责创建自己的对象,并且只被实例化一次,确保同时只有单个对象被创建。
- 单例模式的原则:确保同时只有一个对象存在,是线程安全的。不会被反射破坏。
- 饿汉模式:类在被初始化时实例就被创建了。
- 懒汉模式:当第一次被调用时才创建。
3.什么是服务注册中心?
- CAP模型:
- C:一致性
- A:可用性(不保证一致)
- P:分区容错性(当一个服务器断开,系统不能在规定时间内同步,这种情况就像被分区了。这个时候不能保证一致性和可用性同时存在)
- AP:当服务器没有在规定时间内达成数据一致,那么久使用各自的不同的数据返回。(这样就无法保证数据一致)
- CP:当服务器没有在规定时间内达成数据一致,那么就会切断那个没用同步的服务器,这样客户端获取的数据一定是一致的。(但会导致被断掉的服务器上的数据不可用)
- 服务注册中心:
- 提供服务地址的统一管理
- 提供服务动态感知的能力
- 注册中心保证高可用性,所以使用AP模式。
- 因为注册中心只提供一个服务地址供客户端调用,对服务地址就行管理,本身就有延迟,因此不用考虑数据一致性,所以使用AP模式
- 服务注册中心与各个微服务之间存在一个心跳机制,如果某个微服务与注册中心之间长时间都没法通讯,那么服务注册中心就会将它注销掉。
- 当微服务网络地址发生变化,ip地址或相关信息发生变化时,注册中心就会重新注册到注册表中
4.什么是Nacos?
官方:一个更易于构建云原生应用的动态服务发现、服务配置和管理的平台。
- 服务发现和服务健康监测
- 动态配置服务
- 动态DNS服务
- 服务及其元数据管理。
Nacos与Eureka的区别
①Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
②临时实例心跳不正常会被剔除,非临时实例则不会被剔除
③Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
④Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
5.什么是RabbitMQ?
同步和异步通讯:
微服务间通讯有同步和异步两种方式:
同步通讯:就像打电话,需要实时响应。
异步通讯:就像发邮件,不需要马上回复。
-
什么是MQ?
消息队列(Message Queue),是基础数据结构中 “先进先出” 的一种数据结构。
一般用来解决应用解耦、异步消息、流量削峰等问题,实现高性能、高可用、可伸缩和最终一致性架构。 -
MQ是怎么实现消息传递的?
生产者产生消息并把传输的数据(消息)放在队列中,用队列机制来实现消息传递。
消费者可以到指定的队列拉取消息,或者订阅相应的队列,由MQ服务端给其推送消息。 -
MQ的几个主要特性
解耦:一个业务需要多个模块共同实现,或一条消息有多个系统对应处理,只需要在主业务完成以后,发送一条MQ,其余模块消费MQ消息,即可实现业务,降低模块之间的耦合。
异步:主业务执行结束后,从属业务通过MQ异步处理,减少业务的响应时间,提高用户体验。
削峰:高并发情况下,业务异步处理,提供高峰期业务处理能力,避免系统瘫痪。 -
什么是RabbitMQ?
RabbitMQ是消息代理,它接受并转发消息。
RabbitMQ可以理解为一个邮箱,或者一个邮局,或者是一个邮递员,保证 “张三” 的信件最终传递给 “李四”。
RabbitMQ与上述所描述的邮局(邮箱、邮递员)的主要区别在于它不处理纸张,而是接受、存储和转发二进制数据块消息。
好处:
- 吞吐量提升:无需等待订阅者处理完成,响应更快速
- 故障隔离:服务没有直接调用,不存在级联失败问题
- 调用间没有阻塞,不会造成无效的资源占用
- 耦合度极低,每个服务都可以灵活插拔,可替换
- 流量削峰:不管发布事件的流量波动多大,都由Broker接收,订阅者可以按照自己的速度去处理事件
6.什么是熔断降级?
场景 雪崩:在一个请求链路中如果其中的某一个节点出现了异常,那么就会导致请求阻塞,因为有请求响应超时时间,请求会等到异常节点给其返回。加入此时大量请求访问该节点,就会导致大量的请求堆积,从而占用大量的资源,最终导致服务器崩溃。
解决方案:
熔断:识别一些异常的节点,提前把这个节点从整个链路中摘除掉。也就是如果有请求链路访问到了该节点,则直接失败或直接拒绝。熔断检测的机制就是用整个请求数去比较其中请求异常(或超过规定时间的)的比例,从而判断是否要将他摘除。
降级: 降级,就是当服务出现异常我们需要停掉某些服务,停掉服务后我们可以用固定的返回数据或页面表示该页面或该请求暂时不可用了。有熔断降级,就是当某个节点不可用了,将其熔断并给熔断的节点一个错误信息,告诉请求已经被熔断了。或主动降级:比如双十一支付功能疯狂被请求。导致服务器资源不够用了,这个时候我们就可用关闭评论功能点赞功能,来减少服务器压力,给服务器缓解压力,给支付功能让路。
7.微服务中Gateway网关的作用?
网关是整个微服务API请求的入口,负责拦截所有请求,分发到服务上去。可以实现日志拦截、权限控制、解决跨域问题、限流、熔断、负载均衡,隐藏服务端的ip,黑名单与白名单拦截、授权等