Tekion Corp 2020 年面试经验(校园 FTE+实习)
Tekion 于 2020 年 8 月在我们的校园招聘 SDE 职位(FTE + 实习)。我们总共进行了 5 轮(1 在线 + 2 技术 + 1 管理 + 1 人力资源)。这是我的面试经历。
第 1 轮(在线编码轮):
本轮在hackerearth平台进行,共有16道MCQ和2道简单/中等难度的编码问题。
MCQ 主要包含代码在Java中的输出查找问题。除此之外,MCQ 有来自 DBMS 和算法分析的问题。还有一个简单的能力问题。
我的建议:在Java中练习继承输出问题。深入了解 DBMS 的概念,擅长算法分析(空间和时间复杂度)。
第一个编码问题如下。
函数f(x) 定义为大于或等于 x 的最小斐波那契数。例如:f(1)=1,f(5)=5,f(6)=8。任务是计算 g(l,r),其中 g(l,r) 定义为 g(l,r) = f(l)+f(l+1)+f(l+2)+….. +f(r)。约束:1<=l<=r<=10^9。
这个想法是首先计算所有低于 10^9 的斐波那契数和大于 10^9 的最小斐波那契数。几乎没有 46 个这样的斐波那契数。现在我们可以运行一个从 l 到 r 的循环,并检查 l 到 r 之间每个数字的下限。问题是因为 rl 在最坏的情况下是 10^9,如果我们简单地找到从 l 到 r 的每个数字的下限(你能优化这个解决方案以通过所有测试用例吗?),就会得到一个小结论。
第二个编码问题如下。
给定 N 个硬币和一组表示每个数字 (1…9) 的成本的成本,其中成本 [i] 是选择数字 i 的成本。任务是找到可以用 N 个硬币表示的最大数。
例子:
输入:N = 5,成本 = [12, 3, 5, 1, 2, 6, 8, 9, 1]
输出:99999
解释:我们可以选择 5 个 9 组成 99999,因为选择数字 9 需要 1 个硬币,
约束:
大小(成本)= 9
1 <= T <= 10^3
1 <= N <= 10^3
1 <= 成本[i] <= 10^3
第 2 轮(技术面试 1)
我被要求介绍我对技术的熟悉程度、我使用的语言以及我是否对Java感到满意。因为我主要使用 c++,所以我告诉我我是一个 c++ 人,面试官对此很满意。然后他让我解释 oops 概念中的四个术语。我向他解释了封装、继承、抽象和多态。面试官对我的回答很满意,我们转向 DBMS。他问我过去使用过哪些类型的数据库。我使用过关系数据库,所以问我的问题与它们有关。他让我解释 SQL 中的索引和连接类型。回答完这些问题后,面试官进入了面试的编码部分。
我被问到的第一个问题是在链表中查找循环的长度。我从 O(n^2) 解决方案开始,他要求我对其进行优化。我给了他一个哈希图解决方案,他让我进一步优化解决方案。然后,我使用快速和慢速指针给了他最佳解决方案。他对答案很满意,并要求我对其进行编码。验证代码后,我们继续下一个问题。
第二个问题是,给定一个目标整数 x,我必须在二叉搜索树中找到小于等于 x 的最大整数。我使用二叉搜索树的属性给出了这个问题的递归解决方案。面试官对我的回答很满意,让我写代码。写完代码,他验证了一下,发现了一个我在代码中漏掉的小测试用例。他让我改正。我能够修复代码。
在编码问题之后,他问我是否有一些问题要问他。这一轮很顺利,面试官非常友好,我很喜欢和他讨论。
本轮比赛后一个小时,我收到了下一轮比赛的邮件。
第 3 轮(技术面试 2):
这一轮面试官也很友好。他让我解释我最近做的一个项目。我最近做了一个关于音频摘要的项目,所以我向他解释了这一点。除此之外,我还解释了另一个项目,我必须提出一种算法来解决问题。
然后面试官让我为音乐播放器写一个洗牌算法。给定一个歌曲数组(他特别提到了数组两次),编写一个执行以下操作的算法:
1. 算法随机选择一首歌曲并播放。
2. 除非阵列中的所有歌曲都用完,否则不得再次播放已播放的歌曲。
3.一旦数组耗尽,歌曲必须重复使用。
我给他的第一个解决方案是维护一个布尔数组,该数组将为数组中的每个索引 i 标记歌曲已播放/未播放。如果生成的随机索引已经播放过了,我会重新生成一个随机索引。面试官问我这个设计的潜在问题。这种设计的问题是,一旦播放了一半的歌曲,生成已播放歌曲索引的概率很高,我们可能会陷入生成已播放歌曲索引的无限循环。他让我在这个解决方案上即兴发挥。
经过一番思考,我想出了一个使用两个数组的解决方案。播放一首随机歌曲后,我会将那首歌曲移动到新数组中,并将播放歌曲后面的所有歌曲移动 1 个位置。这种设计的明显缺陷是,在最坏的情况下,播放一首歌曲所花费的时间将与歌曲数组的大小成线性关系。面试官要求我进一步优化解决方案。他想要一个恒定的空间解决方案。
这一刻,最佳方案在我脑海中响起。我告诉他,而不是使用另一个数组,一旦生成随机索引并播放歌曲,我会将这首歌与数组末尾的歌曲交换,并将数组的大小减少 1。一旦我的数组大小变为零,我可以将其重置回初始数组大小。 (这个过程有点类似于堆排序算法中所做的)。面试官对这个解决方案很满意,并要求我编写解决方案。我能够在几分钟内对其进行编码,经过一些讨论,我们转到下一个问题。
第二个问题是在 bst 中找到第 k 个最大的元素。我告诉他,如果 bst 的大小是 n,那么我可以在 bst 中找到第 (nk) 个最小的元素。他告诉我假设 bst 的大小是未知的。然后我给了他逆序解决方案,我们首先遍历节点的右子树而不是左子树。他对我的回答很满意,并要求我编写解决方案。验证代码后,我们还有一些时间。于是他又问了我一个问题。
给定一个 *m 矩阵,其中 0 表示一个阻塞单元格,1 表示一个遍历单元格,并给定矩阵中猫和老鼠的坐标。一只猫可以移动到 8 个相邻单元中的任何一个。我必须找出从猫细胞到老鼠细胞的路径是否存在,如果存在,我必须打印它。我向他解释了标准的回溯方法。他对解决方案很满意,并要求我编写代码。
验证代码后,他问我是否有任何问题要问他。这一轮进展顺利,我有信心收到下一轮的邮件。
2小时后邮件来了。
我对技术回合的建议:
1.了解常见的编程问题。 Geeks for Geeks 是学习这些问题的好地方。
2. 学好DBMS、oops、OS、网络等核心科目。没有面试不会对这些主题提出质疑。
3. 与面试官互动。练习大声思考的过程(在思考解决方案时说话)。这对 f2f 面试真的很有帮助。
4. 你的面试官是你的朋友。如果您遇到困难,他们会帮助您。不要假设你需要在第一次尝试时给出一个完美的答案。如果您无法提出解决方案,他们会帮助您。
5. 即使你知道一个最佳答案,但之前给出多个答案表明你可以想到不止一个解决方案。除了最佳答案之外,还要寻找多个答案。
6. 使用正确的命名约定。坚持一致的打字风格。 (如果您使用Python或 cpp 编码,请使用蛇形大小写。在Java中更喜欢骆驼大小写)。
7. 在你写的时候解释你的代码。让面试官验证你的假设。这有助于建立对话,并且您将非常清楚您正在编写的代码。
第 4 轮(经理面试):
我以前从未进行过管理回合,所以我感到很惊讶。我浏览了面试官的 LinkedIn 个人资料。他是一名技术人员,我也期待这一轮中的技术问题。
面试官和我打招呼,问我对公司的了解。我向他解释了我研究过的内容,他似乎对答案很好。
然后他问我为什么选择 Tekion,因为我可以自己开一家初创公司。我告诉他,我目前还没有关于 MVP 的想法。这是一个真实的答案,他转移到下一个问题。
然后他让我说出我的5个优点和缺点。他告诉我不要粉饰我的长处作为弱点。他告诉我,如果我这样做,他会在一系列问题中纠缠我。我能够做到这一点而不会掩盖我的弱点。然后他让我再增加两个优势。我也这样做了。然后他让我回忆我所说的一切。我无法回忆起自己的优势之一,而他真的希望我回忆起它。他告诉我,如果我能回忆起自己的力量,他会立即给我这个职位,否则会拒绝我。我尽力了,但想不起来。我很紧张我是否能进入下一轮。面试官告诉我挂断电话之前忘记的最后一点力量。 (这是我沟通良好)。
尽管面试不太好,但我在 30 分钟后收到了 HR 面试的邮件。
第五轮(人力资源面试):
这是所有面试中最短的一次。 hr非常友好,感谢我一整天的耐心。他让我谈谈过去 3-4 个月我一直在做什么,以及我所在地区发生了什么。在此之后,他让我谈谈我做的一个项目。然后他问我有没有什么问题要问他。我问了几个关于公司技术栈的问题。经过15分钟的讨论,面试结束了。
结果第二天就公布了,我被选中了。
我对管理和人力资源的建议:
1. 了解自己的长处和短处。在进行这一轮之前,请进行适当的 swot 分析和自我反省。
2. 举一些例子来支持你的主张。如果你举一个现实生活中的例子,面试官会接受答案。
3. 不做虚假声明。面试官很容易抓住你的谎言。
4、研究公司的价值观、使命和愿景。了解公司的技术堆栈是一个加分项。
5. 提前准备一些你会问面试官的问题。避免询问您无法回答的问题。
6.知道你的简历上有什么。在参加面试之前,把你在简历中提到的每一件事都仔细检查一遍。
我建议在 geeksforgeeks 上准备核心主题和编程问题。要了解公司面试,请深入了解 gfg 面试经验。保持冷静,并在面试中一切顺利。