原本一面约的是45分钟 面完整个过程大概一个小时多一点,大概可能是因为中间有一些问题进行了一些讨论,因为不太记得题目顺序了,就想到什么问题就写什么问题了,顺序不重要!先问题然后再手写代码
自我介绍
怎么接触到的前端呢
学习方式有哪一些?视频 博客 书籍 项目中运用
实习主要做了些什么? 主要做哪些项目?tob的也有toc的也有,然后根据实习里的组件库项目讨论了一下jest测试用例 覆盖率等等
面试官说问一些基础的
css 中 bfc了解吗 说一下是什么 有什么应用场景
说一说箭头函数? 说完了问 箭头函数的原型函数是什么 一时间脑子不清醒 没答上来 然后面试官说换一个思路 先说一下new操作符 答到new操作符不能去new箭头函数 所以猛的想起箭头函数是没有原型对象 面试官就说是对的
js的事件模型哪几个阶段都了解吗?那是先捕获阶段还是先冒泡阶段?
浏览器的本地存储有了解吗?回答cookie和storage 存储大小 过期时间等等 又问了问存储大小具体?回答cookie 4kb左右 ,storage有几mb
https和http ?讲了混合加密过程和ssl证书数字签名等等。
react hooks 在if判断中使用会怎么样?当时也没想清楚 面试官又说那我们也换一个思路 刚刚你说你了解react源码 那对它的fiber架构有了解吗 我简单说了一下任务的优先级
反问那fiber是一个什么数据结构?我说是树结构 面试官说不对 是链表结构 如果if语句去调hook 会将整个结构打断的,然后基于这个和面试官讨论了一小会。
浏览器的缓存有了解吗?说了强制缓存和协商缓存。
那是用哪个字段控制的呢?
跨域问题有遇到过吗?怎么解决的呢?答完后问我实际项目和实习中遇到是怎么解决的,回答了项目里的nginx反向代理
代码题:关于this指向的问题,面试官让我说思考这个题的流程 √
代码题:关于async/await的一道,面试官本来说让我想一下然后写到边上,我说我直接说就可以说,然后他可能看我答得太轻松了就说我再想还考点啥,然后他就边想边手敲了一段代码(面试官想再考考) √
问下面这一段放在浏览器执行,会怎么样?我一开始在分析,然后分析着他就问浏览器界面会卡死吗?我也不清楚标准答案,我说宏任务队列会不断更新,如果页面已经渲染完了就不会让浏览器卡死。
const fn = ()=>{
setTimeout(()=>{fn();},0)
}
fn();
紧接着他又改了改:那下面这个会怎么样呢?我说这个会不断更新微任务队列可能导致界面卡死,他说当前这一个执行栈会怎么样,我回答可能永远不会停止所以界面卡死。
const fn = ()=>{
Promise.resolve().then(()=>{fn();})
}
fn();
我也不知道上面两题回答是否正确,面试官也没说就接着考:节流函数知道吗?封装一个节流函数。很快写完,面试官问了问里面变量的含义,没问题 √
Promise.all方法有用过吗?实现一下?手写了一个,然后有一点细节问题面试官让我改一下,参数里有不是promise情况怎么做?那想要返回的结果和入参一一对应该怎么做?
做一道算法题吧!全排列 用递归完成了 第一次输出有问题,后来有个地方改成Array.from(),然后就a了,面试官问为什么会这样?答了一下from实现浅拷贝。
反问:对我之后学习的一个建议?说也没什么特别的建议,现在肯定不如那些工作经验几年的,以后在业务场景不断提升自己就好了。
反问:技术栈,字节90%都是react
反问:应该对最近微前端,webgl,低代码那些去学习一下吗?回答说,都是根据业务场景再去选择用什么的,在日新月异的环境应该打牢基础,这样学一个新的东西才会更快,低代码包括微前端都有局限,只是加快效率。
总结:整个面试的体验特别好特别好,面试官遇到我一时间没答出来的也让我别紧张,然后引导我去解开,感觉更加是看重思考问题的能力,很多地方都有豁然开朗的感觉。面完不到一个小时就给结果进二面了。