SynX 2023 上招新-后端类题目

[blame LAuemtihneer]

1. C 语言

  1. 有如下一个对象:

    struct {
       char *func_name;
       void (*func_pointer)(void);
    } function_list[] = 
    {
       {"func1", func_test1},
       {"func2", func_test2},
       {"func3", func_test3}
    };

    这个对象是一个结构体数组,其中存储了函数名称与实际函数的指针之间的映射关系。请编写一个函数,该函数输入结构体数组、函数名称,然后调用与匹配名称对应的函数,函数原型自拟。

  2. 请尝试使用 C 语言实现一种称为“多态”的面向对象的机制,并给出示例,说明为什么这种模式是“多态”。

    C 语言要实现较为严格的多态,需要自己实现虚函数表(Virtual Method Table)等机制,本题对此不做要求。

请提交代码及运行截图。

2. HTTP 认证与鉴权

网络通信通常使用无连接的 HTTP 协议。但网页浏览有保持用户登录状态等需求,这种需求的基础是认证与鉴权。

有多种基于 HTTP 的认证与鉴权的机制,它们的安全性有所差异。请查阅当前主流的认证鉴权机制,至少要包括对 Session、Cookies、Token、JWT 等术语的解释与对比。

对于通信流程,建议绘制时序图。

提示:

3. gRPC

在云原生领域,gRPC 是更受欢迎的服务间通信形式,它实现了高效、跨语言的 gRPC。

可惜 GRPC 原生不支持 C 语言

  1. 解释 RPC 与直接的 HTTP 调用的关系与区别

  2. 编写 gRPC 服务器与客户端,要求为:

    • 消息交换要求使用 protobuf 而不是 JSON,proto 文件为:

      syntax = "proto3";
      
      message Person {
      int32 id = 1;
      string name = 2;
      string email = 3;
      }
      
      message GetPersonRequest {
      int32 id = 1;
      }
      
      message GetPersonResponse {
      Person person = 1;
      }
      
      service PersonMessage {
      rpc GetPersonById(GetPersonRequest) returns (GetPersonResponse);
      }

      与语言相关的选项请自行添加。

    • 客户端与服务器使用不同的编程语言

    • 实现一种同步消息,请求为 ID,响应为 ID 对应的数据。数据请自行生成。

    • 不要求通信加密。

  3. 请使用 Wireshark 获取一次 gRPC 通信的全部流程,要求包括 TCP、HTTP 与 gRPC 的完整记录,gRPC 消息要求解析。

请提交代码、运行截图以及必要的文字说明。

提示:


0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注