-
finalize()不是析构钩子而是GC负担,无调用保证且易致OOM;应禁用并改用Cleaner或try-with-resources。
-
non-sealed是在密封继承链上开放当前子类的继承权限,不否定父类sealed约束,仅使该子类成为可被任意继承的“开放节点”,其后代仍需遵循各自修饰规则。
-
Java原生Logger默认不输出日志,需显式添加ConsoleHandler并设置level;注意区分java.util.logging.Logger与log4j2/slf4j;推荐使用占位符格式化日志;生产环境应使用FileHandler并配置滚动策略。
-
Java中比较字符串内容必须用.equals()而非==,因为==比较内存地址,equals比较字符内容;推荐使用"abc".equals(str)防空指针,忽略大小写用equalsIgnoreCase,排序用compareTo,避免依赖字符串常量池的==巧合。
-
怎么调用免费实时汇率API(如ExchangeRate-API)Java里没法自己“实时”算汇率,必须靠第三方API。免费方案里ExchangeRate-API(v6)最稳,每天1500次请求,不需要注册就能试用,返回JSON干净,适合入门对接。常见错误是直接拼URL却忘了加https://,或者把base参数写成from——它只认base和symbols。正确请求地址:https://api.exchangerate-api.com/v4/latest/USD(获取以USD为基准
-
关键在于将临时节点生命周期严格绑定函数调用栈,用局部变量作用域实现硬性约束,而非依赖GC;所有节点栈分配、无所有权、零析构,函数返回时栈帧自动弹出,销毁开销趋近于零。
-
Collectors.partitioningBy可将流按布尔条件分为true/false两组并返回Map,适用于二元判断;支持下游收集器定制聚合,需注意null安全,且结果总含两个key。
-
Java中用PriorityQueue合并多个有序日志流,本质是N路归并:每流用LogStreamCursor预取最小日志入队,每次poll后从对应流advance并重新入队,实现O(N)空间复杂度的惰性归并。
-
SecurityException是Java安全模型检测到违规时抛出的异常,需通过启用SecurityManager(Java8–16)并配置policy文件限制PropertyPermission来阻止第三方JAR读取user.home等敏感属性。
-
枚举单例最可靠,因JVM硬性保障:反射时newInstance()必抛异常,反序列化时readEnum()直接返回预创建实例,无需readResolve或防御代码。
-
sdkman是Linux/macOS用户切换Java版本最省心的选择,它独立安装JDK于用户目录、仅修改PATH和JAVA_HOME、无污染无冲突;Windows用户可用jabba或手动配置;Ubuntu的update-alternatives不设JAVA_HOME,IDE和构建工具各有独立配置。
-
JavaAgent的premain必须在目标类加载前生效,否则无法增强已加载类;需显式配置ClassPool路径、处理类重定义限制、避开final/native方法、应对SpringBoot提前加载、适配JDK版本差异,并结合retransformClasses与调用点增强兜底。
-
Java接口与类本质不同:接口是行为契约,只声明“能做什么”,无状态无实现;类是实体蓝图,定义“有什么”和“怎么做”,可实例化。
-
匿名线程捕获局部变量实为编译器将其提升为闭包对象字段,问题本质是循环变量复用导致所有线程读取最终值,而非变量“存活”或作用域泄漏。
-
哈希表桶分布的数学期望值为n/m,即平均每个桶承载n/m个元素;该值源于线性期望原理,导出冲突不可避免、空桶数量可估算、查找成本有界三个推论,并指导HashMap负载因子控制、扩容策略与结构升级决策。