阿里一面(凉经)
阿里一面(50min)
由于没有笔试就直接约面了, 在一开始出了一些题目让你写(30min)。笔试完后进行电话面试(20min左右)
面试题如下
一开始就问了项目, 看我简历上有三个项目大概简单介绍了一下然后让我挑一个我比较满意的项目拿出来讲, 说说项目中有哪些难点以及怎么实现的
如何阻止dom的事件冒泡
说说babel的运行原理?
说说状态码302/304/403/500各自代表什么?
谈谈类继承以及和es5继承的区别
谈谈对position属性的理解? 它的作用是什么?
箭头函数的this指向
框架部分就问了react, 一上来就问了react-router-dom的源码实现(寒假看过一点, 现在基本忘光了)
最后面试官说对我网易云项目的歌词滚动实现很感兴趣,让我详细介绍了一下。
还有些不记得了, 总之问题之间跨度很大比较杂
反问阶段:
问了技术栈, 她回答说阿里用的都是react并且公司里面有自己基于react封装的框架(rack)????
没听过
笔试题如下
手写一个邮箱正则匹配
由于邮箱规则比较多, 也不经常用, 不会
函数柯里化
函数add(a,b)可以返回a与b之和, 请修改add函数,使得add(a)(b)得到相同结果
function newAdd(...args){ if(args.length===2){ return args[0]+args[1] } else{ return function(...res){ return newAdd(...agrs,...res) } } }
获取一个数字数组中的最大值
很简单, 直接用原生的sort方法就行
匈牙利命名字符串和驼峰命名字符串互相转换
用的正则写的, 如下
function parseStrToCamelCase(str){ return str.replace(/_(\w)/g,($,$1)=>{ return $1.toUpperCase() }) } function parseStrToHungarianNotation(str){ return str.replace(/[A-Z]g/,$=>{ return "_"+$.toLowerCase() }) }
简单实现事件订阅机制
class EventEmitter{ constructor(){ this.eventArr = [];//每一项是对象, 对象有name属性和callbacks }, on(eventName,callback){ const res = this.eventArr.find(it=>it.name===eventName); if(res){ res.callbcaks.add(callback) } else{ this.eventArr.push({ name:eventName, callbacks:new Set([callback]) }) } }, emit(eventName,...args){ const res = this.eventArr.find(it=>it.name===eventName); if(res){ for(let callback of res.callbacks){ callback(...args) } } } }