-
本文详解如何在Android中实现一个严格对齐“每5分钟整点”(如02:35、02:40、02:45)启动的倒计时器,支持动态计算距下一个5分钟刻度的等待时长,并自动执行5分钟倒计时任务。
-
DateTimeFormatter.parse()抛DateTimeParseException主因是格式模式与输入字符串严格不匹配;LocalDateTime.format()不输出时区因类型本身无时区;转Instant需先转LocalDateTime再指定时区;YYYY为周基年,yyyy为日历年,跨年场景易出错。
-
Java中易致内存泄漏的引用类型包括强引用(未置null或超作用域)、弱引用误用(如WeakHashMap中key未重写equals/hashCode)、静态集合滥用、内部类隐式引用、ThreadLocal未remove等。
-
SpringBoot默认能将JSON数组正确绑定到DTO的List字段,常见失败原因是JSON字段名与Java属性名不匹配,尤其是驼峰命名规则(如kPartIds→kpartIds)导致Jackson无法识别。
-
Java引用类型指类、接口、数组等非基本类型,变量存储对象地址而非数据本身;分为强、软、弱、虚四种,强度递减,影响GC回收策略,用于缓存、防内存泄漏、资源清理等场景。
-
Stack类是Vector的子类,实现LIFO栈结构,提供push、pop、peek、empty和search方法;尽管其线程安全,但现代Java推荐使用ArrayDeque替代以获得更好性能。
-
long字面量必须加L/l后缀以避免溢出和类型误判:整数字面量默认为int,超范围需显式标注;推荐大写L防混淆;各进制超int值均须加L。
-
Java数组赋值有静态初始化、动态初始化、数组间引用赋值及工具类赋值四种方式:静态初始化直接指定元素并推断长度;动态初始化先定长再逐个赋值,默认值自动填充;数组间赋值为引用传递,需用Arrays.copyOf()等复制副本;Arrays.fill()可批量设相同值。
-
Path比File更灵活,能跨平台处理路径逻辑;Files类封装90%以上基础IO操作,提供walk()高效遍历和清晰异常体系。
-
异常栈包含异常类型、调用链、根因和被抑制异常,通过printStackTrace或日志框架输出,分析时应定位首层错误、识别根因并结合行号排查,利用IDE或APM工具提升效率。
-
ArrayList默认初始容量是10Java8及之后版本中,newArrayList()创建的实例,底层elementData数组默认长度就是10。这不是“懒加载”——构造时就分配了数组,只是内容为空。容易误解的是“懒加载”这个词:ArrayList没有延迟分配底层数组的逻辑;只有带参构造且传入0时(如newArrayList(0)),才会用一个共享的空数组对象(EMPTY_ELEMENTDATA),真正首次add()时才扩容到1,再按1.5倍增长。但无参构造不走这条路。
-
不是必须,但publicstaticfinal是定义常量的标准写法:public提供访问,static确保类级共享,final保证不可变;其中基本类型和String字面量为编译期常量,其余为运行期初始化。
-
同步机制的本质是“互斥+内存可见性保障”,通过加锁清空本地缓存、解锁强制刷回主内存来保障可见性、原子性和有序性;synchronized锁对象分别是this、Class对象或指定obj;ReentrantLock需在finally中显式unlock;锁升级由MarkWord状态动态控制,含偏向锁、轻量级锁和重量级锁。
-
无符号右移(>>>)将整数二进制位序列整体右移,高位恒补0,不考虑符号位,使负数转为非负大整数;需基于补码理解,注意类型提升、移位量取模及不可用于取绝对值。
-
不能直接替换,必须在构造ThreadPoolExecutor时显式传入PriorityBlockingQueue,且需注意其不支持null、无公平性保证;队列初始化后不可变,须用newThreadPoolExecutor(...,newPriorityBlockingQueue())创建。