📜  SDE-2 的 Cadence 面试体验 | 3.5 年经验

📅  最后修改于: 2021-11-21 06:16:39             🧑  作者: Mango

技术回合 1(1 小时):

  1. 面试官想知道我是如何获得C/C++经验的,在C/C++方面做了哪些工作,我在这方面的主要作用。
  2. 然后要求为与我的项目相关的一些场景编写 API。

技术第 2 轮(1 小时):

  1. 问我是否了解多线程,我说不
  2. 问我是否知道内存损坏,我说不
  3. 分配4字节内存的代码,

    void* ptr= malloc(4);

    然后要求使用 int 数据类型分配 4 个字节的内存

    void* ptr= malloc(sizeof(int));

    然后问我是否可以在这 4 个字节的内存上写“abcd”,比如在第一个字节上写“a”等等。

    C++
    void initializePtr(void* ptr){
        char* cptr=(char*)ptr;
        char ch='a';
        for(int i=0; i<4; i++){
            cptr[i]=ch;
            ch++;
        }
    }


    C++
    bool compare(int x, int y){ 
        if(x%2!=0){
            if(y%2!=0){
                if(xy) return true;
                else return false;
            }
        }
    }


  4. 假设,我们已经成立了一家维护其客户数据库的公司。客户的数据使用链表管理。但是搜索任何数据都很慢。我们如何使搜索像按名称搜索一样高效?

    建议使用 Trie 进行名称搜索,使用 map 进行特定过滤器搜索。

    然后他问,将使用哪个映射,解释了 map 和 unordered_map 及其实现。另外,询问了关于 unordered_map 和 unordered_multimap 的黑白差异。

    但是内存是有限制的,我们不能增加更多的内存。建议按优先级维护排序的链表。

    我认为使用 SkipList 会是一个更好的解决方案。

  5. https://www.geeksforgeeks.org/design-a-data-structure-that-supports-insert-delete-search-and-getrandom-in-constant-time/

技术第 3 轮(1 小时):

  1. https://www.geeksforgeeks.org/find-sum-left-leaves-given-binary-tree/

    我告诉方法使用左/右孩子的标志。他要求在没有标志的情况下执行此操作,然后告诉检查节点的左孩子是否为叶子的方法。我使用 sum 参数来完成它,但他要求使用局部 sum 变量来完成它。也实现了。

  2. https://www.geeksforgeeks.org/count-zeros-in-a-row-wise-and-column-wise-sorted-matrix/
  3. 什么是归并排序及其实现

技术第 4 轮(1 小时):

  1. 实现音乐椅游戏的问题。我们需要获得随机椅子,然后需要删除它,这两个操作都在 O(1) 中。将使用哪种数据结构,链表或数组?类似于:https://www.geeksforgeeks.org/design-a-data-structure-that-supports-insert-delete-search-and-getrandom-in-constant-time/。但是音乐椅也可以在没有地图的情况下实现。
  2. https://www.geeksforgeeks.org/sort-even-numbers-ascending-order-sort-odd-numbers-descending-order/

    我告诉了两个指针的方法,将奇数元素放在一起,甚至放在一起,然后排序两次。

    然后他要求只使用一种排序调用,并要求为此编写比较器。

    C++

    bool compare(int x, int y){ 
        if(x%2!=0){
            if(y%2!=0){
                if(xy) return true;
                else return false;
            }
        }
    }
    
  3. 假设给定一个字符串463。根据元素的计数在输出字符串添加括号:
    Input: 
    463
    Output:
    ((((4((6)))3)))

    我告诉了保持打开括号计数的方法,然后相应地添加开始或结束括号。

  4. https://www.geeksforgeeks.org/leaders-in-an-array/
  5. 有一个汽车传感器,它可以持续感应温度并给出温度。传感器的输出是我们的输入,任何时候我们都会被问到是否达到了特定的数字,然后我们需要告诉是/否。

    我讲述了使用 set 的方法。我们将所有数字存储在集合中。

    然后他在传感器的输出中添加了 5% 的故障。假设,实际温度为 5,但传感器输出为 4.95。那我们要怎么做。我讲述了使用 BST 的方法。对于任何特定的 x,我们检查是否 root->data >=x-5/100 和 root->data <=x+5/100,然后我们将返回 true 否则遍历左右树。

  6. 我们在外星地球,它的数字系统与我们不同。我们得到了一组数字,我们需要对它进行排序。我们得到了一个 API 来比较 2 个数字。达到最低目标。 API 调用。此外,保持关联性。如果我们知道 1>2 和 2>3,那么 1>3。

    我先讲插入方法,然后再讲归并排序方法。

    如果读者可以为此分享正确的解决方案,将不胜感激。

  7. 给定一个链表。编写代码从单向链表中删除节点。面试官要求写正确的代码,没有任何错误。

导演回合(1小时):

  1. 被问到前几轮的情况,还问了之前所有面试都问了什么。
  2. 问我在大学里是否学习过编译器设计和操作系统。如果我知道事情内部是如何运作的。 Sbrk 电话等。
  3. 如何检查我们的程序是否花费了很长时间以及它是否消耗了更多内存。

    还询问了我的项目代码大小以及我们在代码中使用哪种方法来检查时序问题和内存问题。

  4. 对于内存问题,要求我们设计自己的产品来检测内存泄漏。

    我告诉了保持信息的方法。通过 malloc 或 new 在堆上动态分配的所有内存。然后如果它们没有在范围内释放,则将其视为内存泄漏。但是面试官说dealloc内存在范围之外也可以。所以,我告诉在程序结束时检查内存释放。

    他说,如果最初我们占用了 100 mb 的内存,然后状态 10 mb 被释放,那么将如何完成。我告诉检查在释放内存时从分配的内存中释放了多少内存。

  5. 假设一个 8GB 的程序,我们有 32GB 和 32 位系统。系统能运行那个程序吗?

    https://techterms.com/help/difference_between_32-bit_and_64-bit_systems