有很多计算机科学的毕业生和程序员申请编程, 编码, 和软件开发角色的公司, 如 Uber 和 Netflix;像亚马逊微软谷歌这样的大型组织;和以服务为基础的公司, 如 Luxsoft。但是他们中的许多人不知道当你申请与这些公司的工作时, 会有什么样的编程面试问题。

在这篇文章中, 我将分享一些常见的算法和数据结构面试问题从不同的面试程序员在不同的经验水平, 从刚从大学毕业的人到程序员一到两年的经验。

编码访谈主要包括数据结构和基于算法的问题, 以及一些逻辑问题, 如 “如何在不使用临时变量的情况下交换两个整数?

我认为将面试问题分为不同的主题领域是很有帮助的。我在访谈中最常看到的主题领域是数组、链接列表、字符串、二进制树以及算法中的问题 (如字符串算法、排序算法 (如快速排序基数排序) 和其他杂项),这就是你将在本文中找到的内容。

它不保证你会被问到这些编码或数据结构和算法问题, 但他们会给你足够的想法, 你可以期待在真正的编程工作面试的问题。

一旦你经历了这些问题, 你就应该有足够的信心去参加任何面试。

顺便提一下, 如果你对基本数据结构和算法没有足够的知识, 或者你已经很久没有接触过这些问题, 那么就没有必要去尝试这些。

在这种情况下, 你应该采取一个好的课程, 如算法和数据结构部分1和2罗伯特 Horvick , 以刷新你的 DS 和算法技能。

前50算法和编程面试问题

没有任何进一步的 ado, 这里是我的列表中的一些最常见的编码面试问题的编程工作面试你也可以谷歌找到答案的大多数问题, 因为他们是非常普遍的。

1. 阵列编码面试问题

数组是最基本的数据结构, 它将元素存储在一个连续的内存位置。它也是面试官的宠儿主题之一, 您将在任何编码访谈中听到有关数组的许多问题, 例如反转数组、对数组排序或在数组中搜索元素。

数组数据结构的主要优点是它提供了快速 O (1) 搜索 (如果您知道索引), 但从数组中添加和删除元素的速度很慢, 因为在创建数组后, 无法更改它的大小。

为了创建一个更短或更长的数组, 您需要创建一个新数组并将所有元素从旧复制到新。

解决基于数组的问题的关键是对数组数据结构以及基本的编程构造 (如循环、递归和基本运算符) 有很好的了解。

下面是一些常用的基于阵列的编码面试问题, 供您练习:

  1. 如何查找给定整数数组中的缺失数字1到100?(解决方案)
  2. 如何查找给定整数数组上的重复编号?(解决方案)
  3. 如何在未排序的整数数组中找到最大和最小的数字?(解决方案)
  4. 如何查找整数数组的所有对, 其总和等于给定的数字?(解决方案)
  5. 如果数组中包含多个重复项, 如何查找重复数字?(解决方案)
  6. 如何从 Java 中的给定数组中删除重复项?(解决方案)
  7. 如何使用快速排序算法就地排序整数数组?(如何从阵列中删除重复项?(解决方案)
  8. 如何在 Java 中就地反转数组?(解决方案)
  9. 如何在不使用任何库的情况下从数组中删除重复项?(解决方案)
  10. 这些问题不仅可以帮助您开发解决问题的技能, 还能提高您对阵列数据结构的了解。

    如果你需要更高级的问题基于阵列, 那么你可以看到也看到了编码访谈训练营: 算法 + 数据结构, 一个训练营风格课程的算法, 特别设计为面试准备, 以获得在科技巨头的工作像谷歌, 微软, 苹果, Facebook 等。


    而且, 如果你觉得10问题不够, 而且你需要更多的练习, 那么你也可以检查出这个列表中的30 个数组问题

    2. 链接列表编程面试问题

    链接列表是另一个通用数据结构, 它补充了数组数据结构。与数组类似, 它也是线性数据结构, 以线性方式存储元素

    链接列表是节点的列表, 其中每个节点包含存储的值和下一个节点的地址。

    由于此结构, 在链接列表中添加和删除元素很容易, 因为您只需要更改链接而不是创建数组, 但搜索很困难, 通常需要 O (n) 时间才能在单链表中查找元素。

    本文提供了有关数组和链接列表数据结构之间的差异的详细信息。

    它也有类似于单链表的品种, 它允许你遍历一个方向 (向前或反向);双链表, 允许您在两个方向 (向前和向后) 遍历;最后, 循环链表, 形成一个圆圈。

    为了解决基于链表的问题, 很好地了解递归是很重要的, 因为链接列表是递归数据结构。

    如果从链接列表中取一个节点, 则其余数据结构仍然是一个链接列表, 因此, 许多链表问题具有比迭代算法更简单的递归解决方案。

    以下是一些最常见、最受欢迎的链接列表访谈问题及其解决方案:

    1. 如何在一通中找到单链表的中间元素?(解决方案)
    2. 如何检查给定的链接列表是否包含循环?如何找到周期的起始节点?(解决方案)
    3. 如何反转链接列表?(解决方案)
    4. 如何在没有递归的情况下反转单向链表?(解决方案)
    5. 如何在未排序的链接列表中删除重复节点?(解决方案)
    6. 如何查找单链表的长度?(解决方案)
    7. 如何从单链表的结尾找到第三个节点?(如何使用堆栈查找两个链接列表的总和?(解决方案)
    8. 这些问题将帮助您开发解决问题的技能, 并提高您对链接列表数据结构的了解。

      如果您在解决这些链接列表编码问题时遇到问题, 那么我建议您通过数据结构和算法来刷新数据结构和算法: 使用 Java 课程进行深度潜水。


      您还可以查看此列表的30 链接列表面试问题的更多实践问题。

      3. 字符串编码面试问题

      除了数组和链接列表数据结构, 字符串还是编程工作面试的另一个热门话题。我从来没有参加过一个编码面试, 没有问到基于字符串的问题

      字符串的一个好处是, 如果你知道数组, 你可以很容易地解决基于字符串的问题, 因为字符串只不过是一个字符数组。

      因此, 通过解决基于数组的编码问题所学到的所有技术都可以用于解决字符串编程问题。

      以下是我从编程面试中经常问到的字符串编码问题的列表:

      1. 如何从字符串中打印重复字符?(解决方案)
      2. 如何检查两个字符串是否彼此变位?(如何打印字符串中的第一个非重复字符?(解决方案)
      3. 如何使用递归来反转给定的字符串?(解决方案)
      4. 如何检查字符串是否只包含数字?(解决方案)
      5. 如何在字符串中找到重复字符?(解决方案)
      6. 如何计算给定字符串中的元音和辅音数?(解决方案)
      7. 如何计算字符串中给定字符的匹配项?(解决方案)
      8. 如何查找字符串的所有排列?(解决方案)
      9. 如果不使用任何库方法, 如何在给定句子中反转单词?(解决方案)
      10. 如何检查两个字符串是否彼此旋转?(解决方案)
      11. 如何检查给定的字符串是否为回文?(解决方案)
      12. 这些问题有助于提高您对字符串的知识作为数据结构。如果你能解决所有这些字符串问题没有任何帮助, 那么你是在良好的状态。

        对于更高级的问题, 我建议你解决算法设计手册中给出的问题 Skiena, 一本书与最棘手的算法问题亚马逊. com/算法-设计-手册-Skiena/dp/1849967202?标签 = javamysqlanta-20 “href =” http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202?tag=javamysqlanta-20 “rel =” nofollow “

        如果你需要更多的练习, 这里是另一个20 字符串编码问题的列表。

        4. 二叉树编码面试问题

        到目前为止, 我们只看了线性数据结构, 但现实世界中的所有信息都不能以线性方式表示, 这就是树数据结构的作用所在。

        树数据结构是一种数据结构, 允许您以分层方式存储数据。根据存储数据的方式, 有不同类型的树 (如二进制树), 其中每个节点最多有两个子节点。

        随着其近亲的二进制搜索树, 它也是最受欢迎的树数据结构之一。因此, 您会发现很多基于它们的问题, 例如如何遍历它们、计算节点数、查找深度以及检查它们是否平衡。

        解决二叉树问题的一个关键点是理论的强大知识, 如二叉树的大小或深度, 什么是叶子, 什么是节点, 以及对流行的遍历算法的理解, 例如预、过帐和按顺序遍历。

        以下是来自软件工程师或开发人员面试的受欢迎的基于二叉树的编码问题列表:

        1. 二进制搜索树是如何实现的?(解决方案)
        2. 如何在给定的二叉树中执行预购遍历?(解决方案)
        3. 如何在没有递归的前提下遍历给定的二叉树?(解决方案)
        4. 如何在给定的二叉树中执行顺序遍历?(解决方案)
        5. 如何使用不带递归的序遍历来打印给定二叉树的所有节点?(如何实现后序遍历算法?(解决方案)
        6. 如何遍历后序遍历中的二叉树而无需递归?(解决方案)
        7. 如何打印二进制搜索树的所有叶子?(解决方案)
        8. 如何计算给定二叉树中的多个叶节点?(解决方案)
        9. 如何在给定数组中执行二进制搜索?(解决方案)
        10. 如果你觉得你对二叉树编码的理解不够, 你不能自己解决这些问题, 我建议你回去挑选一个好的数据结构和算法课程, 如从0到 1: 数据结构 & 算法在 Java 中


          如果您需要更多的建议, 这里是我的有用数据结构算法书籍课程的列表, 以开始杂项编码面试问题

          除了基于数据结构的问题之外, 大多数编程工作访谈还会询问算法、设计、位操作和一般基于逻辑的问题, 我将在本节中介绍这一点。

          练习这些概念很重要, 因为有时它们在实际面试中变得棘手。

          在练习之前, 不仅让你熟悉他们, 还能让你更有信心向面试官解释解决方案。

          1. 如何实现气泡排序算法?(解决方案)
          2. 如何实现迭代快速排序算法?(解决方案)
          3. 如何实现插入排序算法?(解决方案)
          4. 如何实现合并排序算法?(解决方案)
          5. 如何实现存储桶排序算法?(解决方案)
          6. 如何实现计数排序算法?(解决方案)
          7. 如何实现基数排序算法?(解决方案)
          8. 如何在不使用第三个变量的情况下交换两个数字?(解决方案)
          9. 如何检查两个矩形是否彼此重叠?(解决方案)
          10. 如何设计自动售货机?(解决方案)

          如果你需要更多这样的编码问题, 你可以采取的帮助, 如破解代码面试的书籍, 通过


          顺便提一句, 你在实践中解决的问题越多, 你的准备就越好。所以, 如果你认为50是不够的, 你需要更多, 然后看看这些额外的50 编程问题电话采访和这些书籍课程, 以更彻底的准备。

          现在你已经准备好进行编码面试了

          这些是一些最常见的问题, 帮助你在面试中做得很好。

          我也在我的博客上分享了很多这些问题, 所以如果你真的感兴趣, 你总是可以去那里寻找他们。

          这些常见的编码、数据结构和算法问题是您需要了解的, 可以成功地与任何大小的公司进行面谈, 以进行任何级别的编程工作。

          如果您正在寻找一个编程或软件开发工作在 2018年, 您可以开始您的准备与此列表的编码问题。

          此列表提供了准备的好主题, 也有助于评估您的准备, 以找出您的实力和弱点的领域。

          对数据结构和算法有很好的了解对于在编码面试中取得成功很重要, 这就是你应该集中注意力的地方。

          进一步学习:

Comments are closed.