📜  微软面试经历 |第 131 集

📅  最后修改于: 2022-05-13 01:58:36.476000             🧑  作者: Mango

微软面试经历 |第 131 集

第 1 轮(笔试):测试有 3 个问题:

  1. 计算两个整数的和,如果 sum 中的位数等于整数之一,则返回 sum,否则返回 n。
  2. 查找数字是否具有二进制回文并计算设置的位数
  3. 在二叉树中连接同一级别的节点

第 2 轮(团体飞轮):

    他们将所有入围的学生分成 2 人一组,每 6 名学生分配一名面试官。它有 2 个问题需要在 40 分钟内解决。
    提示:向面试官提出各种问题并讨论您的方法。
  1. 给定一个包含字符的二维数组,您必须找出给定字符串是否存在于矩阵中。您只能在左-> 右或上-> 右方向移动。 (回溯/递归)
  2. 给定一个 BST,有一个坏节点违反了 BST 的属性。所以你需要找到那个节点并纠正它。

第三轮(F2F):

  1. 面试官首先问我关于我的项目的每一个细节。
  2. 然后他问了项目的数据库结构——每一个表,并要求我把它做得更好。然后他让我写一些与该数据库相关的 SQL 查询。
  3. 数据结构:在数组中查找元素范围为 1 到 n 的重复元素。我给出了负元素方法,但他要求我将其优化到小于 O(n)。我不能做那部分,但他结束了采访。

第 4 轮(F2F):

  1. 代币管理的设计问题。
    他让我设计一个系统,自动生成代币并为其分配柜台。例如 SBI 银行/客户中心。他告诉我编写为此涉及的课程。面试官很有帮助,他让我思考。他真的很喜欢我的方法,并告诉我继续这样做。
    解决方案:我为系统 Counter(counter_id, current_token, state) Token(Token_id) TokenManager (List, List) 创建了 3 个类。解释了 assignCounter()、findFreeCounter() 等方法。他对类和方法名称非常挑剔,并告诉我更改其中一个或另一个名称。这是1小时30分钟的讨论。
    最后,他告诉我,虽然讨论很长,但很高兴有你在这里。 🙂

第 5 轮(F2F):

  1. 面试官是个严肃的人,他让我减去两个字符串,以使第二个字符串中的字符应该从第一个字符串中删除(就地)。假设字符串为 char 数组。
    方法 1:将第二个字符串的所有字符添加到一个哈希集中,并且对于每个匹配的字符,获取它之前和之后的子字符串。 O(n^2)。
    方法2:基于队列将所有不存在的字符添加到队列中并将其添加回字符数组。 O(n) 时间 O(n) 空间。
    方法 3:他让我进一步改进它,我给出了一个使用 2 个指针的 O(n) 解决方案。
    int j = -1;
    for (int i = 0; i < n; i++) {
        if (!set.contains(s[i])
        {
            arr[++j] = s[i];
        }
    }
    arr[++j] =’\0’;
    
  2. 他对我的解决方案很满意,然后要求讨论一个设计问题。
    然后他让我设计一个 MC-Donalds 的订单管理系统。有哪些 API 可用,它们是客户端、服务器以及厨房如何了解新订单。

然后在 5 分钟后我们得到了结果,这真的是一个非常自豪的时刻。
提示:你需要有很大的耐心,因为面试需要很多时间。这是一个12小时的过程,所以要冷静和耐心。所有最好的朋友……

微软的所有练习题!