个性化阅读
专注于IT技术分析

热门!Adobe精品面试题最新汇总在这里啦

本文概述

关于公司:Adobe

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

Adobe的关键人物:

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

首席财务官:John F Murphy

CTO:Abhay Parasn​​is

Adobe招聘流程

Adobe招聘过程是困难的招聘过程之一。 Adobe非常仔细地选择候选人, 并进行了大量筛选以选择所有候选人中的最佳人才。 Adobe的招聘过程也与其他公司不同, 因为面试需要5到6轮。以下是招聘过程的主要步骤。

  1. 在线书面回合
  2. 小组讨论
  3. 多轮技术面试
  4. 导演轮
  5. 人力资源回合

学术标准:

  • X和XII中65%, 毕业或CGPA 7中70%。
  • 申请时没有积压。

第一轮:网上书面回合


描述

第一轮将是在线考试, 主要包括两个部分。第一部分将基于基本能力和推理。第二部分将包含基于C / C ++ / JAVA输出的MCQ问题和主观的编码问题。此回合是在Hackerrank平台上组织的, 候选人可以在其中使用任何首选语言(C, C ++或Java)进行编码。此轮的第一部分将是完成招聘过程中最舒适的一轮, 但需要有一个良好的速度来完成。

第一轮测试图案

Sections 持续时间 问题数 Topics
15 min 15个问题 量化智能算术代数时间和工作盈亏几何速度和距离百分比
30分钟 30个问题 逻辑推理难题数据解释血缘关系等
75-120 min 15-20 Questions C语言数据结构位处理

A.定量和推理科

  • 招聘过程的量化能力部分相对容易, 但是候选人需要具备基本的知识并且必须具有良好的速度。没有负面的标记。
  • 分析部分包含一些棘手的问题, 这些问题可能会占用更多时间, 因此在尝试这些部分时请务必小心。

样本能力倾向问题及其答案为第一轮做准备:

能力面试问题

1)如果房间里的灯泡每9秒钟闪烁一次, 它在一个小时的¾中会闪烁多少次?

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

显示答案

答:一个

说明:

灯泡每9秒闪烁一次。

¾小时=¾* 60 = 45分钟

45分钟= 45 * 60 = 2700秒

因此, 光将在¾小时内闪烁= 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. 以上都不是

显示答案

答:一个

说明:Arjun, Ram和Vivek的年龄比例为4:7:9

令, Arjun的当前年龄= 4倍

拉姆的现龄= 7倍

Vivek的当前年龄= 9倍

根据问题

(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

员工初始总年龄= 40倍

120名员工的总年龄= 32 * 120

根据问题:

平均年龄减少了4岁, 因此

(40x + 32 * 120)/(x + 120)=(40-4)

(40x + 3840)= 36 *(x + 120)

4倍= 4320-3840

X = 120

因此, 现在公司的员工总数= 120 + 120 = 240


4)找到最大的4位数字, 该数字可以被88整除吗?

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

显示答案

答案:c

说明:

最大的4位数字= 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

显示答案

答:一个

说明:

让我们用C = x的一天来工作

A的1天工作= 1/8

B的1天工作= 1/6

根据问题:

1/8 + 1/6 + x = 1/3

通过求解方程式:

x = 1/24

如果x是

1天工作= 1/24

因此, 两天的工作量为c = 1/12


7)有一天, 拉维开始从家中提早30分钟到达家中, 并迟到了50分钟才到达办公室, 同时开车速度比平时慢了25%。拉维通常需要多少时间才能在家中到达办公室?

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

显示答案

答案:c

说明:

假设t是从家到办公室的通常时间, 通常时间和速度时间= t, 速度= s

延迟时间和速度较慢速度降低25%= 3 / 4s, 时间= t + 20

D = s * t

D =(3秒/ 4)*(t + 20)

S * t =(3s / 4)*(t + 20)

4吨= 3吨+ 60

t = 60分钟。


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

  1. 收益提高100/17%
  2. 损失100/17%
  3. 增益20/3%
  4. 没有一个

显示答案

答:一个

说明:

1张桌子的成本价格=(100 * 840)/(100 + 20)= 700

2张桌子的成本价格=(100 * 960)/(100-4)= 1000

表的总成本价格= 1000 + 700 = 1700

总售价= 840 + 960 = 1800

收益=售价-成本价

增益= 1800-1700 = 100

增益%=(100 * 100)/ 1700

增益%= 100/17


9)如果在圆锥形帐篷中, 可以容纳10人。每个人必须拥有6平方米的空间站立和呼吸30立方米的空气。圆锥的高度是多少?

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

显示答案

答案:30m

说明:

如果, 1人占用的空间= 6平方米

10人占用的空间= 60平方米。米

因此, 圆锥形帐篷的底面积= pi * r * r = 60

因为每个人都需要呼吸空气= 30立方米

10个人需要空气到广度= 300立方米

因此, 圆锥形帐篷的体积(1/3)* pi * r * r * h = 600

20 * h = 600

h = 30m


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)的L.C.M = 60单位

因此, A可以在1天内完成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. 重庆市
  2. CPOCBZ
  3. 中国人民银行
  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. 我一定很奇怪
  2. y-z必须是奇数
  3. z必须是偶数
  4. z必须是奇数

显示答案

答:一个

说明:

由于x是偶数, 因此x-y-z必须为偶数, 即使y和z都为奇数, 而y-z-w必须为奇数, 而w必须为奇数


4)BXF, DVI, FTL, HRO, _____系列的下一个术语是什么

  1. 联合警察
  2. KPL
  3. 良好
  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

2个字母

X-W-V, V-U-T, T-S-R, R-Q-P

3个字母

F-G-H-I, I-J-K-1, L-M-N-O, O-P-Q-R所以下一项应该是JPR, 所以答案都不是, 因此下一个系列是-JPR


5)如果使用某种代码语言,

一世。 Guda buka意味着清澈的水

ii。 Pin gola意味着阴云密布的天空

iii。 Pin saf buka意味着湛蓝的天空

那么, 以下哪个词表示BLUE?

  1. 开门
  2. 一样的
  3. Pin

显示答案

答案:b

说明:

通过1和2和3陈述, 发现buka表示晴朗, pin表示天空, 因此saf表示蓝色。


6)如果胜利与竞争有关, 那么发明与之有关。

  1. 实验
  2. 发现
  3. 实验室
  4. 试用版

显示答案

答:一个


7)拉胡尔对阿卡什说:”那个踢足球的男孩是我父亲妻子的女儿的两个兄弟中的较小者。”这个踢足球的男孩和拉胡尔有什么关系?

  1. 他的
  2. 哥哥
  3. 长者的意思是铁则
  4. 表姐

显示答案

答案:b

说明:

我父亲的妻子=拉胡尔的母亲

我父亲妻子的女儿=拉胡尔的姐姐

两兄弟中的小者=拉胡尔的b兄弟。


8)山姆介绍里娅后说:”她是我母亲唯一兄弟的唯一侄子的妻子。” Riya与Sam有何关系?

  1. 妻子
  2. 嫂子
  3. 妹妹
  4. 资料不足

显示答案

答:一个

说明:

我母亲的唯一兄弟=山姆的叔叔

唯一侄子的妻子=山姆的妻子

因此, Riya是Sams的妻子。


9)工程师:Map :: Bricklayer :?找到这个词。

  1. 模板
  2. 模子
  3. 水泥
  4. 设计

显示答案

答:一个


10)从以下选项中找出奇数词

  1. 方向盘
  2. 他们的
  3. 汽车
  4. 发动机

显示答案

答案:c

说明:

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


B:技术MCQ示例

第一轮的第二部分是技术MCQ和编码部分。这部分很难破解。它需要彻底研究数据结构, C, 位操作和算法的概念。有一些样本问题可供Adobe面试, 并附有答案。

1)以下内容的输出是什么

int main()

{

你我;

int arr [5] = {5};

对于(i = 0; i <5; i ++)

printf(“%d”, arr [i]);

返回0;

}

  1. 0 0 0 0 0
  2. 5 0 0 0 0
  3. 5 5 5 5 5
  4. 错误

显示答案

答案:b


2)在C语言中, 参数始终为_______

  1. 通过参考
  2. 通过值结果
  3. 价值传递
  4. 指针变量通过引用传递, 非指针变量通过值传递

显示答案

答案:c


3)查找以下代码的输出

#include <stdio.h>

int main()

{

printf(“%d”, main);

返回0;

}

  1. 编译时间错误
  2. 主要功能地址
  3. 0
  4. 任何随机值

显示答案

答案:b


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

scanf(“%3s”, str);

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

显示答案

答:一个


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

字符p [10];

char * s =”计算机”;

int length = strlen(s);

你我;

对于(i = 0; i <length; i ++)

p [i] = s [length-i];

printf(“%s”, p)

  1. retupmoc
  2. 电脑
  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>

结构体

{

int x;

静态整数

};

int main()

{

printf(“%d”, sizeof(struct st));

返回0;

}

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

显示答案

答案:c

说明:

在C语言中, 我们不能在struct和unions类型内包含静态成员, 因此此程序将生成编译时错误。


10)计算以下代码的输出

#include <stdio.h>

int main()

{

int arr [] = {5, 8, 10, 12, 18};

INT * P = ARR;

++ * p;

p + = 3;

printf(“%d”, * p);

返回0;

}

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

显示答案

答案:b


编码问题

这部分是一轮编码, 其中应试者需要使用任何首选语言(C / C ++ / Java)为给定问题编写代码。下面给出一些编码问题以供练习。

1)编写代码以反向链接列表?

#include<stdio.h> 
#include<stdlib.h> 
struct Node 
{ 
	int data; 
	struct Node* next; 
}; 

/* Function for reversing the linked list */
static void reverseList(struct Node** head_ref) 
{ 
	struct Node* t2 = NULL; 
	struct Node* start = *head_ref; 
	struct Node* t1 = NULL; 
	while (start != NULL) 
	{ 
	
		t1 = start->next; 
		start->next = t2; 
		t2 = start; 
		start = t1; 
	} 
	*head_ref = t2; 
} 
void newNode(struct Node** head_ref, int new_data) 
{ 
	struct Node* new_node = 
			(struct Node*) malloc(sizeof(struct Node));		 
	new_node->data = new_data; 
	new_node->next = (*head_ref);	 
	(*head_ref) = new_node; 
} 

/* Function to print linked list */
void printList(struct Node *head) 
{ 
	struct Node *temp = head; 
	while(temp != NULL) 
	{ 
		printf("%d ", temp->data);	 
		temp = temp->next; 
	} 
}	 


int main() 
{ 

	struct Node* head = NULL; 
	
	newNode(&head, 20); 
	newNode(&head, 14); 
	newNode(&head, 30); 
	newNode(&head, 68);	 
	
	printf("Input linked list\n"); 
	printList(head);	 
	reverseList(&head);					 
	printf("\nReversed Linked list \n"); 
	printList(head);	 

}

输出

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

2)编写一个代码, 使用最小的加法数将两个数字相乘。

#include<stdio.h>
 
int main()
{
      int product=0, x, y, n;
      x=10;
      y= 20; 
     
      for(n = 0; n < y; n++)
      {
            product = product + x;
      }
      printf("\n The product of %d and %d: %d\n", x, y, product);
      return 0;
}
}

输出

The product of 10 and 20: 200

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

#include<stdio.h>
               int main()
                {
                    int *a, *b, *temp, x=20, y=30; 
    	     a=&x;
    	     b=&y;
    	  printf("Before swap %d %d", *a, *b); 
    
      	 *temp= *a;
      	 *a=*b;
       	*b= *temp; 
  printf("\n After swap %d %d", *a, *b); 
  	  return 0;
}

输出

Before swap 20 30
 After swap 30 20

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

#include<stdio.h> 
int fun(int n) 
{ 
if (n <= 1) 
return n; 
else
return fun(n-1) + fun(n-2); 
} 
int main(){
    int n1=0, n2=1, n3=0, n=7; 
    printf("The series is %d %d", n1, n2);
    for(int i=2; i<=n; i++){
        n3=n1+n2;
        printf(" %d", n3);
        n1=n2;
        n2=n3;
        
    }
    printf("\nThe nth term is %d", fun(n));
}

输出

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

5)编写一个程序来计算一个数字中的总置位数?

#include <stdio.h>

int main() {
int n=15, count_zerobit= 0, count_onebit=0, total_bits=0; 
	
while(n>0){

if(n%2==0)

count_zerobit=count_zerobit+1;
else
count_onebit=count_onebit+1;
n=n>>1; 
	}	
total_bits=count_onebit+count_zerobit; 
printf("Total bits are=%d Total zero bits are=%d Total one's bits are= %d", total_bits, count_zerobit, count_onebit); 
}

输出

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

6)编写算法来计算X ^ N的输出, 其复杂度为log n。

#include<stdio.h>
int pow(int x, int n) 
{ 
    int y; 
    if( n == 0) 
        return 1; 
    y = pow(x, n/2); 
    if (n%2 == 0) 
        return y*y; 
    else
        return x*y*y; 
} 
int main() 
{ 
    int x = 6; 
    int n = 3; 
  
    printf("The output for x^n, where x=%d, n=%d, %d", x, n, pow(x, n)); 
    return 0; 
}

输出

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

7)编写代码以检查二进制树是否是BST树?

public class CheckBST {
	public static Node prevNode = null;
//Method1:
	public boolean isBST1(Node root) {
		if (root != null) {
			if (!isBST1(root.left))
				return false;
			if (prevNode != null && prevNode.data >= root.data) {
				return false;
			}
			prevNode = root;
			return isBST1(root.right);
		}
		return true;
	}

	//method 2
	
	public boolean isBST2(Node root, int min, int max) {
		if (root != null) {
			if (root.data > max || root.data < min) {
				return false;
			}
			return isBST2(root.left, min, root.data)
					&& isBST2(root.right, root.data, max);
		} else {
			return true;
		}
	}

	public void inorder(Node root) {
		if (root != null) {
			inorder(root.left);
			System.out.print("  " + root.data);
			inorder(root.right);
		}
	}

	public static void main(String args[]) {
		CheckBST cb = new CheckBST();
		Node root = new Node(7);
		root.left = new Node(3);
		root.right = new Node(9);
		root.left.left = new Node(1);
		root.left.right = new Node(4);
		root.right.left = new Node(8);
		root.right.right = new Node(10);
		System.out.println("Input Tree is ");
		cb.inorder(root);
		System.out.println();
		System.out.println("Tree is BST or not  : " + cb.isBST1(root));
		System.out.println("Tree is BST or not : "
				+ cb.isBST2(root, Integer.MIN_VALUE, Integer.MAX_VALUE));
		root.left.right.right = new Node(20);
		System.out.println("Input Tree is ");
		cb.inorder(root);
		System.out.println();
		System.out.println("Tree is BST or not: " + cb.isBST1(root));
		System.out.println("Tree is BST or not : "
				+ cb.isBST2(root, Integer.MIN_VALUE, Integer.MAX_VALUE));

	}

}

class Node {
	int data;
	Node left;
	Node right;

	public Node(int data) {
		this.data = data;
		left = null;
		right = null;
	}
}

输出

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个元素?

public class ListElement{
 
	Node head;
 
	static class Node {
	int value;
	Node next;
 
	Node(int value) {
		this.value = value;
                      }
	}
 
	public void addToList(Node node) {
 
		if (head == null) {
			head = node;
		} else {
			Node temp = head;
			while (temp.next != null)
				temp = temp.next;
 
			temp.next = node;
		}
	}
 
 
	public void printList() {
		Node temp = head;
		while (temp != null) {
			System.out.format("%d ", temp.value);
			temp = temp.next;
		}
		System.out.println();
	}
 
 
	public Node nthFromLastNode(Node head, int n)
	{
		Node firstPtr=head;
		Node secondPtr=head;
 
		for (int i = 0; i < n; i++) {
			firstPtr=firstPtr.next;
 
		}
 
		while(firstPtr!=null)
		{
			firstPtr=firstPtr.next;
			secondPtr=secondPtr.next;
		}
 
		return secondPtr;
	}
 
	public static void main(String[] args) {
		ListElement li = new ListElement();
		// Creating a linked list
		Node head=new Node(18);
		li.addToList(head);
		li.addToList(new Node(20));
		li.addToList(new Node(30));
		li.addToList(new Node(15));
		li.addToList(new Node(10));
 	    li.addToList(new Node(16));
		li.printList();
		Node nthNodeFromLast= li.nthFromLastNode(head, 4);
		System.out.println("4th node from end is :"+ nthNodeFromLast.value);
 
	}
 
}

输出

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仅是预处理器已知的。

例:

#include <stdio.h> 
typedef int CHAR; 
#define AP "Andhra Pradesh"

int main() 
{ 
	CHAR a, b; 
	a = 10; 
	printf("%d\n""%s"  , a, AP); 
	return 0; 
}

输出

10
Andhra Pradesh

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

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

语法

int  sprintf (char *string, const char *form, .... )

例:

#include<stdio.h> 
int main() 
{ 
	char string[50]; 
	int a = 10, b = 5, c; 
	c = a * b; 
	sprintf(string, "multiplication of %d and %d is %d", a, b, c); 
           	printf("%s", string); 
return 0; 
}

输出

multiplication of 10 and 5 is 2

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

声明:

  1. 字符a [] =”计算机”;
  2. char * a =”计算机”;

上面两个语句之间的区别在于, 第一个语句将创建一个由9个元素组成的数组, 该数组将自动添加空指针, 而数组” a”的大小将为9。

但是第二条语句将创建一个指针变量。我们无法对此指针变量执行任何数组操作, 因为它将以只读模式存储。

例:

#include <stdio.h> 
int main() 
{ 
	char a[] = "Computer"; 
	printf("%lu", sizeof(a)); 
	a[1] = 'n'; 
	printf("\n%s", a); 
	return 0; 
}

输出

9
Cnmputer

例子2

#include <stdio.h> 
int main() 
{ 
	char *a = "Computer"; 
	printf("%lu", sizeof(a)); 

	return 0; 
}

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

数据断点是C ++的一项强大功能, 当存储在特定内存位置的值发生更改时, 它可使我们停止执行。数据断点可用于解决内存损坏问题。


5)区分new和malloc()?

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

  • new是C语言的运算符, 而malloc()是用于内存分配的函数。
  • new运算符调用构造函数, 而malloc()不调用构造函数。
  • 新操作员从”空闲存储”中分配的内存, 而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. 有关作为参数传递的参数的信息及其数据类型。

例:

int add(int a, int b, int c)

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

函数定义:函数定义是函数的实际源代码。函数定义提供了该函数实际功能的信息。

例:

int add(int a, int b, int c){<br>
c= a + b;
return c;
}

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

  • 条件运算符是具有三个操作数的三元运算符, 它们用作if-else语句的简写形式。
  • 如果条件为true, 条件运算符将返回第一个表达式, 如果条件为false, 则返回第二个表达式。

语法

(Check expression)? Expression1: Expression2;

例:

var = (x < 10) ? 20 : 40;

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

volatile关键字是一个限定符, 在声明时与变量一起使用。

它向编译器提供了一个信息, 即变量的值在任何时候都可以更改, 即使它似乎没有被修改。

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

语法

volatile int x;   or int volatile x;

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

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

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

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

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

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

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

在C ++语言中, 我们可以通过引用或指针将参数传递给函数, 两者都是正确的方法且完全相同, 但是两者之间的基本区别是:

  • 我们可以直接将指针分配为空指针, 但是不能通过引用来完成。
  • 我们可以重新分配一个指针, 但是引用不能重新分配。

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

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

malloc():malloc()函数是一个库函数, 它分配一个所请求的内存块并返回一个指向其无效的指针, 该指针可以转换为任何返回类型。如果没有足够的内存, 它将返回空值。

语法

ptr=(cast-type*)malloc(byte-size)

calloc():calloc()函数也是一个库函数, 用于分配请求大小的多个内存块。它最初将内存初始化为零, 如果内存不足, 则返回NULL。

语法

ptr=(cast-type*)calloc(number, byte-size)

15)解释”虚拟机”一词吗?

虚拟机是一个行为类似于单独计算机的软件程序。它的工作原理与主计算机相同, 并且能够运行应用程序和其他程序。在称为主机的主机中创建了一个称为guest虚拟机的虚拟机。根据其用途, 有两种类型的虚拟机。

  1. 系统虚拟机
  2. 处理虚拟机

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

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

同步有两种类型:

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

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

数据同步:数据同步是一种确保两个设备之间数据完整性的技术。借助数据同步, 它可以将单个数据的多个副本保存在不同的位置。它包括文件同步, 日记, Raid等。


17)解释Mutex吗?什么是读写器问题?

互斥体:

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

读写器问题:

在OS中, 一种情况称为特定共享数据区域的读写器问题, 其中包括:

  • 可以从该共享区域读取任意数量的阅读器, 但一次只能写入一个作者。
  • 当一个作者在特定区域中书写时, 没有其他进程可以访问该区域。
  • 如果在该共享区域中有非零读者, 则writer不能在其中写入。

此问题通常发生在并发或多线程中。


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

我们可以将void关键字用于两个目的:

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

例:

int showMessage(void){   
}

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

例:

void showMessage() {
}

void关键字也可以与指针一起使用, 这使其功能更强大, 因为当void与指针一起使用时, 它被称为泛型类型, 可以容纳任何类型的地址。


19)解释退出受控循环?

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

#include <stdio.h>

int main() {
int x = 10; 
do{
    printf("\n the value of x is %d", x);
    x - -;
}
while(x>=5);
   return 0; 
}

Output: 
the value of x is 10
 the value of x is 9
 the value of x is 8
 the value of x is 7
 the value of x is 6
 the value of x is 5

20)什么是DNS服务器?

DNS服务器是DNS(域名系统)基础结构的主要部分。它是一台计算机服务器, 用于存储和管理IP地址及其各自的主机名的数据库。

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

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

Adobe面试问题

技术第二轮

1)TCP / IP模型中的不同层是什么?解释每一层的协议?

TCP / IP模型被称为传输控制协议/ Internet协议。 TCP / IP模型是OSI模型的实用且简洁的版本。当前的网络体系结构取决于TCP / IP模型。它主要包括四层:

  • 应用层
  • 传输层/主机到主机层
  • 网络层
  • 链路层/网络访问层

1.链接层:

负责通过网络的物理数据流。它由光纤, 同轴电缆或双绞线等硬件设备组成。在这一层中, 数据以位和帧的形式传输。

在此级别使用的协议是以太网, 令牌环等。

2. Internet层:

Internet层是Link层的上层。该层将数据转换为数据包, 称为IP数据报, 并通过网络跨主机发送这些数据报。这些数据报由主机和目标地址组成, 它们通过网络转发。

在此级别上使用的主要协议是:

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

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

该层主要包括两个协议:

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

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

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

该层包含各种更高级别的协议, 它们是:

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

2)解释调用函数时堆栈的工作情况?什么时候发生堆栈溢出?

就像堆一样, 堆栈是RAM的特定区域。但是堆栈用于存储函数内部使用的局部变量, 参数和返回值, 堆栈可以自动存储和分配内存。

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

  • 为返回变量增加空间。
  • 将参数压入堆栈。
  • 推送功能的局部变量。

当我们调用一个函数时, 堆栈会添加一个堆栈帧, 其中包含用于实际参数, 局部变量, 返回地址等的空间。该堆栈帧位于活动帧中, 直到调用time函数为止, 一旦执行完成, 则将堆栈移出该堆栈堆栈中的帧。

堆栈溢出:我们知道堆栈在执行后释放了内存并释放了空间, 但是在使用完完整的堆栈空间后仍然有条件, 并且没有更多的空间来保存变量, 因此称为堆栈溢出。发生这种情况的原因是堆栈的空间大小也受到限制, 并且在执行时, 如果我们分配的内存比可用内存多, 则发生溢出并导致程序崩溃。堆栈溢出的一些示例是:

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

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

int * const p:通过声明指针的方式意味着我们将点变量p声明为常量, 不能更改。我们不能更改其地址的保存, 也不能指向其他变量。如果我们尝试更改p的地址, 则将给出编译时错误。

const int * const p:以这种方式声明指针意味着, 我们无法更改指针的地址, 因为我们无法更改该地址的地址。如果我们尝试这样做, 那么它将生成一个编译时错误。


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

C ++提供了以下六个默认成员函数:

  • 默认构造函数
  • 驱逐舰
  • 复制构造函数
  • 复制分配运算符
  • 移动构造函数
  • 移动分配运算符

5)字典使用哪种数据结构?

要实现字典, 应使用哪种类型的数据结构取决于我们所需的内容, 因此有一些以下数据结构可用于实现字典。

哈希表:如果我们想要一个简单的字典, 没有前缀作为选项, 或者是最近邻居搜索, 那么我们可以对字典使用哈希或哈希表。

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

三元搜索树:如果我们想要像trie的所有品质, 但又不想给更多的空间, 那么我们可以使用三元搜索树。

BK-树:如果我们需要诸如拼写检查器, 查找相似单词等规范, BK-树是最好的数据结构之一。


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

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

还可以向候选人询问以下问题:

  1. 使用动态编程, 实现Snake and Ladder游戏并找到给定游戏中从1到100所需的最小移动数。
  2. 为DFA的数据结构建模, 该数据结构将事件作为参数并执行所需的操作。
  3. 解决三个贴错标签的罐子的问题。
  4. 如何比较两个二叉树?
  5. 如何证明一棵树的内部节点数少于叶子数?

技术性第三轮或导演轮


此回合是具有挑战性的回合, 因为在此回合中, 经理将根据你的项目提出问题, 因此应聘者必须对自己完成的项目有深入的了解, 并需要解决一些难题。

1)为河内塔写一个算法?

河内塔是一个非常流行的数学难题。在这个难题中, 我们得到了三个圆盘和三个杆。盘片按升序排列在第一根杆中。我们需要将磁盘从第一杆以相同的顺序转移到第三杆。

还有一些规则:

  • 我们可以一次移动一个磁盘
  • 我们只能移动最上面的磁盘
  • 磁盘应始终按升序排列, 即, 较大的磁盘不能放在较小的磁盘上。

算法:

假设有塔Beg, Aux和Dest, 并且有两个磁盘, 其中n磁盘是较大的磁盘, n-1是较小的磁盘。

开始

步骤1:将n-1磁盘从Beg塔转移到Aux

步骤2:将N磁盘从Beg移至End

步骤3:将磁盘n-1从塔辅助移到C.

Tower(n, Beg, Aux, Dest)
Begin
If n=1 then, Print: Beg-> Dest;
else
 Call Tower(n-1, Beg, Dest, Aux);
Call Tower(n, Beg, Aux, End);
Call Tower(n-1, Aux, Beg, End);
endif
End

2)编写代码以在”链表”列表中找到循环?你将如何删除此循环?

#include<stdio.h> 
#include<stdlib.h> 
struct Node 
{ 
	int data; 
	struct Node* next; 
}; 

/* Function for removing the loop. */
void remLoop(struct Node *, struct Node *); 

/*Function to remove and detect the loop*/
int detAndRemLoop(struct Node *list) 
{ 
	struct Node *p1 = list, *p2 = list; 

	while (p1 && p2 && p2->next) 
	{ 
		p1 = p1->next; 
		p2 = p2->next->next; 

		/*if p1 and p2 will meet at some point which means there is a loop*/
		if (p1 == p2) 
		{ 
			remLoop(p1, list); 
	                           printf("Loop is occurred\n"); 
			/* Return 1 if loop is found */
			return 1; 
		
		} 
	} 

	/* Return 0 if there is no loop*/
	return 0; 
} 

/* Function to remove loop. */
void remLoop(struct Node *loop_node, struct Node *head) 
{ 
	struct Node *ptr1 = loop_node; 
	struct Node *ptr2 = loop_node; 

	// Count the number of nodes in loop 
	unsigned int k = 1, i; 
	while (ptr1->next != ptr2) 
	{ 
		ptr1 = ptr1->next; 
		k++; 
	} 

	// Fix one pointer to head 
	ptr1 = head; 
	ptr2 = head; 
	for (i = 0; i < k; i++) 
	ptr2 = ptr2->next; 
	while (ptr2 != ptr1) 
	{ 
		ptr1 = ptr1->next; 
		ptr2 = ptr2->next; 
	} 
	ptr2 = ptr2->next; 
	while (ptr2->next != ptr1) 
	ptr2 = ptr2->next; 

	/* Set the next node to Null to fix the loop */
	ptr2->next = NULL; 
} 

/* Function to print linked list */
void printList(struct Node *node) 
{ 
	while (node != NULL) 
	{ 
		printf("%d ", node->data); 
		node = node->next; 
	} 
} 

struct Node *newNode(int key) 
{ 
	struct Node *temp = (struct Node*)malloc(sizeof(struct Node)); 
	temp->data = key; 
	temp->next = NULL; 
	return temp; 
} 

int main() 
{ 
	struct Node *head = newNode(40); 
	head->next = newNode(15); 
	head->next->next = newNode(12); 
	head->next->next->next = newNode(10); 
	head->next->next->next->next = newNode(4); 

	/* Create a loop*/
	head->next->next->next->next->next = head->next->next; 

	detAndRemLoop(head); 

	printf("Linked List after removing loop \n"); 
	printList(head); 
	return 0; 
}

输出

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

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

我们可以使用以下方法设计Excel电子表格:

  • 二维数组(但是会占用很多空间)
  • 稀疏矩阵
  • 地图等

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

内存保护是一种控制未经授权访问计算机内存的机制。内存保护可防止进程未分配的内存访问。首先检查内存地址, 然后由进程使用, 以查看是否分配了地址。

有两个寄存器LBR和UBR用于实现存储器保护。


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

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


6)编写算法以将元素插入到已排序的链表中?

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

假设输入链接列表为:

3 8 11 15 20

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

2)如果节点n的值小于头节点的值, 则在开始处插入该节点并将其分配为头。

3)在循环中, 搜索适当的节点, 然后将其插入输入节点。要从头开始搜索适当的节点, 请继续移动直到到达值大于输入节点的节点x(假设15)。 x之前的节点将是适当的节点(11)。

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

插入后:

3 8 11 13 15 20

7)找到总和等于给定数的一对元素?

#include <stdio.h>

void Pair(int arr[], int n, int sum)
{
    for (int i = 0; i <=n; i++)
    {
        for (int j = i + 1; j <=n; j++)
        {
            if (arr[i] + arr[j] == sum){
            
                printf("Pair element found at position %d and %d\n ", i, j);}
            
        }
    }
}
 

int main()
{
    int arr[] = { 5, 8, 9, 1, 6, 2, 7, 3};
    int sum = 11;
 
    int n = sizeof(arr)/sizeof(arr[0]);
 
    Pair(arr, n, sum);
 
    return 0;
}

输出

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的数字。如果我们用另一个替换一个数字。在O(N)中找到两个数字。
  2. 如果在婚姻职能中有n个人, 则将这些人分为两组, 这样每个人彼此认识?
  3. 使用动态编程, 实现Snake and Ladder游戏并找到给定游戏中从1到100所需的最小移动数。
  4. 一个城市有n座房屋。全部放在一行中。我们可以用三种颜色(R, G, B)中的任何一种给房屋着色。每种颜色都会给每个房屋上色的费用。没有两个邻居的房子可以具有相同的颜色。打印最低成本为所有房屋上色。
  5. 如果给定LinkedList和数字k。在一组k中反向LinkedList。

人力资源回合


人力资源回合将是整个招聘过程的最后一轮。与上述所有回合相比, 这是一个简单的回合, 面试官只想与候选人互动。在这一回合中, 面试官将根据沟通技巧和软技能对候选人进行评判。

1)简要介绍一下自己?

这个问题是一个非常普遍的问题, 大多数面试中都问这个问题。可以通过以下方式回答这个问题。

早上好/下午/晚上, 先生/妈妈, 很高兴有这个机会介绍自己。我叫Anamika Singh, 属于乌代浦。我已经从诺伊达工程技术学院的CSE分公司完成了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技术的软件开发人员。


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

例:

十年后, 我希望自己能在这家公司中担任各自的职务, 从而可以承担公司的重大职责。我想在每个级别上学习, 这将提高我的技能, 并将对公司的发展有所帮助。


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

这是与”我为什么要雇用你”相同的问题, 答案应为第3个问题。


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

是的, 我是一个目标明确的人, 我有一些人生的关键目标, 我要尽早实现。我会定期更新我的目标清单, 直到达到目标为止。


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

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

我最大的弱点是我的情感天性。当我看到某人处于任何不利状况时, 我都容易受到伤害。

才智

推理科

技术(MCQ)+编码测试(主观)

赞(0)
未经允许不得转载:srcmini » 热门!Adobe精品面试题最新汇总在这里啦

评论 抢沙发

评论前必须登录!