-
AQS中独占模式靠tryAcquire/tryRelease控制锁获取与释放,共享模式靠tryAcquireShared(返回负数失败、0成功不传播、正数成功并传播)和releaseShared实现唤醒传播,二者共用队列但行为不同,需严格区分模式使用。
-
首先安装JDK确保javac可用,再用update-alternatives管理多版本,最后设置JAVA_HOME提升工具兼容性与环境一致性。
-
Java旧项目异常治理核心是减少无效捕获、明确异常语义、切断传播链,需分层归因、收敛处理、补全可观测性:一识别伪异常删空catch;二统一分类分层处理;三补全上下文与可观测性;四渐进式改造高频点。
-
断言适用于检测内部程序错误,如私有方法参数非法、控制流异常等,默认关闭,仅开发测试启用。1.用于私有方法参数校验、控制流断言、算法状态验证;2.语法为assertcondition或assertcondition:expression;3.运行时需加-ea参数开启;4.不同于异常,断言属Error类型,不捕获,不可替代公共方法的输入校验。
-
jstack-l<pid>是最轻量的死锁检测工具,必须加-l才显示锁关系,推荐配合-e连续执行2–3次;ThreadMXBean可程序化检测已形成的死锁,但无法捕获伪死锁。
-
推荐用DateTimeFormatter而非SimpleDateFormat,它线程安全、不可变、支持ISO与自定义模式,需通过ofPattern、ISO常量或ofLocalizedDateTime等静态工厂创建,不可new;format/parse需类型匹配,时区字符串须用ZonedDateTime/OffsetDateTime解析,应staticfinal复用。
-
死锁的典型现象是Java程序卡住、线程长时间处于BLOCKED或WAITING状态且CPU使用率极低;快速检测方法包括jstack-l查看Found1deadlock、JVM启动加-XX:+PrintConcurrentLocks、JConsole检测死锁;预防手段有tryLock()超时获取、按System.identityHashCode固定顺序加锁、优先使用ConcurrentHashMap等并发工具类替代手动锁。
-
Oracle官网下载JDK需先注册并登录Oracle账号(第三方登录无效),再访问归档页https://www.oracle.com/java/technologies/javase/jdk-archive-downloads.html,选择对应版本与平台,禁用广告拦截插件后勾选许可协议方可下载;\_bin结尾为完整JDK,\_jre为历史残留命名,现代开发应选用\_bin包。
-
异常链是将底层异常包装为高层异常并保留原始异常作为原因,通过带cause参数的构造函数实现,如thrownewBusinessException("业务失败",e);它既提供业务语义又保留调试信息,打印堆栈时显示“Causedby”,便于排查问题。
-
Arrays专治数组,Collections专治集合;Arrays.sort()不接受List,须用Collections.sort();Arrays.asList()返回不可变视图,需newArrayList<>包装;同步用Collections.synchronizedList()但复合操作仍需手动同步;基本类型数组排序更快但不稳定,对象排序稳定。
-
var仅限方法体内局部变量声明,需初始化且类型可静态推断,禁用于字段、参数、返回值及lambda形参;推断类型最具体但可能丢失泛型信息,影响可读性与维护性。
-
本文深入解析在使用findViewById()时部分视图(如TextView、RecyclerView)意外返回null的典型场景,重点揭示因UI状态变更、视图可见性控制及初始化顺序不当引发的“伪空指针”问题,并提供可复现的修复方案与最佳实践。
-
Java对象协作核心是职责分离与契约交互:按领域切分对象(如User、InventoryChecker)、用接口+组合实现松耦合、事件机制解耦复杂流程、明确定义方法边界。
-
Java14+的NPE错误行号更准需启用-XX:+ShowCodeDetailsInExceptionMessages,该参数在Java14–17为实验性、Java18+默认启用,但部分JDK如Dragonwell仍需手动开启;编译须保留调试信息(-g),否则提示退化;IDE配置、静态分析(SpotBugs)、Optional合理使用及fail-fast(Objects.requireNonNull)可进一步预防NPE。
-
ResourceBundle.Control是Java资源加载链中唯一可定制“查找、解析、缓存”行为的核心钩子,需在无法热更新properties、需支持YAML/JSON、或需精确控制缓存时自定义;必须重写getCandidateLocales、getFormats、newBundle三个方法,并合理实现缓存与编码处理。