-
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来正确赋值,否则会导致自赋值错误。
-
信号量(Semaphore)用于控制并发访问资源的线程数量,通过acquire()获取许可、release()释放许可,确保最多指定数量的线程可同时执行,适用于限流与资源池管理。
-
当XML字符串被连续多次转义(如<)时,StringEscapeUtils.unescapeXml()仅执行单层解码;需循环调用直至无变化,或根据预期转义层数精确调用多次。
-
containsKey比get()+null判断更合适,因其能准确区分“键不存在”和“键存在但值为null”,避免误判缓存未命中;且不触发值构造或反序列化,线程安全,语义清晰。
-
Collectors.averagingInt()可在一次遍历中计算整型流平均值并返回double,需配合mapToInt()使用,空流返回Double.NaN,内部用long累加防int溢出,比手动两次遍历更高效安全。