-
Java的try-with-resources本质是编译器自动生成带异常压制的逆序close调用,资源变量提升为局部变量,finally中按声明逆序关闭,每个close独立捕获异常并压制到主异常。
-
空对象模式是用有行为、有语义的默认对象替代null,解决调用方需安全调用方法的设计问题;适用于“空”为有意义业务状态的场景,如未登录用户、无优惠券、日志未启用等,而非错误情形。
-
slice()创建的是可读字节范围的独立视图,新缓冲区position恒为0、capacity和limit等于原缓冲区remaining(),底层数据数组完全共享,索引状态互不影响,但修改共享内存内容双方立即可见。
-
可用ASCII值作数组下标直接计数,适用于0–127或0–255范围;支持Unicode需预处理;统计英文字母可压缩至26位,分组计数(大小写、数字)可提升效率与清晰度。
-
ConcurrentHashMap的无锁读不依赖扩容过程,而是靠volatile+不可变性+有序写入保障;get()只算hash、定位桶、遍历查找,不检查sizeCtl、transferIndex或nextTable,即使正在扩容也只读原table或已迁移节点。
-
MongoDB官方Java驱动和SpringDataMongoDB均未提供内置的文档版本控制功能,需通过手动添加版本字段、历史集合或变更流等方式实现,本文详解三种主流实现方案及代码示例。
-
try-catch本身不阻碍JIT编译,但作用域过大会稀释热点密度、延迟C2编译;应将核心逻辑抽为无try的小方法,异常处理外移到调用层。
-
getFirst()和getLast()是LinkedList的O(1)首尾安全访问方法,空链表抛NoSuchElementException,需判空或try-catch;非List接口方法,仅Deque实现类支持。
-
Float.floatToIntBits()是将float的IEEE75432位二进制表示直接解释为int位模式,不进行数值转换;它用于位级操作,如精确比较、序列化和哈希,区别于(int)f等数值映射。
-
@Retention(RetentionPolicy.RUNTIME)是前提,否则注解编译后即丢弃,运行时无法通过反射获取;必须搭配@Target指定作用位置,且注解元素需为常量类型、有合法默认值,反射读取时须判空并从实际声明类中获取。
-
Thread.onSpinWait不能直接降低CPU耗电,因为它仅是向硬件发出轻量提示(如x86的PAUSE),不触发降频或关核等电源管理动作;是否节能取决于CPU微架构是否响应该提示,且必须配合volatile变量、无副作用循环及短时等待场景才有效。
-
Class对象是JVM为每个类生成的唯一元数据载体,代表其结构与运行时身份;它非普通实例,而是java.lang.Class类型对象,是反射入口、类型系统基石,生命周期绑定类加载器。
-
Java8引入默认方法允许接口定义具体实现,使用default关键字声明,默认方法可被实现类继承或重写。例如:publicinterfaceMyInterface{voiddoSomething();defaultvoidprintInfo(){System.out.println("这是接口的默认实现");}}实现类MyClass可直接调用printInfo()而无需重写。当类实现多个含同名默认方法的接口时,必须显式重写以解决冲突,如Impl类需重写hello()并指定A.super.hello()或B
-
自定义ThreadFactory的核心目标是让每个线程在创建时就具备可识别的名称和一致的行为属性,命名需含业务标识、自增序号和可选类型后缀,长度≤32字符;newThread()中须统一设置守护状态、优先级、异常处理器和线程组;避免耗时操作、静态实例复用及运行时改名。
-
最简多线程方式是newThread()并调用start(),不可用run();仅能start一次;推荐传Runnable而非继承Thread;需注意命名、守护线程设置时机及共享变量的线程安全问题。