-
安装JDK即可拥有完整Java开发环境,因其包含JRE及开发工具。开发者需下载LTS版本JDK,配置JAVA_HOME与PATH环境变量,并通过java-version和javac-version验证安装,最后以HelloWorld程序测试编译运行功能。
-
静态代码块在类加载时执行一次,用于初始化静态资源;语法为static{},多个按出现顺序执行;在创建对象、调用静态方法等主动使用类时触发,仅执行一次,与每次实例化都执行的实例代码块和构造函数不同。
-
FileOutputStream写文件为空或不全,因未调用close()或flush()导致缓冲区数据未落盘;应使用try-with-resources确保关闭,追加写需构造时传true;写中文须指定UTF-8编码;大文件应配合BufferedOutputStream优化性能。
-
AtomicBoolean.compareAndSet()能保证单次执行,因其底层基于CPU级CAS指令,原子性完成“判断并更新”,值未被修改才写入新值,否则返回false,精准实现“只做一次”语义。
-
Math类不可实例化,所有方法均为静态,需通过Math.xxx()调用;支持数值类型重载但不处理包装类和null;浮点运算存在精度误差,三角函数默认弧度单位。
-
Instant.parse()仅支持ISO8601格式的UTC时间字符串(如"2024-03-15T14:22:30Z"),不接受空格分隔或带本地时区偏移的时间;从毫秒数构造需用Instant.ofEpochMilli(),避免误用秒级方法导致时间错乱。
-
64位HotSpot虚拟机中对象头默认占12字节,即8字节MarkWord(动态复用存储哈希码、锁状态、GC年龄等)加4字节压缩后的KlassPointer。
-
ByteBuffer.put不能直接写入非byte类型数据,必须用putInt()等专用方法;写入需严格对齐字节序与大小,注意remaining()空间、编码转换及flip()切换读写状态。
-
RandomAccessFile.setLength()是跨平台预分配文件空间的唯一可靠方式,调用内核接口瞬时扩展或截断逻辑长度,不写入数据、不触发I/O,但非稀疏文件创建;分布式场景须由主控节点统一调用,避免并发覆盖。
-
中介者模式通过引入中介者对象统一协调同事间交互,将网状依赖转为星型结构:同事只持中介者引用并委托事件,中介者持有所有同事引用并封装联动逻辑,避免直接引用和硬编码条件,提升可维护性与可测试性。
-
只有满足编译期常量条件的staticfinal变量才会被内联:即基本类型或String字面量、声明时直接初始化、值在编译期可确定;否则不内联且会触发类加载。
-
SoftReference图像缓存常失效,因其依赖JVM内存压力触发回收,且需手动处理null回落、重建逻辑、并发安全及ReferenceQueue清理;Android上更不可靠,推荐用LruCache或GuavaCache替代。
-
中介者模式不能直接用于分布式路由,因其仅适用于单JVM内对象解耦,缺乏网络传输、节点发现、状态同步等分布式能力;应分层实现:通信层(gRPC/Kafka)、状态管理层(Nacos/Etcd)、路由策略层(面向对象的RoutingMediator接口及其实现)。
-
泛型方法+方法引用可构建类型安全异步分发器:通过Func<TInput,Task<TOutput>>契约明确输入输出,编译期锁定类型;直接传入方法组(如UserService.CreateUser)避免闭包与冗余封装;分发方法仅调度不掺业务,支持取消令牌与CPU/IO路径分离。
-
Stream.max()遇null必抛NullPointerException,必须用Comparator.nullsLast()包裹原始比较器;nullsLast将null视为最大值,返回Optional可能含null,需二次校验。