LRU 缓存为什么常组合哈希表和双向链表?
哈希表负责按键快速定位,双向链表维护最近使用顺序,使命中更新和淘汰尾部都可接近 O(1)。实现难点是两种结构必须原子地保持一致,并定义容量、并发、失败回滚和对象所有权。
Question Bank
按知识、方向与难度筛选;每道题都有分层回答和工程追问。
哈希表负责按键快速定位,双向链表维护最近使用顺序,使命中更新和淘汰尾部都可接近 O(1)。实现难点是两种结构必须原子地保持一致,并定义容量、并发、失败回滚和对象所有权。
侵入式链表把节点嵌入业务对象,不需为节点单独分配内存,插入删除成本稳定,还能用 container-of 找回宿主对象。代价是对象与容器耦合、同一节点不能同时属于多个链表,生命周期必须严格受控。
大 O 描述输入规模增长趋势,忽略常数、缓存、总线争用、分支和抢占;实时系统关心给定平台与输入边界下的时间上界。应先限制数据规模和执行路径,再结合测量与静态分析建立 WCET 证据。
首先固定区间语义为闭区间或半开区间,并让循环条件、mid 更新和返回值保持一致。`mid = low + (high-low)/2` 可避免端点相加溢出;处理重复值时还要明确找任意、首个还是插入位置。
模空间中的新旧关系只能在小于半个序列空间的已知窗口内定义,不能直接用普通大于号。常见做法是以无符号差值与半范围比较,并限制最大在途窗口,恰好相差半空间时需定义为不可比较。
简单校验和主要累加数据,CRC 按选定生成多项式计算余数,对特定长度内的突发错误有可分析的检测能力。两者都不是带密钥的认证,攻击者可以重算;防篡改应使用 MAC 或数字签名。
ADC 采样保持电容需要在采样窗口内通过信号源充到足够接近输入电压。源阻抗高或通道切换过快时,电容来不及稳定并残留前一通道电荷;可延长采样时间、加缓冲或丢弃首样。
DMA 缓冲顺序由 ADC 常规序列和转换完成请求规则决定,不应假设按通道编号排列。要配置连续/单次、序列长度和 DMA 循环模式,处理半满/全满边界,并监控 ADC Overrun 与 DMA 错误。