-
Java基本类型内存占用固定:boolean1字节、byte1、char/short2、int/float4、long/double8;引用类型4或8字节;对象字段因对齐填充可能增大,数组含头开销,包装类(如Integer)至少16字节。
-
继承层次过深导致可读性差、维护困难、耦合度高,修改父类易引发副作用;主要弊端包括维护成本上升、依赖过强、重写风险增加和扩展受限;应优先使用组合替代继承,将“是一个”变为“有一个”,通过接口或抽象类定义行为,由独立组件实现并委托调用,提升复用性与灵活性;通用逻辑应提取至工具类或服务,避免污染继承链;利用Java8接口默认方法实现横向功能扩展,降低对单一继承体系的依赖;合理控制继承深度,多用组合、接口与委托,增强系统健壮性与可扩展性。
-
微服务启动频繁FullGC十有八九是Metaspace初始阈值过低(默认20.8MB)所致,应先通过GC日志实测元数据用量峰值,再按峰值上浮20%~50%设置-XX:MetaspaceSize,并同步配置-XX:MaxMetaspaceSize,避免盲目设大导致本地内存争抢。
-
Java集合对null支持差异显著:ArrayList/LinkedList允许任意位置存null;HashMap/LinkedHashMap允许一个null键和多个null值;TreeMap/TreeSet完全禁止null;ConcurrentHashMap拒绝null键值,CopyOnWriteArrayList允许add(null)。
-
Java数组长度上限为Integer.MAX_VALUE(2147483647),因JVM规范强制length字段为int类型且字节码指令仅支持32位操作数,超限会抛NegativeArraySizeException或OutOfMemoryError。
-
URLConnection.getContentType()仅适用于已建立的URL连接,依赖服务器响应头或文件扩展名,不分析实际内容,故无法处理内存中的byte[]或ByteArrayInputStream等变量流。
-
RabbitMQ替代同步调用是为解决阻塞、雪崩与强依赖问题;应定义统一消息契约类并用函数式Consumer绑定,禁用@StreamListener,手动ack需配合异常抛出与重试退避配置。
-
用PriorityQueue求TopK比排序快,因时间复杂度为O(nlogk)而非O(nlogn);需控制堆大小≤K,新元素大于堆顶才offer并poll;取结果必须poll才能有序,toArray等方法不保证顺序。
-
锁粗化是JVMJIT编译器自动将同一锁、同一线程、连续无干扰的多次加锁解锁合并为一次大范围同步的操作,典型场景是循环内对未逃逸局部对象(如StringBuffer)的反复同步调用。
-
应使用ArrayList替代数组存储员工对象,重写Employee的equals()和hashCode(),用Stream过滤查询,Iterator安全删除,HashMap按部门索引,Comparator链式排序,CSV文本持久化并异常兜底。
-
finally块不能强制关闭资源,仅保证代码执行;常见失效原因是未判空、未捕获close()异常,导致NPE或异常中断后续关闭流程。
-
Instrumentation静默注入仅支持重写已加载类中可重转换方法的字节码,不支持字段增删或常量内联修改,须满足ClassLoader一致、非代理类、isModifiableClass为true三前提。
-
在SpringBoot3.x中使用Kotlin配置MQTTv5共享客户端时,因泛型类型误用(MqttConnectOptionsvsMqttConnectionOptions)导致编译失败,需严格匹配MQTTv3/v5对应的连接选项类。
-
根据使用场景选择Java集合类型:若需有序且可重复,选ArrayList(读多写少)或LinkedList(频繁增删);去重选HashSet(无序)、LinkedHashSet(保持插入顺序)或TreeSet(排序);键值对存储用HashMap(常用)、LinkedHashMap(顺序访问)或TreeMap(按键排序);多线程环境优先选用ConcurrentHashMap或CopyOnWriteArrayList以保证线程安全。
-
ldc指令加载动态常量时触发bootstrap方法执行,依赖MethodHandles体系和ConstantBootstraps提供的标准引导方法;其流程包括提取BMH索引、加载MethodHandle、调用linkCallSite并缓存结果。