文件与网络 I/O 及零拷贝

共 21 题
#

1. Files.copy 与 Files.move 的原子性

A move 在任何情况下都是原子的
B move 在同一文件系统基于 rename 是原子的,跨文件系统退化为复制+删除非原子;copy 默认非原子 ✓ 正确答案
C copy 默认是原子的
D ATOMIC_MOVE 在底层不支持时会被忽略
#

2. FileLock 文件锁,tryLock 非阻塞与重叠检测、跨进程互斥与 JVM 内锁的差异,进程崩溃后锁的释放

A tryLock 会阻塞等待,直到获得锁
B 文件锁与 JVM 内锁完全等价
C 进程崩溃后锁不会释放
D tryLock 非阻塞、文件锁用于跨进程互斥(区别于 JVM 内锁),进程崩溃后操作系统自动释放锁 ✓ 正确答案
#

3. FileSystems 与 in-memory 文件系统(Jimfs)

A FileSystems.newFileSystem 可创建自定义文件系统,Jimfs 提供内存文件系统用于测试与隔离 ✓ 正确答案
B FileSystems 只能获取默认文件系统
C 内存文件系统需要落盘
D Jimfs 是操作系统文件系统
#

4. FileSystems 与自定义文件系统

A 自定义文件系统必须修改 JDK 源码
B FileSystems.newFileSystem 配合 FileSystemProvider SPI 可创建 zip/内存/远程等自定义文件系统 ✓ 正确答案
C FileSystemProvider 不是 SPI 机制
D 只能创建默认文件系统
#

5. Files.createTempFile 的临时文件清理

A 临时文件会自动删除
B 临时文件无法手动删除
C 临时文件删除后 JVM 必须重启
D 临时文件不会自动删除,需主动 deleteIfExists 或 deleteOnExit 清理,避免残留 ✓ 正确答案
#

6. Files.deleteIfExists 与删除语义

A deleteIfExists 不存在也会抛异常
B delete 可以删除非空目录
C delete 不存在抛 NoSuchFileException,deleteIfExists 不存在返回 false,两者都只能删空目录 ✓ 正确答案
D 两者语义完全相同
#

7. Files.getPosixFilePermissions 与权限位

A 权限位只有读写两种
B POSIX 权限位是 rwx 三组(所有者/组/其他)共 9 位,get/set 方法仅 Unix 文件系统支持 ✓ 正确答案
C 权限无法修改
D Windows 上同样支持 POSIX 权限
#

8. Files.isSameFile 与符号链接

A isSameFile 比较实际文件(解析符号链接),比 equals 的路径字符串比较更准确 ✓ 正确答案
B isSameFile 只比较路径字符串
C isSameFile 不解析符号链接
D isSameFile 与 equals 完全等价
#

9. Files.readAllBytes vs Files.lines 的内存代价

A readAllBytes 一次性读入内存适合小文件,lines 流式逐行适合大文件并需关闭释放句柄 ✓ 正确答案
B lines 会一次性读入全部内存
C readAllBytes 适合大文件
D 两者内存代价相同
#

10. Files.readAttributes 与文件元数据

A readAttributes 只能读取文件大小
B readAttributes 读取元数据,属性视图有 Basic/Dos/Posix,支持按名称读取单个属性 ✓ 正确答案
C 元数据只有 Basic 一种视图
D readAttributes 无法读取文件时间
#

11. Files.walk/Files.find 的 Stream API 集成在大目录遍历中的注意事项

A Stream 无需关闭
B walk 会一次性遍历全部
C 返回的 Stream 需 try-with-resources 关闭避免 fd 泄漏,注意惰性遍历、深度限制与异常处理 ✓ 正确答案
D find 无法匹配文件
#

12. Files.walk/Files.list 的流式遍历

A walk 只列出一层
B walk 与 list 完全相同
C list 会递归遍历
D walk 递归遍历目录树,list 只列出单层子项,两者都返回需关闭的 Stream ✓ 正确答案
#

13. Files.walkFileTree 的递归控制

A walkFileTree 用 FileVisitor 回调(preVisitDirectory 等)精细控制递归,walk 用 Stream+maxDepth 声明式 ✓ 正确答案
B walkFileTree 无法控制递归
C walkFileTree 与 walk 完全等价
D walkFileTree 返回 Stream
#

14. Files/Paths 工具类的常用操作

A Paths.get 创建路径,Files 提供创建/判断/读写/复制/删除/属性/遍历等大量操作 ✓ 正确答案
B Paths 提供所有文件操作
C Files 只能创建文件
D Files 无法读取文件内容
#

15. FileChannel.force 与持久化,write 只进操作系统缓存、force 才落盘,与流式输出 flush 的语义差异

A flush 与 force 都保证落盘
B write 只进页缓存,force 相当于 fsync 落盘;flush 只把数据排到内核,不保证落盘 ✓ 正确答案
C force 只是刷新 JVM 缓冲
D write 立即落盘
#

16. AsynchronousFileChannel 异步读写,CompletionHandler 与 Future 两种接口、线程池关联及适用场景

A 无需线程池即可异步
B 只能使用阻塞式读写
C Future 方式是事件驱动的
D 支持 CompletionHandler 回调与 Future 两种结果获取方式,需关联线程池执行回调 ✓ 正确答案
#

17. RandomAccessFile 与 FileChannel 的随机访问,position 定位、读改写场景的取舍与并发差异

A RandomAccessFile 支持内存映射
B 两者都支持 position 定位随机访问,FileChannel 支持 mmap/transferTo 更强大,两者并发访问需注意 position 竞争 ✓ 正确答案
C FileChannel 不支持定位
D 两者并发安全完全相同
#

18. WatchService(JDK 7+)在文件系统变更监控中的事件类型与注册机制

A WatchService 监控单个文件
B WatchService 监控目录,事件有 CREATE/DELETE/MODIFY/OVERFLOW,通过 register 注册目录 ✓ 正确答案
C 事件类型只有 CREATE
D OVERFLOW 表示监控成功
#

19. sendfile/splice 系统调用与 Java

A sendfile 用于文件与 socket 间零拷贝,Java 通过 transferTo 利用它,splice 无直接 Java API ✓ 正确答案
B splice 是 Java 标准 API
C sendfile 需要用户态拷贝
D Java 不能使用 sendfile
#

20. JDK 25 中 Path 的符号链接(Symbolic Link)解析与 LinkOption.NOFOLLOW_LINKS 的安全语义

A 所有操作默认都不跟随链接
B NOFOLLOW_LINKS 会解析链接到目标
C NOFOLLOW_LINKS 不跟随符号链接、操作链接本身,安全场景使用可防止 symlink attack ✓ 正确答案
D 符号链接无法被删除
#

21. ZipFileSystem,通过 FileSystems.newFileSystem 把 zip/jar 挂载为文件系统,与解压读写的应用场景

A ZipFileSystem 只能用于解压到磁盘
B ZipFileSystem 将 zip/jar 挂载为文件系统,用统一 Path/Files API 操作,避免显式解压 ✓ 正确答案
C 挂载 zip 后无法读取内容
D ZipFileSystem 与普通文件系统无关