📜  SDE 实习的 Salesforce 面试经验(校园)

📅  最后修改于: 2021-11-10 06:58:46             🧑  作者: Mango

本文是关于我在 IIT (ISM) Dhanbad 的 Salesforce 校园招聘计划 (Futureforce) 的实习面试经历。该过程发生在 9 月的第一周,以完全虚拟模式进行。

第 1 轮:在线编码轮

  • 平台:Hackerrank
  • 时长:1小时15分钟。
  • 问题数:3

问题如下:

  1. 给定一个长度为 n 的字符串。将其右旋转 n 次并计算所有旋转后不同字符串的总数。

    例子:

    Input:"abc"  Output:3  Eplaination:"cab", "bca", "abc".
    Input:"aaa"  Output:1  Eplaination:"aaa".
    

    这是一个非常简单的问题,预期的时间复杂度为 O(n)。

  2. 给定一个入口点和一个拱顶以及连接它们的不同走廊。每个连接都有与之一起旅行的成本。生成 Vault 路径的所有入口以及该路径的总成本。所有生成的路径都应按其相关成本的非递减顺序排列。如果两条路径的总成本相同,则应首先访问走廊数量较少的路径。如果不。走廊的数量也相同,那么它们应该按字母顺序排列。

    Input:"Entrance Vault 75"
          "Entrance CorridorA 55"
          "CorridorA Vault 15"
    Output:"Entrance CorridorA Vault 70"
           "Entrance Vault 75"
    

这个问题似乎很简单,类似于找到目标路径的所有源,但主要问题是所有输入都是字符串形式,必须通过解析来构建合适的输入。许多学生在解析和调试他们的代码时陷入困境。

给定在一行中只能打印 n 个字符。使用合适的填充左对齐给定的文本。这是一个相当简单的实现问题,测试用例也很容易,没有硬边案例。

本轮有200多名学生参加,完成至少2.5道题的学生入围下一轮。我做了所有三个问题,所以我和其他 13 名学生一起入围面试。

第 2 轮: Google Meet 的第一次技术面试。在这一轮中,我获得了一个hackerrank代码对链接到在线代码。面试官首先对他做了一个健康的介绍,然后为了缓和气氛,他问了我关于我的封锁经历等等。经过大约 5-6 分钟的交谈,他跳到我的简历上,让我介绍我的一个项目。出乎我的意料,他还让我在codepair提供的白板上画出项目的整个系统流程。我按照他的询问做了同样的事情,经过大约 10-15 分钟的讨论。他转向解决问题。他让我在codepair上实现LRU缓存算法。我编写了可以在此处找到的完整代码,并在第一次尝试中编译并运行。在这个问题之后,他又问了我一个基于链表实现的问题,然后转向了 oops 概念。他问了我抽象类和接口有什么区别,什么是内部类,它和继承有什么区别,什么是多态以及我们如何实现运行时多态等问题。我从给出定义开始回答,但是很快他就拦住了我,让我为他们每个人提供现实生活中的例子,然后一次又一次地反问我。这个讨论持续大约 20-25 分钟。之后,他问了我一个基于分而治之的谜题,并让我一步一步地写出它的解决方案的迭代。

这一轮大约用了 1 个小时完成。面试官很有礼貌,乐于助人。本轮结束后,5名学生被淘汰,其余进入第二轮面试。

第 3 轮: Google Meet 的第二次技术面试。对于这一轮,再次提供了代码对链接。面试官先让我做自我介绍,和我互动2-3分钟。之后,他开始问我解决问题的方法。第一个问题是,

  1. 给定一个数组,计算长度为 3 的所有反转,我们可以将反转定义为元素的递减序列。

    例子:

    Input:{4,5,3,2}
    Output:2
    Explaination:{{4,3,2},{5,3,2}}

我很快写了一个时间复杂度为 O(n 3 ) 的蛮力解决方案,但对于一些测试用例,它显示了 TLE,所以他让我优化我的解决方案。我想了大约 1 分钟。然后告诉他一个三分球的方法并快速编码。但由于数组不是排序形式,它不起作用。然后他给了我一个使用归并排序概念的提示,并慢慢引导我使用该方法。最后,我完成了我的解决方案,他似乎对此很满意。然后他转向 oops 概念并要求我定义复制构造函数、静态和动态绑定以及类型转换。然后他转到操作系统并要求我说明并发问题和信号量。然后他进一步问我信号量允许的操作是什么,并快速定义了生产者-消费者问题。然后他转到 DBMS 并问了我几个关于锁定和 DBA 职责的问题。这时我的网络出现了一些问题,所以我们的会议结束了,我们在大约 5-6 分钟后从离开的地方重新开始。在这件事上,他非常支持和理解。他问了我 2-3 个关于计算机网络的问题,比如闪避和密码学。他当然对我给他的所有回答都非常满意。最后,他问我有没有什么问题,所以我问了我面试的反馈,他告诉我,大多数候选人只把他们最优先考虑的问题解决和 DSA 放在首位,而忽略了其他计算机科学概念,但我回答了他所有关于计算机科学的问题,这让我比其他候选人更有优势。

这一轮持续约55分钟。我立即被告知我已进入最后一轮面试。

第 4 轮: Google Meet 的最终面试。按照我的预期,这一轮应该是人力资源轮,这是在开始时,他让我向我解释这个项目,我在其中遇到了哪些挑战,以及我为什么选择了这个项目。但是突然出乎我的意料,他转向解决问题并给了我一个问题。问题是,给定两个排序的数组 A 和 B,在 B 数组中有一些额外的空间。我必须在不使用额外空间的情况下以 O(n) 时间复杂度合并它们。我为他提供了 2-3 种方法,并为它编写了代码。然后他给了我一个谜题,找出在 6 个球池中找到一个重量相同的球的最少称重操作次数,其余五个球的重量相同。我给了他一个满意的答复,最后他问我有没有什么问题要问他。我问了几个关于公司及其工作文化的问题。

这一轮持续约25分钟。晚上我们收到了结果。 4名学生从我的大学中被选中,我就是其中之一🙂

我从这些面试中学到的关键是,尽量实际和冷静,不要沉默地坐太久,不要忽视计算机科学科目,并尽可能多地练习解决问题。

祝一切顺利 !!