高盛面试经历 |第 43 集
(横向聘用;经验:4 年;班加罗尔位置)
第1轮:
HackerRank轮; 2个问题;时间: 2 小时(Java语言):
1. 给定一个包含括号和其他字符的字符串以及一个数字n ,输出对应于第 n 个左括号的右括号的位置(索引)。如果括号不平衡,则输出-1 。
2.给定一个字符串,输出它的压缩版本。字符串的压缩版本是另一个字符串,其中所有连续出现的字符都替换为该字符后跟出现次数。例如,如果输入字符串是:“aaabbacdddd”,那么输出应该是:“a3b2a1c1d4”。
第 2 轮:
编码器轮; 2个问题;时间: 1小时(Java):
1.单词之间的最小距离:
给定一个文档/文本和两个单词(出现在文档中),找到这两个单词出现之间的最小距离。文本中两个单词之间的距离定义为这两个单词之间的字符数。
这个问题的贪婪解决方案已经实现,但它包含几个(逻辑或语义)错误。由于这些错误,一组测试用例产生了错误的输出。
我的第一个目标是识别和纠正所有错误,以使所有给定的测试用例都通过。
第二个目标是创建更多测试用例以找出代码中存在的其他错误(如果有的话),并进一步修复这些错误。
2. 在我的情况下,第二个问题只剩下大约 20 分钟,所以它相对简单。
给定一个大小为 N×2 的二维数组,其中每行第一列包含学生姓名,第二列包含该学生在某个学科的成绩,我们需要找出平均分最高的学生姓名和最高平均分。一个学生可以有多行存储在不同科目中获得的分数。
第三轮:
电话轮询;时间: 45 分钟:
面试官询问了我的职业经历,我从事过的项目以及我使用过的技术。他对我之前的项目给出的许多答案进行了交叉提问,推断了创建新项目的潜在问题,给了我不同的场景,并询问我会采取哪些不同的方法来使解决方案在这些新情况下正常工作。许多场景涉及问题输入大小、时间限制的放大,并暗示引入了多线程。我的技能中提到了 Unix shell 和 AWK,所以他也问了一些问题。
第 4 至 8 轮:
全部面对面;在班加罗尔办事处举行;花了5个多小时(不包括休息时间)。我不太清楚每一轮问的问题,所以将它们按随机顺序列出:
1. 很多题都是基于Java语言的。基于 Collections、hashCode() 和 equals() 契约、String 和包装类不变性、String pool、String interning、Multithreading、Overloading 和 overriding、Dynamic polymorphism、WeakReference、Exceptions、Static 和 instance fields 等概念知识的问题是问。
2、SQL中涉及join(self join)、index(clustered/non-clustered)、查询写法等问题。
3. 一个能力问题:给定一个 4 位数字(比如 abcd,其中 a、b、c、d 是数字),使得 abcd × 4 = dcba(数字的倒数)。找出abcd。
4. 一个编程逻辑问题(贪心方法):输入一个数字(比如 N),找出具有相同数字的数字,刚好/立即大于 N。例如,以下是给定输入的输出:
123 -> 132
1368 -> 1386
253986321 -> 256123389
8631 -> 无
5. 在Java中实现 LRU(最近最少使用)缓存。 (这是在上一轮中提出的)。
6. 设计模式相关问题。实现单例设计模式的不同方式,最佳方式。适配器设计模式等
7、设计问题:
a) 您将如何实现 Google Chrome 浏览历史记录(向后和向前导航)。
b) 您将如何以数字方式存储不同的家庭关系;你会使用什么数据结构?如果是不同用户之间的 Facebook 关系,你会做些什么不同的事情。你会如何向现有用户推荐新朋友?
8. 不同数据结构(如哈希表、列表、数组)在时间和空间复杂度方面的比较。
9. 面向对象的编程概念:区别b/w封装和抽象等。