-
编译器优先选择非varargs的精确匹配方法,其次选更具体类型的重载,varargs仅作最后备选;多个等效varargs或数组与varargs重载共存时将导致编译错误。
-
putIfAbsent能避免覆盖已存在值是因为它仅在key对应value为null时才写入新值,否则直接返回旧值;它判断的是value是否为null而非key是否存在,故key→null时仍会写入。
-
TCP_QUICKACK需在每次recv后显式调用才能压低RPC长尾延迟,因其仅为一次性触发动作,非持久化选项;它作用于接收端加速ACK发出,须与TCP_NODELAY配合使用。
-
直接用数组偏移量模拟结构体读取,本质是将一维字节数组视为原始内存,按成员类型、顺序及对齐规则手动计算各成员起始位置与长度,适用于二进制协议解析等场景。
-
Java项目应外置配置到application.properties或application.yml,SpringBoot用@Value/@ConfigurationProperties注入,非Spring项目用Properties+ClassLoader加载;多环境通过application-{profile}.properties和spring.profiles.active激活;敏感信息用jasypt等工具加密,密钥须通过环境变量管理。
-
贪心算法中break不能实现最优解剪枝,因其无搜索空间和回溯机制;它仅用于提前终止构造过程(如约束满足)或出现在混合算法中。
-
应使用StringBuilder替代String拼接,因其在循环中复用同一对象,避免频繁创建临时String和GC压力;错例中每次+=都生成新对象,导致CPU升高、响应变慢、频繁FullGC。
-
File.setLastModified返回false主因是底层限制:文件不存在、无写权限、文件系统禁用时间戳更新、Windows链接异常或文件被独占占用;需确保exists()、isFile()、canWrite()均为true且时间值合法。
-
ConcurrentModificationException是Java集合的fail-fast机制抛出的异常,用于检测单线程中遍历时非法修改结构(如for-each中直接调remove),其根源是迭代器的expectedModCount与集合modCount不一致;正确做法是用Iterator.remove()(需先next())、removeIf()(JDK8+,注意Predicate纯函数性)或线程安全容器。
-
抽象类必须用abstract修饰且不能被实例化,本质是“不完整的类”,用于被继承而非创建对象;含抽象方法的类必须声明为abstract,抽象方法无方法体、不可用private/static/final修饰;子类非abstract则须实现全部抽象方法。
-
final成员变量必须在构造方法结束前完成初始化,否则编译报错;只能在声明处、构造器内或初始化块中赋值,且每个构造路径都必须覆盖所有final字段。
-
Java中自增(++)和自减(--)运算符的核心区别在于前置与后置的执行顺序:前置先改值后参与计算,后置先用原值再改值;单独使用时等价;不可用于常量或表达式。
-
安装JDK是搭建Java开发环境的第一步,可通过包管理器或手动安装。首先选择OpenJDK或OracleJDK,Ubuntu用户使用aptinstallopenjdk-17-jdk,CentOS用户使用yuminstalljava-17-openjdk-devel进行安装;若手动安装OracleJDK,需下载tar.gz包并解压至指定目录(如/opt/jdk),然后配置环境变量:在/etc/profile中添加JAVA_HOME、PATH和CLASSPATH,并执行source/etc/profile使配
-
flatMapToInt用于将字符串集合转为Unicode码点整数流,推荐用String::codePoints正确处理代理对;需过滤null,禁用chars()以防增补字符错误拆分。
-
this能解决变量名冲突,因为它明确指向当前对象的成员变量,避免被同名局部变量遮蔽;在构造函数中必须用this.name=name来正确赋值,否则会导致自赋值错误。