-
Java中用int[]inDegree记录各节点入度,初始化为0后遍历边递增对应下标;配合队列实现Kahn算法:入度为0者入队,出队后对其后继入度减1并入队新零入度节点,最终序列长度等于n则成功。
-
必须用name()。因name()不可重写、值稳定且跨版本一致,而toString()可被重写,用于持久化会导致反序列化失败、数据错位及隐性崩溃风险。
-
PathMatcher不支持glob中命名变量如{env},需先用glob:logs/app-*.log匹配再用正则提取变量,或直接使用regex:方案配合完整路径正则匹配。
-
BitSet.cardinality()是Java中最直接、最高效的统计方法,它返回当前BitSet中置为true的位数。无需手动遍历,也不依赖外部库。cardinality()的行为和边界条件该方法内部使用稀疏位计数优化(如分段查表+Long.bitCount),时间复杂度接近O(1)——实际是O(有效字长数),但对绝大多数场景可视为常量级。注意以下几点:空BitSet(未set任何位)返回0即使高位索引很大(如set(1_000_000)),只要中间全
-
稀疏向量集合的存储优化核心是只存非零元素及其索引,跳过冗余零值;适用于稀疏度>95%(非零占比极低)的高维向量,可大幅节省内存并提升计算效率。
-
Java集合框架是统一管理数据的“通用收纳盒”,专注存储、安全访问和灵活替换;Collection与Map因设计目标不同而互不继承;选错实现类性能差10倍;遍历时修改需用Iterator.remove()或removeIf()避免ConcurrentModificationException。
-
finalize()不是析构钩子而是GC负担,无调用保证且易致OOM;应禁用并改用Cleaner或try-with-resources。
-
企业级开发中封装与可读性需动态权衡,核心是明确封装目的、契约边界和可观测性,避免为整洁而封装,强调路径可见、职责清晰、团队共识及工程化保障。
-
BLOCKED线程从未获取锁,WAITING线程一定曾持有锁;jstack中“waitingtolock”表未抢到,“waitingon”表已持有并让出;sleep不释放锁且非WAITING,wait必须在synchronized内调用;BLOCKED自动参与锁竞争,WAITING必须显式唤醒。
-
核心思路是用类型约束代替运行时检查,让非法赋值在编译或解析阶段失败。C++中用enumclass封装数值范围,禁止隐式转换;Python通过类封装+类型注解+运行时校验构建防护层;数据库ORM和Docker环境变量也需配合类型与范围校验。
-
不能只用e.printStackTrace()记录异常,因其输出到System.err、不可控且不支持结构化日志;应使用logger.error("msg",throwable)配合SLF4J+Logback/Log4j2,并注意MDC透传与上下文传递。
-
WebSocketServerProtocolHandler必须置于pipeline最前端,因其需处理原始HTTP升级请求;若前置解码器已将其转为FullHttpRequest,则握手失败并抛IllegalStateException。
-
Java方法内联由HotSpot的C2编译器在运行时动态决定,依据方法热度、字节码大小(默认≤35)、是否含synchronized/异常处理器等执行特征;@ForceInline对普通代码无效,虚方法需JIT证明调用目标唯一才可能去虚拟化内联。
-
ThreadLocal在线程池中必然残留,不显式清理会导致上下文污染;其value为强引用,key为弱引用,异常或遗漏remove会使value长期驻留,引发数据错乱。
-
局部变量表是编译期确定的字节码静态结构,不参与运行时压栈;真正压栈的是调用过程中参数、返回地址及局部变量值,它们在操作系统栈中动态分配并按固定偏移(如ebp±n)布局,可通过C+GDB实操观测。