-
Java数组下标从0开始,有效范围为0到array.length-1;越界(如-1或≥array.length)时JVM抛出ArrayIndexOutOfBoundsException运行时异常。
-
ThreadLocal的key设为弱引用是为了避免阻断GC回收ThreadLocal实例,防止因线程长期存活导致内存泄漏;value保持强引用以保障语义一致性,其清理依赖ThreadLocalMap的探测式清理机制和显式remove()调用。
-
必须在任何I/O操作前设置Header与超时:先setConnectTimeout/setReadTimeout(单位毫秒),再setRequestProperty/addRequestProperty(中文值需URLEncoder编码),最后调用getInputStream等;顺序错乱将导致配置失效或抛异常。
-
Arrays.copyOfRange()创建全新独立数组,按[from,to)范围复制元素;from<0抛异常,to越界则补默认值,from≥to返回空数组;支持所有数组类型,不适用于泛型集合。
-
父类构造方法在子类对象实例化时必须优先执行,以确保父类字段(如privatefinalStringidCard)被正确初始化,避免未定义状态;编译器强制插入super()调用,执行顺序为:父类静态块→子类静态块→父类实例块→父类构造→子类实例块→子类构造。
-
应使用枚举配合switch实现状态分流,显式覆盖所有枚举值、禁用default兜底,Java14+推荐switch表达式,旧版default抛AssertionError;case仅调度不实现业务;状态变量须强类型绑定枚举;优先考虑在枚举内定义抽象方法实现行为穷尽。
-
Java8中启用-XX:+PrintGCDetails需配合-XX:+PrintGCTimeStamps和-Xloggc:gc.log,否则时间缺失、日志不落盘;须过滤非GC行并清理空行/ANSI码后方可解析。
-
Netty不采用RingBuffer,因其设计目标是异步I/O高吞吐、内存安全与协议灵活,已通过ByteBufAllocator内存池、CompositeByteBuf虚拟聚合、PooledByteBuf引用计数及FileRegion/transferTo和slice()等原生机制实现高效零拷贝,强行引入RingBuffer反而破坏线程模型、引发内存泄漏与拷贝冗余。
-
for-each循环本质是编译器对Iterator的语法糖,要求对象实现Iterable接口并提供每次返回新迭代器的iterator()方法;其背后执行Iterator的hasNext()、next()三步操作,支持fail-fast但不支持倒退或修改结构。
-
直接在任务提交前加限速控制更安全灵活,核心是节制任务入队动作:可用Semaphore按变量维度(如用户ID)每秒配额限流,搭配定时清理防泄漏;或用RateLimiter令牌桶实现平滑限速,支持突发流量稳定吞吐;亦可在执行阶段通过重写beforeExecute动态调控;还可结合DubboFilter在RPC层统一拦截并透传限速结果。
-
内存中用链表模拟FAT,本质是动态管理块索引信息:每个节点含block_id、status和next_block,按需分配、避免空间浪费,并支持alloc串联、free合并及哈希加速查找。
-
该用CyclicBarrier而不是CountDownLatch时:需线程组多次协同到达同一屏障点并一起继续执行,且要求可重用;CountDownLatch仅适用于一次性等待操作完成。
-
核心在于将Enrollment作为独立实体而非单纯关联表,用复合主键或自增ID建模,封装状态变更方法校验业务规则,禁用裸setter;查询避免N+1,优先@EntityGraph;外键约束须数据库级ONDELETERESTRICT并配合应用层校验。
-
Java原生Logger默认不输出日志,需显式添加ConsoleHandler并设置level;注意区分java.util.logging.Logger与log4j2/slf4j;推荐使用占位符格式化日志;生产环境应使用FileHandler并配置滚动策略。
-
单纯靠module-info.java无法实现服务变量的动态插拔,因其仅支持编译期和启动期的静态模块声明与服务契约定义,而动态启用/停用/替换需依赖运行时机制如服务注册中心、事件驱动或Spring动态Bean注册。