软件工程师面试软件工程师面试学习指南
作者:Ben Rogojan
软件工程面试和其他技术面试一样,需要充分的准备。为了确保你能应对算法、数据结构、设计、优化等一系列接连不断的面试问题,你需要涵盖许多主题,而且主题还在不断增加。
因此,我在上一轮面试中创建了一个清单,其中涵盖了许多热门话题。
为了帮助您跟踪进度,我们编制了一份包含以下相同问题的综合清单;您可以在此处找到该清单。
用经典曲目热身
你做得怎么样?花点时间根据这些经典问题给自己打分。我们在面试过程中经常会被问到这些问题——通常是在面试初期作为淘汰式的问题。它们通常与算法和数据结构关系不大,但仍然需要你对循环和数组有很好的理解(没错,数组也是一种数据结构)。
算法和数据结构
预习题
在学习数据结构和算法的视频内容之前,不妨先尝试一下下面这些问题,看看你能不能答对。这能帮助你了解应该关注哪些方面。
- 985. 查询后偶数之和
- 657. 机器人回归原点
- 961. 2N 数组中的 N 个重复元素
- 110. 平衡二叉树
- 3. 最长无重复字符子字符串
- 19. 从列表末尾删除第 N 个节点
- 23. 合并 k 个排序列表
- 31. 下一个排列
算法和数据结构视频
数据结构
- 数据结构与算法 #1 --- 什么是数据结构? --- 视频
- 多维度 --- 视频
- 动态数组 --- 视频
- 调整数组大小 --- 视频
- 数据结构:链表 --- 视频
- 核心链表与数组 --- 视频
- 指针的指针 --- 视频
- 数据结构:树 --- 视频
- 数据结构:堆 --- 视频
- 数据结构:哈希表 --- 视频
- 电话簿问题 ---视频
- 数据结构:堆栈和队列 --- 视频
- 使用堆栈后进先出 ---视频
- 数据结构:计算机科学速成课程#14 --- 视频
- 数据结构:Trie --- 视频
算法
- 算法:图搜索、DFS 和 BFS --- 视频
- BFS(广度优先搜索)和DFS(深度优先搜索) ---视频
- 算法:二分查找 --- 视频
- 二叉搜索树回顾 --- 视频
- Python 面试算法 --- 视频
- 算法:递归 --- 视频
- 算法:冒泡排序 --- 视频
- 算法:归并排序 --- 视频
- 算法:快速排序 ---视频
大 O 符号
- 大 O 符号和时间复杂度简介(数据结构和算法 #7) --- 视频
- 哈佛 CS50 --- 渐近符号 --- 视频
- 算法复杂性分析的简单介绍 ---帖子
- 备忘单 ---帖子
动态规划
- 动态规划(像程序员一样思考)---视频
- 算法:记忆化和动态规划 --- 视频
- 6.006 :动态规划 I:斐波那契数列、最短路径 --- 视频
- 6.006:动态规划 II:文本对齐、二十一点 --- 视频
- 动态规划---帖子
字符串操作
- 编码面试问答:最长连续字符 --- 视频
- Sedgewick --- 子串搜索 --- 视频
面试问题演练
- Google Coding 面试 --- 通用价值树问题 --- 视频
- Google 编码面试问题和答案#1:第一个重复出现的角色 --- 视频
- 在二叉搜索树中查找最小和最大元素 --- 视频
- 查找二叉树的高度 --- 视频
- 检查二叉树是否为二叉搜索树 --- 视频
- 什么是尾递归?它为什么这么糟糕? --- 视频
学习后的问题
现在您已经学习了一段时间,并观看了一些视频,让我们尝试更多的问题吧!
- 越大越好
- 6. 锯齿形转换
- 7. 反转整数
- 40. 组合和 II
- 43. 字符串相乘
- 拉里的阵列
- 短回文
- 65. 有效号码
- 越大越好
- 完全计数排序
- 莉莉的家庭作业
- 普通儿童
- 459. 重复子串模式
- 27. 删除元素
- 450. 删除二叉搜索树中的节点
- 659. 将数组拆分为连续子序列
- 有界最大值的子数组数量
- 组合和 IV
- 买卖股票的最佳时机(冷却时间)
- 最长重复字符替换
- 成对交换节点
- 二叉树右侧视图
- 扁平嵌套列表迭代器
- 二叉树层次遍历
- 二叉搜索树迭代器
- 最大链长
- 将链表拆分成几部分
操作编程问题
有些公司不会问你算法题。他们可能更侧重于实现和操作问题。这些问题通常比较小众,涉及实际问题,例如循环遍历数据和执行某种任务。这类问题通常不需要太多练习,因为它们更侧重于掌握数组和 HashMap 等基本概念,并跟踪你对它们的操作。
系统设计视频
系统设计问题至关重要,它能证明你不仅仅是一名程序员。作为一名工程师,你需要具备全局思维。某些服务应该放在哪里,你需要什么样的服务器,如何管理流量等等。所有这些问题都表明你具备软件设计能力,而不仅仅是照搬别人教你的代码。
操作系统
操作系统相关的问题相对少见,但对线程、调度、内存等概念有扎实的理解总是有益的,哪怕只是基础的理解。如果被问到进程和线程的区别而不知道答案,那就太尴尬了。
- 常见的操作系统面试问题
- 什么是翻译后备缓冲区?
- 为什么循环算法可以避免优先级反转问题?
- 中断与系统调用---文件系统中的“inode”是什么?
- 操作系统面试题及答案 --- 第一部分
- 什么是内核 --- Gary 解释
- 循环算法教程(CPU调度)
- LRU 缓存的魔力(Google Dev 的 100 天) --- 视频
- MIT 6.004 L15:记忆层次结构 --- 视频
- 中断 ---视频
- 调度 ---视频
线程
- 用户级线程与内核级线程
- 进程和线程简介 --- 视频
- 进程和线程之间的区别 --- 佐治亚理工学院 --- 高级操作系统 --- 视频
- 分叉和多线程之间的区别
面向对象
与操作系统类似,并非每次面试都会问你面向对象编程的问题,但你永远不知道。你需要确保记住计算机162课程的基础知识。
- Java编程教程---49---继承 ---视频
- Java编程教程---55---多态性介绍 ---视频
- Java 编程教程 --- 58 --- 抽象类和具体类 --- 视频
- Java 编程教程 --- 57 --- 覆盖规则 --- 视频
- Java 编程教程 --- 59 --- 保存对象的类
- 面向对象编程 --- 视频
设计模式
如果你像我们一样,可能没有学过各种设计模式。所以,了解它们的工作原理以及为什么要使用它们是很有好处的。有些面试问题可以很简单,比如“为什么要使用工厂类?”
- 工厂设计模式 --- 视频
- 观察者设计模式 ---视频
- 适配器设计模式 ---视频
- 外观设计模式 ---视频
- 责任链设计模式 ---视频
- 解释器设计模式 ---视频
- 单例设计模式教程 --- 视频
- 第 6 章(第 1 部分)--- 模式(视频) --- 视频
- 《深入浅出设计模式》 ---视频
SQL
这是最后一部分。很多人可能不会被问到那么多 SQL 问题。不过,我一直认为把它放在口袋里总是好的。
SQL --- 问题
SQL --- 视频
- IQ15:6 个 SQL 查询面试问题 --- 视频
- 了解 ROW_NUMBER 和分析函数 --- 视频
- 解析函数的高级实现 --- 视频
- 解析函数的高级实现(第二部分) ---视频
- Wise Owl SQL 视频 --- 视频
SQL 后问题
面试可能会很艰难,因为你可能会感觉自己毫无进展。这份学习指南能帮你追踪进度,更好地了解自己的表现!
祝你好运!
此外,如果您想阅读/观看更多精彩的帖子或视频:
在 SaturnCloud 上使用 Jupyter Notebook 连接到 Big Query 第 2 部分
作为数据科学家您应该阅读的三本书
Hadoop 与关系数据库
算法如何变得不道德和有偏见
如何改进数据驱动策略
如何开发健壮算法
数据科学家必须具备的 4 项技能
SQL 最佳实践 - 设计 ETL 视频