-
安全调用System.exit()应限于命令行工具,Web服务须用ApplicationContext.close();System.getenv()优先于getProperty()读敏感配置;性能计时禁用currentTimeMillis(),改用nanoTime();arraycopy()比循环快且需注意参数顺序;System方法不可mock,需抽象封装。
-
多态基于方法重写和动态绑定,运行时根据实际对象调用方法。父类引用指向子类对象时,实例方法调用子类重写版本,属性和静态方法则不表现多态,如Animala=newDog();a.show()执行Dog的show,a.name取Animal的name,a.print()调用Animal的静态方法。多态提升代码扩展性,实现“编译看左边,运行看右边”。
-
MAVEN_OPTS未生效的主因是设置位置错误或被覆盖:Linux/macOS需在~/.bashrc等配置文件中export,Windows需在IDE中单独配置,CI需在流水线脚本显式传入;参数应仅含JVM启动选项如-Xms1g-Xmx2g-XX:MaxMetaspaceSize=512m,禁用GC策略和Maven属性。
-
DCL单例不加volatile不是线程安全的,因对象构造可能被重排序,导致其他线程看到未初始化完成的实例;必须用volatile禁止重排序并保证可见性。
-
Java接口异常设计是契约的一部分,需区分检查型与非检查型异常:前者强制处理,适用于可恢复业务异常;后者用于编程错误;应封装底层异常为语义明确的自定义异常,避免滥用,配合文档与规范确保一致性。
-
String.lines()返回空流是因为原始字符串不含换行符(\n、\r\n、\r);它语义化分割且不保留终结符,而split()需手动匹配换行变体并可能产生空串。
-
实体类代表事物本身,承载状态与身份,如User、Order;行为类专注做事,提供算法或协调能力,如PaymentProcessor、DiscountCalculator。区分关键在职责:实体被持有,行为被使用。
-
类和对象是Java中面向对象编程的核心概念。类是模板,定义了属性和方法;对象是类的实例,具有具体的值和行为。类与对象的关系类似于剧本和演员:类是剧本,定义了角色的行为和特征;对象是根据剧本上演的具体演员。
-
绝大多数情况下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。