-
Java异常层次旨在分粒度处理而非忽略错误:RuntimeException表逻辑错误无需强制捕获,checkedexception如IOException必须显式处理;catch顺序须从具体到宽泛,否则子类异常不可达;自定义异常应依是否需强制处理选择继承RuntimeException或Exception,并提供带cause构造函数。
-
ConcurrentHashMap迭代器非fail-safe而是弱一致性,不抛ConcurrentModificationException但不保证看到所有修改;它用分段锁+CAS+volatile实现线程安全,无modCount机制,设计取舍为高吞吐而非强一致性。
-
普通集合如ArrayList、HashMap非线程安全,多线程读写易致ConcurrentModificationException、数据丢失或结构损坏;Vector和Hashtable虽同步但粒度粗、性能差;并发集合如ConcurrentHashMap(分段锁/CAS+volatile)、CopyOnWriteArrayList等通过细粒度锁、无锁设计和原子操作解决并发问题。
-
类加载机制通过延迟解析符号引用实现规则类按需加载,配合ClassLoader隔离、接口抽象与Supplier封装,支持多租户热更新与配置驱动;静态字段初始化时机可控,但需规避继承导致的父类未初始化陷阱。
-
ArrayList序列化本身稳定,问题源于元素类未声明serialVersionUID或使用JDK移除API;应为业务类显式定义serialVersionUID、避免内部API,并优先采用JSON/Protobuf替代Java序列化。
-
Spring5.x+JDK8下XML配置虽被标记为legacy但仍可用,需锁定Spring5.3.37、仅引入spring-context/spring-beans、使用正确XSD地址,并注意构造注入优先、prototype行为及混合配置风险。
-
AQS底层使用基于CLH思想改造的虚拟双向链表,而非传统队列;其“虚拟”指无独立Queue容器,仅靠Node间prev/next指针构成逻辑队列,头尾通过CAS动态维护,轻量高效。
-
mappingCount()返回long类型,可精确统计超2147483647个键值对,而size()返回int易溢出为负数;前者基于volatilelong累加countercells与baseCount,精度高、无截断,适用于监控、分页等需准确总数的场景。
-
应先用jstack和ps-T确认线程数暴增及OS级线程耗尽,再排查未关闭线程、第三方库泄漏及线程池配置不当(如newCachedThreadPool无界问题),而非盲目调大ulimit或-Xss。
-
Java方法不能原生返回多个值,但可通过泛型元组(如Pair/Triplet/Record)类型安全地封装异构值;泛型方法自动推断类型,上界限定增强约束,record更推荐用于Java14+。
-
在不引入SpringData依赖的前提下,可通过自定义轻量级分页容器类(如MyOwnPage)对接返回Page的REST接口,配合RestTemplate完成反序列化与分页逻辑处理。在不引入SpringData依赖的前提下,可通过自定义轻量级分页容器类(如MyOwnPage)对接返回Page的REST接口,配合RestTemplate完成反序列化与分页逻辑处理。在微服务架构中,常需跨服务调用分页接口(如GET/api
-
任务粒度调优是解决并行流负载不均最直接有效的手段,关键在于均衡各线程工作量;典型信号包括CPU利用率波动、并行反慢于串行、ForkJoinPool频繁窃取任务、个别task耗时超其余10倍以上。
-
应仅对跨平台传输的多字节字段(16/32/64位整型、浮点数)做字节序转换,单字节类型及结构体padding不处理;推荐用C++模板函数封装安全翻转逻辑,并在极端性能场景才选用裸字节流+显式转换。
-
Java数组声明有int[]a和inta[]两种语法,语义相同但前者更推荐;初始化分静态(如String[]s={"a"})和动态(如newdouble[5]);访问越界抛ArrayIndexOutOfBoundsException,空引用访问抛NullPointerException。
-
Java中可通过捕获OutOfMemoryError并结合Runtime.freeMemory()估算、SoftReference/堆外内存后备及封装弹性缓冲管理器,在内存敏感场景下实现动态自适应缓存分配。