-
数组实现拓扑排序检测依赖环的核心是Kahn算法:用入度数组记录各变量被依赖次数,邻接表数组记录其直接依赖项;通过静态数组模拟队列进行BFS式剥离,最终若处理节点数cnt等于n则无环,否则存在环。
-
JavaIO异常处理需区分检查型异常(如IOException)与运行时异常,优先用try-with-resources自动释放资源,按子类精细化捕获(如FileNotFoundException、SocketTimeoutException),避免空catch或笼统捕获Exception。
-
execute()提交Runnable时异常会直接穿透至线程层面,触发默认UncaughtExceptionHandler打印堆栈并终止工作线程,线程池随后新建线程补位;因Runnable.run()不支持throws,unchecked异常未捕获即导致线程立即终止,这是ThreadPoolExecutor的主动设计而非bug。
-
Comparator.nullsFirst()的核心作用是生成一个能安全处理null的比较器包装器,使所有null值排在非null值之前,而非null元素仍按原比较逻辑排序。
-
flatMap仅用于内存中对已有集合扁平化转换,不支持日志采集、索引构建、倒排查询等实时检索功能;它适合单次批处理中展开嵌套日志结构,如将含多个span的JSON日志拆为多条SpanEvent。
-
new触发类加载(含初始化)后分配内存并写入对象头,再自顶向下执行构造器链;反射、clone、反序列化等绕过构造器,导致字段未按预期初始化。
-
Springfox3.x在SpringBoot2.6+需配置spring.mvc.throw-exception-if-no-handler-found:false且spring.resources.add-mappings:true,访问路径为/swagger-ui/;SpringBoot3.x不兼容Springfox,须迁移到springdoc-openapi。
-
ArrayList随机访问为O(1),LinkedList为O(n),因前者基于数组后者为链表;频繁索引遍历时ArrayList快3–10倍;仅头部/中间高频增删且无随机访问需求时才选LinkedList。
-
不能。GCViewer仅解析JVMGC日志中的暂停事件、频率和堆变化,不接入请求时间序列或业务指标,无法直接计算GC对P99延迟的贡献,需结合业务响应时间与GC暂停数据手动估算。
-
Path.iterator()不解析变量目录,仅遍历路径字符串按分隔符切分后的逻辑段;需先手动展开变量(如${HOME}),再构建Path并调用iterator()。
-
双亲委派被破坏的典型场景有四类:1.线程上下文类加载器(TCCL)用于SPI加载;2.模块化容器如OSGi实现类隔离;3.JDK自身对动态代理、Lambda等的特殊处理;4.用户自定义ClassLoader主动绕过。
-
顺序栈用top跟踪栈顶,top=-1时data[0]为首个入栈位,入栈先++top后赋值,出栈先取data[top]再--top;top=0时入栈先赋值后++top,出栈先--top再取data[top-1];所有操作须严格判空判满防越界。
-
HashMap允许null作为key和value,这是设计选择而非bug;但get()返回null时存在二义性:既可能键不存在,也可能键存在而值为null,易引发逻辑误判和偶发异常。
-
NumberFormat.getPercentInstance()将比率值(0.0–1.0)自动×100并添加本地化百分号,需传入0.75而非75;默认舍入为整数,可通过setMinimum/MaximumFractionDigits控制小数位;必须指定Locale以确保多语言正确性;parse()会自动÷100还原为比率。
-
调小max.poll.records是最快速有效的手段,但需结合业务处理速度、消息大小和内存资源系统性调整,并协同优化fetch.max.bytes、max.partition.fetch.bytes及JVM堆内存分配。