Adobe 采访 |第 6 组(MTS-1 校内)
我要感谢整个 Geeksforgeeks 团队,他们的贡献极大地帮助了我准备面试和进入 Adobe。
轮数: 1 apti + 1 书面 + 4 PI
能力倾向轮: 1小时
分析能力15题,数据解读和定量能力30题
笔试: 2小时
关于算法和操作系统的 10 个问题,关于 C/C++ 代码片段输出的 10 个问题
PI回合-
第一轮:45分钟
1. 使用 2 个栈实现一个队列(push 和 pop 的平均时间复杂度 O(1))
2.关于需求分页的讨论。然后面试官让我给出需求分页的详细实现,使用面向对象的方法,考虑从页表到交换磁盘 I/O 到页面替换策略的所有内容。
第二轮:45分钟
1. 本轮从一个谜题开始:有两个桶——一个装有 100L 水,另一个装有 50L 牛奶。从第一个桶中取出一勺水并添加到第二个桶中并搅拌混合物,现在从第二个桶中取出一勺混合物并添加到第一个桶中。比较第一个桶中的最终牛奶体积和第二个桶中的最终水体积。
2. 有缺陷的球谜题:用最少的措施从7个球中找出有缺陷的球。
3. 系统发送多个查询以查找两个给定数字之间的所有质数。在少于 O(p) 的时间内为每个查询提供服务(p 是素数的总数)
解决方案:最初执行 Eratosthenes 筛选并维护素数列表。对于传入的查询,使用二进制搜索来查找给定数字之间的第一个和最后一个素数。
4. 河内塔问题的修改:考虑 3 个塔 A(源)、B(辅助)、C(目的地)和 n 个圆盘。原始问题的所有通常约束都成立,但增加了一个新约束:不能将盘直接从 A 移动到 C 或从 C 移动到 A,必须在两者之间使用 B。
解决方案:对于 n 个圆盘和塔 A、B、C 分别作为源、辅助和目标,考虑以下函数:
Move(n discs, A,B,C)
{
If(n==1) print(nth disc, A->B->C);
Else
{
Move(n-1 discs, A,B,C);
print(nth disc, A->B);
Move(n-1 discs, C,B,A);
print(nth disc, B->C);
Move(n-1 discs, A,B,C);
}
}
这将需要 O(3^n) 时间而不是 O(2^n) 时间,就像普通的河内塔问题一样。
面试官似乎对这个解决方案印象深刻。
第三轮:45分钟
1. 机器人可以前进 1 步或 2 步。找不到任何可能的方法来达到第 n 步(简单的 DP 问题)。
2.关于调度概念的问题,SJF调度如何预测cpu突发长度,指数平均等。
3. 面试官让我在用户空间实现自己的定时器服务。不允许使用系统计时器倒计时,只允许读取当前系统时间。
解决方案:创建一个高优先级的辅助进程 P,它对时间流有一定的了解(因为我们不能使用硬件定时器),因此它将充当任何需要定时器服务的进程的沙钟。
P 将进行以下操作:
t1=getSystemTime()
做虚拟操作(应该花费更少的时间)
t2=getSystemTime()
(t2-t1) 将是 P 的时间单位。每当任何进程需要对时间 t 进行倒计时时,它都会与 P 通信并请求它在时间 t 之后发送信号。 P 将 t 除以其时间单位并执行 t/(t2-t1) 次虚拟操作,然后通知请求进程该时间段已过。
面试官说这个解决方案很粗糙,但他似乎还是很满意。
第四轮(HR轮):15分钟
正常的 HR 问题,例如:您为什么想加入 Adobe,迄今为止您在职业生涯中遇到的最具挑战性的情况是什么,您如何看待 5 年后的自己等。
决赛结束后,公布成绩。我和我的 4 个同龄人被录用了!!!