-
绝大多数情况下catch块必须记录日志,但仅限真正处理并终结异常传播路径时;业务异常用warn,系统异常用error并保留完整堆栈;避免重复记录、截断堆栈及异步场景日志丢失。
-
先使用setx命令永久配置Java环境变量。确认JDK安装路径后,用setxJAVA_HOME设置根目录,再用setxPath添加%JAVA_HOME%\bin到系统Path,最后重新打开cmd验证java-version和javac-version输出。
-
Hashtable一放null就抛NullPointerException,因其所有public修改方法均在执行时立即调用Objects.requireNonNull(key/value),将键值非空作为设计契约;containsKey(null)和containsValue(null)则始终返回false。
-
静态方法适用于无状态、纯函数型工具逻辑,如日期格式化;应避免隐含依赖、副作用及测试障碍,优先采用依赖注入与接口设计。
-
StringRedisTemplate.opsForValue()存不进数据最常见原因是未调用set()或连接/配置错误;set()是同步的,需检查Redis连通性、序列化器(应使用StringRedisSerializer)、键过期设置及是否误用RedisTemplate。
-
“Java成品项目”指已开发完成、可直接运行且具备完整功能的Java项目,含建表SQL、配置文件、真实接口及示例页面,区别于空骨架脚手架;其核心是高完成度但强技术栈绑定,使用时需重点核查pom.xml硬编码、TODO数量及配置安全性。
-
Java的char是无符号16位整数(0–65535),不等价于Unicode字符;增补字符(U+10000+)需用代理对表示,应使用codePointAt、codePoints等API处理码点而非charAt。
-
在Flink滚动处理时间窗口(如5分钟)中,SinkWriter.Context.timestamp()无法获取窗口起始/结束时间;必须使用ProcessWindowFunction才能准确访问窗口边界。
-
能,但需满足接口定义稳定、实现类可独立打包、服务发现路径被正确扫描三个条件;JavaSPI仅支持本地classpath静态加载,不解决微服务远程发现与版本冲突问题。
-
静态代码块不能替代构造函数前的实例初始化,它仅用于类加载时的一次性静态字段初始化,不感知实例;实例级统一预处理应使用私有基构造函数或Kotlin的init块。
-
Java模块化下资源读取失败主因是模块未用opens声明开放资源包,exports仅限public类,opens才支持资源加载等运行时操作,需在module-info.java中显式opens包并指定目标模块。
-
Map.merge()仅在键已存在时调用remappingFunction;键不存在则直接put,不执行函数;返回null会删除该键;多线程需用ConcurrentHashMap保证原子性。
-
JavaAgent通过Instrumentation接口实现运行时字节码增强,核心是拦截类加载并修改字节码,支持premain启动时或agentmain运行时挂载;提供addClassTransformer(针对新加载类)和retransformClasses(刷新已加载类)两种方式,仅允许修改方法体,需注意限制与稳定性。
-
线程池未关闭会导致JVM无法退出和RejectedExecutionException异常;应先调用shutdown()再配合awaitTermination()等待终止,超时后可shutdownNow();推荐使用AutoCloseable封装或Spring的destroyMethod自动管理。
-
泛型抽象工厂通过类型参数统一管理业务实体创建,以TypeRegistry维护抽象类型到具体实现的映射关系,支持命名注册与运行时按名创建,实现解耦与灵活切换。