Synopsys 面试经历 – 研发 2 工程师
我在 Synopsys Noida 接受了研发 2 工程师职位的面试。
第一轮:第一轮是电话。面试官首先要求在当前公司工作。
然后他问我一些与 C++ 相关的问题。
- 什么是虚拟析构函数?
- 我们可以使用带有 const 限定符的 static 关键字吗?
- 我们可以在 C++ 中更改 const 变量的值吗?
- 什么是常数参考?
- 按引用调用与按值调用之间的区别?
- https://www.geeksforgeeks.org/design-a-stack-that-supports-getmin-in-o1-time-and-o1-extra-space/
在这个电话之后,我被要求在他们的诺伊达办公室进行 F2F 面试。
第2轮:这部分的问题来自数据结构和C++。代码应该整洁干净,包括所有基本条件。
- 使用 C++ 的特性设计一个 Array 类。
- 反转一个链表。
- https://www.geeksforgeeks.org/minimum-steps-reach-end-array-constraints/
- 平衡二叉树中的节点数。
- 如何使对象不可复制。
- 使用虚拟指针和虚拟表的概念在 C++ 中描述整个虚拟关键字实现。
- 代码中虚拟关键字位置变化的问题。
- 函数重载 vs函数重载
- 深拷贝与浅拷贝。
- 迭代与递归方法。
- 使用迭代和递归方法编写斐波那契程序。
- C++ 中的引用是什么?
- 编写代码以确定给定的二叉树是否为 BST。
- 讨论 BFS 和 DFS。
第三轮:
- 给我一个带有电阻器,电感器和电容器的电路图。现在我需要设计一个 C++ 类来使用 C++ 特性导出整个电路的功能并描述我如何使用它们。这是一个大约 45 分钟的长时间讨论。
- 复制带有下一个和具有各种变化的随机指针的链表。
第 4 轮:这是与招聘经理的管理轮。它从我的介绍和许多行为问题开始。
- 查找树中两个给定节点之间的所有节点。
- 给定两个数组,确定两个数组中有多少元素相等。
- 当一个对象在 C++ 中创建时,所有的东西都被调用了。(如构造函数、复制构造函数、赋值运算符)
- 所有类型的访问说明符,它们之间存在差异。
- 描述运算符重载。
- 编写复制构造函数和赋值运算符的语法。
一天 3 次 F2F 后,他们在 15 天后打电话给我,要求再进行 1 次 F2F。
第5轮:这一轮是与队长。面试再次从我在前雇主的最后一份工作开始。
- 讨论简历中提到的项目。
- 使用 BFS 进行写级顺序遍历并讨论时间复杂度。
- 编写用于遍历具有时间复杂度讨论的无向图的代码。
- 邻接表与邻接矩阵。
- 如果其他数字重复两次,则在数组中查找不重复的数字。
- Java中 '==' 和 '.equals()' 之间的区别。
- Java中函数覆盖和重载的内部实现。
这一轮结束后,我接到了班加罗尔队队长的电话。
第六轮:再次讨论我在上一家公司的工作。
- 定义一个常数向量。
- 什么是复制构造函数
- 一个空类的大小是多少,为什么会这样?
- 如何使用访问说明符。
- 如何在 C++ 中动态分配二维数组。
- malloc 和 new 的区别。
- 什么是常数函数?
- 我们可以修改“指向变量的常量指针”吗
- 编写代码找出给定数字是否为 2 的幂?
- 编写代码以查找数组中的第 K 个最大元素。
在所有这些回合之后,人力资源部给我发邮件说你被选中并通过电话协商薪资讨论。
祝大家一切顺利。我建议对 Synopsys 有足够的信心并精通 C++。