这里记录了后端面试中常考的算法与数据结构题目(建议搭配 LeetCode 刷题):

经典数据结构

  • 数组和链表的区别是什么?
  • 栈(Stack)和队列(Queue)的区别?如何用两个栈实现一个队列?
  • 什么是哈希表(Hash Table)?如何解决哈希冲突(拉链法、开放寻址法)?
  • 什么是二叉搜索树(BST)、平衡二叉树(AVL)和红黑树?
  • 什么是堆(Heap)?大顶堆和小顶堆的应用场景?
  • 什么是图(Graph)?深度优先搜索(DFS)和广度优先搜索(BFS)的区别?

常见排序与查找算法

  • 手写快速排序(Quick Sort),它的时间复杂度和空间复杂度是多少?
  • 手写归并排序(Merge Sort)。
  • 什么是堆排序(Heap Sort)?
  • 手写二分查找(Binary Search),以及它的变体(找第一个大于等于目标值的元素等)。

高频手撕代码题 (LeetCode)

  • 链表:反转链表(单链表反转、K个一组反转)、判断链表是否有环、合并两个有序链表。
  • :二叉树的前序/中序/后序遍历(递归与非递归实现)、二叉树的层序遍历、二叉树的最大深度、最近公共祖先。
  • 双指针/滑动窗口:无重复字符的最长子串、三数之和、接雨水、盛最多水的容器。
  • 栈与队列:有效的括号、最小栈、滑动窗口最大值。
  • 动态规划 (DP):爬楼梯、打家劫舍、最长递增子序列(LIS)、最长公共子序列(LCS)、背包问题、零钱兑换。
  • 回溯算法:全排列、组合总和、N 皇后问题。
  • 贪心算法:买卖股票的最佳时机、跳跃游戏。

场景与高级算法

  • 如何实现一个 LRU(最近最少使用)缓存淘汰算法?(哈希表 + 双向链表)
  • 如何实现一个 LFU 缓存淘汰算法?
  • 海量数据处理:如何在 10 亿个数中找出 Top K 大的数?(分治 + 最小堆 / 快速选择)
  • 海量数据处理:如何判断一个元素是否存在于百亿数据中?(布隆过滤器 Bloom Filter)
  • 字符串匹配算法:手写 KMP 算法。
  • 一致性 Hash 算法的代码实现思路。