Mentor Graphics 面试经历| Set 6(新生校内)
今年Mentor Graphics又来我们校园招聘了。CST、ETC、IT的大约40-45名学生根据他们的CGPA入围。
一共进行了三轮。
第一轮:(笔试)
时长为 90 分钟。它分为三个部分。
a.软件
b.数字
c.分析的
a.软件部分有以下问题:
1.
int * func()
{
int a;
...
return &a;
}
识别此代码的任何问题并进行解释。关联
struct st {
int x;
char y;
void *ptr;
};
这个结构在 32 位和 64 位机器中的大小是多少。
3.编写代码查找树的镜像。关联
4.给定一个数组,将所有元素左旋转1。
例如:输入:abcdef
输出:bcdefa
5.代码查找树的高度。
6.在 O(N) 中将数组的所有零移到右侧。关联
7.给定一个中缀表达式,从中构造一个表达式树并计算表达式。与此类似。
8.找到最小长度子数组,其总和大于具有正整数元素的数组的给定值,其复杂度优于 O(N^2)。关联
前 6 题 1 分,后 2 题 2 分。
b.Digital部分有如下问题:
1.仅使用 2 个输入与非门重新创建给定电路。
2.使用mux实现一个布尔表达式。
使用 2 个输入 NOR 门对 2 个数字进行 3.2 位串行加法。
4.给定一个电路,尽量减少用于制作该电路的门数。
还有更多与电路相关的问题,但我现在不记得了。
c.分析部分有10个问题,其中一些是:
1.从给定的图形中移动 4 根火柴,形成 3 个正方形。
2. http://puzzles4you.blogspot.com/2015/03/4-tablets-puzzle.html
3.破解密码。关联
4. A 和 B 决定在下午 1 点到 2 点之间在某个地方见面。他们都不会等待对方超过 15 分钟。他们见面的概率是多少?
5.有多少种方法可以用五位数字(0、5、7等)生成可被5整除的四位数字,有无重复。
6.A 5 分钟思考 100 行代码,10 分钟输入 100 行代码。每 10 分钟后,他休息 5 分钟。他在 100 分钟内会输入多少行代码?
7.一场淘汰赛有32支球队,至少需要多少场比赛才能获得冠军和真正的第二名?
还有一些谜题。
第二轮:(技术面试)
我们有11人入围了第一轮技术面试。有两个小组,每个小组有2名面试官。一个小组有6个学生,另一个小组有5个。
我是第二个小组的第一个。我被问到以下问题:
1.C中变量可以声明为void吗?
2.C++中的虚函数。如果我们将派生类地址分配给基指针但不声明类virtual,会调用哪个函数?
3.C++中的VPTR和VTABLE
4.指针算术
5.
#include
int main()
{
char *str="IIEST";
*str='E';
printf("%s", str);
return 0;
}
这段代码有什么问题(如果有的话)。
此代码编译没有错误,但在执行时会产生分段错误。
6. const 指针和指向 const 的指针与语法的区别。
7.C++中的Private Constructor,如何实例化带有C++构造函数的类?
我告诉他们使用 C++ 的 Friend函数,但他们想要我当时不记得的通用标准解决方案。
8.有一个数组只填充了0、1和2,它们是分布的。如何有效地对它们进行排序,使所有的0都在前,然后是1,然后是2。
我告诉他们使用 0、1、2 三个计数器的解决方案,然后相应地打印 0、1、2,他们很高兴。
9.然后我被问到仅由字母组成的字符串中唯一的非重复字符。我告诉他们通过维护数组来使用额外空间的解决方案。然后他们告诉我通过不使用像哈希映射这样的额外空间来改进解决方案或我做不到的数组。
10.然后有人问我操作系统中的虚拟内存。
11.然后我被要求使用 2:1 多路复用器实现与门,以及是否可以使用多路复用器实现任何电路。
12.最后一个问题是一个 D 触发器,我必须设计一些逻辑,输出是一个时钟,其时间周期是 D 触发器输入时钟信号的 2 倍。
面试进行了大约 40-45 分钟。对于编码问题,我不必写任何东西,只要逻辑就足够了。
第三轮:(技术+人力资源)
我们中有 6 人被选中参加这一轮比赛,并且小组交换了,即在上一轮中拥有小组 1 的人必须进入小组 2,反之亦然。
首先是技术回合,其中有以下问题:
1.计算机有哪些不同的部分?我告诉他关于 CU、ALU 和冯诺依曼架构。
2.RISC和CISC的区别。
3.一条指令流水线的不同阶段。如何流水线更好?
4.编写一个函数,每次调用它都会返回一个唯一的有效标识符。这里的标识符是指变量名、函数名等,即编译器将其视为标识符。
我告诉他们我会从 az 随机生成一个字符,然后与系统时间连接。他们对这种方法很满意。
5.改变一点整数。关联
6.有效地计算m^n。关联
有人问我解决方案中的乘法数。
7. O(n) 和 O(n^2) 之间的差异。如果一个是 0.01n,另一个是 0.00002n^2,那么对于较小的 n 值,后者更好,那么我们怎么能说 O(n) 更好?
我告诉他们,对于现实生活中的问题,输入大小会更大,然后 O(n) 会更好。
8.给定输入输出和程序如何在不使用分析的情况下知道程序的时间复杂度?
我说我们必须确定程序的主要操作,例如对操作进行排序是比较,然后记录执行的操作计数,然后我们可以有关系 b/w 操作数和输入大小,这将是复杂性。
9.只给定输入输出如何知道程序的时间复杂度?
我告诉他们,我们可以绘制时间以获得所需的输出作为输入大小的函数,并获得时间复杂度的近似值。
10.缓冲器与锁存器、触发器与锁存器的区别。
11.什么是Cache Memory,为什么使用它?
12.如果程序员知道如何减少缓存未命中和引用的局部性,他是否可以编写缓存未命中最少的代码?
我告诉他们我不确定,但我认为可以做到。然后他告诉我可以做到,而且背后有很长的理论。
13. 有人问我使用 C/C++ 做过哪些项目,并给自己打分(满分 10)。
14.我被问到我使用了哪些机器学习算法,因为我已经完成了一个在线课程。
15.最后一个问题给出了一个数字串行比特流,如果有奇数个 1,然后输出 1,否则使用一些逻辑电路输出 0。首先是 6 个串行位,然后他告诉我为 2 做。我是有问题,所以他告诉我画出真值表,在写完 1 个案例后,我告诉他这将是 XOR 电路,然后他告诉我做 3 或 4 次,我告诉他你所要做的就是 XOR然后HR女士问了我一些问题,比如我父母是做什么的,我为什么选择CS,我是否可以搬到诺伊达工作等等。
这个技术和人力资源花了将近一个小时。
这轮比赛结束后等了15分钟,他们告诉我,我和另外两个人一起被选中了。这对我来说是一个非常快乐的时刻。