1. 文章
  2. Java 进阶线
  3. 网络、框架与复习

Java进阶复习自测

更新于 11 分钟阅读 第 15 / 15 站 #java#review

先作答,再查看后半部分的参考答案。能说清原因比背出术语更重要。每个主题 4 题,共 56 题。

我的学习 →

Java 进阶线 · 线路目录
本页导读

Java 进阶复习自测

先作答,再查看后半部分的参考答案。能说清原因比背出术语更重要。每个主题 4 题,共 56 题。

说明:题目按 01—14 的主题编写,与现行文章的主题编号一一对应,可继续使用。文章已于 2026-10-16 改为按课程 PPT 逐日转写;若某题的表述与文章细节不同,以文章(及 课程资料校正与版本说明)为准。

问题

01|static、初始化与继承:对象如何共享数据和复用行为

  1. 静态方法为什么不能直接读取实例字段?

  2. 父类没有无参构造器时,子类怎么办?

  3. 重载和重写由谁决定?

  4. 副卡题为什么需要共享账户对象?

02|多态、抽象类与接口:让业务依赖稳定的约定

  1. Animal a = new Dog() 中,谁决定能调用哪些方法?

  2. final List 是否意味着列表不能新增元素?

  3. 抽象子类必须实现父类全部抽象方法吗?

  4. 两个接口的同名 default 方法冲突怎么办?

03|内部类、枚举与泛型:把对象和类型边界表达清楚

  1. 泛型类的静态方法能直接返回类级 T 吗?

  2. List<? extends Number> 为什么不能添加 Integer?

  3. 两个 Integer(200) 的 == 结果是否跨环境固定?

  4. 匿名内部类含 static 方法,在 Java 17 中必然报错吗?

04|常用 API:字符串、精确金额与日期时间

  1. BigDecimal 为什么优先从字符串构造?

  2. Period.getDays() 是两个日期间的总天数吗?

  3. LocalDateTime 能否独立确定全球同一个时刻?

  4. 为什么倒计时每次要重新计算剩余时间?

05|Lambda、方法引用、排序与正则表达式

  1. Lambda 可以直接用于有两个独立抽象方法的接口吗?

  2. String::compareTo 中第一个参数扮演什么角色?

  3. 二分查找为什么不能直接作用于乱序数组?

  4. matches 和 find 有什么区别?

06|异常与 Collection:失败如何表达,元素如何组织

  1. 受检异常是不是编译时就发生了?

  2. HashSet 只重写 equals 足够吗?

  3. TreeSet 按年龄比较会留下所有同龄学生吗?

  4. ConcurrentModificationException 是否一定代表多线程问题?

07|Collections 与 Map:排序、统计和购物车建模

  1. TreeMap 是按键排序还是按值排序?

  2. Map.get 返回 null 可以直接证明键不存在吗?

  3. 购物车仅用商品名称做键为什么容易出错?

  4. Arrays.asList 返回的列表能新增元素吗?

08|Stream、File 与递归:数据处理和目录遍历

  1. 没有终结操作,filter 一定已执行吗?

  2. 同一个 Stream 能先 count 再 collect 吗?

  3. new File 是否会自动创建磁盘文件?

  4. 目录大小递归遇到 listFiles 为 null 应怎么办?

09|字符编码与字节 IO:文件复制为什么会损坏或乱码

  1. read(buffer) 是否保证填满 buffer?

  2. 复制中文文件必须先解码吗?

  3. 为什么逐个字节块转换为 String 可能乱码?

  4. 目录剪切的复制删除方案什么时候能删源?

10|字符流、缓冲流与对象序列化:IO 工具如何组合

  1. BufferedReader.readLine 是否保留换行符?

  2. 缓冲字符流的 8192 char 就是 8192 字节吗?

  3. DataInputStream 可以随意改变读取顺序吗?

  4. ArrayList 可序列化,是否意味着任何元素都可写入?

11|Properties、XML 与日志:配置如何读取,问题如何定位

  1. load(InputStream) 会默认按 UTF-8 读 properties 吗?

  2. XML 能被解析就代表业务字段正确吗?

  3. SLF4J 和 Logback 各负责什么?

  4. logback.xml 是否永远必须放在源码 src 根目录?

12|多线程、同步与线程池:共享状态如何保持正确

  1. 两个线程各自 new 一个锁能保护同一个账户吗?

  2. volatile int 的 count++ 是否原子?

  3. wait 为什么一般放在 while 中?

  4. shutdown 是否会阻塞到所有任务结束?

13|网络编程:UDP、TCP 与文件上传协议

  1. TCP 一次 write 是否对应对端一次 read?

  2. 为什么上传文件后要先 flush 再 shutdownOutput?

  3. TCP 传输确认是否证明文件已经保存成功?

  4. HTTP Content-Length 按字符数还是字节数?

14|单元测试、反射、注解与动态代理:理解框架的基础机制

  1. getDeclaredMethods 会返回父类方法吗?

  2. 注解没有 Retention 时,反射一定能看到吗?

  3. JDK 动态代理能直接强转为目标实现类吗?

  4. 代理里为什么要解开 InvocationTargetException?

参考答案

  1. 静态方法没有当前实例。必须通过明确的对象引用读取实例字段。 回看文章

  2. 在 Java 17 的子类构造器首条语句位置显式调用可访问的 super(参数)。 回看文章

  3. 重载在编译期按签名及参数类型选择;重写实例方法在运行期按实际对象分派。 回看文章

  4. 主卡和副卡必须观察同一个余额,继承字段本身不会让两个对象共享实例状态。 回看文章

  5. 声明类型 Animal 决定编译期可见方法;Dog 决定被重写实例方法的实际实现。 回看文章

  6. 不是。引用不能重新指向别的列表,列表自身仍可能可修改。 回看文章

  7. 不必。具体子类必须提供所有所需实现;抽象子类可以继续保留抽象方法。 回看文章

  8. 实现类显式重写该方法,根据设计选定或组合实现。 回看文章

  9. 不能直接使用类级类型参数;方法可独立声明 static <T> T method(…)。 回看文章

  10. 实际列表也可能是 List<Double>,编译器无法保证添加 Integer 安全。 回看文章

  11. 不应依赖。缓存可能扩大,业务数值比较使用 equals 或明确非空的拆箱。 回看文章

  12. 不必然。Java 16 起允许静态成员,但静态上下文仍受实例访问规则限制。 回看文章

  13. 避免把二进制 double 的近似细节带入十进制金额。 回看文章

  14. 不是,它只是年/月/日跨度中的日部分。总天数使用 ChronoUnit.DAYS。 回看文章

  15. 不能。它没有时区或偏移量,需要结合规则才能转换为 Instant。 回看文章

  16. 调度间隔可能延迟,直接逐次减一会积累漂移。 回看文章

  17. 不能,目标必须是函数式接口。 回看文章

  18. 作为方法接收者,后续参数传给该实例方法。 回看文章

  19. 排除一半候选区间的推理依赖排序规则,没有有序性就可能丢掉目标。 回看文章

  20. matches 检查整体匹配;find 搜索文本中的下一个匹配片段。 回看文章

  21. 不是。编译器检查处理义务,异常事件仍在运行期发生。 回看文章

  22. 不够,要同时遵守 hashCode 约定。 回看文章

  23. 不一定。比较结果为 0 就按集合规则视为重复,应补充业务所需次级比较条件。 回看文章

  24. 不是,单线程中边迭代边通过集合结构性修改也可能触发。 回看文章

  25. 按键的自然顺序或指定比较器排序。 回看文章

  26. 不可以,允许 null 值的 Map 可能已存在该键;必要时用 containsKey。 回看文章

  27. 不同店铺或不同商品 ID 可能同名,键必须表达实际业务身份。 回看文章

  28. 不能,它是数组支持的固定大小列表;需复制到 ArrayList 后再新增。 回看文章

  29. 通常没有,Stream 中间操作是惰性的,需要终结操作触发。 回看文章

  30. 不能重复消费,需要从数据源重新获取流。 回看文章

  31. 不会,只创建表示路径的对象。 回看文章

  32. 按无法枚举的错误处理或明确记录跳过,不能默默当作空目录。 回看文章

  33. 不保证,返回值才是本轮有效字节数。 回看文章

  34. 不需要,原样复制字节即可。 回看文章

  35. 多字节字符可能跨块,独立解码会丢失连续状态。 回看文章

  36. 确认整个目标复制成功并满足验证约定后,才能开始删除源。 回看文章

  37. 不保留。按行读写可能改变换行格式。 回看文章

  38. 不是,字符数与编码后的字节数不同。 回看文章

  39. 不可以,类型与顺序必须符合写入协议。 回看文章

  40. 不是,所需对象图中的非 transient 对象也必须满足序列化要求。 回看文章

  41. 不会,属性流 API 按 ISO-8859-1 规则。中文 UTF-8 可使用显式编码 Reader。 回看文章

  42. 不代表,仍需校验必填、范围、唯一性等业务约定。 回看文章

  43. SLF4J 提供日志调用接口,Logback 提供日志实现与输出配置。 回看文章

  44. 不是,关键是运行时 classpath 和加载配置;构建工具有自己的资源目录约定。 回看文章

  45. 不能,同一共享状态需要统一的锁或其他正确同步协议。 回看文章

  46. 不是,它仍然是读、改、写的复合操作。 回看文章

  47. 唤醒后条件可能仍不满足,需要处理虚假唤醒和竞争。 回看文章

  48. 不会。需要使用 awaitTermination 等方式等待结束。 回看文章

  49. 不对应,TCP 提供字节流,消息边界由应用协议定义。 回看文章

  50. 先把缓存内容交给底层发送,再通知对端本方向结束,同时保留回执读取。 回看文章

  51. 不证明,应用层需要在完成保存后返回回执。 回看文章

  52. 按响应正文编码后的字节数。 回看文章

  53. 不会,它返回当前类声明的方法;getMethods 返回 public 方法并包含适用继承成员。 回看文章

  54. 不能,默认 CLASS,运行期读取需要 RUNTIME。 回看文章

  55. 不能按这个假设使用,它实现指定接口,应按接口使用。 回看文章

  56. 保留目标方法真实异常语义,避免反射包装掩盖业务失败。 回看文章

五个综合练习

  1. 学生信息模块:用接口切换平均分算法,用 List 保存学生,用 Comparator 排序;覆盖空班级、同分和去极值人数不足。
  2. 购物车:用店铺 ID 与商品 ID 作为身份,用 Map 合并数量,金额用 BigDecimal;验证同店同商品合并、不同店铺分开、折扣门槛。
  3. 文件整理工具:筛选指定后缀,保留相对层级,按字节复制;验证空目录、同名文件、目标位于源内和复制失败时源数据保留。
  4. 并发账户:多个任务操作同一个账户,明确等待完成与线程池退出;确认无丢失更新、余额不变量成立、失败能被观察。
  5. 文本上传:客户端按约定编码发送,服务端处理并保存后回执;验证 EOF 协议、中文、唯一文件名、超时与失败回执。

每次复习挑一个综合练习,不看参考代码重新实现。把输入、输出、边界和失败状态写清,再编写针对这些约定的验证。

返回学习导航