零拷贝与高性能 I/O

共 20 题
#

1. ByteBuffer 在 Netty Unpooled.wrappedBuffer 的零拷贝应用

A wrappedBuffer 会复制数据
B wrappedBuffer 将字节数组/ByteBuffer 包装为 ByteBuf 不复制数据,实现零拷贝 ✓ 正确答案
C wrappedBuffer 只能包装堆外缓冲
D wrappedBuffer 与零拷贝无关
#

2. 零拷贝在 Kafka Producer(FileChannel.transferTo)的应用

A Kafka 用 FileChannel.transferTo 将文件直接发送到 socket,实现零拷贝提升吞吐 ✓ 正确答案
B transferTo 增加用户态拷贝
C Kafka 不用零拷贝
D Kafka 用普通 read/write 拷贝
#

3. 零拷贝(Zero-Copy)的概念与 sendfile 系统调用

A sendfile 需要经过用户态
B 零拷贝消除用户态拷贝,sendfile 由内核直接传输文件到 socket,减少拷贝与系统调用 ✓ 正确答案
C 零拷贝增加拷贝次数
D sendfile 与普通 read/write 相同
#

4. 零拷贝的三种实现,mmap、sendfile、splice 在内核中的拷贝路径差异如何?

A mmap 适合随机访问、sendfile 适合文件到 socket、splice 适合任意 fd 间,都减少用户态拷贝但路径不同 ✓ 正确答案
B 三者完全相同
C sendfile 需要用户态拷贝
D splice 只能用于文件
#

5. Direct Buffer 与零拷贝的内存对齐

A Direct Buffer 不对齐
B 对齐与零拷贝无关
C Direct Buffer 按页对齐为内核零拷贝提供条件,避免退化为普通拷贝 ✓ 正确答案
D 堆内缓冲也满足零拷贝对齐
#

6. Java 25 虚拟线程下零拷贝的协作

A 虚拟线程不能使用零拷贝
B 虚拟线程执行 transferTo 零拷贝时释放 carrier 线程,适合大量并发文件传输 ✓ 正确答案
C 零拷贝与虚拟线程冲突
D transferTo 在虚拟线程下无收益
#

7. Java NIO FileChannel.transferTo 的真实收益

A transferTo 只能用于小文件
B transferTo 无真实收益
C transferTo 增加拷贝
D transferTo 减少拷贝与系统调用,在大文件纯搬运场景收益显著,但受平台与 2GB 限制 ✓ 正确答案
#

8. Kafka 的零拷贝设计与 JVM 边界

A Kafka 通过 JVM 的 transferTo 调用内核 sendfile 实现零拷贝,JVM 是传递层,限于纯搬运 ✓ 正确答案
B Kafka 在 JVM 内实现零拷贝
C JVM 可直接执行系统调用
D Kafka 零拷贝与 JVM 无关
#

9. Netty 的 CompositeByteBuf 与零拷贝设计

A CompositeByteBuf 会复制所有数据
B CompositeByteBuf 组合多个缓冲逻辑一体但不复制数据,实现零拷贝 ✓ 正确答案
C CompositeByteBuf 只能含一个缓冲
D CompositeByteBuf 与零拷贝无关
#

10. 零拷贝在小文件和大文件下的差异

A 零拷贝对小文件收益最大
B 零拷贝与文件大小无关
C 零拷贝大文件收益显著,小文件收益有限(系统调用开销摊销不明显) ✓ 正确答案
D 小文件用零拷贝总是最优
#

11. 零拷贝的诊断(strace/perf)

A strace 跟踪 sendfile 系统调用验证零拷贝,perf 分析 CPU 与拷贝开销 ✓ 正确答案
B strace 只能分析内存
C perf 无法分析 CPU
D 零拷贝无法诊断
#

12. Direct Buffer 与堆外内存,分配/回收(Cleaner/虚引用)与 GC 的关系如何?

A Direct Buffer 堆外内存靠 Cleaner(虚引用)随 GC 回收,时机不确定,需池化复用 ✓ 正确答案
B 堆外内存由 GC 直接管理
C Direct Buffer 回收是确定性的
D 堆外内存不受任何限制
#

13. FileChannel.transferTo 与普通 read/write 的对比,什么场景能真正减少用户态拷贝?

A read/write 也减少用户态拷贝
B transferTo 在文件到 socket 纯搬运时减少用户态拷贝,需加工数据时用 read/write ✓ 正确答案
C transferTo 总是减少用户态拷贝
D transferTo 需要经过用户态
#

14. 高性能 IO 的工程实践,Netty 中零拷贝(CompositeByteBuf/FileRegion)如何使用?

A FileRegion 会复制数据
B CompositeByteBuf 必须复制
C Netty 无零拷贝
D CompositeByteBuf 组合缓冲不复制、FileRegion 文件零拷贝,用于协议拼接与文件发送 ✓ 正确答案
#

15. RocketMQ 的存储设计,CommitLog 与 ConsumeQueue 基于 mmap 顺序写,与 Kafka 的 sendfile 读路径对比

A 两者存储设计完全一致
B RocketMQ 用 sendfile 写
C Kafka 用 mmap 读
D RocketMQ 用 mmap 顺序写 CommitLog 提升写性能,Kafka 读路径用 sendfile 零拷贝 ✓ 正确答案
#

16. GatheringByteChannel 的 scatter/gather,一次系统调用读写多个缓冲区,与零拷贝的关系和适用场景

A scatter/gather 消除用户态拷贝
B scatter/gather 与零拷贝相同
C scatter/gather 一次系统调用处理多个缓冲,减少系统调用而非消除拷贝,用于协议多缓冲组装 ✓ 正确答案
D scatter/gather 只能单缓冲
#

17. FileChannel.transferTo 的部分传输,单次约 2GB 上限需循环调用,返回值小于请求长度时的处理

A transferTo 一次传输全部
B transferTo 可能部分传输且有 2GB 上限,需循环调用累加返回值直到完成 ✓ 正确答案
C 返回值小于请求即为错误
D transferTo 无上限
#

18. 零拷贝在 HTTP/3 与 HTTP/2 协议栈的实现

A HTTP/3 零拷贝更简单
B 两者零拷贝完全相同
C QUIC 无需内核支持
D HTTP/2 可基于 sendfile 零拷贝,HTTP/3(QUIC)因用户态多路复用与加密零拷贝更难 ✓ 正确答案
#

19. 内存映射文件的限制,文件大小与地址空间、并发写与持久化语义如何?

A 内存映射无大小限制
B 内存映射受地址空间限制、并发写需同步、持久化需 force 刷盘 ✓ 正确答案
C 映射写立即持久化
D 并发写无需同步
#

20. 零拷贝与加密流量,TLS 下数据需在用户态加解密,sendfile 无法直接用于密文,以及内核态 TLS 的例外

A sendfile 可直接用于 TLS
B TLS 不影响零拷贝
C TLS 需用户态加解密,sendfile 无法直接用于 TLS,KTLS 内核加密是零拷贝的例外 ✓ 正确答案
D KTLS 与零拷贝无关