SynX 2023 上招新-后端类题目
[blame LAuemtihneer]
1. C 语言
-
有如下一个对象:
struct { char *func_name; void (*func_pointer)(void); } function_list[] = { {"func1", func_test1}, {"func2", func_test2}, {"func3", func_test3} };
这个对象是一个结构体数组,其中存储了函数名称与实际函数的指针之间的映射关系。请编写一个函数,该函数输入结构体数组、函数名称,然后调用与匹配名称对应的函数,函数原型自拟。
-
请尝试使用 C 语言实现一种称为“多态”的面向对象的机制,并给出示例,说明为什么这种模式是“多态”。
C 语言要实现较为严格的多态,需要自己实现虚函数表(Virtual Method Table)等机制,本题对此不做要求。
请提交代码及运行截图。
2. HTTP 认证与鉴权
网络通信通常使用无连接的 HTTP 协议。但网页浏览有保持用户登录状态等需求,这种需求的基础是认证与鉴权。
有多种基于 HTTP 的认证与鉴权的机制,它们的安全性有所差异。请查阅当前主流的认证鉴权机制,至少要包括对 Session、Cookies、Token、JWT 等术语的解释与对比。
对于通信流程,建议绘制时序图。
提示:
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication
- https://jwt.io/
3. gRPC
在云原生领域,gRPC 是更受欢迎的服务间通信形式,它实现了高效、跨语言的 gRPC。
可惜 GRPC 原生不支持 C 语言
-
解释 RPC 与直接的 HTTP 调用的关系与区别
-
编写 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 对应的数据。数据请自行生成。
-
不要求通信加密。
-
-
请使用 Wireshark 获取一次 gRPC 通信的全部流程,要求包括 TCP、HTTP 与 gRPC 的完整记录,gRPC 消息要求解析。
请提交代码、运行截图以及必要的文字说明。
提示:
0 条评论