-
背压需下游显式驱动而非默认启用,缺失将导致内存溢出;应排查无界缓冲、未调用request、不兼容操作符等问题,并采用onBackpressureDrop等兜底策略及limitRate等长期设计方式。
-
动态代理拦截机制实现SQL敏感字段脱敏的关键在于数据流出前实时变形,不改数据库、不改业务代码,通过JDBC层(如MyBatis拦截器)或网络层(如Java代理服务器)嵌入脱敏逻辑,统一可控且无感知。
-
“早衰OOM”源于短命大对象快速填满老年代,需通过调小-XX:NewRatio(如设为1)扩大新生代、降低-XX:SurvivorRatio(如设为4)增强Survivor缓冲,并结合-XX:PretenureSizeThreshold精准拦截大对象,最终以晋升率下降、Survivor利用率稳定、零FullGC为验证指标。
-
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,"默认值"),适用于日志、调试等只读展示场景。