美团前端实习一面

美团前端实习一面3.16 5:00-6:00左右
感觉面了很多面试题,自己试着回想一下吧。

  1. 项目相关

首先上来自我介绍+项目介绍完成,还是问项目中的微前端的qinakun框架使用流程以及一些怎么在父应用中使用子应用。

目前可以实现微前端技术有哪些方式,qiankun、iframe、single-spa,以及它们的区别和优缺点。

  1. history路由是如何实现的(底层实现),与hash路由的区别,以及各自的优缺点。

hash模式

hash优点:

(1)只需要前端配置路由表, 不需要后端的参与
(2) 兼容性好, 浏览器都能支持
(3) hash值改变不会向后端发送请求, 完全属于前端路由

hash缺点:

存在一个#,url不美观

history模式

优点:
(1) 符合url地址规范, 不需要#, 使用起来比较美观
缺点:
(1) 在用户手动输入地址或刷新页面时会发起url请求, 后端需要配置index.html页面用户匹配不到静态资源的情况, 否则会出现404错误
(2) 兼容性比较差, 是利用了 HTML5 History对象中新增的 pushState() 和 replaceState() 方法,需要特定浏览器的支持.

  1. vue的v-model指令即双向数据绑定是如何实现的?Object.defineProperty()和new Proxy()实现双向数据绑定的区别以及优缺点。

  2. vue中怎么观察data数据变化的,在什么时候观察到的(created()之后?)

  3. 深克隆浅克隆?区别以及怎么实现一个深克隆

数组:[…arr] 、Array.from(arr)

对象:用for in遍历key,然后用JSON.stringify()和JSON.parse()来实现对象的克隆(这里主要考虑到value值也可能是个复杂数据类型对象形式)

6.宏任务微任务(听都没听过,这啥呀这是!)

异步任务之间,会存在差异,所以它们执行的优先级也会有区别。
大致分为 微任务(microtask,如:Promise、MutaionObserver等)和
宏任务(macrotask,如:setTimeout、setInterval、I/O等)。

1、setTimeout 定时器,属于js任务队列里的宏任务。
指的是把任务队列塞进执行栈里等待执行线程依次执行。虽然可以把它设置为0,但是仍然需要等待本轮执行环境里面的 所有同步和异步任务 执行完毕之后才会去执行它。

2、promise es6的异步语法,属于js任务队列里的微任务。
在执行本轮宏任务的过程中,如果遇到promise,会将其塞入本轮执行过程的微任务,待本轮宏任务执行完毕之后,才会执行它。执行完毕之后,开始执行下一轮任务队列。

总结:

(1)存在微任务的话,那么就执行所有的微任务

(2)微任务都执行完之后,执行下一个宏任务

  1. 了解Promise吗?读代码写输出:
console.log("start")
setTimeout(() => {//宏任务
    console.log("ddd")
}, 0)
new Promise((resolve, reject) => {
    console.log("eee")  //这是个同步代码,会立即执行的
    resolve(22)
}).then(() => {//微任务
  console.log("fff")  
}).then(() => {
    console.log("ggg")
})
console.log("end")//完蛋我写错了
// 正确顺序是start  eee  end   fff   ggg  ddd
console.log('script start')

async function async1() {
  await async2()
  console.log('async1 end')
}
async function async2() {
  console.log('async2 end')
}
async1()//执行这个函数的同时,依然在执行之后的代码,因为并没有await async1(),只是async1函数中有await

setTimeout(function() {
  console.log('setTimeout')
}, 0)

new Promise(resolve => {
  console.log('Promise')
  resolve()
})
  .then(function() {
    console.log('promise1')
  })
  .then(function() {
    console.log('promise2')
  })

console.log('script end')
script start
async2 end
Promise
script end
async1 end
promise1
promise2
setTimeout
  1. new之后都执行了什么操作

9.实现跨域的几种方式,及其优缺点

Jsonp方式有什么缺点?

jsonp的缺点:http请求只 支持get方法;jsonp在调用失败的时候不会返回各种HTTP状态码

  1. css的定位,有几种,分别阐述下区别

  2. 算法题:返回最长的不重复子序列长度:

比如:

[1,2,3,4] 返回4

[1,1,3,2,2,4] 返回3

思路:用map做

12.反问:什么时候知道面试结果(1周内)+还需要提升哪(底层实现原理能力)+你有博客文章输出吗关注下大佬(推荐用掘金)

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

veggie_a_h

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值