c++面试题及其参考答案
C++是一种高级编程语言,是 C 语言的一种扩展。C++ 通过面向对象编程的方式提供了更多的功能,包括类、继承、多态、模板等,可以编写更为复杂的程序。本文会提供一份c++面试题及其参考答案,希望对你有所帮助。
1.微服务之间如何进行通信?
参考答案:
单体项目时:一次服务调用发生在同一台机器上的同一个进程内部,也就是说调用发生在本机内部,因此也被叫作本地方法调用。微服务项目时:服务提供者和服务消费者运行在两台不同物理机上的不同进程内,它们之间的调用相比于本地方法调用,可称之为远程方法调用,简称 RPC
2.RPC了解多少?都有哪些?
参考答案:RPC全称称: Remote Procedure Calls 远程服务调用,是进行服务之间相互调用的。受限语言的开源 RPC 框架。
3.RPC包含哪些部分?
参考答案:一个RPC框架要包含
客户端和服务端建立网络连接模块( server模块、client模块 )
4.设计一个RPC会考虑哪些问题?
参考答案:设计一个RPC框架,可以从PRC包含的几个模块去考虑,对每一个模块分别进行设计。
5.服务端如何处理请求?有哪些方式?
参考答案:服务端接收到客户端的请求后,常见的处理方式有三种,分别是BIO、NIO和AIO。
同步阻塞方式(BIO):客户端发一次请求,服务端生成一个对应线程去处理。当客户端同时发起的请求很多时,服务端需要创建多个线程去处理每一个请求,当达到了系统最大的线程数时,新来的请求就无法处理了。
同步非阻塞方式 (NIO):客户端发一次请求,服务端并不是每次都创建一个新线程来处理,而是通过 I/O 多路复用技术进行处理。就是把多个 I/O 的阻塞复用到同一个 select 的阻塞上,从而使系统在单线程的情况下可以同时处理多个客户端请求。这种方式的优势是开销小,不用为每个请求创建一个线程,可以节省系统开销。
异步非阻塞方式(AIO):客户端发起一个 I/O 操作然后立即返回,等 I/O 操作真正完成以后,客户端会得到 I/O 操作完成的通知,此时客户端只需要对数据进行处理就好了,不需要进行实际的 I/O 读写操作,因为真正的 I/O 读取或者写入操作已经由内核完成了。这种方式的优势是客户端无需等待,不存在阻塞等待问题。
使用场景
BIO 适用于连接数比较小的业务场景,这样的话不至于系统中没有可用线程去处理请求。这种方式写的程序也比较简单直观,易于理解。
NIO 适用于连接数比较多并且请求消耗比较轻的业务场景,比如聊天服务器。这种方式相比 BIO,相对来说编程比较复杂。
AIO 适用于连接数比较多而且请求消耗比较重的业务场景,比如涉及 I/O 操作的相册服务器。这种方式相比另外两种,编程难度最大,程序也不易于理解。
6.序列化与反序列的方式有哪些?
参考答案: 常用的序列化方式分为两类
文本类如 XML/JSON 等
二进制类如 PB/Thrift 等