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