📜  Procol 面试经验(校内)

📅  最后修改于: 2022-05-13 01:58:23.971000             🧑  作者: Mango

Procol 面试经验(校内)

在线测试: 2020 年 9 月 9 日

采访: 2020 年 9 月 10 日

笔试:首先,Procol, Gurugram 根据简历从 600 多名符合条件的学生中选出了 230 名学生。

在线测试包括两个部分:

21 MCQ: MCQ 基于网络、操作系统、MySQL 和 oops 的概念。

3 编码题,编码题:

  1. 从出现元音的索引中连接 n 个字符串。

    例子:

    Input Strings:
    abcde, bcdef, fgkl, dseiou
    Output String:
    abcdeefeiou

    简单的蛮力 O(n) 方法有效(其中 n 是所有字符串组合的总长度)。我做了这个问题。

  2. 使数组中的所有数字成为质数所需的最小更改。

    我使用Digit DP解决了这个问题。想法是使用筛子计算所有素数,然后制作 2 个数组,这些数组定义了特定数字与素数左右的距离。现在,对于每个查询,只需两个数组中的最小值就是我们的答案。

  3. 给定一个包含 N 个数字的数组 A,您必须执行 B 操作。在每个操作中,您必须选择 N 个元素中的任何一个并将原始值(在我们执行任何操作之前存储在索引中的值)添加到其当前值。您可以在每个操作中选择 N 个元素中的任何一个。

    以最小化修改数组的最大元素(在 B 操作之后)的方式执行 B 操作。在 K 次操作之后返回一个与最小可能最大元素相对应的整数。

    例子:

    Input: A = [1, 2, 3, 4] B = 3
    Output: 4

    解释:在第 1 次操作后,数组将变为 [2, 2, 3, 4] 在第 2 次操作后,数组将变为 [3, 2, 3, 4] 在第 3 次操作后,数组将变为 [4, 2、3、4]

    A : [ 8, 6, 4, 2 ] B: 8 预期返回值:12

    我无法完全解决这个问题,并且运行了 3 个测试用例中的 2 个。

230 名学生中有 23 名被选中参加 9 月 10 日的虚拟面试过程。

面试:有2轮面试,都是技术面。

温馨提示:请保持良好的网络连接,宽带是首选,因为我使用蜂窝 4G 连接但面试官的声音中断,我们不得不重新安排面试时间。

第1轮:

  1. 它始于对我的项目和实习的讨论。
  2. 如何判断一个数是否是 2 的幂。首先我告诉蛮力方法,然后告诉 x&(x-1) 的位操作方法必须是 0 才能成为 2 的幂。
  3. 你熟悉栈吗?我说是。
  4. 描述它以及堆栈操作是什么?解释
  5. 如何实现堆栈?我使用链表方法进行了解释。
  6. 为什么我们不能使用数组?解释了数组的静态性质
  7. 在进一步讨论链表的实现时,我们发现弹出操作的成本很高。那么如何让它高效呢?我建议使用反向链表方法,使用反向链表制作堆栈。他被说服了。
  8. 你知道 SQL 吗?是的先生。
  9. 什么是联接?解释左外连接。解释
  10. 什么是上下文切换?我解释了一些东西,但我确定我错了,所以告诉我不记得了。
  11. 给定一个未排序的数组,找到两对,使得它们的总和为 k。首先,我给出了 O(n^2) 的蛮力方法。然后通过散列告诉更好的方法。

第 2 轮:

  1. 给定一个大小可能为 10^14 的已排序二进制数组。我们不知道数组的大小,也找不到它。查找数组中第一个“1”的出现。

    我偶然发现了这个问题,因为我们找不到大小,或者我们可以进行简单的二进制搜索。所以我提出了一个重新定义的二进制搜索,首先我们可以检查每 100,000 个数字是否为 1,如果是,那么我们确定我们的第一个 1 是这个或在数组的左侧,所以只需执行从此索引到剩余 100,000 个索引的二进制搜索。

  2. 我们可以优化它吗?

    经过一番思考,我告诉我们可以使用指数差距,而不是保持 100,000 的差距。例如,我建议采用容易增加的 2^i 差距,因此我们可以更快地达到我们的第一个“1”。将其计入 O(logN) 算法。他印象深刻。

  3. DB,S 中的规范化是什么?已回答
  4. 什么是 LRU 缓存?如何实施?任何使用 LRU 的真实示例?已回答
  5. 用额外的第三个变量交换两个数字?我建议了一种使用位操作的方法。

    x = y ^ x^ (y=x);

    他告诉我使用一些测试用例(包括负数)运行它,并且它成功执行。

判决:选定