-
EnumMap底层使用数组而非哈希表,以枚举ordinal()为下标实现O(1)查表;无哈希计算、无冲突处理、无装箱,性能比HashMap高2–3倍、内存低约40%;不支持null键,且必须在编译期确定枚举类型。
-
while循环先判断条件再执行,若条件不成立则循环体不执行;2.dowhile循环先执行一次循环体再判断条件,确保循环体至少执行一次;3.需要至少执行一次时用dowhile,如用户输入验证;可跳过循环时用while。
-
一个类可实现多个接口以支持多重行为继承。Java不支持多继承,但通过implements关键字实现多接口,如Person类实现Runnable和Eatable接口需重写所有抽象方法。从Java8起,接口可定义default方法提供默认实现;若多个接口含同名default方法,实现类必须重写该方法并用InterfaceName.super.methodName()指定调用来源。为避免复杂性,应遵循接口隔离原则,保持接口职责单一,避免过多无关接口导致“胖类”,推荐使用组合优化设计。例如,机器人类可分别实现Mo
-
最稳用CFR反编译插件:兼容Java17新特性,需禁用IDEA自带解码器;遇“Decompiledcodenotavailable”需检查module-info、混淆或JDK类配置;var丢失因编译未加-g:vars;空方法体是CFR对不支持字节码的兜底处理。
-
静态方法不能被重写,只能被隐藏;JVM在编译期根据引用类型静态绑定,与实际对象类型无关,故Parentp=newChild();p.staticMethod()调用Parent的版本。
-
Scanner读取用户输入需在main开头创建单实例,用nextLine()读字符串并统一解析类型,避免nextInt()后换行符残留;关键词转小写匹配,用startsWith()实现命令交互;退出用布尔变量控制循环,退出前提示“再见”。
-
小对象优先在年轻代是因生命周期短、匹配复制算法高效回收,大对象直入老年代避免干扰年轻代GC;分代设计与逃逸分析共同优化GC效率。
-
多线程核心价值是提升CPU利用率和整体吞吐量,通过让等待I/O的线程释放CPU给其他任务执行;需用线程池复用线程,避免频繁创建销毁;共享变量须用volatile、synchronized或AtomicInteger等机制同步;线程协作优先选用BlockingQueue、CountDownLatch等高级并发工具。
-
Java并发编程中用队列,核心是为了安全、有序、可控地传递任务或数据,阻塞队列通过自动阻塞/唤醒机制简化生产者-消费者模型,解耦线程、避免竞态,天然适配线程池与异步任务。
-
clone()比new快因直接复制内存二进制布局,绕过构造函数;但仅适用于无外部资源、可序列化的对象,否则引发资源冲突或崩溃。
-
Java图像像素遍历为什么不能直接改BufferedImage.getRGB()返回的数组因为getRGB()返回的是新拷贝的int数组,原图数据完全不受影响。你改了这个数组,等于在纸上画了个假图——屏幕上的图片纹丝不动。正确做法是用setRGB(x,y,rgb)逐点写入,或更高效地用WritableRaster拿到原始像素缓冲区再批量操作。小图(
-
Collections.frequency适用于单元素频次统计,语义清晰但仅支持精确equals比较;Stream.groupingBy适合全量频次统计,性能更优但需注意null键和自定义对象的equals/hashCode实现。
-
ThreadDeath是Thread.stop()主动抛出的Error,非系统崩溃,但会破坏线程状态、跳过finally、导致资源泄漏和锁不一致;stop()已废弃,应改用interrupt()+响应式退出机制。
-
Arrays.parallelSort从Java8引入,适用于大数组并行排序,利用多核提升性能,对小数组退化为普通sort以避免开销,支持基本类型和对象数组自定义比较,需结合数据规模与硬件环境合理使用。
-
死锁典型场景是线程间嵌套加锁顺序不一致;应按对象哈希值升序加锁、避免锁内调用外部方法、缩小同步范围;推荐用ReentrantLock.tryLock()超时机制规避;jstack和ThreadMXBean可检测死锁;LockSupport.park/unpark误用亦致逻辑死锁;根本解法是消除共享可变状态。