101 个编程问题和一些技巧助你轻松应对下一次编程面试
披露:本篇文章包含附属链接;如果您通过本文提供的不同链接购买产品或服务,我可能会收到报酬。
编程面试对于程序员来说至关重要,不容错过。这是他们在学校和大学期间获得理想软件开发职位需要跨越的第一道坎。
更糟糕的是,你会发现互联网上有很多人说编码面试有缺陷,程序员的招聘流程很糟糕等等,但你不需要关注他们,至少在你职业生涯的开始阶段不需要。
他们或许是对的,但他们也和你正试图搭上的这趟列车一样。无论他们如何批评编程面试和程序员的招聘流程,他们中的许多人都经历过同样的路,最终走到了今天。
我们都知道,编码面试系统并不完美,许多人都在尝试改变它,但在它改变之前,你必须遵守它的规则才能进入这个系统。这是经验丰富的开发人员需要处理的事情,作为初级开发人员,你的首要任务应该是通过编码面试并获得你想要的工作。
作为Java 博客和Medium 出版物的作者,我收到了很多与编码问题以及如何处理这些问题相关的查询,这就是为什么我不断撰写这样的文章,这些文章直接或间接地帮助了很多程序员的职业生涯。
在本文中,我将与您分享编程工作面试中每个程序员都应该知道的101 个编码面试问题。
编码面试需要准备什么?
现在,我已经澄清了大家的疑惑:编码面试很重要,你不应该分心。让我们开始真正的工作吧。最大的问题是,编码面试需要准备什么?
嗯,最重要的是要准备基于数据结构的编码问题,如基于数组的编码问题、字符串问题、链表问题、二叉树问题、系统设计问题等。
除了基于数据结构的问题外,大多数编程工作面试还会询问算法、设计、位操作和基于一般逻辑的问题,我将在本节中描述这些问题。
练习这些概念非常重要,因为在实际面试中,它们有时很难解答。事先练习不仅能让你熟悉它们,还能让你更有信心向面试官解释解决方案。
编码问题的主要问题之一是面试中存在成百上千的编码问题,甚至有像LeetCode、HackerRank、Codewars、Topcoder、freeCodeCamp、HackerEarth这样的网站,它们通过大量棘手的问题来培训程序员进行编码面试,这有时会让正在找工作的初学者不知所措。
我相信简单,10% 的努力可以产生 90% 的结果,这就是为什么我收集了 101 个不太难并且在实际面试中经常被问到的编码问题。
解决这些问题不仅可以给你信心,还可以帮助你识别一些最常见的算法模式,这也有助于你解决实际面试中一些看不见的问题。
编程面试必备资源
选择好的资源对于你的编程面试成功至关重要。如果你选择了错误的资源,那么除了金钱之外,你还会浪费宝贵的准备时间,因此,花点时间研究好的资源吧。
如果您需要建议,以下是我经过尝试和测试的一些资源,可用于深入学习数据结构和算法以进行编码面试:
-
数据结构与算法:面向Java 开发者的 Java 深度探索。学习数组、链表、树、哈希表、堆栈、队列、堆、排序算法和搜索算法。
-
面向 Python 爱好者的Python 算法和数据结构
\ 从头开始实现最新算法的指南:数组、链表、图形算法和排序 -
Colt_Steele为 JavaScript 程序员打造的JavaScript 算法和数据结构大师班。难得一见的计算机科学和编程面试训练营。学习应对高难度编程面试所需的一切。
-
精通 C/C++ 的人士可以使用 C 和 C++ 掌握数据结构和算法
-
由 The Educative Team编写的《Java 数据结构:面试复习》旨在复习 Java 中重要的数据结构和算法概念。本课程详细回顾了所有常见的数据结构,并提供了 Java 的实现细节,帮助读者更好地理解。
这就像编程面试的元课程,它不会教你如何解决一个具体的编程问题,而是教你如何利用模式解决特定类型的编程问题。掌握这15个面试问题背后的模式,你就能轻松应对面试中遇到的任何问题。
如果你更喜欢看书,那么没有比Gayle Laakmann McDowell的《 Cracking The Coding Interview》更好的选择了。这本书提供了超过 189 个编程问题和答案。这是一本在短时间内准备编程工作面试的好书。顺便说一句,如果你购买这里提到的任何资源,我还可以赚一些钱。
编程面试和找工作的重要技巧
-
在编程面试中取得好成绩的最佳方法莫过于尽可能多地练习编程题。这不仅能训练你的思维,识别问题中的算法模式,还能给你解决从未见过的问题所需的信心。
-
我的第二个建议是尽可能多地学习数据结构和算法。这是上一个建议的延伸,但它也涉及阅读,而不仅仅是练习。例如,如果你了解哈希表,你就能轻松地解决许多基于数组和计数器的问题。树和图也是如此。
-
选择正确的数据结构是软件开发和编码面试中非常重要的一部分,除非您了解它们,否则您将无法选择。
-
自己计时——在规定时间内快速解决面试问题的候选人更有可能在面试中取得好成绩,因此您也应该自己计时。
-
考虑一些边缘情况,并运行你的代码来处理它们。一些好的边缘情况可能是空输入、一些奇怪的输入或一些非常大的输入,用来测试边界条件和极限。
-
解决问题后,试着向对编程问题感兴趣的朋友或同事解释一下。这会告诉你是否真正理解了这个问题。如果你能轻松地解释,就说明你理解了。此外,讨论还能让你的思维活跃起来,你可能会想出其他解决方案,并发现现有算法中的一些缺陷。
-
另一个在编程面试中脱颖而出的实用技巧是参加大量的编程面试。你会发现自己在每次面试后都会进步,这也能帮助你拿到多个 offer,从而更好地进行谈判,拿到那些额外的 3 万到 5 万美元的薪水,如果你手里只有一个 offer,这些薪水通常会被你放弃。
-
顺便说一句,如果您已经准备好参加编码面试,那么您还可以参加TripleByte 的测验,并直接进入与Coursera、Adobe Acrobat、Dropbox、Grammarly、Uber、Quora、Evernote、Twitch等顶级科技公司的最后一轮面试。
我之前不知道Triplebyte,但他们为求职者提供了很棒的服务。非常感谢他们。
编程工作面试中常见的 101 个编程问题
不想再浪费大家的时间了,以下是我在编程工作面试中列出的 101 个常见问题。为了掌握清单中的大部分内容,我建议大家实际解决一下这些问题。
不管你是否遇到困难,都要自己动手,因为这是唯一的学习方法。解决几个问题之后,你就会更有信心。我还建议你在遇到困难时或解决问题后看看解决方案,这样你就能学会比较不同的解决方案,以及如何从不同的角度解决问题。
- 冒泡排序算法是如何实现的?(解决方案)
- 合并排序算法是如何实现的?(解决方案)
- 如何计算字符串中给定字符的出现次数?(解决方案)
- 如何打印字符串中第一个不重复的字符?(解决方案)
- 如何像 atoi() 一样将给定的字符串转换为 int?(解决方案)
- 如何实现桶排序算法?(解决方案)
- 如何实现计数排序算法?(解决方案)
- 如何从数组中删除重复项?(解决方案)
- 如何在 Java 中就地反转数组?(解决方案)
- 如何在不使用任何库的情况下从数组中删除重复项?(解决方案)
- 基数排序算法是如何实现的?(解决方案)
- 如何在不使用第三个变量的情况下交换两个数字?(解决方案)
- 如何检查两个矩形是否相互重叠?(解决方案)
- 如何设计自动售货机?(解决方案)
- 如何在给定的 1 到 101 的整数数组中找到缺失的数字? (解决方案)
- 如何在给定的整数数组中找到重复的数字?(解决方案)
- 如果数组包含多个重复的数字,如何找到重复的数字?(解决方案)
- 稳定排序算法和不稳定排序算法之间的区别?(答案)
- 迭代快速排序算法是如何实现的?(解决方案)
- 如何在未排序的整数数组中找到最大和最小的数字?(解决方案)
- 如何就地反转链表?(解决方案)
- 如何在链表中间添加元素?(解决方案)
- 如何在 Java 中对链表进行排序?(解决方案)
- 如何找到整数数组中所有和等于给定数字的对?(解决方案)
- 如何实现插入排序算法?(解决方案)
- Java 中如何从给定数组中删除重复项?(解决方案)
- 如何从字符串中删除重复的字符?(解决方案)
- 如何找到给定字符串中出现次数最多的字符?(解决方案)
- 如何使用快速排序算法对整数数组进行排序? (解决方案)
- 如何反转给定的字符串?(解决方案)
- 如何打印字符串中的重复字符?(解决方案)
- 如何检查两个字符串是否互为字谜?(解决方案)
- 如何找到字符串的所有排列?(解决方案)
- 如何使用递归来反转给定的字符串?(解决方案)
- 如何检查给定的字符串是否是回文?(解决方案)
- 如何找到不包含重复字符的最长子字符串的长度?(解决方案)
- 给定字符串 str,如何找到 str 中最长的回文子串?(解决方案)
- 如何检查字符串是否仅包含数字?(解决方案)
- 如何从链表的末尾删除第 N 个节点?(解决方案)
- 如何合并两个已排序的链表?(解决方案)
- 如何将排序列表转换为二叉搜索树?(解决方案)
- 如何在给定字符串中查找重复的字符?(解决方案)
- 如何计算给定字符串中的元音和辅音的数量?(解决方案)
- 如何在不使用任何库方法的情况下反转给定句子中的单词?(解决方案)
- 如何检查两个字符串是否互相旋转?(解决方案)
- 如何将字节数组转换为字符串?(解决方案)
- 如何从字符串中删除给定的字符?(解决方案)
- 如何一次性找到单链表的中间元素?(解决方案)
- 如何检查给定的链表是否包含循环?如何找到循环的起始节点?(解决方案)
- 如何反转链接列表?(解决方案)
- 如何在不使用递归的情况下反转单链表?(解决方案)
- 如何在无序链表中删除重复节点?(解决方案)
- 如何找到单链表的长度?(解决方案)
- 如何在单链表中查找倒数第三个节点?(解决方案)
- 如何使用 Stack 找到两个链表的总和? (解决方案)
- 数组和链表有什么区别?(答案)
- 如何从排序链表中删除重复项?(解决方案)
- 如何找到两个单链表交集的起始节点。 (解决方案)
- 给定一个链表和一个值x,对其进行分区,使得所有小于x的节点都位于大于或等于x 的节点之前。 (解决方案)
- 如何检查给定的链表是否是回文?(解决方案)
- 如何从与给定值匹配的整数链表中删除所有元素?(解决方案)
- 二叉搜索树是如何实现的?(解决方案)
- 如何在给定的二叉树中执行前序遍历?(解决方案)
- 如何按前序遍历给定的二叉树而不使用递归?(解决方案)
- 如何在给定的二叉树中执行中序遍历?(解决方案)
- 如何使用中序遍历(而非递归)打印给定二叉树的所有节点?(解决方案)
- 如何实现后序遍历算法?(解决方案)
- 如何在不使用递归的情况下以后序遍历方式遍历二叉树?(解决方案)
- 如何打印二叉搜索树的所有叶子? (解决方案)
- 如何计算给定二叉树中的叶节点数?(解决方案)
- 如何在给定数组中执行二进制搜索?(解决方案)
- 如何在不使用第三个变量的情况下交换两个数字?(解决方案)
- 如何检查两个矩形是否重叠?(解决方案)
- 如何设计自动售货机?(解决方案)
- 如何用你最喜欢的编程语言实现 LRU 缓存?(解决方案)
- 如何检查给定数字是否为回文?(解决方案)
- 如何检查给定数字是否为阿姆斯特朗数?(解决方案)
- 如何找出给定数字的所有质因数?(解决方案)
- 如何在 Java 中检查给定数字是正数还是负数?(解决方案)
- 如何找到给定整数的最大素因数?(解决方案)
- 如何打印出给定数字以下的所有素数?(解决方案)
- 如何打印弗洛伊德三角?(解决方案)
- 如何打印帕斯卡三角形?(解决方案)
- 如何计算给定数字的平方根?(解决方案)
- 如何检查给定的数字是否是质数?(解决方案)
- 如何在 Java 中不使用加法运算符来添加两个数字?(解决方案)
- 如何在不使用算术运算符的情况下检查给定数字是偶数/奇数? (解决方案)
- 如何打印给定的金字塔结构?(解决方案)
- 如何用 Java 从给定文件中找到重复次数最多的世界?(解决方案)
- 如何在 Java 中反转给定的整数?(解决方案)
- 如何在 Java 中将十进制数转换为二进制?(解决方案)
- 如何在 Java 中检查给定年份是否为闰年?(解决方案)
- 你能实现一个不使用递归的二分查找算法吗?(解决方案)
- 稳定排序算法和不稳定排序算法之间的区别?(答案)
- 二叉树的深度优先搜索算法是什么?(解决方案)
- 迭代快速排序算法是如何实现的?(解决方案)
- 如何实现插入排序算法?(解决方案)
- 合并排序算法是如何实现的?(解决方案)
- 比较排序算法和非比较排序算法有什么区别? (答案)
- 如何实现素数的埃拉托斯特尼筛法算法?(解决方案)
- 如何找到具有最大和的子数组?(解决方案)
这些问题应该够了,但如果你需要更多类似的编程问题,可以参考一些书籍,比如盖尔·拉克曼·麦克道尔 (Gayle Laakmann McDowell)的《破解代码面试》(Cracking The Code Interview) ,其中包含189 多个编程问题及解答。这本书非常适合在短时间内准备编程工作面试。
现在,你已经准备好参加编码面试了
这些是数据结构和算法之外的一些最常见的问题,可以帮助您在面试中取得好成绩。
我也在我的博客上分享了很多这些问题,所以如果你真的感兴趣,你可以随时去那里搜索它们。
这些常见的编码、数据结构和算法问题是您在任何公司(无论大小)成功面试任何级别的编程工作时需要了解的问题。
如果您正在寻找编程或软件开发工作,您可以从这份编码问题列表开始准备,如果您准备好面试,那么您还可以参加TripleByte 的测验,直接进入 Coursera、Adobe、Dropbox、Grammarly 等顶级科技公司的最后一轮面试。
此列表提供了很好的准备主题,也有助于评估您的准备情况,找出您的优势和劣势领域。
良好的数据结构和算法知识对于编码面试的成功至关重要,这也是您应该集中大部分注意力的地方。
进一步学习
数据结构和算法:深入使用 Java
准备技术编程/编码工作面试的 10 本书
每个程序员都应该阅读的 10 本算法书籍
Java 开发人员的 5 本最佳数据结构和算法书籍
从 0 到 1:Java 中的数据结构和算法
数据结构和算法分析 --- 工作面试
20+ 来自面试的基于字符串的编码问题
20+ 来自面试的链表问题
20+ 来自面试的基于基本算法的问题
结束语
谢谢,你终于读完了这篇文章……祝你的编程面试好运!这当然不会很容易,但通过练习这些搜索和排序算法题,你比其他人更接近成功一步。顺便说一句,你在练习中解决的问题越多,你的准备就越充分。
因此,如果您认为 101 个编码问题还不够,并且您需要更多,那么请查看这些额外的50 个用于电话面试的编程问题以及这些书籍和课程,以进行更彻底的准备。
祝你的编码面试一切顺利。
文章来源:https://dev.to/javinpaul/101-coding-problems-and-few-tips-to-crack-your-next-programming-interviews-402a