📜  高盛面试经历(软件工程师 – 有经验)

📅  最后修改于: 2021-09-23 05:13:58             🧑  作者: Mango

我通过LinkedIn联系了招聘人员并与他们分享了我的简历。 2天之内,他给我发了测试链接。那时我有 1 年的应用程序开发经验。
第 1 轮:Hackerrank 测试
持续时间:1.5 小时
要解决的问题数:2

  • 问题1: Easy DP(与nth Stair Code有关,但对这个问题稍作修改和扩展)
    链接:计算到达第 n楼梯的方法
  • 问题 2:中等(不记得问题了)解决了这两个问题。

第 2 轮:Coderpad 轮
时长:1小时
要解决的问题数:2

  • 问题 1:字符串实现问题(Easy-Medium)
  • 问题 2:在大括号中打印循环数字。对此问题稍作修改:https://www.geeksforgeeks.org/find-recurring-sequence-fraction/Example:
    Input: a=1, b=3 
    Output: 0.(3)
    
    Input: a=2, b=5
    Output: 0.4
    
    Input: a=1, b=6
    Output: 0.1(6)

    我完全解决了第一个问题,在第二个问题中,只缺少角落案例(由于时间紧迫)。

第 3 轮:Coderpad 轮
时长:1小时
要解决的问题数:2

  • 问题 1:用Java设计一个实现 Deque 接口的类。 (即在Java实现自己的双端队列,不使用任何集合)7个要实现的方法:addFirst()、addLast()、removeFirst()、removeLast()、peekFirst()、peekLast()、size()
  • 问题 2:在二维矩阵中,每个单元格中都给出了金币。从左下角,您必须通过收集最大点到达右上角。 (类似于此:矩阵中从上到下的最大和路径)

    在这一轮之后,有 2 轮视频会议(背靠背 2 小时)。

第 4 轮:视频会议轮
时间:1小时(第一次视频会议圆)
工作经验和项目讨论。 (准备好面对深入的问题,为什么你更喜欢这种类型的问题)

Java的不可变类。从如何使任何类不可变的基本细节开始。
之后他们给出了一些场景,比如类包含ArrayList,因此当调用getter时,如果我们按原样返回ArrayList,将违反Immutability的概念,因为ArrayList中的元素可以被修改。

  • 问题 1:房屋强盗问题链接:https://leetcode.com/problems/house-robber/
  • 问题 2:打印 Treelink 的边界遍历:二叉树的边界遍历

一个核心Java问题来检查对编译时绑定与运行时绑定的理解

class A {
    int temp = 10;
    public void print()
    {
        System.out.println("In Class A");
    }
}
class B extends A {
    int temp = 20;
    public void print()
    {
        System.out.println("In Class B");
    }
}
class C {
    public static void main(String args[])
    {
        A a = new B();
        System.out.println(a.temp);
        a.print();
    }
}

提示:变量是在编译时绑定的,因此它们与运行时多态性没有任何关系。

第 5 轮:视频会议轮

持续时间:1 小时(第二轮视频会议)
工作经验和项目讨论。

  • 解释您如何在组织中使用 SDLC。 (需要深入回答)。
  • 他们想知道代码审查和代码合并是如何完成的。如何维护构建和发布。您遵循的开发模型是什么(在我的情况下是增量模型)什么是测试机制? JUnits、回归测试和负载/性能测试是如何完成的,
  • 客户如何获得即将到来的变化? (发布周期详情)
  • 你如何处理回归的情况?
  • 问题 1:二叉树的左视图(最优化解决方案需要 O(n) 时间和 O(1) 空间)链接:打印二叉树的左视图
  • 问题2:不记得这个(有点难)

多核Java问题:

  • 抽象类 vs 接口(何时使用)
  • OOP,您的 J2EE 框架中使用的概念(不是您的项目 – 在这里他们想知道您对 J2EE 框架背后使用的核心Java概念的了解程度)例如,托管 Bean 遵循封装的概念。编程到接口而不是类——多态性。
  • 关于Java集合的问题
  • 单例类和实现方法(深入讨论早期初始化与晚期初始化与 Bill Pugh)

    在这些轮次之后,我在工作日被叫到现场。 (2 张机票 + 4 份出租车费报销)

这些问题在所有 3 轮中都很常见:

  • 说说你自己。
  • 他们将选择一个项目(非工作前)。他们将深入研究,并会就所使用的技术、所遵循的方法等提出反问。(提示: 100% 确定你在简历中写的内容——在所有轮次之后,我简历中的几乎所有内容都被涵盖了)
  • 工作经验相关问题。 – 过去 1 年中你最喜欢的东西——项目中使用的设计模式。 (请至少有一个你使用了某种设计模式的项目)

第 6 轮:面对面面试
持续时间:1.5 至 2 小时

  • 假设您必须设计合适的数据结构。- 我给他们提供了使用 HashMap 和 AVL 树的方法。- 讨论它们之间的复杂性比较。- 实现您自己的哈希图。 (如果你对 hashmap 有深入的了解,这会很容易)
  • 根据我的工作经验,我被要求编写代码以选择任何 ORM(Hibernate/JPA/等)——在代码中,基于一些逻辑,我们必须使用更新和删除操作。
  • 跟进第二个问题。一些 SQL 查询。 (Easy-Medium)- 这是基于 SubQuery, Group by 和 joins 4) 当前项目和框架架构 (以下列方式)(Core Java -> JSP-Servlet -> JSF-Managed Beans)(Database -> JDBC ->休眠 -> JPA)

快速射击回合(每个问题 4-5 分钟):

  • 一棵树的高度
  • 关于树的一些问题,可以使用 PostOrder Traversal 解决
  • 合并排序与快速排序(与数组/链表一起使用)
  • 快速排序(关于枢轴的讨论)——随机快速排序(仅对此进行基本讨论)

第 7 轮:面对面面试
时长:1小时

  • 什么是迁移学习(直觉和方法论)(基于我的深度学习项目)
  • 设计一个合适的数据结构来玩拼图游戏。- 由此,问了一些二维矩阵问题。 (将矩阵旋转 90、180、270 度)
  • 关于Java集合的所有可能的问题:
    1. HashSet 的内部工作
    2. ArrayList vs LinkedList(使用方面)
    3. Hashtable vs HashMap vs ConcurrentHashMap

第 8 轮:面对面面试(Bar Raiser 类型)
持续时间:到目前为止,1-1.5 小时,这是最艰难的。

  • 1、直接跳转到HashMap的内部工作。他问你知道“Treefy Factor”吗?
    1. 我解释过了。从Java 8 开始,引入了此更改。
    2. 当任何桶中链表的大小超过某个因素时,LinkedList 将转换为自平衡 BST。
      反问:
    1. 给定 Employee 类,如果我们不重写 hashcode() 和 equals(),它会在 HashMap 中工作吗? (是的,每个类的父对象类都有 hashcode() 和 equals())因此它可以工作,但可能会导致一些性能问题。
    2. 对于同一个 Employee 类,TreeMap将工作? (否 -> 我们需要实现自定义比较器)
    3. 当我们使用 HashMap 时,treefy 因子会发生什么?在这种情况下,要将 LL 转换为 BST,我们需要某种比较逻辑。因此,如果未实现比较器/可比较器,则不会将 LL 转换为 BST。但是,不会有任何错误。
  • 2.实现一个合适的数据结构,在 O(1) 中完成以下操作
    1. 插入(整数元素)
    2. 删除(整数元素)
    3. getRandom() -> 以相等的概率从数据结构中返回任何元素
  • 3.在多线程环境中设计银行账户。 (最有趣的讨论)
      要求:
    1. 实现 void debit()、void credit()、int getBalance()、List getLast5Txn()
    2. debit() 和 credit() 不应同时执行以减轻脏读写。
    3. 在任何情况下都不应阻止 getBalance() 和 getLast5Txn()。 (即使是脏读,我们也应该允许)
      解决方案:
    1. 简单地将 synchronized 放在 debit() 和 credit() 之前是行不通的。根据内部工作,当您在任何实例方法上放置 synchronized 时,整个对象都将被锁定。因此在这种情况下,即使我们没有放置 synchronized 关键字,getBalance() 和 getLast5Txn() 也将被锁定。
    2. 在另一个类中维护 balance 变量,在 debit() 和 credit() 时,获取新类的锁(使用同步块)
    3. 使用 Readers Writers Lock
      反问:
    1. 当同步与静态方法一起使用时,会发生什么? -> 锁是在类级别获得的
    2. 举一些例子,他在一些实例/静态方法上添加了同步,并询问在这种情况下会发生什么?
    3. 方法级同步与块级同步?
  • 4.在很长的字符串找到第一个非重复字符.link:给定一个字符串,找到它的第一个非重复字符
      在此之后,他修改了问题,现在给出了m台机器和n个内核。
    1. 修改上述算法以利用多集群系统的强大功能。
    2. 通过一些提示,我能够设计一个算法(基于 Map-Reduce 框架)

    然后HR过来问了一些基本的问题。之后,他告诉我我已经完成了这一天。

一般注意事项:

  • 我准备了几乎所有的 DS/Algo Questions,预计生产级别的代码。
  • 他们也关注代码质量和可维护性。 (模块化方法)
  • 你应该100%了解你的简历。正如我已经提到的,我的整个简历在 8 轮之后就被覆盖了
  • 在第 4 轮到第 8 轮中,有一个由 2 人组成的小组。

    一个月后,我收到了GS的offer。