-
Stream.collect(Collectors.toSet())去重失效的根本原因是自定义对象未重写equals()和hashCode()方法,导致HashSet无法正确识别逻辑重复;标准类型无需额外操作,而TreeSet需显式构造且性能较低。
-
ResourceLeakDetector仅监控ByteBuf引用计数是否归零及GC时是否释放,不跟踪物理内存池、线程本地缓存或跨线程持有状态;其检测边界是refCnt()为0且对象被GC,而非分配线程或内存页层面的泄露。
-
并行流是Java为多核处理提供的高效工具,适用于CPU密集型、大数据量、操作独立的场景;通过parallelStream()或parallel()实现并行,但需避免用于小数据集、I/O密集任务、共享可变状态及顺序敏感场景,合理选择数据源、减少装箱、必要时自定义线程池,并优先使用无状态操作和并发集合确保线程安全。
-
long累加变负是因二进制回绕,非计算错误;应通过Math.addExact拦截溢出、BigInteger彻底规避或预检范围三者组合防御。
-
JDK9允许try-with-resources直接引用已声明的effectivelyfinal且实现AutoCloseable的局部变量,无需在try括号内声明初始化,提升灵活性与可读性。
-
String不可变因其内部字符数组为privatefinal,无法直接修改;需用toCharArray()获取可变副本操作后再转回字符串,如双指针原地翻转。
-
Java中应优先使用String.toUpperCase(Locale)转大写,它正确处理Unicode、Locale及特殊字符(如德语ß、土耳其语i);手动ASCII加减易出错且不支持国际化,仅当100%确定输入为ASCIIa–z时才可考虑。
-
Files.probeContentType()仅能辅助检测文件实际内容类型,无法单独防范伪造扩展名风险;它基于文件头推测MIME类型,但存在准确率低、无法识别嵌套恶意代码等局限,须结合重命名、白名单、二次解析和沙箱等分层策略。
-
javac编译是源码到字节码的结构化转换,非翻译:含词法分析(拆token)、语法分析(建AST)、语义分析(查类型、填符号表)、字节码生成(输出iconst_1等指令),仅保证字节码合法,不涉及平台优化或运行时行为。
-
正向预查((?=...))匹配位置而非内容,要求该位置后紧接指定模式但不消耗字符;如\d+(?=px)只匹配数字部分,不包含px。
-
ReentrantLock必须手动释放,需在finally块中调用unlock();lock()阻塞获取,tryLock()支持非阻塞或超时;公平锁性能差且仅影响队列线程;Condition实现多条件等待;多数场景优先用synchronized。
-
可直接读写剪贴板变量,无需中转;Web用navigator.clipboard(需HTTPS/用户手势),VBA用DataObject,.NET用Clipboard类,命令行可用clip或clipboard-rs。
-
类是对象的模板,定义属性和方法;对象是类的实例,具有具体状态和行为。例如Person类定义姓名、年龄及说话方法,通过new创建多个独立对象如person1,各自存储数据并调用方法,体现封装性。
-
Predicate是函数式接口,不可直接实例化,须用lambda、方法引用或静态工厂方法;其and/or/negate返回新对象,支持短路逻辑与条件拼接,但禁用IO和状态操作。
-
堆内内存快照对比是识别缓慢增长型内存泄漏最可靠的方法,需在负载平稳时分阶段拍Baseline、操作后和延时快照,用MAT比对Delta与RetainedHeapDelta,并通过引用链分析确认是否因static引用、ThreadLocal或未注销监听器等导致本该回收的对象持续存活。