小米和京东的4道关于Dubbo、Zookeeper等的面试题

1. 列举至少3个Mysql的具体优化?

(1)适当的对表里的字段建立索引

索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多的速度检索特定的行。但是索引不能随便建立,具体建立索引的地方,建议如下:

1)查询语句当中包含有MAX(),MIN()和ORDERBY这些命令的时候。

2)用于JOIN,WHERE判断和ORDERBY排序的字段上。

3)尽量不要对数据库中某个含有大量重复的值的字段建立索引,比如如果这个字段是性别的枚举值。

(2)使用联合(UNION)来代替手动创建的临时表

union查询,它可以把需要使用临时表的两条或更多的select查询合并的一个查询中。在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。

(3)针对select查询语句进行优化

1)在建有索引的字段上尽量不要使用函数进行操作

例如:在一个DATE类型的字段上使用week()函数时,将会使索引不能发挥应有的作用。

2)尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

2. 分布式协调zookeeper是如何进行领导选举的?

(1)选举原理图:

《小米和京东的4道关于Dubbo、Zookeeper等的面试题》

(2)具体解释如下:

1)每个Server启动以后都询问其它的Server它要投票给谁。

2)对于其他server的询问,server每次根据自己的状态都回复自己推荐的leader的id和上一次处理事务的zxid(系统启动时每个server都会推荐自己)

3)收到所有Server回复以后,就计算出zxid最大的哪个Server,并将这个Server相关信息设置成下一次要投票的Server。

4)计算这过程中获得票数最多的的sever为获胜者,如果获胜者的票数超过半数,则该server被选为leader。否则,继续这个过程,直到leader被选举出来。

3. 简述Tcp协议中的CLOSE_WAIT的发生过程?引发的问题和解决方法

(1)该状态发生的阶段,先看整体流程图

《小米和京东的4道关于Dubbo、Zookeeper等的面试题》

具体解释如下:

客户端主动关闭时,发出FIN包,收到服务器的ACK,客户端停留在FIN_WAIT2状态。而服务端收到FIN,发出ACK后,停留在COLSE_WAIT状态。

(2)Close_Wait引发的问题

Close_Wait会占用一个连接,网络可用连接小。数量过多,可能会引起网络性能下降,并占用系统非换页内存。 甚至会耗尽连接池的网络连接数,导致无法建立网络连接。

(3)解决方法:

从上面的图可以看出来,如果一直保持在CLOSE_WAIT状态,那么只有一种情况,就是在对方关闭连接之后服务器程序自己没有进一步发出FIN信号,一般原因都是TCP连接没有调用关闭方法。一定程度上,可以使用TCP的KeepAlive功能,让操作系统替我们自动清理掉CLOSE_WAIT连接。

4. Dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么?

《小米和京东的4道关于Dubbo、Zookeeper等的面试题》

    原文作者:言射手
    原文地址: https://www.jianshu.com/p/3142895a6199
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞