
链表
应手写双向链表节点+裸指针映射,因std::list+std::unordered_map易致迭代器失效;需精确控制指针、统一初始化、严格按序操作内存,哨兵模式简化边界处理。
2025年末一线大厂C++后端面试真题聚焦高频痛点:内存管理强调堆栈差异、new/delete与malloc/free行为及智能指针RAII;虚函数靠vtable实现多态,基类析构必须virtual防...
MySQL默认使用B+Tree索引,因其将数据全存于叶子节点、非叶节点仅存键和指针,树更矮、IO更少,且天然支持范围查询、最左前缀匹配和覆盖索引。
缓冲池是InnoDB性能核心,缓存数据页等,读写均优先操作内存;日志缓冲与重做日志保障持久性;变更缓冲区优化非唯一二级索引写性能;MVCC与行级锁协同实现高并发事务隔离。
BufferPool本身不支持分区,所谓“分区”实为通过innodb_buffer_pool_instances等参数分片管理关键结构以降低闩锁争用。需结合硬件、负载与版本精细调优,避免盲目增加实例数...
unordered_map查找平均O(1)但不保序、可能因rehash失效迭代器;map查找O(logn)但有序、迭代器更稳定;小规模数据时map常数优势可能反超,需实测验证。
std::list是双向链表容器,支持O(1)插入删除但不支持随机访问;可空初始化、指定元素构造、初始化列表或范围构造;操作均基于迭代器,支持头尾及任意位置增删、条件删除;遍历须用迭代器或范围for。
std::forward_list是C++11引入的轻量单向链表,仅支持前向遍历和头/指定位置插入(无push_back),内存开销小于list,size()在C++17前非O(1),推荐用empty...
Factory和Strategy模式用于解耦对象创建与行为逻辑,避免硬编码导致的扩展困难;interface{}易引发panic,应使用强类型key;embed+template结合TemplateM...
MySQL的LRU采用冷热分离策略,将BufferPool划分为热区(63%)和冷区(37%),新页入冷区头部,仅1秒后再次访问才晋升热区,并在热区内按3/4规则优化移动。