0. 模拟面试重点:(每个学员问10个问题,答对6个及格,在云表格里详细记录每位学员问的问题和回答结果。回答了6个)
1. 数组常用方法有哪些?()
1、增删:pop、push、shift、unshift2、截取:splice、slice3、顺序:reverse、sort4、联结:concat5、变态:join、toString6、查找:indexOf、lastIndexOf、findIndex、find、includes7、循环:forEach、map、filter、every、some、【可选:reduce、reduceRight】
2. new操作具体干了什么?
- 创建一个新对象
- 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象)
- 执行构造函数中的代码(为这个新对象添加属性)
- 返回新对象
3. 以自己理解讲解js堆和栈,以及深拷贝怎么解决?
堆是用来存放引用数据类型,例如对象,数组,函数栈是用来存放基本数据类型,变量和引用数据类型的地址值; 体积小,数据经常变化深拷贝的解决方案:1.使用js插件lodash的cloneDeep方法2.使用递归实现深拷贝3.如果数据中没有函数,undefined 可以使用json.stringify+json.parse实现深拷贝
4. 什么是同源
www.qq.com:8080/a/b/c/test.…协议 + 域名/IP地址 + 端口 + 路径 + 文件名(含后缀)答: 同源就是两个页面有相同的协议 域名 端口 就属于同源 其中只要一个不同就不同源
5. 什么是Set数据结构?如何使用Set实现去重效果
Set数据结构,类似数组。所有的数据都是唯一的,没有重复的值。它本身是一个构造函数let set6 = [...new Set([1, 2, 2, 3, 4, 3, 5])] 去重 是伪数组
6. token失效的问题【极高频面试题】
两种解决方案:1、响应拦截器里拦截到接口返回token是否过期的状态,然后判断如果过期了,就跳转到登录页要求用户重新登录,获取新的token。【这种方式比较简单、传统,建议大家可以理解记忆这一种】2、响应拦截器里拦截到接口返回token是否过期的状态以及刷新token的字段refresh_token,然后判断如果过期了,就用refresh_token重新发送获取token请求,把用新的token保存在本地存储里【这个复杂一点,知道即可】结论:面试官在问的时候可以先说第一种方法,自己之前就是这样实现的,但是面试官可能是想听第二种,就回答说知道有第二种实现方案,但是没写过,只是知道大概思路,可以把思路讲一下。
7. 什么是事件委托?
让利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行
8. JS作用域和变量提升?
作用域:变量起作用的范围 变量访问会层层往上级作用域访问直到window,称为作用域链变量提升:JS编译阶段会将文件中所有var,function声明的变量提升到当前作用域最顶端
9. 项目中,有用过数组的哪些方法?
push pop shift unshift concat reverse sort slice有遍历功能的:forEach filter some map every
10. 什么是递归?
答: 函数内部自己调用自己, 这个函数就是递归函数 作用和循环效果一样,但很容易发生“栈溢出”错误,必须加退出条件return。
11. JavaScript 有几种类型
基本数据类型:undefined、null、boolean、number、string、symbol(es6的新数据类型)引用数据类型:object、array、function(统称为object)
12. post和get的区别?
1、get的参数会显示在地址栏,不安全. 可传的数据量小 2、post传的参数不会在地址栏显示,相对安全,可传的数据量大
13. 项目中你做的优化?
1、减少http请求2、图片懒加载、路由懒加载3、使用精灵图4、在html顶部引入css,在底部引入js5、缓存数据,减少作用于链查找6、减少DOM操作7、使用CDN加速
14. 增 删 改 查
这些操作都是针对与数据来进行操作增:我们要增加一条数据或者多条数据,首先第一点我们需要获取到增加的数据,然后通过后台提供的相关接口,把数据作为参数传递,当后台拿到我的数据后往数据库中追加这些数据,然后将最新的数据响应给我们,之后再进行渲染
删:首先获取到要删除的这条数据唯一标识可能是id可能是code,然后通过后台提供的相关接口,把这个标识作为参数传递,当后台拿到后就会删除这个标识相对应的数据,然后将最新的数据响应给我们,之后再进行渲染。删除功能只需要传id
改:首先获取到要修改的这条数据唯一标识可能是id可能是code,然后前端进行数据改动,然后通过后台提供的相关接口,把数据作为参数传递,当后台拿到我的数据后往数据库中修改这个标识相对应的数据,然后将修改后的数据响应给我们,之后再进行渲染。修改和新增的区别是修改功能一般会多传一个id,其他和新增一样
查:不要参数, 不需要传递任何参数,直接调用接口获取所有数据,需要参数,首先第一点我们需要获取到需要查询的关键字然后通过后台提供的相关接口,把这些关键字作为参数传递,当后台拿到这个关键字把相对应的数据响应给我们,之后再进行渲染
15. 阻止冒泡和默认行为
阻止默认行为e.preventDefault阻止冒泡e.stopPropagation
16. 什么是预解析?
把所有var和function提升到当前作用域最前面
17. js的执行机制
js是单线程,就是说,同一个时间只能做一件事,单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。将所有任务分成两种,一种是同步任务,另一种是异步任务。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务异步任务指的是,不进入主线程、而进入"任务队列"的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行
18. 哪些操作会造成内存泄漏?
- setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。
- 闭包
- 意外的全局变量
- 控制台日志
- 循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)
19. 什么叫优雅降级和渐进增强?
渐进增强 :针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
优雅降级 :一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。
20. ajax 的过程是怎样的?
1、创建XMLHttpRequest对象。2、设置请求方式和请求地址3、用send发送请求4、监听状态变化5、接收返回的数据
21. http常见状态码有哪些?
200 OK 正常返回信息302 Found 临时性重定向304 Not Modified 自从上次请求后,请求的网页未修改过400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求401 Unauthorized 请求未授权403 Forbidden 禁止访问404 Not Found 找不到如何与 URI 相匹配的资源500 Internal Server Error 最常见的服务器端错误503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)
22. 浏览器本地存储是怎样的?
localStorage 关闭浏览器数据存在 数据是本地硬盘 储存大小5m 同一个浏览器 不同窗口 数据可共享;sessionStorage 关闭浏览器数据不存在 数据是客户端 储存大小5m 数据不可共享
23. null和undefined的区别?
null是一个表示"无"的对象,转为数值时为0undefined是一个表示"无"的原始值,转为数值时为NaN当声明的变量还未被初始化时,变量的默认值为undefinednull用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象
24. 前端性能优化有哪些
1、代码层面:避免使用css表达式,避免使用高级选择器,通配选择器。2、缓存利用:缓存Ajax,使用CDN,使用外部js和css文件以便缓存,添加Expires头,服务端配置Etag,减少DNS查找等3、请求数量:合并样式和脚本,使用css图片精灵,初始首屏之外的图片资源按需加载,静态资源延迟加载。4、请求带宽:压缩文件,开启GZIP,
25. HTTP 与 HTTPS 区别
- HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS 数据传输过程是加密的,安全性较好。
- 使用 HTTPS 协议需要到 CA 申请证书,一般免费证书较少,因而需要一定费用。
- HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
- http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
- HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以, HTTPS 比 HTTP 要更耗费服务器资源。
26. 如何实现浏览器内多个标签页之间的通信?
调用localstorge、cookies等本地存储方式
27. 请说出三种减少页面加载时间的方法。
1.优化图片 2.图像格式的选择(GIF:提供的颜色较少,可用在一些对颜色要求不高的地方) 3.优化CSS(压缩合并css,如margin-top,margin-left...) 4.网址后加斜杠(如www.campr.com/目录,会判断这个“目录是什么文件类型,或者是目录。) 5.标明高度和宽度(如果浏览器没有找到这两个参数,它需要一边下载图片一边计算大小,如果图片很多,浏览器需要不断地调整页面。这不但影响速度,也影响浏览体验。当浏览器知道了高度和宽度参数后,即使图片暂时无法显示,页面上也会腾出图片的空位,然后继续加载后面的内容。从而加载时间快了,浏览体验也更好了。)6.减少http请求(合并文件,合并图片)。