📜  Adobe 计算机科学家面试经验-1

📅  最后修改于: 2021-11-24 03:11:42             🧑  作者: Mango

CS-1 的 Adobe 面试体验,位于班加罗尔。我将在这篇文章中分享我的经验。我有大约 5 年的Java开发人员(后端)工作经验。面试是他们招聘活动的一部分,所有面试轮次都是在线进行的。面试官非常乐于助人。

第1轮:

  1. 给定一个具有所有唯一元素的排序数组。和目标总和。查找数组中是否存在以sum为targetSum的一对元素。
    eg:  
    Arr={4, 5, 8, 10, 12, 15, 20}  targetSum = 23
    Op: Yes. (8, 15)
    Java
    /*package whatever //do not write package name here */
      
    public int[] findPair(int[] arr, int sum)
      
    {
        int[] res = new int[2];
        int l = 0;
        int r = arr.length - 1;
        while (l < r) {
            int temp = arr[l] + arr[r];
            if (temp > sum)
                r--;
            else if (temp < sum)
                l++;
            else {
                res[0] = arr[l];
                res[1] = arr[r];
                break;
            }
        }
        return res;
    }


    Java
    /*package whatever //do not write package name here */
      
    Node getSecondMax(Node root) { return util(root, null); }
      
    Node util(Node root, Node prev)
    {
        if (root == null)
            return root;
      
        if (root.right != null) {
            prev = root;
            return util(root.right, prev);
        }
        else {
            if (root.left == null)
                return prev;
            else
                return getRight(root.left);
        }
    }
      
    Node getRight(Node root)
    {
        if (root == null)
            return root;
      
        if (root.right == null)
            return root;
      
        if (root.right != null)
            return getRight(root.right);
    }


    Java
    /*package whatever //do not write package name here */
      
    public void kSmallestElements(int[] arr, int k)
      
    {
        // Max heap
        PriorityQueue pq = new PriorityQueue(
            Collections.reverseOrder());
        if (k >= arr.length) {
            for (int i : arr)
                System.out.print(i + " ");
            return;
        }
      
        for (int i = 0; i < k; i++) {
            pq.add(arr[i]);
        }
      
        for (int i = k; i < arr.length; i++) {
            int max = pq.peek();
            if (arr[i] < max) {
                pq.poll();
                pq.add(arr[i]);
            }
        }
      
        for (int i = 0; i < k; i++) {
            System.out.print(pq.poll() + " ");
        }
    }


  2. 给定一个不平衡的二叉搜索树。找到树中第二高的元素。

    Java

    /*package whatever //do not write package name here */
      
    Node getSecondMax(Node root) { return util(root, null); }
      
    Node util(Node root, Node prev)
    {
        if (root == null)
            return root;
      
        if (root.right != null) {
            prev = root;
            return util(root.right, prev);
        }
        else {
            if (root.left == null)
                return prev;
            else
                return getRight(root.left);
        }
    }
      
    Node getRight(Node root)
    {
        if (root == null)
            return root;
      
        if (root.right == null)
            return root;
      
        if (root.right != null)
            return getRight(root.right);
    }
    

第二轮:系统设计

  1. 设计一个在线播放列表,具有向最终用户公开的以下功能。
    • 按艺术家姓名/歌曲名称/流派/发行年份/专辑名称搜索
    • 按发布年份/编号排序。点击次数(喜欢)
    • 推荐类似的播放列表
    • 从上次保存的点恢复播放列表

第三轮:经理轮

  1. 给定一个未排序整数数组和一个值 k。从数组中找出 k 个最小的元素。
    eg: arr={6,3,6,2,2,4,7}  k=4  
    op: 2,2,3,4

    Java

    /*package whatever //do not write package name here */
      
    public void kSmallestElements(int[] arr, int k)
      
    {
        // Max heap
        PriorityQueue pq = new PriorityQueue(
            Collections.reverseOrder());
        if (k >= arr.length) {
            for (int i : arr)
                System.out.print(i + " ");
            return;
        }
      
        for (int i = 0; i < k; i++) {
            pq.add(arr[i]);
        }
      
        for (int i = k; i < arr.length; i++) {
            int max = pq.peek();
            if (arr[i] < max) {
                pq.poll();
                pq.add(arr[i]);
            }
        }
      
        for (int i = 0; i < k; i++) {
            System.out.print(pq.poll() + " ");
        }
    }
    
  2. 系统设计:设计一个在线航班预订系统,具有以下特点:
    • 搜索指定日期目的地之间的航班
    • 订机票
    • 检索用户的预订

    第 4 轮:

    • 最后一轮由一位资深人士参与,可能是工程总监,他让我设计一个系统,让多个用户在 BookMyShow 等应用程序中预订同一个座位。多个用户同时预订同一个资源时如何处理并发。

    结果: 2天后我接到HR的电话,说我被选中了。