-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathquiz.json
More file actions
90 lines (90 loc) · 3.5 KB
/
Copy pathquiz.json
File metadata and controls
90 lines (90 loc) · 3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
{
"lesson": "22-jsonrpc-stdio-transport",
"title": "顶点课 22 —— JSON-RPC 2.0 换行分隔 Stdio 传输层",
"questions": [
{
"stage": "pre",
"question": "在线路上,JSON-RPC 的 notification 和 request 有什么区别?",
"options": [
"jsonrpc 版本号字段不同",
"Notification 省略了 id 字段;服务端不得对其响应",
"Notification 使用不同的 method 命名空间",
"Notification 被包裹在数组里"
],
"correct": 1,
"explanation": "没有 id 是唯一标记。服务端不响应,因为没有 id 可以用来关联。"
},
{
"stage": "pre",
"question": "为什么换行分隔 JSON 足以作为 stdio 的帧定界方案?",
"options": [
"因为 JSON 不允许字符串内出现未转义的换行符,所以每个对象可以占一行",
"因为管道保证换行符的原子性",
"因为 UTF-8 中没有换行字节",
"因为规范强制要求这样"
],
"correct": 0,
"explanation": "json.dumps 每个对象输出一行;字符串内的换行符会被转义。这使得 \\n 成为安全的记录分隔符。"
},
{
"stage": "check",
"question": "当 JSON 解析失败时,传输层返回哪个错误码?",
"options": [
"-32600",
"-32700",
"-32603",
"-32601"
],
"correct": 1,
"explanation": "-32700 是 Parse error。因为无法提取到 id,响应中的 id 为 null。"
},
{
"stage": "check",
"question": "如果 handler 抛出一个普通的 ValueError,传输层返回什么?",
"options": [
"Method not found (-32601)",
"Invalid params (-32602)",
"Internal error (-32603),并在 data 中包含异常类名",
"不返回任何东西;连接断开"
],
"correct": 2,
"explanation": "未映射的异常统一返回 -32603。data.exception 保留了异常的类名供客户端参考。"
},
{
"stage": "check",
"question": "当一个 batch 中只包含 notification 时,服务端返回什么?",
"options": [
"一个空数组",
"什么也不返回——不写任何字节",
"每个 notification 对应一个 null",
"一个单独的 null 响应"
],
"correct": 1,
"explanation": "规范规定:如果批量请求中的每一条都是 notification,服务端保持沉默。"
},
{
"stage": "post",
"question": "会话中间收到一行破损的 JSON,之后的行会怎样?",
"options": [
"传输层关闭流",
"后续行被缓冲,直到破损行被重试",
"传输层写一个 -32700 响应,然后继续读取下一行作为新的输入",
"后续行全部被 -32600 拒绝"
],
"correct": 2,
"explanation": "帧定界层不能污染整个流。一次解析错误只产生一个错误响应,循环继续运行。"
},
{
"stage": "post",
"question": "为什么传输层不直接查询工具注册中心?",
"options": [
"因为注册中心是异步的",
"为了让传输层只负责 JSON-RPC 协议;由 handler 来连接传输层和注册中心",
"因为注册中心存有机密信息",
"因为传输层运行在不同的进程中"
],
"correct": 1,
"explanation": "传输层只管线路协议。Dispatcher(下一课)才是传输层、注册中心和超时逻辑汇合的地方。"
}
]
}