可能因为之前拿到过美团的实习offer,所以我这边美团秋招的流程特别快,投递之后还免除了笔试。
一面
感觉面试官心情不太好,说话有气无力的,我自己最近也感冒了,说话也有气无力的,两边就面无表情的一个问一个答吧。还有点印象的题目:
-
vue响应式原理,然后vue3.0和vue2.0实现响应式的区别,以及如何在vue中给对象新增的属性增加响应式(应该是$set?)当时忘记这个api了,我说的是有个api可以添加响应式,我具体记不得是哪个了,但我可以通过Vue.util.defineReactive来添加响应式。
-
cookie和localstorage的区别(主要因为我简历上写了这两块的一些内容吧,面试官还挺喜欢问的),我个人是喜欢从大小,生命周期,非跨域情况下cookie是默认携带,cookie可以是http-only等方面对比。(从这些很容易就聊到跨域的解决方案,http状态码这些内容)
-
因为我简历上写了熟悉常见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(可能没答对吧)。
-
手撕代码题:
-
写个对象比较函数,要考虑所有类型的对象。我就手写了基本的,即基本类型直接比值,引用类型比较他们属性的kv值,碰到对象类型的属性则递归的比较。但是面试官不太满意,他希望我能把所以情况考虑进去,他就问我js的基本类型,我回答boolean、null、undefined、string、number、Symbol、BigInt(es2020?)。他接着问我内置的引用类型,这个时候我悟了,他想我让我考虑到引用类型是Date、RegExp等内置类型的情况。我试着写了些,觉得好像太麻烦了,而且感冒咳嗽的太不舒服了,就说了要不这题我们跳了吧,我不想写了。。。(我本来以为这次铁挂了= =)
-
面试官又问了一个算法题,给几个字符数组,然后把从各个数组中取一个字符,拼出来的字符串全排列,一个简单的回溯(可能这题写的很快,外加写完,直接写了测试用例,一次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后想不想去他们那儿实习之类的。之后二面面试官,就让我等几分钟,他去问问主管今天有没有时间面我。
这个时候刚好百度搜索的前端经理打电话来,问了我两个问题:
-
给我提前批offer,有多大概率去,我如实说那得看我秋招快结束的时候,横向对比下手头的offer呀,但是同等待遇,或者说待遇稍微差一些,我肯定优先考虑百度啊,毕竟我的前端自学之路是从"百度前端技术学院"起步的。
-
想不想去她们百度搜索实习之类的。
-
(感觉自己好蠢,其实明明一个正式的意向书都没拿到手,应该先化身舔狗拿下offer?)
接完电话,发现刚刚美团的二面完麦还没关。。。最后二面面试官说今天主管没时间了,改约26号晚上三面了
三面
主管看起来好凶,全程他都不苟言笑的,比一面面试官还凶。
-
上来让我讲讲学计算机的经历,就很抽象,我就讲我本科学的信安,学了哪些东西,然后毕业之后做了一年的java后台开发,以及为什么离职考本校的研,还有为什么从后台转前端了(无它,纯粹爱好)。
-
让我比较koa和spring mvc。我答得他很不满意。。我说java后台这块好几年没碰了,简历上有个项目用spring boot纯粹是因为上半年一个项目,因为疫情半年没干活,师兄毕业跑路了,我被前端后台一起写救急了,要论理解的话,现在来说我对koa的理解肯定要比spring mvc深刻很多。
-
然后就大概讲了一遍koa源码怎么实现的吧。然后他问我,用过koa的那些组件(我理解的是想问我用过哪些中间件吧),我就大概讲了下koa-router、koa-bodyparser、koa-passport,以及它们的功能。
-
然后我的第二个项目,一个微信小程序,就问了下我微信小程序的原理(这块我答的不是特别好,就不写自己的答法了)
-
cookie和localstorage的区别。从这聊到跨域解决方案,我详细介绍了下CORS(包括里面的头部设置那些,以及服务端要开放的一些能力)、JSONP、正向代理、反向代理,postMessage等方案,然后我说了我最喜欢是用正向代理解决前后端分离下的跨域问题。
-
让我详细描述正向代理,反向代理。
-
然后聊我自学前端的经历,我就说自己是跟着百度前端技术学院学,边学边啃书吧,然后学js的时候,为了熟悉语法,也会用js刷一些算法题,算起来坚持了一年多吧。之后,就开始对着框架文档学框架,这个时候面试官就打断我,问我学了哪些框架,我回答vue、react、koa、electron
-
对比下electron和小程序的实现的原理。我从运行环境解释的,(以下内容不保证正确),
-
electron是在chromium环境下集成了node环境,通过chromium轮询node中的backend_fd,来查询是否有新的事件,如果有则会用postTask加新时间加入chromium的事件循环。
-
小程序的运行环境就比较复杂了。因为electron跨端都是跨的桌面端,所以它在mac、windows、linux环境其实都是chromium+node。小程序分ios、andriod和桌面开发者工具。其中ios和andriod端都不起是集成的node能力,而是集成的weixin调用的一些native能力,然后桌面开发者工具环境,其实跟electron比较接近,只是它是用nw写的,最后比较了下nw和electron
-
-
除了上面讲的这些,你还会啥,我讲了下ts,但我说明了,我只是学过,没有大规模用
-
浏览器下的不同标签页如何通信,我回答1.postMessage Api,2.共享缓存区(双方约定对同一个localstorage来进行一定的操作)
-
最后就问我是哪里人、愿不愿意去北京、以及他们组是干啥的。。。
-
反问环节,我就问了下如果让面试官自己来答比较koa和spring mvc,他会如何回答,然后面试官建议我去看看egg.js
总结:第三面有点像压力面,主管抓着一个点就一直问。我一度以为我肯定挂了,但是没想到20分钟就接到hr电话了。
全部评论
(11) 回帖