-
throw用于方法体内抛出异常对象,throws用于方法签名声明可能抛出的受检异常类型;前者后接异常实例,后者后接异常类名,且仅受检异常强制要求声明。128 收藏 -
TransferQueue是强制“手递手”交付的队列,适用于RPC绑定、任务委派等需零缓冲低延迟场景;非必需时勿替代BlockingQueue,否则易致阻塞和吞吐暴跌。128 收藏 -
default方法是向后兼容的契约演进机制,用于在不破坏现有实现类的前提下为接口新增行为,但需设计时预留扩展意识,且无法解决参数或返回类型变更等破坏性改动。128 收藏 -
在SpringBoot控制器中,可通过CompletableFuture或@Async轻松实现“立即响应+后台执行”的分离模式,无需引入Kafka等消息中间件,适用于非关键、低耦合的异步逻辑(如社交账号探测、日志埋点、缓存预热等)。128 收藏 -
AtomicStampedReference不自动解决ABA,而是通过版本号使ABA可检测;必须用get(int[])原子获取最新引用与stamp,每次compareAndSet前重读,不可硬编码或缓存stamp,否则CAS因stamp不匹配而失败。128 收藏 -
扩容无需重算hash值,因容量恒为2的幂次方,新索引仅取决于原hash在新增bit位的值;JDK1.8用e.hash&oldCap快速提取该位,0则留原索引,非0则原索引+oldCap。128 收藏 -
CopyOnWriteArraySet不适合配置热更新,因其读取存在延迟、写入开销大、不保证原子性与一致性,且缺乏版本控制和监听机制;推荐用不可变配置+AtomicReference原子切换。128 收藏 -
自定义ThreadFactory的核心目标是让每个线程在创建时就具备可识别的名称和一致的行为属性,命名需含业务标识、自增序号和可选类型后缀,长度≤32字符;newThread()中须统一设置守护状态、优先级、异常处理器和线程组;避免耗时操作、静态实例复用及运行时改名。128 收藏 -
LinkedHashMap能保持有序是因为在HashMap基础上额外维护了一个双向链表。默认按插入顺序:put时节点追加到链表尾部;accessOrder=true时按访问顺序:get/put会将节点移至尾部,支持LRU缓存。128 收藏 -
对象标识指JVM中对象的唯一性,由内存地址体现,new出的对象即使内容相同标识也不同;引用一致性指多个变量指向同一实例,修改相互影响;==比较标识,equals比较内容,可重写。128 收藏 -
大数组跨步访问导致缓存失效的根本原因是破坏空间局部性,因CPU以64字节缓存行为单位加载数据,跨步使缓存行内有效数据占比低,引发频繁未命中;可通过分块(tiling)、结构体对齐与填充优化。128 收藏 -
升级Hadoop至3.3.4后出现UnsatisfiedLinkError,根本原因是Windows平台依赖的本地库(如hadoop.dll)版本不兼容——Hadoop各主版本间的native组件二进制不互通,必须使用与目标Hadoop版本严格匹配的winutils.exe和hadoop.dll。128 收藏 -
Java代码块分五类:静态代码块在类加载时执行一次,实例代码块每次创建对象前执行且优先于构造方法,局部代码块限定变量作用域,同步代码块保障多线程安全,各类代码块执行时机与用途各不相同。128 收藏 -
Java中匹配反斜杠需双重转义:字符串字面量和正则各吃一层,如匹配"."写为"\\.";推荐用Pattern.quote()自动转义;split("\.")切IP时注意空字段处理。127 收藏 -
JavaMap快速查找的核心在于底层结构围绕低时间复杂度访问优化,HashMap平均O(1)、TreeMap稳定O(logn)、LinkedHashMap保持O(1)查找且维护顺序,正确重写hashCode/equals、合理初始化容量、避免遍历时修改是关键。127 收藏