第 1 轮(在线编程轮 – Hackerrank 平台):本轮包括 1 道编程题和 15 道选择题。这一轮持续了60分钟。在测试期间不能在选项卡之间切换。此外,将定期拍摄网络摄像头快照。
编码问题:
- 金融分析师负责以数组表示的盈利股票投资组合。数组中的每一项都代表相应股票的年利润。分析师收集所有达到目标利润的不同股票对。不同对是至少在一个元素上不同的对。给定利润数组,找出其中每对利润之和恰好等于目标总和的不同股票对的数量。
例子:
stocksProfit = [5, 7, 9, 13, 11, 6, 6, 3, 3] target = 12 profit's target
- 有 4 对股票的利润总和等于目标 12。请注意,因为在 stockProfit 中有两个 3 的实例,因此有两个配对 (9, 3):stocksProfits 指数 2 和指数 7,以及指数 2和 8 个,但只能包含一个。
- 有 3 对不同的股票:(5, 7)、(3, 9) 和 (6, 6),返回值为 3。
函数说明:
在下面的编辑器中完成函数stockPairs。
stockPairs 具有以下参数:
int stockProfit[n]:代表股票的整数数组
利润
目标:代表年度目标利润的整数
返回:
int:确定的总对数
约束:
解决方案:
有几种方法可以解决这个问题。最好的方法之一是使用哈希。其他方法包括排序和两点技术。
第二轮(技术面试 1 – 60 分钟):
- 说说你自己
- 共享了一个指向协作工作区的链接,两个或更多人可以在其中编写/查看其他人编写的代码。
- 以下是被问到的问题
给出了一个小的编码片段,发现并纠正错误。
unsigned int i = 0; for(i = 100; i >= 0; i--) { printf(“%d\n”, i); }
- 给定一个元素未排序的链表,任务是删除重复项
版本 1:不使用额外空间(可能会影响时间复杂度)
版本 2:可以使用额外空间并可以创建新列表
版本 3:可以使用额外空间但不创建新列表
- 给定一个由小写英文字母组成的长度为 N 的字符串,任务是计算每个字符的频率恰好为 K 的子字符串的数量。
版本 1:对所有子串进行暴力破解 –
版本2:稍微优化一下——
版本 3:超级优化的方法 – 在哪里是字符串存在的不同字符的数量 – 即,26
我还告诉她为什么我的方法会奏效,告诉她这是我之前在 Geeksforgeeks 上改进的问题
- 讨论我的一个项目——如果我要扩展我的项目,我会实现什么功能?
- 面试官问我有没有什么问题
我能够轻松解决所有问题,面试官印象深刻。
第 3 轮(技术面试 2 – 60 分钟):
- 说说你自己
- 分享了一个到 Collab 的链接,它包含了我在上一轮技术面试中的所有代码。
- 以下是所问的问题: 给定一个包含 2-9 位数字的字符串,返回该数字可以表示的所有可能的字母组合。以任何顺序返回答案。下面给出了数字到字母的映射(就像电话按钮上的一样)。请注意,1 不映射到任何字母。
Input: digits = "23" Output: ["ad","ae","af","bd","be","bf","cd","ce","cf"]
- 版本 2:您还提供了一个单词列表;您的任务是找出上面生成的输出中将出现多少个单词
- 跟进:你能做到吗时间,其中 N 是单词数,M 是单词长度的最大值,假设字符串数字的长度不会超过 15
- 问题 2:树中两个节点的最低公共祖先
版本一:二叉搜索树中两个节点的LCA(利用BST的性质)
版本 2:二叉树中两个节点的 LCA(使用递归)
版本 3: N 叉树中两个节点的 LCA(单查询)
版本 4: N-ary Tree 中两个节点的 LCA(多查询)——可以使用 Euler Tour + RMQ 解决
- 讨论我的两个项目——我们为什么要做这些项目的简要想法,我们是如何做的,项目范围等。
- 你有任何问题吗?
我能够解决所有问题,这是一次非常好的体验。当我在解决键盘问题的第 1 版时遇到困难时,面试官帮助了我。
第 4 轮(HM 面试轮 – 90 分钟):
基本的人力资源问题
- 你有没有觉得不舒服?
- 当你感到不舒服时你会怎么做?
- 疫情期间你是怎么度过的?
- 你打疫苗了吗?
- 您对本公司了解多少?
- 告诉我一些关于你的大学的事情
- 你什么时候在大学里享受最好的时光?
- 你在大学里有没有感到不舒服?
- 你当时做了什么?
- 你如何说服一个有 60 名学生的班级参加一个会议? (他们不会听你的,他们已经有75%的出勤率,惩罚会带来混乱——你将如何说服他们?)
一些技术性的东西
- 告诉我你的项目
- 谈论您的项目中使用的数据库模式
- 如果你想扩展你的项目,你更喜欢垂直缩放还是水平缩放,或者两者兼而有之?
- 基于系统设计的问题——功能需求、UI 设计、数据库模式、负载平衡等。
- 你有任何问题吗?
再次,面试官印象深刻,这是一次非常友好和健康的谈话。
一些关键要点:
- 面试官随时为您提供帮助。每当您遇到困难时,请务必提出问题/提示。确保您理解问题陈述。
- 练习编码问题。 Hackerrank、GeeksforGeeks 和 Leetcode 收集了大量面试中提出的问题。
- 做很多有趣的项目。项目为简历增加了巨大的价值。
- 永远不要谈论你的弱点。永远不要给他们拒绝你的理由
判决:被选为助理软件工程师角色