一面之前大概几天整个人其实很紧张,复习了好几天,周二下午开始了,面试开始的时候,其实没有那么紧张了,就开始了面试之路,啦啦啦啦啦
Q:了解过js的数据类型吗
答:…说的挺完整的
Q:怎么判断是数据类型
答:typeof和instanceOf,布拉布拉
Q:说一下 == 和 === 的区别及用法
答:布拉布拉
.Q:看一下这个能不能弹出
if ("0") { alert( 'Hello' ); }
答:可以弹出Hello
.Q: for in 和for of的区别
答:因为忘了一些,就说了一下map和forEach
q:那forEach可以打断吗
答:不可以Q。。。。
.Q:了解那个深拷贝吗?大概说一下
答:说了一下递归的,手写了一个代码
Q:除了递归的还会其他方法吗,简单的两三行代码
答:emmm,不会了,还没有了解过
.Q:看一下这个打印的顺序
<form onclick="alert('form')"> <div onclick="alert('div')"> <p onclick="alert('p')"></p> </div> </form>
答:我就说这个应该是事件冒泡,p->div->form,也不知道对不对
Q:看一下这个题输出
let promise = Promise.resolve(); promise.then(() => alert("1")); alert("2");
答:先是2,再是1,布拉布拉
Q:关于promise主要用那些API
答:就之前用过then和promise.all
Q:那promise.all主要实现的功能是什么
答:布拉布拉布拉
Q:那它里面的promise是串行还是并行执行呢
答:并行的
Q:看一下这个继承的题吧
let animal = { jumps: null }; let rabbit = { __proto__: animal, jumps: true }; alert( rabbit.jumps ); // ? (1) delete rabbit.jumps; alert( rabbit.jumps ); // ? (2) delete animal.jumps; alert( rabbit.jumps ); // ? (3)
答:这个是true -》 null -》undefined
Q:用class重写一下这个函数
function Clock({ template }) { let timer; function render() { let date = new Date(); let hours = date.getHours(); if (hours < 10) hours = '0' + hours; let mins = date.getMinutes(); if (mins < 10) mins = '0' + mins; let secs = date.getSeconds(); if (secs < 10) secs = '0' + secs; let output = template .replace('h', hours) .replace('m', mins) .replace('s', secs); console.log(output); } this.stop = function() { clearInterval(timer); }; this.start = function() { render(); timer = setInterval(render, 1000); }; } let clock = new Clock({template: 'h:m:s'}); clock.start();
答:这个题卡了好久,不会写,最后也没有写出来,面试官给我大概讲了一下,引导了好久,感觉人很好
Q:知道http返回的状态码304吗
答:终于离那个改写题远了,开始了网络。大概说了一下
Q:那知道关于缓存的head,就是http的请求头吗
答:这个当时不太了解
Q:那Cache-Control了解过吗
答:缓存控制,布拉布拉,说了一点点,不太清楚
Q:那说一下position的属性吧
答:这个简单,我就说了好多
Q:聊一下居中吧
答:说了水平,垂直,水平垂直居中,布拉布拉。
Q:那说一下css动画都有哪些
答:随便说了几个
Q:那写一个从左向右移动,延迟300ms的动画
答:就开始写了
Q:说一下浏览器渲染的过程
答:这个很熟悉,就布拉布拉
Q:那回流和重绘知道吗
答:布拉布拉
Q:有用过性能优化的东西吗
答:从css,js,缓存方面都说了一些
Q:有用过Chrome DevTools吗
答:当时没有听懂,就说不会了
Q:那最后写一个题吧
"()" => true ")(()))" => false "(" => false "(())((()())())" => true
答:括号匹配,就是利用栈进行写
const str = "()())"; let show= (str)=>{ const leftArr = []; for(let i =0;i<str.length;i++){ if(str[i]=='('){ leftArr.push(i); }else if(str[i]==')'){ if(leftArr.length==0){ return false; } leftArr.pop(); } } if(leftArr.length!== 0){ return false; } return true; }
整个面试过程感觉挺轻松的,面试官小哥哥人也很好,正在收拾东西回宿舍的时候,hr小姐姐打电话过来了,说让我准备二面,15分钟后开始二面了。