算法经典算法与思想

贪心算法和动态规划有什么区别?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法经典算法与思想

时间复杂度和空间复杂度怎么分析?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法经典算法与思想

什么是动态规划?典型的动态规划问题有哪些?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法经典算法与思想

二叉树有几种遍历方式?分别怎么实现?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法经典算法与思想

如何判断一个链表是否有环?如何找到环的入口节点?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法经典算法与思想

如何反转一个链表?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法经典算法与思想

DFS 和 BFS 有什么区别?分别在什么场景用?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法经典算法与思想

二分查找怎么实现?写代码时容易出哪些坑?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法经典算法与思想

归并排序的原理是什么?怎么实现?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法经典算法与思想

哈希表的原理是什么?哈希冲突怎么解决?

面试算法
参考答案
  1. HashMap 基于数组、链表和红黑树,先 hash 定位桶位,冲突后链表或树化存储。
  2. 扩容通常按负载因子触发,容量翻倍后元素要重新分布;JDK 8 之后链表过长且数组足够大时会树化。
  3. 线程安全场景不能用 HashMap,ConcurrentHashMap 通过更细粒度的并发控制提升并发读写能力。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. HashMap 基于数组、链表和红黑树,先 hash 定位桶位,冲突后链表或树化存储。 2. 扩容通常按负载因子触发,容量翻倍后元素要重新分布;JDK 8 之后链表过长且数组足够大时会树化。 3. 线程安全场景不能用 HashMap,ConcurrentHashMap 通过更细粒度的并发控制提升并发读写能力。 容易被追问: - 为什么树化阈值不是很小? - ConcurrentHashMap 读为什么快? 注意事项: - 不要只说 HashMap 线程不安全,要说明并发写可能导致数据覆盖或结构异常。
算法排序算法

数组长度为N,找出最大的前K个值,怎么设计这个算法?时间复杂度是多少

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法排序算法

如果要对一个很大的数据集,进行排序,而没办法一次性在内存排序,这时候怎么办?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法排序算法

快排这么强,那冒泡排序还有必要吗?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法排序算法

快排为什么时间复杂度最差是O(n^2)

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法排序算法

说说快排流程,时间复杂度

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法排序算法

稳定和不稳定排序算法有什么特点?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法排序算法

什么是排序稳定性?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法排序算法

归并排序和快速排序的使用场景

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法排序算法

堆排序算法原理,稳定吗?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法排序算法

讲一下快排原理

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法排序算法

讲一下冒泡排序算法

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法排序算法

说几个你懂的排序算法,并说明其时间空间复杂度

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法数据结构

布隆过滤器怎么设计?时间复杂度?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法数据结构

LRU是什么?如何实现?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法数据结构

前缀树是什么?有什么应用?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法数据结构

堆是什么?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法数据结构

红黑树,b树,b+树有什么区别?

面试算法
参考答案
  1. B+ 树适合磁盘索引,因为非叶子节点只保存 key 和指针,单页能放更多索引项,树高更低,随机 I/O 更少。
  2. 所有数据在叶子节点,且叶子节点有链表,范围查询和排序扫描更稳定;哈希索引虽然等值快,但不支持范围和有序遍历。
  3. 面试可以结合 InnoDB:聚簇索引叶子节点存整行,二级索引叶子节点存主键,回表就是用主键再查聚簇索引。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. B+ 树适合磁盘索引,因为非叶子节点只保存 key 和指针,单页能放更多索引项,树高更低,随机 I/O 更少。 2. 所有数据在叶子节点,且叶子节点有链表,范围查询和排序扫描更稳定;哈希索引虽然等值快,但不支持范围和有序遍历。 3. 面试可以结合 InnoDB:聚簇索引叶子节点存整行,二级索引叶子节点存主键,回表就是用主键再查聚簇索引。 容易被追问: - 什么情况下会回表? - 联合索引为什么有最左前缀? 注意事项: - 不要只说 B+ 树快,要说快在哪里:页大小、树高、I/O 和范围查询。
算法数据结构

B+树和B树有什么不一样,B+树的叶子节点和非叶子节点有什么不一样,非叶子节点会不会存数据?

面试算法
参考答案
  1. B+ 树适合磁盘索引,因为非叶子节点只保存 key 和指针,单页能放更多索引项,树高更低,随机 I/O 更少。
  2. 所有数据在叶子节点,且叶子节点有链表,范围查询和排序扫描更稳定;哈希索引虽然等值快,但不支持范围和有序遍历。
  3. 面试可以结合 InnoDB:聚簇索引叶子节点存整行,二级索引叶子节点存主键,回表就是用主键再查聚簇索引。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. B+ 树适合磁盘索引,因为非叶子节点只保存 key 和指针,单页能放更多索引项,树高更低,随机 I/O 更少。 2. 所有数据在叶子节点,且叶子节点有链表,范围查询和排序扫描更稳定;哈希索引虽然等值快,但不支持范围和有序遍历。 3. 面试可以结合 InnoDB:聚簇索引叶子节点存整行,二级索引叶子节点存主键,回表就是用主键再查聚簇索引。 容易被追问: - 什么情况下会回表? - 联合索引为什么有最左前缀? 注意事项: - 不要只说 B+ 树快,要说快在哪里:页大小、树高、I/O 和范围查询。
算法数据结构

B+树的特点是什么?

面试算法
参考答案
  1. B+ 树适合磁盘索引,因为非叶子节点只保存 key 和指针,单页能放更多索引项,树高更低,随机 I/O 更少。
  2. 所有数据在叶子节点,且叶子节点有链表,范围查询和排序扫描更稳定;哈希索引虽然等值快,但不支持范围和有序遍历。
  3. 面试可以结合 InnoDB:聚簇索引叶子节点存整行,二级索引叶子节点存主键,回表就是用主键再查聚簇索引。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. B+ 树适合磁盘索引,因为非叶子节点只保存 key 和指针,单页能放更多索引项,树高更低,随机 I/O 更少。 2. 所有数据在叶子节点,且叶子节点有链表,范围查询和排序扫描更稳定;哈希索引虽然等值快,但不支持范围和有序遍历。 3. 面试可以结合 InnoDB:聚簇索引叶子节点存整行,二级索引叶子节点存主键,回表就是用主键再查聚簇索引。 容易被追问: - 什么情况下会回表? - 联合索引为什么有最左前缀? 注意事项: - 不要只说 B+ 树快,要说快在哪里:页大小、树高、I/O 和范围查询。
算法数据结构

二叉树搜索最坏的时间复杂度,为什么会这样?以及用什么结果解决?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法数据结构

红黑树和AVL树相比查询性能好还是插入性能好一些?

面试算法
参考答案
  1. HashMap 基于数组、链表和红黑树,先 hash 定位桶位,冲突后链表或树化存储。
  2. 扩容通常按负载因子触发,容量翻倍后元素要重新分布;JDK 8 之后链表过长且数组足够大时会树化。
  3. 线程安全场景不能用 HashMap,ConcurrentHashMap 通过更细粒度的并发控制提升并发读写能力。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. HashMap 基于数组、链表和红黑树,先 hash 定位桶位,冲突后链表或树化存储。 2. 扩容通常按负载因子触发,容量翻倍后元素要重新分布;JDK 8 之后链表过长且数组足够大时会树化。 3. 线程安全场景不能用 HashMap,ConcurrentHashMap 通过更细粒度的并发控制提升并发读写能力。 容易被追问: - 为什么树化阈值不是很小? - ConcurrentHashMap 读为什么快? 注意事项: - 不要只说 HashMap 线程不安全,要说明并发写可能导致数据覆盖或结构异常。
算法数据结构

红黑树的数据结构介绍一下?

面试算法
参考答案
  1. HashMap 基于数组、链表和红黑树,先 hash 定位桶位,冲突后链表或树化存储。
  2. 扩容通常按负载因子触发,容量翻倍后元素要重新分布;JDK 8 之后链表过长且数组足够大时会树化。
  3. 线程安全场景不能用 HashMap,ConcurrentHashMap 通过更细粒度的并发控制提升并发读写能力。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. HashMap 基于数组、链表和红黑树,先 hash 定位桶位,冲突后链表或树化存储。 2. 扩容通常按负载因子触发,容量翻倍后元素要重新分布;JDK 8 之后链表过长且数组足够大时会树化。 3. 线程安全场景不能用 HashMap,ConcurrentHashMap 通过更细粒度的并发控制提升并发读写能力。 容易被追问: - 为什么树化阈值不是很小? - ConcurrentHashMap 读为什么快? 注意事项: - 不要只说 HashMap 线程不安全,要说明并发写可能导致数据覆盖或结构异常。
算法数据结构

跳表时间复杂度?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法数据结构

你知道什么地方用了红黑树和跳表吗?

面试算法
参考答案
  1. HashMap 基于数组、链表和红黑树,先 hash 定位桶位,冲突后链表或树化存储。
  2. 扩容通常按负载因子触发,容量翻倍后元素要重新分布;JDK 8 之后链表过长且数组足够大时会树化。
  3. 线程安全场景不能用 HashMap,ConcurrentHashMap 通过更细粒度的并发控制提升并发读写能力。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. HashMap 基于数组、链表和红黑树,先 hash 定位桶位,冲突后链表或树化存储。 2. 扩容通常按负载因子触发,容量翻倍后元素要重新分布;JDK 8 之后链表过长且数组足够大时会树化。 3. 线程安全场景不能用 HashMap,ConcurrentHashMap 通过更细粒度的并发控制提升并发读写能力。 容易被追问: - 为什么树化阈值不是很小? - ConcurrentHashMap 读为什么快? 注意事项: - 不要只说 HashMap 线程不安全,要说明并发写可能导致数据覆盖或结构异常。
算法数据结构

红黑树说一下,跳表说一下?

面试算法
参考答案
  1. HashMap 基于数组、链表和红黑树,先 hash 定位桶位,冲突后链表或树化存储。
  2. 扩容通常按负载因子触发,容量翻倍后元素要重新分布;JDK 8 之后链表过长且数组足够大时会树化。
  3. 线程安全场景不能用 HashMap,ConcurrentHashMap 通过更细粒度的并发控制提升并发读写能力。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. HashMap 基于数组、链表和红黑树,先 hash 定位桶位,冲突后链表或树化存储。 2. 扩容通常按负载因子触发,容量翻倍后元素要重新分布;JDK 8 之后链表过长且数组足够大时会树化。 3. 线程安全场景不能用 HashMap,ConcurrentHashMap 通过更细粒度的并发控制提升并发读写能力。 容易被追问: - 为什么树化阈值不是很小? - ConcurrentHashMap 读为什么快? 注意事项: - 不要只说 HashMap 线程不安全,要说明并发写可能导致数据覆盖或结构异常。
算法数据结构

平衡二叉树结构是怎么样的?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法数据结构

常见的队列有哪些及应用场景?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法数据结构

如何使用两个栈实现队列?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法数据结构

说一下队列和栈的区别

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法数据结构

为什么数组查询的复杂度为O(1)?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法数据结构

数组和链表区别是什么?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法数据结构

了解哪些数据结构?

面试算法
参考答案
  1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。
  2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。
  3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 算法题回答先复述问题和约束,再说明核心思路、状态定义或数据结构选择,最后给复杂度和边界情况。 2. 如果是链表常用快慢指针、虚拟头节点;树题常用递归、层序遍历;动态规划要讲状态、转移、初始化和遍历顺序。 3. 面试时要主动说测试用例:空输入、单元素、重复值、极值和不合法参数。 容易被追问: - 能否把空间复杂度优化? - 如果数据量很大怎么处理? 注意事项: - 不要直接写代码不讲思路。 - 不要漏掉时间复杂度和边界条件。
算法分布式一致性算法

描述一下 ZAB 协议?

面试算法
参考答案
  1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。
  2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。
  3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。 2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。 3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。 容易被追问: - 跨库分页怎么做? - 雪花算法时钟回拨怎么办? 注意事项: - 不要上来就套方案,要先说业务一致性等级和失败边界。
算法分布式一致性算法

有什么框架或技术用了raft协议?

面试算法
参考答案
  1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。
  2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。
  3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。 2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。 3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。 容易被追问: - 跨库分页怎么做? - 雪花算法时钟回拨怎么办? 注意事项: - 不要上来就套方案,要先说业务一致性等级和失败边界。
算法分布式一致性算法

说下 Raft 算法?

面试算法
参考答案
  1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。
  2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。
  3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。 2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。 3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。 容易被追问: - 跨库分页怎么做? - 雪花算法时钟回拨怎么办? 注意事项: - 不要上来就套方案,要先说业务一致性等级和失败边界。
算法分布式场景

常见的限流算法你知道哪些??

面试算法
参考答案
  1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。
  2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。
  3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。 2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。 3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。 容易被追问: - 跨库分页怎么做? - 雪花算法时钟回拨怎么办? 注意事项: - 不要上来就套方案,要先说业务一致性等级和失败边界。
算法限流

固定窗口算法有什么问题?

面试算法
参考答案
  1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。
  2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。
  3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。 2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。 3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。 容易被追问: - 跨库分页怎么做? - 雪花算法时钟回拨怎么办? 注意事项: - 不要上来就套方案,要先说业务一致性等级和失败边界。
算法限流

常见限流算法有哪些?

面试算法
参考答案
  1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。
  2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。
  3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。 2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。 3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。 容易被追问: - 跨库分页怎么做? - 雪花算法时钟回拨怎么办? 注意事项: - 不要上来就套方案,要先说业务一致性等级和失败边界。
算法高性能基础

常见负载均衡算法有哪些?

面试算法
参考答案
  1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。
  2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。
  3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。 2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。 3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。 容易被追问: - 跨库分页怎么做? - 雪花算法时钟回拨怎么办? 注意事项: - 不要上来就套方案,要先说业务一致性等级和失败边界。
算法哈希算法简介

为什么需要加盐?

算法
参考答案
  1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。
  2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。
  3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。 2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。 3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。 容易被追问: - 跨库分页怎么做? - 雪花算法时钟回拨怎么办? 注意事项: - 不要上来就套方案,要先说业务一致性等级和失败边界。
算法哈希算法简介

为什么不推荐 MD5?

算法
参考答案
  1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。
  2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。
  3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。 2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。 3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。 容易被追问: - 跨库分页怎么做? - 雪花算法时钟回拨怎么办? 注意事项: - 不要上来就套方案,要先说业务一致性等级和失败边界。
算法1 背景

到底什么是共识算法?

算法
参考答案
  1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。
  2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。
  3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。 2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。 3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。 容易被追问: - 跨库分页怎么做? - 雪花算法时钟回拨怎么办? 注意事项: - 不要上来就套方案,要先说业务一致性等级和失败边界。
算法分库分表

常见的分片算法有哪些?

算法
参考答案
  1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。
  2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。
  3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。
展开完整答法
这题可以按「结论 -> 原理 -> 场景 -> 风险」来答,重点放在算法里的可落地理解。 答题要点: 1. 分布式题要先说明目标:可用性、扩展性、一致性、延迟和成本之间的取舍。 2. 一致性可以用本地消息表、事务消息、TCC、Saga、幂等和对账补偿;不是所有场景都需要强一致。 3. 限流熔断要结合指标:QPS、错误率、延迟、资源水位,并提供降级返回和恢复策略。 容易被追问: - 跨库分页怎么做? - 雪花算法时钟回拨怎么办? 注意事项: - 不要上来就套方案,要先说业务一致性等级和失败边界。