第1轮:
这是一个在线测试。它由5个部分组成。
- 调试:在尝试本节之前,我们必须选择一种语言。有7个问题。本节很简单,问题主要是排序、从数组中删除元素等。
- 编码:有两个问题。一个很简单(https://www.geeksforgeeks.org/given-an-array-a-and-a-number-x-check-for-pair-in-a-with-sum-as-x/)和另一个是 https://leetcode.com/discuss/interview-question/699973/goldman-sachs-oa-turnstile。
- 资质
- 行为的
- 回馈
第二轮:
面试官是SDE2。他自我介绍,让我做自我介绍。然后他跳入编码问题。
- 这个问题基于拓扑排序。在一所大学里学习了几门课程。如果您想在本学期完成当前课程,每门课程都可能有一个前提课程,您必须在之前的任何一个学期中完成该课程。有先决条件的课程或没有先决条件的课程可以在一学期内完成。返回完成所有课程的最少学期数。讨论了广度优先搜索方法并对其进行了编码。然后他问了时间复杂度(时间复杂度和空间复杂度很重要,学会计算和权衡)
- https://www.geeksforgeeks.org/rearrange-characters-string-no-two-adjacent/
以前没解决过这个问题。与他讨论最大频率字符在这里最重要的直觉,我们应该先将它们分开。一直在讨论,终于有了用堆解决的想法(取前2个频率的字符并排排列。降低它们的频率,再次插入堆中)。他让我把它编码出来,然后问我时间复杂度。我说 O(N log N) 因为我们正在使用堆(这是一个错误)。但他让我再想一想。一段时间后,他提示我们在堆中最多可以有 26 个字符。然后我告诉时间复杂度是 O(N)(用于获取字符的频率),因为堆操作的时间是 O(1)。
然后他问我有没有什么问题要问他。我问他 SDE1 的工作和公司的工作量如何。
第 3 轮:
我向面试官介绍了自己,然后他开始回答问题。
- https://www.geeksforgeeks.org/decode-string-recursively-encoded-count-followed-substring/ 讨论了堆栈方法。然后他让我为给定的测试用例编写代码和试运行。他问我时间复杂度。我告诉它是 O(N*字符串中的最大 k 值)。
- 这是一个很难回答的问题。有 N 个城市,M 条道路(双向)连接它们。给定起始城市、结束城市和初始坦克值 (V)。遍历每条边将花费一个单位的坦克价值。然而,很少有城市被称为燃料城市,当我们到达它们时,我们可以将油箱加满到初始值。返回一个布尔值,表示我们是否可以从目标城市到达终点城市。以前没有解决过这种问题,我让他给我2分钟的时间思考并提出方法。之后,我讨论了广度优先搜索方法,我将城市和坦克值存储在队列中,并通过维护二维访问数组以传统的广度优先搜索方式遍历。然后他让我写代码。在那之后,他向我展示了一个测试用例,这种方法会失败。然后我和他讨论,告诉他如果我们的坦克价值比上次多,我们可以重新访问一个城市。他要求修改代码。
第 4 轮:
面试官是高级工程师。他非常友好,他告诉我这一轮将包括编码和行为问题。
他给了我一个字符串,它基本上是一个 HTML 文档,并要求我返回一个布尔值,表示给定的 HTML 文档是否有效。然后我想出了一个有效的括号方法(打开一个 HTML 标签应该有一个相应的关闭 HTML 标签与之相邻)。然后他展示了一个测试用例,其中在 head 标签中嵌入了一个 body 标签,并告诉即使这也应该返回 false。然后我问了一些时间思考。在那之后,我告诉我我构造了一个树或图来表示有效的正确 DOM 结构。然后我告诉我,每当遇到一个标签时,我都会通过查找相邻节点或父节点(如果是树)来检查给定文档中的父节点是否有效。他对此印象深刻,并要求对其进行编码。我无法在规定时间内完成代码。然后他就我的项目问了一些问题,问我在做项目时遇到的最困难的事情是什么,我是如何处理的。他问我当我陷入一个项目时会怎么做,是问我的导师/前辈还是自己做。
最后,他问我有没有什么问题要问他。我问了同样的问题🙂
(只要有机会,就向他们展示您对加入公司的兴趣程度)
在招聘过程结束时,我获得了为期 6 个月的实习和 FTE 。