2022 年 8 大重要的编码面试问题和答案 [对于应届生和有经验者]
已发表: 2021-08-25良好的数据结构基础,如数组、二叉树、哈希表和链表是必不可少的。 您必须了解基本的算法、方法,并且对 Java 等编程语言有很好的掌握,尤其是在您申请编程工作时。 您绝对可以学习重要的编码面试问题的答案,但强烈建议您自己广泛练习这些解决方案。
最好的 8 个编码面试问题及其答案
让我们看看微软、IBM、谷歌等大型公司在面试中提出的一些最重要的编码问题。
1.如何找到单词中第一个不重复的字符?
要回答这个问题,首先需要了解推广这个功能必须做些什么。 需要编写一个接受字符串并返回第一个非重复字符的函数。
例如,在单词“passage”中,“p”是第一个不重复的字符,或者在单词“turtle”中,“u”是第一个不重复的字符。 那么,我们如何解决这个问题呢? 我们可以创建一个表来存储所有字符的重复次数,然后选择不重复的第一个条目。
为了编写将返回第一个非重复字母的代码,我们可以使用 LinkedHashMap 来存储字符数。 这个 HashMap 遵循插入的顺序,并且字符被初始化在与字符串相同的位置。 必须使用 LinkedHashMap 对扫描的字符串进行迭代,以选择值为 1 的所需条目。
解决此问题的另一种方法是使用 firstNonRepeatingChar(String word)。 这允许在单遍中识别首先出现的非重复字符。 这种方法使用两个存储来代替一个交互。 该方法分别存储不重复和重复的字符,当迭代结束时,所需的字符是列表中的第一个元素。
2. 如何从数组中删除重复项?
首先,必须使用 LinkedHashSet(Set 接口)来保留元素到集合中的原始插入顺序。 您必须使用循环或递归函数来解决这些类型的编码面试问题。
在处理数组时,我们必须记住的主要因素不是具有重复项的元素。 这里的主要问题是删除重复项。 数组是固定长度的静态数据结构,因此无法更改。 因此,要从数组中删除元素,您需要创建新数组并将内容复制到这些新数组中。
首先,您必须将数组转换为 Arraylist,然后从这些 ArrayList 创建 LinkedHashSet。 如果输入数组包含大量重复项,则可能会导致多个临时数组,从而增加导入内容的成本。 此限制强制我们以需要较少内存和处理能力的方式解决此问题。
我们必须删除重复项,但不要将它们复制到结果数组中,因此不会完全删除重复项,而是简单地将它们替换为 0 作为默认值。
3. 如何判断一个数是否为质数?
这是最常见的编码面试问题之一,涉及找出给定数字是否为质数。 这类程序是算法思维的基础,因为我们必须提出解决方案,这些解决方案的基础是素数都是自然数,不能被除 1 以外的正数整除。
我们必须编写代码来创建循环,检查从 1 到目标数的每个数字,以查看目标数是否可以被除自身或 1 以外的任何其他正数整除。
这个函数将引导我们找到解决方案。 当检查一个特别大的数字时,我们可以简单地检查直到 N 的平方根,N 是目标数字。 在符合条件的平方根的情况下,无需检查直到 N。
如果这个数不能被 2 整除,则不需要检查它是否能被其他偶数整除,从而减少了求解所需的时间。 这是解决方案的优化版本,在编写解决方案之前分析数字会派上用场。
4. 如何检查字符串是否只包含数字?
如果您希望编写正则表达式来检查字符串是否只是数字或它们是否包含非数字字符,您必须首先熟悉在 Java 正则表达式中使用字符集。 Java 等编程语言借助 java.util.regex.Matcher 类和 java.util.regex.Pattern 支持正则表达式。 Java.util.regex 是用于此目的的专用包。
为了使用正则表达式验证仅数字的存在,我们可以使用代码来分析字符串是否包含原始整数。 我们将检查字符串是否仅包含 0 - 9 之间的数字。即使字符串包含数字但也包含其他字符,它也不是简单的数字字符串。 正则表达式只检查整数,不考虑点字符 (.),因此,使十进制数和浮点数无法通过测试。
5. 如何在没有库方法的帮助下反转目标句中的单词?
这也是非常常见的编码面试问题之一。 首先,我们必须了解需求以及如何填补这个需求的空白。 面对这样的问题,我们首先要专注于提出正确的问题。 字符串只不过是可能包含单个单词或多个单词的确定字符的句子。
一个句子也可能是空的。 例如,如果给我们一个句子“编程很有趣。”,我们必须将其反转为“有趣的是编程”。 有效。 我们必须在 Java 中使用正则表达式将给定的字符串划分为空格,然后应用 Collections 实用程序类中的 reverse() 方法。
一旦您能够使用正则表达式'\\s' 来划分字符串,就会返回一个单词数组作为结果。 这也处理使用多个空格分隔的单词。 一旦返回数组,您就可以选择从这些数组创建 ArrayLists,然后使用 Collections.reverse() 方法。 这将反转 ArrayLists,并且每个单词都将以相反的顺序重新初始化。
现在,剩下的就是使用 StringBuilder 通过 ArrayList 迭代连接多个字符串。 必须确保将大小指定为 StringBuilder 调整大小在处理能力和内存方面是一个代价高昂的过程。 调整大小最终通过从旧数组复制内容来创建新数组。
6. 如何替换或删除字符串中的字符?
假设我们有一个字符串“Woocommerce”,并且我们希望将字母“r”替换为“n”,有多种方法可以实现这一点。 Java 中的字符串类提供了多种方法来使用 CharSequence 和子字符串替换字符串中的字符。
您可以轻松地在字符串中调用替换方法,该方法最终将替换目标字符并返回所需的字符。 字符串在 Java 等编程语言中是不可变的。
因此,每次对字符串执行删除或替换等操作时,都会默认生成新的字符串对象。 使用 Java 替换字符串有 4 种重载方法:
- 替换(char oldChar,char newChar)
- replaceAll(字符串正则表达式,字符串替换)
- replace(CharSequence 目标,CharSequence 替换)
- replaceFirst(字符串正则表达式,字符串替换)
CharSequence 是字符串、StringBuilder 和 StringBuffer 的超级接口之一,允许我们将其中的任何对象作为此替换方法的参数传递。 replaceAll() 最终用替换字符串替换每个匹配项,而 replaceFirst() 只替换第一个匹配项。
总而言之,所有这些都是接受正则表达式的强大方法。 Java.lang.String 类允许所有这些重载方法,这些方法可以轻松替换 Java 中的单个字符或子字符串。
强烈建议使用 replaceAll(),因为它会替换每次出现的匹配字符。 遵循这种方法可以让我们期待正则表达式模式,从而获得更多的权力。 此方法还可以用管道替换每个逗号,以将逗号分隔的文件转换为堆分隔的字符串。
但是,如果只希望替换单个字符,则可以使用将新旧给定字符考虑在内的 replace() 方法。
阅读: Java 面试问答
7. 如何在 Java 等编程语言中将文本附加到文件中?
与创建新文件并将数据写入新文件相比,追加是非常不同的。 在追加的情况下,文件已经存在,我们只需在文件末尾添加文本。 这类似于日志文件,因为它们会随着系统不断更新。
日志文件是附加文本的完美示例,因为应用程序会迭代地将日志详细信息附加到这些文件中。 此问题不需要日志框架,但您必须知道如何将文本附加到现有文件中。 为了解决这个问题,您必须了解编写字符文件的便利类。
该类具有假定默认字节缓冲区和字符编码的可接受性的构造函数。 如果您希望自己指定值,您可以简单地使用 FileOutputStream 构造 OutputStreamWriter。 文件的可用性取决于底层平台,它决定了是否可以创建文件。
一些平台允许使用单个 FileWrite 或多个文件写入对象来初始化文件以编写函数。 但是,一旦相关文件已经初始化,此类的构造函数将失败。 FileWriter 用于写入字符流,FileOutputStream 可以写入原始字节流。
从世界顶级大学在线学习软件开发课程。 获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。
8. 如何在整数数组中找到最大或最小的数?
对于这个解决方案,我们必须编写一个函数或方法,该函数或方法可以从完全成熟的整数数组中找到最大或最小数字。 我们必须首先在 Java 中创建一个名为 MaximumMinimumArrayDemo.java 的源文件,并将编写的代码复制到此处以进行编译和执行。
我们可以使用我们可以称为“最大”和“最小”的两个变量来分别存储数组中的最大值和最小值。 最小的数字可以使用 integer.MIN_VALUE 初始化,最大的数字可以使用 integer.MAX_VALUE 初始化。
对于您启动的循环的每次迭代,您可以将当前数字与“最大”和“最小”进行比较,并相应地更新它们。 数组不会覆盖 Java 中的 toString 方法,因此您可以使用 Arrays.toString() 打印目标数组的内容。
您可以使用此静态方法直接调用 main 函数。 然后,您必须通过此方法传递随机数组,以检查是否已准确返回最大值和最小值。 您还可以选择通过 IDE 中的单元测试自动执行此测试。
结帐:简历中的 4 大计算机技能
结论
专注于编程的课程不仅可以很好地解决问题,还可以增加求职时被选中的机会。 如果您想了解更多关于 Java 编程和更高级的编码问题,您可以报名参加综合课程,例如upGrad 的计算机科学理学硕士或全栈开发课程。