-
Ribbon 和 Feign 的区别
参考答案 启动类注解不同:Ribbon是@RibbonClient ;Feign是@EnableFeignClients。 服务指定的位置不同:Ribbon是在@RibbonClient注解上声明;Feign则是在定义抽象方法的接口中使用@FeignClient声明。 调用方式不同:Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。…...- 282
-
你知道哪些微服务技术栈
参考答案 维度:springcloud 服务开发:springboot spring springmvc 服务配置与管理:Netfix的Archaiusm,阿里的Diamond 服务注册与发现:Eureka,Zookeeper 服务调用:Rest RPC gRpc 服务熔断器:Hystrix 服务负载均衡:Ribbon Nginx 服务接口调用:Fegin 消 息 队 列:Kafka Rabbitm…...- 93
-
Eureka 和 Zookeeper 的区别是什么
参考答案 Eureka 和 Zookeeper 都能提供服务注册与发现的功能,Eureka和zookeeper的区别: 1. Zookeeper保证了CP(C:一致性,P:分区容错性) 当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的信息,但不能容忍直接down掉不可用。也就是说,服务注册功能对高可用性要求比较高,但Zookeeper会出现这样一种情况,当master节点因为…...- 133
-
Spring 如何解决循环依赖问题
参考答案 在Spring中,循环依赖问题主要有以下三种情况: 通过构造方法进行依赖注入时产生的循环依赖问题。 通过setter方法进行依赖注入且是在多例(原型)模式下产生的循环依赖问题。 通过setter方法进行依赖注入且是在单例模式下产生的循环依赖问题。 在Spring中,只有第3种方式的循环依赖问题被解决了,第1和第2种方式在遇到循环依赖问题时都会产生异常。 原因: 第1种构造方法注入的情况下…...- 129
-
JDK 动态代理和 CGLIB 动态代理的区别
参考答案 Spring AOP中的动态代理主要有两种方式:JDK 动态代理和 CGLIB 动态代理: JDK动态代理 只提供接口的代理,不支持类的代理。 核心InvocationHandler接口和Proxy类,InvocationHandler 通过invoke()方法反射来调用目标类中的代码,动态地将横切逻辑和业务编织在一起;接着,Proxy利用 InvocationHandler动态创建一个…...- 135
-
说一下Spring 的事务隔离,以及默认值
参考答案 Spring 有五大隔离级别,默认值为 ISOLATION_DEFAULT(使用数据库的设置),其他四个隔离级别和数据库的隔离级别一致: Spring的五大隔离级别: 1. ISOLATION_DEFAULT 用底层数据库的设置隔离级别,数据库设置什么,我就用什么。 2. ISOLATION_READ_UNCOMMITTED 未提交读。 最低隔离级别、事务未提交前,就可被其他事务读取…...- 54
-
Mybatis 都有哪些 Executor 执行器,它们之间的区别是什么
参考答案 Mybatis有三种基本的Executor执行器:SimpleExecutor、ReuseExecutor、BatchExecutor。 1. SimpleExecutor 每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。 2. ReuseExecutor 执行update或select,以sql作为key查找Stateme…...- 151
-
如何实现 MyBatis 与 Spring 的集成
参考答案 MyBatis 创建了 MyBatis-Spring 项目与 Spring 进行无缝整合,让 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 Spring 的 bean 中。 核心配置就是 dataSource、SqlSessionFactoryBean、MapperScannerConfigurer。 1. data…...- 115
-
Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id是否可以重复
参考答案 不同的Xml映射文件: 如果配置了namespace,id可以重复。 如果没有配置namespace,id不能重复。 原因: namespace+id是作为Map的key使用的,如果没有namespace,就剩下id,那么,id重复会导致数据互相覆盖。 有了namespace,自然id就可以重复,namespace不同,namespace+id自然也就不同。 备注: 在旧版本的Mybat…...- 126
-
Kafka 可以脱离 Zookeeper 单独使用吗,为什么
参考答案 Kafka 不能脱离 Zookeeper 单独使用,因为 Kafka 使用 Zookeeper 管理和协调 Kafka 的节点服务器。 Zookeeper 是一个分布式的协调组件,早期版本的 Kafka 用Zookeeper 做meta信息存储,consumer的消费状态,group的管理以及 offset的值。 考虑到 Zookeeper 本身的一些因素,以及整个架构较大概率存在单点问…...- 28
-
Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别
参考答案 Kafka、ActiveMQ、RabbitMQ、RocketMQ 的区别: 1. kafka 开发语言: Scala开发。 性能、吞吐量: 吞吐量所有MQ里最优秀,QPS十万级、性能毫秒级、支持集群部署。 功能: 功能单一。 缺点: 丢数据, 因为数据先写入磁盘缓冲区,未直接落盘。机器故障会造成数据丢失。 应用场景: 适当丢失数据没有关系、吞吐量要求高、不需要太多的高级功能的场景,比如…...- 55
-
如何保证 MQ 的高可用
参考答案 ActiveMQ: Master-Slave 部署方式主从热备,方式包括通过共享存储目录来实现(shared filesystem Master-Slave)、通过共享数据库来实现(shared database Master-Slave)、5.9版本后新特性使用 ZooKeeper 协调选择 master(Replicated LevelDB Store)。 Broker-Cluste…...- 83
-
MQ 有哪些使用场景
参考答案 MQ 的使用场景: 异步处理:用户注册后,发送注册邮件和注册短信。用户注册完成后,提交任务到 MQ,发送模块并行获取 MQ 中的任务。 系统解耦:比如用注册完成,再加一个发送微信通知。只需要新增发送微信消息模块,从 MQ 中读取任务,发送消息即可。无需改动注册模块的代码,这样注册模块与发送模块通过 MQ 解耦。 流量削峰:秒杀和抢购等场景经常使用 MQ 进行流量削峰。活动开始时流量暴增,…...- 67
-
MQ 的缺陷是什么
参考答案 系统可用性降低:以前只要担心系统的问题,现在还要考虑 MQ 挂掉的问题,MQ 挂掉,所关联的系统都会无法提供服务。 系统复杂性变高:要考虑消息丢失、消息重复消费等问题。 一致性问题:多个 MQ 消费系统,部分成功,部分失败,要考虑事务问题。 以上,是MQ面试题【MQ的缺陷是什么】的参考答案。 输出,是最好的学习方法。 欢迎在评论区留下你的问题、笔记或知识点补充~ ---end---...- 52
-
Dubbo 和 Spring Cloud 的区别
参考答案 定位:Dubbo 专注 RPC 和服务治理;Spirng Cloud 是一个微服务架构生态。 性能:Dubbo 强于 SpringCloud(主要是通信协议的影响)。 功能范围:Dubbo 诞生于面向服务架构时代,是一个分布式、高性能、透明化的 RPC 服务框架,提供服务自动注册、自动发现等高效服务治理方案;Spring Cloud 诞生于微服务架构时代,基于 Spring、Spring…...- 135
-
如何保证缓存与数据库双写时的数据一致性
参考答案 只要用缓存,就可能会涉及到缓存与数据库双存储双写。只要是双写,就一定会有数据一致性的问题。 如何解决数据一致性的问题呢?有两个方案供参考: 解决方案一:读请求和写请求串行化,串到一个内存队列里去。 这种方式可以保证一定不会出现不一致的情况。 串行化之后,会导致系统的吞吐量会大幅度的降低,用比正常情况下多几倍的机器去支撑线上的一个请求。 一般来说,如果系统不是严格要求缓存+数据库必须一致性…...- 61
-
分布式Redis是前期做,还是后期规模大了再做
参考答案 Redis是轻量的(单实例只使用1M内存),为防止以后扩容,最好的办法就是一开始就启动较多实例。 即便只有一台服务器,也可以一开始就让Redis以分布式的方式运行,使用分区,在同一台服务器上启动多个实例。 一开始就多设置几个Redis实例,例如32或者64个实例,对大多数用户来说,操作可能比较麻烦,但是长远来看是值得的。 如果前期就这样做,当后期数据不断增长,要用到更多的Redis服务器…...- 71
-
Redis如何实现分布式锁
参考答案 Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系。 Redis中可以使用SETNX命令实现分布式锁: 当且仅当 key 不存在,将 key 的值设为 value。 若给定的 key 已经存在,则 SETNX 不做任何动作。 SETNX (SET if Not eXists)如果不存在,则 SET。 返回值:设置成功,返回1;设…...- 73
-
什么是Redis持久化、Redis持久化机制,以及各自的优缺点
参考答案 一、Redis持久化 持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。 二、Redis 的持久化机制、以及其优缺点 Redis 提供两种持久化机制: RDB(默认) 和 AOF 机制。 1. RDB:是Redis DataBase缩写快照 RDB是Redis默认的持久化方式。按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb。通过配…...- 79
-
MySQL有哪些事务隔离级别
参考答案 MySQL的4个事务隔离级别: 1. READ-UNCOMMITTED(读取未提交) 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。 2. READ-COMMITTED(读取已提交) 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。 3. REPEATABLE-READ(可重复读) 对同一字段的多次读取结果都是一致的,…...- 129
-
MySQL的高可用方案有哪些
参考答案 本篇详解:MySQL的高可用方案选型,MySQL的5个常见高可用方案、以及其各自的优缺点。 一、 MySQL的高可用方案选型 在考虑MySQL数据库的高可用的架构时,主要参考如下几个方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断。 用作备份、只读副本等功能的非主节点的数据应该和主节点的数据实时或者最终保持…...- 147
-
MySQL分库分表怎么操作
参考答案 一、MySQL分库分表的原因 随着用户的增多,当数据量大到一定程度,仅一张表的数据可能就超过千万时,执行查询或修改等操作就比较耗时,这时就需要进行数据库切分的操作。 二、MySQL分库分表的方式 1. MyBatis实现分表最简单步骤 1)模拟用户表数据量已超过千万。 2)用户表原来的名字叫做user_tab,我们切分为user_tab_0和user_tab_1,这样就能把原来千万的数…...- 86
-
MySQL进行慢SQL优化的优化思路、解决办法
参考答案 MySQL进行慢SQL优化: 一、MySQL进行慢SQL优化的思路 通过慢查询日志去寻找哪些 SQL 执行效率低。 使用 explain 获取低效率 SQL 的执行计划。 结合 SQL 与执行计划,进行分析与优化。 二、引起 SQL 查询很慢的原因,以及解决办法 1. 没有索引 解决办法: 根据 where 和 order by 使用比较频繁的字段创建索引,提高查询效率。 索引不宜过…...- 124
-
Mybatis 的一级缓存、二级缓存是什么,以及工作模式
参考答案 1. 一级缓存的概念、工作模式 1.1 一级缓存的概念 基于 PerpetualCache 的 HashMap 本地缓存。 其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空,默认打开一级缓存。 1.2 一级缓存的工作模式 Mybatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存,…...- 27