答:BIO 通常指传统阻塞 I/O,调用线程可能一直等待数据或操作完成;NIO 提供通道、缓冲区和选择器等能力,网络通道可配置为非阻塞并由 Selector 管理就绪事件;AIO 则通过异步通道在操作完成后通知结果。NIO 不等于所有操作都非阻塞,AIO 也不保证底层完全不使用线程。
答:WAR 是 Web 应用的归档格式。传统部署会把它交给兼容的 Servlet 容器运行,例如通过容器部署目录或管理工具部署。部署前要匹配 Java、框架和容器的 Servlet/Jakarta 版本,不能认为“改成 .war 后放进任意 Tomcat 就能运行”。
答:可以按用途记:ExecutorService、ThreadPoolExecutor 管理任务执行;Future、CompletableFuture 表达结果与完成组合;CountDownLatch、CyclicBarrier、Phaser 协调阶段;Semaphore 限制许可;Lock、原子类及并发集合帮助控制共享访问。不是类名越多,答案就越完整。
答:先纠正前提:Java String 存储文本值,本身不带“这是 GB2312 字符串”的编码标签。正确流程是用源编码把字节解码成文本,再用目标编码编码为字节。但 ISO-8859-1 不能表示普通中文,因此不能把任意中文无损转成该编码的正常文本。
答:题目里的“C++ 虚类”通常指含纯虚函数的抽象类,它与 Java 接口都能定义需要具体类型实现的行为,并支持多态。但二者不是同一种结构:C++ 抽象类可以包含实例数据、构造函数和具体实现;Java 接口不能携带普通对象的实例字段或构造函数。
答:BufferedReader 是字符输入流,继承 Reader,通过缓冲减少某些底层读取调用。常用方法包括 read、readLine、lines、mark/reset 和 close。它处理字符,不负责替你猜出原始字节的编码;字节到字符的解码应在合适的上游完成。
答:传统 I/O 的四个主要抽象基类是 InputStream、OutputStream、Reader、Writer。前两者处理字节,后两者处理字符;输入与输出表示相对当前程序的数据方向。它们不是一个所有流都继承的共同 Stream 父类。
答:枚举用于表达一组明确、有限的命名实例,例如订单状态或星期。Java enum 编译后属于特殊类,直接继承 Enum;每个枚举常量对应一个实例。它可以有字段、方法、构造器并实现接口,远不只是“把字符串换成常量”。
答:加载是把类的定义引入运行环境,连接包含验证、准备和解析,初始化才会执行类初始化逻辑。JVM 可以按需要安排加载与连接,因此面试中常背的 new、调用静态方法等“主动使用”,更准确地说主要是在讨论初始化触发条件,不能把三个阶段当成同一件事。