软件工程师面试学习指南
发布时间:2019-10-10 11:59

原标题:软件工程师面试学习指南

本文列出了一个涵盖许多热门面试题的清单,相信会对你有所裨益。

作者 | Ben Rogojan

译者 | 谭开朗,责编 | 郭芮

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

因此,针对终面,我列出了一个涵盖许多热门面试题的清单(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
  • 数据结构:实践

算法

展开全文

  • 算法:图形搜索,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 翻译,转载请注明来源出处。