📜  Flipkart 面试体验 |第 40 组(适用于 SDE 1)

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

Flipkart 面试体验 |第 40 组(适用于 SDE 1)

我接受了软件开发工程 (SDE1) 职位 Flipkart 的面试。
第 1 轮:机器编码轮:(90 分钟)
给定一棵二叉树作为(父,子)元组的序列: (AB)(AC)(BG)(CH)(EF)(BD)(CE) 编写一个程序来查找树中的以下错误:
  • E1:超过2个孩子
  • E2:重复元组
  • E3:存在周期
  • E4:多根
  • E5:多个父母

输入是一个包含父子关系的表达式。输出是错误代码或成功。

示例测试用例

  • 输入:(AB)(AC)(BG)(CH)(EF)(BD)(CE) 输出:成功
  • 输入:(AB)(AC)(AD) 输出:E1
  • 输入:(AB)(AB) 输出:E2
  • 输入:(AB)(BC)(CA) 输出:E3
  • 输入:(AB)(CD) 输出:E4
  • 输入:(AB)(BC)(AC) 输出:E5

解决方案

代码是用 node.js javascript 编写的。测试使用的是摩卡。这个问题的主要技巧是,需要保存此类数据的数据结构不是二叉树,而是图。或者具有两组边子和父母的图。

我在javascript中使用了这个DS来解决:

function Node(data) {
  this.data = data;
  this.children = [];
  this.parents = [];
}
循环检测可以使用 http://www 完成。 geeksforgeeks.org/detect-cycle-in-a-graph/
我的解决方案:https://github.com/niklabh/tree-error-checker

第二轮:面对面
1. 设计一个负载均衡器,实现以下方法:
  • add(n) 其中 n 是实例的 id
  • remove(n) 其中 n 是实例的 id
  • getRandom() 返回一个随机实例。
所有这些操作都应该是 O(1) 的顺序。
解决方案:http://stackoverflow.com/questions/5682218/data-structure-insert-remove- contains-get-random-element-all-at-o1
这个问题的后续行动是改变 getRandom 的方式,如果权重与实例相关联,它会以加权随机性而不是统一随机性返回。
解决方案:http://stackoverflow。 com/questions/4463561/weighted-random-selection-from-array
2. 您将获得板球锦标赛的所有输赢结果。以这样的方式打印球队,赢队总是在输队的右边。
解决方案:将结果存储为有向无环图并运行拓扑排序算法。
https://www.geeksforgeeks.org/topological-sorting/

第三轮:面对面
  1. 详细解释您的项目
  2. 关于您的项目的关键指标,即它处理了多少负载等。
  3. 如果您将相同的数据存储在不同的数据库中,您将如何使它们保持同步。
  4. 如果你要从头开始编写你的项目,你会改变什么?

Flipkart 的所有练习题!