微软软件工程师 2 UI 面试
你好呀,
我最近接受了微软在班加罗尔IDC的软件工程师II职位。我意识到写一篇关于此事的博客可能会对一些人有所帮助 :)
在这篇文章中,我将带你了解我的准备工作、面试策略、面试环节以及每轮面试的注意事项。文章将采用问答形式。
免责声明:
以下事件完全基于我的观点以及我从我的经验中观察到的内容,并且可能因人而异。
首先,我为什么要在博客里写这个?
- 接到面试通知后,我在网上到处搜索微软前端领域的面试流程。结果发现资料少之又少。而且我当时对面试轮次一无所知,只能去参加面试。所以我想让其他人多了解一下面试轮次,以便他们做好准备。
- 当我在 LinkedIn 上发布我的工作变动消息时,令人惊讶的是,我收到了无数聊天请求,人们询问我的准备情况和面试经历。
我如何申请?
我把我的个人资料发布在印度著名的求职门户网站InstahyreActively looking for opportunities
上,并启用了“招聘”选项。一天晚上,我接到一个人的电话(他代表微软在一家第三方猎头公司工作),问我是否对这个职位感兴趣。事情就这样开始了……
我如何准备?
在上述面试电话之前,我参加了其他几场面试。所以接到电话的时候,我几乎已经准备好了。由于是应聘前端工程师,我复习了 JS 基础知识、Web 性能、我目前的项目以及 Leetcode。面试之前,我大概做了 240 多道 Leetcode 题目。(对某些人来说可能就是 0 道 :P)。我强烈建议所有参加微软、顶级跨国公司(亚马逊、谷歌等)以及其他顶级初创公司(Rubrik、Flipkart 等)前端工程师面试的人,都要具备足够的数据结构和算法知识。数据结构和算法是不可或缺的,因为它们是评估你解决问题能力的重要因素。附上我的Leetcode 简历供参考。欢迎关注。
前端资源?
- W3 Schools 的 Javascript、techsith 教程、你不知道的 JS
- 来自udemy的反应。
- Web 基础知识和性能
- 来自 Twitter 的最新技术更新。
在面试之前我能知道我被哪个团队录用吗?
如果你参加的是大型面试,那么你必须等到见到你的潜在招聘经理(有时,负责你经理面试的那位甚至不是你真正的招聘经理)。不过,你可以在面试前了解你将要参与的产品(例如 Azure、Office365 等)。
我如何知道我被聘用到哪个级别?
据我观察和了解,微软不会根据你的工作年限来分配你的级别。我在盲注、LeetCode 等平台上看到过很多帖子,8 岁的程序员被评为 L61,4 岁的程序员被评为 L62。所以,最终的级别取决于你的面试表现。
好了,够了,告诉我回合的情况吧!
由于 COVID-19,所有面试均通过线上方式进行Microsoft Teams
。
第一轮(机器编码):(2 小时)
作为一名前端工程师,我预计从一轮机器编码开始,面试官会给我一份问题陈述,要求我在 2 小时内完成。如果你对这个问题有任何疑问,可以咨询面试官。你可能会收到一个包含初始样板文件的 zip 文件。
示例问题:
- Design an Email Client like MS Outlook.
- Create a chat interface like MS teams.
- Create a Notification interface like MS teams.
需要注意的事项:
- 除非你彻底理解了问题,否则不要急于写答案。
- 您的问题中可能包含一些术语,请务必提出澄清问题,不要假设任何事情:)
- 使用适当的标记编写语义 HTML(不要把所有东西都变成
div
)!!! 重要 - 了解其中的利弊,如果你必须动态创建复杂的 DOM 树,使用类似的 JS API
document.createElement()
会耗费大量时间。所以,考虑一下这种方法是否适合你,或者你应该选择innerHTML
其他方法。 - 理解
flexbox
它们,grid
因为它们在创建响应式布局时会派上用场。 - 尝试使用最新的 ES6、ES2020 概念,这是一个展示您了解最新更新的平台。
- 逐步构建您的应用程序并确保提交工作代码:P
第二轮(Javascript):(1 小时)
这里对我的 Javascript 知识进行了评估。
在最初的 10 分钟内,我根据之前在机器编码环节中编写的代码,被要求讨论以下内容:
- 我为什么选择一种特定的方法?
- 还有什么其他选择?
- 为了在规定时间内完成问题,我做出了哪些权衡?
- 如果我有更多时间,我会做什么更好?
在进入下一轮之前,请检查您的代码并准备好这些问题。
之后,我被问到了一些关于 JavaScript 的问题,要求我为 ES6 或 ES2020 中引入的一些 JS API 编写一个 polyfill。对我来说,就是编写一个Promise polyfill
.
除了上述问题之外,我还被要求执行以下操作。
Promise based memoization with a given cache size behaving
as an LRU cache with an expiry time and auto cache burst
在这里,我对异步、承诺、高阶组件等 JS 知识进行了严格的考验。
第三轮(设计/HLD+LLD/):(1小时)
这一轮我被要求设计一个棋盘,因为我不知道怎么下棋😅😅,我告诉了面试官,他把问题修改成了,
Design Snakes and ladders game
我被要求编写每个类所涉及的类和方法。我并不打算在控制台中运行它。它是通过 VS Code 编辑器运行的。
对这一轮的期望是:
- 我在识别顶级类别方面有多好,以及我是否能够将任务分解成有意义的小块。
- 我用来存储数据的整体数据结构是什么?
- 代码的可读性如何?
- 我是否擅长识别极端情况?
- 我使用的架构的可扩展性如何?
第四轮(PSDS):(1小时)
这是一轮解决问题的环节。评估我的解决问题能力以及我能多快找到优化解决方案。
这里我被问了两个问题:
- 从字符串中找出所有重复字符的起始和结束索引。
const input =“hellooooloo”;
const op = getRepeated(input);
console.log(op) // [(2,3), (4,7), (9,10)]
- 下一个问题是一种
String Backtracking
方法,是上一个问题的延伸,我必须检查是否可以通过删除一个或多个重复的字母来在字典中形成一个单词。
const dictionary = {
'hellolo': true
};
const input = “hellooooloo”;
const op = canBeFormed(input);
console.log(op) // true,
// because by deleting the repeated characters of `o` we can form `hellolo` which is present in the dictionary
第 5 轮(招聘经理):(通常 45 分钟 - 1 小时)
我被问到的问题涵盖了多个方面,比如 Javascript、性能以及问题解决。这就像以上所有环节的结合。
- 他们给了我一段 JS 代码,并询问它的输出以及底层是如何工作的。(与宏队列和微队列相关)。
- 我遵循哪些策略来提高任何网站的速度?
- 网络生命力及其测量方法?
- 浏览器执行文档。
- 问题:
Space Separator, another string based backtracking question.
const dict = {
hi: true
hello: true,
world: true
};
const str = spaceSeparator('helloworld'); // "hello world"
const str2 = spaceSeparator('helloworldhi'); // "hello world hi"
const str2 = spaceSeparator('helloworldh'); // "" , as h is not present in dict we throw "" as output
我在这里为这个问题编写的代码被要求在完成后在浏览器控制台上运行,以验证其正确性。
第六轮(视情况而定):(1小时)
这是最后一轮,在这一轮获得录用也很重要。这不是噱头,因为我看到过有人在这一轮被拒的帖子。
在这里,我与一位微软总经理/合伙人级别的面试官进行了交流。这一轮面试可以很简单,比如了解你的兴趣爱好和你之前的项目,也可以了解复杂的数据结构。对我来说,后者更适合我 :P
面试从介绍和我的自身背景开始,最后变成了一道数据结构题。面试官要求我编写以下程序。
这是一个有趣的问题,也是我在这次采访中第一次遇到的问题。
Consider you are getting millions of tweets per second,
you have to alert whenever a particular word is repeated
billion times in any 1 hour time frame (moving window)
- 我必须决定每条推文的数据结构。
- 我必须决定如何将它存储在我的记忆中。
- 我必须想出一个最佳解决方案。
下一步是什么?
现在你等着!!!
微软每个职位都有大量申请人,所以在确认你被录用之前,他们会确保评估过其他可能更合适的候选人。所以,你得等他们回来。
我花了两周时间才知道自己被选中了。发布录用通知又花了一周时间。而且,你还有5天时间接受录用通知。
总的来说,整个旅程都很顺利,我将成为 MicrosoftTeams 开发的一部分。这是一款数百万人使用的企业聊天应用程序。
太激动了!祝我好运!!!🤩🥳
别忘了关注我!😄
如果您有更多问题,请在评论部分添加,如果我知道答案,我会尝试提供输入😛
就这些了,伙计们!!!
文章来源:https://dev.to/dhilipkmr/software-engineer-2-ui-interview-at-microsoft-1i0b