58同城前端一面二面+hr面
8.31的笔试,9.1通知面试,9.2十二点一面,下午四点二面。
一面
- 自我介绍
- 将对象序列化为字符串
//{ a: 1, b: 2} => 'a=1&b=2' function stringify(obj) { let res = Object.keys(obj).map((key) => { return key + '=' + obj[key]; }); return res.join('&'); };
- 计算n个数的和,每请求一个url获得一个加数,最后返回n个数的和
//因为我说ajax的具体使用记不清了,所以异步请求部分只写了伪代码 function sum(...urls) { let arr = urls.map((url) => { return new Promise((resolve, reject) => { ajax(url).onload = function (val) { resolve(val); }; }); }); let res = 0; Promise.all(arr).then((vals) => { vals.forEach((v) => res += v); }); return res; }
- 项目中最难忘/最满意的点
二面
- display: none和visibility: hidden的区别
- HTTP状态码301 304
- new Promise时传入的参数是什么?
- 有多个请求,想等到所有请求都完成再进行后续操作,如何处理? --> Promise.all()
只要有一个请求返回响应就进行后续操作,如何处理? --> Promise.race() - ES6中声明函数的方式
- 箭头函数与普通函数的区别,箭头函数能否被call / apply / bind调用
- Set和数组的区别
- Object.getPrototypeOf(1)返回什么
- Vue中data和computed的区别
- localStorage
- 'a=123;b=jack;c=true',解析成对象,且值为true/false的,转换成布尔类型
const parse = (str) => { // TODO str = str.split(';'); let res = {}; for (let i = 0; i < str.length; i++) { let kv = str[i].split('='), key = kv[0], val = kv[1]; switch(val) { case 'true': res[key] = true; break; case 'false': res[key] = false; break; default: res[key] = val; }; }; return res; }
hr面更新,9.10hr面,感觉都是比较常规的问题,面了20分钟左右。hr面
- 自我介绍
- 介绍主要的项目经历
- 你认为对前端来说最重要的是什么
- 自己的弱势
- 平时学习的途径
- 面了几家 目前有没有offer
- 能否提前实习
- 接触前端的契机
- 对公司和团队有什么设想
- 反问环节