微软是我所有面试经历中氛围最好的, 以算法为主, 但我认为主要考察的是你的理解和交流沟通能力, 代码能力次要.
7.25一面
7.28二面
7.31三面
一面
面试官说看我简历上前端的东西写的挺多的, 还有一些ACM经历, 所以这次就不问算法了, 连自我介绍都省了, 直接手搓一个项目出来, 实现具体需求.
正好本地有一个项目, 直接新建了一个vue页面写进去了. 主要技术栈是Vue3+Windicss+Element Plus+TS
- 写一个页面左3/10, 右7/10
- 加上header固定100px, 内容改为分成3:4:3
- 使右边可以收缩或者展开(通过一个按钮)
- 收缩后最小宽度为20px
- 加入一个平滑的动画
- 这是一个交流平台
- 消息的交互可以怎么做? -> 答: 轮询. 面试官说还可以是长连接
- 我没有做过长连接, 现在让我实现一个接口
- 对客户端以长连接的方式去进行使用, 也就是只建立一次(以便于项目后期修改为长连接的方式)
- 对组件内部通过轮询的方式接受数据(通过异步操作模拟服务端发送新消息)
实现到这里时间正好一个小时, 就没有继续实现下去了.
二面
这一面算法为主, 因为有ACM经历所以面试官问的相对深一点, 要做好心理预期(但是我已经一年没怎么写算法题了QAQ). 我就不放具体题面了说一说考察点吧.
- 考察贪心 / 思维逻辑
- DFS / 进制思想 (没答上来)
还有一些口答题
- 堆的特点
- 小根堆为例, 如何插入, 如何删除
- 排序算法有哪些
- 快排, 归并, 堆排序的时间空间复杂度
- 树有哪些
- vue的diff算法?
- diff算法简单说了一些, 后来交流的时候回忆起来一些又说上了
剩下就是一堆闲聊反问时间, 多交流.
三面, 挂
- 关于简历中的一些问题
- 我提到了在运维技术中心的相关工作
- 关于项目的一些问题, 有什么难点怎么解决
- 在描述中我提到了浏览器事件循环机制等
两个编程题
- 实现一个栈, 能够O(1)的查找到最小值
- 讲一个完全二叉树原地展开为一个链表(没写出来)
最后就是后悔死了, 现场没理解好第二个题的意思, 不难但是重在看你的沟通和理解能力