面试回忆
请求rpc接口没反应如何处理? 看日志请求路径,有没有请求到实例上,继续追问请求到实例上了但是没有收到响应
k8s的东西
linux文件系统 .iso文件是什么
linux常用命令
熟悉那个MQ 为啥要RocketMQ RocketMQ有topic partition概念嘛
单例模式 及其解释
轮转链表
阻塞队列随机数生产线程、消费线程打印。题目上写了用信号量限制队列里面只有5个,用两个条件变量限制当队列没满才可以生产,当队列没空才可以消费。。条件变量Condition不会。写了挺久吧,面试官说他不看了没加lock肯定不对。。面试官最后说也可以用sychronized不用非得按题目
如何保证多台机子上本地缓存的一致性
如果本地机子只有1G,装不下,怎么办。其实他是想问分片 我猜测缓存淘汰策略 冷热分离
分片后请求来了如何路由,我:简单就写死啊 key1-key8 对准节点1-8
接上述:新加一个机子怎么办,我说向分库分表,一般都是预估好的。被反驳:咋可能,互联网都是看QPS高峰期加机子的
后面提示才知道他想问一致性hash,其实我本身就想继续说 一致性hash可以解决这种突然加节点迁移问题【不应该说废话hh】
rpc服务发现注册机制
zookeeper 故障了怎么办?我说zk都是高可用部署有副本的 后面追问:引出客户端本地缓存了provider的实例ip等元信息
追问:这些缓存到堆内还是?不知道
zookeeper节点类型有哪些?不知道
Dubbo负载均衡默认是那种?不知道【反思:就算不知道,也要说自己知道的几种策略的】
redis缓存淘汰策略有几种
一致性哈希
一致性哈希能在分布式哈希表(DHT)中,当节点增加或删除时,只引起少量数据迁移,而不需要重新映射所有数据。
一致性哈希的原理:
环形哈希空间:将哈希值组织成一个虚拟的环,整个哈希空间是0到2^32-1,并首尾相连。
将节点(机器)通过哈希函数映射到环上(通常使用节点的IP或唯一标识作为输入)。
将数据键通过同样的哈希函数映射到环上,然后从数据映射的位置开始顺时针查找,第一个遇到的节点就是该数据应该存储的节点。增加或删除节点只影响环上相邻的节点,减少了数据迁移量。
一致性哈希可能存在负载不均的问题,因为节点在环上的分布可能不均匀。为了解决这个问题,引入了虚拟节点的概念。
虚拟节点(Virtual Nodes):
每个物理节点在环上对应多个虚拟节点,虚拟节点是环上的点,每个物理节点由多个虚拟节点代表。这样,可以将环上的点分布得更均匀,从而使得数据分布更均匀。
例如,一个物理节点A可以对应多个虚拟节点A1、A2、A3...,它们都指向A。同样,节点B也有B1、B2、B3...。这样,环上虚拟节点越多,分布越均匀。
当节点增加时,同样为新增节点分配多个虚拟节点,这些虚拟节点会散列在环上,从而从多个原有节点那里接管一部分数据,使得负载相对均衡。
1. RPC服务发现注册机制
服务发现注册机制是分布式服务治理的核心。通常包含两个角色:服务提供者(Provider)和服务消费者(Consumer)。基本流程:
- 服务注册:Provider启动时,向注册中心注册自己的元数据(如IP、端口、服务名等)。
- 服务发现:Consumer启动时,从注册中心获取Provider的列表,并缓存到本地。后续调用时,从本地缓存中选择一个Provider进行调用。
- 健康检查:注册中心会定期检查Provider的健康状态,如果发现Provider不可用,则将其从服务列表中移除,并通知Consumer更新本地缓存。
如果整个Zookeeper集群都不可用,那么:
- 对于服务注册:Provider无法注册,但通常Provider会尝试重连。
- 对于服务发现:Consumer无法从注册中心获取最新的服务列表,但是Consumer本地会缓存之前获取的服务列表。这样,即使注册中心挂掉,Consumer仍然可以使用本地缓存的服务列表进行调用,从而保证系统的可用性。
缓存位置:这些缓存通常存储在堆内存中。因为服务列表数据量不大,并且需要频繁访问,放在堆内可以快速读取。当然,也有可能会持久化到本地文件作为备份,以便在应用重启后还能使用。
3. Zookeeper节点类型有哪些?
Zookeeper中有两种节点类型:
- 持久节点(Persistent):节点创建后,除非主动删除,否则一直存在。
- 临时节点(Ephemeral):节点创建后,如果客户端会话失效(如客户端断开连接),则节点自动删除。临时节点常用于服务注册,当Provider与Zookeeper断开连接时,注册信息自动删除,从而实现服务下线。
此外,每种节点还可以有顺序(Sequential)的特性,即创建节点时Zookeeper会在节点名后加上一个自增的数字序列。因此,组合起来有四种节点类型:
- 持久节点(Persistent)
- 持久顺序节点(Persistent Sequential)
- 临时节点(Ephemeral)
- 临时顺序节点(Ephemeral Sequential)
4. Dubbo负载均衡默认是哪种?
Dubbo默认的负载均衡策略是随机(Random)。Dubbo提供了多种负载均衡策略:
- Random:随机选择一台服务器,默认方式。
- RoundRobin:轮询选择服务器。
- LeastActive:选择活跃连接数最少的服务器。
- ConsistentHash:一致性哈希,相同参数的请求总是发到同一台服务器。
在Dubbo的配置中,可以通过loadbalance参数来设置负载均衡策略。

查看3道真题和解析