-
IntStream.range(1,5)输出1~4,因其为左闭右开区间(startInclusive,endExclusive),与List.subList()、String.substring()语义一致,易因误用导致数量偏差。
-
Stream.of适用于已知数量的零散对象,接收可变参数生成顺序流;误用会导致非空流、类型推导错误或数组未展开等问题,应据输入形态选用Stream.of、Arrays.stream或collection.stream()。
-
DateTimeFormatter的核心作用是格式化时间对象为字符串及解析字符串为时间对象,是Java8后线程安全的唯一推荐方案,替代了不安全的SimpleDateFormat。
-
推荐用UUID.randomUUID().toString().replace("-","")生成idempotentId——简单无依赖、碰撞概率可忽略;校验必须放在Service层入口,Controller只透传;唯一索引兜底优先选ONDUPLICATEKEYUPDATE;清理pending记录需加分布式锁并结合状态与时间判断。
-
Java对象与JSON转换常用Jackson和Gson库实现,1.Jackson需添加jackson-databind依赖,使用ObjectMapper的writeValueAsString和readValue方法进行序列化和反序列化;2.Gson需引入gson依赖,通过Gson实例的toJson和fromJson完成转换;3.注意类需有无参构造函数,字段建议私有并提供getter/setter,日期格式可自定义,集合转换时Gson需TypeToken获取泛型类型,Jackson支持注解忽略字段,Spri
-
自定义注解驱动深层属性映射通过@CopyField声明字段拷贝规则,结合反射实现动态、可控的深拷贝,支持嵌套路径、类型转换、循环引用防护等,适用于运行时灵活控制场景。
-
ArrayDeque做栈比Stack快,因Stack继承Vector有同步开销,而ArrayDeque是非线程安全、数组实现、无锁的;用push/pop/peek,初始化容量建议设为2的幂。
-
根本原因是ArrayList迭代器采用fail-fast机制,遍历时检测到modCount被修改即抛ConcurrentModificationException;CopyOnWriteArrayList通过写时复制、读用快照绕过校验,但仅适用于读多写少场景。
-
动态菜单管理需将菜单数据存入数据库并结合权限控制,采用单表自关联设计sys_menu表,后端按用户权限查询组装树形结构并缓存,前端动态注册路由并递归渲染,配合路由守卫与按钮级权限校验。
-
Phaser是为动态、多阶段、可变参与线程数的协作场景设计的同步工具;适用于准备→预处理→主计算→汇总等分阶段且每阶段线程数可变的流程。
-
JDK动态代理通过接口+反射+InvocationHandler统一实现权限校验与事务管理,要求目标类必须实现接口;invoke方法中按序执行权限检查、事务开启、业务调用、提交/回滚;支持注解驱动的条件增强。
-
Java数组下标从0开始,有效范围为0到array.length-1;越界(如-1或≥array.length)时JVM抛出ArrayIndexOutOfBoundsException运行时异常。
-
HashedWheelTimer通过单线程驱动、固定tick间隔、O(1)任务插入及层级时间轮结构,显著降低高频心跳场景下的CPU和调度开销;IdleStateHandler默认集成该机制,支持10万连接仅用一个线程统一调度。
-
对象创建分五步:类加载检查、内存分配、零值初始化、对象头填充、执行<init>方法;每步确保类就绪、空间分配、结构完整、字段安全、语义赋予。
-
当类属性超过7~10个、方法复杂、频繁因不同原因修改或难以描述核心职责时,表明类已过大;应按业务逻辑将相关属性封装为新类(如Address、OrderItems),通过组合替代冗长字段,降低耦合,提升可维护性与内聚性。