-
HashMap最适合按学号查学生信息,因学号是天然主键;需重写equals/hashCode,key建议用String,初始化预估容量,查询返回Optional更安全,模糊查应另建索引或用专用工具,多线程需用ConcurrentHashMap或不可变视图,缓存失效策略比集合选型更关键。
-
Employee类必须是abstract,因为其calculateSalary()方法无法统一实现,若不声明为抽象类则允许非法实例化,导致多态失效;该方法不可为static,否则无法动态绑定子类实现;字段应按共用性合理分布,测试时需避免double类型直接用==比较。
-
Java的try-with-resources能自动关闭资源,前提是资源实现AutoCloseable接口;资源在try后括号内声明,执行结束时自动调用close()方法;关闭顺序与声明顺序相反;若try块和close均抛异常,try异常为主,close异常被压制并可通过getSuppressed()获取。
-
Thread.onSpinWait()在x86上直接映射为PAUSE指令,是CPU级轻量提示,用于优化短时自旋等待;ARM/RISC-V上为空操作;需配合volatile读使用,不可替代锁或wait/notify,JDK9+支持。
-
JavaMap快速查找的核心在于底层结构围绕低时间复杂度访问优化,HashMap平均O(1)、TreeMap稳定O(logn)、LinkedHashMap保持O(1)查找且维护顺序,正确重写hashCode/equals、合理初始化容量、避免遍历时修改是关键。
-
对象创建时JVM在堆中分配内存并初始化。首先加载类到元空间,再计算对象大小并在堆中分配内存,利用TLAB提升效率;内存划分为对象头、实例数据和对齐填充;随后清零内存、调用构造函数初始化,并将堆中对象地址赋给栈中引用变量,整个过程由JVM自动管理。
-
安全获取文件列表需先判空再过滤,用SwingWorker异步加载防卡顿;双击打开前须检查Desktop.isDesktopSupported()和open支持;JFileChooser路径统一转绝对路径;删文件前用FileChannel加锁检测占用;UI更新必须invokeLater切回EDT。
-
Executors.newFixedThreadPool()易OOM是因为其使用无界LinkedBlockingQueue,任务持续提交而消费滞后时队列无限膨胀,堆内存被占满;newCachedThreadPool()更危险,会因SynchronousQueue+无限线程数导致栈内存溢出。
-
static变量属类且共享,类加载时初始化一次;static方法不能访问非静态成员;static块仅执行一次;static内部类不持外部类引用。
-
接口隔离原则要求将大接口拆分为多个小接口,避免类实现无关方法。通过按角色划分、遵循单一职责,使依赖更清晰,提升系统灵活性和可维护性。
-
LockSupport.parkNanos不挂起线程是因为前置unpark消耗了许可或线程已被中断;参数单位为纳秒,误用毫秒值会导致等待时间远短于预期;它不释放锁、不抛InterruptedException,仅响应中断状态且不自动清除。
-
VectorAPI是JDK16引入的孵化特性(jdk.incubator.vector),用于编写可被编译为CPUSIMD指令的向量化代码,非java.util.Vector;现可用,但需JDK19+、显式添加模块并正确处理数组对齐与掩码。
-
HashMap通过哈希机制实现快速存取,核心操作包括put、get、remove及遍历;其性能依赖hashCode和equals的正确实现,需注意键的不可变性、非线程安全、初始容量与负载因子设置,以及null键值的使用风险。
-
Scanner输入卡住因nextInt()不读换行符,导致nextLine()读空行;应统一用nextLine()后转换,或在nextInt()后加nextLine()清缓存;BMI用double足够,Math.round四舍五入;if-else需按BMI区间升序判断;文件写入推荐Files.write()避免乱码和资源泄漏。
-
条件谓词是防止虚假唤醒和竞态的唯一防线,必须用while循环包裹、仅读取受同一锁保护的共享状态,且须为纯函数;省略或写错将导致死锁或脏数据。