1.get和post请求在缓存方面的区别
post/get
get请求类似于查找的过程,用户获取数据,可以不用每次都与数据连接,所以可以使用缓存。
post不同,post所做的一般是修改和删除的工作,所以必须与数据库交互,所以不能使用缓存,因此get请求适合缓存。
2.说一下闭包
闭包就是能够读取其他函数内部变量的函数,或者子函数在外调用,子函数所在的父函数的作用域不会被释放。
3.如何解决异步回调地狱
promise
generator
async/await
4.说说前端中的事件流
html中与JavaScript交互是通过事件驱动来实现的,例如鼠标点击事件onclick,页面的滚动事件onscroll等等,可以向文档或者文档中的元素添加事件监听器来预定事件。
什么是事件流:事件流描述的是从页面接收事件的顺序,DOM2级事件流包括下面几个阶段:
事件捕获阶段
处于目标阶段
事件冒泡阶段
addEventListener:addEventListener 是DOM2级事件新增的指定事件处理程序的操作,这个方法接收3个参数:要处理的事件名,作为事件处理程序的函数和一个布尔值,最后这个布尔值如果是true,表示在捕获阶段调用事件处理程序,如果是false,表示在冒泡阶段调用事件处理程序。
ie只支持事件冒泡
5.如何让事件先冒泡后捕获
在DOM标准事件模型中,是先捕获后冒泡,但是如果反向,对于同一个事件,监听捕获和冒泡,分别对应相应的处理函数,监听到捕获事件,先暂缓执行,直到冒泡事件被捕获后再执行捕获之前的操作。
6.事件委托
事件委托是指,不再事件的发生地上设置监听函数,而是在其父元素上设置监听函数,通过事件冒泡,父元素可以监听到子元素上事件的触发,通过判断事件发生元素DOM的类型,来做出不同的响应。
比如:在ul上添加事件监听,不在li上添加事件监听。
7.图片的懒加载和预加载
预加载:提前加载图片,当用户需要查看时可以直接从本地缓存中渲染。
懒加载:懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数。
两种技术的本质:两者的行为是相反的,一个是提前加载,一个是延缓甚至不加载。
懒加载对服务器前端有一定的缓解压力的作用,预加载则会增加服务器前端压力。
8.mouseover和mouseenter
**mouseover:**当鼠标移入元素或其子元素都会触发事件,所以有一个重复触发,冒泡的过程。对应移除mouseout;
**mouseenter:**当鼠标移除元素本身会触发事件,不包含元素的子元素,没有冒泡过程。对应移除mouseleave;
9.js的new操作符做了哪些事情
new操作符新建了一个空对象,这个对象原型指向构造函数的prototype,执行构造函数后返回这个对象。
10.改变函数内部this指针的指向函数(bind,apply,call区别)
通过apply和call改变函数的this指向,他们两个函数的第一个函数都是一样的表示要改变指向的那个对象,第二个参数,apply是数组,而call则是arg1,arg2这种形式。
刷面试题
刷题的重要性,不用多说。对于应届生或工作年限不长的人来说,刷面试题一方面能够尽可能地快速自己对某个技术点的理解,另一方面在面试时,有一定几率被问到相同或相似题,另外或多或少也能够为自己面试增加一些自信心,可见适当的刷题是很有必要的。
-
前端字节跳动真题解析
-
【269页】前端大厂面试题宝典
最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。