-
必须手动移除SelectionKey,因为selectedKeys()是复用且不自动清理的集合;需在迭代中调用iter.remove()或key.cancel(),否则会导致重复事件、CPU飙升和连接异常。
-
WeakHashMap使用弱引用保存键,当键无外部强引用时可被GC回收,适用于缓存等易导致内存泄漏的场景。其值仍为强引用,需注意避免反向引用造成泄漏。与HashMap类似,但性能略低,因每次访问可能触发无效Entry清理。常用于GUI组件映射、附加元数据、弱监听器等场景,是标准库中开箱即用的弱引用Map实现。
-
答案:Java中通过BlockingQueue接口实现线程安全的阻塞队列,支持生产者-消费者模型;其核心特性为队列满时插入阻塞、队列空时移除阻塞;常用实现类有ArrayBlockingQueue(有界数组队列)、LinkedBlockingQueue(可选有界链表队列)、PriorityBlockingQueue(优先级排序)、DelayQueue(延迟获取)和SynchronousQueue(不存储元素,直接传递);使用put()和take()方法实现阻塞式插入与移除,offer()和poll()支持超
-
在Reactor响应式编程中,禁止在非阻塞线程(如reactor-http-nio)中调用block();应使用then()链式组合Mono,并通过map()或flatMap()实现后续异步操作与数据持久化。
-
通过包装任务或扩展线程池实现Java线程池日志记录,1.使用LoggingTask包装Callable,记录任务开始、结束及异常信息;2.自定义LoggingThreadPool继承ThreadPoolExecutor,重写beforeExecute和afterExecute方法统一拦截任务执行生命周期;3.结合SLF4J等日志框架输出结构化日志,利用MDC传递上下文信息;4.注意控制日志级别、避免性能损耗,确保异常捕获完整,生产环境采用异步写入策略。
-
不能。finally块仅保证执行,不自动关闭资源;需手动在其中用try-catch分别关闭各资源并判空,避免异常中断清理;Java7+推荐try-with-resources,但老代码仍依赖正确编写的finally。
-
CheckedException通过强制处理预期错误提升API可靠性,适用于外部依赖操作,但滥用会增加调用负担,需结合具体场景权衡使用。
-
选ArrayBlockingQueue还是LinkedBlockingQueue取决于场景:前者适合长度可预估、内存敏感、吞吐稳定;后者适合速率波动大、避免阻塞生产者。根本差异在锁机制与容量语义,而非数据结构本身。
-
Java多态本质是编译时类型与运行时类型不同,依赖继承、重写和向上转型三者缺一不可;static、private、final方法及构造方法不参与多态;滥用instanceof和强制转型违背多态初衷。
-
Java项目用Javadoc生成含中文注释的API文档时,需统一源文件、Javadoc读取及HTML输出编码为UTF-8:确保源码存为UTF-8,IDE配置对应编码,命令行加-encoding和-docencoding参数,Maven/Gradle插件中同步设置三者。
-
图形化编程中用整型变量控制像素点步进移动,需定义x、y为整型变量并基于步长加减更新,配合输入响应、帧循环或点击事件触发位移,同时做整型转换与边界限制以确保坐标有效。
-
Integer.toBinaryString仅适用于非负整数,返回无前导零的纯二进制字符串;传入负数会返回其32位补码形式,如需带符号表示需手动拼接。
-
newSemaphore(1)不等于synchronized,因前者基于可配置许可数、支持超时与批量获取,后者基于独占monitor机制;关键差异在于资源建模方式与线程协作模型。
-
Springfox3.x在SpringBoot2.6+需配置spring.mvc.throw-exception-if-no-handler-found:false且spring.resources.add-mappings:true,访问路径为/swagger-ui/;SpringBoot3.x不兼容Springfox,须迁移到springdoc-openapi。
-
Java方法名必须是动词或动词短语,以小写字母开头、驼峰式命名,准确表达行为意图;布尔方法须以is/has/can开头;应避免名词前置、缩写、同义词混用及过度泛化。