网易社招java岗社招面经(上)

1、RPC 原理

(1)为什么会出现 RPC?

RPC(Remote Procedure Call Protocol)——远程过程调用协议。

一般来说,自己写程序然后本地调用,这种程序的特点是服务的消费方和提供方。当我们进

入公司时,面对的很可能就是成千上万的服务提供方,这时候就需要使用RPC 来进行远程

服务调用。RPC 将原来的本地调用转变为调用远端的服务器上的方法,给系统的处理能力和

吞吐量带来了近似于无限制提升的可能。

(2)RPC 的组成

①客户端:服务的调用方

②客户端存根:存放服务端的地址消息,再将客户端的请求参数打包成网络消息,③然后通

过网络远程发送给服务方。

④服务端:真正的服务提供者。

⑤服务端存根:接收客户端发送过来的消息,将消息解包,并调用本地的方法。

2、RPC 的过程?

3、如何做到透明化远程服务调用?

动态代理,把本地调用代理成网络调用

4、如何进行服务发布?(Zookeeper)

5、如何进行序列化与反序列化?(Protobuf、Thrift、Avro)

6、如何进行通信?(NIO--->Netty)

7、HashMap 原理

8、Redis 缓存回收机制

(1)数据过期:

①定时删除策略:Redis 启动一个定时器监控所有的 key,一旦有过期的话就进行删除(遍历

所有key,非常耗费 CPU)

②惰性删除策略:获取 key 的时候判断是否过期, 过期则进行删除

Redis 采用的方式:①(随机抓取一部分 key 进行检测)+②

(2)内存淘汰:

①noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。(Redis 默认策略)

②allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 Key。

(LRU 推荐使用)

③allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 Key。

④volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近

最少使用的Key。这种情况一般是把 Redis 既当缓存,又做持久化存储的时候才用。

⑤volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机

移除某个Key。

⑥volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过

期时间的Key 优先移除。不推荐。如果没有对应的键,则回退到 noeviction 策略。

9、Redis 主从同步(1)主从复制作用

①数据冗余

②故障恢复(服务冗余)

③负载均衡

④读写分离(主节点写操作、从节点读操作)

(2)主从复制过程

①连接建立阶段

步骤1:保存主节点信息

步骤2:建立 socket 连接

步骤3:发送 ping 命令

步骤4:身份验证

步骤5:发送从节点端口信息

②数据同步阶段

从节点向主节点发送psync 命令

根据主从节点当前状态的不同,可以分为全量复制和部分复制

③命令传播阶段

主从节点进入命令传播阶段;在这个阶段主节点将自己执行的写命令发送给从节点,从节点

接收命令并执行,从而保证主从节点数据的一致性。

(3)介绍全量复制和部分复制

①全量复制:用于初次复制或其他无法进行部分复制的情况,将主节点中的所有数据都发送

给从节点,是一个非常重型的操作。

②部分复制:用于网络中断等情况后的复制,只将中断期间主节点执行的写命令发送给从节

点,与全量复制相比更加高效。需要注意的是,如果网络中断时间过长,导致主节点没有能

够完整地保存中断期间执行的写命令,则无法进行部分复制,仍使用全量复制。

(4)主从复制缺点:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限

制。

10、为什么会有哨兵机制?

在主从复制的基础上,哨兵实现了自动化的故障恢复。

#网易##社招##面经##java工程师#
全部评论
从哪抄的
点赞 回复 分享
发布于 2021-07-13 21:48

相关推荐

头像
11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
有趣的牛油果开挂了:最近这个阶段收到些杂七杂八的短信是真的烦
点赞 评论 收藏
分享
评论
1
41
分享
牛客网
牛客企业服务