以下为译文:

与其他技术面试一样,软件工程师的面试也需要大量的准备工作。为了应对关于算法、数据结构、设计、优化以及延伸主题等的轰炸式问题,我们需要的学习的还有很多。

因此,针对终面,我列出了一个涵盖许多热门面试题的清单(https://docs.google.com/spreadsheets/d/19hSRrL4l3gRiJ5ucH9q4iwFo2QHgic9gGMNUrcn1mm0/edit?usp=sharing)。
前排提示:文中所有标蓝部分均可在此清单中获取详细链接。

温习基础知识

- Fizz Buzz
- 560. Subarray Sum Equals K
- 数组:左移问题
- 字符串:构建Anagrams
- n次Fibonacci

以上知识点,你掌握得怎么样?花点时间来自评一下吧。在面试过程中,我们经常会被问到这些问题,而且通常是在初面时遇到的。通常,它们与算法和数据结构关系不大,但仍需要对循环和数组有很好的理解(是的,数组是一种数据结构)。

算法和数据结构预习问题

在浏览有关数据结构和算法的视频内容之前,请思考以下问题。你能否回答出来?这将有助于找到重点内容。

- 查询后偶数的总和
- 机器人返回原点
- 长度为2N的数组中重复N次的元素
- 平衡二叉树
- 最长不重复子序列求解
- 从列表末尾删除第n个节点
- 合并k个排序列表
- Next Permutation算法

算法和数据结构视频

数据结构

- 数据结构和算法#1——什么是数据结构?
- Multi-dim
- 动态数组
- 调整数组大小
- 数据结构:链表
- 核心链表vs数组
- 指针到指针
- 数据结构:树
- 数据结构:堆
- 数据结构:哈希表
- 电话簿问题
- 数据结构:堆栈和队列
- 使用堆栈后进先出
- 数据结构:计算机科学速成课程#14
- 数据结构:实践

算法
1.gif
- 算法:图形搜索,DFS和BFS
- BFS(广度优先搜索)和DFS(深度优先搜索)
- 算法:二进制搜索
- 二叉搜索树回顾
- Python面试算法
- 算法:递归
- 算法:气泡排序
- 算法:合并排序
- 算法:快速排序

大O符号

- 介绍大O符号和时间复杂度(数据结构和算法#7)
- 哈佛CS50-渐近符号
- 简单介绍算法复杂度分析
- 备忘录

动态编程

- 动态编程(像程序员一样思考)
- 算法:记忆和动态编程
- 动态编程一:Fibonacci,最短路径
- 动态编程二:文本对齐,BlackJack规则
- 动态编程

字符串操作

- 编码面试问答:最长连续字符
- Sedgewick算法——子字符串搜索

面试问题演练

- 谷歌编码面试——通用值树问题
- 谷歌编码面试问答#1:第一个循环出现的角色
- 在二叉搜索树中找到最小和最大元素
- 求二叉树的高度
- 检查二叉树是否是二叉搜索树
- 什么是尾部递归?为什么这么复杂?

温习问题

现在你已经掌握了一定的知识,并且观看了许多视频,让我们来看更多的题目吧!

- 越大越好
- Z字形变换
- 整数反转
- 组合之和之二
- 字符串相乘
- 拉里阵列
- Short Palindrome
- 有效数字
- 越大越好
- 全计数排序
- Lily's Homework
- 最长公共子序列
- 重复子字符串模式
- 删除元素
- 删除BST中的节点
- 将数组分割为连续子序列
- 有界限最大值的子数组数量
- 组合之和之四
- 买股票的最佳时间含冷冻期
- 最长重复字符串置换
- 成对交换节点
- 二叉树右侧视图
- 扁平嵌套列表迭代器
- 二叉树的层次遍历
- 二叉搜索树迭代器
- 链对的最大长度
- 拆分链表成部分

操作编程问题

有些公司不会问你算法的问题。相反,他们可能更关注实现和操作问题。这些通常是更小众的,涉及实际问题,比如循环数据和执行某种类型的任务。这类型的问题通常不需要太多的实践,因为它更多的是使用数组和hashmap等基本概念,并跟踪你对它们所做的操作。

- 袋鼠问题
- 打破纪录
- 找到Stringiter
- No Idea !
- 程序员的日子
- 排行榜
- 词序
- 夏洛克和广场
- 平衡数组
- 苹果和橘子
- 更多的操作风格问题

系统设计视频

系统设计问题是重中之重的问题,它证明你不仅仅是一个程序员。作为一名工程师,你需要有大局观。某些服务属于何处,你需要什么样的服务器,你将如何管理流量,等等。所有这些想法都表明,你能够设计软件,而不只是编写让你编写的代码。

- 停车场系统
- Whats App
- Uber设计
- Instagram
- Tinder服务

操作系统

操作系统问题比较少见,但是对线程、调度、内存等概念有一个扎实的理解是有好处的,即使这只是一个基本的理解。如果有人问进程和线程之间的区别是什么,而你不知道答案,这是非常尴尬的。

常见的操作系统面试问题

- 什么是旁路转换缓冲?
- 为什么轮询可以避免优先级反转问题?
- 中断Vs系统调用——文件系统中的“inode”是什么?
- 操作系统面试问答——第一部分
- 什么是内核——Gary的解释
- 循环算法教程(CPU调度)
- LRU缓存的魔力(谷歌开发的100天)
- MIT 6.004 L15:内存层次结构
- 中断
- 调度

线程

- 用户级线程Vs内核级线程
- 进程和线程介绍
- 进程和线程的区别——佐治亚理工学院——高级操作系统
- 分叉和多线程的区别

面向对象

与操作系统类似,不是每次面试都会问你关于面向对象编程的问题,但你无法琢磨面试官的想法。你要确保你记住了计算机162课程的基础知识。

- Java编程教程——49——继承
- Java编程教程——55——多态性介绍
- Java编程教程——58——抽象和具体类
- Java编程教程——57——重写规则
- Java编程教程——59——类来保存对象
- 面向对象编程

设计模式

如果你和我们一样,没有学习过各种各样的设计模式。所以了解它们是如何工作的,以及为什么要使用它们是很有好处的。有些面试问题可以很简单,比如“你为什么要使用工厂类?”

- 工厂设计模式
- 观察者设计模式
- 适配器设计模式
- 立面设计模式
- 责任链设计模式
- 解释器设计模式
- 单例设计模式教程
- 第6章(第1部分)——模式(视频)
- Head First设计模式

SQL

这是最后一部分。很多人可能不会被问到SQL问题。然而,有备无患。

SQL问题

- 旅行和用户
- 体育馆的人流
- 部门前三名
- 交换座位
- Hackerrank报告
- 第n高薪水
- Symmetric Pairs(连接,分组,聚合)
- OccupationsPlacements
- Ollivander's Inventory(连接查询,单表双实例,子查询)

SQL视频

- IQ15:6个SQL查询面试问题
- 学习ROW_NUMBER和解析函数
- 解析函数的高级实现
- 解析函数的高级实现第2部分
- Wise Owl SQL视频

发布SQL问题

- 二叉树节点
- 天气观测站18
- ChallengesPrint质数
- Big Countries
- 交换座位
- SQL访谈问题:3个技术筛选习题(供数据分析师使用)

面试会很艰难,因为你始终觉得自己没有取得任何进展。有了这份学习指南,你就可以跟踪自己的学习进度,更好地了解自己的学习情况。

祝你好运!

原文:https://dev.to/seattledataguy/the-interview-study-guide-for-software-engineers-764
本文为 CSDN 翻译,转载请注明来源出处。