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/
第三轮:面对面
- 详细解释您的项目
- 关于您的项目的关键指标,即它处理了多少负载等。
- 如果您将相同的数据存储在不同的数据库中,您将如何使它们保持同步。
- 如果你要从头开始编写你的项目,你会改变什么?
Flipkart 的所有练习题!