【粉丝来稿】工作1年半就成功拿到网易的入职offer,附上大佬的面试经验希望帮助到大家!

156 篇文章 1 订阅
149 篇文章 0 订阅

前言

对于大厂面试,我首先想要强调的一点就是心态真的很重要,是决定你在面试过程中发挥的关键,若不能正常发挥,很可能就因为一个小失误与offer失之交臂,所以一定要重视起来。另外提醒一点,充分复习,是消除你紧张的心理状态的关键,但你复习充分了,自然面试过程中就要有底气得多。

另外我这里准备了一线大厂面试资料和我原创的超硬核PDF技术文档,以及我为大家精心准备的多套大厂面试题(不断更新中),有需要的朋友点击这里备注csdn,自行下载即可希望大家都能找到心仪的工作!

RPC原理

为什么会出现RPC?
  • RPC(Remote Procedure Call Protocol)——远程过程调用协议。

  • 一般来说,自己写程序然后本地调用,这种程序的特点是服务的消费方和提供方。当我们进入公司时,面对的很可能就是成千上万的服务提供方,这时候就需要使用RPC来进行远程服务调用。RPC将原来的本地调用转变为调用远端的服务器上的方法,给系统的处理能力和吞吐量带来了近似于无限制提升的可能。

RPC的组成
  • 客户端:服务的调用方

  • 客户端存根:存放服务端的地址消息,再将客户端的请求参数打包成网络消息,③然后通过网络远程发送给服务方。

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

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

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

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

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

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

  • 如何进行通信?(NIO—>Netty)

  • HashMap原理

Redis缓存回收机制

数据过期:
  • 定时删除策略:Redis启动一个定时器监控所有的key,一旦有过期的话就进行删除(遍历所有key,非常耗费CPU)

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

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

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

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

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

  • volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 Key。这种情况一般是把 Redis 既当缓存,又做持久化存储的时候才用。

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

  • volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 Key 优先移除。不推荐。如果没有对应的键,则回退到noeviction策略。

Redis主从同步

主从复制作用
  • 数据冗余

  • 故障恢复(服务冗余)

  • 负载均衡

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

主从复制过程
  • 连接建立阶段

  • 步骤1:保存主节点信息

  • 步骤2:建立socket连接

  • 步骤3:发送ping命令

  • 步骤4:身份验证

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

  • 数据同步阶段

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

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

  • 命令传播阶段

  • 主从节点进入命令传播阶段;在这个阶段主节点将自己执行的写命令发送给从节点,从节点接收命令并执行,从而保证主从节点数据的一致性。

  • 介绍全量复制和部分复制

  • 全量复制:用于初次复制或其他无法进行部分复制的情况,将主节点中的所有数据都发送给从节点,是一个非常重型的操作。

  • 部分复制:用于网络中断等情况后的复制,只将中断期间主节点执行的写命令发送给从节点,与全量复制相比更加高效。需要注意的是,如果网络中断时间过长,导致主节点没有能够完整地保存中断期间执行的写命令,则无法进行部分复制,仍使用全量复制。

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

为什么会有哨兵机制?

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

哨兵机制作用?

  • 监控(Monitoring):哨兵会不断地检查主节点和从节点是否运作正常。

  • 自动故障转移(Automatic failover):当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。

  • 配置提供者(Configuration provider):客户端在初始化时,通过连接哨兵来获得当前Redis服务的主节点地址。

  • 通知(Notification):哨兵可以将故障转移的结果发送给客户端。

哨兵机制节点组成?

  • 它由两部分组成,哨兵节点和数据节点:

  • 哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。

  • 数据节点:主节点和从节点都是数据节点。

哨兵机制原理?

  • 定时任务:每个哨兵节点维护了3个定时任务。定时任务的功能分别如下:通过向主从节点发送info命令获取最新的主从结构;通过发布订阅功能获取其他哨兵节点的信息;通过向其他节点发送ping命令进行心跳检测,判断是否下线。

  • 主观下线:在心跳检测的定时任务中,如果其他节点超过一定时间没有回复,哨兵节点就会将其进行主观下线。顾名思义,主观下线的意思是一个哨兵节点“主观地”判断下线;与主观下线相对应的是客观下线。

  • 客观下线:哨兵节点在对主节点进行主观下线后,会通过sentinel is-master-down-by-addr命令询问其他哨兵节点该主节点的状态;如果判断主节点下线的哨兵数量达到一定数值,则对该主节点进行客观下线。

  • 选举领导者哨兵节点:当主节点被判断客观下线以后,各个哨兵节点会进行协商,选举出一个领导者哨兵节点,并由该领导者节点对其进行故障转移操作。监视该主节点的所有哨兵都有可能被选为领导者,选举使用的算法是Raft算法;Raft算法的基本思路是先到先得:即在一轮选举中,哨兵A向B发送成为领导者的申请,如果B没有同意过其他哨兵,则会同意A成为领导者。选举的具体过程这里不做详细描述,一般来说,哨兵选择的过程很快,谁先完成客观下线,一般就能成为领导者。

  • 故障转移:选举出的领导者哨兵,开始进行故障转移操作,该操作大体可以分为3个步骤:

  • 在从节点中选择新的主节点:选择的原则是,首先过滤掉不健康的从节点;然后选择优先级最高的从节点(由slave-priority指定);如果优先级无法区分,则选择复制偏移量最大的从节点;如果仍无法区分,则选择runid最小的从节点。

  • 更新主从状态:通过slaveof no one命令,让选出来的从节点成为主节点;并通过slaveof命令让其他节点成为其从节点。

  • 将已经下线的主节点(即6379)设置为新的主节点的从节点,当6379重新上线后,它会成为新的主节点的从节点。

哨兵机制缺点

  • 写操作无法负载均衡;存储能力受到单机的限制。(Redis集群解决了该情况)

Zookeeper锁是如何实现的?

  • 一般使用Curator进行使用Zookeeper锁,例如有两个客户端A和客户端B,首先A先在锁节点下创建例如01子节点的锁,然后再获取节点信息,发现自己的01节点排名第一,那么就获得锁。

  • 客户端B也需要获取锁,现在锁节点下创建例如02的子节点,然后再获取锁节点信息,发现锁节点信息为[01,02],并不排第一,因此获取不到锁,客户端B会在他的顺序节点的上一个顺序节点加一个监听器。

  • 当客户端A使用完锁,删除01节点,客户端B获取到01删除的监听,然后发现自己的02节点排名第一,那么就获取到锁。

数据库是如何调优的?

  • 数据表加合适的索引

  • 针对执行计划进行优化

  • 根据慢sql进行优化

  • 加缓存

  • 参数调优

git rebase命令发生了什么?

  • rebase命令可以帮我们把整个提交历史变成干净清晰的一条线。

最后

最后为大家准备了Java架构学习资料,学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。有需要的朋友点击这里备注csdn,自行下载即可,以上内容中,我谈及到的学习方法、学习面试资料,均可以免费分享给大家,希望大家进到自己想进的公司,共勉!

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书一起免费分享给大家!

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值