-
多线程高频生成随机数且无需可重现序列时应优先用ThreadLocalRandom;它为每线程提供独立实例避免同步开销,而Random适用于需固定种子复现序列的场景。
-
protected成员可在同类、同包及其他包的子类中访问,主要用于继承;子类不能通过父类实例访问其protected成员,只能继承访问。
-
SQLException捕获后应记录SQL语句、参数、getSQLState()和getErrorCode(),仅e.printStackTrace()会丢失关键上下文;只对“08S01”“40001”等可重试码重试,且需关闭资源、指数退避、避免事务内重试;回滚前须检查事务状态;PreparedStatement参数为null时应统一用setObject或setNull,禁用字符串拼接防注入。
-
职责单一的类应只做一件可清晰定义、独立测试和修改的事;判断标准是类名替换为“负责……的类”后,所有public方法都自然属于该省略内容,且避免混用不同领域动词、私有方法中隐藏协作逻辑、构造函数中创建业务对象等破绽。
-
Process是Java中表示外部进程的抽象类,通过Runtime.exec()或ProcessBuilder.start()启动子进程,可获取其输入、输出、错误流,控制进程执行并读取退出码。
-
transient字段反序列化时为null是因JVM跳过其序列化,属设计行为;未声明serialVersionUID会导致类结构变更后反序列化失败;推荐手动设为1L并谨慎升级;JSON、protobuf等是更安全可靠的替代方案。
-
不能直接newCollections(),因为它是私有构造函数的静态工具类;其核心用途包括创建不可变/同步集合、频率统计、交集判断等集合接口不提供的全局操作。
-
STS更新Maven项目时因MapStruct依赖卡在75%无响应,通常是本地Maven仓库中MapStruct相关构件损坏所致;删除对应版本缓存后重试即可恢复。
-
HashSet底层基于HashMap实现,元素作key、PRESENT作value,继承其线程不安全、扩容机制等特性;TreeSet基于TreeMap,依赖Comparable或Comparator排序,null处理需谨慎;二者迭代顺序根本不同。
-
Java多态通过虚方法表(vtable)实现动态分派,非static、非private、非final的实例方法在运行期根据对象实际类型查vtable调用对应版本,final/static/private方法因编译期绑定而无法多态。
-
Windows下InvalidPathException常因路径含非法字符(如:、|、?、*)或保留名(如AUX)触发,Paths.get()会主动校验而newFile().toPath()不校验,跨平台需统一用Paths.get()并清洗不可见字符。
-
默认方法必须用default修饰且不能有static,是Java8为接口添加可选实现以兼容旧代码的机制;静态方法属接口本身,不可继承,调用需带接口名。
-
Java作用域指变量、方法或类可被访问的有效范围,由代码结构(如{})和声明位置决定,分为局部、成员、类与包作用域,并遵循就近查找与层级覆盖原则。
-
推荐使用静态内部类实现线程安全的懒加载工厂,利用类加载机制保证实例唯一且延迟初始化,无锁高效;双重检查锁定需配合volatile防止指令重排,适用于需显式控制同步的场景;枚举实现最简洁,天然防反射且支持序列化安全,适合简单情况;当工厂需传参时,应区分单例与原型模式,可对内部资源采用双重检查锁定实现懒加载;多数场景下静态内部类为最优方案。
-
PSOldGen内存缓慢但持续增长(约1%/天)虽未触发FullGC或报错,但仍可能预示内存泄漏或配置不合理;需结合GC日志、堆转储分析及JVM参数调优进行系统性排查。