-
在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开头;应避免名词前置、缩写、同义词混用及过度泛化。
-
不能安全、合规地绕过访问权限调用私有构造器——Java的setAccessible(true)在JDK9+强封装下默认抛出InaccessibleObjectException,仅在模块开放、旧版本或开发环境等受限场景可能成功,生产环境应优先采用工厂方法、构建器或依赖注入等设计替代方案。
-
StringBuilder比+拼接快,因其内部维护可变char数组,append()复用内存,仅扩容时新建数组;而String不可变,每次+都生成新对象,增加GC压力。
-
基本数据类型比较用==和!=,浮点数需考虑精度误差,推荐使用容差范围判断相等;大小比较可借助包装类的compareTo方法,但注意自动装箱影响性能,高频操作应优先使用原始类型和直接运算符。