Adobe面试题

2025年3月17日 | 阅读33分钟

关于公司:Adobe

Adobe Systems Incorporated,也称为Adobe,是一家美国跨国公司,从事计算机软件业务。Adobe的总部位于美国加利福尼亚州圣何塞,于2017年全球拥有17000名员工。Adobe由John Warnock和Charles Geschke于1982年12月创立。公司最初主要是为了开发和销售PostScript页面描述语言。公司提供各种创意软件产品和服务,供专业人士、应用程序开发者、企业和消费者使用。Adobe以Photoshop、Acrobat Reader、Portable Document Format (PDF)、Adobe Creative Suite和Adobe Creative Cloud而闻名。Adobe主要专注于三个领域:数字媒体、数字营销以及印刷和出版。Adobe是值得工作的优秀公司之一,并于2003年被评为美国第五佳公司。Adobe在2018年被Interbrand评为第51大全球品牌。

Adobe公司高管

首席执行官兼董事长:Shantanu Narayen

首席财务官:John F Murphy

首席技术官:Abhay Parasnis

Adobe招聘流程

Adobe的招聘流程是招聘流程中最困难的之一。Adobe非常谨慎地选拔候选人,经过大量的筛选以在所有候选人中选出最优秀的人才。Adobe的招聘流程也与其他公司不同,因为它需要进行5-6轮面试。以下是招聘流程的主要轮次。

  1. 在线笔试
  2. 小组讨论轮
  3. 多轮技术面试
  4. 总监轮
  5. HR轮

学术要求

  • 初中和高中成绩65%,本科成绩70%或CGPA 7。
  • 申请时无不及格科目。

第一轮:在线笔试


描述

第一轮将是线上测试,主要包含两个部分。第一部分是基础的思维能力和推理。第二部分包含基于C/C++/JAVA输出的MCQ问题,以及主观的编程题。此轮测试在Hackerrank平台上进行,候选人可使用任何首选语言(C、C++或Java)进行编码。此轮的第一部分将是整个招聘流程中最轻松的一轮,但需要快速才能通过。

第一轮测试模式

条款时间题目数量主题
能力倾向15 分钟15题数量推理
  • 算术代数
  • 时间和工作
  • 利润与亏损
  • 几何
  • 速度与距离
  • 百分比
推理部分30 min30题逻辑推理
  • 谜题
  • 数据解释
  • 血缘关系等。
技术(MCQ)+编程测试(主观)75-120分钟15-20题
  • C 语言
  • 数据结构
  • 位操作

A. 数量和推理部分

  • 招聘流程中的数量推理部分相对容易,但候选人需要基础扎实,并且必须具备良好的速度。没有倒扣分。
  • 分析部分包含一些棘手的题目,可能会花费更多时间,因此在解答这些部分时要小心。

为第一轮准备的带答案的示例思维能力题

思维能力面试题

1) 如果房间里的一个灯泡每9秒闪一次,那么在3/4小时内它会闪烁多少次?

  1. 301
  2. 300
  3. 250
  4. 401

答案:a

说明
灯泡每9秒闪烁一次。
3/4小时 = 3/4 * 60 = 45分钟
45分钟 = 45 * 60 = 2700秒
所以灯在3/4小时内会闪烁 = 2700/9 = 300次
但计数从第一次闪烁后开始,所以总闪烁次数 = 300+1=301


2) Arjun、Ram和Vivek现在的年龄比例是4:7:9。如果9年前,他们年龄之和是53,那么他们现在的年龄是多少?

  1. 16,28,36
  2. 8,20,28
  3. 20,35,45
  4. 以上都不是

答案:a

解释:Arjun、Ram和Vivek现在的年龄比例是4:7:9
设,Arjun现在的年龄 = 4x
Ram现在的年龄 = 7x
Vivek现在的年龄 = 9x
根据问题
(4x-9)+ (7x-9) + (9x-9) = 53
20x-27=53
X=4
所以Arjun现在的年龄= 16,Ram= 28,Vivek = 36


3) 如果一个办公室员工的平均年龄是40岁,并且有120名新员工加入公司,他们的平均年龄是32岁。因此,所有员工的平均年龄减少了4岁。那么公司现在有多少员工?

  1. 1200
  2. 120
  3. 360
  4. 240

答案:d

说明
设x为最初的总员工数
员工的初始平均年龄 = 40岁
(员工的总初始年龄)/x = 40
员工的总初始年龄 = 40x
120名员工的总年龄 = 32 * 120
根据问题:
平均年龄减少了4岁,因此
(40x + 32 * 120) / (x + 120) = (40 - 4)
(40x + 3840) = 36 * (x + 120)
4x = 4320 - 3840
X = 120
所以公司现在总共有员工 = 120 + 120 = 240


4) 找出能被88整除的最大的四位数?

  1. 9768
  2. 9988
  3. 9944
  4. 8888

答案:c

说明
最大的四位数 = 9999
9999 / 88 = 余数 = 55
所以新数字将是 = 9999 - 55 = 9944
它将能被88整除,因此最大的数字是9944


5) 计算前五个质数的和?

  1. 11
  2. 18
  3. 26
  4. 28

答案:d

说明
前五个质数的和 = (2+ 3+5+7+11) = 28


6) 'A'单独在2天内能完成1/4的工作。'B'单独在4天内能完成2/3的工作。如果三名工人一起工作,他们可以在3天内完成工作,那么'C'单独在2天内能完成多少工作?

  1. 1/12
  2. 1/8
  3. 1/16
  4. 1/20

答案:a

说明
设C一天的工作量 = x
A一天的工作量 = 1/8
B一天的工作量 = 1/6
根据问题
1/8 + 1/6 + x = 1/3
解方程
x = 1/24
如果x的
1天工作量 = 1/24
所以C两天的工作量 = 1/12


7) Ravi有一天从家出发晚了30分钟,但开车比平时慢25%,结果迟到了50分钟。Ravi通常需要多长时间才能从家到办公室?

  1. 20分钟
  2. 80分钟
  3. 60分钟
  4. 40 min

答案:c

说明
假设t是通常到达办公室的时间,通常时间和速度时间= t,速度= s
迟到时间和速度 25%较慢的速度 = 3/4s,时间= t+20
D = s * t
D = (3s/4) * (t+20)
s * t = (3s/4) * (t+20)
4t = 3t + 60
t = 60分钟。


8) 一位店主以20%的利润卖出一张桌子,价格为840卢比,另一张桌子以4%的亏损卖出,价格为960卢比。他的总利润或亏损是多少?

  1. 100/17% 利润
  2. 100/17% 亏损
  3. 20/3% 利润
  4. 以上都不是。

答案:a

说明
第一张桌子的成本价 = (100 * 840) / (100 + 20) = 700
第二张桌子的成本价 = (100 * 960) / (100 - 4) = 1000
桌子的总成本价 = 1000 + 700 = 1700
总销售价 = 840 + 960 = 1800
利润 = 销售价 - 成本价
利润 = 1800 - 1700 = 100
利润率 = (100 * 100) / 1700
利润率 = 100/17


9) 如果一个圆锥形帐篷能容纳10人。每个人必须有6平方米的空间站立,并有30立方米的空气呼吸。那么圆锥的高度是多少?

  1. 15米
  2. 37.5米
  3. 75米
  4. 150米

答案:30米

说明
如果,1人占用的空间 = 6平方米
10人占用的空间 = 60平方米
因此,圆锥形帐篷的底面积 = pi * r * r = 60
由于每个人需要空气呼吸 = 30立方米
10人需要空气呼吸 = 300立方米
所以,圆锥形帐篷的体积,(1/3) * pi * r * r * h = 600
20 * h = 600
h = 30米


10) A在10天内能完成一项工作,B在12天内能完成同样的工作,Ravi在15天内能完成。他们都一起开始工作,但A在2天后离开,B在工作完成前3天离开。计算工作完成的天数。

  1. 6 天
  2. 5天
  3. 9天
  4. 7天

答案:d

说明
完成的工作量由
A在10天,B在12天,C在15天,
总工作量 = (10, 12, 15) 的最小公倍数 = 60单位
所以A一天能做6单位工作,B能做5单位,C能做4单位
根据问题,设x天完成剩余工作,则
(6+5+4)*2 + (5+4)*(x-3) + (4*3) = 60单位
解方程后
30 + 9(x-3) + 12 = 60
X = 5天
所以总共需要的天数 = 5+2 = 7天。

推理题

1) 如果MADRAS可以编码为NBESBT,那么BOMBAY可以如何编码?

  1. CQOCBZ
  2. CPOCBZ
  3. CPNCBZ
  4. CPNCPX

答案:C

说明
M A D R A S <=========> N B E S B T
每个字母都等于其下一个字母,M对应N,A对应B,D对应E,依此类推。
因此
B O M B A Y 可以写成 C P N C B Z


2) 序列3, 4, 6, 9, 13,_______ 的下一项是什么?

  1. 16
  2. 15
  3. 18
  4. 17

答案:c

说明
在给定的序列中,3, (3+1=4), (4+2=6), (6+3=9), (9+4=13),所以 (13+5=18) 因此下一项是18


3) 如果w, x, y, z是整数。条件是表达式x-y-z是偶数,而表达式y-z-w是奇数。如果x是偶数,那么哪个一定成立?

  1. w必须是奇数
  2. y-z必须是奇数
  3. z必须是偶数
  4. z必须是奇数

答案:a

说明
因为x是偶数,所以x-y-z如果是偶数,那么y和z都必须是奇数;而y-z-w如果是奇数,那么w必须是奇数。


4) BXF, DVI, FTL, HRO,_____ 这个序列的下一项是什么?

  1. JPL
  2. KPL
  3. JOL
  4. 以上都不是

答案:d

说明
在给定的序列中
B X F, D V I, F T L, H R O
第一个字母:
B-C-D, D-E-F, F-G-H, H-I-J
第二个字母:
X-w-V, V-U-T, T-S-R, R-Q-P
第三个字母:
F-G-H-I, I-J-K-L, L-M-N-O, O-P-Q-R 所以下一项应该是JPR,所以答案是以上都不是。因此,序列的下一项是-JPR。


5) 如果在某种编码语言中,

i. Guda buka 意思是 清水
ii. Pin gola 意思是 阴天
iii. Pin saf buka 意思是 晴朗的蓝天
那么,以下哪个词的意思是BLUE?

  1. bUKA
  2. saf
  3. Guda
  4. Pin

答案:b

说明
根据第1、2、3条陈述,可以得出buka的意思是clear,pin的意思是sky,所以saf的意思是blue。


6) 如果Win与Competition相关,那么Invention与什么相关?

  1. Experiment (实验)
  2. Discovery (发现)
  3. Laboratory (实验室)
  4. Trial (尝试)

答案:a


7) Rahul对Akash说,“那个踢足球的男孩是我父亲妻子的女儿的两个兄弟中较小的一个。”那个踢足球的男孩与Rahul是什么关系?

  1. 儿子
  2. Brother
  3. 姐夫/妹夫
  4. Cousin

答案:b

说明
我父亲的妻子 = Rahul的母亲
我父亲妻子的女儿 = Rahul的姐姐
两个兄弟中较小的一个 = Rahul的弟弟。


8) 介绍Riya时,Sam说:“她是唯一一个我母亲唯一兄弟的唯一侄子的妻子。”Riya与Sam是什么关系?

  1. 妻子
  2. 嫂子/弟媳
  3. 妹妹
  4. 数据不足

答案:a

说明
我母亲唯一的兄弟 = Sam的叔叔
唯一侄子的妻子 = Sam的妻子
所以Riya是Sam的妻子。


9) 工程师:地图::砌砖工:? 找出这个词。

  1. 模板
  2. Mould (模具)
  3. Cement (水泥)
  4. 设计

答案:a


10) 从以下选项中找出 odd word (不相关的词)

  1. Steering wheel (方向盘)
  2. Tyre (轮胎)
  3. Car
  4. Engine (引擎)

答案:c

说明
在选项中,方向盘、轮胎和发动机都是汽车的一部分。


B: 示例技术MCQ

第一轮的第二部分是技术MCQ和编程部分。这一部分比较难。它需要对数据结构、C语言、位操作和算法的概念进行深入研究。这里有一些Adobe面试的示例题目及答案。

1) 以下代码的输出是什么

int main()
{
     int i;
     int arr[5] = {5};
     for (i = 0; i < 5; i++)
     printf("%d ", arr[i]);
     return 0;
}

  1. 0 0 0 0 0
  2. 5 0 0 0 0
  3. 5 5 5 5 5
  4. Error

答案:b


2) 在C语言中,参数总是_______

  1. 按引用传递
  2. 按值结果传递
  3. 按值传递
  4. 指针变量按引用传递,非指针变量按值传递

答案:c


3) 找出以下代码的输出

#include <stdio.h>
int main()
{
printf("%d", main);
return 0;
}

  1. 编译时错误
  2. main函数的地址
  3. 0
  4. 任意随机值

答案:b


4) 以下语句的用途是什么?

scanf ("%3s", str);

  1. 读取最多3个字符
  2. 从控制台读取3个字符
  3. 将字符串str按3的倍数取
  4. 以上都不是。

答案:a


5) 找出以下代码的输出。

char p[10];
char *s = "computer";
int length = strlen(s);
int i;
for (i = 0; i < length; i++)
p[i] = s[length - i];
printf("%s", p)

  1. retupmoc
  2. computer
  3. 空值
  4. 不打印任何输出

答案:d


6) 使用三个未标记的节点可以形成多少个二叉树?

  1. 1
  2. 4
  3. 6
  4. 5

答案:d


7) 具有3个节点的结构上不同的二叉树总数是多少?

  1. 10
  2. 5
  3. 168
  4. 245

答案:b

说明
结构上可能的树的数量 = !2N/ (! N * ! (N+1))
其中 n = 节点数,这里 N = 3,因此
答案是5。


8) 哪种排序算法可以用来以最小的时间复杂度对随机链表进行排序?

  1. 快速排序
  2. 合并排序
  3. 插入排序
  4. 堆排序

答案:b


9) 计算以下代码的输出

#include<stdio.h>
struct st
{
      int x;
      static int y;
};
int main()
{
      printf("%d", sizeof(struct st));
      return 0;
}

  1. 8
  2. 4
  3. 编译时错误
  4. 运行时错误

答案:c

说明
在C语言中,结构体和联合体中不能有静态成员,因此该程序将产生编译时错误。


10) 计算以下代码的输出

#include <stdio.h>
int main()
{
   int arr[] = {5, 8, 10, 12,18};
   int *p = arr;
   ++*p;
   p += 3;
   printf("%d", *p);
   return 0;
}

  1. 10
  2. 12
  3. 18
  4. 无输出。

答案:b


编程题

这一部分是编程测试,候选人需要用任何首选语言(C/C++/Java)为给定的问题编写代码。以下是一些用于练习的编程题。

1) 编写代码反转链表?

输出

Input linked list
68 30 14 20 
Reversed Linked list 
20 14 30 68 

2) 编写代码,用最少次数的加法来计算两个数的乘积。

输出

The product of 10 and 20: 200

3) 编写一个程序来交换两个整数指针?

输出

Before swap 20 30
 After swap 30 20

4) 编写一个程序来计算斐波那契数列的第n项?

输出

The series is 0 1 1 2 3 5 8 13
The nth term is 13

5) 编写一个程序来计算数字中所有Set Bits的总数?

输出

Total bits are=4 Total zero bits are=0 Total one's bits are= 4

6) 编写一个算法,以log n的复杂度计算X^N的输出。

输出

The output for x^n, where x=6, n=3, 216

7) 编写代码检查二叉树是否为BST树?

输出

Input Tree is 
 1  3  4  7  8  9  10
Tree is BST or not: true
Tree is BST or not: true
Input Tree is 
 1  3  4  20  7  8  9  10
Tree is BST or not: false
Tree is BST or not: false

8) 编写代码找出列表中从末尾开始的第n个元素?

输出

18 20 30 15 10 16 
4th node from end is: 30

技术轮面试题


这是Adobe面试流程的第三轮主要环节。它包含多个环节。在此轮中,候选人将接受技术技能的考核。如果候选人通过一轮,他/她就可以进入下一轮。

技术第一轮

1) typedef和#define有什么区别?

typedef和#define之间的主要区别如下

  1. typedef用于定义类型或为类型赋予新名称,而#define是预处理器指令,用于定义宏。
  2. typedef为新数据类型提供了实际定义,而#define仅用于在它被使用的地方复制粘贴值定义。
  3. typedef是编译器认识的,而#define仅仅是预处理器认识的。

示例

输出

10
Andhra Pradesh

2) 为什么我们使用sprintf()函数?

sprintf()是一个C库函数,称为“字符串打印”。sprintf函数用于将格式化数据输出保存为字符串。

语法

示例

输出

multiplication of 10 and 5 is 2

3) 如何区分char a[]= "String"和char*a = "String"?

陈述

  1. Char a[ ]= "computer";
  2. char *a= "computer";

以上两句的区别在于,第一句会创建一个包含9个元素的数组,并自动添加空指针,数组a的大小为9。

但第二句会创建一个指针变量。我们不能对这个指针变量执行任何数组操作,因为它存储在只读模式下。

示例

输出

9
Cnmputer

示例 2


4) 解释数据断点?在哪里可以使用它?

数据断点是C++中一个强大的功能,它允许我们在特定内存位置存储的值发生变化时停止执行。数据断点可以用来解决内存损坏问题。


5) 区分new和malloc()?

new和malloc()都用于动态内存分配。但new和malloc之间存在各种差异,如下所示,

  • new是C语言中的一个运算符,而malloc()是内存分配的函数。
  • new运算符调用构造函数,而malloc()不调用构造函数。
  • new运算符从“自由存储区”分配内存,而malloc()函数从堆中分配内存。
  • 执行失败时,new运算符抛出异常,而malloc()返回Null。
  • new运算符不需要sizeof()运算符,malloc()函数需要sizeof()运算符来确定内存大小。

6) 区分进程和线程?

以下是进程和线程之间的基本区别

  • 进程是程序的执行,而线程是轻量级进程。
  • 进程不共享资源,如内存,而线程可以共享资源。
  • 进程的上下文切换时间更长,而线程的上下文切换时间更短。
  • 在通信方面,进程的效率低于线程。

7) C++的简写属性是什么?它的作用是什么?

C++提供了简写属性,使程序员能够以更简洁的方式使用赋值运算符。

示例

x=x+5; 可以写成 x+=5;

x=x-10; 可以写成 x-=10;


8) 你对函数原型声明和定义有什么理解?

函数原型声明:函数原型声明语句提供了关于函数以下信息

  1. 它告诉函数的符号名称。
  2. 关于函数返回类型的信息。
  3. 关于作为输入传递的参数及其数据类型的信息。

示例:

其中add是函数名,a, b, c是传递的参数。

函数定义:函数定义是函数的实际源代码。函数定义提供了函数实际做什么的信息。

示例


9) 你对条件运算符有什么理解?

  • 条件运算符是具有三个操作数的 ternary 运算符,用作 if-else 语句的简写。
  • 如果条件为真,条件运算符返回第一个表达式,如果条件为假,则返回第二个表达式。

语法

示例


10) C语言中的volatile关键字是什么?

volatile关键字是声明变量时使用的限定符。

它告知编译器变量的值可以随时更改,即使它看起来没有被修改。

volatile关键字用于将变量声明为 volatile 变量。它可以在数据类型之前或之后使用。

语法


11) 你对OS有什么理解?用最简单的方式解释。

  • 操作系统是一个程序,它是用户和硬件之间的接口。
  • 在引导程序加载后,它管理计算机中的所有其他程序。
  • OS是计算机或移动设备的支持。
  • 操作系统的例子有UNIX、LINUX、MS-Windows、MAC-OS等。

12) 为什么我们在C和C++中使用指针?

指针是存储C和C++中另一变量地址的变量。

以下是我们在C和C++中使用指针的主要原因

  • 指针可用于动态内存分配。
  • 指针有助于执行数组算术和访问数组元素。
  • 指针有助于创建API。
  • 指针用于数据结构的实现。
  • 指针有利于按引用传递。

13) 区分按指针调用和按引用调用?

在C++语言中,我们可以通过引用或指针将参数传递给函数,这两种都是正确的方法,并且非常相似,但它们之间的基本区别是

  • 我们可以直接将指针赋值为null指针,但对引用则不能。
  • 我们可以重新赋值指针,但引用不能被重新赋值。

14) 你对calloc()和malloc()有什么理解?

在C语言中,calloc()和malloc()是库函数,两者都用于动态内存分配。这意味着它根据需要从堆部分在运行时分配内存。

malloc(): malloc()函数是一个库函数,它分配一块请求的内存并返回一个void指针,该指针可以转换为任何返回类型。如果内存不足,它将返回null值。

语法

calloc(): calloc()函数也是一个库函数,它分配请求大小的多个内存块。它首先将内存初始化为零,并在内存不足时返回NULL。

语法


15) 解释术语“虚拟机”?

虚拟机是一个软件程序,它像一台独立的计算机一样运行。它的功能与主计算机相同,并且能够运行应用程序和其他程序。虚拟机,称为客户机,在称为主机的主机内创建。根据用途,有两种类型的虚拟机。

  1. 系统虚拟机
  2. 进程虚拟机

16) 你对同步有什么理解?

同步是指同时执行两件事的过程。

同步有两种类型

  • 进程或线程同步
  • 数据同步

进程同步:进程/线程同步是一种机制,用于控制两个并发线程之间对共享资源的访问。它确保两个并发线程不会同时共享同一资源。同步处理死锁、饥饿、忙等待等问题。

数据同步:数据同步是一种确保两个设备之间数据完整性的技术。通过数据同步,它可以在不同位置保持单个数据的多个副本。它包括文件同步、日志记录、RAID等。


17) 解释术语互斥锁?读者-写者问题是什么?

互斥锁

  • 在多线程中,互斥锁(互斥对象)是一个程序对象,它为线程提供锁定机制。
  • 互斥锁确保了两个或多个线程之间正确的线程同步。一次只有一个线程可以执行一个程序或资源。

读者-写者问题

在操作系统中,对于一个特定的共享数据区域,存在一个称为读者-写者问题的情况,该情况涉及

  • 任何数量的读者都可以从共享区域读取,但一次只有一个写者可以写入。
  • 当一个写者写入该区域时,没有其他进程可以访问该区域。
  • 如果该共享区域中有非零个读者,则写者不能在那里写入。

这个问题主要发生在并发或多线程中。


18) 为什么我们使用void关键字?

void关键字可以用于两种目的

函数参数:当我们将void用作函数参数时,表示函数不接受任何值。

示例

函数返回类型:当我们将void用作函数返回类型时,表示它不返回任何内容。

示例

void关键字也可以与指针一起使用,这使其更加强大,因为当void与指针一起使用时,它被称为通用类型,它可以保存任何类型的地址。


19) 解释出口控制循环?

出口控制循环是一种循环,它首先执行指令,然后检查条件。当我们使用出口控制循环时,即使条件为假,至少会执行一次。do-while循环是出口控制循环的一个例子。


20) 什么是DNS服务器?

DNS服务器是DNS(域名系统)基础设施的主要组成部分。它是一台计算机服务器,存储和管理IP地址及其相应主机名的数据库。

DNS服务器也称为名称服务器,用于将域名映射到相应的IP地址。

一个域名可以有多个IP,这意味着IP地址会随时间变化。

Adobe Interview Questions

技术第二轮

1) TCP/IP模型中有哪些不同的层?解释每层的协议?

TCP/IP模型称为传输控制协议/互联网协议。TCP/IP模型是OSI模型的实用且简洁的版本。当前的網絡架构依赖于TCP/IP模型。它主要包含四个层

  • 应用层
  • 传输层/主机到主机层
  • 网络层
  • 链路层/网络接入层

1. 链路层

负责通过网络传输数据的物理流。它包含光纤、同轴电缆或双绞线等硬件设备。在此层,数据以比特和帧的形式传输。

此级别使用的协议是Ethernet、令牌环等。

2. Internet层

Internet层是链路层的上一层。此层将数据转换为数据包,称为IP数据报,并将这些数据报通过网络发送到主机。这些数据报包含主机和目标地址,通过它们可以在网络中转发。

此级别主要使用的协议是

  • IP(互联网协议):此协议负责使用数据包头部中包含的地址将数据包从源主机转发到目标主机。IP有两个主要版本IPv4和IPv6。
  • ICMP(互联网控制消息协议):此协议主要负责通知网络中的问题。
  • ARP(地址解析协议):ARP协议是TCP/IP模型中的一个重要协议,它负责将IPv4地址解析为物理地址。

3. 传输层:这是TCP/IP模型的第三层,负责源主机和目标主机之间的通信以及无错误的数据传输。

此层主要包含两个协议

TCP(传输控制协议):TCP是一种可靠的协议,用于源主机和目标主机之间的无错误通信。它是一种面向连接的协议。

UDP(用户数据报协议):与TCP协议相比,此协议不可靠,我们可以使用此协议不需要可靠通信。它是一种无连接协议。

4. 应用层:这是TCP/IP模型的最高层。它描述了应用协议并提供节点到节点的通信。

此层包含各种高级协议,它们是

  • HTTP和HTTPS(超文本传输协议)
  • FTP(文件传输协议)
  • SSH(安全外壳)
  • TFTP(简单文件传输协议)
  • SMTP(简单邮件传输协议)
  • DHCP(动态主机配置协议)

2) 解释调用函数时堆栈的工作原理?堆栈溢出何时发生?

堆栈是RAM的一个特定区域,与堆类似。但堆栈用于存储函数内部使用的局部变量、参数和返回值,并且堆栈会自动存储和释放内存。

当我们调用函数时,堆栈执行以下步骤

  • 推送返回变量的空间。
  • 将参数推入堆栈。
  • 推送函数的局部变量。

当我们调用函数时,堆栈会添加一个堆栈帧,其中包含实际参数、局部变量、返回地址等空间。该堆栈帧在函数被调用期间一直存在于活动帧中,一旦执行完成,堆栈就会从堆栈中移除该堆栈帧。

堆栈溢出:正如我们所知,堆栈在执行后会释放内存并清空空间,但仍然存在一种情况,即当堆栈空间完全用完,没有更多空间来保存变量时,这就称为堆栈溢出。它发生的原因是堆栈的空间大小也是有限的,并且在执行时,如果分配的内存超过可用内存,就会发生溢出,程序就会崩溃。堆栈溢出的一些示例如下

  • 无限递归的使用
  • 非常大的堆栈变量的使用
  • 非常深的递归的使用

3) 解释声明:int* const p 和 const int* const p 的含义?

int * const p:通过这样声明指针,意味着我们将指针变量p声明为常量,不能更改。我们不能更改它所持有的地址,或者它不能指向其他变量。如果我们尝试更改p的地址,它将产生编译时错误。

const int * const p:通过这样声明指针,意味着我们既不能更改指针的地址,也不能更改该地址处的值。如果我们尝试这样做,它将产生编译时错误。


4) C++中的默认函数是什么?

C++提供了六个默认成员函数,如下所示

  • 默认构造函数
  • 析构函数
  • 复制构造函数
  • 复制赋值运算符
  • 移动构造函数
  • 移动赋值运算符

5) 用于字典的数据结构是什么?

要实现字典,使用哪种数据结构取决于我们的需求,以下是一些可用于字典实现的数据结构。

哈希表:如果我们想要一个简单的字典,没有前缀匹配或最近邻搜索选项,那么我们可以使用哈希或哈希表来实现字典。

Trie:如果我们想要添加前缀和快速查找,它可能是一个不错的选择。但是,它比其他数据结构占用的空间更多。

三元搜索树:如果我们想要Trie的所有功能但又不想占用太多空间,那么我们可以使用三元搜索树。

BK-树:如果我们想要拼写检查器、查找相似单词等功能,BK-树是一种非常好的数据结构。


6) 如何从一个包含重复单词的字符串中找到唯一的单词?

我们可以使用HashMap、Set和Regex从字符串中找到唯一的单词。

候选人也可能被问到以下问题

  1. 实现蛇梯棋游戏,并使用动态规划找出从1到100的最少步数。
  2. 为一个DFA建模一个数据结构,该DFA以事件作为参数并执行期望的动作。
  3. 解决三个标签错误的罐子问题。
  4. 如何比较两个二叉树?
  5. 如何证明树中内部节点的数量比叶子节点少一个?

技术第三轮或总监轮


这一轮是一个具有挑战性的环节,因为在这轮中,经理会根据你的项目提问,所以候选人必须对他们做过的项目有深入的了解,并且要解决一些难题。

1) 编写汉诺塔的算法?

汉诺塔是一个非常流行的数学谜题。在这个谜题中,我们有三个圆盘和三个杆。圆盘按升序堆叠在第一个杆上。我们需要以相同的顺序将圆盘从第一个杆转移到第三个杆。

也有一些规则

  • 一次只能移动一个圆盘
  • 只能移动最上面的圆盘
  • 圆盘必须始终按升序排列,即一个大圆盘不能放在小圆盘上。

算法

假设有三个塔:源塔(Beg)、辅助塔(Aux)和目标塔(Dest),以及两个圆盘,其中n是较大的圆盘,n-1是较小的圆盘。

开始

步骤1:将n-1个圆盘从源塔Beg移动到辅助塔Aux

步骤2:将n个圆盘从源塔Beg移动到目标塔End

步骤3:将n-1个圆盘从辅助塔Aux移动到目标塔C。


2) 编写代码查找链表中的环?如何移除这个环?

输出

Loop is occurred
Linked List after removing loop 
40 15 12 10 4

3) 如何设计Excel电子表格的数据结构?

我们可以通过使用以下方式设计Excel电子表格

  • 二维数组(但它会占用大量空间)
  • 稀疏矩阵
  • Map 等。

4) 解释OS中的内存保护。

内存保护是一种机制,用于控制计算机中内存的未经授权的访问。内存保护可防止进程访问未分配的内存。在进程使用内存地址之前,会先检查该地址是否已分配。

使用LBR和UBR两个寄存器来实现内存保护。


5) OS中的虚拟内存是什么?

虚拟内存是操作系统的内存管理技术。当主内存没有足够的空间来执行代码时,虚拟内存为程序提供额外的空间。它将数据暂时从RAM转移到磁盘存储,利用硬盘的非活动内存,这被称为虚拟内存。


6) 编写一个算法将一个元素插入到排序好的链表中?

假设链表按升序排序,那么其算法如下。设输入节点为13,并赋值为n

假设输入链表为:

1) 如果给定的链表为空,则将节点分配为head并返回。

2) 如果节点n的值小于head节点的值,则在开头插入节点并将其设为head。

3) 在循环中,查找输入节点应插入的合适节点。要搜索合适的节点,从head开始,一直移动,直到找到一个值大于输入节点的值的节点x(假设为15)。x之前的节点将是合适的节点(11)。

4) 在步骤3中找到的合适节点(11)之后插入节点(13)。

插入后


7) 查找和为给定数字的元素对?

输出

Pair element found at position 0 and 4
 Pair element found at position 1 and 7
 Pair element found at position 2 and 5

候选人也可能被问到以下问题

  1. 如果有一个包含1到n数字的数组。如果我们用另一个数字替换1个数字。在O(N)时间内找出这两个数字。
  2. 如果在一个婚礼上有n个人,请将这些人分成两组,使得每个人都互相认识?
  3. 实现蛇梯棋游戏,并使用动态规划找出从1到100的最少步数。
  4. 一个城市有n栋房子,都在同一排。我们可以用三种颜色(R、G、B)中的任意一种给房子着色。每栋房子着色的成本都按颜色给出。相邻的房子不能有相同的颜色。打印为所有房子着色所需的最小成本。
  5. 如果给定链表和一个数字k。将链表反转成k个一组。

HR轮


HR轮将是整个招聘流程的最后一轮。与以上所有轮次相比,这一轮会比较轻松,因为在本轮中,面试官只是想与候选人进行互动。在本轮中,面试官将根据沟通技巧和软技能来评判候选人。

1) 简要介绍一下你自己?

这个问题是一个非常常见的问题,在大多数面试中都会被问到。这个问题的答案应该如下。

早上/下午/晚上好,先生/女士,我很高兴有机会介绍自己。我叫Anamika Singh,来自Udaipur。我已在Noida工程与技术学院完成了我的计算机科学工程专业的B.Tech学位,并在Saint John Inter College完成了我的中小学教育。

如果我说我的家庭成员,那么包括我在内,我的家庭有5个成员。我的父亲是一名政府教师,我的母亲是家庭主妇,我有一个弟弟,他上个月刚完成了高中学业。

我对C、C++和Java等编程语言有很好的了解。我还用这些技术做了一些大学项目。

我是一个非常有自信、聪明和适应性强的人。我可以在任何环境中适应自己,并能处理任何类型的情况。

我的爱好是打羽毛球、跳舞、绘画和上网。

谢谢。


2) 你为什么想加入Adobe?

面试官问这个问题是为了检查你是否真的想加入,或者你加入这家公司的动机是什么。你应该这样回答这个问题

先生,Adobe是一家很棒的公司,业务遍及全球。每个人都想在Adobe工作。这是一个很棒的工作场所。我的技术技能也符合公司的要求。我可以通过展示我的技术技能为公司的成长做出贡献,同时也促进我自己的职业发展。


3) 你有哪些技能,为什么我们应该雇佣你?

通过这个问题,面试官想检查你对自己的技能了解有多深,以及你如何看待自己与众不同。答案应该是

我对C、C++、Java和数据结构有良好的理论和实践知识。我用这些技术创建了各种项目。我可以在更短的时间内高效地解决编码谜题。


4) 你的梦想公司是哪家?

通过这个问题,面试官想检查你的热情。这家公司是你的梦想公司,还是你加入这家公司是因为没有其他选择。所以候选人应该谨慎回答这个问题。

要回答这个问题,候选人不应该提及其他公司的名称,而是可以选择公司的特质。

示例

我的梦想工作是那种致力于创新,并为世界提供能改变人们生活方式的产品的工作。我对这份工作感到兴奋。据我所知,Adobe是一家信奉创新和创造力的公司。


5) 谈谈你的家庭背景?

这是一个普遍且轻松的问题,你不需要想太多就能回答。要回答这个问题,你需要说明你有多少家庭成员,他们做什么。

示例

我的家庭有五口人,包括我在内。我的父亲Jay Prakash先生是商人,经营电子设备生意。我的母亲Sunita女士是一位出色的家庭主妇。我有两个哥哥,他们都在HCL Technologies担任软件开发人员。


6) 十年后你想在哪里看到自己?

示例

十年后,我希望自己能在这家公司担任一个有责任的职位,能够承担公司的大任。我希望在每一个层面都能不断学习,这将提升我的技能,并有助于公司的发展。


7) 你独特而与众不同的品质是什么,这使你成为公司最适合的员工?

这个问题与“为什么我应该雇佣你”相同,答案应该参考问题3。


8) 你认为自己是一个目标导向的人吗?

是的,我是一个目标导向的人,我有一些人生目标,我想尽快实现。我定期更新我的目标列表,看看我取得了什么,还剩下什么。


9) 你最大的优点和缺点是什么?

我最大的优点是我自我激励的性格。有了这个,我就可以面对任何挑战。

我最大的缺点是我的情绪化。当看到有人处于不利境地时,我很容易受到影响。