-
Java9+模块系统默认启用强封装,反射访问JDK内部API(如sun.misc.Unsafe)会抛InaccessibleObjectException;需用--add-opens或模块opens声明授权,或改用VarHandle等官方替代方案。
-
CountDownLatch通过倒计数实现线程同步,计数归零后释放等待线程,适用于主线程等待多线程完成或统一并发启动场景,需注意不可重置、防止漏调countDown及合理设置超时。
-
NEW状态仅存在于newThread()后、start()前,不可调度、不可中断;RUNNABLE包含就绪、运行及部分I/O等待;WAITING为无限期等待,TIMED_WAITING含超时;BLOCKED仅由synchronized锁竞争引发。
-
接口默认方法允许在不修改实现类的情况下扩展接口功能,Java8引入该特性以解决接口升级导致的兼容性问题;通过default关键字定义具有默认实现的方法,使旧实现类无需改动即可编译运行。例如,集合框架新增的stream()方法即为默认方法,使所有集合类自动支持流操作。同时,多个接口中的同名默认方法会引发冲突,需在实现类中显式重写并指定调用来源,避免菱形问题。默认方法减少了对抽象类的依赖,增强了API演进能力,是Java支持函数式编程和接口演化的重要改进。
-
继承表达“is-a”关系,如Dog是Animal;误用会导致语义错误和扩展困难;子类构造时父类先初始化;private成员不参与继承;Java只支持单继承,应结合组合与接口使用。
-
魔数须为4字节固定int型(如0x12345678)以区分非法连接,版本字段占1字节便于平滑升级;长度字段紧随其后且定长4字节,表示消息体字节数并校验上限;消息体首选Protobuf,避免嵌套过深,不加应用层分隔符。
-
Stream.min()报NullPointerException是因比较器访问null字段所致,应使用Comparator.nullsFirst()/nullsLast()安全处理;空流返回Optional,须用orElse()等方法避免NoSuchElementException。
-
使用BigDecimal可避免浮点精度问题,推荐字符串构造如newBigDecimal("0.1"),运算通过add、subtract等方法实现,除法需指定精度和舍入模式,比较应使用compareTo而非equals或==。
-
Phaser更适合动态增减线程数或多轮多阶段同步场景,支持运行时注册/注销参与者,且每阶段可灵活控制参与方;而CountDownLatch不可重置、CyclicBarrier要求固定线程数。
-
staticfinal变量若是编译期常量(基本类型/String+字面量或常量表达式),则值被内联,不触发类初始化;否则仍执行静态块。
-
直接在任务提交前加限速控制更安全灵活,核心是节制任务入队动作:可用Semaphore按变量维度(如用户ID)每秒配额限流,搭配定时清理防泄漏;或用RateLimiter令牌桶实现平滑限速,支持突发流量稳定吞吐;亦可在执行阶段通过重写beforeExecute动态调控;还可结合DubboFilter在RPC层统一拦截并透传限速结果。
-
静态变量为空通常因类未初始化,而非代码错误;需依据JVM规范确认5种主动引用场景(new、静态方法、非final静态字段、反射、子类初始化)是否触发<clinit>执行。
-
自定义注解配合反射可实现类似Spring的@Autowired效果:先定义@Retention(RUNTIME)和@Target(FIELD)的@AutoWired注解,再通过Injector类用反射遍历字段、设为可访问、获取注解并按类型注入模拟值,最后手动调用inject()完成注入。
-
阈值是串行与并行开销的平衡点,非固定常量,应依数据规模和核数估算(如THRESHOLD≈总元素数÷(核数×4)),并通过实测调优,避开硬编码、阻塞操作及状态共享等陷阱。
-
Java中数字签名核心是遵循非对称加密规范,选用SHA256withRSA等标准算法,正确加载PKCS#8私钥,对UTF-8编码的确定性字节报文调用update()和sign()生成DER签名,并确保验签端算法、密钥、数据字节完全一致。