嗨,我最近接受了 Cadence 设计系统(地点:诺伊达)的软件开发人员 C++ 职位(校外 0 -1 年经验)的面试并被选中。我是最后一年 (ECE) 的学生。这是我的 Cadence 面试经历。
第 1 轮(技术轮):
- 问题陈述:假设我们在 COWIN 注册中有 100 万个使用电话号码的条目(所有电话号码数据不需要排序),我们必须搜索具有最低电话号码的个人详细信息(例如 9999999999 > 9999999998)并继续注册人,我们怎么做?
方法 1:如果数据(所有电话号码)都存储在其中,那么我们可以简单地应用二分搜索,它的复杂度为 0(log N)。但根据问题陈述数据未排序。
方法2:我们可以保留一个优先级队列(最小堆),它可以以排序数据的形式跟踪每个条目,我们可以在树的根部找到电话号码最低的人的详细信息。
采访者:能否请您用堆绘制特定数据的图表进行可视化?
9999999910、9999999997、9999999917、9999999915、9999999912、9999999996。
语法: priority_queue
,greater >p; p.top() 9999999996 (smaller element at root) 9999999996(root) 9999999997(left child) 9999999912(right child) 9999999910(left) 9999999915(right) 9999999917(left)
面试官说稍微解释一下如何插入特定数据以及我们如何遍历,这是更优化的 DFS 或 BFS 以及散列的概念。
你知道哪些排序算法?实现任何排序算法。
- 给定一个链表,交换每两个相邻节点并返回其头部。您必须在不修改列表节点中的值的情况下解决问题(即,只能更改节点本身)
Input: head = [1,2,3,4] Output: [2,1,4,3]
第二轮(技术轮):
- 给定一个数组,为每个元素打印下一个更大的元素 (NGE )。元素 x 的下一个更大的元素是数组中 x 右侧的第一个更大的元素。不存在更大元素的元素,将下一个更大的元素视为 -1。
Input : 11, 13, 21, 3 Output :13, 21, -1, -1
- 给定一个字符串strs 数组,将字谜组合在一起。您可以按任何顺序返回答案。
字谜是通过重新排列不同单词或短语的字母而形成的单词或短语,通常只使用一次所有原始字母。
Example 1: Input: strs = ["eat","tea","tan","ate","nat","bat"] Output: [["bat"],["nat","tan"],["ate","eat","tea"]]
第 3 轮:这一轮完全基于 C++ 概念。
- 地图【STL 库】是如何工作的?其实现的时间复杂度是多少? – C++ 中的映射
- 上面的问题导致了红黑树——它的工作和属性。
- 什么是静态变量,全局变量?
- 什么是访问说明符?举例说明
- 什么是 const成员函数? –const 成员函数-c
- 对构造函数的深入讨论。
第 4 轮:
- 合并 k 排序数组,然后进一步修改问题,例如如何处理重复项。
- 询问了 Sql 查询的基础知识,操作系统(如进程与线程)。
- 对当前工作和项目的长时间讨论。
最后HR下周做完了,终于收到offer了。