-
byte状态掩码比boolean[]或结构体更优,因其严格占1字节、无填充、跨平台一致;掩码须为2的幂次(如1<<0、1<<1),操作用&、|=、&=~、^=实现原子性读写。
-
PriorityBlockingQueue不能直接用作任务队列,因其不支持重复元素的稳定排序,且默认不处理Comparable为null的情况,易抛NullPointerException或导致优先级失效;业务多维排序需显式传入健壮Comparator并外置排序逻辑,避免任务类耦合compareTo实现。
-
异常不应用于流程控制,因其触发栈帧展开、抑制JIT优化,性能下降3–10倍;IO失败应区分可恢复场景(默认值+warn)与契约破坏;并发中锁内抛异常易致状态不一致;日志必须打印完整堆栈。
-
事务提交后逻辑需用TransactionSynchronizationAdapter的afterCommit()注册,确保数据库已提交且变更可见;直接写代码或误用TransactionSynchronizationManager将失效。
-
掌握JavaMailAPI并配置SMTP参数,即可实现邮件发送功能。1.添加javax.mail依赖;2.配置SMTP服务器、端口、账号及授权码;3.使用Session、MimeMessage和Transport发送HTML邮件;4.注意SSL、认证、编码等问题。复用Session可优化性能,后续可扩展附件与模板功能。
-
重载任务执行器本身不能直接动态修改变量参数,但可通过解耦任务定义、执行器控制与参数管理,在并发中实现参数实时调整;需封装动态线程池、将参数设为任务成员字段、手动注册可刷新Cron任务、重载任务构造方法、用AtomicReference或配置中心驱动运行时变量变更。
-
false是Java中boolean类型的独立布尔字面量,非零非空;它是类字段默认值,但局部变量必须显式初始化,且不可与Boolean包装类混淆,否则易引发NullPointerException。
-
缓存注解对象能显著提速,因其避免每次调用getAnnotation()时JVM重复创建动态代理、初始化Map及安全检查等开销;使用ConcurrentHashMap以Method/Field为key懒加载缓存,配合MethodHandle可将属性读取压至60纳秒内。
-
sdkman是Linux/macOS用户切换Java版本最省心的选择,它独立安装JDK于用户目录、仅修改PATH和JAVA_HOME、无污染无冲突;Windows用户可用jabba或手动配置;Ubuntu的update-alternatives不设JAVA_HOME,IDE和构建工具各有独立配置。
-
舍入模式须按业务逻辑选定,不可随意;HALF_UP适用于通用四舍五入场景,UP/DOWN分别表示远离/靠近零取整,UNNECESSARY用于精度校验。
-
ConcurrentSkipListMap的核心价值是基于跳表实现无锁化线程安全与键有序性:底层为分层有序链表,通过volatile+CAS完成插入/删除/查找,支持O(logn)性能及高效范围查询。
-
Objects.toString()能安全将可能为null的对象转为字符串并支持默认值,避免空指针异常;用法为Objects.toString(obj,"默认值"),适用于日志、调试等只读展示场景。
-
不能安全合规地利用MethodHandles.Lookup访问第三方库私有方法,因JVM模块系统要求目标模块opens包、调用方模块声明requires、启动参数需--add-opens,且类加载器与ProtectionDomain须一致。
-
接口不能写静态代码块,因其本质是契约规范而非可执行单元,不参与类加载初始化,JVM禁止在interface中执行static{},否则编译报错;替代方案是用final工具类封装静态代码块完成一次性初始化,并由接口引用其字段。
-
Java中比较字符串内容必须用.equals()而非==,因为==比较内存地址,equals比较字符内容;推荐使用"abc".equals(str)防空指针,忽略大小写用equalsIgnoreCase,排序用compareTo,避免依赖字符串常量池的==巧合。