java教程技术文章
-
JIT通过运行时反馈重构代码以减少分支预测依赖,具体包括内联高频路径、删除冗余判断、重排条件顺序、插入分支提示、单态内联、转为cmov指令及优化代码布局。349 收藏 -
本文介绍如何使用JavaStream的Collectors.groupingBy与Collectors.reducing组合,仅遍历列表一次,即可按类型(如"A"、"B"、"C"等)分组并计算各组金额总和,避免重复流操作带来的性能损耗。348 收藏 -
已实现基于ArrayList与Task类的命令行待办系统,支持add/list/done/delete/quit五种操作,含ID自增、内存管理、文本持久化(tasks.txt)及用户友好提示。348 收藏 -
封装类属性可提高数据安全性,通过private字段和公共方法访问,能在赋值前校验数据合法性,防止非法状态,如setAge中限制年龄范围。348 收藏 -
Objects.requireNonNullElse()是Java9引入的非空断言+默认值兜底方法,要求obj为null时返回非null的defaultObj,否则抛NPE;适用于轻量、确定、非null的默认值场景。348 收藏 -
JMM是抽象规则而非物理内存布局,用于解决多线程共享变量的可见性、有序性、原子性问题,并屏蔽不同CPU架构差异提供统一并发语义。348 收藏 -
这是换行符残留问题:nextInt()不读取换行符,导致nextLine()立即返回空字符串;正确做法是调用scanner.nextLine()手动清除残留换行符。348 收藏 -
JavaAgent的两种加载方式核心差异在于介入时机与字节码修改能力:静态加载通过-javaagent在JVM启动前执行premain,可无限制拦截类加载并增强字段访问;动态加载通过VirtualMachine.attach()触发agentmain,仅支持已注册transformer的类重转换,无法新增字段或修改继承关系,且JDK21起默认禁用。348 收藏 -
断言不是环境切换开关,AssertionError用于暴露严重逻辑缺陷而非业务分支,-ea仅开启调试验证,不可用于生产与测试的差异化异常逻辑。348 收藏 -
Java变量生命周期由类型、作用域和引用关系共同决定,并绑定JVM内存分区:基本类型局部变量存栈中,随方法进出而创建销毁;引用变量本身在栈、所指对象在堆;成员变量随对象存堆,静态变量存方法区/元空间;JVM还支持逃逸分析与活变量优化,使对象可提前被GC回收。348 收藏 -
下界通配符(?superT)不适用于ExecutorService.submit(Callable<T>)场景,因其要求Callable具有确定返回类型以构造类型安全的Future<T>,而?superT无法满足函数式接口call()方法的具体返回类型要求。348 收藏 -
必须用while而非if检查条件,因为notify()不保证唤醒线程立即获锁,且wait()返回后条件可能已被修改;if会导致虚假唤醒或竞态丢失,while可确保每次唤醒后重新验证状态。348 收藏 -
BigDecimal.divide抛ArithmeticException的常见原因有四:一是除零;二是未指定精度和舍入模式导致无限小数;三是指定了UNNECESSARY舍入但结果无法精确表示;四是divideToIntegralValue在无法整除时部分JDK版本异常。348 收藏 -
containsKey方法用于判断Map是否包含指定键,返回true表示键存在、false表示不存在;它只检查键而非值,即使键对应值为null也返回true,且要求Map已初始化、键的equals与hashCode一致。347 收藏 -
HashSet做拼写检查更快因平均查找复杂度O(1),而列表为O(n);10万词库中查找错词,前者近瞬时,后者平均比对5万次,前提词库稳定、只判存在性且无需顺序或频次。347 收藏