本文介绍了在 Java 中使用 `ZipInputStream` 读取 ZIP 文档的基本方法。首先在 Maven 中加入 `commons-io` 依赖,然后通过 `ZipFile` 与 `ZipInputStream`(指定 GBK 编码)打开压缩包,使用 `getNextEntry()` 循环遍历每个 `ZipEntry`,打印路径并对非目录且以 `.txt` 结尾的文件读取内容,利用 `IOUtils.readLines` 将流转为字符串列表。代码示例展示了完整的文件读取、文本输出以及资源的安全关闭,运行后可在控制台打印出压缩包内所有文件及 txt 文件内容。

CGLIB 与 JDK 动态代理都是为了解耦而生成代理对象,但实现方式不同。JDK 代理只能对实现接口的类工作,依赖 `Proxy` 与 `InvocationHandler`,通过反射生成代理类;CGLIB 则基于 ASM 字节码技术,为目标类生成子类并重写非 final 方法,适用于没有接口的类。Spring 默认:若 bean 实现接口使用 JDK 代理,否则使用 CGLIB,也可强制指定。性能上,JDK 在 JDK6 以后已优化,在调用次数少时更快;大量调用时 CGLIB 仍有优势,但 JDK8 起已超越。CGLIB 不能代理 final 类或方法,使用时需注意。

在Java开发中应尽量复用对象、避免重复创建。使用字面量或String.valueOf而非new String,可让字符串进入常量池;可变字符场景选用StringBuilder或线程安全的StringBuffer。Boolean也应通过Boolean.valueOf获取共享实例,避免new Boolean产生新对象。基本类型比包装类更高效,尽量减少自动装箱/拆箱。正则匹配时应先用Pattern.compile一次性编译正则,再复用Matcher,避免在循环中频繁创建Pattern,大幅提升性能。通过这些细节可显著降低内存占用和运行时间。

文章指出传统的 try / finally 关闭 I/O 资源代码冗长、易漏且异常处理不佳,推荐使用 Java 7 引入的 try‑with‑resources(需实现 AutoCloseable),示例展示了代码简化后更清晰、自动安全释放资源。文中还提供了手动关闭多个 Closeable 的工具方法,但强调资源释放顺序容易出错,最终结论是 try‑with‑resources 是最优雅、可靠的资源管理方案。

线程池通过 `execute()` 判断是否需要新建线程,核心在于 `addWorker()` 与内部的 `Worker` 类。`Worker` 实现 `Runnable`,在构造时创建唯一的 `Thread`,其 `run()` 调用 `runWorker()`。`runWorker()` 在一个 `while` 循环中先执行 `firstTask`,随后不断从工作队列 `getTask()` 取出新任务并直接调用 `task.run()`。由于 `task.run()` 只在已有线程内部执行,不会再创建线程,线程始终在同一循环里复用,直至任务耗尽或线程池关闭,从而实现高效的线程复用。

文章说明了并发事务在同一数据上可能产生的四类异常:脏写(未提交事务被后续事务覆盖,回滚后前者的修改被撤销),脏读(事务读取了另一个未提交事务的修改,后者回滚导致读取到的值失效),不可重复读(同一事务多次查询同一行,期间其他已提交事务修改导致读取结果不一致),幻读(同一查询条件在事务期间因其他事务插入新行而返回不同的记录数)。这些问题源于事务并发冲突,数据库通过事务隔离级别(READ‑UNCOMMITTED、READ‑COMMITTED、REPEATABLE‑READ、SERIALIZABLE)以及锁、MVCC 等机制予以控制,其中 MySQL 默认使用 REPEATABLE‑READ。