2021Java面试心得:数据结构c语言版和java版区别

本文探讨了RPC的原理,包括Provider、Consumer和Registry的角色,详细解析了RPC调用流程。介绍了动态代理、序列化、NIO在RPC中的作用,并提到了常用的服务注册中心如Redis、Zookeeper等。最后,文章提到了实际编程实践中创建RPC框架的关键点及面试中可能涉及的问题。
摘要由CSDN通过智能技术生成

RPC概述

RPC(Remote Procedure Call)即远程过程调用,允许一台计算机调用另一台计算机上的程序得到结果,而代码中不需要做额外的编程,就像在本地调用一样。

现在互联网应用的量级越来越大,单台计算机的能力有限,需要借助可扩展的计算机集群来完成,分布式的应用可以借助RPC来完成机器之间的调用。

RPC框架原理

在RPC框架中主要有三个角色:Provider、Consumer和Registry。如下图所示:

节点角色说明:

  • Server: 暴露服务的服务提供方。

  • Client: 调用远程服务的服务消费方。

  • Registry: 服务注册与发现的注册中心。

RPC调用流程

RPC基本流程图:

一次完整的RPC调用流程(同步调用,异步另说)如下:

1)服务消费方(client)调用以本地调用方式调用服务;

2)client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;

3)client stub找到服务地址,并将消息发送到服务端;

4)server stub收到消息后进行解码;

5)server stub根据解码结果调用本地的服务;

6)本地服务执行并将结果返回给server stub;

7)server stub将返回结果打包成消息并发送至消费方;

8)client stub接收到消息,并进行解码;

9)服务消费方得到最终结果。

RPC框架的目标就是要2~8这些步骤都封装起来,让用户对这些细节透明。

服务注册&发现

服务提供者启动后主动向注册中心注册机器ip、port以及提供的服务列表;

服务消费者启动时向注册中心获取服务提供方地址列表,可实现软负载均衡和Failover;

使用到的技术

1、动态代理

生成 client stub和server stub需要用到 Java 动态代理技术 ,我们可以使用JDK原生的动态代理机制,可以使用一些开源字节码工具框架 如:CgLib、Javassist等。

2、序列化

为了能在网络上传输和接收 Java对象,我们需要对它进行 序列化和反序列化操作。

  • 序列化:将Java对象转换成byte[]的过程,也就是编码的过程;

  • 反序列化:将byte[]转换成Java对象的过程;

可以使用Java原生的序列化机制,但是效率非常低,推荐使用一些开源的、成熟的序列化技术,例如:protobuf、Thrift、hessian、Kryo、Msgpack

关于序列化工具性能比较可以参考:jvm-serializers

3、NIO

当前很多RPC框架都直接基于netty这一IO通信框架,比如阿里巴巴的HSF、dubbo,Hadoop Avro,推荐使用Netty 作为底层通信框架。

4、服务注册中心

可选技术:

  • Redis

  • Zookeeper

  • Consul

  • Etcd

编程实践:手写实现千万级流量架构必备的RPC框架

视频内容

1、为什么千万级流量分布式、微服务架构都有RPC?
2、什么是RPC?
3、辨析RPC和HTTP
4、实现RPC框架我们需要解决哪些问题?
5、具体问题具体分析,各个解决和实现!
6、应付千万级流量,这样够了吗?反思我们的实现。
7、Dubbo和SpringCloud哪个更好?

总结

蚂蚁面试比较重视基础,所以Java那些基本功一定要扎实。蚂蚁的工作环境还是挺赞的,因为我面的是稳定性保障部门,还有许多单独的小组,什么三年1班,很有青春的感觉。面试官基本水平都比较高,基本都P7以上,除了基础还问了不少架构设计方面的问题,收获还是挺大的。

资料领取方式:戳这里


经历这次面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

这次面试我还通过一些渠道发现了需要大厂真实面试主要有**:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

蚂蚁金服5面,总结了49个面试题,遇到的面试官都是P7级别以上

第1章 基本概念 1.1 概观:系统生命周期 1.2 指针动态存储分配 1.3 算法形式规范 1.4 数据抽象 1.5 性能分析 1.6 性能度量 1.7 参考文献选读材料 第2章 数组结构 2.1 数组 2.2 数组的动态存储分配 2.3 结构体联合体 2.4 多项式 2.5 稀松矩阵 2.6 多维数组的表示 2.7 字符串 2.8 参考文献选读材料 2.9 补充习题 第3章 栈与队列 3.1 栈 .3.2 动态栈 3.3 队列 3.4 动态循环队列 3.5 迷宫问题 3.6 表达式求值 3.7 多重栈与多重队列 3.8 补充习题 第4章 链表 4.1 单向链表 4.2 用C语言表示单向链表 4.3 链式栈与链式队列 4.4 多项式 4.5 其它链表操作 4.6 等价类 4.7 稀疏矩阵 4.8 双向链表 第5章 树 5.1 引论 5.2 二叉树 5.3 遍历二叉树 5.4 其它二叉树操作 5.5 线索二叉树 5.6 堆 5.7 二叉查找树 5.8 选拔树 5.9 森林 5.10 不相交集合的表示 5.11 二叉树的计数 5.12 参考文献选读材料 第6章 图 6.1 图的抽象数据类型 6.2 图的基本操作 6.3 最小代价生成树 6.4 最短路径迁移闭包 6.5 活动网络 6.6 参考文献选读材料 6.7 补充习题 第7章 排序 7.1 动机 7.2 插入排序 7.3 快速排序 7.4 排序最快有多快 7.5 归并排序 7.6 堆排序 7.7 多关键字排序 7.8 链表排序索引表排序 7.9 内部排序小结 7.10 外部排序 7.11 参考文献选读材料 第8章 Hash法 8.1 引言 8.2 静态Hash法 8.3 动态Hash法 8.4 Bloom滤波器 8.5 参考文献选读材料 第9章 优先队列 9.1 单端优先队列双端优先队列 9.2 左倾树 9.3 二项式堆 9.4 Fibonacci堆 9.5 配偶堆 9.6 对称最小-最大堆 9.7 区间堆 9.8 参考文献选读材料 第10章 高效二叉查找树 10.1 最优二叉查找树 10.2 AVL树 10.3 红-黑树 10.4 Splay树 10.5 参考文献选读材料 第11章 多路查找树 11.1 m-路查找树 11.2 B-树 11.3 B+树 11.4 参考文献选读材料 第12章 数字查找结构 12.1 数字查找树 12. 2 二路Trie树Patricia树 12.3 多路Trie树 12.4 后缀树 12.5 Trie树互联网的包转发 12.6 参考文献选读材料
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值