美团前端一、二、三面(已hr面、28号通关)

可能因为之前拿到过美团的实习offer,所以我这边美团秋招的流程特别快,投递之后还免除了笔试。

25号下午1面,1面完二面面试官直接给我打电话约当天晚上面了二面。面完二面后,面试官让我别退出牛客那个房间,他看看主管有没有空直接来面我,但是那天主管没时间,就约在26号晚上三面了,三面完后20分钟hr就打电话约hr面了。
28号新增,已收到意向书

一面

感觉面试官心情不太好,说话有气无力的,我自己最近也感冒了,说话也有气无力的,两边就面无表情的一个问一个答吧。还有点印象的题目:

  1. vue响应式原理,然后vue3.0和vue2.0实现响应式的区别,以及如何在vue中给对象新增的属性增加响应式(应该是$set?)当时忘记这个api了,我说的是有个api可以添加响应式,我具体记不得是哪个了,但我可以通过Vue.util.defineReactive来添加响应式。

  2. cookie和localstorage的区别(主要因为我简历上写了这两块的一些内容吧,面试官还挺喜欢问的),我个人是喜欢从大小,生命周期,非跨域情况下cookie是默认携带,cookie可以是http-only等方面对比。(从这些很容易就聊到跨域的解决方案,http状态码这些内容)

  3. 因为我简历上写了熟悉常见web开发协议,面试官就问我啥叫常见web开发协议。我回答:我主要想表达的常见的应用层协议,比如http、websocket,http包括1.1和2(如果面试官真要问起来,p2p中的sdp、Quic这些也不是完全答不出来,但我不想给自己挖坑了)。面试官就问我http状态码,我就说了些典型的:101、200、204、206、301、302、304、307、308、401、403、404、416(具体解释自查吧,写这些太长了,我打算讲5**系列的时候,面试官终止了= =)。然后让我讲讲协议升级的流程,这个知识点我就说就是两边设置一些相关的头部啊,然后最主要的是Upgrade头部,以及状态码101(可能没答对吧)。

  4. 手撕代码题:

    1. 写个对象比较函数,要考虑所有类型的对象。我就手写了基本的,即基本类型直接比值,引用类型比较他们属性的kv值,碰到对象类型的属性则递归的比较。但是面试官不太满意,他希望我能把所以情况考虑进去,他就问我js的基本类型,我回答booleannullundefinedstringnumberSymbolBigInt(es2020?)。他接着问我内置的引用类型,这个时候我悟了,他想我让我考虑到引用类型是DateRegExp等内置类型的情况。我试着写了些,觉得好像太麻烦了,而且感冒咳嗽的太不舒服了,就说了要不这题我们跳了吧,我不想写了。。。(我本来以为这次铁挂了= =)

    2. 面试官又问了一个算法题,给几个字符数组,然后把从各个数组中取一个字符,拼出来的字符串全排列,一个简单的回溯(可能这题写的很快,外加写完,直接写了测试用例,一次ac,让我起死回生了?)

最后,面试官问我有没有啥想问他的,我就反问了,手撕代码第一个题,如果考虑所有的情况的话,让你来写,你觉得100行写的完吗,面试官回答差不多100行吧,这题主要是想看看你对js的类型了解的充不充分。最后我说感觉考虑所有情况,要写的条件判断实在太多了,不适合面试写。

二面

基础知识不记得了。

手撕代码题:如果一个已经封装好的log函数,log函数中是一个接收一个callback,log赋值了一个count的变量,初始值为0,每次执行log会有count++。然后log函数内部是用一个setTimeout第一个的函数中,执行了一个console.log(count),然后执行传入的callback,setTimeout的延迟时间是一个随机数。让我调用这个log函数顺序打印0-100。

我把题目想复杂了,我用一个一个promise封装了log,然后再把resolve作为log的参数传进去,然后用await等待promise状态成功

for (let i = 0; i <= 100; i++) {  await new Promise((resolve) => {  log(resolve);  }) }

但是实际上,这题只需要把log作为callback传入就行。

闲聊环节,二面面试官先问我为什么没去实习,我回答学校导师不让等等,面试官继续问我拿到offer后想不想去他们那儿实习之类的。之后二面面试官,就让我等几分钟,他去问问主管今天有没有时间面我。

这个时候刚好百度搜索的前端经理打电话来,问了我两个问题:

  1. 给我提前批offer,有多大概率去,我如实说那得看我秋招快结束的时候,横向对比下手头的offer呀,但是同等待遇,或者说待遇稍微差一些,我肯定优先考虑百度啊,毕竟我的前端自学之路是从"百度前端技术学院"起步的。

  2. 想不想去她们百度搜索实习之类的。

  3. (感觉自己好蠢,其实明明一个正式的意向书都没拿到手,应该先化身舔狗拿下offer?)

接完电话,发现刚刚美团的二面完麦还没关。。。最后二面面试官说今天主管没时间了,改约26号晚上三面了

三面

主管看起来好凶,全程他都不苟言笑的,比一面面试官还凶。

  1. 上来让我讲讲学计算机的经历,就很抽象,我就讲我本科学的信安,学了哪些东西,然后毕业之后做了一年的java后台开发,以及为什么离职考本校的研,还有为什么从后台转前端了(无它,纯粹爱好)。

  2. 让我比较koa和spring mvc。我答得他很不满意。。我说java后台这块好几年没碰了,简历上有个项目用spring boot纯粹是因为上半年一个项目,因为疫情半年没干活,师兄毕业跑路了,我被前端后台一起写救急了,要论理解的话,现在来说我对koa的理解肯定要比spring mvc深刻很多。

  3. 然后就大概讲了一遍koa源码怎么实现的吧。然后他问我,用过koa的那些组件(我理解的是想问我用过哪些中间件吧),我就大概讲了下koa-router、koa-bodyparser、koa-passport,以及它们的功能。

  4. 然后我的第二个项目,一个微信小程序,就问了下我微信小程序的原理(这块我答的不是特别好,就不写自己的答法了)

  5. cookie和localstorage的区别。从这聊到跨域解决方案,我详细介绍了下CORS(包括里面的头部设置那些,以及服务端要开放的一些能力)、JSONP、正向代理、反向代理,postMessage等方案,然后我说了我最喜欢是用正向代理解决前后端分离下的跨域问题。

  6. 让我详细描述正向代理,反向代理。

  7. 然后聊我自学前端的经历,我就说自己是跟着百度前端技术学院学,边学边啃书吧,然后学js的时候,为了熟悉语法,也会用js刷一些算法题,算起来坚持了一年多吧。之后,就开始对着框架文档学框架,这个时候面试官就打断我,问我学了哪些框架,我回答vue、react、koa、electron

  8. 对比下electron和小程序的实现的原理。我从运行环境解释的,(以下内容不保证正确),

    1. electron是在chromium环境下集成了node环境,通过chromium轮询node中的backend_fd,来查询是否有新的事件,如果有则会用postTask加新时间加入chromium的事件循环。

    2. 小程序的运行环境就比较复杂了。因为electron跨端都是跨的桌面端,所以它在mac、windows、linux环境其实都是chromium+node。小程序分ios、andriod和桌面开发者工具。其中ios和andriod端都不起是集成的node能力,而是集成的weixin调用的一些native能力,然后桌面开发者工具环境,其实跟electron比较接近,只是它是用nw写的,最后比较了下nw和electron

  9. 除了上面讲的这些,你还会啥,我讲了下ts,但我说明了,我只是学过,没有大规模用

  10. 浏览器下的不同标签页如何通信,我回答1.postMessage Api,2.共享缓存区(双方约定对同一个localstorage来进行一定的操作)

  11. 最后就问我是哪里人、愿不愿意去北京、以及他们组是干啥的。。。

  12. 反问环节,我就问了下如果让面试官自己来答比较koa和spring mvc,他会如何回答,然后面试官建议我去看看egg.js

总结:第三面有点像压力面,主管抓着一个点就一直问。我一度以为我肯定挂了,但是没想到20分钟就接到hr电话了。


#面经##校招##美团##前端工程师#
全部评论
请问拿到offer了吗,我已经等好些天消息了,是不是凉凉了
1 回复
分享
发布于 2020-08-27 14:09
楼主是哪个部门啊
点赞 回复
分享
发布于 2020-08-27 12:55
联易融
校招火热招聘中
官网直投
北京的基础架构吗?感觉这三面好难啊
点赞 回复
分享
发布于 2020-08-27 13:15
太难了吧,楼主学得好扎实
点赞 回复
分享
发布于 2020-08-27 14:01
大佬厉害👍👍
点赞 回复
分享
发布于 2020-08-27 15:05
tql
点赞 回复
分享
发布于 2020-08-27 16:04
我是22笔试,然后26一面,27二面,28约了hr面😂不知道美团hr面会不会刷人
点赞 回复
分享
发布于 2020-08-27 23:27
求求你给我们一点offer空间吧
点赞 回复
分享
发布于 2020-08-28 20:54
楼楼正向代理,反向代理怎么理解的啊
点赞 回复
分享
发布于 2020-09-01 13:43
我估计三面和你一个面试官 全程冷漠脸 一面面试官说那个主管是做Linux出身得
点赞 回复
分享
发布于 2020-09-03 20:45
楼主,二面的把log作为callback传入具体是怎么写的呀
点赞 回复
分享
发布于 2020-09-03 23:32

相关推荐

滴滴一面总结1、js有几种数据类型?有什么判断数据类型的方法?2、原型、原型链、继承怎么理解的?3、js的作用域有几种,怎么理解?let和const,var的理解,写一个题(for&nbsp;(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&amp;lt;&nbsp;5;&nbsp;i++)&nbsp;{&nbsp;setTimeout(()&nbsp;=&amp;gt;&nbsp;console.log(i),&nbsp;0)&nbsp;}for&nbsp;(let&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&amp;lt;&nbsp;5;&nbsp;i++)&nbsp;{&nbsp;setTimeout(()&nbsp;=&amp;gt;&nbsp;console.log(i),&nbsp;0)&nbsp;}打印结果是什么、为什么?结果是5个5和12345)4、你知道那些ES6新的特性?举例子说一下?promise、Generator、async/await它们之间的关系5、浏览器的事件循环6、写题,打印结果是什么:(1&nbsp;4&nbsp;5&nbsp;3&nbsp;6&nbsp;2&nbsp;7)console.log('1');setTimeout(() =>&nbsp;{&nbsp;&nbsp;console.log('2');},&nbsp;0)Promise.resolve().then((a) = >{&nbsp;&nbsp;console.log('3');})new Promise((resolve) =>&nbsp;{&nbsp;&nbsp;console.log('4');&nbsp;&nbsp;resolve()&nbsp;&nbsp;console.log('5')}).then(()&nbsp;=&amp;gt;&nbsp;{&nbsp;&nbsp;console.log('6');})new Promise((resolve) =>&nbsp;{  setTimeout(() = >&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;resolve();&nbsp;&nbsp;},&nbsp;100)}).then(() = >&nbsp;{&nbsp;&nbsp;console.log('7');})7、写题:多重数组扁平化8、css有哪些布局?说一下flex布局和属性;说一下定位属性position9、说一下对BFC的理解10、数据机构,二叉树的中序遍历?栈和队列的区别是?11、写题,手动实现数组的filter和reduce方法12、浏览器的存储时间:3/27 #滴滴#&nbsp;&nbsp;#前端面试#
点赞 评论 收藏
转发
3 50 评论
分享
牛客网
牛客企业服务