-
正确处理Java线程中断需响应中断信号而非忽略,调用thread.interrupt()设置中断状态,线程应通过isInterrupted()检查或捕获InterruptedException做出响应;阻塞方法抛出异常后应恢复中断状态并清理资源;循环任务中需定期检测中断以及时退出;线程池中可通过future.cancel(true)触发中断,确保任务支持中断并完成清理,保持信号传递。
-
Java并发编程核心在于理解内存模型、状态共享与协作机制,需掌握volatile、synchronized原理、JDK并发工具类边界、线程池调优及竞态排查方法。
-
抽象类用于提取共性、规范结构和减少重复,适合共享代码与统一模板的场景。1.定义模板行为:通过模板方法模式固定算法骨架,子类实现变化步骤,如不同格式的数据导出流程;2.共享通用属性和方法:将图形系统的颜色、填充等公共状态封装在抽象父类中,子类继承并实现特有逻辑;3.强制子类实现关键行为:支付系统中通过抽象方法确保各支付方式均实现验证与执行操作;4.部分实现的接口替代方案:日志系统中抽象类提供通用格式化功能,子类定制输出方式。相比接口,抽象类支持默认实现和状态管理,适用于既有共性又有差异的场景,提升系统可维护
-
i++不是原子操作,因其被拆分为读取、计算、写回三步,多线程下易发生竞态导致结果错误;volatile仅保可见性不保原子性;synchronized、AtomicInteger、ThreadLocal等是常用线程安全方案。
-
必须确认系统架构与JDK版本匹配:32位(i686/i386)仅支持OpenJDK,64位(x86_64/aarch64)才可安装JDK11+;下载包名须含x64或aarch64;解压后务必正确配置JAVA_HOME指向JDK根目录并更新PATH,否则java-version成功但javac等工具不可用。
-
CopyOnWriteArrayList适合读多写少场景,如监听器列表、配置缓存、广播队列;写操作频繁时性能骤降,因每次写需全量复制数组;迭代时修改不抛ConcurrentModificationException,但Iterator.remove()无效。
-
Callable和Runnable的核心区别在于:Callable的call()方法有返回值且可抛异常,Runnable的run()方法无返回值且不能抛受检异常;前者适用于需获取结果的场景,后者适用于无需返回的场景。
-
使用DocumentBuilder.newDocument()创建空XML文档后,getDocumentElement()必然返回null,因为此时文档尚未包含任何元素;必须先通过doc.appendChild(element)显式添加根元素,才能获得有效的文档根节点。
-
优先用ArrayList存待办事项,因其随机访问和尾部增删性能优于LinkedList;需重写Task的equals/hashCode;遍历时用迭代器remove或removeIf避免ConcurrentModificationException;持久化推荐JSON或SQLite而非序列化。
-
多态是工厂模式的底层支撑,工厂返回共同接口(如ABC或interface)的实例,各子类实现同名方法,调用方只依赖接口而不感知具体类型,否则破坏多态契约。
-
应使用SecureRandom而非Random,因其基于系统熵源、抗预测性强;双色球需用shuffle候选列表实现去重与均匀分布,并对红球升序排列;控制台交互须防护输入异常,输出宜用Unicode方块字符跨平台对齐。
-
集合框架比数组更灵活可扩展,但需依场景选择:动态扩容、类型安全、内置算法和对象操作选集合;固定长度、高性能读取、低内存开销选数组。
-
组合优于继承,即优先通过对象组合实现功能复用而非继承。继承导致紧耦合、破坏封装、层次膨胀且行为静态;组合则通过委托实现松耦合、运行时动态切换行为、易于测试,并避免多继承限制。例如订单处理中,用DiscountStrategy接口配合Order类持有策略对象,新增折扣方式无需修改原有代码,符合开闭原则。当存在稳定“is-a”关系时可使用继承,否则应优先选择组合以提升系统灵活性和可维护性。
-
答案:Java中Stream.reduce可用于累加操作,支持指定初始值、处理空流及并行计算;通过实例展示了数字求和、空流处理及对象属性累加的实现方式。
-
答案:CopyOnWriteArrayList通过写时复制实现线程安全,读操作无锁、写操作复制数组,适用于读多写少场景,如配置缓存;遍历时不抛ConcurrentModificationException,但写性能低、内存开销大,不支持迭代器删除。