# 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 与零拷贝无关