| 问题 | 答案 |
|---|---|
| socket | socket是 应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,它把复杂的TCP/IP协议族隐藏在Socket接口后面 服务端:socket() 创建socket描述符;bind()绑定实际地址;listen() 监听; accept 建立链接; 客户端:socket() 创建socket描述符;connect() 连接服务器; |
| 介绍 thrift 参考: https://blog.youkuaiyun.com/houjixin/article/details/42778335 | Facebook于2007年开发的跨语言的rpc服框架 使用Thrift的多语言编译功能,将这个IDL文件编译成C、java、python几种语言对应的“特定语言接口文件” |
| IDL支持的数据类型 | IDL大小写敏感,它共支持以下几种基本的数据类型: [1]string, 字符串类型,注意是全部小写形式;例如:string aString [2]i16, 16位整形类型,例如:i16 aI16Val; [3]i32,32位整形类型,对应C/C++/java中的int类型;例如: I32 aIntVal [4]i64,64位整形,对应C/C++/java中的long类型;例如:I64 aLongVal [5]byte,8位的字符类型,对应C/C++中的char,java中的byte类型;例如:byte aByteVal [6]bool, 布尔类型,对应C/C++中的bool,java中的boolean类型; 例如:bool aBoolVal [7]double,双精度浮点类型,对应C/C++/java中的double类型;例如:double aDoubleVal [8]void,空类型,对应C/C++/java中的void类型;该类型主要用作函数的返回值,例如:void testVoid(), 除上述基本类型外,ID还支持以下类型: [1]map,map类型,例如,定义一个map对象:map<i32, i32> newmap; [2]set,集合类型,例如,定义set<i32>对象:set<i32> aSet; [3]list,链表类型,例如,定义一个list<i32>对象:list<i32> aList;
enum, 枚举类型 struct,自定义结构体类型 ( java中的class) |
| thrift service端工作模式 参考: https://blog.youkuaiyun.com/sunmenggmail/article/details/46818147 | TSimpleServer:采用最简单的阻塞IO,只有一个工作线程,循环监听新请求的到来并完成对请求的处理,一次只能接收和处理一个socket连接。
TNonblockingServer: 单线程工作,采用NIO的方式,所有的socket都被注册到selector中,在一个线程中通过seletor循环监控所有的socket。 优点:IO多路复用,非阻塞IO 缺点:单线程,请求任务一个一个执行
THsHaServer(半同步半异步):TNonblockingServer类的子类,NIO方式, 主线程负责监听,线程池负责处理任务 缺点:新连接请求不能被及时接受
TThreadPoolServer:阻塞socket方式工作,主线程负责阻塞式监听,业务处理交由一个线程池来处理 缺点: 受限于线程池中线程数量大小
TThreadedSelectorServer:目前Thrift提供的最高级的模式,专门的线程AcceptThread用于处理新连接请求,及时响应大量并发连接请求,负载均衡器分散到多个SelectorThread线程中来完成 |
| Thrift支持哪些通信协议格式 | 传输协议上总体上划分为文本(text)和二进制(binary)传输协议 1、TBinaryProtocol – 二进制编码格式进行数据传输。 2、TCompactProtocol – 这种协议非常有效的,使用Variable-Length Quantity (VLQ) 编码对数据进行压缩。高效和压缩的二进制格式 3、TJSONProtocol – 使用JSON的数据编码协议进行数据传输。 4、TSimpleJSONProtocol – 这种节约只提供JSON只写的协议,适用于通过脚本语言解析 5、TDebugProtocol – 在开发的过程中帮助开发人员调试用的,以文本的形式展现方便阅读。 |
| 支持的 通信(传输)方式 transport | 1、TSocket- 使用堵塞式I/O进行传输,也是最常见的模式。 2、TFramedTransport- 使用非阻塞方式,按块的大小,进行传输,类似于Java中的NIO。 3、TFileTransport- 顾名思义按照文件的方式进程传输,虽然这种方式不提供Java的实现,但是实现起来非常简单。 4、TMemoryTransport- 使用内存I/O,就好比Java中的ByteArrayOutputStream实现。 5、TZlibTransport- 使用执行zlib压缩,不提供Java的实现。 |
| Thrift的工作原理 参考: https://blog.youkuaiyun.com/houjixin/article/details/42779835 | RPC的调用方和被调用方不在同一个进程内,甚至都不在同一台机子上,涉及网络传输 涉及到的三个类 协议类(TProtocol) 传输层(TTransport) 处理类(Processor)
|
| RPC框架 参考: |
RPC框架的职责是,中间大蓝框的部分:
|
Thrift 面试题汇总

本文主要探讨了Thrift的相关面试题,包括Thrift的定义、使用场景、优缺点以及其在分布式系统中的作用。详细解释了Thrift的RPC机制、数据序列化过程,并对比了Thrift与其他通信框架的区别。此外,还讨论了Thrift的性能优化策略和在实际项目中的应用案例。


176万+

被折叠的 条评论
为什么被折叠?



