第1轮:
这一轮大约有30到40人,我们每个人都得到了一份试卷和表。有三个算法问题,我们必须在一小时内写出语法正确的代码。下面是问题。
1.打印二叉树的左视图。
2.在O(n)时间和O(log n)额外空间中,在二叉搜索树中找到其总和等于两个给定总和的两个节点。
3.找出给定数组中出现次数最多的k个数字
第二轮:
这是一场针对算法设计的面对面讨论。
- 给定一张有道路的地图,地图中的所有道路都是直线。这些道路可能以任何角度相互交叉。计算地图中不同道路的总数。他期待看到我如何将地图表示为数据结构,就任何歧义提出问题并设计算法,然后在纸上编码解决方案。我能够在第一次尝试时给出优化的解决方案。基本上我使用二维数组来表示地图。该数组将只有 0 或 1 作为元素。连续的 1 序列将代表一条道路。对这个数组进行深度优先搜索以找到连续 1 的总数。棘手的部分是在遇到交叉路口时确定道路。如果我们可以在与路口相同的方向移动,那么从交叉路口开始我们来到十字路口的方向我们认为它是同一条道路,从十字路口到我们来到十字路口的不同方向的任何道路都被认为是不同的道路。
- 以螺旋顺序打印矩阵。纸上期望语法正确的代码。
第 3 轮:
这是设计回合。这一回合持续了大约一个半小时。
- 询问我当前的项目,它的设计和架构。然后让我在白板上画出我项目的架构,并询问系统的哪个组件做了什么以及如何实现的具体问题。
- 停车场的面向对象设计。我做了一个设计,利用了模板方法模式、策略模式和抽象工厂模式。被问到关于我的选择及其利弊的反问题。准备好关于你所做选择的利弊问题,并在我的设计中给我一些改变,并询问这是否是一个好主意。然后询问该系统将如何部署在停车场上。
第 4 轮:
这再次集中在算法设计上。
- 给定以下格式的日志文件。
[19-10-2019:10:20:22] <一些日志>
[19-10-2019:10:20:23] <一些日志>
[19-10-2019:10:20:24] 内存使用量 = 10 MB
[19-10-2019:10:20:25] <一些日志>
[19-10-2019:10:20:26] <一些日志>
[19-10-2019:10:20:27] <一些日志>
[19-10-2019:10:20:28] 内存使用量 = 18 MB
[19-10-2019:10:20:29] <一些日志>
[19-10-2019:10:20:30] 内存使用量 = 22 MB
[19-10-2019:11:20:31] <一些日志>
[19-10-2019:11:20:32] 内存使用量 = 10 MB
日志文件中存在内存使用情况的日志。如上例所示,内存使用日志为 10、18、22、10。问题是找到内存使用中发生的最大增加。在上面的例子中,发生的最大增加是 12,从 10 MB 开始到 22 MB
2. 有两个源代码存储库 app01 和 app02,每天晚上 7 点在生产中部署。下面给出了将 app01 和 app02 中的代码部署到生产中的函数,直到给定的提交 ID。
布尔部署(int commitId_app01,int commitId_app02)
如果我们调用 deploy(10, 12) ,那么 app01 从 id 1 到 10 的每个提交以及从 app02 从 1 到 12 的每个提交都将部署到生产中,如果部署成功,该函数将返回 true ,如果部署失败则返回 false 。
进行了部署(即部署(n,m))并且由于错误提交而导致部署失败,您需要编写算法以在最少部署次数中使用部署方法找到错误提交。
3. 给定一组整数,找出具有给定总和的子集。子集和问题
第 5 轮:
这是招聘经理回合。他首先介绍了自己,然后解释了他正在招聘的项目以及公司的其他细节。
- 告诉我一些你简历中没有的关于你自己的事情。
- 解释您当前项目的架构和设计。然后就我的项目设计以及为什么我们以一种方式而不是另一种方式做事提出了反问。还询问了我的项目架构和设计中存在的限制和问题,以及可以采取哪些措施来解决这些问题。
- 问为什么我们在我当前的项目中使用第三方工具而不是自己开发一个。
- 询问我最近在公司所做的工作(最近我从事 API 网关与其余服务的集成)。询问您需要进行哪些更改才能在 Internet 上公开 Web 服务和 UI。我解释了向公众公开可能出现的安全问题以及我们如何处理这些问题。还解释了使用 API 速率限制和分布式速率限制处理高流量。然后问我们如何实现它。
- 问我是否有任何问题。
第 6 轮:
原理工程师回合。主要集中在我迄今为止所做的工作设计和算法设计。
- 关于面试官他的经历和他所从事的项目的简要介绍。
- 你做过最艰难的项目是什么?为什么很难?你做了什么来解决这个问题?你是怎么设计的?你做了什么选择,为什么?
- 给了我一个单一的算法设计问题,并要求我在 30 分钟内将所有角落测试用例的解决方案邮寄给他。查找二叉树中两个节点之间路径的总匝数。给定两个节点,您需要在二叉树中找到这两个节点之间的路径并计算路径中的匝数。例如,考虑一棵二叉树,其中“a”是根节点,“b”和“c”是“a”的左右孩子,“d”也是 b 的右孩子。从 ‘d’ 到 ‘c’ 的路径中的匝数为 2 。从 b 到 c 的匝数为 1,从 a 到 c 的匝数为 0。
几天后,我接到 HR 的电话,说我被选中了,几天后他们还给我发了一份超出我预期的报价。
提示:
- 这不仅仅是解决问题,而是快速解决问题,所以尽可能多地练习。
- 不仅仅是解决问题,你如何处理问题也很重要。所以大声思考。让面试官知道你是如何处理这个问题的。它还可以帮助面试官给你提示。
- 始终注意问题陈述中的歧义并不断提出问题。问题中故意引入歧义,以检查您是否可以找到歧义并提出澄清问题。
- 接受提示。面试官总是乐于助人,如果你遇到困难,他们会给你准确有用的提示。尽可能快地捕捉到提示并继续解决方案是很重要的。如果您无法捕捉到提示,则这是一个很大的危险信号。
- 永远不要说你做不到。即使有你以前没有解决过的问题,或者看起来你解决不了的问题,也要不断从不同的角度攻击问题,面试官会给你提示。但如果你说你不能解决问题,那就是一个很大的危险信号,你可能最终会被拒绝。
非常感谢 geeksforgeeks 为所有面试准备提供的一站式服务:)。