计算机基础面试(数据结构)

1. 数组和链表的区别是什么?各自的优缺点是什么?
  • 专业解答

    数组内存连续,支持随机访问,但插入删除效率低;链表内存离散,插入删除高效,但访问需遍历。

  • 初中生版
    数组 像排座位,按编号找人快,但中间加人麻烦;链表像自由组队,拉人容易,但找人得挨个问。


2. 什么是哈希表?如何解决哈希冲突?
  • 专业解答

    哈希表通过键值映射实现快速存取。冲突解决方法:开放寻址法(找下一个空位)、链地址法(拉链表)。

  • 初中生版

    哈希表像快递柜:用手机号(键)算出柜子号(哈希值)。冲突时,要么找下一个空柜(开放寻址),要么同一柜子放多个包裹(链表)。


3. 二叉搜索树(BST)的性质是什么?如何实现插入和删除?
  • 专业解答

    BST左子树值 < 根 < 右子树值。插入从根开始比较;删除需分三种情况(叶子节点、单子、双子)。

  • 初中生版

    BST像猜数字:每次猜中间数,根据大小缩小范围。插入像按规则排队,删除像抽走中间人时找替补。


4. 什么是红黑树?与AVL树的区别是什么?
  • 专业解答

    红黑树是近似平衡的二叉搜索树,通过旋转和变色保持平衡,查询稍慢但插入删除更高效。AVL树严格平衡,查询快但维护成本高。

  • 初中生版
    红黑树 像灵活的交通信号灯,允许轻微不平衡但调整快;AVL树像严格交警,必须完全平衡但调整麻烦。


5. 什么是堆?如何用堆实现优先队列?
  • 专业解答

    堆是完全二叉树,最大堆根节点最大,最小堆反之。优先队列通过堆的插入和提取根节点实现。

  • 初中生版

    堆像金字塔:最大堆的顶层是最大的西瓜。优先队列像急诊室,最紧急的病人(堆顶)先被处理。


6. 快速排序和归并排序的时间复杂度及稳定性分析。
  • 专业解答

    快排平均O(n log n),最坏O(n²),不稳定;归并稳定O(n log n),但需额外空间。

  • 初中生版
    快排 像分班比赛:每次选班长分两队,可能选错人导致效率低;归并像合并小组,先拆到单人再两两合并,稳定但占地方。


7. 什么是动态规划?举一个典型问题(如背包问题)并说明解决思路。
  • 专业解答

    动态规划通过状态转移方程分解子问题,存储中间结果避免重复计算。背包问题:选物品使总价值最大且不超重。

  • 初中生版

    动态规划像存钱罐:每天存一点,最后算总数。背包问题像装行李,选最值钱又不超重的组合。


8. 什么是贪心算法?与动态规划的区别是什么?
  • 专业解答

    贪心每一步选局部最优,不回溯;动态规划保存所有子问题解,可能回溯。

  • 初中生版
    贪心 像吃自助餐:每次拿最贵的菜;动态规划像存零花钱:每天留一点,最后买大件。


9. 广度优先搜索(BFS)和深度优先搜索(DFS)的实现方式及应用场景。
  • 专业解答

    BFS用队列,逐层遍历;DFS用栈或递归,优先深入。BFS找最短路径,DFS拓扑排序。

  • 初中生版
    BFS 像水面涟漪:一圈圈扩散找最近目标;DFS像探险:一条路走到头再回头。


10. 什么是拓扑排序?如何检测有向图中的环?
  • 专业解答

    拓扑排序对DAG节点线性排序,入度为0的节点优先。环导致无法排序。

  • 初中生版

    拓扑排序像穿衣服顺序:先穿内衣再外套。如果发现"外套要穿在内衣里面",说明有环。


11. 什么是Dijkstra算法?如何解决负权边问题?
  • 专业解答

    Dijkstra用贪心策略找单源最短路径,无法处理负权边。负权边需用Bellman-Ford或SPFA。

  • 初中生版

    Dijkstra像导航:每次都选最近的路,但遇到"倒贴钱"的路(负权)会失效,需换工具。


12. 什么是KMP算法?部分匹配表(Prefix Table)的作用是什么?
  • 专业解答

    KMP通过前缀表跳过重复匹配,时间复杂度O(n+m)。前缀表记录最长公共前后缀长度。

  • 初中生版

    KMP像聪明的找字:如果匹配失败,根据"记忆"跳过已知位置,不用从头开始。


13. 什么是并查集(Union-Find)?如何优化路径压缩?
  • 专业解答

    并查集维护集合,支持合并与查询。路径压缩将树高度降为1,提升查询效率。

  • 初中生版

    并查集像家族族谱:查两人是否同家族,路径压缩让所有人直接认族长为父。


14. 什么是LRU缓存淘汰算法?如何用双向链表+哈希表实现?
  • 专业解答

    LRU淘汰最久未使用的数据。哈希表存键值对,双向链表维护访问顺序,头尾操作O(1)。

  • 初中生版

    LRU像冰箱:最近吃的放门口,很久没吃的放里面。双向链表记录顺序,哈希表快速定位。


15. 什么是布隆过滤器?优缺点及适用场景是什么?
  • 专业解答

    布隆过滤器用位数组和多个哈希函数判断元素是否存在,空间效率高但有误判率。适用于缓存穿透场景。

  • 初中生版

    布隆过滤器像班级点名册:可能误判"某人没来"(实际来了),但绝对不误判"来了的人没来"。


16. 什么是Trie树?如何实现前缀匹配?
  • 专业解答

    Trie树(字典树)用树结构存储字符串,共享公共前缀。前缀匹配沿树路径遍历。

  • 初中生版

    Trie树像查字典:先找首字母,再逐步缩小范围,适合自动补全。


17. 什么是跳表(Skip List)?与平衡树的比较?
  • 专业解答

    跳表通过多级索引加速查找,平均O(log n)。与平衡树相比,实现简单,支持高并发。

  • 初中生版

    跳表像地铁线路图:多层站台快速跳转,比逐站找快很多。


18. 什么是回溯算法?举一个例子(如八皇后问题)说明实现思路。
  • 专业解答

    回溯通过递归尝试所有可能,剪枝无效路径。八皇后问题:逐行放置皇后,冲突则回退。

  • 初中生版

    回溯像走迷宫:走到死胡同就回头,换条路试试。


19. 什么是Manacher算法?如何实现线性时间的最长回文子串查找?
  • 专业解答

    Manacher算法预处理字符串,利用对称性减少重复计算,时间复杂度O(n)。

  • 初中生版

    Manacher像聪明的镜子:找最长对称子串时,利用已知对称信息避免重复检查。


20. 什么是最大子数组和问题?如何用分治法解决?
  • 专业解答

    分治法将数组分为左右两半,递归求解左、右、跨中间的最大子数组和。

  • 初中生版

    最大子数组和像找最赚钱的连续几天:分成左半、右半、中间跨界的三种情况,取最大值。


21. 什么是编辑距离?动态规划的实现步骤是什么?
  • 专业解答

    编辑距离通过动态规划计算两字符串最少操作次数(增删改)。状态转移方程分三种操作。

  • 初中生版

    编辑距离像改错字:每次改一个字母,记录最少步骤。动态规划像填表格,一步步推导。


22. 什么是位运算?如何用位运算实现加法?
  • 专业解答

    位运算直接操作二进制位。加法可通过异或(无进位和)和与运算(进位)循环实现。

  • 初中生版

    位运算像手动算加法:异或是个位相加,进位是十位进位,循环直到无进位。


23. 什么是蒙特卡洛方法?在算法中的应用场景是什么?
  • 专业解答

    蒙特卡洛通过随机采样近似求解,适用于高维积分、概率模拟等复杂问题。

  • 初中生版

    蒙特卡洛像掷骰子估算面积:随机撒点,统计落在目标区域的比例。


24. 什么是NP完全问题?举例说明(如旅行商问题)。
  • 专业解答

    NP完全问题无法在多项式时间内求解,但解可快速验证。旅行商问题:找最短路径遍历所有城市。

  • 初中生版

    NP完全问题像超级难题:找不到快方法,但猜到答案后能很快验证是否正确。


25. 什么是滑动窗口算法?如何解决子数组最大和问题?
  • 专业解答

    滑动窗口维护窗口左右边界,动态调整区间。子数组最大和问题:窗口扩展,和小于0时重置左边界。

  • 初中生版

    滑动窗口像望远镜:调整视野范围,找到最亮的星星(最大和)。


26. 什么是前缀和数组?如何优化区间查询?
  • 专业解答

    前缀和数组存储前i项和,区间和可通过前缀和相减O(1)计算。

  • 初中生版

    前缀和像记账本:记录每天累计花费,查某段时间的总花费直接相减。


27. 什么是线段树?如何实现区间查询和更新?
  • 专业解答

    线段树每个节点代表区间,支持区间查询(如求和)和更新,时间复杂度O(log n)。

  • 初中生版

    线段树像分治工具:把大问题拆成小问题,每个小问题存结果,查询和更新都很快。


28. 什么是树状数组(Fenwick Tree)?与线段树的区别是什么?
  • 专业解答

    树状数组通过二进制分解实现区间查询和单点更新,代码更简洁但功能较线段树少。

  • 初中生版

    树状数组像分层统计:每层存部分数据,查改时合并多层结果。比线段树更轻量。


29. 什么是A*算法?启发函数的作用是什么?
  • 专业解答

    A*结合Dijkstra和贪心,启发函数h(n)估计剩余代价,优先扩展总代价f(n)=g(n)+h(n)最小的节点。

  • 初中生版

    A*像聪明的导航:不仅看已走路程(g(n)),还猜剩余距离(h(n)),选最优路线。


30. 什么是遗传算法?基本原理及适用场景?
  • 专业解答

    遗传算法模拟自然选择,通过选择、交叉、变异迭代优化,适用于复杂优化问题。

  • 初中生版

    遗传算法像养宠物:选表现好的个体(选择),繁殖后代(交叉),偶尔变异,一代代优化。

相关推荐
Lee川1 天前
优雅进化的JavaScript:从ES6+新特性看现代前端开发范式
javascript·面试
Lee川1 天前
从异步迷雾到优雅流程:JavaScript异步编程与内存管理的现代化之旅
javascript·面试
晴殇i1 天前
揭秘JavaScript中那些“不冒泡”的DOM事件
前端·javascript·面试
绝无仅有2 天前
Redis过期删除与内存淘汰策略详解
后端·面试·架构
绝无仅有2 天前
Redis大Key问题排查与解决方案全解析
后端·面试·架构
AAA梅狸猫2 天前
Looper.loop() 循环机制
面试
AAA梅狸猫2 天前
Handler基本概念
面试
Wect2 天前
浏览器缓存机制
前端·面试·浏览器
掘金安东尼2 天前
Fun with TypeScript Generics:玩转 TS 泛型
前端·javascript·面试
掘金安东尼2 天前
Next.js 企业级落地
前端·javascript·面试