-
TreeSet不能存null,因其底层依赖compareTo()或Comparator.compare()排序,而null调用这些方法会抛NullPointerException;HashMap允许key为null(仅一个)和任意value为null,ConcurrentHashMap则禁止null作为key或value。
-
该用CyclicBarrier而不是CountDownLatch的场景是需要多线程分阶段协作且屏障可重用时,如多玩家回合同步、mini-batch数据校验;因其可重置,而CountDownLatch仅适用于一次性初始化等待。
-
首先定义带返回值的方法需指定返回类型、方法名和参数列表,如publicstaticintadd(inta,intb){returna+b;};调用时可将结果赋值给变量,如intresult=add(5,3);;返回类型应与实际数据匹配,常用有int、double、String、boolean等;注意所有路径必须返回值且类型兼容,避免编译错误。
-
ForeignLinkerAPI是Java16引入的孵化特性,位于java.lang.foreign包,需显式启用预览支持;它提供静态类型、纯Java方式访问本地代码,须配合SymbolLookup和MemoryLayout精确声明函数签名与内存布局,并由Arena显式管理内存生命周期。
-
本文介绍如何在Java中设计一种混合数据结构:底层按Date排序(如TreeMap),但对外提供基于Longid的高效containsKey、get等操作,解决TreeMap自定义键无法分离排序逻辑与查找逻辑的痛点。
-
Java集合排序依赖Comparable(自然排序)和Comparator(定制排序)接口,配合Collections或StreamAPI实现;需注意null处理、不可变集合限制及线程安全。
-
Java热加载依赖JVM的HotSwap能力及IDE调用JDWP和Instrumentation.redefineClasses实现,但仅支持方法体修改;字段、方法签名或类结构变更需重启或借助SpringBootDevTools。
-
Spring事件默认同步执行,@EventListener不加@Async仍运行在主线程和同一事务中,导致阻塞、事务回滚、异常传播;真解耦需显式配置带线程池的ApplicationEventMulticaster并确保@Async方法满足Bean代理、非private/static、非this调用等条件。
-
Java面向对象本质是建模现实世界的思维方式:类为模板定义属性与行为,对象为实例封装独立状态与共享逻辑;封装通过private+getter/setter控制访问并校验数据;继承支持单继承复用与分层;多态依托父类引用指向子类对象实现运行时动态绑定。
-
public、private、protected在类成员上的可见性差异Java的访问修饰符本质是编译期的“门禁规则”,不是运行时检查——它只决定谁能在源码里合法写obj.field或obj.method(),不阻止反射绕过。关键区别不在“能不能用”,而在“从哪能用”:public:任何地方都能访问,只要类型可见(比如publicclassA被import了)private:仅限本类内部,连子类都不行;注意:同一个类的不同实例之间可以互访private字段(比如othe
-
Iterator遍历不一定比for循环慢,性能取决于集合类型和JVM优化:ArrayList上for快10%~20%,LinkedList上Iterator更优;HashMap遍历时entrySet()比keySet()+get()快2.3倍;Stream.forEach()纯遍历更慢,仅适合链式操作或并行。
-
TransferIndex是volatileint变量,用于记录待迁移桶的起始索引,线程通过CAS原子递减它来领取互斥的迁移区间(如[nextBound,nextIndex)),避免重复或遗漏迁移,与sizeCtl协同实现无锁、可扩展、可中断的并发扩容。
-
Character.digit()将数字字符按指定进制解析为整数,参数为码点和进制(2–36),非有效数字或超范围时返回-1;需校验结果,不适用于整串转换。
-
volatile写操作通过MESI协议将本核缓存行置为Modified状态并广播Invalid消息,使其他核缓存失效;读操作因缓存缺失被迫从主内存或修改核重新加载最新值,从而保证可见性。
-
Java字符串+运算符由编译器优化:编译期常量折叠为单个字符串,运行时自动生成StringBuilder.append()链式调用并转toString;循环中滥用会导致O(n²)性能问题。