前言

对于大厂面试,我首先想要强调的一点就是心态真的很重要,是决定你在面试过程中发挥的关键,若不能正常发挥,很可能就因为一个小失误与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架构实战电子书一起免费分享给大家!

【网易社招】2020全年度网易社招面试题合集,啃烂这些面试题去阿里至少也是个P7!相关推荐

  1. 2020中高级前端面试题合集

    2020中高级前端面试题合集 "全方位总结一下所遇到的面试题目,与大家共同学习,也是对自己的一次总结" 文章同步到我的公众号<前端小时>,欢迎大家关注! 01 前言 2 ...

  2. 盘点2020 | Cocos 精选 2D、3D 游戏合集

    盘点完了 2020 年 Cocos 技术和实例教程合集之后,今日C姐将为大家继续盘点2020年 #Created with Cocos# 的那些精品游戏,涵盖原生游戏.H5游戏和小游戏等,有来自大厂的 ...

  3. 【年度重磅】2020华为云社区年度技术精选合集,700页+免费下载!

    摘要:[免费下载]华为云社区年度技术精选集,700页+PDF送你啦!愿牛年少踩坑. 技术人的年货来了!点我带回家! 年度技术精选合集[上]:https://bbs.huaweicloud.com/bl ...

  4. 2023阿里,字节跳动,JAVA岗(一线企业校招、社招)面试题合集

    前言 以下面试题全属于一线大厂社招以及校招的面试真题,各位在做这些题目对照自己的时候请平凡心对待,不要信心受挫.其实 做为致力于一线企业校招或者社招的你来说,能把每个知识模块的一小部分问题去深入学习和 ...

  5. 2021年最新阿里社招面试题合集,能答对90%你就能去阿里面试了!

    前言 Java-社招-3至5年经验 流程 填写资料-笔试-面试-等通知 文章的开始为大家准备了一些Java架构学习资料,学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分 ...

  6. 拼多多2020届数据分析面试题合集

    关注上方"AI派",选择星标, 关键时间,第一时间送达! 来源整理自公众号:胖里的日常 第一家公司的2020届数据分析面试题整理就从拼多多开始吧~ 招聘总共分为学霸批.寻梦批.正式 ...

  7. CVPR 2020代码开源的论文最全合集

    前言 之前Amusi整理了1467篇CVPR 2020所有论文PDF下载资源,详见:全在这里了! CVPR2020-Code CVPR 2020 论文开源项目合集,同时欢迎各位大佬提交issue,分享 ...

  8. java重写paint方法时怎么样不覆盖文字_美团十月社招Java面试题合集,JVM+Spring+Spring,看了答案其实也不难...

    欢迎关注专栏<Java架构筑基>--专注于Java技术的研究与分享! Java架构筑基​zhuanlan.zhihu.com Java架构筑基--专注于Java技术的研究与分享! 后续文章 ...

  9. 面试腾讯不得不看的2020腾讯面试题合集,春招+秋招都在这里了(附答案)

    前言 2020年已经接近到尾声了,我也已经入职现在所在的公司3个多月了,作为一个曾经的菜鸡面试者,在不断的失败中成长,最终斩获了多份offer,因此特别想在此分享一下我的面试成长之路. 首先和大家分享 ...

最新文章

  1. php遍历文件夹下文件内容_PHP遍历某文件夹下的文件与文件夹名
  2. BSCI—8-(2):OSPF的特殊区域类型与配置
  3. 记录ASP.NET CORE 3 部署过程
  4. Java基础之扩展GUI——添加状态栏(Sketcher 1 with a status bar)
  5. 告别2017!2018投影市场变革机遇与挑战并存
  6. LeetCode 422. 有效的单词方块
  7. 征战云时代,如何捍卫企业数据安全?
  8. 面试题:为什么局部变量不赋初始值报错
  9. 强悍的vim —— 变量的访问
  10. Play 2.0 用户指南 - 表单提交和验证 --针对Scala开发者
  11. 数字图像处理概述PPT学习1
  12. matlab imagesc叠加+矩阵定位
  13. 转:驳Moxie关于Web3中“去中心化”、“服务器”和“密码学”的观点
  14. PLM( 产品生命周期管理)的简单介绍
  15. python 操作word页眉表格_pythondocx读写word文档:插入图片和表格,设置表格样式、章节、页眉、页脚等,Pythondocx,Word...
  16. 迭代、原型、螺旋、敏捷模型之间的区别
  17. 抖音直播汽车资讯资质怎么认证报白,抖音怎么直播二手车
  18. linux shell logout,.bash_pfofile、.bash_logout和.bashrc区别
  19. 《实用VC编程之玩转控件》第1课:Windows编程简介
  20. 芋道 Spring Boot API 接口文档 Swagger 入门

热门文章

  1. 我的shell脚本实战-编写一个系统发布脚本
  2. 软件公司的商业模式与招聘
  3. 中标麒麟、linux系统-Sikuli安装操作手册
  4. matlab查找集合中某个元素的位置/Struct结构体某个字段值的位置
  5. PostgreSQL安装教程(Win10)
  6. PageOffice 对Word文档的一键套红功能
  7. Mysql导入数据库时报错ERROR: Unknown command '\0'
  8. org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nes
  9. 小米手机查看/data/data/等文件的方法
  10. 【Vue基本指令】一.什么是Vue;二.Vue开发的方式;三.Vue的基本指令(重点)