FactSet 校园面试体验
FactSet 在 8 月的第一周访问了我们的校园。我收到了 FactSet 的工作邀请。所以,我觉得我有资格写面试经历。
简介:软件工程师
类型:只有工作
总轮数:3/4
FactSet 官员做了介绍。紧随其后的是第一轮——书面技术测试。
技术测试:
第一个测试是书面编码测试。它有 3 个问题和 75 分钟。我们应该在每个问题中编写主要的逻辑函数。
- 问题 1 [20 分]:给你 2 列,第一列是交易编号,第二列是在该交易中购买的物品清单。您应该找到以最高频率一起购买的所有商品对。写下解决方案的时间和空间复杂度。
Input :
Transactions | Items Purchased
--------------------------------
1 A, B, C, D
2 A, B, D
3 A, B
4 B, C, D
5 B, D
6 A, B, C
7 A, B, D
Output : (A, B), (B, D)
Explanation:
Pairs Frequency
-----------------------------------------
{A,B} 5 {Transaction : 1, 2, 3, 6, 7}
{B,D} 5 {Transaction : 1, 2, 4, 5, 7}
{A,C} 2 {Transaction : 1, 6}
{B,C} 3 {Transaction : 1, 4, 6}
{A,D} 3 {Transaction : 1, 2, 7}
{C,D} 2 {Transaction : 1, 4}
[解决方法:使用HashMap,不要忘记检查“AB”和“BA”将是相同的键。]
- 问题 2 [10 分]:给你一个包含 n 个元素和整数 k 的数组。打印每个大小为 k 的窗口的第一个正元素。如果正元素不存在,则打印“0”。最大时间复杂度应为 O(n),空间复杂度应为 O(k)。
例子:
Input : [2, 3, -5, 6, -2, -1, 0, 8, -3, -5, -9, -4, -3, 1], k=4
Output : [ 2, 3, 6, 6, 8, 8, 8, 8, 0, 0, 1 ]
- 问题 3 [10 分] :你应该知道给定的两个路径是否会在 unix 命令中指向同一个目录?您将获得当前目录路径和 2 个其他路径。你可能知道'。表示当前目录,'..' 表示父目录。
Current Directory | Path1 | Path2 | Result
-------------------------------------------------------------------
/usr/java/codes/ /codes/abc/../prg1/... ../prg2/.. true
/usr/java/codes/ /codes/abc/../prg1/ ../prg2/../prg1/ true
/usr/java/codes/ /codes/abc/.. ../prg2/../loop/ false
[解决方法 - 1:使用字符串生成器并相应地附加/修剪字符串并比较字符串]
[解决方法-2:每个路径使用2个堆栈一个,首先将当前目录推送到两个堆栈中。现在迭代每条路径并执行以下操作: if '.' –什么都不做,如果'..'然后弹出,否则推。然后比较两条路径。]
【解决办法——3:使用双向链表。首先使用当前目录的节点为每个路径创建两个双向链表。然后遍历每条路径并相应地添加/遍历节点,最后进行比较。]
->第一次测试后,共有 29 名学生被选中。
技术面试 – 1 :
那里同时进行 5-6 次面试。有的只有一名面试官,有的有2名。面试问题完全基于数据结构和算法技能。他们正在研究您如何处理解决方案以及您可以如何高效地解决问题。每个候选人都被问了 2-3 个问题,整个过程持续了将近一个小时。
我的面试持续了将近 1 小时 15 分钟。它从一些简单的简历问题开始,比如我提到的 react.js 和 node.js,所以他问你在哪里使用这些技术,我对这些技术有多少了解,你更喜欢后端还是前端?他还询问了测试。然后他问了我以下2个问题。
- 问题1:所有候选人都一样。使用 BST [二叉搜索树] 创建堆栈。我给出了一种使用字段“rank”创建节点的方法,rank 是一种索引,整数 I,其中给定元素是要推送的第 I 个元素。逐级创建 BST。所以,他问我 push、pop、top 和 print 操作的复杂性。他再次问我是否可以做得更好。所以,我给出了使用平衡二叉搜索树的方法。然后他让我写push和pop的代码。其他一些候选人给出了保持指针指向先前添加的节点的方法。
- 问题 2:给你一个日志文件。日志文件通常具有固定格式。其中有两个字段,ERROR CODE : ERROR TEXT。文件包含 100 万行。您应该找到第一次出现错误代码的行号与文件最后一行的错误代码相同。这里的想法是使用 seek() 然后简单的搜索。然后他让我写同样的代码。但我不知道 seek() 的语法。所以,我给出了剩下的代码。面试官告诉我seek()怎么用,还问了代码的时间和空间复杂度。问这个问题的主要目的是,如果我知道 Linux/Unix 命令、文件输入/输出、拆分字符串和原始数据类型。
-> 同一轮中提出的其他问题:
- 问题1:给你源字符串(我们称之为S),另外两个字符串(我们称之为T&W)和整数K。你应该用W替换T在S中的第K次出现。如果K<0,计数Kth从最后发生。如果 K 大于 T 的总出现次数,则 K=(K % T 的总出现次数)。这里的一个问题是,你应该为字符串W 开发解决方案,它的长度可能与 T 不同。
- 问题 2:给你三个字符串s1、s2 和 s3。 s3 由 s1 和 s2 的字符组成。您必须检查 s1 和 s2 的字符顺序是否与它们在原始字符串中的顺序相同。这是一个使问题更清楚的示例:
Input : s1 - abc, s2 : def
Output : [s3 is input, output is only true/false]
s3: abcdef - TRUE
s3: abdefc - TRUE
s3: adebcf - TRUE
s3: abdcef - TRUE
s3: acdebf - FALSE
s3: deabfc - TRUE
-> 16 名学生被选为第二轮。
技术面试 – 2 :
我的第二轮技术分为两个部分,技术和人力资源。它持续了将近1小时45分钟。但大多数候选人只有技术,持续了近 1 小时。技术问题被要求检查数据结构的知识。只有 2-3 位面试官询问应聘者简历中提到的项目。一些候选人被问到关于指针的问题。
技术问题:
- 问题 1:今天我们看到很多网页可以加载多种语言。因此,我应该提供一种机制,可以根据请求的位置直接以本地语言加载网页。我得到了包含以下信息的表格:IP 地址范围、相应的国家代码和与该国家相关的语言。我告诉过,一旦我们检查了请求 IP 所在的范围,我们就可以获取语言并相应地加载。所以,面试官问你如何使搜索有效?然后给一些时间思考并问你会使用哪种数据结构?我使用平衡二叉搜索树给出了解决方案。
- 问题 2:给您一个字符串数组。如果任何字符串的第一个字符与任何其他字符串的最后一个字符匹配,则在这些字符之间画一条弧线。绘制所有可能的弧并检查它们是否形成循环。面试官的第一个问题是:你将使用哪种数据结构?我使用有向图给出了解决方案。
输入:[king, gear, rat, tap, pot, talk]
输出:真
输入:[king, gear, rat, tap, talk]
输出:假
然后面试官又看了一遍我的简历,问了上面提到的一般性问题,然后问了关于我的成就的问题。
然后他开始了HR面试。
人力资源面试问题:
- 关于家庭背景
- JEE排名和讨论为什么这所大学
- 如果你得不到这份工作怎么办?如果你没有从这所大学得到任何工作/实习怎么办?
- 你的父母希望你毕业后去吗?
- 你想毕业后去吗?为什么?
- 在加入任何组织/公司之前,您会寻找哪 5 件事?
- 您更喜欢哪个位置?
- 离开家乡搬到新地方让你兴奋吗?为什么?
然后问我是否有任何疑问。
一些在第二轮中只被问到技术问题的候选人还有一轮,纯粹是 HR 轮,持续至少 30 分钟。
然后8个候选人被提供了工作。
提示:更多地学习你的数据结构和算法技能。保持信任和诚实。
希望能帮助到你!
面试一切顺利🙂