数据结构与算法
LeetCode在面试时常被认为是衡量CS水平的重要指标。精刷大于泛刷,熟练度大于题量。因此,尽量提高熟练度,并踩对得分点和signal
1. 面试评分维度
大厂面试相对规范和模版化。评分细则化,想到某个方向加多少分,写一个实现加多少分,有bug扣多少分,答错复杂度扣多少分等。
大厂面试通常从四个维度评分:
Communication: 沟通表达能力
Problem Solving: 问题分析能力
Coding: 代码实现能力
Verification: 代码验证能力
2. 刷题策略
快速给出bug free代码,有良好的沟通和思路介绍。做题前项目介绍不必随意展开(1~2min),留够做题时间。
2.1 离线准备
基础准备
掌握常见数据结构和算法
熟悉各类题型的解题模板
系统训练
按 tag 刷题,强化模板应用
尝试多种解法,提高熟练度
实战演练
参加周赛,提升实战能力
练习边说边写,模拟面试场景
针对性准备
根据目标公司调整刷题重点
关注最新面经,针对性练习
2.2 面试解题流程
理解题目
仔细阅读题目要求
提出 clarifying questions。可以通过列举test case,确保理解问题并涵盖所有情况
确认输入输出类型和边界条件 (input/output type)
输入数字全是正数或全是负数,会不会是null or empty
输入string是不是都是English letters (A-Z),有没有特殊符号
输入是否有重复样本,输出是否允许重复
standard input, empty input, malformed input, long input, null input, other edge input
能不能改input,immutable or not (1D/2D array比较常见)
特殊情况输出返回什么
要不要in place
有没有内存限制
思路分析
与面试官讨论解题思路
Whenever coming across a solution, talk it out and discuss it
确认思路可行性,思路未得到认同前不要急于写代码
必要时寻求提示
代码实现
选择合适的数据结构并介绍
实现算法
处理边界情况
验证优化
编写测试用例
分析时间和空间复杂度
讨论可能的优化方案
3. 公司特点
Google
注重问题解决过程
原题较多,难度较高
重视算法思维和测试用例设计
Meta
35分钟两道题
重视代码质量和最优解
ML system design 重点:推荐系统、视频搜索
Microsoft
基础算法和数据结构
注重代码实现速度
Amazon
Grind75 题目为主
15分钟一道题
BQ 占比较大(30分钟+)
Tiktok
题目不按 tag
ML 方向注重项目深度
4. 学习资源
4.1 刷题列表
4.2 编程语言基础
Python: GC机制、GIL、数据结构实现
C++: 容器库、并发编程
4.3 计算机基础
CS50x: 计算机科学导论
CS61A: 程序结构与解释
CSAPP: 深入理解计算机系统
算法导论
分布式系统 (MIT 6.824)
操作系统 (MIT 6.s081)
数据库 (CMU 15445)
Last updated