微软面试经历 |第 131 集
第 1 轮(笔试):测试有 3 个问题:
- 计算两个整数的和,如果 sum 中的位数等于整数之一,则返回 sum,否则返回 n。
- 查找数字是否具有二进制回文并计算设置的位数
- 在二叉树中连接同一级别的节点
第 2 轮(团体飞轮):
- 他们将所有入围的学生分成 2 人一组,每 6 名学生分配一名面试官。它有 2 个问题需要在 40 分钟内解决。
- 给定一个包含字符的二维数组,您必须找出给定字符串是否存在于矩阵中。您只能在左-> 右或上-> 右方向移动。 (回溯/递归)
- 给定一个 BST,有一个坏节点违反了 BST 的属性。所以你需要找到那个节点并纠正它。
提示:向面试官提出各种问题并讨论您的方法。
第三轮(F2F):
- 面试官首先问我关于我的项目的每一个细节。
- 然后他问了项目的数据库结构——每一个表,并要求我把它做得更好。然后他让我写一些与该数据库相关的 SQL 查询。
- 数据结构:在数组中查找元素范围为 1 到 n 的重复元素。我给出了负元素方法,但他要求我将其优化到小于 O(n)。我不能做那部分,但他结束了采访。
第 4 轮(F2F):
- 代币管理的设计问题。
他让我设计一个系统,自动生成代币并为其分配柜台。例如 SBI 银行/客户中心。他告诉我编写为此涉及的课程。面试官很有帮助,他让我思考。他真的很喜欢我的方法,并告诉我继续这样做。
解决方案:我为系统 Counter(counter_id, current_token, state) Token(Token_id) TokenManager (List, List) 创建了 3 个类。解释了 assignCounter()、findFreeCounter() 等方法。他对类和方法名称非常挑剔,并告诉我更改其中一个或另一个名称。这是1小时30分钟的讨论。
最后,他告诉我,虽然讨论很长,但很高兴有你在这里。 🙂
第 5 轮(F2F):
- 面试官是个严肃的人,他让我减去两个字符串,以使第二个字符串中的字符应该从第一个字符串中删除(就地)。假设字符串为 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’;
- 他对我的解决方案很满意,然后要求讨论一个设计问题。
然后他让我设计一个 MC-Donalds 的订单管理系统。有哪些 API 可用,它们是客户端、服务器以及厨房如何了解新订单。
然后在 5 分钟后我们得到了结果,这真的是一个非常自豪的时刻。
提示:你需要有很大的耐心,因为面试需要很多时间。这是一个12小时的过程,所以要冷静和耐心。所有最好的朋友……
微软的所有练习题!