相关链接:
一图搞定前端面试之基础篇
【前端面经】2023面试复盘之美团
【前端面经】2023面试复盘之小红书
【前端面经】2023面试复盘之字节跳动
【前端面经】2023面试复盘之蚂蚁金服
【前端面经】2023面试复盘之快手
结论
❌️未通过
本来是抱着海投的目的让同学给内推了目前他们部门唯一一个高阶点的岗位,但面试的体验确实挺让人难受。感觉聊项目的时候想要一个架构师,但是问技术问题的时候又想要一个主力开发,还挺矛盾。不知道是不是部门的原因,无论是面试官的状态还是关于团队和部门的介绍,都给人一种日薄西山的感觉,再没了阿里往日的那种生气。
一面
总时长:35min
感觉是今年面试体验最差的一次,最开始约面的时候也没有邮件,只有电话约了面试时间,到了面试的时候才发现必须要我装一个钉钉才行😓......公司里的网下载比较慢,好不容易下载完成之后发现我的账号太久没有登录需要我手机钉钉扫码才行,但是我也没有手机钉钉啊😓......于是说要用手机面,然后我的手机电量又不太够了,跟面试官说能不能用微信,面试官回复阿里的电脑不能装微信😓......最后我只能去找了个充电器给手机冲上,开始面试的时候就发现时间已经过去了15min......
面试的内容体验也不是很好,不太清楚面试官到底想问什么,要招一个什么样的人。技术问题自认为答得还不错,不过项目上的复杂度估计不太符合面试官的预期,最终也是今年面试最快结束的一次。
介绍一下最近工作经历中架构上比较复杂的项目
这个问题有点不知道怎么回答,因为最近一段工作经历主要是做内部创新,尝试了很多不同的方向和项目,并且在开发中都尽可能的去基于开源项目去二次开发,所以也没有什么架构上特别复杂的项目。
一开始就着项目中相对复杂的功能点做了介绍,但是面试官说这不是他想要的,于是又介绍了一个架构相对复杂,不过是基于开源项目二开的项目。
说一说Promise的实现
讲了一下Promise实现的几个关键技术点:
- 重点是需要实现
Promise.then
方法- 维护一个
fullfilled
的事件队列和一个rejected
事件队列- 在
Promise.then
方法里需要判断一下当前Promise的状态以及参数类型- 最后需要实现两个事件队列的自执行,用来处理链式调用的情况
- 在执行方法时使用
setTimeout
模拟异步任务
为什么要用setTimeout
主要是为了模拟Promise的异步执行,在NodeJS中使用
process.nextTick
会更好,因为Promise的异步属于是微任务,而setTimeout实际上是宏任务,并不够准确。
另外讲了一下浏览器的事件循环机制:
- JS线程会同步的执行代码,当遇到异步任务的时候,会通知浏览器的其他线程(如定时器线程)去执行异步的任务,同时把异步任务的回调放入一个事件队列中
- 当同步的代码执行完成后就会去执行异步事件队列中的回调任务
- 异步事件队列中的任务可以分为宏任务和微任务,宏任务主要指依赖外部线程的异步任务,微任务不依赖外部线程
- 在执行异步事件队列时,始终优先执行微任务,即若队列中有微任务则执行微任务,否则才执行宏任务
- 当异步事件队列为空时,一次事件循环结束