JSON、ABI 与流水线

共 43 题
#

1. JSON 中 true/false/null 字面量在 RFC 8259 中的定义?

A null 是字符串
B 可以写成 True/False/Null
C true/false/null 必须严格小写 ✓ 正确答案
D true 可以带引号
#

2. JSON 数字类型与 IEEE 754 双精度的可表示范围?

A JSON 数字必须是整数
B JSON 数字必须用引号
C JSON 数字支持任意精度
D JSON 规范未规定精度,但实现通常用 IEEE 754 双精度,超过 2^53 的整数会丢失精度 ✓ 正确答案
#

3. 解释 JSON 字符串中 \uXXXX 转义序列与 UTF-8 字节序列的差异?

A \uXXXX 和 UTF-8 完全相同
B \uXXXX 表示 UTF-16 码元,BMP 外字符需代理对;UTF-8 是字节编码 ✓ 正确答案
C \uXXXX 只能表示 ASCII
D UTF-8 用 \uXXXX 表示
#

4. 解释为何 JSON 不支持注释与尾随逗号?

A 为了保持语法简洁严格,避免跨语言解析歧义 ✓ 正确答案
B 语法规则疏忽
C 注释会破坏性能
D 只有旧版本不支持
#

5. ASN.1 BER 与 DER 在证书编码中的差异(canonical)?

A 每种值只有唯一编码,保证签名可验证 ✓ 正确答案
B 编码更短
C 支持更多数据类型
D 编码更快
#

6. ARM64 一条典型 ADD 指令的位字段(Rd、Rn、Rm)含义?

A Rd=x2,Rn=x0,Rm=x1
B Rd=x1,Rn=x2,Rm=x0
C Rd=x0,Rn=x1,Rm=x2 ✓ 正确答案
D 三者含义相同
#

7. CPU 取指-译码-执行三阶段流水线中每阶段的最小时钟周期为何受限于 L1 I-cache 命中延迟?

A 译码最慢
B I-cache 是唯一瓶颈
C 流水线周期由最慢阶段决定,取指阶段需完成 I-cache 访问 ✓ 正确答案
D 执行阶段无需访问缓存
#

8. 为何 x86 CPU 把变长指令译码为微操作(μops)后再交给后端?

A 变长复杂指令译成统一定长 μops,便于后端乱序调度与重命名 ✓ 正确答案
B 减少指令数量
C μops 比 CISC 指令快
D 省内存
#

9. 解释 MIPS R 型指令与 I 型指令的 32 位布局,opcode/funct 字段的位置如何?

A 中间 6 位
B 最高 6 位
C 最低 6 位 ✓ 正确答案
D 不存在 funct
#

10. 解释 instruction cache 与 data cache 分离(哈佛结构)的初衷?

A 节省面积
B 便于编译
C 取指与数据访问并行提供带宽,避免结构冲突,并针对各自访问特性优化 ✓ 正确答案
D 减少功耗
#

11. 解释复杂指令集(CISC)与精简指令集(RISC)在译码复杂度上的差异?

A CISC 指令固定长度,译码简单
B CISC 指令变长、语义复杂,译码逻辑复杂;RISC 固定长度,译码简单 ✓ 正确答案
C RISC 指令变长,译码复杂
D 两者译码复杂度相同
#

12. 为何现代 CPU 倾向于 RISC-like 微操作执行而非直接执行 CISC 指令?

A μops 更省电
B CISC 指令无法执行
C 统一执行、便于乱序调度,兼顾 CISC 兼容性与 RISC 高效 ✓ 正确答案
D μops 减少程序大小
#

13. 解释 MIPS jr $ra 寄存器跳转与 jal 函数调用的位编码?

A $31($ra) ✓ 正确答案
B $0
C $sp
D $fp
#

14. x86-64 Microsoft ABI(Windows)与 System V ABI 在 ABI 传参规则上的差异?

A rdi、rsi、rdx、rcx、r8、r9 ✓ 正确答案
B rcx、rdx、r8、r9、r10、r11
C rdi、rsi、rbx、rdx、r8、r9
D rsi、rdi、rdx、rcx、r8、r9
#

15. x86-64 System V ABI 中 rdi/rsi/rdx/rcx/r8/r9 为函数参数寄存器的顺序与用途?

A rsi
B rdx
C rcx ✓ 正确答案
D r8
#

16. 为何 ARM64 ABI 传参规则要求被调用者保存 x19-x28 而非所有寄存器?

A x0-x7
B x19-x28 ✓ 正确答案
C x30
D 所有寄存器
#

17. 为何 x86-64 SysV 把返回值放在 rax/rdx(128 位)?

A 通过栈返回
B 全放 rax
C 全放 rdx
D 低 64 位 rax,高 64 位 rdx ✓ 正确答案
#

18. 给定 C 函数 int f(int a, int b, int c, int d, int e, int f, int g);其在 x86-64 SysV 下寄存器与栈分配?

A 通过 r9
B 通过 rdx
C 通过栈传递 ✓ 正确答案
D 不传递
#

19. 解释 ARM64 AAPCS 中 x0-x7 为参数/返回值寄存器的 ABI 约定?

A x0-x7 ✓ 正确答案
B x8-x15
C x19-x28
D x1-x8
#

20. 解释 MIPS $sp/$fp/$ra/$gp 四个特殊寄存器在 O32 下的角色?

A 栈指针
B 全局指针
C 返回地址寄存器 ✓ 正确答案
D 帧指针
#

21. 解释 MIPS O32 ABI 与 N64 ABI 在参数寄存器($a0-$a3)差异?

A 参数寄存器更少
B 不支持浮点
C 64 位宽且参数寄存器增加到 $a0-$a7 ✓ 正确答案
D 参数全走栈
#

22. 在 System V AMD64 ABI 中,红区(128 字节)的使用限制是什么?

A 红区可被任意函数安全使用
B 红区是 rsp 下方 128 字节,只对叶函数安全,且可能被信号处理破坏 ✓ 正确答案
C 红区在所有 ABI 都存在
D 红区必须显式对齐
#

23. 解释 ARM64 AAPCS64 中 d0/d1 用于 SIMD 参数传递的规则?

A x0-x7
B s0-s7
C d0-d1
D v0-v7 ✓ 正确答案
#

24. RAW、WAR、WAW 三种数据冒险的顺序约束关系?

A WAR
B WAW
C RAW ✓ 正确答案
D 结构冒险
#

25. 为何 ARM 在流水线早期把分支指令提前到 ID 阶段(branch folding)?

A 提高数据缓存速度
B 消除 RAW 冒险
C 增加指令数
D 在流水线早期确定分支方向与目标,减少控制冒险 ✓ 正确答案
#

26. 为何 MIPS 设计为“编译期解决数据冒险”而 x86 设计为“硬件动态调度”?

A x86 需兼容既有二进制,硬件动态调度保障兼容性;MIPS 面向可重编译的编译器生态 ✓ 正确答案
B MIPS 硬件更强
C MIPS 不支持流水线
D x86 编译器更弱
#

27. 给定 5 级流水线中 add r1, r2, r3; add r4, r1, r5 的 RAW 冲突,需要几个 stall 周期?

A 0 ✓ 正确答案
B 3
C 2
D 1
#

28. 解释 Tomasulo 算法中保留站与公共数据总线(CDB)的关系?

A 广播执行结果,让保留站匹配接收就绪操作数 ✓ 正确答案
B 存储指令
C 保存栈顶
D 执行加法
#

29. 在 5 级流水线中,结构冒险最常见的来源(内存端口冲突)?

A 指令过长
B 寄存器数不足
C 取指与访存争用同一内存端口 ✓ 正确答案
D 分支预测
#

30. BSON 在 MongoDB 中整数 int32/int64 的字节序?

A 小端序 ✓ 正确答案
B 大端序
C 网络字节序
D 由平台决定
#

31. Thrift Binary Protocol 的字段类型字节映射表?

A 0x0A
B 0x08 ✓ 正确答案
C 0x0B
D 0x03
#

32. CBOR 与 MessagePack 的主要差异(自描述、长度不确定)?

A 需要外部 schema
B 遵循 RFC 标准、支持确定性编码与不定长度流,用于 COSE 等安全场景 ✓ 正确答案
C 不支持自描述
D 只支持整数
#

33. FlatBuffers vs Protobuf 在零拷贝读写上的本质差异

A 用内存映射文件
B 使用压缩
C 数据内存布局即序列化格式,读取时通过偏移量直接访问,无需反序列化 ✓ 正确答案
D 不序列化数据
#

34. MessagePack 的整数编码格式,fixint/uint 8/16/32/64 如何组织?

A fixint(1 字节) ✓ 正确答案
B uint 16
C uint 32
D uint 64
#

35. Protocol Buffers 3 中 scalar 类型 varint 编码的字节节省?

A 8 字节
B 2 字节
C 4 字节
D 1 字节 ✓ 正确答案
#

36. 解释 JSON 解析中的 RFC 8259 严格模式与 JavaScript 兼容模式的差异?

A 对象
B 尾随逗号与注释 ✓ 正确答案
C 数组
D 字符串
#

37. 给定一段 x86 jmp rel8 跳转指令,手工计算相对偏移字节的取值范围?

A 0 到 255
B -256 到 +255
C -128 到 +127 ✓ 正确答案
D -32768 到 +32767
#

38. 给定一段 x86 指令 ret/push/call 的字节序列,解释每条指令的长度变化?

A 1 字节 ✓ 正确答案
B 2 字节
C 5 字节
D 3 字节
#

39. 解释条件码(ZF/CF/SF/OF)在 x86 CMP 指令后的语义?

A ZF
B OF
C SF
D CF ✓ 正确答案
#

40. 解释 frame pointer (rbp/fp) 与 stack pointer (rsp/sp) 在调试与异常中的角色?

A 指向栈顶
B 提供稳定帧基准,通过 rbp 链回溯调用栈 ✓ 正确答案
C 存放返回值
D 指向全局变量
#

41. 给定 load-use 冒险场景,列出 stall + forwarding 的最小周期开销?

A 0
B 1 ✓ 正确答案
C 2
D 3
#

42. 解释 forwarding(旁路)如何消除部分 RAW 冒险?

A 强制指令乱序
B 减少指令
C 增加缓存
D 结果刚产生就旁路转发给等待指令,无需等写回寄存器 ✓ 正确答案
#

43. 解释控制冒险中的 branch delay slot 与 branch prediction 关系?

A 完全相同
B 预测依赖 delay slot
C delay slot 是静态编译期方案,prediction 是硬件动态预测方案,现代 CPU 用后者 ✓ 正确答案
D delay slot 是硬件方案