📜  Adobe 面试体验 | 4年经验

📅  最后修改于: 2021-11-21 05:52:09             🧑  作者: Mango

技术回合(1 小时):本回合 C++ 问题

  1. C++ 基于输出的问题:
    C++
    class Base{
        public:
        Base(){
            cout<<"base called ";
        }
    };
      
    class Derived{
        Base b;        
        public:
        Derived(){
            cout<<"derived called\n";
        }
    };
      
    int main(){
        Derived d;       
        return 0;
    }


    C++
    class Derived {
        int id;
    public:
        Derived(int id)
        {
            this->id = id;
            cout << "derived const for id:" << id;
        }
        ~Derived() { cout << "derived dest. for id" << id; }
    };
      
    int main()
    {
        Derived d(5);
        Derived* d1 = new Derived(10);
        delete d1;
        return 0;
    }


    C++
    class Base{
        public:
        void show(int x){
            cout<<"base called x="<C++
    
    class A {
        int& m_ref;
    };
      
    int main() {
        A a;
        return 0;
    }


    C++
    class A {
    };
      
    int main()
    {
        A a1;
        A* a2= new A(); // as size of empty class object is 1
                       // byte. So, it should be deallocated also
        return 0;
    }


    C++
    class SignalDispatcher{
    public:
        //callbackFunc is lamda expr of format   [](mystrut data){}
        void on(string eventName, std::function callbackFunc) 
        //call all callbacks with this eventname and put data as argument  
        void trigger(string eventName, mystrut data)    
    };


    C++
    int a[6] = {0, 1, 2, 3, 4, 5};
    cout<


    输出是什么,为什么?

  2. 新建和删除概念相关的问题。在下面的代码中打印输出

    C++

    class Derived {
        int id;
    public:
        Derived(int id)
        {
            this->id = id;
            cout << "derived const for id:" << id;
        }
        ~Derived() { cout << "derived dest. for id" << id; }
    };
      
    int main()
    {
        Derived d(5);
        Derived* d1 = new Derived(10);
        delete d1;
        return 0;
    }
    
  3. 覆盖概念相关问题

    C++

    class Base{
        public:
        void show(int x){
            cout<<"base called x="<
    

    C++

    class A {
        int& m_ref;
    };
      
    int main() {
        A a;
        return 0;
    }
    
  4. 我们需要创建我们自己的字符串类,它的行为应该类似于 c++字符串类。为此编写所有必要的构造函数和析构函数。
  5. 还询问什么时候应该使用初始化列表,什么时候不应该使用?
  6. 移动语义需要什么?
  7. https://medium.com/swlh/write-your-own-c-stl-string-class-e20113a8de79

技术第 2 轮(1 小时 30 分钟):

  1. 空类概念程序。将低于编。工作正常吗?

    C++

    class A {
    };
      
    int main()
    {
        A a1;
        A* a2= new A(); // as size of empty class object is 1
                       // byte. So, it should be deallocated also
        return 0;
    }
    
  2. 给定一个数组和 k。找到最小数量使它们的总和 = k 所需的角元素的数量
    arr[]={1,2,3,4,6,2,3,1} 
    k=6

    答案=3

    首先讲回溯的蛮力方法。 O(pow(2,n));

    我提供了类似于这里讨论的方法的解决方案:https://www.geeksforgeeks.org/maximize-sum-of-k-elements-in-array-by-taking-only-corner-elements/

  3. https://leetcode.com/problems/course-schedule-ii/

    询问空间和时间复杂度。

    https://www.geeksforgeeks.org/topological-sorting-indegree-based-solution/

    另外,询问差异。黑白 BFS 和 DFS

技术第 3 轮(1 小时):

  1. https://www.geeksforgeeks.org/sort-array-converting-elements-squares/。告诉优化方法来解决这个问题
  2. https://www.geeksforgeeks.org/check-if-a-word-exists-in-a-grid-or-not/ 我使用访问过的数组解决了它。面试官问了空间复杂度和时间复杂度。

    我告诉时间复杂度->(n*m)^2,

    由于访问矩阵,空间复杂度-> n * m。要求在不使用访问矩阵的情况下解决问题。

  3. 询问 lamda 表达式。

    问我是否知道回调,在我的公司项目中,如果我曾经使用过回调。

    然后他要求完成一个类的实现

    C++

    class SignalDispatcher{
    public:
        //callbackFunc is lamda expr of format   [](mystrut data){}
        void on(string eventName, std::function callbackFunc) 
        //call all callbacks with this eventname and put data as argument  
        void trigger(string eventName, mystrut data)    
    };
    

    告诉 hashmap 和 vector 方法来存储回调然后调用它们

    另外,要求告诉此代码的单元测试用例。

  4. 使用 3 个函数 push_back()、pop_back()、size() 实现自己的通用向量类

第 1 轮管理(约 1 小时 20 分钟):

  1. 编写一个宏来查找最多 3 个数字。

    询问宏的优缺点。 https://www.geeksforgeeks.org/macros-vs-functions/

    考虑到宏的缺点,有没有其他方法可以跳过上下文切换?内联函数

  2. 基于输出的问题

    C++

    int a[6] = {0, 1, 2, 3, 4, 5};
    cout<
  3. 什么是小端和大端。编写程序来检查机器的字节序 https://www.geeksforgeeks.org/little-and-big-endian-mystery/
  4. 问我是否熟悉按位运算运算符。如何检查数字是偶数还是奇数?
  5. 问我用过哪些设计模式?解释观察者设计模式。
  6. 设计蛇梯游戏的类结构。关于空间和时间复杂度的交叉问题

第 2 轮管理(约 1 小时):

  1. https://www.geeksforgeeks.org/reverse-words-in-a-given-string/

    首先告诉基于堆栈的方法,然后将空间复杂度降低到 O(1)

  2. https://www.geeksforgeeks.org/print-nodes-top-view-binary-tree/

    当我谈到使用 map 时,询问了 map 的内部实现。我告诉了这一点,然后要求为 put() 和 get() api 编写代码。

    我写代码没有管理高度,面试官也要求写,我没能做到。

    还讨论了 unordered_map 和差异 b/w 他们两个

导演回合(~30 分钟):

  1. 询问我的项目。很多关于我公司项目的讨论。
  2. 要求设计一个pdf文件可以在多个用户之间共享并且可以由多个用户同时编辑的系统。

最终裁决:选择