面试题整理

ElasticSearch
elasticsearch了解多少,说说你们公司es的集群架构,索引数据大小,分片有多少,以及一些
调优手段 

1. elasticsearch 索引数据多了怎么办,如何调优,部署
   >1. 创建索引时可以考虑基于模板,按时间创建索引,避免单个索引过大,同时也可以让搜索更加效率
   >2. 存储数据做冷热分离,冷数据定期force_merge,节约空间
   >3. 如果还是出现压力过大,可以动态扩展结点

2. elasticsearch是如何实现master选举的
    对所有可以成为master的节点的nodeId进行排序,每个节点选举第一个节点成为master,当某个节点得票超过一半以上(防止脑裂),并且该节点自己也选举自己,那么该节点成为master,否则重新选举

3. 详细描述一下Elasticsearch索引文档的过程。
    >1. 客户端向集群发送请求,协调节点接到请求后通过文档id计算出文档所属分片,路由到对应节点
    >2. 写入节点接到请求后执行写入操作。首先将数据写入到内存中,然后定时(默认一秒)写入到文件系统缓存中。
          同时记录transLog。然后在flush时,内存中的缓冲将被清掉,内容被写入一个新的段并创建一个新的提交节点,然后提交到磁盘
          旧的transLog也将被删掉。flush的出发机制是定时触发(默认30分钟)或者transLog变得太大(默认512M)
    >3. 主分片写入成功后将请求转发到副本分片,等待返回结果,成功后向协调节点报告成功,协调节点再向客户端报告成功

4. 详细描述一下Elasticsearch搜索的过程
    >1. es查询需要两个阶段,query和fetch
    >2. 客户端请求发送到协调节点,然后会被广播到索引的每一个分片(主分片或副本分片),每个分片会在本地执行查询然后生成一个
           from+size大小的优先队列,包含文档Id和_score,再返回给协调节点,协调节点负责做全局排序
    >3. fetch阶段协调节点标识出所有需要被拉取的文档,发送请求到所有相关的分片,分片取出数据返回给协调节点,协调节点组装好后返回给客户端

Redis
1. 常见的缓存策略有哪些,如何做到缓存(比如redis)与DB里的数据一致性,你们项目中用到了什么缓存系统,如何设计的。
    >1. 常见的缓存策略   a. 先读缓存,命中直接返回,未命中读数据库并更新缓存。写数据则写数据库,同时缓存设置失效。
                                     b. 缓存为主,读写都走缓存,同步更新数据库作为缓存的备份
                                     c. 与第二种类似,只是异步更新数据库
    >2. 一致性  设置缓存超时时间  (延迟双删,即删缓存-写库-休眠-删缓存,避免了数据库还没更新好,另外的线程又读取了旧数据写到缓存中)
    >3. 项目中用到了redis,常规用法。还有caffeine,缓存接口返回结果

2. 如何防止缓存击穿和雪崩
    热点数据设置永久有效防止缓存击穿,在过期时间加上一个较小的随机数来防止雪崩。

3. Redis的数据结构都有哪些
    String,list,set,map,sorted set

4. redis的list结构相关的操作
    lpush,rpush,linsert,   lpop,rpop,  lset,  llen,lindex,lrange,  blpush,blpop

5. redis的持久化的机制,aof和rdb的区别
    aof记录操作,rdb快照。rdb容易丢数据,aof有日志文件过大的问题,

6. redis集群有哪些玩法,各自优缺点,场景
    主从,哨兵(实现主库故障时自动将从库切换成主库),集群。主从优点:自动同步,读写分离。 缺点:不具备自动容错和恢复功能
有节点宕机时部分请求直接失败。难以在线扩容。哨兵支持自动切换,可用性更高。集群分布式存储性能更高,集群也使用主从模式保证高可用。

7.  redis的集群怎么同步的数据的
    >1. 从服务器向主服务器发送sync命令,主服务器后台执行bgsave命令生成rdb文件,并使用一个缓冲区记录从现在开始的所有写命令。
    >2. 执行完毕后将rdb文件发送给从服务器,从服务器接受并载入,更新自身数据库。
    >3. 主服务器将缓冲区的写命令发送给从服务器,从服务器执行这些写命令


数据库   
2. 高并发下,如何做到安全的修改同一行数据
    >1. 悲观锁。响应慢,可连接数用光,系统异常
    >2. 队列缓存请求。变多线程为单线程了,队列撑爆,系统异常。如果队列足够大也有响应慢的问题
    >3. 乐观锁。增大cpu开销

3. SQL优化的一般步骤是什么,怎么看执行计划,如何理解其中各个字段的含义
    >1. 查看慢查询日志确认需要优化的sql。show variables like 'slow_query%'确认慢查询开启和日志文件地址。查看日志文件
       然后通过 explain + sql语句  查看执行计划。再根据执行计划优化sql
    >2. 关注的字段 type,从好到坏依次是  system (表只有一行的const)> const(使用索引一次找到) > eq_ref(唯一索引扫描) > ref (非唯一索引扫描)> fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range(检索给定范围的行,使用一个索引来选择行) > index(全索引扫描) > ALL(全表扫描)
    >3. 用到的索引。rows可能扫描的行数

4. MYsql的索引原理,索引的类型有哪些,如何创建合理的索引,索引如何优化
    >1. mysql索引数据结构是B+tree
    >2. 索引类型:普通索引,唯一索引,主键索引,联合索引,全文索引
    >3. 经常用作查询条件,排序,分组的字段
    >4. 索引优化:非空,尽量不要有大量相同的值,索引不要太大

5. select for update 是什么含义,会锁表还是锁行或是其他
    为select的记录加上排他锁。使用索引则是行锁,不使用索引则是表锁。

6. 数据库的ACID是什么
    原子性,一致性,隔离性,持久性

7. 某个表有近千万数据,CRUD比较慢,如何优化
    优化数据结构,优化sql,增加缓存减少对数据库的访问,读写分离,分库分表,优化硬件

8. mysql中in 和exists 区别
   >1. in是先做子查询,然后将内表与外表做笛卡尔积,再按条件筛选结果
   >2. exist是先做主查询,loop循环去判断条件是否成立,成立则放入结果集中

9. 数据库自增主键可能的问题
   >1. 不能做分库分表
   >2. 表锁锁住自增计数器,导致有大量数据插入时阻塞

-------------------------------------

1. springboot 的启动过程
    1. new springApplication。初始化模块,配置source,配置是否为web应用,创建初始化构造器,创建应用监听器,配置main方法所在的类
    2. run springApplication。应用启动监听器,配置环境变量,创建应用上下文,更新应用上下文(准备bean工厂,通过工厂生成bean)
2. hashMap和hashSet的区别与联系
    从源码来看hashSet其实就是维护的一个value值为null的hashMap
   
3. redis map怎么取数据
    hget,hset,hmget,hgetall
    hget myhash name
4. 写过什么复杂的sql
    select
     sum( CASE WHEN video_score = 5  THEN 1 ELSE 0 END ) goodVideoScore,

5. RateLimit达到限速后是阻塞还是抛异常
    一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理
    rateLimiter.tryAcquire或者rateLimiter.acquire获取令牌可以指定等待时间,获取不到则返回false,根据返回值进行后续处理
    if(rateLimiter.tryAcquire){
      //todo
      }else{
      return;
      }
6. kafka的ack
    ack=0  producer不等broker确认同步完成,继续发送
    ack=1  producer等待leader确认同步完成,再发送下一条
    ack=-1 等flower确认

7. es的segment的commit在什么时候执行
    flush的时候
    .del 文件在段合并时文件中被标记的文档不会被写入新段
8. es删除,更新文档的过程
    删除和更新也都是写操作。es文档不可变,删除写.del文件,更新则是先将旧版本的文档删除,再索引新版本的文档。
    磁盘上的每个段都有一个相应的.del 文件
9. es添加节点的过程。数据迁移是手动触发还是自动触发

10. 二分查找的时间复杂度
    O( log2N)
11. corepoolsize的大小设置
      计算密集型:cpu核心数加一
      io密集型:cpu核心数*2+1

12. 第三方接口的响应时间对我多线程的corepoolsize有没有影响

13. hashmap的原理
    数组+链表+红黑树
14. spring单例bean的好处
      1. 只再初始化时实例化一次,提高效率
      2. 减少内存开销
15.  io模型,多路复用

16.第三方响应需要五秒,要发1000个请求,cpu核心只有1,怎么调大qps

17. 千万级表近三分之一的数据需要更新,怎么设计
      1. 先将需要更新的数据查出来,然后insert into on duplicate key update
      2. create table..as select .. from old_table nologging
      3. 视图
18. eureka挂了30秒,对程序调用有影响吗
      没有影响,本地会缓存注册表,默认30秒更新
19. hashset怎么判断是否是同一个元素
      先通过hashCode方法比较(内存地址映射),再通过equels方法比较(内存地址比较,String类重写过该方法比较的是字符本身)。
20. 项目中多线程是怎么用的
      继承Callable类,重写call方法。再使用ThreadPoolExcuter.involkAll(List<Callable>)
21. es内存聊一下

22. fulume从磁盘读数据时怎么避免死锁

23. @EnableDiscoveryClient与@EnableEurekaClient注解区别
     @EnableDiscoveryClient是一个spring-cloud-commons 注解,支持eureka,consul,zk。
     @EnableEurekaClient 只适用于Eureka作为注册中心
24. dockerFile的cmd命令和run命令区别
      run 是在 docker build 构建镜像时, 会执行的命令
      cmd 是在 docker run 启动容器时, 会执行的命令
dockerFile常见命令: From基础镜像,copy从本地拷贝资源到镜像,add拷贝资源到镜像支持大文件解压缩支持远程拷贝,run,cmd
EXPOSE指定监听端口,LABEL为镜像增添标签,ENV设置环境变量,ARG构建时使用的变量,ENTRYPOINT指定容器启动程序及参数
VOLUME挂载数据卷,WORKDIR设置工作目录,MAINTAINER指令设置生成镜像的作者,

25. es的倒排索引存在什么位置,内存?磁盘存吗
    磁盘必然是存了的,否则怎么持久化
26. kafka消费慢的处理
      增加partition的数量。批量消费。提高消费者处理能力。

27. spring自动装配过程
      @SpringBootApplication -> @SpringBootConfiguration -> @EnableAutoConfiguration -> @Import
      获取注册到ioc容器的类全路径名称。其数据来源是扫描META-INF/spring.factories 文件中的配置信息,会优先读取application.properties,没有才使用默认配置

28. mysql回表
    回表就是只通过一个索引可以查到想要的记录id,但没有全部需要的字段,需要再回表查询
    应该尽量避免回表,通过联合索引达到索引覆盖
29. mysql查询除了索引还能怎么优化,sql语句本身呢?

30. currentHashmap的数据结构,在1.8之后怎么优化分段锁的
      与hashmap数据结构类似,只是给每一段数据配置了一把锁。
      通过乐观锁来优化分段锁的
31. 线上问题有处理过吗?流程是怎样的,有没有查看过jvm堆栈信息?
    jstat查看gc信息和内存信息。jstack查看线程快照(方法堆栈的集合)和锁信息,可以查看进程在等待什么资源
    jmap生成堆栈快照到文本文件,后续下载进行分析
32. springMVC接收到一个请求到返回的过程

33. aop切面具体写法
    切面类使用@Aspect和@Component注解修饰
    定义@Pointcut
    通知,@Around或者@Befor或者@After,在这个方法里编写想要添加的统一处理
34. 说一说springboot常用注解
      @SpringBootApplication

35. new String("abc")的过程
    编译时期在常量池中放入一个”abc“,执行时在堆中new一个String对象,并把str中的value指向常量池中的"abc"
36. mysql为什么使用B+树做索引
    首先树结构的搜索比线性搜索要快,而mysql需要存储的数据量是很多的,普通的二叉树会有层级过多的问题,导致搜索很慢
    b树在一个节点存放比较大范围的数据减少了层级,b+树的叶子节点上的数据按顺序存放,在范围搜索上有优势
37. 动态代理和静态代理的区别

38. oom内存溢出有哪些情况,怎么处理?怎么看堆栈信息?
      堆空间设置太小,太多集合类未清空,死循环里面new资源
      jconsul,jstack
39. mybatis写一个dao接口的原理是什么?有自己写过动态代理的模式吗
      动态代理。写过,spi方式加载词典
40. es部署,运维和客户端代码编写全交给你一个人,能搞得定吗

41. 百亿级数据量有多大,需要多少个es节点,需要怎样的服务器配置
    6-8个节点,服务器需要ssd的硬盘
42. hashMap为什么选用红黑树结构
      相对于平衡二叉树,减少了左旋右旋,提高了插入数据的性能

43. 说说kafka的offset,如何提交偏移量
      代表partition中消息的顺序id。消费者消费消息后会往 __consumer_offsets 的主题中发送 消息

44. java文件编译之后是可执行文件吗
      此时是class文件,不可执行

45. kafka的结构,有哪些组件
    producer,broker,comsumer,zookeeper,topic,partition
46. kafka吞吐量高的原因
      >1. 顺序读写
      >2. 零拷贝
      >3. 直接内存访问
      >4. 分区,每个partition又分为多段segment,所以每次操作都是针对一小部分做操作,很轻便
      >5. 批量发送
      >6. 优化jvm gc

47. 全量数据同步,利用主键索引分页,如果此时数据发生了增删改怎么办?
      同步期间的数据改动做好缓存,等同步结束后再对新的数据库操作一次

48. hashMap为什么线程不安全?多线程中会出现什么问题?
    hashMap的线程不安全体现在会造成死循环(jdk1.7扩容时),数据丢失(jdk1.7扩容时),数据覆盖(jdk1.8并发put)的问题
    1.7使用头插法,1.8使用尾插法
49. synchronized和Lock有什么区别?哪一个是可中断的锁?
    >1. sychronized是java关键字,Lock是一个类
    >2. sychronized获取锁的线程执行完同步代码块或者发生异常时释放锁。lock则必须要显示的释放锁
    >3. sychronized无法判断锁的状态,lock可以
    >4. sychronized不可中断,非公平,可重入。lock可中断,可公平,可重入。
    >5. sychronized悲观锁,lock乐观锁,且分为读锁和写锁,性能更好
    
50. hashMap的扩容机制?
     hashMap数据结构是数组+链表(红黑树)
     初始化默认数组大小为16
     当 数组元素>数组大小*加载因子(默认0.75) 时扩大一倍
     在没有红黑树的前提下,链表长度超过8,数组扩大一倍。数组长度达到64且链表长度达到8时链表转化为红黑树。

51. redis持久化的两种方式各自适合哪种业务场景?
     需要体积小,恢复快,允许数据可能丢失的选rdb
     尽量保证不丢数据,对占硬盘大小,恢复速度宽容的选aof

52. 类加载机制,双亲委派模型
      BootstrapClassLoader 启动类加载器,用于加载核心类库,如jre自带的包
      ExtentionClassLoader 扩展类加载器,用于加载第三方的jar比如我们添加到lib包下的jar
      AppClassLoader 应用类加载器,用于加载我们的应用打成的jar,比如我们编写的springboot项目
      除此之外还可以有一个自定义类加载器。
      双亲委派模型是指当一个类加载器接收到加载请求时,首先交给父级类加载器进行处理,父级类加载器加载不到则交由子类加载器加载
     其作用有1. 防止重复加载一个.class  2. 防止核心.class被篡改,保证了class执行安全

53. String类为什么不能被继承
      被final修饰

      
mysql也可以做分片的分布式集群,需要分片中间件来做路由(相当于自己实现分片),略复杂,也就是分库分表
mysql自身支持主从模式


54. 线程方法  yied,jion等
    wait,sleep,notify,notifyAll,jion,yield,interrupt,
55. 分布式事务,带有事务的消息队列
    强一致性:二阶段提交(引入协调者来管理各本地资源的提交和回滚,二阶段分为准备和提交),三阶段提交(比两阶段多了预提交和超时时间),
    tcc(思想与两阶段提交类似,但不局限于数据库层面,而是业务层的(包括发送短信等))
    最大努力通知(最终一致性):本地消息表(记录各本地事务是否成功,不成功则重试),rokectMQ,
    
56. 怎么实现动态代理
    代理类构造器继承InvocationHandler类,实现invoke(Object proxy,Method method, Args args)方法,在该方法中做增强,并通过Method.invoke方法调用目标方法。
    代理类通过Proxy.newProxyInstance(ClassLoader,被代理类.interface,InvocationHander)
57. 编译的过程
    预编译,编译,汇编,链接
58. 反射,invoke方法参数,给一个Object如何获取他的属性?
    Class.forName("");对象.getClass();类名.class
    
    Class c = Class.forName("");
    Object obj = c.newInstance();
    c.getName();
    Field[] field = c.getFields();
    Method[] method = c.getDeclaredMethods();
    c.getSuperclass
    public Field getDeclaredField(String name)
    field.getName();field.getType;field.get();field.set();field.setAccessible()
59. spring事务的传播机制?

60. 注解是怎么生效的?

61. ThreadLocal的原理?
    Thread类有一个成员变量  ThreadLocal.ThreadLocalMap threadLocals;
    ThreadLocal的set(T value)方法{
      Thread thread = Thread.currentThread();
      ThreadLocalMap map = thread.threadLocals;
      if(map != null){
        map.set(this,value);
      }else{
        thread.threadLocals = new ThreadLocalMap(this,value);
      }
    }
    ThreadLocal放入对象,使用完后如果不清除,会有内存泄露的风险
62. 软引用,强引用?
    强引用最常用,new对象就是,强引用不会被回收,想要被回收需要将对象置为null
    软引用在内存不足时会被回收,SoftReference类(java.lang.ref包下得一个类)引用得对象则是软引用
    
63. spring bean 生命周期
    spring启动-》扫描声明的bean-》构建beanDefinition ->bean初始化 -》bean实例化 -》缓存到ioc容器,使用 -》容器关闭,bean销毁
    初始化的过程:填充属性 -> 处理aware:setBeanName,setBeanFactory,setApplicationContext -> 调用BeanPostProcess的init方法
    
64. kafka消费完之后broker中的数据是否还在?如何清除?
    只与这两个配置有关:
    log.retention.hours=48 #数据最多保存48小时
    log.retention.bytes=1073741824 #数据最多1G
65. 描述一下tcp三次握手
    1. 客户端给服务端发送syn,希望建立连接,并初始化序列号。2.服务端接收到之后,发送syn+ack,序列号+1放入确认应答号。3.客户端发送ack,确认应答号+1,进入连接状态,服务端收到后也进入连接状态。
    三次握手主要是为了防止已经失效的连接请求报文突然又传送到了而产生错误。
    如果是两次握手,客户端报文在网络中拥堵了,就会重复发送,服务器接受到报文就建立连接并发送数据,客户端发现是历史连接再去终止连接时,服务器资源已经被浪费了。
66. java的垃圾回收机制是什么?结合内存模型讲清楚
    
67. 最近在学习什么技术框架或者思想
    dubbo,SOA
    
68. springcloud与k8s比较,k8s也可以做熔断,服务发现等,和springcloud区别是什么
    springcloud从应用框架层面解决微服务架构问题,仅限于java语言。运行微服务需要构建环境,比如要先启动eureka,开发人员还需要考虑自动化部署,调度,资源管理
    k8s从平台层面解决微服务架构整个流程。不限语言。它提供的服务(例如配置管理,服务发现,负载平衡,指标收集和日志聚合)可以通过多种语言来使用。自动化容器化应用程序部署,管理应用程序生命周期,自动扩展,自我修复
    springcloud也有一些k8s没有的好处,例如,配置作为环境变量或已挂载的文件系统传递给应用程序。它没有Spring Cloud Config提供的高级配置更新功能
    Spring Cloud在JVM内部非常强大,而Kubernetes在管理这些JVM方面非常强大
69. 索引abc,  where  a=3,b>2,c=1.用到几个索引
    面试官答案:只用到a
    个人答案:能用到a,b.  a的值确定的情况下b是有序的,b在范围区间没有确定值,这个区间里c无序
70. redis线上用的rdb还是aof

71. apollo动态配置是怎么做的
    @Value注解会自动刷新配置
    复杂对象使用@ApolloConfigChangeListener
72. mysql有哪些索引

73. hashMap插入null会放在哪里
    数组的第一个元素
    
74. springboot实现约定大于配置的原理
    就是自动装配的原理
    
75. 线程调度有做过吗
    countDwonLatch保证主线程在子线程执行完后执行
    A线程获取B线程的实例,为null则休眠等待再重新获取
    
76. 线程池原理
    线程池帮我们管理线程的生命周期,避免线程的频繁创建和销毁,减少额外的开销
    提高响应速度,任务到来时不需要等待线程创建
    excuterService内部有一个volate修饰的字段维护线程池运行状态,提交任务、创建线程时都会判断这个字段。还有一个线程数量字段。
    创建线程池没有实际创建线程 -》提交任务,核心线程创建 -》超过核心线程数,缓存在队列中 -》队列满了,创建线程,不超过最大线程数
    -》拒绝策略 -》非核心线程直行完毕,去队列取任务,没有任务则休眠keepAliveTime,休眠完还没有任务,就返回null了,然后就被销毁了
    -》线程数小于核心线程数且没有任务,会阻塞等待
    
77. 有遇到过彪到很高的情况吗
    cpu负载很高,流量却不是很大,大概率是定时任务频繁执行,死循环,死锁等状态让线程一直在执行
    cpu负载高排查流程:
       1. top指令查看占用cpu高的进程pid
       2. top -Hp pid 找出长时间占用cpu的线程tid
       3. printf "%x\n" tid  将线程id转为16进制
       4. jstack pid | grep 16进制tid -A 30   或者使用jmap将堆栈信息保存到文件,再从文件中查找 16进制tid。查看当前线程状态及执行的代码
       5. 针对定位到的代码块做分析,优化
       
78. redis做分布式锁有什么要注意的?
    锁必须有超时时间,不能让一个线程长期占有一个锁而导致死锁
    
79. redis的单线程模型,是部分单线程还是全部单线程?
    部分
    文件事件分派器是单线程的。其实就是数据处理过程是单线程的
    客户端可以并行的连接redis,发送命令。redis内部I/O多路复用程序监听消息,然后压入同一个队列。
    然后通过这个队列,以有序、同步、每次一个套接字的方式向文件事件分派器传送套接字,当上一个套接字的事件处理完成后,才会传送下一个套接字。
80. redis实现分布式锁
    setnx命令:表示SET if Not eXists
    setnx lock 1 ex 10      名称为lock的key如果不存在,则将他的值设置为1。这个key10秒钟过期
    多个进程同时执行,只有一个返回结果为1,该进程加锁成功,业务执行完成后删除此key释放锁。
    为避免没执行完业务释放锁服务就宕机了,必须设置过期时间。又为避免过期时间过短(业务没执行完就释放了锁)或过长(影响性能),可以在快过期时查询业务是否执行完毕,未执行完则延长过期时间
    
    
81. zk实现分布式锁
    竞争加锁的进程全部在同一节点下创建临时子节点。子节点序号最小的获得锁。没有获得锁的监听前一个子节点
    当客户端与服务器断联后,临时子节点会被删除。监听到前一个子节点删除后,当前节点自动获得锁
    
82.redis与zk分布式锁对比
   redis性能更高,获取锁失败后需要轮询取获取锁
   zk性能不如redis。不用设置过期时间。时间监听机制,枷锁失败后,可以等待锁释放
   
83. 线程有哪几个状态,sleep过后进入哪个状态?
    创建、就绪、运行、阻塞、死亡.
    sleep完会进入就绪状态
84. sychroniz锁升级了解吗
    对象刚new出来 无锁 -》 第一个线程访问同步代码块,加上偏向锁,即在对象头记录threadID.,之后同一个线程继续访问,无需重复加锁过程,比较当前线程id与对象头是否一致即可。
    偏向锁不会主动释放,下一个线程访问时,先查看上一个线程是否存活,没有存活,则将对象重置为无锁。    -》有线程竞争锁时升级为轻量级锁,没有竞争到锁的线程进入自旋,等待锁的释放。
    竞争锁的线程不多,持有锁的时间也不长时,如果直接阻塞没有竞争到锁的线程,cpu需要从用户态转到内核态,开销过大。 -》自旋达到一定次数后升级为重量级锁,没有竞争到锁的线程阻塞,避免cpu空转
    
85. consul做注册中心,服务间调用的负载均衡是怎么做的?
    服务消费者自己做负载均衡,可以集成ribbon
    
86. mysql的b+树插入数据是怎么做平衡的?
    页节点未满,直接插入叶节点
    页节点已满,其兄弟节点未满,旋转
    页节点已满,其兄弟节点已满,索引节点未满,页节点拆分
    页节点已满,其兄弟节点已满,索引节点已满,索引节点炒粉,页节点拆分
    
87. hystrix原理
    断路器模式:结合feign使用,调用失败,执行fallback
    后备模式:服务提供方的方法提供一个备用方法
    舱壁模式:避免单个服务耗尽资源(线程池,连接池)
    正常情况下断路器关闭状态,当调用失败率达到50%(默认),断路器打开,执行fallback快速失败,避免上游服务因资源消耗过多而不可用。一段时间后进入半开状态,允许一部分请求通过,
    请求正常返回,则断路器关闭。

88. docker运行的服务如何连接数据库
    容器之间互相连接:在同一台宿主机的docker服务(猜测同一docker集群应该也可以),不指定网络情况下,所有容器默认挂在docker0网桥上,
    是可以互通的。都挂在自己创建的同一网络下也一样。
    docker容器访问外网是可以的,通过将ip转换为宿主机的ip访问外界
    外界访问docker容器,通过端口映射。
    
89. 如何解决死锁?
    mysql有死锁检测机制,一旦发现死锁,自动回滚复杂度更小的事务,即已经执行的sql条数更少事务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值