Bharti SoftBank (Hike) 面试经历 |设置 2
第一轮(笔试)
持续时间 - 90 分钟
第 1 部分(技术目标问题)
– 25个mcq,主要关注c、c++、os、数据结构、算法
第 2 节(2 个编码问题)
– 代码应该写在纸上
问题 1:给定一个单词字符串,返回字符串中所有反向单词为 ( (word1 , reverseword1 ) , (word2 ,reverseword2) )
eg .
Input -
Sachin tendulkar is the best tseb eth nihcaS
Output -
{ ( best , tseb ) , ( the , eth) , (Sachin , nihcaS) }
问题 2:找到使用相同位数形成的恰好较小的数字。
如果不可能,打印 -1。
eg
input - 371
output - 317
input - 456
output - -1
第 2 回合(采访)
第一轮面试基于基础数据结构
1. 面试官让我为数组的第二个最大元素编写代码。然后讨论了数组中的第 3 和第 k 大元素。
2. 与二叉搜索树相关的概念、用途和比较复杂性。
3.询问散列,碰撞,散列的实现。
第三轮(面试)
问题 1:要求编写用于二叉树中级别顺序遍历的代码。问题被进一步修改以进行螺旋顺序遍历。两者都应该在 O(n) 时间复杂度内完成。
然后他问了我一个谜题
http://www.programmerinterview.com/index。 PHP/puzzles/3-ants-on-a-triangle-riddle/
那时有一个关于我的项目的小讨论。
然后他开始询问有关操作系统的问题
– 互斥和信号量。
– 使用信号量为生产者消费者问题编写代码。
在我写了一些伪代码之后,通过添加更多约束使问题变得更加复杂。
面试官想测试一下我对信号量的理解,问了一些棘手和令人困惑的问题。
第四轮(面试)
问题 1:编写代码以获取堆栈的最大和第二大元素。给定的函数应该是 O(1) 复杂度。
我给出了一个使用 2 个额外堆栈的解决方案
然后,他通过将问题扩展到在 O(1) 时间内的任何实例中从堆栈中查找第 k 个最大数,从而使其变得更有趣。 Stack 支持 push、pop、peek 和 kthmaximum函数。
他对 O(1) 约束非常挑剔。
我给出了很多解决方案,但他希望我达到 O(1) 解决方案。
最后我给了他一个解决方案,它使用了一个额外的堆和一个二叉搜索树,并且能够获得 O(1) 时间复杂度。
问题 2:给定一个生物阵列(先增加然后减少)编写代码来搜索给定的数字。时间复杂度 O(logn)
问题被进一步修改为编写4个案例的代码进行搜索——
1 数组可以升序排序
2 数组可以降序排序
3 数组可以先增后减
4 数组可以先递减后递增
这个想法是首先检测它是哪种情况,然后进行相应的搜索
时间复杂度 O(logn)
问题被进一步修改以处理重复。如果出现重复,我的算法变为 O(n)
第五轮(电话面试)
这一轮是对公司CTO的电话采访。
首先他问我关于数据库索引的问题。什么 ?为什么要使用索引?它是如何实施的?
我给了他一个完整的解释
这是一个很好的解释
http://www.programmerinterview.com/index。 PHP/database-sql/what-is-an-index/
他从关于我的项目和研究论文的小讨论开始。
然后他转向数据结构并问我如何为给定的问题选择相关的数据结构。
– 我向他介绍了每种数据结构的优势以及特定数据结构可能有用的某些问题。
然后他提出了一个问题,问我应该使用什么数据结构来记住时间复杂度
问题:给定一个学生列表和他们的分数,编写一个函数,打印所有分数在给定范围 l , r 内的学生
eg .
Akshay 30
Atul 25
Angay 20
Sahil 10
Then if input is l = 12 and r = 26
Output - Angay, Atul
我通过使用学生链接列表创建链接列表数组来索引标记来提供解决方案
然后他修改了问题,在浮点数中添加标记也被允许。
我给了他一个使用 map (c++) 的解决方案,基于一个键值对标记和学生列表
但他要求优化时间复杂度
然后我对我的第一个解决方案进行了修改,并添加了存储桶和二分搜索的概念。
最后他问了我几个小时的问题。