-
CGLIB通过生成目标类的非final子类实现代理,核心组件为Enhancer、MethodInterceptor和MethodProxy;它绕过JDK代理必须接口的限制,但要求目标类及方法不可为final,构造器需public/protected。243 收藏 -
maximumPoolSize是线程池最大线程数,用于应对突发流量的弹性缓冲带;设小导致任务拒绝率高,设大引发上下文切换与OOM;需按IO/CPU密集型任务特征、QPS与耗时估算,并配合监控、动态配置及合理拒绝策略。318 收藏 -
Field.getType()返回字段声明时的原始类型(如List.class),不包含泛型信息,也不反映运行时实际对象类型;需用getGenericType()获取泛型参数,用value.getClass()获取运行时类型。151 收藏 -
FileReader无法指定字符编码,因其构造器不接受charset参数,仅依赖系统默认编码,易致跨平台乱码;正确做法是用InputStreamReader包装FileInputStream并显式指定编码。272 收藏 -
该用synchronized而不是版本号更新的情况是:单机JVM内保护临界资源(如共享计数器、本地缓存刷新),且操作粒度小、耗时短、不涉及数据库交互。217 收藏 -
哈希桶采用链地址法时,每个桶隐含链表,哈希分布不均会导致链表过长、查询退化为O(n);常见雷区包括非质数取模、忽略字段组合、浮点粗暴截断;修复需改用优质哈希算法并合理组合字段。406 收藏 -
泛型数组必须实例化为具体类型才能二进制序列化,因开放泛型T[]无确定运行时类型;C#中string[]、DateTime[]等可完整还原,而未约束的T[]编译不通过,推荐用System.Text.Json或MessagePack替代已弃用的BinaryFormatter。334 收藏 -
Java中所有参数传递均为值传递:基本类型传副本值,修改不影响原变量;包装类因不可变性表现类似,但本质是引用重绑定;数组和对象可修改状态因共享堆地址,但形参重赋值仍不影响实参。121 收藏 -
JavaTimer是单线程轻量级调度工具,适合简单低频任务;但非线程安全、异常导致线程终止、不支持并发,生产环境应优先使用ScheduledThreadPoolExecutor。175 收藏 -
最可靠的判空方式是obj==null。它能准确识别未分配内存的对象,避免调用方法时抛出NullPointerException;其他方式如toString()或isEmpty()在null时会直接崩溃。477 收藏 -
乐观读锁tryOptimisticRead成功当且仅当读期间未发生任何写操作;它仅读取版本戳,后续必须用validate验证,且只适用于轻量、无副作用的字段组合,validate为true后须立即使用数据。134 收藏 -
brewinstallopenjdk默认安装openjdk@21(截至2024年中),路径为/opt/homebrew/opt/openjdk@21/libexec/openjdk.jdk,需手动设JAVA_HOME并用/usr/libexec/java_home-v21注册生效。220 收藏 -
Java中用PrintWriter向数组指定的多个文件写入内容时,若未显式关闭流,会导致文件为空;推荐使用try-with-resources语法自动管理资源,确保数据写入并安全释放。440 收藏 -
模块路径重复导出冲突本质是同一标识符在多处声明导致加载歧义或校验失败;需通过定位源头路径、消除路径级重复、保障变量/包名唯一性及建立CI防护机制四步系统解决。257 收藏 -
ZGC采用彩色指针而非“深色指针”,其核心目标是实现亚毫秒级暂停,回收对象堆内存而非“变量”,不追求“秒级回收”。115 收藏