网易社招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工程师#