与招聘经理的筛选回合(1 小时 30 分钟):
- 询问当前公司项目和编码语言。我工作过的。 C++ 经验是非常小鬼。为他们。
- 您如何评价自己的 C++ 初学者/中级/优秀?我说中级
- Diff b/w malloc 和 new 导致对构造函数的讨论。为复制构造函数编写语法。为什么复制构造函数的参数作为 ref 传递?
- https://www.geeksforgeeks.org/merge-3-sorted-arrays/。第一个讲述一次使用 2 个数组的合并方法。但这需要更多的额外空间。因此,面试官要求将空间复杂度降低到 O(1)。然后,告诉方法使用大小为 3 的额外数组。需要工作代码。
- https://www.geeksforgeeks.org/puzzle-9-find-the-fastest-3-horses/
- https://www.geeksforgeeks.org/count-set-bits-in-an-integer/
- https://www.geeksforgeeks.org/detect-loop-in-a-linked-list/
- https://www.geeksforgeeks.org/puzzle-set-35-2-eggs-and-100-floors/
- https://www.geeksforgeeks.org/maximum-sum-path-across-two-arrays/
我讲述了使用树/图的方法,然后检查每种可能性,但无法编写代码。面试官告诉我正确的方法,然后结束了面试。
技术回合(1小时):
- 询问公司目前的项目。
- 问我是否研究过 C++11 特性,如移动构造函数、智能指针等。我说我没有工作,但我对它们有一些了解
- 使用 malloc 和 new 的差异黑白内存管理
- 给定 2 个包含一位数数据的链表,它们的长度相同。关于差异的讨论。添加2个链表的方法
L1 : 3 -> 5 -> 7 L2 : 4 -> 4 -> 5 L3 : 8 -> 0 -> 2 add (L1, L2)
- 我告诉了反转链表然后执行加法的方法,然后他添加了不能修改链表的约束
- 我告诉了使用递归的方法,因为堆栈调用的空间复杂度为 O(n),他要求在 const 空间中进行
- 他给出了一个提示,如果 2 位数字之和 <=8 那么它就不会向后传播进位。所以,维护 2 个 prev 指针,指向节点,使得它们的 sum<=8 和 2 个 curr 指针,如果 curr 指针 sum >=10,那么从 prev 到 curr,我们需要传播进位。他要求只遍历输入列表节点一次
- 方法是我们需要维护最新的sum节点的ptr,sum<=8,一旦sum>=10,这意味着从prev到curr节点,所有sum节点都为零。
https://www.geeksforgeeks.org/add-the-given-digit-to-a-number-stored-in-a-linked-list/ -> 这个问题的扩展
技术回合(2小时):
- 询问公司目前的项目。
- 什么是虚函数及其内部实现?
- 基于输出的问题
C++
class A{ int a; public: void show(){ cout<<"show"; } void show1(){ cout<<"show1:"<show(); //will program crash-? a->show1(); //will program crash-? return 0; }
他也问了原因。
- 要求在 C++ 中实现 BST(insert, print)。我用funcs实现。然后他要求使用 C++ 的封装和抽象特性来实现它。我在 Tree 类之外保留了 Node 结构。他要求把它放在 Tree 类中,并询问内部类。然后他要求让它通用,我做到了。此外,他要求为树节点定义自己的 DS(具有 2 个整数),为此需要在代码中进行许多修改。添加运算符重载代码用于比较黑白 MyDS 对象。但打印函数也需要修正。对于那个朋友函数是必需的。他让我向谷歌寻求帮助。
- https://www.geeksforgeeks.org/puzzle-21-3-ants-and-triangle //在我的例子中不是三角形而是正方形
- http://www.crazyforcode.com/3-mislabeled-jars/
- 询问 Tree 问题,讨论了为什么我们从友元函数返回 ostream 。
- 然后是行为问题,为什么要转换。我还谈到了 Synopsys。
导演回合(30 分钟):关于工作和工作文化的一般性讨论