阿里饿了么前端三面
- 介绍自己都做了什么项目以及背景
- 介绍一下项目难点
- src是一个普通的url和base64图片的区别?
- vue和js有看过什么源码
- vue双向绑定,全家桶vuex,router都有看过
- promise的源码也都有看过
- 口述promise实现过程(啊,,,差不多讲了8分钟吧,面试官叫停了,说差不多了)
- 说说Promise.all,race,any的区别
- 两个函数返回值的区别
function func1() { return [1, 2, 3] } function func2() { return Promise.resolve([1, 2, 3]) } let res1 = func1() let res2 = func2()
下面两种写法的区别
console.log(123); // 直接执行 setTimeout(() => { console.log('123'); //0s后把回调放入队列里面,等主线程空闲取出执行 }, 0)
讲讲js的事件循环
es6的class里面的继承)
- 什么是super
- 如果不写这个super会怎么样?报错?为什么?从继承和实例的关系想想?我还是不会....
- 讲讲
prototype
和__proto__
,原型 - 讲讲闭包
- 作用域链下自然的产物
- 大量引用闭包会增大内存
- 被引用的变量不会在函数执行完后马上被销毁
- 匿名函数传参调用实现块级作用域和柯里化函数都利用了闭包
- 讲讲ajax,axios,fetch,xmlHttpRequest
- 讲了一下axios的拦截器功能
- axios请求返回的是一个promise对象,你如何自己利用xmlHttprequst实现一个类似的功能?promise包一下就行
function myRequest() { return new Promise((resolve, reject) => { var xmlHttp = new XMLHttpRequest() xmlhttp.open('GET', url); xmlHttp.onreadyStateChange = function () { if (xmlHttp.readyState == 4) { if (xmlhttp.status >= 200 && xmlhttp.status < 300 || xmlhttp.status === 304) { resolve(xmlhttp.responseText) } } else { reject(xmlhttp.status) } } }) }
- 刚刚的onreadyStateChange和onload的区别
- 状态是4的时候也可以使用onload
- vue2和vue3
- vite
- defineProperty和proxy
- watcheffect
- 引入组合式API的概念
- vue2和vue3的domDiff有改动吗?
- 我不太清楚有没有改动
- 那你说说domdiff和直接操作dom有什么区别
- 说说reflect这个api,为什么proxy要结合reflect进行修改
- 容错处理更强,会直接返回布尔值
- commonJS和esModule的区别
- 一个是运行时加载,一个是编译时加载,可以做一些优化
- esModule可以成为浏览器和服务器通用的一个解决方案
- 那你说nodeJS里面用esmodule引入导出模块需要进行什么配置(???)
- 我很懵,面试官说可以babel,编译,配置,修改后缀...
讲讲三次握手的全过程
经典问题了哈哈哈 ,答得非常教科书,才讲到第一次握手面试官就说嗯嗯,差不多,叫停http2的新功能
- 服务端推送,多路复用,头部压缩,二进制
扩展专业知识
爬虫,数据可视化,机器学习测试数据集等等大数据当中涉及到矩阵相关的计算怎么处理的?(并行进行处理)
常见的归一化方案,值域的收敛怎么做的(孩子不知道啊..)
终于到了反问环节QAQ!
- 问了面试官对目前流行的前端全栈工程师怎么看(答:我不认为全栈是一个特别好的发展方向,该把自己该做的方向做到最好再去考虑后面的,并且不认为nodejs是一个特别有深度的后台技术)
- 最后问我的后续规划
- 继续学react和小程序,typescript这些我还不是很熟的