热乎的多益、cvte 前端面经
实在是曲折的经历。首先收到了cvte的面试通知,预约下午6点。今天下午坐车过去的时候,突然一个hr打电话来说,预约4点面试,我就奇怪了,我说我昨天预约6点,然后叫我加面试官qq视频面。我说我就在坐车去你公司,你想我现场面还是视频面,去和他们说清楚,好像对方和我也牛头不搭马嘴的。后来说视频面试,叫我加面试官qq,一加发现,多益面试官!然而我已经下车准备跑回宿舍!
cvte原先约6点,多益的通知就是突然来的hr短信叫我4点面试(没有注明公司,看见短信的时候我以为是cvte),接着发生了这一幕,双方懵逼,直到加qq我才知道一切
公共问题:自我介绍、怎么学习,简单的问题我就不说了
多益(视频20分钟)
- 最自豪的项目?遇到的难点?做了多久(新手的时候,慕课网的加强版个人demo搬出来了,vue1变换到2踩的坑,求稳就说了这个,说做了一个月)难道这点就自豪?(其实我3天做完毕设,但是在熟悉的情况下做出来的我不自豪)
- 最自豪的事情?(公司一天速成ng并能够按时或者提前完成任务)
- 前端工程化(webpack、gulp、grunt。对了给你介绍一个好东西,dva)
- webpack和gulp区别(模块化与流的区别)
- dom是什么,你的理解?(...)
- 关于dom的api有什么(...)
- css预处理器有什么,擅长哪个?(less)
- 说一下less(嵌套、组合、组合爆炸、运算、变量、混合)
- post和get区别(...)
- 我看见你写了一个js库,说一下有什么?(封装了es6一些方法原生实现、一些设计模式、常规操作)
- 看过什么书?(红书、犀牛、css权威、css世界)
- 有没有一页一页看?(重复看的只有红书)
cvte(50分钟)
- 怎么学习前端->其中说了社区互相交流->那你有没有参与社区网站的开发和开源项目(没有,我只是在MDN贡献了一点)
- 公司的后端是node中间层,再发到java吗?(直接node的egg框架)那你有搞过这个项目的后端吗?(开一个接口给我自己测试)
- 怎么cors跨域跨域cors的cookie设置,安全性,接下一题(那个地址设置成我们自己那个,'Allow-creadentials'true,)
- 公司的后台对cookie的处理、xss、csrf(我只是说了过滤、反转义、httponly)
- cookie在多个页面的通信,有效和过期的区别( 单机党这就开始悲剧,反正只说了setcookie和getcookie方法,expire、登录拦截)
- nginx反代熟悉吗(我只是过了一遍文档用过)
- vuex数据流的理解(把流程图背一遍,然后用原生vue+storage和vuex做比较)
- vue双向绑定原理(MV->(文档片段节点劫持)->VM(defineproperty的set和get)->MV(观察者模式,第二阶段导致变化,发布信息publish))
- promise实现(function promise(fn),内部存放一个this.list、一个that=this和一个n=0,如果n不大于list长度就that.list[n++](that.resolve)。最后在promise函数后面放一个settimeout包住fn(that.resolve))
- 你擅长什么方面,为什么不去搞算法(因为前端有webrtc、然后到webar,需要很强数学基础)
- 手撕assign的深拷贝(太急不审题、递归拷贝得太深,事后我和他都吐槽)mac电脑的键有点不一样,出丑了一分钟。男面试官:其实这个题目挺有意思,每个人都有不同的方法,而且处理不同的数据类型,以及不同的递归深度控制...........(早知道我看看lodash源码的深拷了,我觉得最完美的深拷但是只是mark没有看)
多益的比较看重经历,技术问题都简单。
cvte比较看重的是node中间层、http那块,我擅长的设计模式、手撕源码都没有具体问到,而且是我自己引开的话题,又被他带回来http这块,然后我答的比较普通,然后他给我科普,难受。反正是必死的了,在答cookie这块看出他不满意。
多益这波,我中途跑回去是有点冲动了,其实白跑了,在车上也可以视频面试,然后cvte又迟到又气喘吁吁地排队,刚刚好是最后一个
现场写的:
function copy(obj){ var temp if(obj instanceof Array){ temp = [] var i = obj.length while(i--){ temp[i] = copy(obj[i]) } return temp }else if(obj instanceof Object){ temp = {} for(var x in obj){ temp[x] = copy(obj[x]) } return temp }else{ return obj } }
附带心中完美的答案jQuery的extend:
$.extend = function(){ var len = arguments.length var target = arguments[0]||{} var i = 1 if (typeof target !== "object"&&typeof target !== "function") { target = {} } if(i==len){//给本身或者实例扩展 target = this i-- } //任意对象 for(;i<len;i++){ for(key in arguments[i]){//遍历对象:arg2之后 console.log(key) target[key] = arguments[i][key] } } return target }
其实,他们是要我手撕jQuery的extend,还是我自己太急不审题,快要做完的时候发现,人家给的参数是:
类似这样子deepClone({a:1},{b:2,c:{d:'hello cvte'}}),就是要我实现es6的assign和jQuery的extend嘛,我居然......,然后又被引出了数据类型的问题......