-
Timer.cancel()不能中断正在执行的TimerTask,仅清空队列并停止调度线程;需在run()中检查中断状态或使用volatile标志位,配合purge()和置null,或改用支持中断的ScheduledExecutorService。
-
finally块不能强制关闭资源,仅保证代码执行;常见失效原因是未判空、未捕获close()异常,导致NPE或异常中断后续关闭流程。
-
Collections.synchronizedList()可直接包装ArrayList获得线程安全代理,但仅保证单操作原子性;复合操作和迭代需手动同步,且高并发下性能受限,可考虑CopyOnWriteArrayList等替代方案。
-
ZooKeeper通过临时顺序节点和Watch机制实现分布式锁,客户端在锁路径下创建临时顺序节点并判断是否为最小序号,若是则获得锁,否则监听前一节点删除事件以实现公平、可靠的锁竞争与自动释放。
-
TreeSet的Comparator必须是函数式接口实现,排序逻辑由其决定且初始化后不可变;多字段排序须用Integer.compare()等安全方法防溢出;推荐用Comparator.comparing().thenComparing()链式调用提升可读性与健壮性;自定义Comparator还直接影响contains()和remove()行为,判定相等仅依据compare(a,b)==0。
-
Java是纯面向对象语言,所有代码必须写在类中,无法实现纯面向过程编程;所谓“面向过程风格”仅是在类中用静态方法、无状态类线性组织逻辑,回避封装、继承、多态等OOP特性。
-
当两个DTO类型字段完全一致但位于不同包(甚至不同项目)时,无法直接强制类型转换;推荐使用MapStruct进行编译期类型安全映射,避免ObjectMapper反射带来的运行时隐患与维护风险。
-
Predicate是函数式接口,不可直接实例化,须用lambda、方法引用或静态工厂方法;其and/or/negate返回新对象,支持短路逻辑与条件拼接,但禁用IO和状态操作。
-
答案:验证JAVA_HOME需检查变量值、路径存在性、bin目录及java/javac可用性,并确认指向JDK。
-
Collections.sort()要求List元素实现Comparable或传入Comparator,仅支持List且不返回新集合;Stream.sorted()创建新集合;TreeSet/TreeMap天然有序但相等性依赖compareTo而非equals。
-
Collections.singleton()内存占用极小,因其返回内部静态类Collections$SingletonSet实例,仅持一个引用字段、无容量/哈希表/扩容机制,对象约16字节,不复制元素、无size字段、无同步开销。
-
ATM类设计需保证线程安全:账户余额用AtomicInteger或synchronized保护;Account与ATM解耦;余额操作返回boolean;避免在getter/toString中做业务判断;withdraw需严格参数校验。
-
InputStream.read()会阻塞是因为它是同步阻塞调用,需等待有数据可读、流被关闭或到达末尾才返回;在TCP或串口等无明确EOF的场景中,若对端不关闭输出,read()将一直挂起。
-
invokespecial指令用于调用实例初始化方法、私有方法及父类实例方法,采用静态绑定且不遵循多态;构造器中必须以此调用<init>,私有方法仅限本类内调用,super.调用强制绑定父类版本,不涉及字段访问。
-
corePoolSize和maximumPoolSize应依任务类型设定:IO密集型用公式计算,CPU密集型≈CPU核数;maximumPoolSize仅在有界队列下有效,LinkedBlockingQueue默认无界致其失效;keepAliveTime建议60秒,过短增调度压力,过长占资源;拒绝策略应自定义日志告警而非直接使用JDK默认策略。