📜  Arcesium 面试经历 |设置 11(在校园实习)

📅  最后修改于: 2021-11-10 06:27:25             🧑  作者: Mango

Arcesium 于 2018 年 7 月 27 日来到 COEP 进行实习面试
总在线测试 + 5 轮

在线测试——
总共80分钟,在hacker rank的代码对平台上进行。
该部分分为3个部分,
1 定量能力 15 20
2 技术能力 15 15
3 编程测试 1 1 15
4 编程测试 2 1 30

每个问题都有相同的权重(他们在采访中说)
任何部分都没有时间障碍,您可以自由地在各个部分之间来回跳跃。

*第 1 和第 2 部分中的每个错误答案都带有该问题 25% 的负分,并且每个问题都有四个选项,只有一个正确答案。

Quantitative 有很好的问题,对我们大多数人来说都很难,技术更多的是关于面向对象的
Java和 C++ 中的问题,以及一些与 C、堆栈、二叉搜索树的基础相关的问题。如果你擅长 OOP,技术非常简单(给出了 5-6 个代码片段,我们必须标记适当的答案)。

来到代码部分。
1.有一条N单位的河,河对面有K块石头,每块石头都在N个单位中的一个。从第0个位置开始,你的第一次跳跃总是1个单位(考虑之前的跳跃为L个单位),现在您的下一个后续跳跃可以是 L + 1 或 L – 1。注意很少有可能会丢失。
您必须输出从每块石头中取出的 Jump 的平方和。
(这个例子会很清楚)
例如,让河流为 N = 5 个单位,并且有 4 块石头按阵列放置
[0, 1, 3, 4]
解决方案 –
1.从0-1的第一次跳跃总是固定的,即1个单位。
2.现在对于下一次跳转你有2个选项L+1 = 2或L-1 = 0,我们必须从每个位置向前移动,所以这不是我们想要的,所以我们将检查当前位置1+跳转(L+1) 即 1+2 = 3 数组中是否存在,如果是,则跳转
3.现在从 3 我们有 2 个选项(因为最后一跳是 2 所以我们可以跳 2+1 或 2-1 到达下一个石头)
2-1 = 1 将使我们到达我们想要的最后一块石头 4

现在我们必须输出在每个位置采取的 Jump 的平方和
0^2 + 1^2 + 2^2 + 1^2 = 6
所以如果有可能达到最后一石输出 6 else 输出 -1

实际的解决方案是使用 DP 但我尝试了贪婪的方式(无法通过所有测试用例)
它与这个问题 90% 相似 – http://www.dsalgo.com/2016/01/jumping-frog-problem.html

2.你得到了一个 am*n 国际象棋棋盘,棋盘上有黑色棋子(用 1 表示)。你必须把你的白色棋子放在所有可能的位置上,并计算每个人可能杀死多少人位置并总结起来。你只能直线移动 (x+1, y) 和杀死对角线移动 (x+1, y+1) & (x+1, y-1)
例如 3*3

0 0 0
0 1 0
1 1 1
– 第一排 (0, 0) => 2 次击杀,第二位 (0, 1) => 0 次击杀,第三位 (0, 2) => 2 次击杀
-第二行,从第 1 个位置 (1, 0) => 1 杀,第 2 个位置 (1, 1) => 不可能,第 3 个位置 (1, 2)=> 1 杀
-第三排无法放置,因为都是 1
在每一步,你都必须最大限度地杀死
上述问题的输出是 – 6
-我没有时间解决这个问题,甚至没有正确阅读问题
该链接是我朋友使用 DP 解决相同问题的代码 – https://ide.geeksforgeeks.org/tf745kHTQI

结果公布了,他们最初拿了 10 个,后来又增加了 4 个
所以在 160 多名学生中,他们选择了 14 名参加下一轮。

第一轮——
这是一个技术轮,每个技术轮有 2 个不同的面试官,
问了我自己,然后看了看我的简历,问你懂PHP我说懂,然后他们问
什么是 var_dump ?我回答了
一些基本问题,然后他们问你知道Java(我说我已经 2 年没有编码了)
所以这个酷家伙就像让我们看看你忘记了多少。
– 他问什么是接口
-当您可以在必须使用它的类本身内部进行声明时,为什么要使用接口(举了例子,但他不相信)
再问几个关于Java 的问题,然后他问你用哪种语言编写最多,我说 C、C++、 Python
然后是关于 C++ 的几个问题
– 什么是虚拟内存
-什么是多态
– 为什么它被称为运行时(告诉 Vptr 和 Vtable 是满意的)
-C++/C 是如何执行的(我解释了循环 Preprocessing/Compiling/Assembling/linking 的所有阶段)
– 然后他问编译器如何知道你的 int xyz 存储在哪里
– 链接和加载实际发生了什么(关于链接表的介绍)
– 询问当你完成所有过程时目标文件在哪里(被告知 –save-temps)
还有几个问题,没有一个问题是直截了当的,而是以一种棘手的方式提出的,
然后他们走向树,
– 你知道树数据结构吗——是的,解释了所有遍历的工作原理
– 什么是中序遍历写代码
-如果中序遍历与另一个遍历一起给出,您是否可以始终使 BST => 是
-他们问我关于共同祖先的问题 -https://www.geeksforgeeks.org/lowest-common-ancestor-in-a-binary-search-tree/
我尝试了许多不同的低效方法,但他们总是要求尝试更多,我尝试了 2-3 种方法然后他们转向下一个问题
还有一些逻辑构建问题不记得所有
然后他又改用Java了
– 你知道单例类吗 – 不,他们解释说
-你怎么能限制班级只制作一个对象
-我在C++中解释了Unique和Shared ptr的概念,并告诉我们可以保留一个计数变量

-什么是死锁,解释死锁
然后他们问我是否了解 DBMS——我说是的
– 编写查询以查找学生数据库中的第二名持有者 – 我确实使用了限制和偏移量,
然后他们要求做没有限制和偏移然后我使用嵌套查询。
他们问你熟悉哪个数据库——我回答了 Mysql & MongoDB
他们问的是其他数据库中的限制和偏移参数
然后告诉你已经完成了你有什么问题要问我们吗?
我问了 2-3 个(在你参加面试之前总是问关于公司的问题研究)

第二轮——
给大家更一般的回合,向大家问了2个谜题
1.你有一个 5 升和一个 3 升的罐子。您可以使用任意量的水。不应使用任何其他罐子或容器。你怎么能得到精确的4升水?
– 我回答然后他说只分 4 个步骤来做,其中注水和转移水也被视为单独的步骤。过了一会儿我说这是不可能的,他说再努力一点。

2.和这个类似(一瓶酒一瓶,一瓶是毒酒。一只老鼠喝了毒酒一小时后就死了。最少需要多少只老鼠才能在一个小时内找出哪瓶有毒.)

然后一般地询问在线测试如何等等。

本轮过后5人入围下一轮

第三轮——
又是技术回合,我很受欢迎,也很舒服,他问了我近 4-5 个复杂的代码问题
他们开始,告诉我关于你自己。
– 然后他问你在 Online 中解决了哪些代码 – 我回答并在测试后告诉我可以使用递归解决它,并编写代码。
– 一些我不记得的问题,但我在 3 阶段蛮力中解决了/将其优化为 O(n^2)/ 并使用散列使其成为 O(n),他很高兴
– 什么是散列
-如果我想在散列中存储相同的元素会发生什么(他期待我是否知道冲突以及如何解决)
– 编写使用链表链接的代码
-哪个是更好的链接或开放网络解决方案来解决冲突
– 他问我,如果我们使用相同的对象调用类方法,那么如何确定(Java编译器)调用哪个对象?我没有得到他解释了两次的问题,我们转移到下一个问题
– 你得到一个数字和一个数组,你必须从数组中找到 K 个这样的元素,这些元素加起来就是给定的数字
例如。数组 [2, 3, 1, 5, 9, 7]
k = 2 //需要的确切元素
x = 6 //最终和应该加起来为x
所以这里的元素 1 和 5 总共 2 个元素加起来为 6。
我给了蛮力 – 找到所有可能的子集并添加它并计算元素的数量 – 编写 sudo 代码
然后我使用散列给出了 O(n^2) 但他仍然不相信
然后我尝试使用段树作为前缀和(但错了)
– 他问我关于分段树
他让我一直在推动更优化的解决方案,最终在一些提示后做到了(如果你想得到提示,请大声思考,它对我帮助很大)
-还有一个我不记得的问题
回合结束我很高兴,因为我几乎给了他想要的任何东西,他问我是否想问什么,我问

第四轮——
这是人力资源回合,基本的人力资源问题
– 介绍你自己,你住的地方,家人,所有的面试怎么样,我今天过得怎么样等等
-问了一个谜题
老鼠和毒药拼图
有30瓶酒,1瓶中毒,用最少数量的老鼠找出来,如果老鼠在14小时内死亡,你有24小时的时间来检测哪个瓶号中毒了。
我用二进制数逻辑回答 5 为 2^5 = 32,但他说不是最小的,
挠了挠我的脑子,最后他笑了,说晚点告诉我。
回合结束。
后来我用谷歌搜索并得到了答案,只需 1 只鼠标即可找到瓶号。
你要做的是,让老鼠每 5 分钟喝一次每瓶酒,14 小时后计算他需要死的额外时间,除以 5,你会得到酒瓶号

(我们认为它已经完成,但无需等待另一轮技术回合)

本轮3后入围

第五轮——
这一轮是最具挑战性的一轮
-给你COEP网络,你有25部电话,每部电话必须严格链接到其他7部电话(适用于所有)你必须找到如果给定电话号码N和电话的确切链接限制,如果网络可以就返回(真)与否(不)
他给出了我所知道的关于图形度数的提示,正如我在图形中所说的那样,我使用图形方法解释了他并编写了 sudo 代码,但他说这可以使用公式在一行中完成
我试图推导出 4-5 个公式,每个公式都有一些测试用例失败,在最大尝试后,我们转到下一个问题
– 这是一个与设计相关的问题(我不记得是什么了) – 但是我一步一步地设计,他让我一直推动直到它成为最好的和优化的解决方案,让我编写代码
– 他给了一个谜题 => 我侄女喜欢给圆圈涂色
每次迭代有 n 个圆圈,她为备用圆圈着色
找出最后剩下的未着色圆圈的圆圈编号
尝试了 2-3 种组合,并猜测它将是最接近圆总数的 2 的幂 => 他告诉正确
– 另一个设计问题 –
从头开始设计 Excel 电子表格
我从我的方法开始并使用 C++,所以我使用了 unordered_map,但他说,它应该在纯 C 中不要使用任何内置 DS 只使用数组和基本的东西,
所以他告诉在 c 中实现 unordered_map
我做到了,然后我们转向了数组和指针,连续存储与链接以及许多相关的问题来了。
他要求为 Malloc 编写代码,
最后,我设计了它,他督促我把它做到最好,最后他真的很满意。
在这个设计部分写了2-3页代码
这已经超过半小时了
-让我写排列的代码
写了一个递归代码,他要求遍历代码并为给定的输入绘制递归树。我两者都做了。
这一轮持续了近1.30小时

是的,全部都做完了。忙忙碌碌,我们一整天都进行了将近6个小时的面试
结果几分钟后,来了,他们给了一些正式的演讲,并宣布我的名字,并告诉将只需要1,我很高兴,但伤心过我的朋友,谁是我的前3名不能和我一起做吧。
很高兴能与未来的公司合作。 GFG 真的帮助了我。
干杯和快乐的编码。